KQ-1429 · FIBER/MIST

Fiber Mist

Hundreds of fine fibres drifting through haze as a background, with the content on top: each fibre is a streamline of a slowly turning curl-noise flow, traced from an anchor the flow itself carries, so they curve together and never knot, drawn in Canvas 2D as a fine core inside a faint halo that adds light where fibres cross in a dark haze and deepens like ink silk in a pale one. The pointer combs them, its path laid into the flow so nearby fibres align to it and relax back within about a second and a half, its place on springs.glide and its presence on springs.drift, and a press stirs them aside in a spiral. It never takes focus; keyboard focus on a control inside draws the fibres into a level stream through it.

KQ-1429 · FIBER/MIST

Coldbrook Fibre

Light, spun fine

Fibre lamps for reading rooms and halls

at rest · 260 fibres drifting

Install

One command — the source lands in your repo. Or copy it from the Code tab.

$ pnpm dlx shadcn@latest add @kinetiq/fiber-mist

Props

children
React.ReactNode
default —
The content on top of the haze: a hero line, a heading, a call to action.
count
number
default 260
How many fibres drift through the haze, 40 to 800.
glow
number
default 0.5
How far each fibre's light spreads into the haze, 0 (bare threads) to 1.
drift
number
default 1
How fast the flow carries the fibres, 0 (still) to 3.
colors
readonly string[]
default ["var(--accent-bright)", "var(--signal)", "color-mix(in oklab, var(--foreground) 70%, var(--accent-bright))"]
Fibre colours, as CSS colours (up to four); each fibre takes one.
haze
string
default "var(--background)"
The haze behind them, any CSS colour: dark haze makes the fibres glow, pale haze makes them ink.
length
number
default 200
A fibre's length, in px.
curl
number
default 0.35
How tightly the flow curls, 0 (long lazy sweeps) to 1 (tight eddies).
width
number
default 0.9
A fibre's core width, in px.
interactive
boolean
default true
The pointer combs the fibres, and keyboard focus draws them into a stream.
pointerStrength
number
default 0.7
How firmly the pointer combs, 0 to 1.
pulse
boolean
default true
A press on the haze (not on a control) stirs the fibres aside in a spiral from it.
intro
boolean
default true
The fibres draw themselves out of the haze the first time it comes into view.
paused
boolean
default false
Hold the flow still; the pointer can still comb it.
seed
number
default 1
Seeds where every fibre starts, its colour and the flow.
dpr
number
default 2
Cap on the canvas's device pixel ratio, at most 2.
onActiveChange
(active: boolean) => void
default —
Fires when the pointer or keyboard focus starts (true) or stops (false) combing.
className
string
default —
Sizes and shapes the box; it fills its parent by default (h-full w-full).