Custom Cursor

Interactive cursor component with smooth animations and target morphing

custom-cursor-tw
With Image
No Image
Circle

Customize

Size & Appearance

40px
6px
2px

Physics

150
20
300
30

Behavior & Options

0px

Props

circleSizenumber

Size of the outer circle in pixels

Default:40
dotSizenumber

Size of the inner dot in pixels

Default:6
circleColorstring

Color of the outer circle (any valid CSS color)

Default:"rgb(0, 0, 0)"
dotColorstring

Color of the inner dot (any valid CSS color)

Default:"rgb(0, 0, 0)"
circleStiffnessnumber

Spring stiffness for the outer circle (higher = faster)

Default:150
circleDampingnumber

Spring damping for the outer circle (higher = less bounce)

Default:20
dotStiffnessnumber

Spring stiffness for the inner dot (higher = faster)

Default:300
dotDampingnumber

Spring damping for the inner dot (higher = less bounce)

Default:30
circleBorderWidthnumber

Border width of the outer circle in pixels

Default:2
classNamestring

Additional class name for the container

Default:""
circleClassNamestring

Additional class name for the circle

Default:""
dotClassNamestring

Additional class name for the dot

Default:""
showOnTouchboolean

Whether to show the cursor on touch devices

Default:false
zIndexnumber

Z-index of the cursor

Default:9999
elasticboolean

Enable subtle elastic stretch in direction of movement

Default:false
imageClassNamestring

Additional class name for the image elements

Default:""
targetPaddingnumber

Padding between cursor and target in pixels

Default:0
targetsstring[]

CSS selectors for target elements to trigger effects on hover

Default:[]
images(string | undefined)[]

Image URLs corresponding to each target (optional - targets without images will still morph the cursor)

Default:[]
imageScalenumber

Scale amount for images when hovering targets (0-1)

Default:0.9
imageAnimationDurationnumber

Duration of image scale animation in seconds

Default:0.6
mixBlendModestring

Mix blend mode for the cursor elements

Default:undefined
childrenReact.ReactNode

Custom content to render inside the cursor

Default:undefined