A hairline ring in one color with a lit bead riding its track. Only the ring turns, so rings nest and an orb can sit still in the centre; rotation stops under reduced motion.
The source comes with full access.
One payment of $149 ($49 for now) opens the source right here and lets the CLI install every paid component, with lifetime updates.
pnpm dlx shadcn add @01orbital/bead-ringnpx shadcn add @01orbital/bead-ringyarn shadcn add @01orbital/bead-ringbunx --bun shadcn add @01orbital/bead-ringPart of the 01orbital library. With a license, put ORBITAL_TOKEN in .env.local and the same command installs it (licensed install, pricing).
It lands at components/motion/bead-ring.tsx, as source you own and edit.
The example also uses orbital-v4. Install it too:
pnpm dlx shadcn add @01orbital/orbital-v4npx shadcn add @01orbital/orbital-v4yarn shadcn add @01orbital/orbital-v4bunx --bun shadcn add @01orbital/orbital-v4import { BeadRing } from "@/components/motion/bead-ring"
import { Orbital } from "@/components/orbs/orbital-v4"
const TIDEPOOL = {
ground: "oklch(0.24 0.05 215)",
upper:
"radial-gradient(ellipse 140% 110% at 50% 38%, oklch(0.86 0.10 175) 0%, oklch(0.62 0.12 190 / 0.7) 52%, transparent 100%)",
lower:
"radial-gradient(ellipse 130% 100% at 50% 82%, oklch(0.28 0.07 235) 0%, oklch(0.28 0.07 235 / 0.8) 56%, transparent 100%)",
glow: "oklch(0.80 0.11 180)",
form: "strong",
} as const
// The orb is the lamp: the ground brightens toward it and falls off outward.
const LIT_GROUND =
"radial-gradient(circle at 50% 50%, oklch(0.42 0.09 200 / 0.55) 0%, oklch(0.30 0.06 215 / 0.35) 22%, oklch(0.22 0.03 230 / 0.12) 48%, transparent 70%)"
export default function BeadRingDemo({
animated = false,
}: {
animated?: boolean
}) {
return (
<div
data-demo="bead-ring"
className="dark relative grid w-full place-items-center overflow-hidden bg-background"
style={{ backgroundImage: LIT_GROUND }}
>
<div className="relative size-[min(84vw,600px)]">
<BeadRing
size={600}
beadSize={22}
color="oklch(0.74 0.13 188)"
duration={30}
animated={animated}
style={{ width: "100%", height: "100%" }}
/>
<BeadRing
size={440}
beadSize={18}
color="oklch(0.76 0.12 352)"
direction="ccw"
duration={20}
animated={animated}
style={{ width: "73%", height: "73%" }}
/>
<BeadRing
size={300}
beadSize={14}
color="oklch(0.86 0.11 92)"
duration={14}
animated={animated}
style={{ width: "50%", height: "50%" }}
>
<Orbital palette={TIDEPOOL} size={150} grain={0.25} />
</BeadRing>
</div>
</div>
)
}Prop
Type
It also accepts the HTML attributes of the element it renders.
npm: cn. The CLI installs them for you.
No other registry pieces.
Compare
Every Motion component side by side: whether it follows the theme or stays dark, how many parts and custom props it has, and whether it is free. Open one for its preview, API and install.
Ember Orbit
A transparent warm arc that fades along a thin circular track, with a blurred bloom behind it. Rotation is opt-in and pauses under reduced motion; the backdrop and grain are left to the consumer.