Motion

Orbit Rings

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.

Installation

pnpm dlx shadcn add @01orbital/orbit-rings
npx shadcn add @01orbital/orbit-rings
yarn shadcn add @01orbital/orbit-rings
bunx --bun shadcn add @01orbital/orbit-rings

Part 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.

Usage

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>
    </>
  )
}

Anatomy

Orbit Rings is built from 2 parts. In the example they nest like this:

OrbitRings
└─ OrbitRing
  • OrbitRings: 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.

API reference

OrbitRings

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.

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.

Prop

Type

It also accepts the HTML attributes of the element it renders.

Dependencies

npm: cn. The CLI installs them for you.

No other registry pieces.