{"id":49939411,"url":"https://github.com/anzy-renlab-ai/pronounce","last_synced_at":"2026-07-12T13:00:51.742Z","repository":{"id":358205696,"uuid":"1240396926","full_name":"anzy-renlab-ai/pronounce","owner":"anzy-renlab-ai","description":"🔊 Pronounce developer jargon out loud. 1,650+ entries (kubectl, GIF, JSON, JWT, …), sourced with confidence levels. Bash CLI + VS Code extension + interactive quiz + voice search + MCP server + Claude Code skill.","archived":false,"fork":false,"pushed_at":"2026-07-05T14:02:38.000Z","size":138657,"stargazers_count":28,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-07-05T16:04:32.140Z","etag":null,"topics":["bash","claude-code","cli","community-driven","cursor","developer-experience","developer-tools","dictionary","ipa","kubectl","kubernetes","macos","mcp","mcp-server","open-source","pronunciation","pronunciation-dictionary","speech-synthesis","tts","vscode-extension"],"latest_commit_sha":null,"homepage":"https://pronounce.renlab.ai","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anzy-renlab-ai.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["anzy-renlab-ai"],"ko_fi":"alvinanziyan"}},"created_at":"2026-05-16T04:56:52.000Z","updated_at":"2026-07-05T14:02:42.000Z","dependencies_parsed_at":null,"dependency_job_id":"b8ed329f-2663-4910-80a9-d9232d0f0b9a","html_url":"https://github.com/anzy-renlab-ai/pronounce","commit_stats":null,"previous_names":["anzy-renlab-ai/say-it"],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/anzy-renlab-ai/pronounce","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anzy-renlab-ai%2Fpronounce","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anzy-renlab-ai%2Fpronounce/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anzy-renlab-ai%2Fpronounce/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anzy-renlab-ai%2Fpronounce/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anzy-renlab-ai","download_url":"https://codeload.github.com/anzy-renlab-ai/pronounce/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anzy-renlab-ai%2Fpronounce/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35392296,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-12T02:00:06.386Z","response_time":87,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","claude-code","cli","community-driven","cursor","developer-experience","developer-tools","dictionary","ipa","kubectl","kubernetes","macos","mcp","mcp-server","open-source","pronunciation","pronunciation-dictionary","speech-synthesis","tts","vscode-extension"],"created_at":"2026-05-17T09:07:13.606Z","updated_at":"2026-07-12T13:00:51.723Z","avatar_url":"https://github.com/anzy-renlab-ai.png","language":"Shell","funding_links":["https://github.com/sponsors/anzy-renlab-ai","https://ko-fi.com/alvinanziyan"],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e🔊 say-it · Pronounce\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\u003cstrong\u003eStop saying \"kub-cuttle\". One Bash command pronounces 544+ developer jargon names — with cited sources.\u003c/strong\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://github.com/anzy-renlab-ai/pronounce/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/anzy-renlab-ai/pronounce?style=social\" alt=\"GitHub stars\"\u003e\u003c/a\u003e\n\u003ca href=\"https://pronounce.renlab.ai\"\u003e\u003cimg src=\"https://img.shields.io/badge/live-pronounce.renlab.ai-7adfbb?logo=safari\u0026logoColor=white\" alt=\"Live site\"\u003e\u003c/a\u003e\n\u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"License\"\u003e\u003c/a\u003e\n\u003ca href=\"https://pronounce.renlab.ai/browse.html\"\u003e\u003cimg src=\"https://img.shields.io/badge/dictionary-544%2B%20entries-ff6a3d\" alt=\"Entries\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n🌐 \u003ca href=\"https://pronounce.renlab.ai\"\u003e\u003cstrong\u003epronounce.renlab.ai\u003c/strong\u003e\u003c/a\u003e ·\n🇨🇳 \u003ca href=\"https://pronounce.renlab.ai/zh.html\" hreflang=\"zh-Hans\"\u003e中文\u003c/a\u003e ·\n📖 \u003ca href=\"https://pronounce.renlab.ai/browse.html\"\u003eBrowse\u003c/a\u003e ·\n🎯 \u003ca href=\"https://pronounce.renlab.ai/quiz.html\"\u003eQuiz\u003c/a\u003e ·\n🎤 \u003ca href=\"https://pronounce.renlab.ai/#hero-search\"\u003eVoice search\u003c/a\u003e ·\n🔌 \u003ca href=\"mcp-server/\"\u003eMCP server\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://pronounce.renlab.ai/demo.gif\" alt=\"say-it kubectl — terminal demo\" width=\"720\"\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/anzy-renlab-ai/pronounce/releases/download/v2.5.0/promo.mp4\"\u003e\u003cstrong\u003e▶ Watch the 47-second promo\u003c/strong\u003e (with voice)\u003c/a\u003e ·\n  \u003ca href=\"https://pronounce.renlab.ai/quiz.html\"\u003e🎯 Try the quiz\u003c/a\u003e ·\n  \u003ca href=\"https://pronounce.renlab.ai/#hero-search\"\u003e🎤 Voice search\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## 🚀 Try it in 30 seconds\n\n```bash\ngit clone https://github.com/anzy-renlab-ai/pronounce.git\ncd pronounce \u0026\u0026 ./install.sh\nsay-it kubectl\n```\n\n```\n🔊  koob control. koob control. koob control. or: cube cuddle. or: kube C T L.\n```\n\nThat'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. Not on macOS? The dictionary works in the browser at **[pronounce.renlab.ai](https://pronounce.renlab.ai)** — same audio, no install.\n\n\u003e ⭐ 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.\n\n\u003cp align=\"center\"\u003e\u003ca href=\"https://star-history.com/#anzy-renlab-ai/pronounce\u0026Date\"\u003e\u003cimg src=\"https://api.star-history.com/svg?repos=anzy-renlab-ai/pronounce\u0026type=Date\" alt=\"Star history\" width=\"600\"\u003e\u003c/a\u003e\u003c/p\u003e\n\n---\n\n## What you're actually getting\n\n- **544+ entries, every one sourced.** Confidence-tagged (`creator-clarified` / `community-consensus` / `contested`) with a citable URL where one exists. 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.\n- **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.\n- **Zero deps. ~250 lines of Bash.** No npm, no sudo, no surprises. Wraps the `say` engine that's already on your Mac. 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.\n\n```bash\n$ say-it --why JSON\nword              JSON\nipa               /ˈdʒeɪsən/\nrespelling_us     jay son\nsource            Douglas Crockford (RailsConf 2009)\nurl               https://www.youtube.com/watch?v=-C-JoyNuQJs\n```\n\n---\n\n## Why not just Google?\n\nBecause 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.\n\nYou don't need a phonetic transcription. You need to **hear** the word. Twice. Maybe three times. Done.\n\n`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.\n\n## Famous moments\n\nSome pronunciations aren't opinions — the creators settled them. The dictionary cites every one:\n\n| Word | Reading | Source |\n|------|---------|--------|\n| `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) |\n| `JSON` | \"jay-son\" | [Douglas Crockford, RailsConf 2009](https://www.youtube.com/watch?v=-C-JoyNuQJs) |\n| `GNU` | \"g-noo\" (hard G, one syllable) | [GNU Project official](https://www.gnu.org/gnu/pronunciation.html) |\n| `Linux` | \"LIN-ux\" (short i, schwa) | [Linus Torvalds himself](https://www.youtube.com/watch?v=5IfHm6R5le0) |\n| `LaTeX` | \"lay-tek\" (or \"lah-tek\") | [Leslie Lamport, official](https://www.latex-project.org/about/) |\n| `Django` | \"JANG-go\" (silent D) | [Django FAQ](https://www.djangoproject.com/foundation/faq/) |\n| `Vue` | \"view\" (one syllable) | [Evan You, Vue docs](https://vuejs.org/) |\n| `Vite` | \"veet\" (French for *quick*) | [Vite docs](https://vitejs.dev/) |\n| `Knative` | \"KAY-native\" (the K is voiced) | [Knative docs](https://knative.dev/) |\n| `etcd` | \"et-cee-dee\" (et-cetera-distributed) | [etcd FAQ](https://etcd.io/docs/v3.5/faq/) |\n\nEvery dictionary entry includes a `source_url`. Run `say-it --why \u003cword\u003e` to see it.\n\n## Install (macOS)\n\nThe \"Try it in 30 seconds\" block above has the full install. `./install.sh` drops:\n\n- the CLI at `~/.local/bin/say-it`,\n- the pronunciation dictionary at `~/.local/share/say-it/pronunciations.tsv`,\n- 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.\n\nMake sure `~/.local/bin` is on your `$PATH`. Not on macOS? Use the browser version at **[pronounce.renlab.ai](https://pronounce.renlab.ai)** — same dictionary, same audio.\n\n## Usage\n\n```bash\nsay-it kubectl                    # primary × 3, then \"or: \u003calt\u003e\" for each alternate\nsay-it --solo kubectl             # primary only — silence the \"or:\" tail\nsay-it --alt GIF                  # focus on the first alternate\nsay-it --alt 2 GUI                # focus on the Nth alternate (1-indexed)\nsay-it --all SQL                  # primary AND every alternate, each repeated\nsay-it --no-dict kubectl          # bypass the dictionary entirely\nsay-it --why JSON                 # show IPA, source URL, category, confidence\nsay-it list                       # every word in the dictionary\nsay-it search redis               # grep the dictionary (case-insensitive)\n\nsay-it -n 5 Pydantic              # 5 repetitions instead of 3\nsay-it -r 130 Knative             # slower (130 wpm; default is 175)\nsay-it -o /tmp/word.aiff Postgres # save to file instead of playing\nsay-it --list                     # all macOS voices\n```\n\nThe default voice is `Samantha` (General American). Pass `-v \u003cvoice\u003e` for any other macOS voice — but the dictionary is GenAm-only, by design.\n\n## Claude Code integration\n\n```\nYou:    kubectl 怎么读？\nClaude: 🔊 (plays \"koob-control\" three times)\n        /ˈkuːb kənˌtroʊl/ — \"KOOB-control\". Kelsey Hightower says it\n        this way (KubeCon talk). \"Cube-cuddle\" is an alternate —\n        try `say-it --alt kubectl` to hear it.\n```\n\nOnce installed, the `pronounce-word` skill auto-triggers on:\n\n- `X 怎么读` / `X 怎么发音` / `读一下 X`\n- `how do you pronounce X` / `pronounce X` / `how do you say X`\n\nYour AI replies with **sound**, not just a phonetic guess. Skill file: [`skills/pronounce-word/SKILL.md`](skills/pronounce-word/SKILL.md).\n\n## How the dictionary works\n\n`data/pronunciations.tsv` is the single source of truth — tab-separated, 70+ entries at v0.1, covering:\n\n- **Cloud / DevOps:** `kubectl`, `nginx`, `Kubernetes`, `helm`, `Istio`, `Envoy`, `Prometheus`, `Grafana`, `Terraform`, `Argo`, `Knative`, `etcd`, `containerd`, `runc`, `Podman`, ...\n- **Languages / Frameworks:** `Django`, `Vue`, `Vite`, `Pydantic`, `Bun`, `Deno`, `Hugo`, `Hono`, `Caddy`, `Svelte`, `Astro`, `Pinia`, ...\n- **Databases:** `PostgreSQL`, `Postgres`, `SQLite`, `MySQL`, `MongoDB`, `Cassandra`, `Redis`, `Ceph`, `ScyllaDB`, `ClickHouse`, `DuckDB`, ...\n- **CS jargon / acronyms:** `GIF`, `JSON`, `SQL`, `GUI`, `GNU`, `char`, `regex`, `sudo`, `tmux`, `chmod`, `WYSIWYG`, `ASCII`, `enum`, `NaN`, `SaaS`, `PaaS`, ...\n- **Distros / tools:** `Linux`, `Debian`, `Ubuntu`, `Arch`, `Nix`, `LaTeX`, `TeX`, `emacs`, `zsh`, ...\n\nEach 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.\n\nLocal override: drop a `~/.config/say-it/pronunciations.local.tsv` and it takes precedence.\n\n## What works today\n\n- ✅ macOS — any word, via the built-in `say` engine. Zero dependencies.\n- ✅ **544+** project / product / jargon entries with cited sources.\n- ✅ **Audible multi-reading awareness** — contested words audibly chain alternates with \"or:\".\n- ✅ `--alt [N]`, `--all`, `--solo`, `--why`, `--json`, `--md`, `--no-dict`, `list`, `search`, `quiz`, `repl`, `stream`, `doctor`, `export`, `benchmark`, `badge`, `cheatsheet`.\n- ✅ Claude Code skill + MCP server for AI-side pronunciation questions.\n- ✅ Browser PWA — installable, offline-capable, instant search, voice-mic search, interactive quiz.\n- ✅ Editor integrations — Raycast, Alfred, VS Code, Cursor, Codex, Continue.\n- ✅ **🌐 Live site** — [pronounce.renlab.ai](https://pronounce.renlab.ai) (every word browsable, audio, source citation) + [/zh.html](https://pronounce.renlab.ai/zh.html) (Chinese landing).\n\n## What's coming\n\nSee [`DESIGN.md`](DESIGN.md) for the architecture.\n\n- **🪟 Windows support** via PowerShell + `System.Speech.SpeechSynthesizer`, same CLI flags.\n- **☁️ Cloud TTS** (opt-in ElevenLabs / OpenAI) for the names native TTS still mangles.\n- **🐧 Linux backend** (`espeak-ng`, then cloud).\n- **🔄 `say-it update`** to pull the latest dictionary without reinstalling.\n- **📚 Anki export** for vocabulary drills.\n\n## Contributing\n\nTwo things we want most:\n\n1. **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 in `alt_*` columns and we'll wire `--alt` through.\n2. **Non-Mac backends.** Windows and Linux are top priority. See `DESIGN.md` §Backends.\n\nKeep it tiny. Keep it dep-free where possible. Keep the defaults opinionated (3 reps, GenAm, Samantha voice).\n\n## Contributors\n\n\u003ca href=\"https://github.com/anzy-renlab-ai/pronounce/graphs/contributors\"\u003e\u003cimg src=\"https://contrib.rocks/image?repo=anzy-renlab-ai/pronounce\" alt=\"Contributors\"\u003e\u003c/a\u003e\n\nEvery entry, source upgrade, and skill fix counts. Open a PR — your face shows up here.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n\n---\n\n\u003e *IPA is a reference. Audio is a teacher.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanzy-renlab-ai%2Fpronounce","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanzy-renlab-ai%2Fpronounce","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanzy-renlab-ai%2Fpronounce/lists"}