area17/twill
Twill is an open source Laravel package for building custom, beautiful CMS admin consoles fast. It standardizes common publishing features with pre-built Vue.js UI components, no lock-in, and full flexibility.
Architecture fit. Twill is not a standalone CMS — it is a Laravel package that sits inside an existing Laravel application and generates a custom admin console on top of your Eloquent models. That is the central architectural fact for a TPM: adoption is a composition decision, not a procurement decision. Twill standardizes the CRUD layer (controllers, form and table builders, media/file libraries, browsers, repeaters, blocks, revisions, permissions, settings sections, navigation) while explicitly leaving the data model, the front end, and the delivery layer to us. The README's framing — "no lock-in, create your data models or hook existing ones," "no front-end assumptions... or headless," "turn off features you don't need" — maps cleanly onto a Laravel monolith with Blade views, a Laravel API with a separate SPA/mobile client, or a hybrid. The 3.x line adds meaningful platform depth: an OOP table builder, a Blade-component-based form builder, nested blocks, repeaters with pivot data and browse functions, morphable browser fields, swappable role enums, configurable submit options and draft-over-published revisions. Architecturally this is a strong fit for any team already standardized on Laravel; for a non-Laravel stack it is a non-starter and should be closed out early.
Integration feasibility. Low-to-moderate for a greenfield Laravel app (Composer install, publish config/migrations, artisan twill:module:make scaffolds models, controllers, routes and navigation entries); moderate for an existing Laravel app that already has an admin surface, where route namespacing, auth guard overlap, table-prefix collisions and duplicated media handling become the real work. The package is self-contained and ships precompiled front-end assets, so it does not force our build pipeline to change — but custom block and form components do require building against Twill's own asset pipeline and manifest, which is a distinct toolchain skill. 3.0.0 introduced two breaking changes with long tails: the Admin → Twill namespace rename and the twill_ table prefix on package tables. Neither is hard in isolation; both make the "we'll adopt it later" option more expensive the longer we wait.
Technical risk.
opportunity: 39.22 against a 78.30 total is worth reading explicitly: this is a mature, well-executed package in a crowded category, so the score reflects quality already banked rather than upside still available — we should not expect the package to close our remaining product gaps for us.Key questions to resolve before commitment.
Stack fit. Target a Laravel application (10+ per 3.0.0) on MySQL/PostgreSQL, PHP at the version pinned by the package's Composer constraint, object storage plus a CDN for media, and Redis for cache/queues. Twill owns the /admin surface and its own auth, roles and 2FA; our application owns the domain models, business logic, public delivery layer and any API. The cleanest boundary is: Twill manages content authoring and persistence through Eloquent; everything else (API resources, search indexing, cache invalidation, publishing webhooks) lives in our code and reacts to model events.
Migration path.
twill:module:make rather than hand-rolling controllers, so routes, navigation and config stay in the framework's expected shape.twill_ table prefixes, BigInt migration and timezone-aware datetime behavior all touch persisted data and application code. Execute it before building new modules, not after.Compatibility considerations. Pin the Twill minor version in composer.json and treat upgrades as scheduled work with a changelog review, given the observed mid-cycle breaking changes. Budget for the front-end build: custom blocks and form components require compiling against Twill's asset pipeline, and the manifest flush command is part of the deploy sequence. If we run a form-builder directive-based view layer, plan the Blade component migration now rather than accumulating debt against the 4.x deprecation.
Sequencing (suggested, ~4 phases).
Maintenance. Ongoing cost centers: Composer upgrades tied to Laravel's release cadence (Twill must support Laravel before we can adopt it — a persistent sequencing constraint), the directive-to-component migration ahead of 4.x, and maintenance of any custom blocks/components against Twill's asset pipeline. The changelog and upgrade guide are genuinely good, which lowers cost, but the correct operating assumption is one scheduled upgrade per Laravel major plus one per Twill major, each with regression testing of admin flows.
Support. Primary channels are documentation, a changelog/releases trail, GitHub issues/PRs and a Discord community; security reports go to [email protected] and are stated to be addressed promptly. There is a commercial implementation-and-support option from AREA 17. Recommendation: budget the paid support agreement if the admin is business-critical, and regardless, designate one internal owner for Twill — the failure mode is diffuse ownership where nobody reads the upgrade guide. Note the non-technical dependency: attribution removal and trademark usage both require contacting AREA 17, so any branding decision has a lead time.
Scaling. The admin surface scales in the ordinary Laravel way (horizontal app servers, Redis, DB read replicas); the usual pressure points are elsewhere: media volume and image-rendering throughput, revision table growth (revisions are now limitable — use that), and block/repeater JSON payloads that grow large per record. Nested blocks are supported "to infinity" but the changelog's own aside ("but do not do that") is the right guidance: cap nesting depth by editorial policy, because deeply nested block content is expensive to render in admin previews and awkward to consume in a delivery API. Add indexes on slug and status columns early, and never let the admin and the public site share an uncached read path.
Failure modes to plan for.
Ramp-up. For a Laravel-fluent team, ramp-up is genuinely short — the README's claim that "if you use Laravel, you already know Twill" is the package's strongest operational argument, and a mid-level Laravel developer should be productive on standard modules within days. The two skills that take longer: Twill's asset/build pipeline for custom components (1–2 weeks to competence), and the mental model for blocks/browsers/repeaters as a content-modeling system rather than a form toolkit. On the editorial side, budget structured training and a content-modeling workshop before module build, because Twill's flexibility means poor upfront content modeling becomes an expensive rework rather than a config tweak. Plan two weeks of paired onboarding plus a written internal playbook, and treat the first module as the training vehicle.
How can I help you explore Laravel packages today?