—— what it is
Built for the
moment you hover.
Three interlocking systems. Any cursor state, any effect, composable.
01
Spring Physics
A Velocity Verlet integrator runs every animation frame. Stiffness, damping, and mass are per-variant — so your link cursor can feel airy while your button cursor snaps.
02
Variant Stack
Nested hover zones push variants onto a stack. Leaving an element pops back to the previous state — no global state management, no stale cursors.
03
Plugin System
Additive canvas plugins slot in next to the cursor — trails, confetti, spotlight, reveal, freehand draw. Each is a single component, zero configuration required.
—— cursor variants
Every state,
considered.
Hover any card to see the variant live. Each has independent spring parameters.
default
8px dot, instant spring
link
Airy 44px ring
button
60px with label
text
2px I-beam caret
view
76px slow orbit
drag
Green drag indicator
close
Red deletion zone
invert
mix-blend-mode: difference
square
38px rounded rect
spot
130px ambient glow
—— plugin system
Effects that
sell themselves.
14 variants across trails, click effects, and canvas overlays. One component each.
← select a plugin above
—— theme system
One line.
Any look.
Click a theme below — the cursor changes live across the entire page.
—— custom cursors
Beyond the arrow.
SVG and animated element cursors, ready to use. Hover any card.
Crosshair
Precision reticle with tick marks.
Pointer
Hand-drawn arrow with depth shadow.
Spinning Star
4-point star, rotates continuously.
Blinking Eye
Anatomical eye, blinks every 4 s.
Grab Hand
Distinct fingers for draggable zones.
Gradient Disc
Conic rainbow, spinning glow.
Pulse Rings
Two rings breathing in phase.
—— hooks
Feel the data.
Four hooks that expose cursor state to your components.
useVelocityCursor
EMA-smoothed speed, angle, and component velocities. Idle decay built in.
useMagnetic
Elements that attract the cursor within a configurable radius.
useCursorIdle
Fires after a configurable idle timeout. Good for screensavers or nudges.
moving — stop 2 s to trigger
useCursorZone
Observe a ref and auto-switch the variant when it enters the viewport.
scroll here
Hover to preview the "view" variant.
useCursorZone switches it automatically on scroll.
—— CursorLens
See closer.
Real DOM-duplication magnifier. Cursor hides while hovering — pure lens focus. Move over the table.
<CursorLens size={170} scale={2.2}><YourContent /></CursorLens>—— emitCursorEvent
Effects without
clicking.
Programmatically fire the active plugin at any position. No real user interaction needed.
emitCursorEvent("click", { x, y }) // fires cursor:click CustomEvent—— get started