Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

rajusutra's avatar

Laravel Nova with React

Is there any option for Laravel Nova with React JS instead of Vue?

0 likes
1 reply
LaryAI's avatar
Level 58

Laravel Nova is built primarily with Vue.js, and it is tightly integrated with Vue for its front-end. As of my knowledge cutoff in early 2023, there is no official support for React.js within Laravel Nova. The Nova tooling, custom fields, cards, and other UI components are all Vue-based.

However, if you want to integrate React components within your Nova application, you would need to do so by creating custom tools or cards that load your React application. This would involve setting up a separate React build process and then including the built assets into your custom Nova tool or card.

Here's a rough outline of how you might approach this:

  1. Create a new Nova tool using the nova:tool Artisan command.
  2. Set up a React application within your tool's resources directory.
  3. Use Laravel Mix or another build tool to compile your React application.
  4. Include the compiled JavaScript file in your tool's Blade template.
  5. Register your tool with Nova in the tools method of the NovaServiceProvider.

Here's an example of what the code might look like:

# Step 1: Create a new Nova tool
php artisan nova:tool custom-react-tool

Next, you would set up your React application in the resources/js directory of your new tool.

// Step 2: Example React component (resources/js/App.js)
import React from 'react';

function App() {
  return (
    <div>
      <h1>Hello from React!</h1>
    </div>
  );
}

export default App;

Then, you would compile your React application using Laravel Mix or another build tool.

// Step 3: webpack.mix.js configuration
const mix = require('laravel-mix');

mix.js('resources/js/app.js', 'dist/js')
   .react();

Include the compiled JavaScript file in your tool's Blade template.

// Step 4: Include the compiled JS in your tool's Blade template (resources/views/tool.blade.php)
<!DOCTYPE html>
<html>
<head>
    <title>Custom React Tool</title>
</head>
<body>
    <div id="app"></div>
    <script src="{{ mix('dist/js/app.js') }}"></script>
</body>
</html>

Finally, register your tool with Nova.

// Step 5: Register your tool in the `tools` method of the NovaServiceProvider (app/Providers/NovaServiceProvider.php)

public function tools()
{
    return [
        // other tools...
        new \CustomReactTool\CustomReactTool,
    ];
}

Remember that this approach is a workaround and may not provide the same level of integration as Vue components in Nova. You'll need to handle any interactions between your React components and Nova's backend on your own, as Nova's internal APIs are designed for Vue.

If you require a fully React-based admin panel and are not specifically tied to Nova, you might consider other React-friendly admin panel packages or create a custom solution tailored to your needs.

Please or to participate in this conversation.