crucıble

Cohort

Scripted multiplayer cursors over any content: named pointers glide on curved, slightly overshooting springs to percent or [data-cohort] targets, then click with ripples, drag selections, type comment bubbles and float emoji reactions — concurrently and on loop. Pauses politely when a real pointer enters, sleeps offscreen, and parks at first targets under reduced motion.

motionfree

Installation

CLI

npx shadcn@latest add @crucible/cohort

Manual — install dependencies, then copy the source

npm install motion

Props

PropTypeDefaultDescription
childrenReact.ReactNodeThe content the cursors perform over. Tag targets with data-cohort="name".
cursorsCohortCursor[]three cursors on a percent-based scriptThe scripted collaborators (2–4 reads best).
loopbooleantrueRestart each script when it ends.
speedScalenumber1Playback rate of every script.
pauseOnPointerbooleantrueWhen the visitor's pointer enters, cursors finish their step then idle; they resume 1.5s after it leaves.
pausedbooleanfalseFreeze the scripts where they are.
refReact.Ref<CohortHandle>Imperative handle — restart().
Also accepts all props of Omit<React.ComponentPropsWithoutRef<"div">, "children"> — they pass through to the underlying element.

Honors prefers-reduced-motion with a designed static fallback, and passes className through.