Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Cms Laravel Package

getkirby/cms

Kirby is a file-based CMS for PHP that stores content in flat files, so no database is needed. It combines an intuitive editing experience with a flexible, developer-friendly API and full customization, making it ideal for fast, secure, bespoke websites and apps.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Category correction (first-order finding): getkirby/cms is not a Laravel package — it is the Composer-distributed core of Kirby, a self-contained flat-file CMS with its own request lifecycle, router, DI container, and plugin system. There is no service provider, no facade, no config/*.php merge. Treating it as a "Laravel/PHP package" in the dependency-graph sense is the single largest source of wasted estimation effort. It belongs in the "PHP application we may host alongside Laravel" category, not the "library we composer require into app/" category.

Architecture fit: Good for content-shaped surfaces — marketing sites, docs portals, editorial microsites, brochureware, internal knowledge bases. Poor for anything that needs to live inside the Laravel HTTP kernel, share Eloquent models, or participate in Laravel's queue/event/auth contracts. Kirby's content model is files-on-disk (.txt + media per page); it deliberately has no database. That is a feature for editorial teams and a constraint for engineering teams expecting SQL-backed content.

Integration feasibility — three viable patterns:

  • Sibling app + reverse proxy (recommended). Kirby runs as its own document root under content.example.com or /guides; nginx routes by path prefix or subdomain. Zero code coupling, independent deploys, independent PHP upgrade cadence. Cost: two deployments, two auth systems.
  • Headless content source. Kirby exposes content via custom routes or plugins returning JSON; Laravel (or Inertia/Next) consumes it. Good when content is reused across a Laravel app and other channels. Cost: you build and own the content API contract and its cache invalidation.
  • Embedded front controller (discouraged). Bootstrap Kirby from a Laravel route and hand it the request. Technically possible, but you now have two containers, two error handlers, and two session mechanisms in one process. Only justify this if shared cookies are a hard requirement, and then do it behind a dedicated middleware boundary with no shared state.

Technical risk:

  • License is the headline risk. The NOASSERTION flag is not benign — Kirby is commercially licensed (per-project, tiered by revenue, with a free local-dev tier). Budget, procurement, and legal sign-off are on the critical path, and "free tier" must not silently leak into production. No license-expiry runtime failure, but non-compliance is a contractual exposure, not a technical one.
  • Dependents: 0 is almost certainly a data artifact of the subtree-split repo, not evidence of no adoption. Do not use it as a popularity signal in either direction; validate against Packagist install counts and the plugin ecosystem instead.
  • Flat-file concurrency. Writes are file operations without transactional isolation. Read-heavy traffic is fine and fast; concurrent editorial saves on the same page, or high-frequency programmatic writes, can collide. Acceptable for CMS workloads, disqualifying for anything queue-driven at volume.
  • Filesystem coupling and deploy model. Content and media live in writable directories. This is friction against immutable/ephemeral container builds — you need a persistent volume or a content-in-git pipeline, plus a media sync story.
  • Two identity systems. Kirby Panel users and Laravel users are separate. SSO is achievable via a custom auth plugin but is real, ongoing work.
  • Release date 2026-10-15 implies an active release train — positive for maintenance, but confirm the support window for the major you pin.

Key questions to resolve before committing:

  1. Who signs the license, at what tier, and does it cover all planned environments?
  2. Is the content surface genuinely separable from the Laravel product, or does it need shared auth/state? (If the latter, the cost curve bends sharply.)
  3. Does the operational team already run a two-app topology, or does this introduce a new one?
  4. What is the content volume and write concurrency ceiling over the next 24 months?
  5. Who owns the Panel UX and plugin surface — is there an existing CMS-savvy editor group?

Integration Approach

Stack fit: Kirby requires modern PHP (8.2+ on current majors) and Composer 2, so it is compatible with a typical Laravel shop's runtime — the runtime fits, the framework does not. Shared tooling that does carry over: PHP version pinning, Composer, PHPUnit/Pest discipline, static analysis, CI linting, and a standard nginx/PHP-FPM deploy shape. What does not carry over: Laravel's config, container bindings, auth guards, migrations, and queue workers.

Migration path (sequenced to minimize blast radius):

  1. Licensing and legal clearance — in parallel with everything else, but gating production. Confirm tier, seat/project count, and whether staging counts.
  2. Pilot on a non-critical surface — a docs portal or campaign microsite, not the primary product. Success criteria: editor onboarding time, page-render performance, deploy repeatability.
  3. Establish the content-in-git or persistent-volume pattern — decide once, because changing it later means re-authoring content storage and CDN invalidation logic. Git-tracked content gives reviewable diffs and one-click rollback; a volume gives non-technical editors autonomy. Pick based on who edits.
  4. Build the boundary — reverse-proxy routing rules, shared-nothing session policy, and (if headless) a versioned JSON contract with explicit cache TTLs.
  5. Only then consider deeper coupling (SSO plugin, shared search index, shared asset pipeline). Each of these is a discrete project with its own estimate.

Compatibility notes:

  • Requires writable content/, media/, site/, and thumbs/ — codify permissions in your deploy image and verify in a smoke test, because silent permission failures surface as blank pages, not errors.
  • PHP major upgrades are the main breakage vector; pin the Kirby major and upgrade deliberately, as you would a framework.
  • Panel is a Vue SPA served by Kirby — it needs its own CSP and asset-serving review if you have a strict security header policy.
  • No PSR-15 middleware stack to slot into; if you have a standardized middleware layer (auth, rate limiting, observability), it does not extend to Kirby routes.

Operational Impact

Maintenance: Low-to-moderate and largely predictable. Kirby's release cadence is steady with documented changelogs and upgrade guides; major versions land roughly every two years. The real maintenance surface is the plugin layer — third-party Kirby plugins are typically single-maintainer and vary widely in quality, so treat every plugin as an assumed future liability with a fork-and-own contingency. Core upgrades themselves are usually hours, not weeks.

Support: Commercial licensing typically includes vendor support at higher tiers — this materially de-risks the "who do we call" question that open-source CMS choices often leave unanswered. Verify the SLA against your incident severity definitions. Community support (forum, Discord) is active but not a substitute for a contractual channel on a revenue-facing site.

Scaling: Excellent for the workload it is designed for — content delivery is essentially file reads, which cache beautifully and can be pushed to a CDN at the edge. The ceiling appears on the write side, not the read side: concurrent editorial operations on the same page, large media uploads, and any programmatic bulk content mutation. If your roadmap includes high-frequency content generation (personalization, A/B variants, user-generated pages), that is a re-architecture, not a tuning exercise. Budget a cache-invalidation strategy from day one — stale content after an edit is the most common operational complaint.

Failure modes, ranked by likelihood × impact:

  • Filesystem permissions or disk exhaustion — highest probability; manifests as blank pages, missing images, or a Panel that loads but cannot save. Mitigate with permission assertions in CI, disk-usage alerting, and media pruning.
  • Stale cache / CDN invalidation gaps — editors "publish" and see nothing change. Mitigate with an explicit invalidation hook on save and a visible cache-bust indicator in the Panel.
  • Orphaned plugin — a dependency goes unmaintained across a PHP or Kirby major. Mitigate with a plugin inventory, a two-plugin budget cap, and an internal fork policy.
  • License non-compliance discovered late — procurement surprise at launch. Mitigate by clearing legal in step 1.
  • Two-app identity drift — users created in one system without the other, or stale permissions after offboarding. Mitigate with a single source of truth for identity, even if the Panel holds a mirror.
  • Concurrent write collision — silent content loss on simultaneous saves. Mitigate with editor concurrency guidance, revision history review, and backups of the content tree.

Ramp-up: A PHP-fluent engineer is productive in Kirby within a week for templating and within a month for plugin and hook work — the API is fluent and the docs are genuinely good. The real ramp-up cost is conceptual, not syntactic: engineers must unlearn Laravel instincts (no migrations, no ORM, no queue, no service container to lean on) and editors must learn a non-WordPress Panel, which is usually a pleasant surprise. Budget half a sprint of paired onboarding plus a written "how we do content here" runbook. The larger organizational risk is a team of Laravel specialists quietly treating Kirby as a second-class citizen and reintroducing coupling — name the boundary in the ADR and enforce it in code review.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console