Skip to content

Releases: lemmon/garner-cms-php

v0.6.0

Choose a tag to compare

@lemmon lemmon released this 20 Aug 13:51

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 generator
  • page:list / page:show — inspect the page tree and a single page without hydrating the full site
  • page:draft / page:publish — toggle a page's draft flag in +page.json
  • store:add / store:count — CLI twins of Store::add() and a prefix count
  • Case-sensitive descendant traversalContentIndex::descendants() no longer matches unrelated subtrees via SQLite's case-insensitive LIKE

See CHANGELOG.md for the full list.

v0.5.0

Choose a tag to compare

@lemmon lemmon released this 17 Aug 06:48

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_preview in +page.json (?preview=) or a one-time page:preview --open token
  • Page parent/ancestorsPage::parent() and Page::ancestors() walk the tree upward; draft visibility now cascades to descendants
  • ActionResult::invalid() — sugar for the lemmon/validator tryValidate() handoff
  • lemmon/validator ^0.17 — breaking change for actions that use the validator directly (tryValidate() now returns a flat list<ValidationError>)

See CHANGELOG.md for the full list.

v0.4.1

Choose a tag to compare

@lemmon lemmon released this 03 Aug 08:14

Fix for production deploys where a .env without APP_ENV silently flipped the environment to development.

Highlights

  • Dotenv APP_ENV default aligned with host checkboot/app.php no longer hardcodes 'development'; it uses the same localhost detection as config/app.php (Env::isLocalhost()), so non-localhost deploys without APP_ENV stay production

See CHANGELOG.md for the full list.

v0.4.0

Choose a tag to compare

@lemmon lemmon released this 24 Jul 18:03

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 under runtime/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

Choose a tag to compare

@lemmon lemmon released this 07 Jul 09:24

Durable site data and cleaner request APIs — the persistence half of page actions.

Highlights

  • Key-value store$app->store() with JSON values in storage/store.sqlite, atomic add(), prefix listing, shared-host hardening, and store:* CLI commands
  • Query parameter accessorsRequest::queryParam() and queryParams() for routine reads without hand-rolled parse_str() guards
  • Clearer Request namingquery()queryString(), baseUrl()origin() (behavior unchanged)

See CHANGELOG.md for the full list.

v0.2.0

Choose a tag to compare

@lemmon lemmon released this 05 Jul 16:03

Form handling, per-visitor state, and safer POSTs — the write side of Garner pages.

Highlights

  • Sessions$app->session() with lazy activation, flash messages, pluggable FileSessionStore, and session:gc
  • Page actions (+action.php) — write-side POST handlers with ActionResult::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 Request instance, headers/cookies on RenderedResponse
  • Symlinked installsGARNER_PROJECT_ROOT ensures the consumer project's autoloader loads correctly

See CHANGELOG.md for the full list.

v0.1.0

Choose a tag to compare

@lemmon lemmon released this 03 Jul 08:28

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.json entry 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.