News

Fusion Developer Preview is released: Write PHP inside your Vue and React components

Published
Fusion Developer Preview is released: Write PHP inside your Vue and React components image

Aaron Francis and Try Hard Studios just officially launched Fusion and you can find it on Github!

Fusion is the simplest way to combine your modern JavaScript frontend with your Laravel backend. Send state from your backend to your frontend, declare methods on the backend that can be called without API endpoints from your frontend. Fusion simplifies the process of working with JavaScript in Laravel, while still giving you full control and the full power of a batteries-included backend.

A few days ago, Aaron sat down with me to record a podcast about Fusion, where the idea originated, and more. Give it a listen:

Introduction to Fusion

Aaron also has a video out covering the basics of Fusion and some of the features:

Highlights include:

  • Write PHP and JavaScript in the same file.
  • Call backend functions directly from the frontend.
  • Automatically sync state between your backend and frontend.

Please Note Fusion is in a very early development preview. Please do not use it in production yet! There are still lots of bugs (probably.)

Fusion Concepts

The readme notes that it is important to note up front what Fusion does not do:

  • Fusion does not transpile your PHP to WASM.
  • Fusion does not turn your JavaScript into PHP/Blade.
  • Fusion does not use the "PHP for templating."
  • Fusion does not automatically sync frontend/backend state.

What Fusion does do:

  • Fusion uses Vite to extract the PHP blocks from your JavaScript files and writes the PHP to disk.
  • Fusion uses Vite to inject some information into your JavaScript file as it is being transpiled.
  • Fusion runs your PHP on the backend and your JavaScript on the frontend.
  • Fusion turns your PHP block into a sort of controller.
  • Fusion uses the standard Laravel request/response lifecycle, router, auth, middleware, etc.
  • Fusion allows you to sync frontend/backend state.

You can think of the <php> block in your file as your controller, with a little bit of auto-wiring applied to inject state and call methods.

Basic Fusion Example

<php>
// Define a prop in PHP
$name = prop(Auth::user()->name);
</php>
 
<template>
<!-- Use it in Vue! -->
Hello {{ name }}!
</template>

This exposes the $name variable to your Vue template as name. It will be passed down to the frontend upon first load. You do not need to define any props on the Vue side, we take care of that for you.

You can also do class based style:

<php>
new class {
public string $name;
 
public function mount()
{
$this->name = Auth::user()->name;
}
}
</php>
 
<template>
Hello {{ name }}!
</template>

For complete details checkout the project on Github

Backstage Pass

Another feature they are launching is a Backstage pass, which gives you access to private Slack group

Eric L. Barnes photo

Eric is the creator of Laravel News and has been covering Laravel since 2012.

Filed in

Sponsored

serpapi logo
SerpApi

The Web Search API for Your LLM and AI Applications

Visit SerpApi

The latest

View all →
The Laracon Archive image

The Laracon Archive

Read article
Group Adjacent Collection Items in Laravel with chunkBy() image

Group Adjacent Collection Items in Laravel with chunkBy()

Read article
Laravel queue:work Now Prints Why the Worker Stopped image

Laravel queue:work Now Prints Why the Worker Stopped

Read article
Sidecar Brings Statamic's Control Panel to Your Existing Markdown Sites image

Sidecar Brings Statamic's Control Panel to Your Existing Markdown Sites

Read article
Collections chunkBy() and Storage Path Hardening in Laravel 13.30 image

Collections chunkBy() and Storage Path Hardening in Laravel 13.30

Read article
Forte: Parse and Rewrite Laravel Blade Templates image

Forte: Parse and Rewrite Laravel Blade Templates

Read article