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
| Shape | For | Cost |
|---|---|---|
<img src> URL | any framework, even plain HTML | 1 HTTP round-trip per device per seed (then immutable-cached forever) |
@usenavii/core | node + browser bundles, no network | ~9 KB gz dependency |
@usenavii/react | React 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.