Up to three concentric rings of text spinning around an optional centre badge or image. Each ring has its own text, colour and speed (negative speed reverses direction); the radii pack inward automatically based on font sizes.
import SpinTextCircleFx from '@crazygl/hero-spintextcirclefx';
<SpinTextCircleFx
ring1Text="REACT · BITS · COMPONENTS · "
ring2Text="DESIGN — MOTION — CODE — "
ring1Speed={2}
ring2Speed={-1}
/>ring1Text, ring1Color, ring1FontSize, ring1Speed (turns/min, negative reverses).ring2Enabled / ring3Enabled toggles plus matching text, colour, font size and speed.hoverMode — none or pause (pauses all rings on pointer over).showCenterDisc, centerDiscType (text/image), centerText, centerImage, centerSize, discColor, centerTextColor.headingFontFamily, headingFontWeight.transparentBackground, bgColor.npm install @crazygl/hero-spintextcirclefxThe component takes the same props you see in the live customizer on the right — every default ships poster-quality.
import SpinTextCircleFX from '@crazygl/hero-spintextcirclefx';
export default function Landing() {
return (
<SpinTextCircleFX />
);
}The wrapper renders static HTML on the server and only initialises the canvas after hydration, so search engines see your copy.
// app/page.tsx — works in SSR-first frameworks (Next, Remix, Astro, etc.)
'use client';
import SpinTextCircleFX from '@crazygl/hero-spintextcirclefx';
export default function Page() {
return (
<section>
<SpinTextCircleFX
heading="Say hi."
subheading="Your new hero."
/>
<article>
<h2>Welcome</h2>
<p>Your content keeps its own voice below the hero.</p>
</article>
</section>
);
}