Orbiting Circles
A ring of icons or avatars circling a round orbit, stackable into multiple orbits with reverse directions and different speeds.
A ring of icons or avatars spaced evenly along a circular orbit. Several instances can be stacked into inner and outer orbits, each with its own radius, speed, and direction — a common way to express "a technology ecosystem around a core" or a set of integrations.
npx shadcn@latest add https://webberui.com/r/orbiting-circles.jsonPlayground
Tune the props live — the code snippet updates as you go, so you can dial in the look you want before copying it.
<OrbitingCircles />
Installation
npx shadcn@latest add https://webberui.com/r/orbiting-circles.jsonOr, once registries are configured in components.json, install it as @webberui/orbiting-circles.
Usage
children are distributed evenly around the circumference. Stack two instances to build inner and outer orbits, using reverse to send the outer ring the other way and startAngle to stagger the nodes.
import { OrbitingCircles } from "@/components/ui/orbiting-circles";
<div className="relative flex h-[360px] items-center justify-center">
<OrbitingCircles radius={62} duration={16} iconSize={34} className="absolute">
<Github />
<Twitter />
<Figma />
</OrbitingCircles>
<OrbitingCircles
radius={122}
duration={28}
iconSize={42}
reverse
startAngle={20}
className="absolute"
>
<Chrome />
<Slack />
<Cloud />
<Database />
</OrbitingCircles>
</div>Props
| Prop | Type | Default | Description |
|---|---|---|---|
children | React.ReactNode | — | Elements circling the orbit, distributed evenly around the circumference |
radius | number | 100 | Orbit radius (px) |
duration | number | 20 | Duration of one full lap (seconds); larger is slower |
reverse | boolean | false | Orbit in reverse (counter-clockwise) |
iconSize | number | 40 | Edge length of a single element (px) |
startAngle | number | 0 | Starting angle of the first element (degrees) |
path | boolean | true | Show the faint circular orbit |
className | string | — | Forwarded to the outermost container |
Accessibility
- When the user has "reduce motion" enabled at the system level, the elements land at their static positions on the orbit with no circling animation
- The orbit path is marked
aria-hiddenand is decorative only