laravel-blueprint maintained by haohuynh123-cola
Laravel Blueprint
One command, your Laravel stack. Pick a starter kit, database, and the extras you actually use — get a runnable, opinionated, production-ready Laravel project in seconds.
Inspired by go-blueprint, but for Laravel.
🌐 Live configurator: haohuynh123-cola.github.io/Laravel-Blueprint — click options, copy the command.
📦 Packagist: haohuynh123-cola/laravel-blueprint
Quick start (2 commands)
composer global require haohuynh123-cola/laravel-blueprint
blueprint new
That's it. The wizard walks you through every choice, then scaffolds the project.
PATH: if
blueprintsayscommand not found, add Composer's global bin to your shell:echo 'export PATH="$HOME/.composer/vendor/bin:$PATH"' >> ~/.zshrc && source ~/.zshrc
What you get
A Laravel project that's already wired up the way you wanted — no manual composer require X && php artisan Y:install chains.
- Base install — current stable Laravel via
composer create-project - Starter kits — Breeze · Jetstream · Filament (each installed and configured for your chosen frontend)
- Frontend stacks — Blade · Livewire · Inertia + Vue · Inertia + React · API only
- Database — MySQL · PostgreSQL · SQLite · MariaDB (
.envrewritten, SQLite file created) - Extras — Horizon · Telescope · Pulse · Octane · Scout · Sanctum · Pint · Larastan · Dusk · Sail
- Docker — production Dockerfile + nginx + php.ini, or Sail dev environment, or both
- CI — GitHub Actions workflow (tests + Pint + PHPStan)
- Git —
git init+ initial commit (optional)
How it looks (interactive wizard)
┌ Laravel Blueprint — scaffold a new Laravel project ─┐
◇ Project name ← type a name
│ my-app
◇ Starter kit ← ↑↓ then enter
│ ● None — bare Laravel
│ ○ Breeze — minimal auth scaffold
│ ○ Jetstream — teams, 2FA, profile
│ ○ Filament — admin panel
◇ Frontend stack ← shown only if kit ≠ none
│ ...
◇ Database ← ↑↓ then enter
│ ● SQLite (zero setup)
│ ○ MySQL
│ ○ PostgreSQL
│ ○ MariaDB
◇ Test runner ← Pest or PHPUnit
◇ Extras ← MULTI-SELECT: space toggles, enter confirms
│ ◼ Pint
│ ◼ Larastan
│ ◻ Horizon
│ ◻ Telescope
│ ...
◇ Docker
│ ● None ○ Sail ○ Production ○ Both
◇ Continuous integration
│ ○ None ● GitHub Actions
◇ Initialize git
│ ○ Skip ○ git init ● git init + commit
└──────────────────────────────────────────────────────┘
After the last prompt, the tool runs every selected generator and leaves you with a project ready to php artisan serve.
Non-interactive (CI / scripts)
Every prompt has a --flag. Pass --yes to skip prompts and use defaults for any flag you omit.
blueprint new my-app \
--kit=breeze \
--stack=inertia-vue \
--database=pgsql \
--tests=pest \
--extra=pint --extra=larastan --extra=horizon \
--docker=production \
--ci=github-actions \
--git=commit \
--yes
All flags
| Flag | Values |
|---|---|
--kit |
none, breeze, jetstream, filament |
--stack |
blade, livewire, inertia-vue, inertia-react, api, none |
--database |
mysql, pgsql, sqlite, mariadb |
--tests |
pest, phpunit |
--extra |
horizon, telescope, pulse, octane, scout, sanctum, pint, larastan, dusk, sail (repeatable) |
--docker |
none, sail, production, both |
--ci |
none, github-actions |
--git |
skip, init, commit |
--yes / -y |
Skip prompts |
Recipes
Smallest possible project (~20 sec)
blueprint new demo --database=sqlite --git=skip --yes
cd demo && php artisan serve
API + Sanctum + Pest + GH Actions
blueprint new api \
--kit=breeze --stack=api \
--database=pgsql --tests=pest \
--extra=sanctum --extra=pint --extra=larastan \
--ci=github-actions --git=commit --yes
Full-stack Inertia + Vue + production Docker
blueprint new shop \
--kit=breeze --stack=inertia-vue \
--database=pgsql --tests=pest \
--extra=horizon --extra=pulse --extra=pint --extra=larastan \
--docker=production --ci=github-actions --git=commit --yes
Install (other ways)
Per-project install (binary in vendor/bin/blueprint)
composer require --dev haohuynh123-cola/laravel-blueprint
vendor/bin/blueprint new
From source (for contributing)
git clone https://github.com/haohuynh123-cola/Laravel-Blueprint.git
cd Laravel-Blueprint
composer install
./bin/blueprint new
Update / uninstall
composer global update haohuynh123-cola/laravel-blueprint # update
composer global remove haohuynh123-cola/laravel-blueprint # uninstall
Develop
composer install
composer test # Pest
composer lint # Pint
composer stan # PHPStan level 8
Architecture
src/
├── Application.php Symfony Console app
├── Commands/NewCommand.php Wizard + flag parsing
├── Config/ BlueprintConfig + enum types per choice
├── Generators/ One class per generator step
│ ├── Generator.php interface
│ ├── BaseInstaller.php composer create-project laravel/laravel
│ ├── DatabaseConfigurator.php rewrites .env
│ ├── StarterKitGenerator.php composer require + artisan {kit}:install
│ ├── ExtrasGenerator.php map-driven: one entry per extra
│ ├── DockerGenerator.php writes Dockerfile/nginx/php.ini, or Sail
│ ├── CiGenerator.php writes .github/workflows/*.yml
│ └── GitInitializer.php git init [+ commit]
├── Support/
│ ├── ProcessRunner.php symfony/process wrapper, streams output
│ └── StubLoader.php {{ var }} substitution for stub files
└── Templates/ Real .stub files — lintable, syntax-highlighted
├── docker/ Dockerfile, nginx.conf, php.ini, .dockerignore
└── ci/ tests.yml, lint.yml
Two design rules borrowed from go-blueprint:
- Hybrid CLI — every prompt has a
--flag, so the same binary works for humans and CI. - Map-of-templaters — choices are
enumcases keyed to generators. Adding a new database or extra is one enum case + one map entry.
One we deliberately changed: go-blueprint keeps templates as Go string literals. We use real .stub files under src/Templates/ so they stay syntax-highlighted, lintable, and editable in isolation.
Roadmap
- ✅ v0.0.1 — base install + database + git
- ✅ v0.2.0 — starter kit + extras + Docker + CI generators (current)
- ✅ v0.5 — live configurator site
- 🔜 v0.3 —
blueprint upgradefor existing projects (apply a single layer to a brownfield repo) - 🔜 v0.4 — Phar release + Homebrew tap +
curl | bashinstall script + npm wrapper fornpx
Contributing
PRs welcome. Each generator is a single class implementing Generators\Generator, so adding a new option is small and self-contained. Open an issue first for new flags or stack choices.
License
MIT — see LICENSE.