lvntr / starter-kit
Laravel Starter Kit with DDD architecture, Inertia.js, Vue 3, PrimeVue, and role-based permissions.
Requires
- php: ^8.2
- dedoc/scramble: *
- illuminate/support: ^12.0 || ^13.0
- inertiajs/inertia-laravel: ^2.0
- laravel/fortify: ^1.35
- laravel/passport: ^13.5
- laravel/wayfinder: ^0.1
- league/flysystem-aws-s3-v3: ^3.0
- spatie/laravel-activitylog: ^5.0
- spatie/laravel-medialibrary: ^11.12
- spatie/laravel-permission: ^7.2
- spatie/laravel-query-builder: ^6.3
- spatie/laravel-translatable: ^6.11
Requires (Dev)
- orchestra/testbench: ^10.0
- pestphp/pest: ^4.4
- dev-main
- v13.0.18
- v13.0.17
- v13.0.16
- v13.0.15
- v13.0.14
- v13.0.13
- v13.0.12
- v13.0.11
- v13.0.10
- v13.0.9
- v13.0.8
- v13.0.7
- v13.0.6
- v13.0.5
- v13.0.4
- v13.0.3
- v13.0.2
- v13.0.1
- v13.0.0
- v12.0.61
- v12.0.60
- v12.0.59
- v12.0.58
- v12.0.57
- v12.0.56
- v12.0.55
- v12.0.54
- v12.0.53
- v12.0.52
- v12.0.51
- v12.0.50
- v12.0.49
- v12.0.48
- v12.0.47
- v12.0.46
- v12.0.45
- v12.0.44
- v12.0.43
- v12.0.42
- v12.0.41
- v12.0.40
- v12.0.39
- v12.0.38
- v12.0.37
- v12.0.36
- v12.0.35
- v12.0.34
- v12.0.33
- v12.0.32
- v12.0.31
- v12.0.30
- v12.0.29
- v12.0.28
- v12.0.27
- v12.0.26
- v12.0.25
- v12.0.24
- v12.0.23
- v12.0.22
- v12.0.21
- v12.0.20
- v12.0.19
- v12.0.18
- v12.0.17
- v12.0.16
- v12.0.15
- v12.0.14
- v12.0.13
- v12.0.12
- v12.0.11
- v12.0.10
- v12.0.9
- v12.0.8
- v12.0.7
- v12.0.6
- v12.0.5
- v12.0.4
- v12.0.3
- v12.0.2
- v12.0.1
- v12.0.0
- 1.x-dev
This package is auto-updated.
Last update: 2026-04-11 18:37:47 UTC
README
Lvntr Starter Kit is under active development, and each release is shaping it into a more complete admin-first Laravel platform.
Detailed usage docs: kit-docs.lvntr.dev
A full-featured Laravel admin panel package built with Laravel 12 & 13, Inertia.js v2, Vue 3, PrimeVue 4, and Tailwind CSS 4. Follows DDD (Domain-Driven Design) architecture with built-in role-based permissions, activity logging, settings management, and more.
Version support: the
mainbranch targets Laravel 13 (v13.xtags). For Laravel 12 use the1.xbranch (v12.xtags).
Features
- DDD Architecture — Actions, DTOs, Queries, Events, Listeners
- Role & Permission Management — Spatie Permission with dynamic resource-scoped permissions
- User Management — CRUD with avatar upload, soft deletes, 2FA support
- Activity Logging — Spatie Activity Log with a browsable admin interface
- Settings Panel — General, Auth, Mail, Storage settings stored in database
- OAuth2 API — Laravel Passport with personal access tokens and device authorization
- Domain Scaffolding —
make:sk-domaincommand generates full DDD stack interactively - FormBuilder / DatatableBuilder / TabBuilder — Reusable Vue component builders
- Multi-language Support — Translation files included, easily extendable
- API Response Builder — Fluent, consistent API responses with pagination support
- Security Headers Middleware — X-Frame-Options, HSTS, CSP and more
Tech Stack
Backend (PHP / Composer)
| Package | Purpose |
|---|---|
| Laravel 12 / 13 | Core framework (constraint: ^12.0 || ^13.0) |
| Inertia.js v2 | Server-driven SPA — no API layer needed between backend and frontend |
| Laravel Fortify | Authentication backend (login, register, 2FA, password reset) |
| Laravel Passport | OAuth2 API authentication (personal access tokens, device authorization) |
| Laravel Wayfinder | Type-safe route generation for TypeScript |
| Spatie Permission | Role & permission management with dynamic resource-scoped permissions |
| Spatie Activity Log | Model activity logging with browsable admin interface |
| Spatie Media Library | File uploads & media collections (avatars, attachments) |
| Spatie Query Builder | Filter, sort, and include relationships via query string |
| Spatie Translatable | Multi-language model attributes (JSON-based) |
Frontend (Node / npm)
| Package | Purpose |
|---|---|
| Vue 3 | Reactive UI framework |
| PrimeVue 4 | UI component library (DataTable, Dialog, Toast, Menu, etc.) |
| Tailwind CSS 4 | Utility-first CSS framework |
| Inertia.js Vue 3 | Client-side adapter for Inertia SPA |
| VueUse | Collection of Vue composition utilities |
| laravel-vue-i18n | Use Laravel translation files directly in Vue |
Dev Tools
| Tool | Purpose |
|---|---|
| Vite | Frontend build tool with HMR |
| TypeScript | Type safety for frontend code |
| ESLint + Prettier | Code linting and formatting |
| Vitest | Unit testing for Vue components |
| Husky + lint-staged | Pre-commit hooks for code quality |
| Commitizen | Conventional commit messages |
Requirements
- PHP 8.2+ (8.3+ recommended for Laravel 13)
- Laravel 12 or 13
- Node.js 18+
- MySQL / PostgreSQL / SQLite
Installation
1. Require the package
# Laravel 13 (latest) composer require lvntr/starter-kit:^13.0 # Laravel 12 (maintenance) composer require lvntr/starter-kit:^12.0
2. Run the install command
php artisan sk:install
This interactive wizard will:
- Publish all application scaffolding (Controllers, Models, Routes, Vue pages, etc.)
- Publish the package config file
- Run database migrations
- Run seeders (Roles, Permissions, Definitions, Settings)
- Generate Passport encryption keys
- Create a default admin user
- Install npm dependencies and build frontend assets
Non-interactive mode (CI/CD):
php artisan sk:install --no-interaction
Overwrite existing files:
php artisan sk:install --force
3. Configure your .env
APP_NAME="My Application" APP_URL=https://my-app.test DB_CONNECTION=mysql DB_DATABASE=my_app DB_USERNAME=root DB_PASSWORD=
4. Access the admin panel
Open your browser and navigate to your app URL. Log in with the admin credentials shown after installation (default: admin@demo.com / password).
Updating
When a new version of the package is released:
composer update lvntr/starter-kit php artisan sk:update
The update command uses a hash-based tracking system to safely update files:
- Core files (BaseAction, BaseDTO, Traits, Middleware, helpers) are always updated
- User-modifiable files (Controllers, Pages, Routes) are only updated if you haven't changed them
- New files from the package are automatically added
- New migrations are detected and optionally run
Preview changes before applying:
php artisan sk:update --dry-run
Force update everything (overwrites your changes):
php artisan sk:update --force
Upgrading from Laravel 12 to 13
The main branch of this package supports both Laravel 12 and Laravel 13. When you move an existing Laravel 12 application to the Laravel 13 line, the upgrade is split into two stages:
1. Bump Laravel yourself
The package does not touch composer.json or upgrade the framework for you — that stays under your control. Update your composer.json:
{
"require": {
"php": "^8.3",
"laravel/framework": "^13.0",
"lvntr/starter-kit": "^13.0"
}
}
Then run composer update.
2. Finish the package-side work with sk:upgrade
Once Laravel itself is on 13, run:
php artisan sk:upgrade
The command performs preflight checks (Laravel ≥ 13, Starter Kit ≥ v13, PHP ≥ 8.3) and refuses to run if any of them fails — it will not modify a single file in that case. On success it:
- Syncs Starter Kit stubs (
sk:update), preserving your edits - Clears framework caches and stale
bootstrap/cache/*.phpfiles - Regenerates the Composer autoload
- Runs new migrations
- Re-seeds roles and permissions
- Reinstalls npm dependencies and rebuilds frontend assets
Options:
| Option | Description |
|---|---|
--force |
Skip all confirmation prompts |
--no-interaction |
CI-friendly non-interactive mode |
--skip-build |
Skip npm install / npm run build |
For the full upgrade checklist, rollback plan, and troubleshooting tips, see the Upgrade Guide.
Publishing Optional Assets
The package keeps Vue components, language files, and config inside the package by default. If you need to customize them, publish them to your project:
# Interactive selection php artisan sk:publish # Publish Vue components (FormBuilder, DatatableBuilder, etc.) php artisan sk:publish --tag=components # Publish language files php artisan sk:publish --tag=lang # Publish config file php artisan sk:publish --tag=config
Available Commands
| Command | Description |
|---|---|
sk:install |
Full installation wizard |
sk:update |
Update package files preserving user changes |
sk:upgrade |
Finish Laravel 12 → 13 package-side upgrade |
sk:publish |
Publish optional assets for customization |
make:sk-domain |
Scaffold a complete DDD domain interactively |
remove:sk-domain |
Remove a domain and all its files |
env:sync |
Sync .env keys to .env.example |
Domain Scaffolding
Create a new domain with all DDD layers:
# Interactive mode php artisan make:sk-domain # With options php artisan make:sk-domain Product --fields="name:string,price:decimal" --admin --api --events --vue=full
This generates: Model, Migration, Factory, DTO, Actions, Events, Listeners, Controllers, FormRequests, Routes, and Vue pages.
Remove a domain:
php artisan remove:sk-domain Product
Architecture
Package Structure
lvntr/starter-kit/
├── src/ # Core package code (never published)
│ ├── StarterKitServiceProvider.php
│ ├── Console/Commands/ # sk:install, sk:update, make:sk-domain, etc.
│ ├── Domain/Shared/ # BaseAction, BaseDTO, ActionPipeline
│ ├── Enums/ # PermissionEnum
│ ├── Http/Middleware/ # CheckResourcePermission, SecurityHeaders
│ ├── Http/Responses/ # ApiResponse builder
│ ├── Support/ # Package support classes
│ ├── Traits/ # HasActivityLogging, HasMediaCollections
│ └── helpers.php # to_api(), format_date()
├── resources/
│ ├── js/components/ # Vue components (optionally publishable)
│ └── lang/ # Translation files (optionally publishable)
├── stubs/ # Published to app on install
│ ├── app/ # Controllers, Models, Domain, Providers, Enums
│ ├── config/ # permission-resources.php, settings.php
│ ├── database/ # Migrations, Seeders, Factories
│ ├── routes/ # Web & API routes
│ ├── resources/js/ # Vue pages, Layouts, Composables, Theme
│ └── bootstrap/ # app.php, providers.php
└── config/
└── starter-kit.php # Package configuration
Application Structure (after install)
app/
├── Domain/ # DDD business logic
│ ├── User/ # Actions, DTOs, Queries, Events, Listeners
│ ├── Role/
│ ├── Auth/
│ ├── Setting/
│ ├── ActivityLog/
│ └── Shared/ # Base classes (updated by package)
├── Http/
│ ├── Controllers/Admin/ # Admin panel controllers
│ ├── Controllers/Api/ # REST API controllers
│ └── Middleware/
├── Models/
├── Enums/
└── Providers/
Update Strategy
| File Category | Behavior on sk:update |
|---|---|
Domain/Shared/, Traits, Middleware, helpers |
Always updated |
| Controllers, Models, Pages, Routes | Updated only if user hasn't modified them |
| User's custom domains | Never touched |
| New files from package | Automatically added |
Using Package Components
Vue Components (without publishing)
Components are auto-resolved from the package. Use them in your Vue files:
<template> <SkForm :config="formConfig" /> <SkDatatable :config="tableConfig" /> <SkTabs :config="tabConfig" /> </template>
Translations
// From package namespace __('starter-kit::admin.menu.dashboard') __('starter-kit::message.created')
Base Classes
use Lvntr\StarterKit\Domain\Shared\Actions\BaseAction; use Lvntr\StarterKit\Domain\Shared\DTOs\BaseDTO; use Lvntr\StarterKit\Enums\PermissionEnum; use Lvntr\StarterKit\Traits\HasActivityLogging;