An avatar that is a planet. The name picks one of eight colorways, so the same person always gets the same planet with nothing stored. Circle or squircle.
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/planet-avatarnpx shadcn add @01orbital/planet-avataryarn shadcn add @01orbital/planet-avatarbunx --bun shadcn add @01orbital/planet-avatarPart 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/avatar/planet-avatar.tsx, as source you own and edit.
import { PlanetAvatar } from "@/components/avatar/planet-avatar"
// A review thread: each contributor gets a planet from their name, plus the
// same mark as circle, app tile and favicon.
const THREAD = [
{
name: "Mara Vance",
when: "2h",
line: "L42",
text: "pull this into a token?",
},
{ name: "Ivo Kessler", when: "30m", text: "Good catch, done." },
{ name: "Priya Anand", when: "3h", text: "shipping this one." },
]
export default function Demo() {
return (
<div className="flex w-full max-w-xl flex-col gap-8 p-6">
<ul className="flex flex-col gap-4">
{THREAD.map((t) => (
<li key={t.name} className="flex items-start gap-3">
<PlanetAvatar name={t.name} size={28} />
<div className="flex flex-col text-sm/5">
<span>
<span className="font-medium">{t.name}</span>{" "}
<span className="text-muted-foreground">{t.when}</span>
</span>
<span>
{t.line && (
<span className="mr-1 rounded bg-muted px-1 font-mono text-xs">
{t.line}
</span>
)}
{t.text}
</span>
</div>
</li>
))}
</ul>
<div className="flex items-end gap-8">
<figure className="flex flex-col items-center gap-2">
<PlanetAvatar name="01orbital" palette="planet-14" size={64} />
<figcaption className="font-mono text-xs tracking-widest text-muted-foreground uppercase">
Mark
</figcaption>
</figure>
<figure className="flex flex-col items-center gap-2">
<PlanetAvatar
name="01orbital"
palette="planet-14"
size={64}
shape="squircle"
/>
<figcaption className="font-mono text-xs tracking-widest text-muted-foreground uppercase">
App icon
</figcaption>
</figure>
<figure className="flex flex-col items-center gap-2">
<PlanetAvatar
name="01orbital"
palette="planet-14"
size={16}
shape="squircle"
/>
<figcaption className="font-mono text-xs tracking-widest text-muted-foreground uppercase">
Favicon
</figcaption>
</figure>
</div>
</div>
)
}Prop
Type
It also accepts the HTML attributes of the element it renders.
npm: cn. The CLI installs them for you.
Registry pieces it installs with it:
Cloudy Nimbus Moss Avatar
An avatar cut of the moss Cloudy Nimbus, 40px by default and baked at 192px to keep the image light. At avatar sizes it drops the grain and boosts contrast and saturation, with a fine inner rim.
Compare
Every Celestograph 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.