v0.11.0
23 October 2026
Visitor prefs, the {cache} tag, an origin check in place of CSRF tokens, and a reworked admin editing flow.
Added
$app->prefsstores visitor preferences in a cookie. Declare them in config as"prefs": {"theme": ["default", "dark"]}: slug keys, the first value the default. A cookie only ever yields a declared value, and a visitor holding any pref is not served cached pages.Cookiein the Toolkit reads, sets and forgets cookies.{cache 'name', 300} ... {/cache}keeps a region of a template in the fragment cache for 300 seconds.key:replaces the page URL and query that otherwise scope it.- The
emailfieldtype. San::term()for search input,Str::wordCount().@uicomponents take the shared item shape: breadcrumbs, footer (with anendslot), stats (with direction), hero (buttons use the button partial), card (anicon, andlink: 'card'for a whole-card link) and list (badges, with descriptions stripped of tags).menutakestrail: truefor a strip of section tabs.- Admin: reorder pages by dragging in the tree, one-click publish in the statusbar, rename, move and delete in the edit menu, the new-page form in the edit panel, and field errors shown inline.
Changed
- CSRF tokens are replaced by an origin check.
Request::isCrossOrigin()rejects a browser request from another origin usingSec-Fetch-Site, elseOrigin, and the session cookie isSameSite=Lax.SessionRoot::csrf(),requireCsrf()andverifyCsrf()are removed, and forms no longer carry a_csrffield. - New child pages are limited to the views a section lists.
- Every collection item needs a page:
create()rejects an emptyparent. This reverses the item with no page added in v0.10.0. - A file field on a collection item attaches files of its page.
- The new-user form is built from user fields, and the remaining admin forms use the standard field UI.
- The admin login redirects through its own route.
selectposts its keys, and deleting warns when locked pages are beneath.
Comments
No comments yet. Be the first!
Loading form…