Docs

The dictionary, and getting your words right

Unbiased, the speech model writes shadcn as "shadkin" and useEffect as "use effect". One line of vocabulary fixes both, on your own machine, before anything is sent anywhere. This page walks the accuracy levers in order of what they buy you — your own words first, then vocabulary packs, model size and the microphone — and ends with the dictionary file's own reference, including the two caps that decide which half of it to reach for.

The dictionary, and getting your words right

In rough order of what they buy you.

Teach it your words. The biggest lever, and the only one that costs no latency: unbiased, base.en renders shadcn as "shadkin" and useEffect as "use effect", and one line of vocabulary fixes both. Select a word anywhere and press Ctrl+Win+D, or edit %USERPROFILE%\.deixis\dictionary.toml — the Dictionary tab is that same file (Vocabulary libraries, Words to expect, Fixes, Filler words).

Two caps decide which half of the file to reach for. Only the first 36 terms reach the whisper prompt: each costs ~1 ms of decode and past 36 accuracy measurably degrades, so the cap is a measurement rather than a guess. Overflow is not thrown away — up to 256 terms still go to the cleanup model, which is also what carries your words into translate — but it stops biasing the transcription itself, and the editor tells you when you are over. [[replacements]] are unbounded: applied at word boundaries after the decode, matched case-insensitively, landing verbatim. Past the cap, put new corrections there.

Switch on a vocabulary pack. Whole libraries rather than words one at a time. Five ship built in — Software development (developer, on by default), Accounting & finance (accounting), Business & product (business), Medical (medical) and Legal (legal) — each sized to fit the prompt whole on its own. Drop your own .toml into %USERPROFILE%\.deixis\packs\ and it appears beside them under the same packs = [...] key. Enabling several overflows the 36-term cap, which the editor reports rather than hides.

Move up a model size. Settings → Speech model offers base.en ("Standard (fast)") and small.en, whose control reads "Higher accuracy (~3x slower decode, 465 MB)" — the cost is on the control because it is your call to make. It downloads on switch and is hot-swapped into the running engine with no restart. Worth it for long prose; not worth it if the dictionary already fixes what you are getting wrong.

Use a better microphone. No software lever recovers a word the microphone never captured, and a headset beats a laptop array in exactly the conditions that break dictation — a room with other people in it. Settings → Microphone switches device live, so this is cheap to test both ways.

Know what cleanup can and cannot fix. The LLM second pass rewrites prose, not hearing: it never learns what you actually said, so a misheard proper noun stays misheard, and cleanup is deliberately forbidden from re-casing anything but the first character so that it cannot undo the biasing above. Mishearings are the dictionary's job. What it does buy is punctuation, structure and transforms, with your vocabulary and your previous utterance in that field sent along so it keeps your spellings and follows on from what it just wrote. Settings → Cleanup chooses when it runs — When it helps (auto, the default), Every time, Never — and with no endpoint configured all three behave as rules-only. The table of what leaves your machine says exactly what each choice sends.


User dictionary

%USERPROFILE%\.deixis\dictionary.toml — all keys optional, a parse error falls back to defaults with a warning:

# Extra terms whisper should recognise. Extends the builtin dev-stack list
# (set include_defaults = false to replace it). Capped at 36 terms in the
# prompt: each term costs ~1 ms of decode and past the cap accuracy degrades —
# the startup line tells you when you are over.
vocabulary = ["Infisical", "Hyperdrive"]

# Words to strip in addition to the builtin "um/uh/erm/..." list.
extra_fillers = ["basically"]

# Post-ASR corrections, applied at word boundaries in file order. Matching is
# case-insensitive; the replacement lands verbatim. Unbounded and free —
# prefer these over vocabulary terms once you hit the prompt cap.
[[replacements]]
from = "shadkin"
to = "shadcn"

[[replacements]]
from = "use effect"
to = "useEffect"

The behavioural contract is core/tests/dictionary_vectors.json — 32 vectors covering fillers, corrections, and casing invariants, run by cargo test.

Keep reading

Teach dictation your vocabulary: names, jargon and acronyms

When dictation mangles names, jargon and acronyms, a custom vocabulary fixes it. How to teach Deixis your words, which to add, and why the list is capped.

How to type by voice in any Android app, with the speech recognised on the phone

Dictate into any Android app's text field from a floating microphone. Speech recognition runs on the phone, and meetings are transcribed there too.

How to type by voice in any app on a Mac, with the speech recognised on the Mac itself

How to type by voice in any app on a Mac: hold Ctrl+Option, speak, let go. Speech recognition runs on your Mac, free and with no account.

Two keycaps, Ctrl and Win, held down and lit teal from underneath.

Hold a key. Speak. Keep working.

Deixis is free, needs no account, and runs on your own device.

v1.2.2 · 64‑bit Windows 10/11 · macOS 13 on Apple silicon · 51 MB · nothing else to install