v0.44.0
3 November 2026
Browsers can now keep cached pages and fragments, the cache gets one get() and set(), and the registry, collection and page file APIs take the query DSL where they had near-duplicate methods.
Added
- A view's
{"cache": {"ttl": N, "client": M}}and{fragment 'name', cache: N, client: M}let a visitor's browser keep the render for up toMseconds without asking, cut to what is left of the server entry. {fragment 'name'}...{else}...{/fragment}renders the body only on the:namerequest and the{else}placeholder everywhere else.Res::cache()setsCache-Controlfrom named parts:public,maxAge,sharedMaxAge,revalidate,immutable.path~=blogin a registry query matches the page atblogand every page beneath it;path~=is the whole tree.- Clockwork logs a warning when a page or fragment is served from the cache, and reports deprecations as warnings.
Changed
Cachehas oneget()and oneset().getFor(),setFor(),getVaried()andsetVaried()are gone: useget($key), andset($key, $value, $ttl, per: $level, vary: true).perno longer defaults touser.- The page-cache methods moved from
Appto$app->kept:cacheMark()ismark(),cacheLevel()islevel(),shortenPage()isshorten(),clientFor()staysclientFor(), andkeepFragment($client)isfragment($client, $cache, $key). Registry::delete(string $query): intreplacesremove()anddeleteSubtree(), reading the query asfind()does:delete('path~=blog'),delete('type=user,uuid=user:ada').countRows()is renamedcount().Registry::rows($query)returns every match and pages withlimit=andoffset=in the query. Its$limitand$offsetparameters andallRows()are gone.Collection::delete(string $query, bool $force = false): inttakes the DSL and returns how many went.delete($uuid)becomesdelete("uuid={$uuid}");deleteParent()anddeleteParents()becomedelete('parent=...', force: true).PageFiles::clearVariants()also wipes a file's public mirrors, replacingclearMirror().clearPublic($url, rows: false)replaceswithdraw()and removes the folder once it is empty.collection:prunedeletes throughCollection::delete()in batches of 500 and skips locked items.Ses::destroy()forgets the session cookie, so a browser can't replay a signed-in visitor's kept page after sign-out.- Clockwork no longer logs the site config.
npm run buildbuilds the site theme and HTMX bundle as well as the admin, andnpm run watchwatches the site theme.
Fixed
- An SVG colour swap no longer warns on a colour it can't read.