joshdonnell / laravel-starter-kit-vue
An end-to-end type-safe Laravel 13 starter kit with auto-generated TypeScript types, Vue 3, and shadcn-vue components for fast front-end prototyping
Package info
github.com/joshdonnell/laravel-starter-kit-vue
Language:Vue
Type:project
pkg:composer/joshdonnell/laravel-starter-kit-vue
Requires
- php: ^8.5.0
- inertiajs/inertia-laravel: ^3.0.6
- laravel/fortify: ^1.37.0
- laravel/framework: ^13.7.0
- laravel/tinker: ^3.0.2
- laravel/wayfinder: ^0.1.16
- nunomaduro/essentials: ^1.2.0
- spatie/laravel-data: ^4.22.1
- spatie/laravel-typescript-transformer: ^3.0.3
- spatie/typescript-transformer: ^3.1.1
Requires (Dev)
- driftingly/rector-laravel: ^2.3.0
- fakerphp/faker: ^v1.24.1
- larastan/larastan: ^3.9.6
- laravel/boost: ^2.4.6
- laravel/pail: ^v1.2.6
- laravel/pao: ^1.0.6
- laravel/pint: ^1.29.1
- mockery/mockery: ^1.6.12
- nunomaduro/collision: ^8.9.4
- pestphp/pest: ^v5.0
- pestphp/pest-plugin-browser: ^v5.0
- pestphp/pest-plugin-laravel: ^v5.0
- pestphp/pest-plugin-type-coverage: ^v5.0
- rector/rector: ^2.4.2
- roave/security-advisories: dev-latest
README
An end-to-end type-safe Laravel 13 starter kit with auto-generated TypeScript types, Vue 3, and shadcn-vue components for fast front-end prototyping. Built on top of Nuno Maduro's Laravel Starter Kit, 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.
Tech Stack
Backend: PHP 8.5+, Laravel 13, Inertia.js v3, Laravel Fortify, Spatie Laravel Data, Nuno Maduro's Essentials
Frontend: Vue 3, reka-ui, shadcn-vue, TypeScript, Tailwind CSS v4
Type Generation: Laravel Wayfinder (auto-generated route & action types), Spatie Laravel Data + TypeScript Transformer (auto-generated DTO types)
DX Tooling: Vite Plus, unplugin-auto-import, unplugin-vue-components, vite-plugin-watch
Code Quality: PHPStan (level max via Larastan), Rector, Pint, oxlint, oxfmt, Pest v5 (100% coverage)
Features
- Fully type-safe end-to-end — Auto-generated TypeScript types for routes, actions, and Data Transfer Objects
- Zero-config auto imports — Vue APIs, composables, and components are auto-imported just like Nuxt
- Auto-regenerating types — Editing
app/Dataorapp/Enumsautomatically triggers TypeScript type generation - Dark mode & appearance switching — Built-in theme support with cookie-based persistence
- Persistent sidebar state — Collapsible sidebar remembers its state across requests
- Complete authentication — Login, registration, password reset, email verification, and two-factor authentication via Laravel Fortify
- Action-oriented architecture — Business logic lives in dedicated, immutable Action classes
- Resource-based routing — Controllers follow CRUD conventions (Cruddy by Design)
- Preloaded assets — Critical CSS and JS are automatically preloaded via Link headers
Local Development
Requires PHP 8.5+, Node 22+, pnpm (used in CI), and a code coverage driver like Xdebug.
SQLite is used by default for database, session, cache, and queue storage.
Installation
composer create-project joshdonnell/laravel-starter-kit-vue --prefer-dist example-app
cd example-app
Setup
# Install dependencies, create .env, generate key, run migrations, and build assets composer setup # Start the development server (Laravel, queue, logs, and Vite) composer dev
Optional: Browser Testing
If you plan to use Pest's browser testing capabilities:
pnpm add playwright && pnpm exec playwright install
Verify Installation
composer test
You should see 100% test coverage and all quality checks passing.
Available Commands
Development
composer dev— Starts Laravel server, queue worker, log monitoring (Pail), and Vite dev server concurrentlycomposer transform-types— Manually regenerates TypeScript types from PHP Data and Enums
Code Quality
composer lint— Runs Rector (refactoring), Pint (PHP formatting), and Vite Plus (JS/TS/Vue linting and formatting)composer test:lint— Dry-run mode for CI/CD pipelines
Testing
composer test:type-coverage— Ensures 100% type coverage with Pestcomposer test:types— Runs PHPStan (level max) and TypeScript (tsc --noEmit) type checkingcomposer test:unit— Runs Pest tests with 100% code coverage requirementcomposer test— Runs the complete suite (type coverage, unit tests, linting, static analysis)
Maintenance
composer update:requirements— Updates all PHP and NPM dependencies to latest versions
Code Style
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: Vite Plus handles linting (oxlint) and formatting (oxfmt) via the
vpCLI - Types: 100% type coverage enforced on both PHP (PHPStan level max) and TypeScript (strict mode)
Run composer lint to auto-fix formatting across the entire codebase.
Code Standards
- 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
Testing
The project uses Pest with a comprehensive testing suite. 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 max (maximum strictness)
- Browser testing — Pest browser tests powered by Playwright
Run the full suite with:
composer test
Or run individual checks:
composer test:unit # Unit & feature tests composer test:types # PHPStan + TypeScript type checking composer test:type-coverage # Type coverage check composer test:lint # Linting dry-run
Contributing
Contributions 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.
License
This project was created by Josh Donnell under the MIT license.