titasgailius/laravel-moonlight
Moonlight is a Laravel package for quickly building admin panels and CRUD interfaces around your Eloquent models. Define resources once and get searchable listings, forms, filters, and actions without writing repetitive controller or view code.
Architecture fit. Moonlight is an install-time scaffolding preset, not a runtime library. It does not sit in the request lifecycle — it generates controllers, Vue pages, layouts, routes, Tailwind config, and auth scaffolding into your application, then gets out of the way. That is the single most important architectural fact: after install there is no vendor coupling, no dependency to upgrade, and no forced upstream path. Fit is high only if the target is a standard Laravel monolith on Inertia + Vue 3 + Tailwind. It is zero-fit for API-only, Livewire, or React shops.
Integration feasibility. Feasible as a one-time code generator (composer dev dependency + artisan install command), not as a long-lived dependency. Overlap with Laravel Breeze's Vue/Inertia stack and Jetstream means the real decision is "which scaffold," not "do we need this capability."
Technical risk — high. Last release 2023-01-03, 142 stars, score 1.01. The stack has moved materially since: Laravel 10/11, Inertia v1/v2, Vite replacing Mix, Tailwind 3→4. An 18+ month-old preset will likely pin older package versions and may fail to install cleanly on current Laravel. Support is effectively a single maintainer with no SLA.
Key questions.
--with-all-dependencies gymnastics?Stack fit. Adopt only if the team is committed to Vue 3 + Inertia + Tailwind and a server-driven, SPA-lite monolith. For Vue-fluent teams, the opinionated layout and component structure can save days of boilerplate. For teams without Vue/Inertia depth, the preset becomes a liability they cannot maintain.
Migration path. Treat Moonlight as one-time code generation, not a dependency. Install into a greenfield repo or throwaway spike branch, inspect generated files, then adopt them as your own code or fork the preset into an internal scaffold. Ejection is clean by design — no runtime coupling, no upgrade treadmill after the initial commit. Do not attempt to retrofit an existing application; there is no migration path for a live codebase.
Compatibility. Validate against your exact Laravel/PHP/Node versions before committing. Expect manual reconciliation of Inertia/Vue/Tailwind versions and a Mix→Vite migration if the preset predates that shift. Budget a half-day spike to confirm: clean install, working auth flow end-to-end, and a successful production build.
Sequencing.
Maintenance. Runtime maintenance is near-zero — the generated code is yours. Upstream maintenance is effectively absent: last release 2023-01-03 and low activity signal no fixes for future Laravel/Inertia/Tailwind releases. The operational cost shifts from "dependency upgrades" to "we now own this codebase," which is acceptable only if that ownership is explicit.
Support. Community only, single maintainer, 142 stars. No SLA, no security response process. Mitigate by forking into your org and owning it, or by choosing Breeze/Jetstream for an officially supported path.
Scaling. Not a horizontal-scaling concern — it is front-end scaffolding. The relevant scale is team size: an opinionated preset enforces consistency across contributors, which is a genuine win for onboarding and review. That same opinionation becomes a tax if it diverges from team conventions, and the tax compounds with headcount.
Failure modes.
Most are detectable in the spike. The last one is structural and cannot be tested away; it must be accepted via fork-and-own.
Ramp-up. Low for teams already on Vue 3 + Inertia; moderate-to-high otherwise (Vue SFCs, Inertia routing/props, Tailwind utility workflow, plus a bespoke preset's conventions). Budget roughly a sprint of onboarding for developers new to Inertia before judging the preset's productivity claim.
TPM recommendation. Low strategic value at current maturity. The stale release date and 1.01 score make this a "fork or skip" decision rather than an adoption decision. Default to Laravel Breeze (Vue/Inertia) for the officially maintained path; adopt Moonlight only if a short spike proves a clean install on your target versions and its structure meaningfully beats Breeze — in which case vendor/fork it, pin it, and treat it as first-party code.
How can I help you explore Laravel packages today?