Decorative concentric SVG rings, each a faint circle with a fading quarter-arc that spins at its own speed and direction in currentColor. Static until motion is allowed; optional bottom fade.
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/orbit-ringsnpx shadcn add @01orbital/orbit-ringsyarn shadcn add @01orbital/orbit-ringsbunx --bun shadcn add @01orbital/orbit-ringsPart 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/orbit-rings.tsx, as source you own and edit.
import {
OrbitRing,
OrbitRings,
} from "@/components/motion/orbit-rings"
// The copy: change text here, not in the markup.
const COPY = { title: "Rich surfaces, quiet motion." } as const
const ring = "oklch(0.72 0.16 35)"
// Three rings that fit the frame, so the whole set reads: each spins at its
// own speed, the outer one the other way, and the bottom fades out behind a
// line of text, the way they sit behind a hero.
export default function OrbitRingsDemo() {
return (
<>
<OrbitRings className="inset-0 -bottom-24">
<OrbitRing
size={300}
accent={ring}
ringOpacity={0.9}
offset={40}
duration={20}
/>
<OrbitRing
size={450}
accent={ring}
ringOpacity={0.72}
direction="ccw"
offset={150}
duration={28}
/>
<OrbitRing
size={600}
accent={ring}
ringOpacity={0.55}
offset={90}
duration={36}
/>
</OrbitRings>
<p className="absolute inset-0 grid place-items-center text-center text-2xl font-medium tracking-tight text-balance">
{COPY.title}
</p>
</>
)
}Orbit Rings is built from 2 parts. In the example they nest like this:
OrbitRings
└─ OrbitRingOrbitRings: A decorative layer that holds OrbitRing circles, all sharing its center. Position and size it with className, for example inset-0 inside a positioned section. It ignores the pointer and is hidden from assistive tech.OrbitRing: One ring for OrbitRings: a faint full circle with a brighter quarter arc that fades along its length, centered in its parent. It spins without stopping; reduced motion holds it still.A decorative layer that holds OrbitRing circles, all sharing its center. Position and size it with className, for example inset-0 inside a positioned section. It ignores the pointer and is hidden from assistive tech.
Prop
Type
It also accepts the HTML attributes of the element it renders.
One ring for OrbitRings: a faint full circle with a brighter quarter arc that fades along its length, centered in its parent. It spins without stopping; reduced motion holds it still.
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.
Orbit Items
A circular stage that carries any items around evenly spaced spokes while counter-rotating them to stay upright. Set size, seconds per turn and direction; stops under reduced motion.
Pointer Parallax
A pointer-driven parallax group where each Parallax Layer eases toward the cursor by its own depth and settles back on leave. Mouse and pen only; holds still under reduced motion.