Laravel Idea for PhpStorm - Full-featured IDE for productive artisans!

Livewire or Inertia.js?

Published on by

Livewire or Inertia.js? image

Lately, I've been getting this question a lot from Laravel developers: "What should I learn/use - Livewire or Inertia.js?" And, of course, the answer is very individual, but let's try to compare them and provide more context for the decision.


Backstory: What Problem Does Livewire/Inertia Solve?

Over the last years, single-page applications (SPAs) became popular. You load the JavaScript and assets once, and then all links on the page don't reload the full page, but rather reload only certain parts. User experience became better, but the problem was that they take a lot of time to create properly. You need to take care of two separate parts: front-end and back-end, and then the link between them, including routing, security, and so on. So, at some point, some developers thought to simplify it somehow. That's how Livewire and Inertia.js were born, roughly at the same time, and both became quite popular.

Livewire and Inertia have very similar goals: to simplify the creation of SPAs. However, they do it differently. Livewire is focused on Laravel developers, so they could stay back-end only and not deal with JavaScript at all. Inertia is for Vue or React developers who want to simplify their workflow: not create a separate API, not deal with routing, state management, and other challenges.

So, the goal is similar but the audience is different. You can even compare the URLs:

  • laravel-livewire.com ("laravel" in the URL)
  • inertiajs.com ("js" in the URL)

Simplicity: Livewire is a Back-Ender's Comfort Zone

If you're a back-ender and need to create a project quickly with just some dynamic elements on the page, Livewire is probably your best solution. It doesn't take you outside of the comfort zone of Laravel: you kind of continue writing back-end Laravel code, creating PHP classes and Blade files. So, for Laravel developers adopting Livewire is typically faster than Inertia.

Inertia comes with a prerequisite: you need to be familiar with the front-end like Vue or React. So, it is by definition more complicated and requires more knowledge than Livewire.

Compare the sequence of actions.

Setup of Livewire:

  • Install the Livewire package via composer
  • Add 2 Blade directives into the main layout

Setup of Inertia Vue:

  • Install the Inertia package via composer
  • Add 2 Blade directives into the main layout
  • Setup Inertia middleware
  • Install client-side adapters: npm install @inertiajs/inertia @inertiajs/inertia-vue3
  • Update the main resources/js/app.js with createInertiaApp() method

As you can see, there are more preparation steps with Inertia, and you need to be familiar with how all the Vue setup works in the Laravel project, including the main layout, and things like id="app", etc.

Now, how to create a Livewire/Inertia component?

New Livewire component:

  • Make Livewire component with Artisan
  • Fill in the Livewire component class and its Blade with logic
  • Call the Livewire component with @livewire or <livewire>
  • Build a navigation/routing system between components

New Inertia component:

  • Create a Vue.js component with logic and visual template
  • Call Inertia component with Inertia::render()
  • Build a navigation/routing system between components

It seems there's roughly the same amount of work, except that Inertia doesn't have an Artisan command to create its component.

But mentally, it's much less work for Laravel developers to stay within Laravel class/Blade structure than to create a new Vue file with <template> and <script>. It's just quicker.

But if the developer can call themselves a full-stack and works with Vue.js daily, then it's a no-brainer for them to go the Inertia way.


Performance

One typical criticism of Livewire is that it makes too many requests to the server, especially if the developers are not careful with wire:model additional options. Indeed, it may make too many requests without the need for that.

It's similar to the criticism of Eloquent: less-experienced developers tend to overlook the performance because "It just works" and leave the code with potentially hundreds of unoptimized SQL queries executed under the hood of Eloquent.

And even the payload of Laravel requests and results is larger: Livewire downloads the full HTML for the block or the component, while Inertia is dealing with JSON as the result.

So, in terms of performance, default Inertia behavior is probably a better way. But, in most cases, your users wouldn't visually notice it, especially on smaller projects. Also, with Livewire, you can optimize a lot of things to improve performance.


SEO: Livewire is Better. In Theory.

I will be honest with you: I don't believe that you should rely on SEO with single-page applications. If your page is very dynamic, with a lot of moving parts, it is more like an application than a website. Heck, they are even called "Single page APPLICATIONS". In my experience, SPAs are built mostly for managing data, usually protected by the authentication mechanism, so people click around to perform actions, and not to get a crawlable website.

That said, there may be a project that needs both dynamic behavior and SEO results. For that, it's better to have server-side rendering, which is then better crawlable by search engines.

Livewire has server-side rendering by default and downloads full HTML which is readable by Google and other crawlers. So, the same thing I've mentioned as a performance issue above, becomes an advantage in terms of SEO.

Inertia by default works with client-side rendering: so every server call returns JSON which is "magically" parsed in the browser. So, search engines have harder times properly reading that page content. That said, in January 2022, Inertia launched the server-side rendering functionality. However, it may require additional effort to set up: it hands the request over to a separate Node.js service so that it can render the page and return the rendered HTML to the browser when it's done.

All those thoughts about SEO are almost theoretical. It's impossible to know upfront how a particular search engine would crawl and read the contents of your website. People say that Google became much better at reading JavaScript-powered dynamic websites over the years, but every case is pretty individual.


Career Opportunites: Everyone Wants Full-Stack Devs

It seems so far that if you're a Laravel developer with minimal front-end experience, you can just start using Livewire and create awesome projects. That is true, but it limits your job opportunities for the future.

If you try to look for Livewire-related jobs on job sites or freelance boards, there are almost none. Mostly, because Livewire is considered as a small additional tool on top of Laravel, with a pretty limited use-case.

Inertia, however, is based on fundamentally popular JavaScript frameworks like Vue or React. And you won't find many jobs mentioning Inertia specifically, either, but you would be forced to jump outside of Laravel comfort zone into a full-stack world, which in turn would open a sea of opportunities for you: these days, every company wants to hire full-stack developers.

So, from that point of view, Livewire is great if you are a solo freelancer, fully responsible for your tech decisions, and/or you build typically small projects with only some dynamic behavior. But, if you work at a bigger company that needs to bet big on some tech stack, it's most likely they will choose React/Vue as the foundation of the front-end code.


Taylor & Community: Why Not Both?

Finally, let's take a look at what other people have to say.

As an "unbiased expert" opinion, let's talk about Laravel Jetstream starter kit that was released with Laravel 8. Taylor Otwell wanted to offer a fresh take on Auth-powered boilerplate for the modern web, and for dynamic elements, he had to choose between Livewire and Inertia.

Let's hear what Taylor had to say about the choice: "I like both Livewire and Inertia. While building Jetstream, I was so torn which one to choose, that I just decided to include them both. It felt pretty risky because I had to take on to maintain two sets of front-end, but I felt those are both great projects, made by Laravel community members."

And, even when I did a poll on my Twitter with 1,854 votes, Livewire and Inertia got the same audience: 39% each, with 21% opted for "Both, depends on project".

So, the ultimate answer to the question "Livewire or Inertia" is that it's your personal choice. Mostly, it depends on your experience with Vue/React. If it's none/minimal, then Livewire is your friend.

PovilasKorop photo

Creator of Courses and Tutorials at Laravel Daily

Cube

Laravel Newsletter

Join 40k+ other developers and never miss out on new tips, tutorials, and more.

Laravel Forge logo

Laravel Forge

Easily create and manage your servers and deploy your Laravel applications in seconds.

Laravel Forge
Tinkerwell logo

Tinkerwell

The must-have code runner for Laravel developers. Tinker with AI, autocompletion and instant feedback on local and production environments.

Tinkerwell
No Compromises logo

No Compromises

Joel and Aaron, the two seasoned devs from the No Compromises podcast, are now available to hire for your Laravel project. ⬧ Flat rate of $7500/mo. ⬧ No lengthy sales process. ⬧ No contracts. ⬧ 100% money back guarantee.

No Compromises
Kirschbaum logo

Kirschbaum

Providing innovation and stability to ensure your web application succeeds.

Kirschbaum
Shift logo

Shift

Running an old Laravel version? Instant, automated Laravel upgrades and code modernization to keep your applications fresh.

Shift
Bacancy logo

Bacancy

Supercharge your project with a seasoned Laravel developer with 4-6 years of experience for just $2500/month. Get 160 hours of dedicated expertise & a risk-free 15-day trial. Schedule a call now!

Bacancy
Lucky Media logo

Lucky Media

Get Lucky Now - the ideal choice for Laravel Development, with over a decade of experience!

Lucky Media
Lunar: Laravel E-Commerce logo

Lunar: Laravel E-Commerce

E-Commerce for Laravel. An open-source package that brings the power of modern headless e-commerce functionality to Laravel.

Lunar: Laravel E-Commerce
LaraJobs logo

LaraJobs

The official Laravel job board

LaraJobs
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit: Laravel SaaS Starter Kit

SaaSykit is a Multi-tenant Laravel SaaS Starter Kit that comes with all features required to run a modern SaaS. Payments, Beautiful Checkout, Admin Panel, User dashboard, Auth, Ready Components, Stats, Blog, Docs and more.

SaaSykit: Laravel SaaS Starter Kit
Supercharge Your SaaS Development with FilamentFlow: The Ultimate Laravel Filament Boilerplate logo

Supercharge Your SaaS Development with FilamentFlow: The Ultimate Laravel Filament Boilerplate

Build your SaaS application in hours. Out-of-the-box multi-tenancy and seamless Stripe integration. Supports subscriptions and one-time purchases, allowing you to focus on building and creating without repetitive setup tasks.

Supercharge Your SaaS Development with FilamentFlow: The Ultimate Laravel Filament Boilerplate
Rector logo

Rector

Your partner for seamless Laravel upgrades, cutting costs, and accelerating innovation for successful companies

Rector
MongoDB logo

MongoDB

Enhance your PHP applications with the powerful integration of MongoDB and Laravel, empowering developers to build applications with ease and efficiency. Support transactional, search, analytics and mobile use cases while using the familiar Eloquent APIs. Discover how MongoDB's flexible, modern database can transform your Laravel applications.

MongoDB

The latest

View all →
Asymmetric Property Visibility in PHP 8.4 image

Asymmetric Property Visibility in PHP 8.4

Read article
Access Laravel Pulse Data as a JSON API image

Access Laravel Pulse Data as a JSON API

Read article
Laravel Forge adds Statamic Integration image

Laravel Forge adds Statamic Integration

Read article
Transform Data into Type-safe DTOs with this PHP Package image

Transform Data into Type-safe DTOs with this PHP Package

Read article
PHPxWorld - The resurgence of PHP meet-ups with Chris Morrell image

PHPxWorld - The resurgence of PHP meet-ups with Chris Morrell

Read article
Herd Executable Support and Pest 3 Mutation Testing in PhpStorm 2024.3 image

Herd Executable Support and Pest 3 Mutation Testing in PhpStorm 2024.3

Read article