Releases: lemmon/garner-cms-php
Release list
v0.6.0
CLI commands for inspecting pages, toggling drafts, generating ids, and store add/count.
Highlights
id:generate— print one or more ids from the project's configured generatorpage:list/page:show— inspect the page tree and a single page without hydrating the full sitepage:draft/page:publish— toggle a page's draft flag in+page.jsonstore:add/store:count— CLI twins ofStore::add()and a prefix count- Case-sensitive descendant traversal —
ContentIndex::descendants()no longer matches unrelated subtrees via SQLite's case-insensitiveLIKE
See CHANGELOG.md for the full list.
v0.5.0
Draft preview links, page-tree parent traversal, and a breaking validator bump for actions.
Highlights
- Draft preview links — unpublished pages can be shared via
draft_previewin+page.json(?preview=) or a one-timepage:preview --opentoken - Page parent/ancestors —
Page::parent()andPage::ancestors()walk the tree upward; draft visibility now cascades to descendants ActionResult::invalid()— sugar for thelemmon/validatortryValidate()handofflemmon/validator^0.17 — breaking change for actions that use the validator directly (tryValidate()now returns a flatlist<ValidationError>)
See CHANGELOG.md for the full list.
v0.4.1
Fix for production deploys where a .env without APP_ENV silently flipped the environment to development.
Highlights
- Dotenv
APP_ENVdefault aligned with host check —boot/app.phpno longer hardcodes'development'; it uses the same localhost detection asconfig/app.php(Env::isLocalhost()), so non-localhost deploys withoutAPP_ENVstay production
See CHANGELOG.md for the full list.
v0.4.0
Recomputable site-wide caching and a single deployment cache command.
Highlights
- Disposable application cache —
$app->cache()with PHP serialization, TTL,remember(), and owner-only SQLite underruntime/cache/data.sqlite - Unified
cache:clear— clears both compiled Twig templates and application cache values; each layer is attempted independently and failures surface as a nonzero exit status
See CHANGELOG.md for the full list.
v0.3.0
Durable site data and cleaner request APIs — the persistence half of page actions.
Highlights
- Key-value store —
$app->store()with JSON values instorage/store.sqlite, atomicadd(), prefix listing, shared-host hardening, andstore:*CLI commands - Query parameter accessors —
Request::queryParam()andqueryParams()for routine reads without hand-rolledparse_str()guards - Clearer Request naming —
query()→queryString(),baseUrl()→origin()(behavior unchanged)
See CHANGELOG.md for the full list.
v0.2.0
Form handling, per-visitor state, and safer POSTs — the write side of Garner pages.
Highlights
- Sessions —
$app->session()with lazy activation, flash messages, pluggableFileSessionStore, andsession:gc - Page actions (
+action.php) — write-side POST handlers withActionResult::failure()/redirect(), method-aware dispatch, and htmx-aware redirects - Template fragments — optional failure fragments for in-place htmx form re-renders
- Origin-check CSRF — on by default for form POSTs; stateless, router-enforced
- Request & response primitives — HttpFoundation-backed
Requestinstance, headers/cookies onRenderedResponse - Symlinked installs —
GARNER_PROJECT_ROOTensures the consumer project's autoloader loads correctly
See CHANGELOG.md for the full list.
v0.1.0
Initial release of Garner — an agent-first, flat-file PHP CMS.
Content lives as plain files on disk, the directory tree defines routes, and pages render through Twig. No proprietary content format to learn.
Highlights
- Filesystem routing with canonical paths and route endpoints
+page.jsonentry contract with optional validated fields- Derived SQLite route index with schema-version auto-heal
- Draft/published model and Laravel Collections query API
- Page-owned media with content-hashed public URLs
- Twig rendering with Markdown, co-located templates/controllers
- CLI (
reindex,cache:clear,validate,page:create) - Site-wide extension hooks and Dotenv support
- Quality gate via
composer check(Mago, PHPStan, PHPUnit)
See CHANGELOG.md for the full list.