gtcrais / inertia-vue-lsk
The Inertia + Vue skeleton application for the Laravel framework.
dev-master
2026-08-22 12:24 UTC
Requires
- php: ^8.4
- inertiajs/inertia-laravel: ^3.3.1
- intervention/image-laravel: ^4.1
- laravel-notification-channels/fcm: ^6.1
- laravel/framework: ^13.26.1
- laravel/sanctum: ^4.3.3
- laravel/socialite: ^5.30
- laravel/tinker: ^3.0.2
- predis/predis: ^3.6.0
- socialiteproviders/apple: ^5.10
Requires (Dev)
- fakerphp/faker: ^1.24.1
- fruitcake/laravel-debugbar: ^4.4
- laravel/pail: ^1.2.7
- laravel/pao: ^1.1
- laravel/pint: ^1.30.5
- laravel/sail: ^1.67
- mockery/mockery: ^1.6.14
- nunomaduro/collision: ^8.9.5
- pestphp/pest: ^5.1.1
- pestphp/pest-plugin-laravel: ^5.0.1
This package is auto-updated.
Last update: 2026-08-22 12:24:30 UTC
README
Tech stack:
- Laravel (latest)
- Sanctum (latest)
- Inertia 3
- Vue 3
- Tailwind CSS 4
Additional Composer packages
- Sanctum
- Socialite
- Apple Socialite Provider
- Intervention Image
- FCM notification channel
- Laravel Debugbar
- Predis
Features
Out of the box this starter kit provides:
- Login and registration functionalities using conventional email + password method with email confirmation, as well as Sign in with Facebook and Google (Apple is supported server-side)
- Password reset functionality
- Email verification for both logged-in and guest users - logged-in users land back on their profile, guests get a confirmation page gated by a one-shot token
- User account area with profile editing (name + avatar upload with preview), password update and account deletion
- Toast notifications (vue-sonner) driven by Inertia flash data (
Inertia::flash()) for one-time messages: email verified, password reset, expired session, rate limited - Reusable UI components (
resources/js/components):AppButton(renders an InertiaLinkwhen given anhref),AppInput,AppLabel,Card, modals - Inertia SSR
- Graceful exceptions handling
- Mobile app support skeleton - versioned API, deep-linking email flows and FCM push notifications (see Mobile app support)
Requirements
- PHP >= 8.4
- Node.js >= 20
- Redis (default driver for sessions, cache and queues)
- Laravel queues (for emails)
Setup
-
In
.envfill out:APP_URLGRACEFULLY_HANDLE_EXCEPTIONS- boolean. If set totrueyou will get nice error pages instead of the default Inertia exception modalSESSION_DOMAINSANCTUM_STATEFUL_DOMAINS- Mailgun credentials, unless you're using some other mailer
- Facebook, Google and/or Apple credentials, if you're going to be using sign in with social networks feature
MOBILE_APP_HEADER,MOBILE_APP_URI_SCHEMEandMOBILE_APP_DEVICE_ID, if you're going to be using the mobile app skeletonFIREBASE_CREDENTIALS, if you're going to be using FCM push notifications- If you want to use Inertia SSR:
npm run build(builds the SSR bundle as well)php artisan inertia:start-ssr
- If you want to use Laravel Horizon, just install it and uncomment
HorizonServiceProvider::classinbootstrap/providers.php, and update thegate()method
-
Start a queue worker -
php artisan queue:work. Mail, broadcast and push notification jobs can be routed to dedicated queues viaQUEUE_MAIL,QUEUE_BROADCASTandQUEUE_PUSH_NOTIFICATIONS
Mobile app support
The kit ships with a skeleton for driving a companion mobile app:
- A versioned REST API mounted at
/api/mobile/v1(routes/mobile_v1.php, registered inapp/Bootstrappers/RouteRegistrar.php), authenticated with Sanctum bearer tokens - Mobile app requests are recognized by a custom header (
MOBILE_APP_HEADER). TherequestType:mobileAppmiddleware hides the API (404) from callers without it, and themobileApp(),stateless()andmobileDeviceId()request macros are available throughout the app - Endpoints for app bootstrap data, registration, login/logout, auth checks, notifications (list + unread count), push notification token registration and account deletion
- Password reset and email verification resend reuse the web controllers, which respond with JSON when the request expects it
- Social sign in (Facebook, Google, Apple): the app opens
social-auth/{network}/oauth/redirectin a browser, the OAuth callback deep-links back into the app, and the app exchanges the received token for a Sanctum token atsocial-auth/exchange-token - Email deep-linking: verification and password reset emails sent for mobile app requests carry a
mobile=1link parameter. Opened on a mobile device, the link serves an interstitial page that deep-links into the app viaMOBILE_APP_URI_SCHEME(e.g.yourapp://email-verified) with a web fallback; opened on desktop, the regular web flow takes over - Push notifications are sent through FCM (
FIREBASE_CREDENTIALS), with devices tracked by a device id header (MOBILE_APP_DEVICE_ID) that also scopes the push endpoint rate limits - Mobile-related configuration lives in
config/mobile.php
Things worth taking a look at
app/Bootstrappersapp/Http/Middleware/SanctumMiddleware.phpapp/Http/Middleware/ThrottleSuccessfulRequests.php- drop-in replacement for thethrottlemiddleware that only counts successful requests towards the rate limitapp/Http/Middleware/EnsureMobileDeviceUniqueness.php- keeps mobile device records unique per user; aliased asensureMobileDeviceUniquenessbut not attached to any route out of the boxapp/Providers/StarterKitServiceProvider.php- defines thestateful(),stateless()andmobileApp()request macros used throughout the auth flowsapp/Providers/RateLimiterServiceProvider.php- all of the named rate limiters used across the routesapp/Http/Helpers/AppResponse.php- responds with an Inertia page for frontend requests and plain JSON for stateless onesapp/Services/InertiaHelperService.phpused inapp/Http/Middleware/HandleInertiaRequests.phpapp/Services/ViewMetadataProviderService.php, used inapp/Services/InertiaHelperService.php,app/Http/Controllers/PageController.phpandresources/views/default.blade.phpresources/js/layouts/DefaultLayout.vue- globalflashevent listener that turns Inertia flash data into toastsresources/js/mixins/helper.js- thecn()class-merging helper (clsx + tailwind-merge) used by the UI components
License
inertia-vue-lsk Laravel Starter Kit is open-sourced software licensed under the MIT license.