Updates
<p>What changed in each PhlatPage release.</p>
Current state
Alpha. The latest release is v0.5.2.
The core framework is built and running: pages as JSON folders, a SQLite registry with a query DSL and full-text search, a per-page file store with image variants, and fieldtypes including the stack, blocks, repeater and collection containers. Git-backed drafts, publish and revisions are part of core. Locked records are enforced, and anything an addon ships is read-only to the CMS. Built-in addons cover the admin, the CLI, Clockwork debugging and a UI component set.
Tests cover the Toolkit classes and the core system: pages, routing, the registry, files, locking, page moves and addon mounts. The built-in addons have none yet.
Roadmap
- Stabilize the admin UI
- Add test coverage for the built-in addons
Each entry below covers one tagged release.
-
<p>The release tasks are renamed: phlat:tag tags and pushes, phlat:release publishes the Forgejo release.</p>
-
v0.9.2 19 Oct 2026<p>The cache and History's deploy key move out of data/storage into data/cache and data/git.</p>
-
v0.9.1 19 Oct 2026<p>composer.lock is tracked, and backup:create reports what it is doing.</p>
-
v0.9.0 19 Oct 2026<p>Collection items move out of per-item folders into one SQLite database per collection field, which is never in git.</p>
-
v0.8.1 19 Oct 2026<p>collection:export and Csv are removed, and Record::create() requires a guard.</p>
-
v0.8.0 19 Oct 2026<p>Blocks can opt into a server-side fragment cache, collections gain count, sum and prune, and a registry rebuild refuses other requests with a 503 instead of exposing a half-built index.</p>
-
v0.7.9 18 Oct 2026<p>Every record is created through Record::create(), so two creators of the same slug or uuid can't both win.</p>
-
v0.7.8 18 Oct 2026<p>Saves lock against concurrent writers, the admin uploads several files at once with a progress bar, and the edit panel remembers its tab.</p>
-
v0.7.7 17 Oct 2026<p>Outbound Http requests start at once and run concurrently, and their responses are read lazily.</p>
-
v0.7.6 17 Oct 2026<p>A file is public exactly when a template has asked for its URL, recorded in the registry instead of the file's index.json.</p>
-
v0.7.5 17 Oct 2026<p>The login URL comes from the mounted login page, and the PHP memory limit drops to 64M.</p>
-
v0.7.4 14 Oct 2026<p>env.json and env.cli.json move back to data/.</p>
-
v0.7.3 6 Oct 2026<p>Hidden belongs to Page, and a collection item has no published or hidden flag of its own.</p>
-
v0.7.2 6 Oct 2026<p>A page with no published key in its index.json is live.</p>
-
v0.7.1 6 Oct 2026<p>Admin saves are recorded in History automatically, and the Changes page becomes a History page with one Sync button.</p>
-
v0.7.0 5 Oct 2026<p>The registry search index is keyed by registry id, and a rebuild no longer takes quadratic time.</p>
-
v0.6.2 5 Oct 2026<p>URLs are limited to lowercase slugs and file names, error messages and URL fields are locked down, and registry queries escape LIKE wildcards.</p>
-
v0.6.1 3 Oct 2026<p>A field's context (path, uuid, page, view, url) is passed apart from the options its author wrote.</p>
-
v0.6.0 3 Oct 2026<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>
-
v0.5.4 3 Oct 2026<p>A site's override of an addon view now gets the site's global controller data.</p>
-
v0.5.3 3 Oct 2026<p>Pages get a published flag and an access limit that visitors and queries both respect, and the admin gains a page Settings tab, a ⌘K search palette and page status lights.</p>
-
v0.5.2 1 Oct 2026<p>The page tree shows published, draft, uncommitted and locked state as four status dots.</p>
-
v0.5.1 1 Oct 2026<p>Locked records and addon-shipped pages are enforced, pages can be moved, the query engine is split out of the registry, and fields gain previews, a pages fieldtype and color palettes.</p>
-
v0.5.0 30 Sep 2026<p>Git history moves into core, addons are referenced by alias and mounted from config, and the global helper functions become template functions.</p>
-
v0.4.5 30 Sep 2026<p>The edit panel follows preview navigation, and a draft flag guards unsaved changes.</p>
-
v0.4.4 30 Sep 2026<p>The admin navigation is rebuilt around a page tree, a page picker and dual panels, and dead page routes are removed.</p>
-
v0.4.3 30 Sep 2026<p>The dev image moves to Alpine and compose pulls it prebuilt, and resolveField() keeps its underscore context keys again.</p>
-
v0.4.2 30 Sep 2026<p>The admin is reorganized: browse becomes edit, search is its own page, and a nav bar replaces the toolbar links.</p>
-
v0.4.1 30 Sep 2026<p>Fixed the image publish task failing when more than one tag points at HEAD.</p>
-
v0.3.5 29 Sep 2026<p>Pages autosave drafts with a draft/published preview toggle, the Changes page gets diffs and bulk actions, and password becomes a fieldtype.</p>
-
v0.3.4 29 Sep 2026<p>Users get profile fields and avatars, the admin gets a profile page, and the first system tests land.</p>
-
v0.3.3 29 Sep 2026<p>The admin head gets a site override hook, and the logo moves to a top-level template.</p>
-
v0.3.2 28 Sep 2026<p>Before hooks now run on auto-rendered pages, the runtime image no longer bakes in site/, and the preview resizes without reloading.</p>
-
v0.3.1 28 Sep 2026<p>The release Docker image gets zip support so Composer isn't stuck without it.</p>
-
v0.3.0 28 Sep 2026<p>The hand-written docs browser is replaced by a live reference generated from PHP reflection, the runtime moves to FrankenPHP with optional worker mode, and a self-contained Docker image ships for releases.</p>
-
v0.2.5 28 Sep 2026<p>The git addon gets its own SSH deploy key so push/pull/fetch don't depend on a human's credentials, a hand-written docs browser lands in admin, and the current release tag shows on the dashboard.</p>
-
v0.2.4 28 Sep 2026<p>A substantial admin UI overhaul: a real icon-grid dashboard homepage, a collapsible edit panel with a mobile/tablet/desktop preview toggle, full git branch and remote management from the Changes page, and per-action permission checks across nearly every admin write route.</p>
-
v0.2.3 28 Sep 2026<p>registry:check gains drift detection and a --heal flag, and the reactive heal added last release now keeps the field index in sync too.</p>
-
v0.2.2 28 Sep 2026<p>The Souin HTTP cache layer is dropped for standard Cache-Control headers, full registry rebuilds now commit in chunks, and pages get a cheap opportunistic registry heal.</p>
-
v0.2.1 28 Sep 2026<p>A one-line gitignore fix for paths the data/ move left stale.</p>
-
v0.2.0 28 Sep 2026<p>Runtime state - pages, users, the registry, file variants - moves out of site/ into a new sibling data/ root, a site-wide Changes page adds publish/discard for pending edits, and images drop their old eager-mirror-to-disk behavior.</p>
-
v0.1.4 25 Sep 2026<p>Click-to-edit lands: clicking an annotated field in the live preview jumps straight to it in the edit form, plus a datetime string-conversion fix, a required user-role select, and bun dropped from the JS toolchain.</p>
-
v0.1.3 25 Sep 2026<p>A big admin-UX pass: Cmd/Ctrl+K spotlight search replaces the sidebar, per-file metadata fields become a general mechanism, drag-and-drop lands for uploads and reordering, and Users gets the same master-detail treatment as Views.</p>
-
v0.1.2 23 Sep 2026<p>The CLI ships in-tree as a built-in addon, Views and Fields merge into one admin screen, Addons folds into a new System page, and a Latte bug that dropped trailing markup gets fixed.</p>
-
v0.1.1 23 Sep 2026<p>Field definitions drop out of the registry, and the experimental qbixserver dev server is gone.</p>
-
v0.1.0 14 Aug 2026<p>File-type guards tighten - icons are never treated as resizable images, and forcing an image type on a non-image file now fails loudly.</p>
-
v0.0.73 14 Aug 2026<p>An ASCII slug helper, case-insensitive string replace, and a guard against pointing Phlat at the wrong root - plus an experimental bundled dev web server.</p>
-
v0.0.72 25 Jul 2026<p>Session idle timeouts, a Clockwork CLI fix, and a symlink-safe entry point for shared-dir deploys.</p>
-
v0.0.71 16 Jul 2026<p>Object, blocks, and stack fields get full admin sub-field editing, and collections get a paginated manage panel.</p>
-
v0.0.70 15 Jul 2026<p>Registry admin table switched to infinite scroll, and standard-sized UI controls restored in a few admin panels.</p>
-
v0.0.69 15 Jul 2026<p>App-level HTMX response wrappers, a new View class for editable view definitions, addon-scoped @id/ fieldtype references, and cascading page deletes.</p>
-
v0.0.68 10 Jul 2026<p>Image transform presets can now be layered and combined with literal overrides.</p>
-
v0.0.67 10 Jul 2026<p>Admin addon management UI, an autosave data-integrity fix, and per-option image format control.</p>
-
v0.0.66 8 Jul 2026<p>Blocks and stack fieldtypes, dot-path registry queries, a tightened image DSL, and a bug that dropped page/user status fields.</p>
-
v0.0.65 8 Jul 2026<p>FieldTypeCollection::items() returns a populated collection directly instead of requiring a second lookup loop.</p>
-
v0.0.64 8 Jul 2026<p>Memoized collection item lookups, batched registry gets, and a mime type fast path for images.</p>
-
v0.0.62 8 Jul 2026<p>Fixed PageImage::base64() producing output inconsistent with what a live request serves.</p>
-
v0.0.61 8 Jul 2026<p>Faster SQLite writes for cache and registry, skipping redundant variant writes.</p>
-
v0.0.60 8 Jul 2026<p>Custom fieldtype metadata fields, a per-request CSP nonce, and addon loading split out of App.</p>
-
v0.0.59 8 Jul 2026<p>Fixed nested and hyphenated view names resolving to the wrong controller class.</p>
-
v0.0.58 8 Jul 2026<p>Nested database transactions and scoped, resumable registry rebuilds.</p>
-
v0.0.57 7 Jul 2026<p>File operations now accept a parent UUID for files owned by collection items.</p>
-
v0.0.56 7 Jul 2026<p>Per-request registry caching, item identity scoped to parent pages, and a faster file mirror sweep.</p>
-
v0.0.55 7 Jul 2026<p>Addon listing helper and a fix for SVGs being misclassified as raster images.</p>
-
v0.0.54 7 Jul 2026<p>Batched registry lookups when hydrating page collections, cutting N+1 queries.</p>
-
v0.0.53 7 Jul 2026<p>App-level SQLite cache, image effects and lifecycle hooks for collection items, and file-identity fixes for subdirectory-stored files.</p>
-
v0.0.52 6 Jul 2026<p>App-level SQLite cache, addon-provided fieldtypes and fields, auto-merged fragment controller context, and router/slug fixes.</p>
-
v0.0.51 6 Jul 2026<p>FieldTypeHttp for live API field values, image effects (invert, blur, brightness, contrast, gamma, pixelate, sharpen), item lifecycle hooks, and HTTP/2 curl fix.</p>
-
v0.0.50 6 Jul 2026<p>Items indexed in full-text search, deterministic item UUIDs, FieldTypeCollection::has() and item(), and single-level sharded storage.</p>
-
v0.0.49 5 Jul 2026<p>Item shard path revised to two-level, FieldTypeCode language option, Dir symlink fixes, Hx::trigger JSON encoding, and resize condition fix.</p>
-
v0.0.48 5 Jul 2026<p>File support for collection items : ItemFile, ItemImage, and nested public URLs under the parent page.</p>
-
v0.0.47 5 Jul 2026<p>FieldTypeCollection::new() moved onto the fieldtype itself, RecordCollection::withContext/new removed, and git auto-commit disabled by default.</p>
-
v0.0.46 5 Jul 2026<p>FieldTypeCollection and Item for registry-backed collection fields, {fragment} and {companion} Latte tags, and hidden/status/locked moved to the Record base class.</p>
-
v0.0.45 5 Jul 2026<p>CLI config override via env.cli.json.</p>
-
v0.0.44 5 Jul 2026<p>PageFiles::store split into store and upload, App::instance boots eagerly, and Page::new always calls save.</p>
-
v0.0.43 4 Jul 2026<p>Db::listen, F::listen, and App::onEmit observability hooks; Clockwork addon reworked to use Clockwork's Log tab throughout.</p>
-
v0.0.42 4 Jul 2026<p>Named-parameter callable dispatch, per-page session scoping, config-driven addon load order, TemplateFields base+type merge, and functions.php cleanup.</p>
-
v0.0.41 3 Jul 2026<p>Field/FieldValue split, Session/SessionRoot scoped-access refactor, class renames throughout, Collections namespace, Res::ensureCacheControl backstop, and cache addon.</p>
-
v0.0.40 1 Jul 2026<p>Permission system, Page::new() for programmatic page creation, Field::validate(), weighted and fuzzy FTS5 search, and fieldtype search metadata.</p>
-
v0.0.39 30 Jun 2026<p>SSE toolkit, outbound HTTP client, FTS5 full-text search in the registry, page navigation helpers, image dimension metadata, and Api\Client.</p>