calebporzio/laravel-frontend-preset
Swap Laravel's default frontend scaffolding with a single Artisan command. This preset installs your chosen CSS and JS stack, including Tailwind, Bootstrap, Vue, or React, plus ready-made auth views.
What it actually is. calebporzio/laravel-frontend-preset is a build-time scaffolding artifact, not a runtime dependency. It implements the Laravel preset contract (PresetServiceProvider / PresetInterface with install() / uninstall()) and copies opinionated stubs — Tailwind config and CSS entry, app.js, webpack.mix.js, Blade layouts — over a fresh application, then exits. Post-install footprint is near zero, and so is its ongoing leverage. The TPM framing: a template to read and harvest, not a library to adopt.
Architecture fit. Narrow by design. It has no role in API-only services, existing frontends, or apps already on a maintained starter kit. The only defensible fits are (a) a legacy Laravel 5.7–7.x app that already depends on the preset mechanism and needs its mechanics preserved, or (b) a disposable internal prototype that deliberately wants this specific Blade-first, minimal-JS, Tailwind opinion.
Integration feasibility. Direct Composer adoption is technically possible on the versions it targeted but has never been reconciled with the Laravel 8+ removal of php artisan preset, the Vite migration, or subsequent Tailwind and Alpine majors. The honest path is a timeboxed spike: scaffold a throwaway app, inspect the generated file inventory, diff against the target, port only what still applies. Treat any "drop-in" claim as false until src/ and stubs/ are read directly.
Technical risk, split by category.
require-dev entry; ideally never in composer.json.Key questions to resolve before any decision.
laravel/ui, and preset-API versions does it actually target? (v0.1.3 notes only "Laravel 6 and 7.")php artisan ui tailwind, Breeze, Jetstream, or current laravel new starter kits?If the answer to (5) is measured in days rather than weeks, ownership beats adoption every time.
Stack fit. Narrow. The defensible fits are the legacy preset-based app and the disposable prototype described above. It does not fit modern Laravel on Vite, teams on Inertia or Livewire starter kits, or anything with a non-Laravel frontend.
Migration path. Do not commit the package to a long-lived composer.json. The sequence that works:
composer require --dev, run php artisan preset, commit immediately behind a git checkpoint.package.json, webpack.mix.js, resources/js/app.js, resources/views/layouts/, tailwind.config.js — and diff against the target application.php artisan ui tailwind. Expect substantial overlap; document any genuine differentiator.Compatibility. Assume friction with Laravel 8+ (php artisan preset no longer exists), Laravel 9/10+, Vite, current Tailwind, and modern Alpine syntax. Validate the Artisan command against the target version before committing scope; if it errors, extract stubs by hand and move on. Treat every generated dependency version as requiring an upgrade plan.
Sequencing and gating. Run this as a timeboxed DevEx spike of 1–2 days, gated on two checkpoints: (i) the spike yields a documented file inventory plus a clear "differentiated vs. official starter kit" verdict; (ii) a named owner signs up for whatever gets adopted. If either gate fails, close the ticket and standardize on a first-party path. Do not let it expand into a fork project without separate scope and estimate.
Maintenance. Near-zero if you read it and copy patterns. High — and permanent — if you fork or depend on it: every dependency upgrade, Laravel major bump, and security patch becomes internal work with no upstream to lean on. Budget a fork as a small product with a roadmap, not a one-off install.
Support. No upstream support path exists. No issue triage, no release cadence, no maintainer response, negligible community usage. Teams rely entirely on their own documentation and whoever ran the spike. Assume that person leaves.
Scaling. No production scaling concern — this never runs in a request path. The team-scale risk is different and more insidious: divergent application bootstraps across repos, stale frontend dependencies copied forward indefinitely, and undocumented deviations from Laravel conventions that raise onboarding cost and slow cross-team debugging as headcount grows. Standardization is the scaling lever; an archived preset is the opposite of a standard.
Failure modes to plan against.
php artisan preset on Laravel 8+, rendering the tool silently unusable.require and shipping to production.Ramp-up. A competent Laravel engineer can evaluate the scaffold and produce a file inventory in roughly half a day to a day. Modernizing the frontend build, or forking for sustained internal use, needs additional frontend toolchain expertise and should be scoped as a small migration project — not a drop-in dependency. Write the spike output into a decision record to collapse the bus factor.
TPM recommendation. Score no adoption as a dependency. Leverage it as cheap prior art: a 1–2 day timeboxed spike to harvest patterns and produce a file inventory, then either standardize on Breeze/Jetstream/php artisan ui tailwind or invest in a thin, named-owner internal starter kit we own outright.
How can I help you explore Laravel packages today?