Changes for version 0.03 - 2026-08-07

  • Punk::Model::DBIx::Loop, a non-blocking model backend. The same six-method contract, the same SQL and the same result shapes as Punk::Model::DBI, but every method returns a Punk::Future and the statement runs on DBIx::Loop over the worker's own event loop.
  • It runs on DBIx::Loop's C ABI (dbil_abi.h, via ExtUtils::Depends)
  • Fixed Punk::Model's delegation returning the caller's own arguments alongside the backend's result.
  • Punk::Model::DBI is ~40% faster per statement: quote_identifier and the fixed-shape get/delete SQL are memoised on the pooled connection instead of rebuilt every call. A get is 2.05us against 3.61us. The table is part of the statement cache key - the cache is shared by every model on a dsn.
  • Add the `markdown` mount/keyword: point it at a nested directory of .md files and get a documentation site. Navigation reflecting the tree, a per-page table of contents from the headings, syntax highlighting, ranked search, and the images sitting alongside the markdown served as static files.
  • The site is built at boot. The tree is walked, every page is rendered through Markdown::Simple and wrapped by Template::Stencil, the search index is filled, and the finished bytes are frozen. A request is then a hash lookup and a triplet, with no markdown parse, no template render and no Perl frame. `reload => 1` re-renders a page whose source has changed, for the edit loop under `punk dev`.
  • Refactor the stat / conditional-request / sendfile half of punk_static.h out as ps_serve_file, so the markdown mount serves the assets in its tree through the same code rather than a second implementation that would drift from it.

Modules

a MVC web framework
the per-application registry and boot compiler
cross-origin resource sharing
single-use CSRF tokens
the subcommands behind the punk tool
YAML configuration with secrets kept out of the file
the per-request object
base class for Punk controllers
an async result that runs on the loop, or blocks
scaffold a new Punk application
a level-based logger
the storage-agnostic model tier
the default DBI backend for Punk models
a non-blocking backend for Punk models
a directory of markdown as a documentation site
the api mount: spec-first operations
base class for Punk plugins
a lazy wrapper over the PSGI environment
a response builder
the compiled-at-boot route tables (XS)
the handle an under returns
a Server-Sent Events stream
signed cookie sessions
serving files from a directory
the outbound HTTP agent on the context
an uploaded file from a multipart form
the Template::Stencil view engine
the pluggable view engine registry (XS)
a WebSocket connection
pub/sub groups of WebSocket connections