# Livewire or Inertia for a Laravel app

> Livewire keeps the UI in Blade. Inertia keeps it in Vue and leaves the routes in Laravel. The starter kit you pick is the decision.

- URL: https://laravel-vuejs.space/livewire-vs-inertia
- Author: Anass Ez-zouaine (https://laravel-vuejs.space/author/anass-ez-zouaine)
- Published: 2026-10-10
- Topics: Laravel, VueJs, Inertia

“Livewire vs Inertia” is a team question wearing a package question. Both ship as official Laravel starter kits, both use Laravel routes, and they do not split a single screen cleanly. Here is how to pick one for the product UI.

> **TL;DR**
>
> -   **Livewire**: UI in Blade and PHP classes. Pick it when the team is PHP-first.
> -   **Inertia + Vue**: UI in Vue components, routes in Laravel. Pick it when the interface is a Vue interface.
> -   Neither is a public HTTP API. Policies stay the same either way.
> -   The starter kit you pick is the decision; don’t install both for one screen.
>
> **What you'll learn**
>
> -   What Livewire and Inertia each are
> -   How the same jobs map to different files
> -   Why you should not mix them on one screen
>
> **Who it's for:** Teams choosing a Laravel front-end approach
>
> **Applies to:** Laravel 13 · Livewire 4 starter kit · Vue starter kit (Inertia 3)

Laravel’s current AI docs talk about Livewire 2, 3, and 4, so a new Livewire starter kit is the Livewire 4 line. This page does not pin a kit build number. The Vue side of the same choice, including a separate SPA and Nuxt, is [Inertia, a SPA, or Nuxt](https://laravel-vuejs.space/laravel-vue-in-2026).

## What each one is

### Livewire

Livewire renders Blade and updates the parts of the page that changed. You write PHP classes and HTML. JavaScript shows up when a screen needs it, not as the structure of the app. Choose the Livewire starter kit when the people building the product are comfortable in Laravel and do not want a Vue codebase.

### Inertia with Vue

Inertia renders Vue pages. Controllers return `Inertia::render`. The browser app is Vue 3, with the kit’s TypeScript and Vite. Routes stay in `routes/web.php`. There is no Vue Router on those screens. Choose the Vue starter kit when the interface is a Vue interface, or when the people building it already work in components.

> **Heads up: neither one is your API**
>
> A separate HTTP API, for a mobile app or a second front end, is a third path. Inertia is not that API. Livewire is not that API either. [Sanctum](https://laravel-vuejs.space/laravel-sanctum-vue-spa) is the cookie layer if the other front end is Vue.

## The same jobs, different files

| Job | Livewire starter kit | Vue and Inertia |
| --- | --- | --- |
| First page | A Livewire component | [Application setup](https://laravel-vuejs.space/application-setup) |
| Create and edit | Component properties and actions | [CRUD](https://laravel-vuejs.space/laravel-inertia-vue-crud) |
| Login | The kit’s auth screens | The kit’s auth screens, or [Fortify](https://laravel-vuejs.space/laravel-fortify-vue) for a SPA |
| Who may edit | A policy, called from the component | A [policy](https://laravel-vuejs.space/laravel-vue-policies), called from the controller |
| Public HTML | Blade is already HTML | [SSR](https://laravel-vuejs.space/inertia-ssr), and only if you need it |

> **Tip: authorization doesn't move**
>
> The policy is the same class either way. Do not rewrite authorization because the template language changed.

## Do not install both for one screen

A Livewire component inside a Vue page, or a Vue island inside a Livewire screen, is two systems owning one URL. Validation, redirects, and loading state will not agree. If a single widget has to be interactive and the rest of the app is Livewire, Livewire can host that widget. If the product is Vue, build the widget as a component and talk to Laravel through Inertia.

You can still change your mind before the first feature. You cannot cheaply change your mind after a year of pages. The starter kit is the migration. Running `composer require livewire/livewire` inside the Vue kit, or the reverse, is how the two clients end up in one repo without a plan.

> **Decide in one minute**
>
> Answer these about the people who will build the screens:
>
> 1.  Do they write Vue components today? **Inertia.**
> 2.  Do they live in Blade and PHP and want to stay there? **Livewire.**
> 3.  Is there a second client (mobile app, partner) that needs JSON? Add an API with **Sanctum**, whichever you picked.

## Where this stops

Requirements that apply to both, including PHP 8.3 and Node when you are on the Vue kit, are [what you need](https://laravel-vuejs.space/requirements). Deploying the Vue build is [deploy](https://laravel-vuejs.space/deploy-laravel-vue). The Livewire starter kit also runs Vite, so `npm run dev` writes `public/hot` there too. Do not deploy that file from either kit.

## Recap

- Livewire = Blade + PHP; Inertia = Vue pages + Laravel routes.
- Choose by who writes the screens, not by benchmarks.
- Policies, routes and Vite stay; only the template layer differs.
- One UI system per screen.

## FAQ

**Q: Is Livewire or Inertia better for Laravel?**

Neither in general. Livewire suits PHP-first teams working in Blade; Inertia suits teams that build the UI in Vue components.

**Q: Can I use Livewire and Vue on the same page?**

Avoid it. Two systems owning one URL disagree on validation, redirects and loading state. Pick one per screen, ideally one per app.

**Q: Does Inertia give me an API for a mobile app?**

No. Inertia serves your own pages. A mobile app needs a separate JSON API, usually with Sanctum tokens.

## Next steps

- [Laravel and Vue in 2026: Inertia, a SPA, or Nuxt](https://laravel-vuejs.space/laravel-vue-in-2026)
- [Set up a Laravel 13 + Vue 3 app](https://laravel-vuejs.space/application-setup)
- [Laravel policies on a Vue page](https://laravel-vuejs.space/laravel-vue-policies): the part that doesn’t change.
- [Laravel docs: Starter kits](https://laravel.com/docs/13.x/starter-kits)

## Sources

- [Laravel 13: Starter kits](https://laravel.com/docs/13.x/starter-kits)
- [Livewire documentation](https://livewire.laravel.com/docs)
- [Inertia v3 documentation](https://inertiajs.com/docs/v3/getting-started)
