Double-tap Control, speak, and the Tamil lands in the app you're in.

Mozhi · மொழி · Tamil voice typing

பேசுங்க. எழுத்தாகும். Speak Tamil. It types, in any app.

Mozhi is an open-source desktop app I designed and built for Tamil speakers. Double-tap Control, speak Tamil, Tanglish or English, and it types into whatever app you're in: Slack, WhatsApp, Gmail, Notes, VS Code. Whisper runs on your own computer, so your voice never leaves it.

Scope
Product & interaction design
Rust + Tauri desktop app
Brand system & landing site
Open-source release
Role
Designer & builder, solo
Pair
Claude Code, on every commit
Timeline
Oct – Nov 2026
Beta 1 on 29 Oct
v0.3.1 on 1 Nov
Outcome
macOS & Windows, v0.3.1
Open source, Apache-2.0
Kamaldesigner & builder, solo
The Mozhi banner: மொழி in huge cream and turmeric letters on kumkum red, பேசுங்க. எழுத்தாகும், Speak Tamil. It types, in any app, on your own computer, beside a pixel Thanjavur temple and a For Mother Tamil seal

Contents

The Process.

Seven chapters, from one line in a README to a third version anyone can install. Read it the way it happened, or jump straight to a part.

01 / 07 Where it began

Sparkபொறி

One sentence in the README set the whole brief, and every decision after it had to answer to all four of its parts.

Spark · The brief

A tool for the language you think in.

Tamil speakers, writing by voice, in Tamil, on their own machines. Each phrase rules something out: an English-first dictation tool, a cloud service, an account, a subscription.

From the README

Tamil speakers should be able to write by voice in their own language, on their own computer.

No account. No cloud. No telemetry. Free, Apache-2.0, and அன்னைத் தமிழுக்கு, for Mother Tamil.

Spark · How Tamil is written

Write the way people speak.

On WhatsApp, Tamil is often typed in Latin letters. At work it slides into English halfway through a sentence. Mozhi treats all of it as real writing, not as mistakes to correct.

Tanglish is a writing mode

“Tamil, in the Latin letters you already type on WhatsApp.” Mozhi's transliteration follows chat habits, zh for ழ, tr for ற்ற, long vowels doubled, instead of an academic standard nobody types.

Naalaikku meeting-a pathu manikku vechukkalaamaa?

The register is spoken

The interface is written the way people talk. The contributor guide says it plainly: use the word people say aloud, not a formal coinage.

மைக்ரோஃபோன்microphone, as people say itஒலிவாங்கி உள்ளீட்டுச் சாதனம்a coinage nobody says aloud
02 / 07 What makes it hard

Problemசிக்கல்

Three things break Tamil dictation: English inside Tamil, words the model invents, and text pasted somewhere it doesn't belong.

Problem · Two languages, one line

English words live inside Tamil sentences.

Say this to a speech model and it can go wrong two ways: meeting comes back as மீட்டிங், or the whole line is heard as English. Both are wrong for someone who said it in Tamil.

நாளைக்கு meeting-அ பத்து மணிக்கு வெச்சுக்கலாமா?

“Shall we keep tomorrow's meeting at ten?”

  1. The prompt shows both kinds of mixingso English words stay in Latin letters instead of being spelled out in Tamil.
  2. Language ID leans to TamilA Tanglish sentence full of English words must still decode as Tamil.
  3. Auto decides per sentencefrom about 1.5 s of audio, and asks again at about 8 s if the first answer was unsure.
  4. Polish puts English backமீட்டிங் → meeting, when the Tamil script swallowed an English word.

Problem · Words nobody said

The model hears things in a quiet room.

Whisper learned from YouTube subtitles, so in silence it sometimes types a sign-off nobody said. Mozhi trims the silence first with a voice detector, “the single best defence” in the code's own words, then strips the phrases it knows Whisper invents, in English and in Tamil.

Problem · The wrong window

Never paste into the wrong place.

A dictation tool types into other people's apps. One message pasted into the wrong chat and nobody trusts it again. That line from the contributor guide became four rules.

  1. 01

    Name the app first

    Before anything is pasted, the pill says where it's going: இதில் எழுதும் Typing into Slack › Message #general. Switch apps mid-sentence and it follows you.

  2. 02

    Never take focus

    The pill is a non-activating panel. Your app keeps the cursor the whole time, so the text lands exactly where you left it.

  3. 03

    Listen only for the trigger

    It never records your typing. The key hook watches for the double-tap, plus Enter and Esc only while the pill is open.

  4. 04

    Give the clipboard back

    Mozhi snapshots your clipboard, pastes, and puts it back 350 ms later, unless something else wrote to it meanwhile.

03 / 07 How it works

Systemஅமைப்பு

A Rust core, two small web views and Whisper, all on the same computer as your voice.

System · The dictation loop

From two taps to typed text.

Tauri 2 with a Rust core runs the state machine, the microphone, the models and the paste. The pill and the settings are plain TypeScript. Nothing in the loop needs the internet.

  1. ⌃⌃Remember the app and field you're in
  2. MicOpens in about 10–40 ms
  3. 16 kHzRing buffer, resampled to mono
  4. PreviewRe-reads the last 25 s every ~700 ms
  5. VADSilero trims the silence
  6. Whisperwhisper.cpp, Metal GPU on a Mac
  7. CleanInvented lines out, Tanglish spelled
  8. PolishOptional, local, 6 s or the raw text
  9. PasteInto the app you're in now

⌃⌃ Remember the app and field you're in

13%Tamil character error rate with a fresh Whisper state for each pass
48%the same audio when the state was reused between passes: a bug found and fixed
0network calls in the loop; only model downloads you start, and your own local polish

System · The double-tap

Only a clean double-tap counts.

Control is the key you hold for everything else, so Ctrl+C must never start Mozhi. A tap is a press and release of the trigger on its own, under 260 ms, and the second must come within 380 ms. Try it.

Tap control on your keyboard twice, or tap this key.

Waiting for two taps

Or try a mistake:

System · Eight models

Fast or precise? You choose.

From a 60 MB base to a 1.6 GB full-precision turbo, including two Tamil fine-tunes. Since v0.2.0 Mozhi starts with Tamil Small, a Whisper fine-tune from IIT Madras SPRING Lab. Only one model stays in memory at a time, and every download is checked against its SHA-256.

Sort by
  1. Whisper · multilingualLarge v3 Turbo · Q5574 MBSpeedதமிழ்
  2. IIT Madras SPRING LabDefault · v0.2.0Tamil Small · fine-tuned264 MBSpeedதமிழ்

    Tamil only

  3. vasista22Tamil Medium · fine-tuned1.53 GBSpeedதமிழ்

    Tamil only

  4. Whisper · full precisionLarge v3 Turbo1.62 GBSpeedதமிழ்
  5. WhisperLarge v3 · Q51.08 GBSpeedதமிழ்
  6. WhisperMedium · Q5539 MBSpeedதமிழ்
  7. WhisperSmall · Q5190 MBSpeedதமிழ்
  8. WhisperBase · Q560 MBSpeedதமிழ்

    English, in practice

The trade-off is real: the Tamil fine-tunes are the most accurate for Tamil, but they write English words in Tamil script. Bring your own: drop a ggml .bin into the models folder and it appears in the list.

System · Polish, guarded

A clean-up filter, not an assistant.

Polish is off by default. Switch it on and a small model on your machine, through Ollama, tidies punctuation and keeps English words in English. Its prompt opens with “You are a dictation clean-up filter, not an assistant.” And when it misbehaves, Mozhi throws its answer away.

What you saidநாளைக்கு காலையில meeting இருக்கு
  1. Sure! Here is the cleaned text: நாளைக்கு காலையில meeting இருக்கு.Rejected · adds a preamble
  2. நாளைக்கு காலையில meeting இருக்கு.
    (Tomorrow morning there is a meeting.)
    Rejected · adds a line you didn't say
  3. நாளைக்கு காலையில meeting இருக்கு.Kept · same words, a full stop

An answer is also thrown out if it is shorter than half or longer than 1.6 times what you said. If polish takes more than 6 s, or Ollama isn't running, the raw transcript is pasted instead. The answers above are illustrative; the rules are the ones in the code.

04 / 07 What you see and touch

Designவடிவமைப்பு

One floating pill, seven marks that move with your voice, and a settings app that speaks Tamil first.

Design · The pill

Everything happens in one small card.

It floats at the bottom of the screen, above whatever you're writing in, and never steals the cursor. This is the real component, running here: the same markup, the same voice indicator, the same Tamil.

  1. 01இதில் எழுதும் Typing into: the app and the field, always named first
  2. 02The mode chip cycles Auto, தமிழ், Tanglish, English
  3. 03The voice well: three dots that breathe, listen and write
  4. 04⌃⌃ or ↵ inserts, esc throws it away
  5. 05இடு Insert, the one gold button
  6. 06Edit in the pill: since v0.2.0 a click stops to fix a word; since v0.3.0 Mozhi keeps listening while you fix, and Enter inserts into the app you started in

Design · Three dots that listen

The dots are the only thing that moves.

The logo's three dots are the voice indicator. Seven marks morph between five states, and any state can interrupt any other because every mark eases toward its target each frame. Pick a state.

தயார்ready, double-tap ⌃⌃

With reduced motion the marks hold still and the colour and label carry the state.

Design · Three ways to write

One voice, three ways to write it.

You say one sentence. Mozhi writes it in Tamil script, in Tanglish or in English. Auto, the default, picks Tamil or English for each sentence.

You say“நாளைக்கு meeting-அ பத்து மணிக்கு வெச்சுக்கலாமா?”

நாளைக்கு மீட்டிங்கை பத்து மணிக்கு வெச்சுக்கலாமா?Tamil script. Turn on local polish and English words stay English: meeting-அ.whisper language: ta
Naalaikku meeting-a pathu manikku vechukkalaamaa?Tamil, in the Latin letters you already type on WhatsApp.whisper language: ta → chat-style transliteration
Can we keep tomorrow's meeting at ten?Say it in English, get English.whisper language: en

Design · Tamil leads

Tamil leads, English supports.

The settings app opens in Tamil, with every heading in Tamil and its English beside it. Models are postage stamps with speed and Tamil-accuracy meters. History is a stack of palm-leaf receipts that never leaves your computer.

The Mozhi settings app in Tamil: Home with keycaps, the pill and the mode switch; Models as stamps; History as receipts for Slack and WhatsApp

Onboarding opens with வணக்கம்! and takes four steps: hello, permissions, a model download, and a first try. Error messages say what happened and where, Slack-இல் ஒட்டப்பட்டது, never a vague “something went wrong”.

05 / 07 How it looks

Brandஅடையாளம்

“Every word starts as a dot.” The brand book opens with that line, and everything else is drawn from Tamil Nadu, around 1000 CE.

Brand · ஃ, the mark

ஃ, a letter only Tamil has.

Āytham is three dots in a triangle. It became the logo, the app icon and the voice indicator, and it means three things at once.

The Mozhi mark with its construction: dot radius 0.092 of the tile, dots 0.158 from centre, the bottom pair set 0.112 below centre so the triangle reads optically centred, corner radius 0.225 0.158 · 0.1580.112 lowr 0.092
The bottom dots sit a little low, so the triangle reads as centred. Never rotate it, add a fourth dot or outline the dots.
  • Āythamஆய்தம்

    A letter no other script has, with a sound of its own.

  • Chera bowChola tigerPandya fishThe Muvendarமூவேந்தர்

    Chera, Chola and Pandya, the three crowned kings who carried Tamil for two thousand years.

  • Pulliபுள்ளி

    Every kolam starts as a grid of dots on the doorstep at dawn.

Brand · Colour

Colours you'd find at home or in a temple.

Every colour has a Tamil name for something real. “Red is the ground, turmeric is the voice, palm-leaf cream is where text is read.” Tap a swatch to copy it.

Brand · Type

ழ takes the accent.

The wordmark is Anek Tamil at its heaviest and narrowest, “condensed like a Manjapai print”, the cloth shopping bag every Tamil home has. One letter gets the turmeric: ழ, the sound only Tamil has.

மொழி

  • அனெக் தமிழ்Anek Tamil · 800 at width 75 for display, 100 for the interface
  • திரோ தமிழ்Tiro Tamil · quotations and the Thirukkural
  • JetBrains MonoReceipts, labels and data

Brand · Motifs

Drawn by a script, from a thousand years ago.

The patterns aren't stock. A small Python script generates every one as SVG, the same output every time: a sikku kolam traced as one unbroken line, the Thanjavur temple on a pixel grid, and the ring of fire around Nataraja.

Sikku kolamசிக்கு கோலம்One line that never lifts, woven around a grid of dots.
The Thanjavur Periya Kovil vimana drawn on a pixel grid
Thanjavur, 1010 CEதஞ்சைRajaraja Chola's temple, a thousand years later, in pixels.
PrabhaபிரபைNataraja's ring of fire, the ring that turns while Mozhi writes.
06 / 07 Getting it out

Shipவெளியீடு

A landing page that reads Tamil first, a privacy policy you can read in ten seconds, and a beta for two operating systems, in public.

Ship · The site

A landing page in two scripts.

Every heading is Tamil first with English underneath, from பேசுங்க. எழுத்தாகும். down to a bilingual FAQ. Scroll the page inside the window, or open it.

mozhi-khaki.vercel.appOpen ↗
The full Mozhi landing page: the hero, three steps, three ways to write, the privacy charter, the story of three dots and the Thanjavur temple, speech models as stamps, open source, the maker, and the FAQ

Ship · A privacy receipt

The privacy policy is a receipt.

“Privacy is the product,” says the contributor guide. So the promise is printed like a copper-plate charter, செப்பேடு No. 1010, with every line you'd want to check and a total of ₹0.

Copper-plate charter receipt No. 1010: audio uploaded 0 bytes, account none, telemetry and tracking none, speech recognition whisper.cpp, polish optional Ollama local, works offline yes, licence Apache-2.0, total ₹0, நன்றி thank you
  • 0 bytesof your voice uploaded, ever
  • Offlineafter the one model download you choose
  • 2 callsare all the app may make: model downloads you start, and your own local polish
  • Localhistory lives only on this computer, with a Clear all

Ship · Launch day

Twenty-nine October, in twelve commits.

The public history covers one day. Most of the app was built before it starts: it landed as a single commit of 116 files. What the day shows is the release, mistakes included.

Launch day, 29 October 2026, from 11:46 to 14:02 IST: the landing page, the app made public, a faster engine and the new pill, the beta tag, a failed macOS build fixed 27 minutes later, and the README 11:3012:0012:3013:0013:3014:0014:3015:00 v0.1.0-beta.1 · 13:31 Beta 1 published · 13:39 v0.2.0 · 14:44 macOS build failed · fixed in 27 min 11:46 · Landing page, first commit11:48 · Ignore the Vercel link12:06 · Landing reworked, the maker credited12:07 · Portrait caption on one line12:17 · Desktop app, brand system and docs: 116 files12:31 · Repo public, “first release coming soon”13:27 · Engine: Silero VAD, faster decoding, clean-up13:27 · The new voice pill, open at login, release builds13:58 · Fix: Metal links with newer Xcode13:59 · Site points downloads at the beta14:02 · README rebuilt with recorded demos14:44 · v0.2.0: edit in the pill, Tamil model by default
  1. Landing page, first commit3b4eded
  2. Ignore the Vercel linkf1eb674
  3. Landing reworked, the maker creditedf7954e4
  4. Portrait caption on one line4d6030a
  5. Desktop app, brand system and docs: 116 filesb5e7174
  6. Repo public, “first release coming soon”82190a5
  7. Engine: Silero VAD, faster decoding, clean-up64ee1d9
  8. The new voice pill, open at login, release buildsf866fdc
  9. Fix: Metal links with newer Xcodeb54bbeb
  10. Site points downloads at the beta6824cb8
  11. README rebuilt with recorded demos33a193e
  12. v0.2.0: edit in the pill, Tamil model by defaultd846a98

Ship · The betas

Small, unsigned and honest about it.

Beta 1 shipped at 13:39. The installers are tiny because the speech models aren't inside them; you choose one after install. They aren't signed yet, and the site says so instead of hoping you won't notice. v0.2.0 was tagged the same afternoon.

Ship · Version three

மூன்றாம் பதிப்பு. மூன்று புதுமைகள். Version three, three new things.

v0.3.0 shipped on 1 November, three days after Beta 1. Two of its three changes remove a moment where you had to start over: stopping to fix a word, and losing a recording to an error. v0.3.1 followed the same day with two fixes.

பேசும்போதே திருத்துங்கள்

Edit while you speak

Click into the text while Mozhi is still listening. Fix a name, add a line: every phrase you say next goes in where your cursor is, and the words it is still hearing show on a live line underneath. ↵ inserts, ⇧↵ adds a line, esc cancels.

பேச்சிலேயே எமோஜி

Emoji, without leaving the pill

A 😊 button opens a picker with an everyday row, your recent picks and every emoji by group. Search in English, Tamil or Tanglish: heart, இதயம், sirippu, sapadu, vanakkam. Or just say it: “heart emoji”, “இதயம் எமோஜி”.

பிழை வந்தாலும் சொற்கள் தொலையாது

Errors that keep your words

If a transcription fails, the recording is kept. Try again shows the new result for you to check before it goes in, Copy text saves what you have, and Report opens a GitHub issue with your version and the error, never anything you dictated.

v0.3.1two fixes, same day

  • A phrase could go missing. If the pill was still loading when the first phrase was committed, that phrase could be dropped. Phrases are now numbered: the pill notices a gap and resyncs, and never accepts a draft that skipped one.
  • “Mozhi quit unexpectedly” on quit. The speech engine aborted while shutting down because the model was still loaded. The model is now released before Mozhi exits.

இப்போதே பெறுங்கள்Get v0.3.1:Mac (.dmg)Windows (.exe)Release notes

07 / 07 What it taught me

Reflectionசிந்தனை

One sentence of brief, a tool that keeps your voice at home, and a small offering to the language I think in.

Reflection · Results

Beta 1 is out

0bytes of your voice uploaded, ever
2taps of Control to start, and two to insert
4.5MBthe macOS download, models chosen after install
8speech models, two of them Tamil fine-tunes

Speak Tamil, Tanglish or English. It types, on your own computer.

Reflection · Lessons

What I'd tell the next person building one.

Most of the hard parts weren't the model. They were respect: for how people talk, where their text goes and who hears them.

  1. 01

    Design for how people talk

    Tanglish and English words are part of Tamil today. Treating them as errors would have made a tool for nobody.

  2. 02

    Trust is a paste in the right place

    Name the target, never take focus, give the clipboard back. Four small rules carry more weight than accuracy.

  3. 03

    Guard the model's imagination

    Trim the silence, strip the invented lines, and let polish fail back to the raw words instead of improvising.

  4. 04

    Let the culture draw the brand

    ஃ, the kolam and the temple came from the language itself, generated by a script, not borrowed from a stock set.

  5. 05

    Ship honestly

    “Coming soon” until the beta was real, unsigned builds labelled as unsigned, and a failed build fixed in the open.

Reflection · What's next

Where it goes from here.

Straight from the site's call for contributors. Nothing here is promised by a date.

Reflection

Final thoughts before we leave.

அன்னைத் தமிழுக்கு ஒரு சிறு காணிக்கை. A small offering to Mother Tamil.

Mozhi is free, open source and has no account and no cloud. It exists so that Tamil can be spoken to a computer and written back without leaving the room it was spoken in.

Tamil belongs to everyone who speaks it, and so does this tool. Fork it, fix it, teach it your district's way of talking.

அகர முதல எழுத்தெல்லாம் ஆதி
பகவன் முதற்றே உலகு

Just as every letter begins with அ, the world begins with the Primal One. Thirukkural, couplet 1