expressionengine/coilpack
Coilpack bridges ExpressionEngine and Laravel, letting you build and extend EE sites with Laravel routing, Blade views, Eloquent models, and Composer packages while preserving ExpressionEngine templates, add-ons, and existing content.
Architecture fit. Coilpack is a bridge, not a platform. It lets a Laravel application render ExpressionEngine templates and consume EE data (channels, entries, members) through Laravel routing and the Blade/view layer, while EE continues to own its MySQL schema and add-on ecosystem. That makes it a fit only for a specific architecture: an existing EE site where the team wants to build new front-end surfaces in Laravel without a big-bang CMS migration. It is a poor fit for greenfield projects, for teams with no EE footprint, or for anyone expecting Coilpack to replace EE. The value proposition is coexistence and incremental strangling of EE, not modernization in one step.
Integration feasibility. Mechanically straightforward: composer-install into a Laravel app, point it at the EE database and config, and expose EE-rendered templates through Laravel routes. The hard parts are not installation but boundaries — session/auth unification between EE members and Laravel users, routing ownership between the two stacks, asset and URL handling, and cache invalidation spanning two systems. Any integration plan needs an explicit decision on where identity lives and which system owns each URL.
Technical risk. High relative to typical Laravel packages, driven by three factors. First, adoption is very low (28 stars), so edge cases are undiscovered and community answers will be scarce. Second, it is inherently coupled to two release tracks: an EE upgrade or a Laravel major bump can break the bridge, and the compatibility matrix is narrow by nature. Third, the bridge sits on EE's template parser and database schema, both of which are internal contracts you do not control. Maintainer concentration is a real risk — this is effectively a first-party package from the EE team, which helps, but it also means its roadmap follows EE's commercial priorities, not yours.
Key questions.
Stack fit. Best suited to a Laravel 9/10/11 application that must front an EE 6/7 install, in an organization that already runs both. It fits a monolith-with-a-bridge deployment (same host or same VPC, shared database) far better than a distributed or API-first architecture. If the target state is headless or service-oriented, Coilpack is the wrong tool — you would be better served extracting EE content via its API or a one-way ETL into Laravel.
Migration path. Treat Coilpack as a strangler-fig seam. Define the URL and feature surface you intend to move first (typically marketing pages and read-only channel content), keep EE as the source of truth for content, and progressively reimplement high-value routes natively in Laravel. Establish early whether content stays in EE and is read through Coilpack, or is migrated into Laravel-native models — these are different projects with different end states, and mixing them without a decision produces a permanent hybrid nobody owns.
Compatibility. Pin both sides. Freeze the EE version and the Laravel version at integration time, record the exact Coilpack tag in composer.lock, and require every EE or Laravel upgrade to be validated against a smoke suite that exercises each Coilpack-backed route. Because releases are infrequent and the user base is small, assume you are the first to hit a given version combination; budget for reading the package source rather than relying on documentation.
Sequencing.
Maintenance. You inherit two upgrade cadences, two dependency trees, two configuration systems, and one shared database schema. Expect recurring work at every EE release and every Laravel major — this is not a package you install and forget. Assign a named owner; unowned bridges rot fastest.
Support. Formal support is thin: GitHub issues from a small maintainer team, supplemented by EE's commercial support channel, which will not cover Laravel-side problems. Escalation paths are unclear for issues that straddle the boundary, which is precisely where most incidents will occur. Do not plan on community Stack Overflow answers at this adoption level.
Scaling. Scaling characteristics are the worse of the two systems. EE's template parser adds per-request overhead that does not benefit from Laravel's opcache and queue ecosystem, and the shared database becomes a contention point as Laravel-side traffic grows. Horizontal scaling works only if sessions, caches, and file assets are externalized — two applications with separate local caches on the same data will drift. Plan a caching layer that both systems respect, and treat EE-rendered routes as the throughput ceiling.
Failure modes. Watch for: Coilpack falling behind a Laravel or EE security release, forcing an emergency pin or a rushed upgrade; EE add-ons misbehaving because they expect EE's native request lifecycle; divergent cache TTLs producing stale content between the two front-ends; session bleed or silent auth failures at the boundary; database connection exhaustion from two pools; and template parse errors surfacing as Laravel 500s with EE-flavored stack traces that confuse on-call. Add explicit health checks for both halves and alert on each independently.
Ramp-up. Steep and dual-skilled. Engineers need working knowledge of EE's template tag syntax, channel/entry model, and member system plus Laravel routing, middleware, Blade, and Eloquent. That combination is uncommon and getting rarer as EE experience ages out of the market. Budget for documentation of the boundary — where EE ends and Laravel begins — and assume several weeks before a competent Laravel developer is productive on EE-backed routes. Given the low adoption and single-maintainer risk, keep an internal fallback plan for replacing Coilpack with direct EE API consumption if the package stalls.
How can I help you explore Laravel packages today?