v0.6.0
<p>Worker mode, SSE and the admin Templates screen are removed, the ui addon becomes a set of daisyUI components, Clockwork does nothing unless debug is on, and the session classes split into login and scoped values.</p>
3 October 2026
Added
- The
uiaddon is a set of daisyUI components as Latte partials:{include '@ui/modal.latte', ...}. New components include avatar, badge, breadcrumbs, carousel, dropdown, filter, footer, indicator, join, modal, navbar, progress, rating, skeleton, steps, timeline, toast, tooltip, and form select, toggle, radio, range and file. - The converted components (button, alert, card, list, menu, dropdown, navbar, toast) share one vocabulary.
color,variant,sizeandicontake plain words,classandattrsare escape hatches, andsite/views/@ui/{name}.lattereplaces a shipped component. UiExtensionaddsitems(), which turns pages, a page collection or plain strings into the shared item shape (title, description, href, icon, meta, color, active, items).{include '@ui/menu.latte', items: $page->children()}needs no mapping.FieldValueSet::preview(): a collapsed container field lists its contents.- The
flatandunitglobal option fields. F::listen()callbacks fire for append, copy, move, delete, upload and symlink as well as read and write.F::clearStat()with no path clears the whole stat cache.- The admin reads pending changes from one
changes/statusroute (nav count, tree status, statusbar) instead of each controller asking git.
Changed
Sessionholds only scoped values and flash messages (get,set,has,delete,flash,pop). Login, CSRF and throttling live onSessionRoot($app->session), which has no values of its own.Session::set()loses its$lockedargument andunlock()is gone.- Clockwork registers nothing, stores nothing and serves no route unless
debugis on. It censors password-like keys in the GET, POST and session data it records, and its API is at/clockworkinstead of/clockwork/. - Field lookups are memoized and cleared when files are written, and so are object field definitions. One page view is shared per request (
App::pageView()). App::isEditor()is also true for the CLI, replacingApp::seesAll().FieldTypeStackencodes each entry's values with that value's own fieldtype.- The admin's repeater, blocks and stack routes are one set, and
ui/repeater-controls.latteis nowui/list-controls.latte. History::isAvailable()looks for a.gitfolder instead of running git.fieldtypes/{name}/index.jsonno longer takestitleordescription.min_lengthandmax_lengthare declared by the text fieldtypes only.Fieldis a plain read-only class, no longer aRecord.Registryowns theFieldIndex.
Fixed
clockwork:status,clockwork:pruneandclockwork:clearread Clockwork's JSON files. They looked for a SQLite database that no longer existed.
Removed
- FrankenPHP worker mode: the worker blocks in
phlat/Caddyfile, theworker.phpupload indeploy.php,App::beginRequest(),Registry::reset(),Registry::batchUpdatedAt()and the per-request resets inRecordCollectionand Clockwork. Toolkit\Sseand the page-save touch hook.- The admin Templates screen (
system/templates) and theview:fieldcommand.View,App::views(),App::view(),App::fields(),App::fieldNames(),App::fieldIndex()andFieldCollectiongo with them. - The
DirectSessionAccessRulePHPStan rule. - The example global fields
address,jobTitleandphone.
Comments
No comments yet. Be the first!
Loading form…