An end-to-end type-safe Laravel 13 starter kit with auto-generated TypeScript types, Vue, and shadcn-vue for fast front-end prototyping. Built on top of Nuno Maduro's Laravel Starter Kit (Maintained by me), this kit extends it with Wayfinder, Laravel Data, and unplugin-auto-import to provide a Nuxt-like developer experience when writing Vue code within a Laravel Inertia application.
Backend: PHP 8.4+, Laravel 13, Inertia.js v3, Spatie Laravel Data
Frontend: Vue 3, shadcn-vue, TypeScript, Tailwind CSS v4
Type Generation: Laravel Wayfinder (auto-generated route & action types), Spatie Laravel Data (auto-generated DTO types)
DX Tooling: unplugin-auto-import (Nuxt-style auto imports for Vue APIs and composables)
Code Quality: PHPStan (level 9), Rector, Pint, Vite Plus, oxlint, oxfmt, Pest v5 (100% coverage)
Requires PHP 8.4+, npm or pnpm, and a code coverage driver like Xdebug.
composer create-project joshdonnell/laravel-starter-kit-vue --prefer-dist example-app
cd example-app# Install dependencies and configure the project
composer setup
# Start the development server (Laravel, queue, logs, and vite plus)
composer devIf you plan to use Pest's browser testing capabilities:
# npm
npm install playwright && npx playwright install
# pnpm
pnpm add playwright && pnpx playwright installcomposer testYou should see 100% test coverage and all quality checks passing.
composer dev— Starts Laravel server, queue worker, log monitoring, and Vite dev server concurrently
composer lint— Runs Rector (refactoring), Pint (PHP formatting), and oxfmt (JS/TS formatting)composer test:lint— Dry-run mode for CI/CD pipelines
composer test:type-coverage— Ensures 100% type coverage with Pestcomposer test:types— Runs PHPStan at level 9 (maximum strictness)composer test:unit— Runs Pest tests with 100% code coverage requirementcomposer test— Runs the complete suite (type coverage, unit tests, linting, static analysis)
composer update:requirements— Updates all PHP and NPM dependencies to latest versions
This project enforces a strict, automated code style across both PHP and JavaScript/TypeScript:
- PHP: Laravel Pint for formatting, Rector for automated refactoring and modernisation
- JS/TS/Vue: oxlint for linting, oxfmt for formatting
- Types: 100% type coverage enforced on both PHP (PHPStan level 9) and TypeScript (strict mode)
Run composer lint to auto-fix formatting across the entire codebase.
- Actions-Oriented Architecture: Every operation is encapsulated in a single-action class
- Cruddy by Design: Standardised CRUD operations for all controllers, actions, and Inertia pages
- Immutable-First: Data structures favour immutability to prevent unexpected mutations
- Fail-Fast: Errors are caught at compile-time through strict static analysis, not at runtime
- Strict Laravel Defaults: Strict models, auto eager loading, immutable dates via Essentials
- AI Guidelines: Integrated AI guidelines to assist in maintaining code quality and consistency
The project uses Pest with a full testing suite of 150+ tests. The following standards are enforced:
- 100% code coverage — the test suite will fail if coverage drops below 100%
- 100% type coverage — every method, property, and parameter must be explicitly typed
- Static analysis — PHPStan at level 9 (maximum strictness)
Run the full suite with:
composer testOr run individual checks:
composer test:unit # Unit & feature tests
composer test:types # PHPStan static analysis
composer test:type-coverage # Type coverage check
composer test:lint # Linting dry-runContributions are welcome from everyone! To get started:
- Fork the repository
- Create a feature branch (
git checkout -b feat/my-featureorgit checkout -b fix/my-fix) - Make your changes
- Ensure CI is passing (
composer test) - Commit your changes (
git commit -m 'Add my feature') - Push to your branch (
git push origin feat/my-feature) - Open a Pull Request
Please ensure all tests and quality checks pass before submitting your PR.
This project was created by Josh Donnell under the MIT license.