Skeleton loaders your Livewire app already deserves.

Add wire:ghost to any element. Ghostwire synthesizes a matching skeleton from your live DOM the instant a request starts — no hand-written placeholder markup, zero layout shift.

Get started Try the playground See the gallery

Without Ghostwire

(blank while loading — then content pops in)

With Ghostwire

Zero markup

Walks the live DOM and classifies nodes automatically — no placeholder templates to hand-author or keep in sync.

Dual Livewire bridge

3.6+ and 4.x from the same package, selected by runtime feature detection, never a version string.

Morph-safe by construction

The Ghost Layer never touches Livewire's reconciled tree — concealment is visibility/opacity only.

Accessible by default

aria-busy, focus preservation, and a shared live region — axe-core clean at the strictest level.