Chrome DevTools extension for debugging Livewire applications. Supports Livewire 3 and Livewire 4 (Laravel 13+). Shows an Alpine.js version badge when Alpine 3.15+ is present.
- Components tab — hierarchical component tree, filterable, with an editable state inspector. Edit a public property in the panel and the change is pushed back via
$wire.set. - Events tab — logs every
Livewire.dispatch(...)call. Pause / clear, drill into payloads. - Timeline tab — records a row on every component commit; pick a past row and click Travel to state to restore that snapshot.
- Hover highlight — hover a node in the tree, the matching element is highlighted on the page.
- Right-click inspect — right-click any Livewire element on the page and pick Inspect Livewire component.
- Version badges — header shows detected Livewire version and Alpine version.
- Dark mode — follows the Chrome DevTools theme.
npm install
npm run buildThen in Chrome:
- Open
chrome://extensions - Enable Developer mode
- Click Load unpacked and select the
dist/folder
Open any Livewire page, then open DevTools and switch to the Livewire panel.
| Command | What it does |
|---|---|
npm run dev |
Vite dev server with HMR for the panel |
npm run build |
Type-check + production build into dist/ |
npm run typecheck |
vue-tsc --noEmit only |
npm run zip |
Zip dist/ into release/livewire-devtools-…-chrome.zip |
npm run release |
build + zip |
src/
manifest.ts typed MV3 manifest
background/ service worker (message router + context menu)
content/ content scripts (hook loader, proxy)
injected/ page-world scripts
hook.ts global event bus on window
detector.ts polls for window.Livewire
backend.ts main orchestrator (driven by adapter)
backend/ highlighter + right-click selector
adapter/ Livewire abstraction
detect.ts feature-probe version detection
v3.ts Livewire 3 impl
v4.ts Livewire 4 impl (uses interceptMessage)
shared.ts normalize + dispatch-wrap helpers
shared/ bridge, typed message union, devalue transfer
panel/ Vue 3 DevTools panel (Pinia stores, tab views)
popup/ action popups
hook-loader.tsruns atdocument_start, injectshook.tsinto the page main world. This createswindow.__LIVEWIRE_DEVTOOLS_GLOBAL_HOOK__.proxy.tsruns atdocument_idle, injectsdetector.ts. The detector polls forwindow.Livewire; on success it postslivewire:detectedto the service worker, which colors the toolbar icon.- When DevTools is opened,
panel/devtools.tsregisters the Livewire panel. The panel (panel/main.ts) opens a long-livedchrome.runtime.connectport to the service worker, keyed by tab id. - The panel sends
init. The proxy content script sees it and injectsbackend.tsinto the page main world (once). The backend announces itself viareadyand begins emittingflush,event:triggered, andtimeline:mutationmessages. - The Livewire adapter (v3 or v4) is selected by feature probe:
interceptMessage→ v4,.hook()+.all()→ v3. All version-specific logic is confined tosrc/adapter/v3.tsandsrc/adapter/v4.ts.
MIT. This tool started life as a fork of rw4lll/livewire-devtools, which in turn drew from vuejs/vue-devtools.