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.

For your AI agent

Copies a prompt. Paste it into the AI agent you already have open.

Read https://laravel-vuejs.space/livewire-vs-inertia.md
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.
Do not rewrite authorization because the template language changed.
Do not install both for one screen.
Do not deploy that file from either kit.
Show the diff. Do not commit.

Next: Ziggy or Wayfinder for Laravel routes in Vue

On this page · 8 sections
  1. What each one is
  2. Livewire
  3. Inertia with Vue
  4. The same jobs, different files
  5. Do not install both for one screen
  6. Where this stops
  7. Recap
  8. FAQ
  9. Next steps
  10. Sources

“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.

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 is the cookie layer if the other front end is Vue.

The same jobs, different files#

JobLivewire starter kitVue and Inertia
First pageA Livewire componentApplication setup
Create and editComponent properties and actionsCRUD
LoginThe kit’s auth screensThe kit’s auth screens, or Fortify for a SPA
Who may editA policy, called from the componentA policy, called from the controller
Public HTMLBlade is already HTMLSSR, 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. Deploying the Vue build is deploy. 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#

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.

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.

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#

Sources#

Found this useful?

Ask questions, share what you built.

Join thousands of Laravel and Vue developers in our Facebook group, or get new posts in your Telegram feed. Sharing this article helps too.

Keep reading

Newsletter

Get the best of Laravel & Vue, once a month.

One short email with new guides, release notes worth reading and hand-picked community links. No spam, unsubscribe any time.