artisanpack-ui/cms-framework
A modular CMS framework for Laravel that provides the building blocks for content-driven applications, including admin UI components, content management scaffolding, and customizable backend tooling to speed up development.
theme.json template-part areas, block-fork selector parity — which is exactly the long tail a product team would otherwise fund for a year. Adopting the package buys that tail instead of building it.GlobalStylesEmitter fixes mean a design system authored in theme.json (font sizes, colors, gradients, font families, per-block styles) now actually reaches the canvas for letter–digit slugs (h1–h6, gray900) and for forked blocks. Product decision it unlocks: ship one token set that renders consistently in the editor and on the front end, without a designer hand-maintaining CSS.query-{queryId}-page plus include/rand ordering support means landing pages, archives, and "related content" modules can compose multiple loops on one template without pagination collisions. This removes a real ceiling on page-builder layouts.area from theme.json, so a navigation-overlay part works on first render rather than only after a round-trip through the Site Editor. That turns "mobile menu ships with the theme" from a support ticket into a feature.post-title, post-excerpt, post-terms inside a record's own content now resolve to that record, with recursion guards for post-content and self-listing loops. This is the difference between "content editors can build detail pages" and "they can't."status block attributes are explicitly treated as untrusted — with resolveTrusted() as the opt-in for authorized hosts. This is a default-safe decision we can point to in a security review rather than a per-project hardening task.v12/v13, so plan a cache warm/flush on deploy.Consider it when:
theme.json semantics without running WordPress.include, rand).Look elsewhere or proceed with care when:
status block attributes. Any existing template that depended on the old behavior needs QueryRuntime::resolveTrusted() wired into an authorized path, or it will silently lose rows. Treat this as the one genuine migration item.theme.json-shaped theming model — the package's value concentrates in that paradigm, and its recent releases are almost entirely invested there.core/* and artisanpack/*; selector emission for other namespaces is explicitly unchanged, so verify your styles still apply.To executives: This is a maintenance release on the CMS framework, and the headline is that it closes the gap between what designers configure and what the site actually renders. Preset typography and color classes for digit-bearing slugs (h1–h6, gray900) now apply correctly, forked blocks pick up their styles, and theme-shipped navigation overlays work on first load instead of requiring a manual editor save. In product terms: fewer "the design doesn't match" defects, and page templates can now host multiple independently paginated content loops — a capability we'd otherwise have to build. There are no breaking API changes; the one behavioral change is that content loops now default to published-only, which is the safer default and matches what a reader-facing site should do.
To engineering: Six fixes, no deprecations, no removals. The two that need attention at deploy time are (1) QueryRuntime::resolve() now filters pages and custom types to published and ignores status block attributes — audit any template that expected drafts in a loop and route it through the new resolveTrusted() inside an already-authorized request; and (2) GlobalStylesEmitter cache keys moved to v12 and v13, so flush and warm the emitter cache as part of the rollout. The remaining changes are additive correctness work: WordPress kebab-case preset class aliasing, dual selectors for artisanpack/* block forks, entity passes running inside HasRenderedBlockContent::renderContent() with recursion guards, theme-file template parts reading area from theme.json, and per-loop pagination via query-{queryId}-page.
Recommendation: Adopt. Upgrade on the normal patch cadence, ship the cache flush alongside it, and give the published-only default one focused QA pass across archive, search, and related-content templates before it reaches production.
How can I help you explore Laravel packages today?