Introduction
Earmark keeps your favourite pages alive beside the one you are on. Press + and the page you are looking at steps into the Wings while it keeps running. Click it later and it swaps back onto the stage instantly, with no page load. Charts keep streaming, Livewire components keep polling, videos keep playing, and forms keep every character you typed.
It is inspired by macOS Stage Manager and built on Livewire's wire:navigate.
The stage and the Wings
Earmark borrows from the theatre. The page you are working on is on the stage. Pages you save wait just offstage in the Wings, still running, ready to step back on the moment you click them. The Wings can be arranged as a Dock, a Panel or a Theater, anywhere around the edge of the screen.
Who it is for
Earmark shines in apps people live in all day, where they bounce between a handful of views: admin panels, dashboards, CRMs, support desks, trading and operations tools. Instead of juggling browser tabs, your users keep a few views alive inside your app and see them update while they work.
Requirements
- PHP 8.4 or newer
- Laravel 11, 12 or 13
- Livewire 4.4 or newer, with pages navigated by
wire:navigate(Earmark routes same-origin links through it for you)
Browser support
Earmark needs Element.moveBefore() to keep saved pages alive while Livewire swaps pages.
| Browser | Support |
|---|---|
| Chrome and Edge 133+ | Full |
| Firefox 144+ | Full |
| Safari | Not yet. Visitors get your normal site without Earmark. |
Nothing breaks in unsupported browsers: Earmark simply stays out of the way.
What gets stored
Only the list of saved views is stored: path, title, favicon, scroll position, timestamps and whether a view was collected or locked. Page content is never stored. Live views live in the visitor's browser memory, and frozen snapshots are rebuilt from the page when needed.