πŸ”Š say-it Β· Pronounce

Stop saying "kub-cuttle". One Bash command pronounces 1,903 developer jargon names β€” most with a cited source.

GitHub stars Live site License Entries Install from VS Code Marketplace Install from Open VSX Pronounce Docs GitHub Action

🌐 pronounce.renlab.ai Β· πŸ‡¨πŸ‡³ δΈ­ζ–‡ Β· πŸ“– Browse Β· 🎯 Quiz Β· 🎀 Voice search Β· πŸ”Œ MCP server Β· βš™οΈ GitHub Action

say-it kubectl β€” terminal demo

β–Ά Watch the 47-second promo (with voice) Β· 🎯 Try the quiz Β· 🎀 Voice search

--- ## πŸš€ Try it in 30 seconds ```bash git clone https://github.com/anzy-renlab-ai/pronounce.git cd pronounce && ./install.sh say-it kubectl ``` ![say-it CLI demo β€” kubectl, YAML, TOML, Ghostty](pitch/say-it-cli-demo.gif) 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](https://pronounce.renlab.ai)**. > ⭐ If `say-it kubectl` saves you one cringey standup moment β€” **[star the repo](https://github.com/anzy-renlab-ai/pronounce)**. It nudges more devs to contribute their favorite mispronounced project name.

Star history

--- ## πŸ† The developer pronunciation scoreboard **1,903 entries β€” 1,283 carry a citable source** β€” **108 settled by the creator themselves**, **175 the community still argues about.** The famous ones: ### βœ… Settled β€” the creator said so | Word | It's… | …not | Settled by | |------|-------|------|-----------| | **[GIF](https://pronounce.renlab.ai/word/gif)** | "jif" | "ghif" (hard-G speech cue) | Steve Wilhite (creator), NYT 2013 | | **[nginx](https://pronounce.renlab.ai/word/nginx)** | "engine X" | "n-jinx" | NGINX official | | **[YAML](https://pronounce.renlab.ai/word/yaml)** | "yam-ul" | "yammel" | yaml.org | | **[GNU](https://pronounce.renlab.ai/word/gnu)** | "guh-NEW" (hard g) | "noo" | GNU Project | | **[LaTeX](https://pronounce.renlab.ai/word/latex)** | "lay-tek" | "lay-teks" | Lamport / LaTeX project | | **[TOML](https://pronounce.renlab.ai/word/toml)** | rhymes with "knoll" | "tom-el" | Tom Preston-Werner (creator) | | **[Tcl](https://pronounce.renlab.ai/word/tcl)** | "tickle" | "T-C-L" | John Ousterhout (creator) | | **[awk](https://pronounce.renlab.ai/word/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](https://pronounce.renlab.ai/word/kubectl)** | "koob-control" | "cube-cuddle" | | **[SQL](https://pronounce.renlab.ai/word/sql)** | "sequel" | "S-Q-L" | | **[JSON](https://pronounce.renlab.ai/word/json)** | "JAY-son" | "JEE-son" | | **[GUI](https://pronounce.renlab.ai/word/gui)** | "gooey" | "G-U-I" | | **[JWT](https://pronounce.renlab.ai/word/jwt)** | "jot" (per RFC 7519) | "J-W-T" | Every cell has IPA and audio; 1,283 also carry a citable source. **[Browse all 1,903 entries β†’](https://pronounce.renlab.ai/browse)** > Disagree with one? That's the whole point β€” [open a PR](CONTRIBUTING.md) with your reading and a source. The argument *is* the dataset. --- ## What you're actually getting - **1,903 entries β€” 1,283 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. `--solo` skips the tail once you've internalized it. - **One Bash CLI, no npm runtime.** No sudo, no framework bootstrap, no surprises. It detects macOS `say`, Linux `espeak-ng`/`espeak`, or Windows PowerShell `System.Speech`. The repo also ships a [Claude Code skill](skills/pronounce-word/SKILL.md) and an [MCP server](mcp-server/) so your AI answers "how do you pronounce X?" with **audio**, not a phonetic guess. - **A docs-native GitHub Action.** Scan Markdown changed by a pull request and emit a sourced pronunciation glossary in the job summary β€” no API key, dependency install, or network request. - **Canonical website audio.** The site plays each committed canonical MP3 first and uses Web Speech only as a fallback if playback fails. ```bash $ say-it --why JSON word JSON ipa /ˈdΚ’eΙͺsΙ™n/ respelling_us jay son confidence contested source Wikipedia Β§ Pronunciation url https://en.wikipedia.org/wiki/JSON#Pronunciation ``` --- ## 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](https://www.nytimes.com/2013/05/22/business/media/creator-of-the-gif-says-its-pronounced-jif.html) | | `JSON` | "jay-son" | [Douglas Crockford, RailsConf 2009](https://www.youtube.com/watch?v=-C-JoyNuQJs) | | `GNU` | "g-noo" (hard G, one syllable) | [GNU Project official](https://www.gnu.org/gnu/pronunciation.html) | | `Linux` | "LIN-ux" (short i, schwa) | [Linus Torvalds himself](https://www.youtube.com/watch?v=5IfHm6R5le0) | | `LaTeX` | "lay-tek" (or "lah-tek") | [Leslie Lamport, official](https://www.latex-project.org/about/) | | `Django` | "JANG-go" (silent D) | [Django FAQ](https://www.djangoproject.com/foundation/faq/) | | `Vue` | "view" (one syllable) | [Evan You, Vue docs](https://vuejs.org/) | | `Vite` | "veet" (French for *quick*) | [Vite docs](https://vitejs.dev/) | | `Knative` | "KAY-native" (the K is voiced) | [Knative docs](https://knative.dev/) | | `etcd` | "et-cee-dee" (et-cetera-distributed) | [etcd FAQ](https://etcd.io/docs/v3.5/faq/) | Run `say-it --why ` to see the citation when an entry has a `source_url`; unsourced entries are left blank rather than given a fabricated URL. ## Install ```bash brew install anzy-renlab-ai/tap/say-it # Homebrew on macOS ``` 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](https://claude.com/claude-code), a `pronounce-word` skill 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](integrations/codex/)) and `~/.kiro/skills/` ([Kiro](integrations/kiro/)) when those dirs exist β€” it's the cross-tool [Agent Skills](https://agentskills.io) 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](https://pronounce.renlab.ai)**. ## Usage ```bash say-it kubectl # primary Γ— 3, then "or: " 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 macOS voice is `Samantha` (General American); `-v ` selects another macOS voice. Linux and Windows use their detected backend's English voice. The dictionary is GenAm-only, by design. ## Claude Code integration Install the cross-tool Agent Skill directly with GitHub CLI: ```bash gh skill install anzy-renlab-ai/pronounce pronounce-word ``` ``` 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 ζ€ŽδΉˆε‘ιŸ³` / `θ―»δΈ€δΈ‹ X` - `how 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`](skills/pronounce-word/SKILL.md). **Not on Claude?** Same skill drops into [Codex CLI](integrations/codex/) (`codex plugin marketplace add anzy-renlab-ai/pronounce`) and [Kiro](integrations/kiro/) (`~/.kiro/skills/`), and the [MCP server](mcp-server/) covers Claude Desktop, Cursor, Continue, Zed, Cline & friends β€” full matrix in [`integrations/`](integrations/). [![Add to Kiro](https://kiro.dev/images/add-to-kiro.svg)](https://kiro.dev/launch/mcp/add?name=pronounce&config=%7B%22command%22%3A%22uvx%22%2C%22args%22%3A%5B%22--from%22%2C%22git%2Bhttps%3A%2F%2Fgithub.com%2Fanzy-renlab-ai%2Fpronounce.git%23subdirectory%3Dmcp-server%22%2C%22pronounce-mcp%22%5D%7D) ## GitHub Action β€” pronunciation guides for docs Add a pronunciation glossary to every documentation pull request: ```yaml - uses: actions/checkout@v7.0.1 with: fetch-depth: 0 - id: pronounce uses: anzy-renlab-ai/pronounce@v2.28.1 ``` `Pronounce Docs` scans changed Markdown/MDX and writes a table containing each matched term, its IPA, plain-English respelling, audio page, and creator or official source where available. It runs locally from the repository snapshot: no token, API key, telemetry, package install, or network request. See the [complete setup, inputs, and outputs](docs/github-action.md). ## VS Code extension [![Install from VS Code Marketplace](https://img.shields.io/badge/VS_Code_Marketplace-install-007ACC?logo=visualstudiocode)](https://marketplace.visualstudio.com/items?itemName=sayit.pronounce) [![Install from Open VSX](https://img.shields.io/badge/Open_VSX-install-8fd694)](https://open-vsx.org/extension/sayit/pronounce) ![Pronounce demo β€” kubectl, YAML, Ghostty, wagmi](integrations/vscode/media/demo.gif) Hover over any tech word in any file β€” see the IPA, hear the pronunciation. Same 1,903-entry dictionary as the CLI, JSON-bundled at build (zero runtime parse cost). ```bash # 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](https://marketplace.visualstudio.com/items?itemName=sayit.pronounce). - **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,903 entries. Source: [`integrations/vscode/`](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,903-entry dictionary. The extension speaks through Web Speech; `pronounce.renlab.ai` plays the committed MP3 corpus first and reserves Web Speech for fallback. **Sideload only for now** (not yet on Chrome Web Store). Download [`pronounce-chrome-0.3.1.zip`](integrations/chrome/pronounce-chrome-0.3.1.zip) β†’ unzip β†’ `chrome://extensions/` β†’ Developer mode β†’ Load unpacked. Source: [`integrations/chrome/`](integrations/chrome/). ## How the dictionary works `data/pronunciations.tsv` is the single source of truth β€” tab-separated, 1,903 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 | respelling_us | alt_ipa | alt_respelling_us | source_url | source_label | category | confidence | notes`. `respelling_us` is plain English-like input passed to the detected OS TTS backend, so the intended reading is spoken instead of asking the engine to guess from the project name. Local override: drop a `~/.config/say-it/pronunciations.local.tsv` and it takes precedence. ## What works today - βœ… macOS β€” built-in `say`. - βœ… Linux β€” `espeak-ng` (preferred) or `espeak`. - βœ… Windows β€” PowerShell `System.Speech` from the same Bash CLI under Git Bash/MSYS2/Cygwin. - βœ… 1,903 entries; 1,283 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. - βœ… GitHub Action β€” sourced pronunciation glossaries for Markdown pull requests. - βœ… 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](https://pronounce.renlab.ai) (1,903 entries browsable with audio; 1,283 sourced entries) + [/zh](https://pronounce.renlab.ai/zh) (Chinese landing). ## What's coming See [`DESIGN.md`](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). ## Contributing Two things we want most: 1. **Pronunciation entries.** Open a PR adding a row to `data/pronunciations.tsv`. Required columns: `word`, `ipa`, `respelling_us`. Highly preferred: `source_url` (creator interview, conf talk, official FAQ β€” anything verifiable). Contested readings are welcome; put the rival in `alt_*` columns and we'll wire `--alt` through. 2. **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. See `DESIGN.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 β†’](https://github.com/anzy-renlab-ai/pronounce)** β€” one click, no signup, biggest effect. Optional, if it's saved you real standup pain: - β˜• [Coffee on Ko-fi](https://ko-fi.com/alvinanziyan) β€” pays for one new entry per cup. - πŸ’š [Sponsor on GitHub](https://github.com/sponsors/anzy-renlab-ai) β€” 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 Contributors Every entry, source upgrade, and skill fix counts. Open a PR β€” your face shows up here. ## License MIT β€” see [LICENSE](LICENSE). --- > *IPA is a reference. Audio is a teacher.*