<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: alvinan</title>
    <description>The latest articles on DEV Community by alvinan (@anzy_renlabai).</description>
    <link>https://dev.to/anzy_renlabai</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3934497%2F654bd9c0-6c57-4e85-bdcd-ec8acec29505.jpg</url>
      <title>DEV Community: alvinan</title>
      <link>https://dev.to/anzy_renlabai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anzy_renlabai"/>
    <language>en</language>
    <item>
      <title>20 Project Names You've Been Pronouncing Wrong (with creator receipts)</title>
      <dc:creator>alvinan</dc:creator>
      <pubDate>Sat, 16 May 2026 09:26:03 +0000</pubDate>
      <link>https://dev.to/anzy_renlabai/20-project-names-youve-been-pronouncing-wrong-with-creator-receipts-12ed</link>
      <guid>https://dev.to/anzy_renlabai/20-project-names-youve-been-pronouncing-wrong-with-creator-receipts-12ed</guid>
      <description>&lt;h1&gt;
  
  
  20 Project Names You've Been Pronouncing Wrong (with creator receipts)
&lt;/h1&gt;

&lt;p&gt;Every developer has had the moment. You're in a standup, you say "n-jinx" out loud, someone gently corrects you to "engine-x", and you spend the next two minutes mentally re-cataloging every other tool you've been mispronouncing for years.&lt;/p&gt;

&lt;p&gt;Some of these are settled by the creators themselves. Some are genuine debates with two camps. Most of them you can be wrong about for six months before anyone tells you. So I built a community dictionary that catalogs them with sources — and a tiny CLI that plays them out loud, three times each, through your macOS speakers so the right reading actually lands.&lt;/p&gt;

&lt;p&gt;Here are the 20 most surprising ones from the list. Each entry is sourced; some are documented on the project's own page, some are still community readings waiting for a citable source. Where there are real debates, both readings are in the dictionary so you can hear them side by side.&lt;/p&gt;

&lt;p&gt;🌐 &lt;a href="https://pronounce.renlab.ai" rel="noopener noreferrer"&gt;pronounce.renlab.ai&lt;/a&gt; · ⭐ &lt;a href="https://github.com/anzy-renlab-ai/pronounce" rel="noopener noreferrer"&gt;github.com/anzy-renlab-ai/pronounce&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpronounce.renlab.ai%2Fdemo.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpronounce.renlab.ai%2Fdemo.svg" alt="say-it terminal demo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. GIF → "jif"
&lt;/h2&gt;

&lt;p&gt;The most famous pronunciation argument in tech. Steve Wilhite, the creator, &lt;a href="https://www.nytimes.com/2013/05/22/business/media/creator-of-the-gif-says-its-pronounced-jif.html" rel="noopener noreferrer"&gt;stood at a podium at the 2013 Webby Awards&lt;/a&gt; and said: "It's pronounced JIF, not GIF." Half the internet still says "gif" anyway — both readings are real, and the dictionary records both.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;say-it GIF
🔊 jif. jif. jif. or: gif.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. kubectl → "koob-control"
&lt;/h2&gt;

&lt;p&gt;Not "kub-cuttle". Not "K-U-B-E-C-T-L". Kelsey Hightower and most Kubernetes maintainers say "koob-control" — short for "kube control". "Cube-cuddle" is a running meme but not the dominant reading. Letter-by-letter is for the spec-respecting holdouts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;say-it kubectl
🔊 koob control. koob control. koob control. or: cube cuddle. or: kube C T L.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. nginx → "engine-x"
&lt;/h2&gt;

&lt;p&gt;Two syllables. "EN-jin-EKS". Igor Sysoev, the creator, confirms this on the &lt;a href="https://nginx.org/en/" rel="noopener noreferrer"&gt;official site&lt;/a&gt;. You're not pronouncing the letters; you're pronouncing it like "engine" + the letter X.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. GNU → "g-noo"
&lt;/h2&gt;

&lt;p&gt;Hard G. One syllable. The &lt;a href="https://www.gnu.org/gnu/pronunciation.html" rel="noopener noreferrer"&gt;GNU Project has a dedicated pronunciation FAQ&lt;/a&gt;. Rhymes with "new", but with the G voiced — not silent, not letter-by-letter.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. JSON → "jay-son"
&lt;/h2&gt;

&lt;p&gt;Douglas Crockford prefers "JAY-son", like the name. "JEE-son" (long E) is also widely used and the &lt;a href="https://en.wikipedia.org/wiki/JSON#Pronunciation" rel="noopener noreferrer"&gt;Wikipedia § Pronunciation&lt;/a&gt; entry notes the variance. Both are in the dictionary; the JS-adjacent community leans toward "JAY-son".&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Linux → "LIN-ux"
&lt;/h2&gt;

&lt;p&gt;Short I. Schwa on the U. Not "LYE-nuks", not "LEE-nooks". Linus Torvalds has said it on camera; the &lt;a href="https://en.wikipedia.org/wiki/Linux#Pronunciation" rel="noopener noreferrer"&gt;Wikipedia § Pronunciation&lt;/a&gt; section documents the canonical reading.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. LaTeX → "lay-tek"
&lt;/h2&gt;

&lt;p&gt;Or "lah-tek". Never "lay-teks". Leslie Lamport documented this on the &lt;a href="https://www.latex-project.org/about/" rel="noopener noreferrer"&gt;LaTeX project about page&lt;/a&gt;. The X is a Greek chi.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. TeX → "tek"
&lt;/h2&gt;

&lt;p&gt;Same logic, same Greek chi. Donald Knuth: like "tech".&lt;/p&gt;

&lt;h2&gt;
  
  
  9. char → "char" (rhymes with "car")
&lt;/h2&gt;

&lt;p&gt;In C and C++ communities. Some say "care", some say "kar". The C/C++ camp insists on "char" with a hard CH like "charcoal", which is the original Kernighan reading. The Java world drifted toward "care" in some pockets.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Django → "JANG-go"
&lt;/h2&gt;

&lt;p&gt;The D is silent. Named after jazz guitarist Django Reinhardt. The &lt;a href="https://www.djangoproject.com/foundation/faq/" rel="noopener noreferrer"&gt;Django FAQ&lt;/a&gt; confirms.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. GUI → "gooey"
&lt;/h2&gt;

&lt;p&gt;If you're a Mandarin speaker, this maps to 故意 (gù yì) — a fun overlap. The mainstream reading is "GOO-ee" as one word. RMS and some old-school Unix folks still say "G-U-I" letter-by-letter.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Vue → "view"
&lt;/h2&gt;

&lt;p&gt;One syllable. Like the verb. Not "VOO-eh", not "vyoo". Evan You has said it in conference talks; the &lt;a href="https://vuejs.org/" rel="noopener noreferrer"&gt;Vue docs&lt;/a&gt; treat it as obvious.&lt;/p&gt;

&lt;h2&gt;
  
  
  13. Vite → "veet"
&lt;/h2&gt;

&lt;p&gt;Pronounced like the English word "veet". French for "quick" — the project name is intentional. The &lt;a href="https://vitejs.dev/" rel="noopener noreferrer"&gt;Vite docs&lt;/a&gt; and the Vite community both use "veet".&lt;/p&gt;

&lt;h2&gt;
  
  
  14. Knative → "KAY-native"
&lt;/h2&gt;

&lt;p&gt;The K is voiced, not silent. Two clear words: "KAY" then "native". A surprising number of engineers default to "native" by analogy with k8s; the maintainers correct that.&lt;/p&gt;

&lt;h2&gt;
  
  
  15. etcd → "et-cee-dee"
&lt;/h2&gt;

&lt;p&gt;Brandon Philips, one of the creators, documented in the &lt;a href="https://etcd.io/docs/v3.5/faq/" rel="noopener noreferrer"&gt;etcd FAQ&lt;/a&gt; that the name expands to "et-cetera-distributed". In conversation it collapses to "et-C-D" letter-by-letter.&lt;/p&gt;

&lt;h2&gt;
  
  
  16. Pydantic → "pie-DAN-tic"
&lt;/h2&gt;

&lt;p&gt;Samuel Colvin has said it in podcasts; the community accepts "pie-DAN-tic" (rhymes with "pedantic" with an initial "pie"). Not "pidd-antic", not "pee-dantic".&lt;/p&gt;

&lt;h2&gt;
  
  
  17. PostgreSQL → "post-gres-Q-L"
&lt;/h2&gt;

&lt;p&gt;Officially. The &lt;a href="https://www.postgresql.org/docs/current/faq.html" rel="noopener noreferrer"&gt;PostgreSQL FAQ&lt;/a&gt; documents this. "Post-gres-sequel" is the common informal. Just "Postgres" is universally fine.&lt;/p&gt;

&lt;h2&gt;
  
  
  18. SQL → "sequel" or "S-Q-L"
&lt;/h2&gt;

&lt;p&gt;Real fork. ANSI says "S-Q-L". Practitioners — especially long-time SQL Server folks and the Oracle community — say "sequel" because SEQUEL was the original IBM name before the trademark fight. Both are in the dictionary; the alternate is one keypress away (&lt;code&gt;say-it --alt SQL&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  19. Anthropic → "an-THROW-pick"
&lt;/h2&gt;

&lt;p&gt;The company that built Claude. Three syllables. Stress on the second. Some Mandarin speakers say "an-truh-PICK" — not wrong, but the English-native reading is "an-THROW-pick".&lt;/p&gt;

&lt;h2&gt;
  
  
  20. NaN → "nan" or "N-A-N"
&lt;/h2&gt;

&lt;p&gt;IEEE 754's "not a number". Pure word ("nan" rhymes with "can") is the most common in scientific computing. Letter-by-letter is fine and unambiguous. Both ship.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to hear it
&lt;/h2&gt;

&lt;p&gt;The CLI is a ~250-line Bash script wrapping macOS &lt;code&gt;say&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/anzy-renlab-ai/pronounce.git
&lt;span class="nb"&gt;cd &lt;/span&gt;pronounce &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./install.sh

say-it kubectl                  &lt;span class="c"&gt;# primary × 3, then "or: &amp;lt;alt&amp;gt;" for each alternate&lt;/span&gt;
say-it &lt;span class="nt"&gt;--alt&lt;/span&gt; GIF                &lt;span class="c"&gt;# focus on the alternate ("gif" instead of "jif")&lt;/span&gt;
say-it &lt;span class="nt"&gt;--all&lt;/span&gt; SQL                &lt;span class="c"&gt;# primary AND every alternate, each repeated&lt;/span&gt;
say-it &lt;span class="nt"&gt;--why&lt;/span&gt; JSON               &lt;span class="c"&gt;# print the dict entry with source URL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When a word is multi-reading, the audio chains the alternates after the primary with a spoken &lt;code&gt;"or: &amp;lt;alt&amp;gt;"&lt;/code&gt; so you hear the debate without having to read the terminal.&lt;/p&gt;

&lt;p&gt;There's also a Claude Code skill bundled — once installed, "how do you pronounce X?" prompts in Claude Code get answered with audio + a source URL instead of a phonetic guess.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the dictionary works
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/anzy-renlab-ai/pronounce/blob/main/data/pronunciations.tsv" rel="noopener noreferrer"&gt;&lt;code&gt;data/pronunciations.tsv&lt;/code&gt;&lt;/a&gt; is a tab-separated file with one row per word and ten columns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csvs"&gt;&lt;code&gt;&lt;span class="k"&gt;word&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;ipa&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;respelling&lt;/span&gt;&lt;span class="err"&gt;_&lt;/span&gt;&lt;span class="k"&gt;us&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;alt&lt;/span&gt;&lt;span class="err"&gt;_&lt;/span&gt;&lt;span class="k"&gt;ipa&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;alt&lt;/span&gt;&lt;span class="err"&gt;_&lt;/span&gt;&lt;span class="k"&gt;respelling&lt;/span&gt;&lt;span class="err"&gt;_&lt;/span&gt;&lt;span class="k"&gt;us&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;source&lt;/span&gt;&lt;span class="err"&gt;_&lt;/span&gt;&lt;span class="k"&gt;url&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;source&lt;/span&gt;&lt;span class="err"&gt;_&lt;/span&gt;&lt;span class="k"&gt;label&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;category&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;confidence&lt;/span&gt; &lt;span class="err"&gt;|&lt;/span&gt; &lt;span class="k"&gt;notes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;confidence&lt;/code&gt; column is honest: &lt;code&gt;creator-clarified&lt;/code&gt; only when a real source documents a creator quote; &lt;code&gt;community-consensus&lt;/code&gt; for widely-used readings without a single citable source; &lt;code&gt;contested&lt;/code&gt; for genuine debates. The dictionary deliberately under-claims rather than fabricating sources.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;respelling_us&lt;/code&gt; column is what the CLI feeds to &lt;code&gt;say&lt;/code&gt;. Why English-like respellings instead of IPA or Apple's phoneme markup? Because modern macOS &lt;code&gt;say&lt;/code&gt; doesn't parse phoneme commands or SSML tags — both fall through as literal text. Respelling rides the TTS engine's built-in letter-to-sound rules, which work acceptably for short English-shaped strings. (The IPA column is retained for display and for future cloud-TTS / Windows-SAPI backends, both of which do honor SSML phoneme tags.)&lt;/p&gt;

&lt;h2&gt;
  
  
  A surprising technical finding
&lt;/h2&gt;

&lt;p&gt;Two things broke my mental model while building this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;[[inpt PHON]]&lt;/code&gt; is dead on modern macOS.&lt;/strong&gt; Apple's Speech Synthesis Programming Guide still documents the legacy phoneme-injection syntax, but the modern &lt;code&gt;say(1)&lt;/code&gt; CLI does not parse it. &lt;code&gt;say "[[inpt PHON]]k AE1 t[[inpt TEXT]]"&lt;/code&gt; produces ~3.5 seconds of mumbled character reading, not "cat". SSML &lt;code&gt;&amp;lt;phoneme alphabet="ipa" ph="kæt"&amp;gt;&lt;/code&gt; falls through the same way. The whole architecture pivoted to respelling once I'd measured this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;[[slnc N]]&lt;/code&gt; IS still honored.&lt;/strong&gt; Same dialect, same brackets, completely different fate. The dictionary uses &lt;code&gt;[[slnc 400]]&lt;/code&gt; between repetitions of the same word and &lt;code&gt;[[slnc 700]]&lt;/code&gt; before the "or:" alternates, which makes the audio breathe properly rather than clipping tails. Real silence, not punctuation pauses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;macOS Samantha has internal lexicon overrides.&lt;/strong&gt; &lt;code&gt;say "giff"&lt;/code&gt; produces the same audio as &lt;code&gt;say "jif"&lt;/code&gt; — the engine has a hard-coded rule. To force the hard-G reading for GIF's alternate, the dictionary uses single-letter &lt;code&gt;"gif"&lt;/code&gt; (no double F, lowercase), which bypasses the override.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These three findings are why the project's &lt;code&gt;respelling_us&lt;/code&gt; column has the slightly weird shapes it does ("koob control", not "kʊbkəntroʊl"; "jif" and "gif" not "jiff" and "giff").&lt;/p&gt;

&lt;h2&gt;
  
  
  What's coming
&lt;/h2&gt;

&lt;p&gt;The CLI is macOS-only today. On the roadmap:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows backend&lt;/strong&gt; via PowerShell + &lt;code&gt;System.Speech.SpeechSynthesizer&lt;/code&gt;. SAPI does parse SSML phoneme tags, so Windows can use the IPA column directly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linux backend&lt;/strong&gt; via &lt;code&gt;espeak-ng&lt;/code&gt; for offline, plus an opt-in cloud TTS path for higher quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud TTS&lt;/strong&gt; (ElevenLabs / OpenAI) — opt-in, env-var-keyed, for the names native TTS still mangles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VS Code / Cursor extension&lt;/strong&gt; — hover over a project name in code, hear the pronunciation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anki export&lt;/strong&gt; for vocabulary drills.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Contribute
&lt;/h2&gt;

&lt;p&gt;The dictionary needs entries for hundreds of project names still missing — Dapr, Backstage, Karpenter (oh wait, that one's already in), Pulumi, Pinia, OpenObserve, and dozens more. There's a &lt;a href="https://github.com/anzy-renlab-ai/pronounce/issues/1" rel="noopener noreferrer"&gt;pinned wishlist issue&lt;/a&gt; listing the most-requested ones.&lt;/p&gt;

&lt;p&gt;Adding an entry is a one-row PR. The &lt;a href="https://github.com/anzy-renlab-ai/pronounce/blob/main/CONTRIBUTING.md" rel="noopener noreferrer"&gt;CONTRIBUTING.md&lt;/a&gt; documents the column format and how to verify your respelling actually sounds right with &lt;code&gt;say&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Editorial constraints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tech terms only. The dictionary's scope is project / product / programmer-jargon names. Everyday English vocabulary is out of scope.&lt;/li&gt;
&lt;li&gt;General American English only. Regional accent variations are deliberately not in scope.&lt;/li&gt;
&lt;li&gt;Honest confidence levels. &lt;code&gt;creator-clarified&lt;/code&gt; only when the source URL actually documents a creator quote. Otherwise &lt;code&gt;community-consensus&lt;/code&gt;. Source URL blank rather than fabricated.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;🌐 &lt;strong&gt;&lt;a href="https://pronounce.renlab.ai" rel="noopener noreferrer"&gt;pronounce.renlab.ai&lt;/a&gt;&lt;/strong&gt; · ⭐ &lt;strong&gt;&lt;a href="https://github.com/anzy-renlab-ai/pronounce" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/strong&gt; (MIT)&lt;/p&gt;

&lt;p&gt;The site has a play button on every entry, a search box (press &lt;code&gt;/&lt;/code&gt; to focus), and a JSON API at &lt;code&gt;/api/word/&amp;lt;slug&amp;gt;.json&lt;/code&gt; if you want to consume it from a bot or an agent.&lt;/p&gt;

&lt;p&gt;If this saves you from saying "n-jinx" or "kub-cuttle" one more time — drop a star.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>cli</category>
      <category>productivity</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
