Type up to 40 characters. Get related emojis scored by TypeSafe’s Jev — many matches, not just one.
Live: https://jevmoji.cheeaun.workers.dev
Under OUTPUT → score trace, categories list the emoji groups Jev scored. You may also see a row labeled hits.
That row is not a Unicode emoji category. It is a shortlist the app builds in code by matching your text against emoji names and keywords (for example spiderman → spider / web). Those candidates are then scored like everything else. The Emoji→pages cell stays blank for hits because that column is for paging large catalog groups, not a keyword shortlist.
If hits is missing, local matching found nothing useful — the list still comes from the scored categories.
npm install
echo 'TYPESAFE_API_KEY=your-key' > .dev.varsGet a key from the TypeSafe console.
npm run dev| Command | Description |
|---|---|
npm run dev |
Vite + Worker with HMR |
npm test |
Unit tests (node --test) |
npm run build |
Production build to dist/ |
npm run deploy |
vite build + wrangler deploy |
npm run catalog |
Rebuild src/data/emojis.json from Unicode + emojibase keywords |
npm run probe |
Live pipeline probe for a query string (needs a key) |
The TypeSafe key never reaches the browser. The Worker reads it server-side.
| Where | How |
|---|---|
| Local | .dev.vars — TYPESAFE_API_KEY=… |
| Production | npx wrangler secret put TYPESAFE_API_KEY |
Never put the key in .env, client JS, or the README.
Type: string
Required. Server only.
Type: string
Default: 'jev-latest'
Type: number
Default: 60000
SDK timeout per attempt.
Type: number
Default: 0.042
Cost display only.
Type: number
Default: 80
src/data/emojis.json is generated — not hand-edited. It is Worker-only (imported at build time); nothing in the browser fetches it, so it does not live under public/.
npm run catalog # Unicode 17.0.0 (default pin)
npm run catalog -- --unicode 16.0
npm run catalog -- --unicode latest # currently 18.0
npm run catalog -- --include-qualified # also minimally-qualified + componentsDefault is 17.0.0: newer than 16, less brand-new than 18 (fonts often lag). Older versions (≤16) live under unicode.org/Public/emoji/<ver>/; 17+ live under unicode.org/Public/<ver>/emoji/. The script resolves that split for you.
Each entry keeps emoji, name, category, status, and keywords[] (emojibase tags + name tokens). Keywords power the local hits shortlist; hex, subgroup, and ids are omitted to keep the Worker bundle smaller.
| Path | Description |
|---|---|
index.html + js/ |
Page + client ranking |
public/ |
Client static assets (styles, favicon) — no catalog |
src/worker.js + src/data/ |
Worker + generated emoji catalog |
scripts/build-emojis.mjs |
Catalog generator |
scripts/score-probe.mjs |
Live pipeline probe (npm run probe) |
js/retrieve.js |
Local name/keyword shortlist behind the hits row |
design/ |
Logo source + export sizes |
docs/screenshots/ |
README screenshots |
AGENTS.md |
Contributor / agent notes (includes private API contract) |
DESIGN.md |
Visual system |
- Live app - Deployed Worker
- TypeSafe AI - System One models
- Jev - Intro post
- Documentation
- @typesafe-ai/sdk - JavaScript SDK
MIT. See LICENSE.
TypeSafe and Jev are proprietary — not covered by this license.


