π Try it in 30 seconds
git clone https://github.com/anzy-renlab-ai/pronounce.git
cd pronounce && ./install.sh
say-it kubectl

That's it. Now try say-it GIF, say-it nginx, say-it Pydantic, say-it --why JSON, or say-it quiz for a 10-question challenge. Linux users: install espeak-ng (sudo apt install espeak-ng) and the CLI just works. Windows: same CLI under WSL or git-bash + PowerShell. Or skip install and use the browser at pronounce.renlab.ai.
β If
say-it kubectlsaves you one cringey standup moment β star the repo. It nudges more devs to contribute their favorite mispronounced project name.
π The developer pronunciation scoreboard
1,880 entries β 1,260 carry a citable source β 101 settled by the creator themselves, 174 the community still argues about. The famous ones:
β Settled β the creator said so
| Word | It'sβ¦ | β¦not | Settled by |
|---|---|---|---|
| GIF | "jif" | "gif" (hard g) | Steve Wilhite (creator), NYT 2013 |
| nginx | "engine X" | "n-jinx" | NGINX official |
| YAML | "yam-ul" | "yammel" | yaml.org |
| GNU | "guh-NEW" (hard g) | "noo" | GNU Project |
| LaTeX | "lay-tek" | "lay-teks" | Lamport / LaTeX project |
| TOML | rhymes with "knoll" | "tom-el" | Tom Preston-Werner (creator) |
| Tcl | "tickle" | "T-C-L" | John Ousterhout (creator) |
| awk | "auk" (like the bird) | "A-W-K" | Aho / Weinberger / Kernighan |
βοΈ Still contested β both readings are in active use
| Word | Camp A | Camp B |
|---|---|---|
| kubectl | "koob-control" | "cube-cuddle" |
| SQL | "sequel" | "S-Q-L" |
| JSON | "JAY-son" | "JEE-son" |
| GUI | "gooey" | "G-U-I" |
| JWT | "jot" (per RFC 7519) | "J-W-T" |
Every cell has IPA, audio, and the source. Hear all 1,880 β
Disagree with one? That's the whole point β open a PR with your reading and a source. The argument is the dataset.
What you're actually getting
- 1,880 entries β 1,260 carry a citable source. Confidence-tagged (
creator-clarified/community-consensus/contested), each with a citable URL where one exists (we'd rather leave it blank than fabricate one). Wilhite said GIF is "jif" at the 2013 Webby Awards. Crockford says JSON is "JAY-son" (RailsConf 2009). RFC 7519 says JWT is "jot". The dictionary cites them. - Multi-reading audio. For words where the debate is real β GIF, SQL, GUI, char, regex β the CLI chains the alternates after the primary with a spoken "or:" so you hear the debate without staring at the terminal.
--soloskips the tail once you've internalized it. - Zero deps. ~250 lines of Bash. No npm, no sudo, no surprises. Wraps the
sayengine that's already on your Mac. Ships a Claude Code skill and an MCP server so your AI answers "how do you pronounce X?" with audio, not a phonetic guess.
$ say-it --why JSON
word JSON
ipa /ΛdΚeΙͺsΙn/
respelling_us jay son
source Douglas Crockford (RailsConf 2009)
url https://www.youtube.com/watch?v=-C-JoyNuQJs
Why not just Google?
Because Google gives you 47 Reddit arguments and a YouTube clip you have to unmute. IPA gives you /ΛkuΛb kΙnΛtroΚl/ β a reference, not a teacher.
You don't need a phonetic transcription. You need to hear the word. Twice. Maybe three times. Done.
say-it ships a community-maintained dictionary of how engineers actually say the names that trip everyone up β and feeds the intended respelling to your OS's text-to-speech engine, so kubectl comes out as koob-control, not whatever your computer guessed from the letters.
Famous moments
Some pronunciations aren't opinions β the creators settled them. The dictionary cites every one:
| Word | Reading | Source |
|---|---|---|
GIF |
"jif" (creator says so) | Steve Wilhite, Webby Awards 2013 |
JSON |
"jay-son" | Douglas Crockford, RailsConf 2009 |
GNU |
"g-noo" (hard G, one syllable) | GNU Project official |
Linux |
"LIN-ux" (short i, schwa) | Linus Torvalds himself |
LaTeX |
"lay-tek" (or "lah-tek") | Leslie Lamport, official |
Django |
"JANG-go" (silent D) | Django FAQ |
Vue |
"view" (one syllable) | Evan You, Vue docs |
Vite |
"veet" (French for quick) | Vite docs |
Knative |
"KAY-native" (the K is voiced) | Knative docs |
etcd |
"et-cee-dee" (et-cetera-distributed) | etcd FAQ |
Every dictionary entry includes a source_url. Run say-it --why <word> to see it.
Install (macOS)
brew install anzy-renlab-ai/tap/say-it # Homebrew
Or the "Try it in 30 seconds" block above. ./install.sh drops:
- the CLI at
~/.local/bin/say-it, - the pronunciation dictionary at
~/.local/share/say-it/pronunciations.tsv, - if you use Claude Code, a
pronounce-wordskill at~/.claude/skills/pronounce-word/so any "how do you say X?" prompt to your AI gets answered with audio instead of IPA, - the same skill into
~/.agents/skills/(Codex CLI) and~/.kiro/skills/(Kiro) when those dirs exist β it's the cross-tool Agent Skills standard.
Make sure ~/.local/bin is on your $PATH. Linux also works β install espeak-ng (sudo apt install espeak-ng / brew install espeak-ng). Windows: WSL or git-bash + PowerShell. Or skip install entirely with the browser version at pronounce.renlab.ai.
Usage
say-it kubectl # primary Γ 3, then "or: <alt>" for each alternate
say-it --solo kubectl # primary only β silence the "or:" tail
say-it --alt GIF # focus on the first alternate
say-it --alt 2 GUI # focus on the Nth alternate (1-indexed)
say-it --all SQL # primary AND every alternate, each repeated
say-it --no-dict kubectl # bypass the dictionary entirely
say-it --why JSON # show IPA, source URL, category, confidence
say-it list # every word in the dictionary
say-it search redis # grep the dictionary (case-insensitive)
say-it -n 5 Pydantic # 5 repetitions instead of 3
say-it -r 110 Knative # slower (110 wpm; default is 130)
say-it -o /tmp/word.aiff Postgres # save to file instead of playing
say-it --list # all macOS voices
The default voice is Samantha (General American). Pass -v <voice> for any other macOS voice β but the dictionary is GenAm-only, by design.
Claude Code integration
You: kubectl ζδΉθ―»οΌ
Claude: π (plays "koob-control" three times)
/ΛkuΛb kΙnΛtroΚl/ β "KOOB-control". Kelsey Hightower says it
this way (KubeCon talk). "Cube-cuddle" is an alternate β
try `say-it --alt kubectl` to hear it.
Once installed, the pronounce-word skill auto-triggers on:
X ζδΉθ―»/X ζδΉει³/θ―»δΈδΈ Xhow do you pronounce X/pronounce X/how do you say X
Your AI replies with sound, not just a phonetic guess. Skill file: skills/pronounce-word/SKILL.md.
Not on Claude? Same skill drops into Codex CLI (codex plugin marketplace add anzy-renlab-ai/pronounce) and Kiro (~/.kiro/skills/), and the MCP server covers Claude Desktop, Cursor, Continue, Zed, Cline & friends β full matrix in integrations/.
VS Code extension

Hover over any tech word in any file β see the IPA, hear the pronunciation. Same 1,880-entry dictionary as the CLI, JSON-bundled at build (zero runtime parse cost).
# Cursor / VSCodium / Zed / Gitpod / Theia / code-server (Open VSX)
code --install-extension sayit.pronounce
# or the listing: https://open-vsx.org/extension/sayit/pronounce
Now live on Microsoft Marketplace too: ext install sayit.pronounce in VS Code. See marketplace listing.
- Hover over
kubectl,YAML,Ghostty,wagmiβ¦ β tooltip with IPA + π Play + β Star link. - ββ§' β speak selection.
- Status bar
π sayitβ click to speak the current selection. - Welcome walkthrough β 4-step onboarding on first install.
Pronounce: Search dictionaryβ¦β fuzzy-find all 1,880 entries.
Source: integrations/vscode/. Cross-platform as of v0.3 β macOS say, Linux espeak-ng, Windows PowerShell.
Chrome / Edge / Brave extension
Click any tech word on any webpage β popup with IPA + audio. Same 1,880-entry dictionary; same Web Speech API as pronounce.renlab.ai. Sideload only for now (not yet on Chrome Web Store).
Download pronounce-chrome-0.3.1.zip β unzip β chrome://extensions/ β Developer mode β Load unpacked.
Source: integrations/chrome/.
How the dictionary works
data/pronunciations.tsv is the single source of truth β tab-separated, 1,880 entries, covering:
- Cloud / DevOps:
kubectl,nginx,Kubernetes,helm,Istio,Envoy,Prometheus,Grafana,Terraform,Argo,Knative,etcd,containerd,runc,Podman, ... - Languages / Frameworks:
Django,Vue,Vite,Pydantic,Bun,Deno,Hugo,Hono,Caddy,Svelte,Astro,Pinia, ... - Databases:
PostgreSQL,Postgres,SQLite,MySQL,MongoDB,Cassandra,Redis,Ceph,ScyllaDB,ClickHouse,DuckDB, ... - CS jargon / acronyms:
GIF,JSON,SQL,GUI,GNU,char,regex,sudo,tmux,chmod,WYSIWYG,ASCII,enum,NaN,SaaS,PaaS, ... - Distros / tools:
Linux,Debian,Ubuntu,Arch,Nix,LaTeX,TeX,emacs,zsh, ...
Each entry has 10 columns: word | ipa | phon_us | alt_ipa | alt_phon_us | source_url | source_label | category | confidence | notes. The phon_us column is Apple's Speech Synthesis phoneme set, injected into say via [[inpt PHON]]β¦[[inpt TEXT]]. This is what gives the intended reading rather than whatever the TTS would have inferred from the letters.
Local override: drop a ~/.config/say-it/pronunciations.local.tsv and it takes precedence.
What works today
- β
macOS β any word, via the built-in
sayengine. Zero dependencies. - β 1,260 of 1,880 entries carry a citable source β the rest are confidence-tagged, no fabricated citations.
- β Audible multi-reading awareness β contested words audibly chain alternates with "or:".
- β
--alt [N],--all,--solo,--why,--json,--md,--no-dict,list,search,quiz,repl,stream,doctor,export,benchmark,badge,cheatsheet. - β Claude Code skill + MCP server for AI-side pronunciation questions.
- β Browser PWA β installable, offline-capable, instant search, voice-mic search, interactive quiz.
- β Editor integrations β Raycast, Alfred, VS Code, Cursor, Codex, Kiro, Continue.
- β π Live site β pronounce.renlab.ai (every word browsable, audio, source citation) + /zh (Chinese landing).
What's coming
See DESIGN.md for the architecture.
- βοΈ Cloud TTS (opt-in ElevenLabs / OpenAI) for the names native TTS still mangles.
- π Anki export for vocabulary drills.
- π Light theme on the v2 homepage (already shipped on word/SEO pages).
Shipped since this list was written: Windows (PowerShell) + Linux (
espeak-ng) backends, andsay-it update(now a fast dictionary refresh;--fullreinstalls the CLI).
Contributing
Two things we want most:
- Pronunciation entries. Open a PR adding a row to
data/pronunciations.tsv. Required columns:word,ipa,phon_us. Highly preferred:source_url(creator interview, conf talk, official FAQ β anything verifiable). Contested readings are welcome; put the rival inalt_*columns and we'll wire--altthrough. - Backend quality. macOS (
say) is the gold standard; the Linux (espeak-ng) and Windows (PowerShell) backends ship but are best-effort β help us close the gap. SeeDESIGN.mdΒ§Backends.
Keep it tiny. Keep it dep-free where possible. Keep the defaults opinionated (3 reps, GenAm, Samantha voice).
β Support β start with a star
The dictionary is free and MIT. The single highest-leverage thing you can do is star the repo β it's the signal that pulls in more contributors, more PRs, more creator-clarified entries.
- β Star on GitHub β β one click, no signup, biggest effect.
Optional, if it's saved you real standup pain:
- β Coffee on Ko-fi β pays for one new entry per cup.
- π Sponsor on GitHub β recurring tier (pending Sponsors approval).
Dollars cover hosting (Vercel/Cloudflare/Open VSX), domain renewals, MiniMax narration credits for promo videos, and time to track down creator citations for new entries.
Contributors
Every entry, source upgrade, and skill fix counts. Open a PR β your face shows up here.
License
MIT β see LICENSE.
IPA is a reference. Audio is a teacher.
No comments yet
Be the first to share your take.