crucıble

Runnel

A vertical tracing beam that draws itself along your content as the user scrolls, its white-to-blue-violet stroke tipped with a glowing white head.

gsapfree

Installation

CLI

npx shadcn@latest add @crucible/runnel

Manual — install dependencies, then copy the source

npm install gsap @gsap/react

Props

PropTypeDefaultDescription
childrenReact.ReactNodeContent the beam runs alongside. Its height (via ResizeObserver) drives the SVG's length.
side"left" | "right""left"Which edge of the container the beam hugs.
colors[string, string]["#ffffff", "#818cf8"] (white -> blue-violet)Gradient stops for the stroke, tail to head.
startstring"top 80%"ScrollTrigger start, relative to the wrapper entering the scroller's viewport.
endstring"bottom 60%"ScrollTrigger end, relative to the wrapper leaving the scroller's viewport.
scrollerstring | Element | React.RefObject<HTMLElement | null>the window. Pass a ref or element to drive the beam from an internal overflow-y-auto container insteadThe element ScrollTrigger measures scroll progress against.
strokeWidthnumber2Stroke width in px.
insetnumber28Width in px reserved for the SVG lane, and the padding applied to push content off the edge.
Also accepts all props of React.ComponentPropsWithoutRef<"div">they pass through to the underlying element.

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