- Knowledge
- technology
- OOP
- Tips
- Programming
- Tips
- Tutorial
- SEO
- Ranking
- Knowledge
- Special Day
- Seo
- Bug
- Data science
- Seo
- artificial intelligence
- Machine Learning
- Robotics
- happyNewYear2021
- newYearEve
- 2021
- Automation
- Smart Home
- Career
- Best Practices
- Git
- Logging
- Web Fundamentals
- DNS
- HTTPS
- Performance
- AI Tools
- ChatGPT
- Claude
- Gemini
- Laravel
- Eloquent
- MySQL
- HTTPS
- TLS
- Web Security
- Certificates
- Developer Life
- Debugging
- Docker
- DevOps
- Transactions
- Queues
- LLMs
- AI
- AI Coding
- Developer Tools
- React Native
- Expo
- Kate PMS
- Mobile Apps
- Laravel
- Authentication
- Sanctum
- Cookies
- API Design
- Payments
- Idempotency
- DeepSeek
- Open Source AI
- LLMs
- AI News
- Git
- Version Control
- AI Coding
- Prompting
- PHP
- Checklist
- MCP
- AI Agents
- OpenAI
- Architecture
- Microservices
- Modular Monolith
- Estimation
- Developer Life
- Project Planning
- Humour
- OAuth
- OpenID Connect
- Authentication
- Embeddings
- Vector Search
- RAG
- pgvector
- OpenAI
- GPT-4.1
- Codex CLI
- Events
- Testing
- Clean Code
- Maintainability
- Code Review
- Webhooks
- API
- Security
- Claude Code
- Workflow
- AI
- LLM
- Prompt Injection
- Mobile
- React
- Networking
- TCP
- UDP
- HTTP/3
- CLAUDE.md
- AWS
- Cloud Security
- Backups
- PHPUnit
- Software Engineering
- Leadership
- Communication
- RAG
- Embeddings
- AI Engineering
- IT Infrastructure
- Networking
- Access Control
- CI/CD
- GitHub Actions
- Gemini CLI
- Claude Code
- JavaScript
- Async/Await
- Node.js
- Promises
- Security
- Cryptography
- Passwords
- MySQL
- Database
- Vibe Coding
- Software Quality
- DNS
- Code Reading
- Onboarding
- Productivity
- Background Jobs
- Developer Humour
- Estimates
- Dev Life
- JWT
- o3-mini
- DeepSeek R1
- Rate Limiting
- Kate PMS
- E-Signing
- Audit Trail
- REST
- GraphQL
- API Design
- Laravel 12
- Upgrade Guide
- Open Source
- Self-Hosting
- Task Scheduling
- Cron
- Secrets
- CORS
- PHP
- PHP-FPM
- OPcache
- GitHub Copilot
- Software Architecture
- Engineering
- TypeScript
- JavaScript
- Type Safety
- AI Security
- React Native
- Product Design
- AI Agents
- Kiro
- Queues
- Redis
- RabbitMQ
- AWS SQS
- Nginx
- Apache
- GPT-5
- gpt-oss
- Clean Code
- Architecture
- Naming
- Documentation
- Career
- ADR
- Teamwork
- Supply Chain
- Kate HRM
- HR Software
- Permissions
- System Design
- Pagination
- SSH
- Linux
- Big O
- Databases
- Laravel Boost
- MCP
- Developer Skills
- Validation
- Databases
- Indexes
- Code Quality
- Deployment
- Developer Humour
- Feature Flags
- Code Review
- Pull Requests
- Docker
- Cursor
- Authorization
- RBAC
- Gemini
- Long Context
- PHP 8.4
- Caching
- Dependency Injection
- Web Performance
- Browser
- CSS
- Database
- Migrations
- ChatGPT
- AI for Developers
- Monitoring
- On-Call
- REST
- Backend
- SQL
- NoSQL
- Database Design
- Coding Agents
- Claude 4
- API Resources
- REST API
- Load Balancing
- Scaling
- AWS
- AI Tools
- Claude
- Sora 2
- CTE
- 2FA
- TOTP
- Programming Languages
- Prompts
- Developer Workflow
- API Gateway
- APIs
- Passport
- API Auth
- Learning
- Burnout
- Developer Growth
- Web Development
- SEO
- Kate Mall
- ChatGPT Atlas
- Agent Skills
- Middleware
- Laravel 12
- Collections
- Context Window
- Monitoring
- Commit Messages
- Self Review
- Growth
- Regex
- Programming Basics
- Text Processing
- Database Design
- Normalization
- Linux
- Server Security
- Linux Foundation
- Open Standards
- Legacy Code
- Documentation
- AI Workflow
- File Uploads
- Test Data
- Hashing
- Performance
- Caching
- Enums
- Scope Creep
- Estimation
- Codex
- Gemini CLI
- Timezones
- Carbon
- Bugs
- PHP 8.5
- Gemini 3
- GPT-5.1
- Data Integrity
- Event Loop
- Async
- Opus 4.5
- AI Models
- React
- Forms
- Frontend
- Backups
- AI Images
- DALL-E
- Midjourney
- Race Conditions
- Concurrency
- Legacy Code
- Refactoring
- Senior Engineer
- Scope
- LLM
- CDN
- Web
- Sub-Agents
- Soft Deletes
- Audit Log
- Concurrency
- AI Learning
- NestJS
- AI Evals
- Policies
- SPF DKIM DMARC
- Unicode
- UTF-8
- Knowledge Graph
- Value Objects
- Technical Debt
- Feature Flags
- Laravel Pennant
- Deployment
- Copilot
- Composer
- Dependencies
- Artisan
- Automation
- AWS S3
- Object Storage
- Cloud
- Small Language Models
- Ollama
- Production
- Sessions
- HTTP
- Mentoring
- SQL
- Virtual Machines
- Web Development
- HTTP/2
- QUIC
- Web Performance
- AI Integration
- LLM API
- SOLID
- OOP
- Hosting
- Serverless
- Merge Conflicts
- Temperature
- AI Development
- Reverse Proxy
- Nginx
- Infrastructure
- Verification
- Passkeys
- WebAuthn
- Teams
- Communication
- Stakeholders
- Monorepo
- CI/CD
- Versioning
- JSON Schema
- Livewire
- Inertia
- Meetings
- Distributed Systems
- Privacy
- Full-Stack
- T-Shaped Skills
- Money
- Notifications
- Web Security
- HTTP Headers
- CSP
- Function Calling
- Load Testing
- k6
- Data Extraction
- Debugging
- WebSockets
- SSE
- Real-Time
- Laravel Reverb
- Infrastructure as Code
- Terraform
- Side Projects
- Laravel Pint
- OpenAPI
- Swagger
- UX
- Multimodal
- Jest
- Pair Programming
- APIs
- Rate Limiting
- Resilience
- Dev Humour
- Design Tokens
- JWT
- API Keys
- Sessions
- PHPStan
- Rector
- Incidents
- Reporting
- Dashboards
- Zero Trust
- IAM
- Search
- Laravel Scout
- Junior Developers
- Mentoring
- Images
- WebP
- AVIF
- Bug Reports
- Let's Encrypt
- Design Docs
- Software Design
- Observers
- Replication
- Accountability
- Data Structures
- Reliability
- LLM Memory
- Error Handling
- Payments
- Payment Gateway
- Webhooks
- PCI DSS
- Observability
- OpenTelemetry
- Personal Brand
- Writing
- Conventions
- Dates
- Scheduling
- Disaster Recovery
- Compression
- Brotli
- Deadlines
- Developer Habits
- State Machines
- Tech Roles
- UUID
- ULID
- Horizon
- Planning
- Engineering Culture
- Ownership
- Soft Skills
- Socialite
- Cost Control
- Collations
- Unicode
- Octane
- PostgreSQL
Livewire vs Inertia vs a Separate SPA: How Laravel Teams Should Choose
About Post
Ask a room of Laravel developers which frontend to use and you'll get three camps, each completely sure of itself. The Livewire people think you're overcomplicating things. The Inertia people think Livewire is fine "for small apps". The SPA people are already writing an OpenAPI spec.
Here's the uncomfortable truth: all three are good. I've seen great products built with each, and I've seen teams suffer with each. The suffering almost never comes from the tool. It comes from picking it for the wrong reason.
So instead of crowning a winner, let's look at how each one actually works, and the handful of questions that should decide it for you.
How each one works, in one paragraph each
Livewire: the server drives the UI
You write components as PHP classes with Blade templates. When the user types or clicks, Livewire sends a small request to the server, the component's PHP code runs, and the changed HTML is patched into the page. State lives on the server. For instant client-side bits (dropdowns, toggles) you add Alpine.js. You can build a dynamic interface while writing almost no JavaScript.
Inertia: server routing, JavaScript pages
You keep Laravel's routes and controllers, but instead of returning a Blade view, a controller returns a React, Vue or Svelte page component with props: Inertia::render('Invoices/Index', ['invoices' => $invoices]). Inertia handles the navigation, so it feels like a single-page app. There's no separate API to design; the controller is the API for that page.
Separate SPA: two apps, one contract
The frontend is its own project (React with Vite, Next.js, Vue, whatever you like), usually deployed separately, and it talks to Laravel through a JSON API with Sanctum or tokens for auth. The API is a real product with its own versioning, docs and contract.
Side by side
| Livewire | Inertia | Separate SPA | |
|---|---|---|---|
| Main language | PHP + Blade | PHP + React/Vue/Svelte | JS/TS frontend, PHP API |
| Where UI state lives | Server | Browser | Browser |
| Need a public API? | No | No (props per page) | Yes |
| Interaction latency | Network round trip for server logic | Instant in the browser | Instant in the browser |
| Reuse for a mobile app | No | Not directly | Yes, same API |
| Deploys | One | One (plus an asset build) | Two, coordinated |
| Team fit | PHP-heavy team | Full-stack devs | Separate frontend and backend teams |
Laravel 12's official starter kits reflect this split nicely: there's a Livewire kit, and React and Vue kits built on Inertia. A separate SPA isn't a starter kit because it's really two projects.
The questions that actually decide it
1. Is there (or will there be) a mobile app?
This is the biggest one. If a React Native or native app needs the same data and actions, you're building a JSON API anyway. At that point, a web SPA on the same API means one backend contract for every client. That doesn't automatically rule out Inertia or Livewire for an admin panel, but the main product UI has a strong reason to share the API.
2. Who is on the team?
A team of strong Laravel developers who don't love JavaScript will be productive with Livewire on day one. A team that already thinks in React components will find Inertia natural and will get the huge React ecosystem for free. Fighting your team's strengths is the most expensive choice on this list.
3. How "app-like" is the interface?
Forms, tables, filters, dashboards, CRUD with some dynamic behaviour: Livewire handles this beautifully. A drag-and-drop planner, a rich editor, an interface that must keep working on a bad connection, or anything with lots of instant client-side state: that's where server round trips start to show, and Inertia or an SPA feel better.
4. Do you need SEO and fast first paint?
Livewire renders HTML on the server, so it's naturally friendly to search engines. Inertia can do server-side rendering, but it's an extra moving part to run. An SPA usually needs a framework with SSR (like Next.js) if public pages must rank well. For an internal dashboard, none of this matters.
Rule of thumb: if a mobile app or a third party needs the API, design the API first and let the web be one more client. If not, don't build an API you don't need: pick Livewire or Inertia based on your team and how interactive the UI is.
Myths worth dropping
"Livewire doesn't scale." It scales like any server-rendered Laravel app: with your server and database. The real cost is a request per interaction, so chatty components (updating on every keystroke) need care, like debouncing input and keeping component state small.
"Inertia locks you in." Your controllers, models and business logic are plain Laravel. If you later need a public API, you add API routes and resources next to your Inertia controllers. It's extra work, not a rewrite.
"A separate SPA is more professional." It's more separated, which helps when separate teams own each side. For a small team, it can mean two deploys, CORS settings, auth tokens, an API contract to maintain and twice the build tooling, all to ship the same screens.
Mixing is allowed
You don't have to pick one for everything. A common, sensible setup: a JSON API that serves the mobile app and a customer-facing SPA, plus an internal admin area built with Livewire or Inertia inside the same Laravel app, because staff screens are mostly forms and tables and don't need a public contract. The only rule is to make the split deliberate, not accidental.
The short version
- Livewire: PHP-first teams, form-heavy and admin-heavy apps, one simple deploy.
- Inertia: full-stack teams who like React or Vue, rich UI without designing an API.
- Separate SPA: a mobile app or third parties share the API, or frontend and backend are separate teams.
Which one did you pick for your last Laravel project, and would you pick it again?

Be first to comment it...