User Cursor
A custom cursor with a little name tag that follows along
Move your cursor here
Hello, Sophie
Customize
Tweak the props liveIdentity
Shape
Cursor Spring
Label Spring
Color
#F39C2A#FFFFFFLabel
Props
| Name | Type | Default | Description |
|---|---|---|---|
name | string | "Sophie" | Text rendered inside the label pill. |
arrow | ReactNode | (color: string) => ReactNode | — | Replace the default arrow glyph with custom JSX. |
label | ReactNode | — | Replace the default label pill entirely. |
color | string | "#F39C2A" | Solid fill color used by the arrow and label. |
textColor | string | "#ffffff" | Text color used inside the label pill. |
size | number | 28 | Arrow size in px (square bounding box). |
tilt | number | -14 | Visual rotation of the arrow in degrees. Acts as the resting angle when direction-aware tilt is on. |
directionAwareTilt | boolean | false | Smoothly rotate the arrow + label to point in the direction of pointer movement. |
labelTiltStrength | number | 8 | Maximum rotation applied to the label pill while moving (degrees). |
trigger | "always" | "hover" | "press" | "hover" | When the custom cursor becomes visible. |
showLabel | boolean | true | Toggle the label pill on or off. |
hideNativeCursor | boolean | true | Hide the OS cursor inside the surface. |
fullScreen | boolean | false | Render the cursor in a fixed full-viewport layer so it follows everywhere. |
spring | SpringOptions | { stiffness: 380, damping: 32, mass: 0.6 } | Spring config for the arrow follower. |
labelSpring | SpringOptions | { stiffness: 220, damping: 26, mass: 0.7 } | Spring config for the label pill (defaults to laggier). |
offset | { x?: number; y?: number } | { x: 0, y: 0 } | Pixel offset from the pointer to the arrow tip. |
labelOffset | { x?: number; y?: number } | { x: size * 0.9, y: size * 0.2 + 6 } | Pixel offset from the arrow tip to the label pill. |
pressScale | number | 0.92 | Scale applied while the pointer is pressed. |
classNames | { root?, cursor?, arrow?, label?, labelText? } | — | Granular class overrides for each internal layer. |
hideOnTouch | boolean | true | Skip rendering on coarse-pointer (touch) devices. |
zIndex | number | 50 | z-index applied to the cursor layer. |
namestringText rendered inside the label pill.
"Sophie"arrowReactNode | (color: string) => ReactNodeReplace the default arrow glyph with custom JSX.
—labelReactNodeReplace the default label pill entirely.
—colorstringSolid fill color used by the arrow and label.
"#F39C2A"textColorstringText color used inside the label pill.
"#ffffff"sizenumberArrow size in px (square bounding box).
28tiltnumberVisual rotation of the arrow in degrees. Acts as the resting angle when direction-aware tilt is on.
-14directionAwareTiltbooleanSmoothly rotate the arrow + label to point in the direction of pointer movement.
falselabelTiltStrengthnumberMaximum rotation applied to the label pill while moving (degrees).
8trigger"always" | "hover" | "press"When the custom cursor becomes visible.
"hover"showLabelbooleanToggle the label pill on or off.
truehideNativeCursorbooleanHide the OS cursor inside the surface.
truefullScreenbooleanRender the cursor in a fixed full-viewport layer so it follows everywhere.
falsespringSpringOptionsSpring config for the arrow follower.
{ stiffness: 380, damping: 32, mass: 0.6 }labelSpringSpringOptionsSpring config for the label pill (defaults to laggier).
{ stiffness: 220, damping: 26, mass: 0.7 }offset{ x?: number; y?: number }Pixel offset from the pointer to the arrow tip.
{ x: 0, y: 0 }labelOffset{ x?: number; y?: number }Pixel offset from the arrow tip to the label pill.
{ x: size * 0.9, y: size * 0.2 + 6 }pressScalenumberScale applied while the pointer is pressed.
0.92classNames{ root?, cursor?, arrow?, label?, labelText? }Granular class overrides for each internal layer.
—hideOnTouchbooleanSkip rendering on coarse-pointer (touch) devices.
truezIndexnumberz-index applied to the cursor layer.
50