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.
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:
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.Technical risk:
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.Key questions to resolve before committing:
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):
Compatibility notes:
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.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:
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.
How can I help you explore Laravel packages today?