Reactive Magento
without the JavaScript
Ship reactive Magento 2 UIs in pure PHP. No JavaScript. No context switching. Just you and your code.
<?php
declare(strict_types=1);
namespace Vendor\Module\Magewire;
use Magewire\Component;
class Counter extends Component
{
public int $count = 0;
public function increment(): void
{
$this->count++;
}
public function decrement(): void
{
$this->count--;
}
}
<?xml version="1.0"?>
<page
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="content">
<block
name="counter"
template="Vendor_Module::magewire/counter.phtml">
<arguments>
<argument
name="magewire"
xsi:type="object">
Vendor\Module\Magewire\Counter
</argument>
</arguments>
</block>
</referenceContainer>
</body>
</page>
<div class="counter">
<p class="count">
Count: <strong>{{ $magewire->count }}</strong>
</p>
<button wire:click="increment">Increment</button>
<button wire:click="decrement">Decrement</button>
</div>
This is just a counter. Magewire handles forms, modals, search, pagination, real-time validation, and much more. Explore the docs, get inspired, and ship something great.
Install
Three commands. You're up and running.
Need more? Everything else is in the documentation.
Know Livewire?
You already know Magewire.
A faithful port of Laravel Livewire for Magento 2. Same component model. Same wire: directives. Same mental model. If you know Livewire, you're already productive.
<?php
namespace App\Livewire;
use Livewire\Component;
class Counter extends Component
{
public int $count = 0;
public function increment(): void
{
$this->count++;
}
public function decrement(): void
{
$this->count--;
}
}
<?php
namespace Vendor\Module\Magewire;
use Magewire\Component;
class Counter extends Component
{
public int $count = 0;
public function increment(): void
{
$this->count++;
}
public function decrement(): void
{
$this->count--;
}
}
<div>
<h2>{{ $count }}</h2>
<button wire:click="decrement">−</button>
<button wire:click="increment">+</button>
</div>
<div>
<h2>{{ $magewire->count }}</h2>
<button wire:click="decrement">−</button>
<button wire:click="increment">+</button>
</div>
Alpine.js under the hood. Hyvä developers already know it.
Magewire's reactive layer runs on Alpine.js, the same engine that powers Hyvä Theme. If you've built on Hyvä, you already speak Alpine.
x-data,
x-on,
@click, all second nature. You're ahead before you write a line.
Alpine.js and Livewire share the same creator: Caleb Porzio. They don't just work well together; they were built for each other.
Hit the ground running
Any Livewire developer can ship Magewire code from day one. No ramp-up. No custom docs. They already know how.
No invented abstractions
Nothing to unlearn. No custom APIs. No proprietary directives. Everything maps 1-to-1 with Livewire, on purpose.
AI-ready, out of the box
ChatGPT, Copilot, Claude: they all know Livewire inside out. That means they know Magewire too. Ask. Apply. Ship.
Compatibility
Sponsors
Free and open source. Kept running by these generous sponsors.
Become a sponsor
Contributors
Every commit, fix, and bright idea traces back to these people — and the teams who champion Magewire as their own.
People
Willem Poortman
Vinai Kopp
Kiel
Tjitse
Ryan Hissey
Adam
Angel Vilaplana
Anton Siniorg
Dan-Andrei Rotariu
Jacob
Jeroen Boersma
Jeroen Noten
Jisse Reitsma
Kamil Balwierz
Lucas van Staden
Mark Shust
Martin Nguyen
Mehmet Uygun
Pascal Sopacua
Peter Jaap Blaakmeer
Pieter Hoste
Ross
Thomas Hauschild
kolaente
mvenghaus
Organizations
Powered by Magewire.
Real products. Build with Magewire.
Know an awesome project built on Magewire?
We'd love to feature it here. Start a discussion on GitHub and let's make it happen.