evolution-cms/evolution
Evolution CMS is an open source content management system and application framework built on PHP. It offers fast, lightweight site building with user groups, document management, snippets, and chunks for dynamic websites.
Architecture fit. The first thing to correct in the framing: evolution-cms/evolution is not a Laravel package — it is a complete, standalone CMS and application framework that happens to be assembled from Laravel 13 components (per the repo's own agent guide). It ships its own bootstrap, router, manager backend, document tree, template engine (chunks/snippets/TVs), plugin event model, and file/image managers. You do not composer require this into an existing Laravel application; you deploy it as the application. That makes it a fit only for greenfield sites where Evo is the docroot and content model, or for content-first sites with a thin integration surface. It is a poor fit for teams expecting to extend an existing Laravel codebase with CMS capabilities — the two bootstraps cannot coexist in one process, and attempting to merge them means owning a fork.
Integration feasibility. Realistic integration paths, in descending order of practicality:
/app and APIs, Evo owns /content and the manager; shared session or OIDC bridge for auth. Lowest coupling, but two deployments, two auth systems, two upgrade cadences.Technical risk.
MODX_* → EVO_* constant transition and added a deprecated:list command to find code slated for removal by semver; $modx is now marked deprecated. That is healthy engineering, but it means a breaking removal is scheduled, and the plugin/snippet API surface most third-party code touches is exactly what is being renamed.composer.json in assets/, not root, because root changes are lost on update. Root is managed via a merge plugin. Any dependency the team adds outside that convention survives only until the next manager-driven update.admin / Passw0rd123) are explicitly "not for production" — worth stating in any internal doc so nobody unpacks it into a shared environment.Key questions for the team.
Stack fit. Evo assumes Apache/nginx + PHP-FPM + MySQL/MariaDB or PostgreSQL, with SQLite supported and now well-tested enough to ship nightly builds on it. PHP 8.3 minimum, 8.4 recommended, 8.5 supported, 8.6 RC tested — a modern runtime floor, which is a genuine positive. Front it with a CDN or reverse cache and it behaves like any other PHP CMS. Do not expect it to slot into a container-per-service architecture without work: it writes to the filesystem (manager, cache, assets) and assumes a writable docroot.
Migration path.
MODX_* or $modx should be audited with deprecated:list and rewritten before the next major.Compatibility.
3.5.7 at time of writing) in a lockfile and treat upgrades as planned change windows, not background noise.composer.json; use the assets/ convention or a documented override that survives the updater. Verify after each upgrade that custom packages and vendor symlinks are intact — 3.5.7's fixes exist precisely because they previously were not.illuminate/* major versions in one Composer root is a guaranteed resolution fight.MODX_* → EVO_* removal will land at some future major; treat the deprecated list as a standing backlog item, not a one-time cleanup.Sequencing. Recommend a four-gate plan:
Maintenance. Cadence is frequent and patch-heavy: 3.5.4 through 3.5.7 in short succession, with a mix of security-adjacent fixes, PHP 8.4 deprecation cleanups, manager UX polish, and updater hardening. Budget roughly one planned upgrade cycle per quarter plus emergency patches. Each cycle: full DB backup, filesystem snapshot, changelog review against your custom snippets, staging rehearsal, post-upgrade check that custom Composer packages survived. That is a real recurring cost — call it 1–2 engineer-days per cycle at small scale, more if you carry custom modules.
Support. Community-only by evidence: forums (forum.evo.im), a Telegram group, and docs at docs.evo.im. No commercial SLA, no vendor escalation path, no evidence of paid support tiers. That is acceptable for internal or low-revenue sites; it is a material gap for anything customer-facing with uptime commitments. Internally, that means you need at least one engineer who can read the core well enough to patch a snippet or a plugin without upstream help.
Scaling. Standard PHP-FPM horizontal scaling applies: stateless web nodes behind a load balancer, shared MySQL/Postgres, shared or object-backed storage for uploads and cache. Session affinity or a shared session store is required for the manager. The "world's fastest" claim in the README should be treated as marketing; the engineering reality is OPcache plus JIT status visibility (added in 3.5.7) and per-element caching for chunks/snippets/plugins, which you can disable selectively when debugging — useful, but not a substitute for a page cache. For read-heavy public traffic, put a full-page cache or CDN in front; content freshness is then bounded by your cache invalidation policy, which you own.
Failure modes to plan for.
MODX_*, $modx, or TinyMCE4 legacy calls will break at some future major. Mitigation: run deprecated:list on every upgrade and keep the list empty.NO_SESSION has flip-flopped across patches (fixed, reverted, re-fixed in 3.5.4). Session-adjacent configuration changes deserve their own test case.Ramp-up. Expect 1–2 weeks before a competent PHP developer is productive and 4–6 weeks before they are genuinely fluent in the resource tree, TV binding syntax, chunk/snippet composition, and plugin event model. The mental model is idiosyncratic and pre-dates modern PHP framework conventions — a Laravel developer will find artisan commands present and be misled into expecting Laravel conventions everywhere else. Editor-side training is lighter, half a day, but the manager's legacy editors and file browsers will feel dated next to modern SaaS CMS tooling and may generate complaints.
Bottom line. Technically credible, actively maintained, modern runtime floor, and honest about its own legacy debt. But it is a whole platform, not a package, it carries copyleft obligations, and its adoption signal (257 stars, 0 dependents) means you are largely on your own. Recommend it only where the site is the product, the license is cleared, and one engineer can own the upgrade treadmill. Do not recommend it as a CMS layer bolted onto an existing Laravel application.
How can I help you explore Laravel packages today?