crucıble

Millrace

An infinite marquee whose speed and skew react to scroll velocity, damped through a spring. Stamped outline text fills bright white past a velocity threshold.

motionfree

Installation

CLI

npx shadcn@latest add @crucible/millrace

Manual — install dependencies, then copy the source

npm install motion

Props

PropTypeDefaultDescription
childrenReact.ReactNodeRepeating content — text, logos, whatever. Duplicated internally for a seamless wrap.
repeatnumber4How many copies of children to lay end to end. Increase for short content.
baseVelocitynumber40Idle drift speed in px/second when scroll is still.
velocityFactornumber4How strongly scroll velocity accelerates/reverses the drift.
skewFactornumber6Max skew in degrees applied at high scroll velocity.
direction"left" | "right""left"Base travel direction at rest.
pauseOnHoverbooleantrueSlow to a crawl on hover.
scrollerReact.RefObject<HTMLElement | null>Track the scroll velocity of this element instead of the window. Pass a ref to an overflow-y-auto container to drive the race from an internal scroll region.
heatThresholdnumber350Smoothed |velocity| (px/s) above which the fill ignites.
heatFillbooleantrueDisable the velocity fill / smear / spark treatment entirely.
steelColorstring"#8a8a92" (neutral)Outline (resting) text color.
heatColors[string, string]["#c9c9d2", "#ffffff"]Fill gradient stops, dim to bright.
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.