Installing Inertia - React in Laravel Project

Nov 22, 2022

Installing Inertia - React in Laravel Project

Let's learn how to install Inertia in a Laravel project with React

Author

Aanchal Goyal
Aanchal GoyalSenior Software Engineer - II

Inertia ships with official server-side adapters for Laravel. In this article, we will install Inertia.js in Laravel with React.js.

First, we will perform server-side installation and then continue with the client-side installation.

Step 1 - Install the Inertia package in your Laravel project

Run the command below to install the Inertia package in your project via composer:

composer require inertiajs/inertia-laravel

Step 2 - Add root template

Create a new file, app.blade.php in resources/views and paste the below code. This file will be loaded on the first page visit. This will be used to load your site assets (CSS and JavaScript), and will also contain a root <div> to boot your JavaScript application in.

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale-1.0, maximum-scale=1.0" />
        <link href="{{ mix('/css/app.css') }}" rel="stylesheet" />
        <script src="{{ mix('/js/app.js') }}" defer></script>
    </head>
    <body>
        @inertia
    </body>
</html>

Step 3 - Setup middleware

Next, setup the inertia middleware. Run the below command to do the same.

php artisan inertia:middleware

Once generated, register the HandleInertiaRequests middleware in your App\Http\Kernel, as the last item in your web middleware group.

'web' => [
    // ...
    \App\Http\Middleware\HandleInertiaRequests::class,
],

Now, our server-side installation is done.

Next, we will perform the client-side installation.

Step 4 - Install client-side dependencies

Install the Inertia client-side adapters using NPM or Yarn.

npm install @inertiajs/inertia @inertiajs/inertia-react 
yarn add @inertiajs/inertia @inertiajs/inertia-react

Step 5 - Initialize app

Next, update your main JavaScript file app.js in resources/js/app.js. If you have existing app.js in that folder, rename the old file, create a new app.js, and write the below code in that file. What we're doing here is initializing the client-side framework with the base Inertia component.

import React from "react";
import { render } from "react-dom";
import { createinertiaApp } from "@inertiajs/inertia-react";

createInertiaApp({
    resolve: name => import(`.Pages/${name}`),
    setup({ el, App, props }) {
        render(<App {...props} />, el);
    }
});

Step 6 - Install babel plugins

Why do we need Babel? Code splitting breaks apart the various pages of your application into smaller bundles, which are then loaded on demand when visiting new pages. This can significantly reduce the size of the initial JavaScript bundle, improving the time first to render. To use code splitting with Inertia, you'll need to enable dynamic imports. Thatโ€™s why you'll need a Babel plugin to make this work.

Run the below commands to install the babel plugins:

npm install @babel/plugin-syntax-dynamic-import
yarn add @babel/plugin-syntax-dynamic-import

Next, create a new file `.babelrc` in your project and add the following code.

{
    "presets": ["@babel/preset-env", "@babel/preset-react"]
} 

Step 7 - Create a Test.js component

Now, create a new Test.js component in `resources/js/Pages` for testing if our integration is successful.

import React from 'react';
import { Head } from '@inertiajs/inertia-react';

export default function Test() {
    return (
        <h1>Welcome</h1>
    )
} 

Step 8 - Make controller and route

To render the component, make TestController and add a new route in web.php.

<?php 

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Inertia\Inertia; 

class TestController extends Controller 
{
    public function show() {
        return Inertia::render('Test');
    }
}
Route::group([
    "middleware" => ["auth"],
], function(){
    Route::get('/test', 'TestController@show');
});

Conclusion

Thatโ€™s it.

Try to call the route project_url/test, and your inertia with React in Laravel integration is done.
Hope you found this article helpful.

Subscribe to Our Newsletter

More from the engineering frontline.

Dive deep into our research and insights on design, development, and the impact of various trends to businesses.
Insight
Why Legacy Systems Make Business Growth More Expensive: Navigate A Smarter Path to Legacy Modernization
Sep 23, 2026

Why Legacy Systems Make Business Growth More Expensive: Navigate A Smarter Path to Legacy Modernization

Learn how legacy systems make business growth more expensive and how edge-first modernization can remove constraints without replacing the existing system.

Insight
SSO, Audit Logs and RBAC: The Enterprise Features AI Prototyping Tools Do Not Cover | Sarika Gautam
Sep 23, 2026

SSO, Audit Logs and RBAC: The Enterprise Features AI Prototyping Tools Do Not Cover | Sarika Gautam

Why AI-generated prototypes fail enterprise review: the context behind SSO, the cost of skipping audit logs, and how role explosion makes RBAC a product of its own.

Insight
Feature Flags as Technical Debt: The Cleanup Nobody Schedules
Sep 21, 2026

Feature Flags as Technical Debt: The Cleanup Nobody Schedules

This blog explains how unmanaged feature flags create technical debt and how teams can detect, manage, and remove them safely.

Insight
Building AI-First Enterprises: Why System Design Matters More Than AI Adoption
Sep 21, 2026

Building AI-First Enterprises: Why System Design Matters More Than AI Adoption

This blog explores how system design, architecture, and validation shape AI-first enterprises, while examining AIโ€™s impact on software engineering and human decision-making.

Insight
The Product Studio in the AI Era: What Actually Changes | Sarika Gautam
Sep 21, 2026

The Product Studio in the AI Era: What Actually Changes | Sarika Gautam

What changes in product development when AI writes the code: the shift to architecture, the token cost of unplanned builds, and why juniors still matter.

Insight
AI and the Future of Digital Customer Experience: Where Technology Meets Human Creativity
Sep 18, 2026

AI and the Future of Digital Customer Experience: Where Technology Meets Human Creativity

A discussion on how AI, human creativity, research, and cross-functional collaboration are shaping the future of digital customer experience.

Insight
Scaling Down Before Scaling Up: Why Bigger Servers Donโ€™t Fix Bad Architecture
Sep 17, 2026

Scaling Down Before Scaling Up: Why Bigger Servers Donโ€™t Fix Bad Architecture

This blog explores how inefficient backend architecture can cause performance issues even under low traffic, covering practical ways to reduce database load, API latency, and resource usage before scaling infrastructure.

The Right Conversation Can

Save You Six Months.

Book a call