Overview

Navii is a deterministic mascot avatar service. Pass any string — a user id, an email, a UUID — and get back a designed SVG of a unique character. Same seed always returns the same face.

What it solves

Every app has the same gap: between signup and the moment a user uploads a profile photo, you've got a gray circle with their initial. That's not a brand moment. It's not a profile. It's not anything.

Navii fills that gap. One function call (or one <img src>) gives every user a face the moment they exist.

  • Deterministic — same seed → same SVG, byte-identical within a release. Safe to cache, safe to mirror.
  • Stateless — no accounts, no database, no avatar table. The seed is the avatar.
  • Designed — 22 palettes × 8 bodies × 10 eyes × 10 mouths × 12 toppers × continuous tweaks. 22M+ combinations.
  • Optional motion — opt-in idle animation. Honors prefers-reduced-motion.

When to reach for it

  • Signup placeholder before users upload a photo
  • Comment threads, activity feeds, team rosters
  • Empty states for any "person" in your UI
  • Brand mascots / logo marks (use Navii.build for direct construction)
  • Email + OG images (PNG endpoint)

Not for: app icons, illustrations, anything where a specific designer-drawn character is required.

Three ways to consume it

ShapeForCost
<img src> URLany framework, even plain HTML1 HTTP round-trip per device per seed (then immutable-cached forever)
@usenavii/corenode + browser bundles, no network~9 KB gz dependency
@usenavii/reactReact apps; <Navii seed=… />~10 KB gz, memoized

Pick whatever's smallest for you. All three render the same byte-identical SVG for a given seed.

Next

  • Quickstart — first avatar in 60 seconds.
  • Concepts — the seed rule + determinism contract you need to understand.
  • Recipes — copy-paste patterns for SSR, fallbacks, galleries, RN.