--- url: /about.md description: >- Diction is built by a hands-on engineering lead who works daily on critical banking infrastructure. Privacy and reliability are not product values. They are engineering constraints he lives by. --- # About Diction is an engineering project. I'm a hands-on engineering lead at a major financial institution. The kind of environment where the reliability and privacy bar is set by regulators, not product managers. Systems don't go down. Data doesn't leak. Those aren't goals, they're the baseline. I use speech to text constantly. Commuting. On a walk with my son. Apple's built-in dictation is well known for being unreliable, and I needed something that works in any app. And I mean any app. I use terminal apps, SSH clients, things where the standard iOS keyboard already struggles. I was just missing something that solves the problem properly. A keyboard you tap, speak into, and it works. Every time, everywhere. So I built it properly. Diction is under 15 MB. I wanted it lean and focused, one thing that works rather than ten things that mostly work. A lot of the core audio and processing modules are custom built because the available libraries either pulled in too many dependencies or weren't precise enough for what I needed. iOS keyboard extensions have tight memory limits and no tolerance for slowness. I've spent a lot of time on memory usage, battery draw, and making sure the keyboard is ready the moment you need it. The same instincts I bring to banking systems are in Diction. No unnecessary data retention. No assumptions about the happy path. Defence in depth. Audio is processed and immediately discarded. The server is open source. You can read every line. On-device and self-hosted are free. If you don't want to run a server, there's Diction One. It runs on my own infrastructure with fine-tuned speech models and low-latency processing. Transcription text is encrypted with AES-256-GCM before it leaves the server. Context awareness carries terminology and names across your session. AI polishing cleans up the raw transcript before it hits your text field. The result is clean, ready-to-send text with no setup on your end. Priced like a developer built it, not like someone raised a round. *** [Try it on the App Store](https://apps.apple.com/app/id6759807364) I'm curious how people actually use it. Commuting, meetings, writing, terminal work, something else entirely. And what's missing for you. If there's a use case Diction doesn't handle well, I want to know. Find me on [GitHub](https://github.com/omachala) or [LinkedIn](https://www.linkedin.com/in/ondrejmachala), or just [drop a message](/support). --- --- url: /features/context-aware.md description: >- Diction reads the text around your cursor and adapts your dictation to fit. Insert into sentences, replace selected text, fix typos -- all by voice. --- # Context-Aware Text Editing Diction is not a blank-page dictation tool. It sees where your cursor is, reads the text before and after the insertion point, and understands what you have selected. When Writing Tools are active, every dictation is shaped to fit the context it is landing in. This turns Diction from a transcription tool into a voice-powered text editor. ## You don't pick a mode Diction figures out what you want from where your cursor is. * **Cursor in empty space**: it dictates. Words land at the cursor. * **Cursor in the middle of text**: it inserts. The new words fit the surrounding sentence. * **Text selected**: it edits. Either replaces the selection with what you said, or follows your instruction. Say *"translate to Czech"* and it does that. No toggle, no setting. One mic button, the right behaviour for the context you are in. ## Insert Anywhere Place your cursor in the middle of a sentence and dictate. Diction reads the surrounding text and formats the insertion to fit. Capitalisation and spacing adapt automatically, so the result reads like you typed it in place. **Example: filling in a sentence** You are writing an email: > Hi Sarah, I wanted to follow up on ▌ and see if you had any questions. You tap the mic and say: *"the proposal I sent last week"* Result: > Hi Sarah, I wanted to follow up on **the proposal I sent last week** and see if you had any questions. No stray capital letter. No extra period. It fits because Diction sees the sentence around it. *** **Example: continuing a list** You have a note open: > Things to pack: > > * Passport > * Charger > ▌ You tap the mic and say: *"laptop and headphones"* Result: > Things to pack: > > * Passport > * Charger > * **Laptop and headphones** It matches the list format because it can see the pattern above. *** **Example: adding to a code comment** You are editing a code file: > // TODO: refactor this function to ▌ You say: *"handle the edge case where the input array is empty"* Result: > // TODO: refactor this function to **handle the edge case where the input array is empty** Lowercase, no period. It reads like you typed it. ## Select and Replace Select text in any app, then dictate. Diction replaces the selection with your new words. This is the fastest way to rewrite, rephrase, or fix text by voice. **Example: rewriting a sentence** Your draft says: > I think we should probably consider maybe going with the second option if that is okay with everyone. Select the whole sentence. Tap the mic. Say: *"Let's go with option B."* Result: > **Let's go with option B.** No copy-paste. No deleting. Select, speak, replaced. *** **Example: fixing a single word** You wrote "defiantly" when you meant "definitely". Double-tap the word to select it. Tap the mic. Say *"definitely"*. Replaced. *** **Example: rephrasing a paragraph** You have a paragraph in a document that does not sound right. Select it. Dictate what you actually want to say. The entire selection is replaced with your new dictation, formatted to fit the surrounding document. ## How It Works Every time you tap the mic, Diction captures: * The text before your cursor (up to 500 characters) * The text after your cursor (up to 500 characters) * Any selected text This context is sent alongside your audio. Writing Tools use it to decide capitalisation, punctuation, formatting, and tone. The result is text that reads like it was typed in place, not pasted from a separate dictation box. ## When Is Context Used? Context-aware editing requires **Writing Tools** to be active. Writing Tools are available with Diction One cloud. Without Writing Tools (on-device or self-hosted without cloud post-processing), Diction still handles select-and-replace correctly. Your dictation replaces the selection. But the formatting will not adapt to surrounding text. | Mode | Select and Replace | Context-Aware Formatting | |------|-------------------|------------------------| | On-Device | Yes | -- | | Self-Hosted | Yes | -- | | Diction One Cloud | Yes | Yes | | Diction One Cloud (Writing Tools off) | Yes | . | ## Tips * **Place your cursor precisely.** The more context Diction has on both sides, the better the formatting. Tap to position your cursor where you want the text to go. * **Select generously.** When replacing, select the full phrase or sentence you want to rewrite. Diction works best when it can see the whole thing you are replacing. * **Speak naturally.** You do not need to dictate punctuation or capitalisation. Writing Tools handle it based on context. * **Use it for edits, not just dictation.** Diction is most powerful when you are refining existing text. First drafts, rewrites, quick fixes -- it handles all of them. --- --- url: /cloud.md description: >- Diction One cloud transcription. Fine-tuned speech model, high accuracy, zero setup. Audio processed and immediately discarded. Writing Tools included. --- # Diction One A fine-tuned speech model with advanced audio filters, built for accuracy, speed, and scale. Always available, always improving. You speak. We handle everything else. No server to run. No model to download. Open the app, subscribe, and start dictating. ## How It Works 1. Subscribe to Diction One in the app (free trial included). 2. Switch to the Diction keyboard in any text field. 3. Tap the mic and speak. Audio is transcribed and the text is returned. 4. Audio is discarded immediately. Nothing is stored. Nothing is used for training. ## What You Get * **Fine-tuned speech model**: custom-trained for accuracy beyond standard Whisper, with advanced audio filters applied before transcription. Hosted and maintained by us. We pick the best model for your language automatically. * **Writing Tools**: optional post-processing that cleans up your transcription and understands voice commands. Removes filler words, fixes grammar, adds proper punctuation and capitalisation. Tell it to rewrite, translate, or edit and it follows your instructions. Tell it what your work is about with Writing Style, set a tone per app with Tones, and add your own terms with My Words. Tuned to read like a person wrote it, not like a model wrote it for you. * **Long dictations**: long messages, long notes, full meetings come back complete. No truncation, no cutoff. * **Your words, uncensored**: profanity passes through as you said it. No automatic sanitising or replacement with asterisks. * **99 languages**: full multilingual support. Switch languages in settings. * **Zero setup**: no server, no Docker, no downloads. Works immediately after subscribing. * **On-device fallback**: if the request fails for any reason, Diction automatically retries using a local model on your iPhone. Your dictation is never lost to a network issue. * **Audio immediately discarded**: we transcribe and it is gone. Nothing is recorded. Nothing is stored. Nothing is shared. Nothing is used to train models. ## Writing Tools When you speak, you don't speak in perfect sentences. You say "um", pause mid-thought, skip punctuation, and occasionally trail off. That's normal. Writing Tools take the raw transcription and clean it up before inserting the text. It removes filler words like "um" and "uh", adds punctuation and capitalisation, fixes grammar, and produces text that reads like you wrote it, not like you said it. And when you need more than cleanup, just tell them what to do. Say "translate to Spanish" or "make this more concise" and they follow your instructions. The result: you dictate a quick thought and get a polished sentence. Dictate a paragraph and get something you'd be comfortable sending as an email. ### What it does * Removes filler words ("um", "uh", "like", "you know") * Adds punctuation and capitalisation * Fixes grammar and sentence structure * Preserves your meaning and intent. It cleans up how you said it, not what you said. * Tones: set Professional, Casual, Friendly, or a custom style per app. Diction remembers which tone to use where. * My Words: add names, jargon, and product terms so both transcription and cleanup get them right. ### What it does not do * It does not change the meaning of your words * It does not add content you did not say * It does not translate between languages * It does not store or learn from your transcriptions ### How to use it Writing Tools are on by default for Diction One subscribers. You can turn them off any time in the Diction app settings if you prefer the raw transcription output. When Writing Tools are active, the transcription text (not the original audio) is processed to produce the cleaned result. Audio is always discarded immediately after transcription, whether they are on or off. ## Best For * You want the highest accuracy without managing any infrastructure * You dictate emails, notes, and documents and want polished output, not raw speech * You value convenience. Subscribe and it works, everywhere, immediately. * You have tried on-device and want a step up in accuracy --- --- url: /encryption.md description: >- Diction protects every transcription with AES-256-GCM encryption and X25519 key exchange. The same standards used in WireGuard and Signal. Automatic. No configuration required. --- # Your Words. Protected. Privacy is built into Diction at the protocol level. Not as a feature you enable. Not as a paid tier. As a default. Every transcription is protected with AES-256-GCM encryption and X25519 key exchange. These are the same cryptographic standards used in WireGuard, Signal, and TLS 1.3. We did not invent anything. We applied the best tools the industry has, correctly, and made them automatic. ## We Take This Seriously Diction was built for people who think about where their voice goes. The server infrastructure is fully open source. The encryption is standard, auditable, and ships in every build. There is no version of Diction that does not encrypt your transcriptions. We do not ask you to trust us. We give you the code. ## What This Means For You * **Encrypted on every request**: your transcriptions are protected with AES-256-GCM before they leave the server. Strong encryption, every time, without exception. * **Fresh key per request**: X25519 key exchange generates a unique session key for each transcription. No key is reused. No key is stored. Nothing accumulates that could be stolen. * **Automatic on Diction One and self-hosted**: the same protection runs on our cloud and on every community-deployed gateway. No configuration. No opt-in. * **Open-source implementation**: the encryption code is public on GitHub. Read it, audit it, run it yourself. ## Writing Tools: Encrypted Both Ways When Writing Tools clean up your transcription, the text makes a round trip. Your raw words go to the server. The polished version comes back. Both directions are encrypted. Your text is sealed on your device before it leaves. The server decrypts it, runs the cleanup, and encrypts the result with a fresh key before sending it back. At no point does your text travel unprotected. This is not something you configure. It happens on every Writing Tools request, automatically. ## On-Device Is Still the Gold Standard If absolute privacy is your requirement, on-device transcription is the answer. Audio never leaves your iPhone. There is nothing to encrypt because there is no transmission. Encryption protects data in transit. On-device removes the transit entirely. For everyone else, encryption means your words are protected whether you use Diction One cloud or your own server. --- --- url: /features.md description: >- Everything Diction does. Context-aware voice editing, Writing Tools that sound human, Writing Style, on-device and self-hosted, long dictations, 99 languages. --- # Features Diction is a voice keyboard for iPhone. One mic button. No QWERTY. Tap, speak, text appears wherever your cursor is. Here is everything it can do. ## [Context-Aware Text Editing](/features/context-aware) Diction reads where your cursor is and figures out what you want without you switching modes. Cursor in empty space, it dictates. Cursor in the middle of a sentence, it inserts. Text selected, it rewrites the selection or follows an instruction like *"translate to Czech"* or *"make this shorter"*. One mic button, the right behaviour every time. [Read more](/features/context-aware) ## [Writing Tools](/features/writing-tools) Raw speech is messy. Writing Tools remove filler words, fix grammar, add punctuation, and produce text that reads like you wrote it. Tuned to sound human rather than machine-cleaned. No em-dashes everywhere, no faintly corporate cadence. They also take voice commands. Translate, summarise, rewrite as a list, make it more formal. Anything you can describe in a sentence. [Read more](/features/writing-tools) ## [Writing Style](/features/writing-tools#writing-style) Tell Diction what your work is about and how you write. Software engineer with British English. Sales lead who talks to enterprise customers. Doctor who dictates patient notes. A few sentences are plenty. Writing Tools read your Writing Style on every cleanup, alongside whatever tone you have set for the app you are in. [Read more](/features/writing-tools#writing-style) ## [Tones](/features/tone-presets) Set a writing style per app. Professional for email, Casual for messages, Friendly for social, or write a custom instruction in plain language. Diction remembers which tone goes with which app and applies it automatically. Same dictation, different output depending on where you are typing. [Read more](/features/tone-presets) ## [My Words](/features/my-words) Add names, jargon, product terms, and anything else that keeps coming through wrong. Diction uses your custom words to improve both raw transcription and Writing Tools accuracy. Add them once in the app, they work everywhere. [Read more](/features/my-words) ## Three Ways to Transcribe Pick the backend that fits how you work. Switch any time in settings. **[On-Device](/on-device)** . Speech models run locally on your iPhone. No internet required. Audio never leaves your device. **[Self-Hosted](/self-hosted)** . Run a Whisper server on your own hardware. One Docker Compose command. Free and unlimited. **[Diction One Cloud](/cloud)** . Frontier speech models, highest accuracy, zero setup. Includes Writing Tools. ## Long Dictations Long messages, long notes, full meetings. Diction handles dictations end to end without truncation. Talk for as long as you need and the full text comes back. ## Your Voice Is Never Lost If transcription fails for any reason, Diction keeps your audio safe and shows a retry button on the keyboard. Network drops mid-recording? Diction falls back to a local model on your iPhone automatically. The result lands exactly where your cursor was, without re-recording a single word. ## [Transcription History](/features/history) Every dictation is saved. The history screen splits into recent and full archive. Search highlights matching text so you find what you need fast. Tap any entry to open the full transcript. If you dictated something ten minutes ago and need it again, you do not have to remember it. Open history, find it, tap, done. [Read more](/features/history) ## Insights See how much you are actually dictating. Daily time saved, words per minute, how much faster you are than typing, days used. A stats badge on the home screen shows your usage at a glance. ## [Preferences](/features/preferences) Language, mic timeout (down to "release the moment I'm done"), functional keys, auto start, hand layout, haptics. Every setting in one place. [Read more](/features/preferences) ## 99 Languages On-device, self-hosted, and cloud modes all support the full set. Auto-detect is on by default, so you can switch between languages mid-sentence without touching settings. ## Works in Every Text Field Voice keyboards often break in unusual text fields. Terminals, code editors, browser inputs, search bars. Diction is built to work everywhere. If you can place a cursor in it, Diction can insert text into it. ## No Word Limits On-device and self-hosted modes have no word caps, no daily limits, no time restrictions. Talk for five seconds or fifty minutes. There is no meter running. Diction One cloud is unlimited for subscribers. ## Privacy The Diction app contains no analytics, no tracking code, and no telemetry. There is no data collection of any kind in the app. On-device mode processes audio in memory and discards it immediately. Self-hosted mode sends audio only to your server. Diction One cloud processes and discards. Nothing is stored, nothing is used for training. The server infrastructure is open source. Your words come through as you said them. No automatic censoring of profanity. --- --- url: /features/preferences.md description: >- Every setting in Diction's Keyboard Preferences screen explained. Language, functional keys, mic timeout, auto start, and hand layout. --- # Keyboard Preferences Open the Diction app and tap **Preferences** to reach these settings. Every one of them is stored in a shared space the keyboard reads too, so changes take effect the next time you open the keyboard. ## Language Diction supports 99 languages. Pick yours here and Diction transcribes in it. If you always dictate in the same language, this is the accurate choice and the one to stay on. Switch between languages a lot? Turn on Language Detection and Diction works out which one you are speaking each time. It is off by default, because naming your language outright beats guessing when you only ever use one. Cloud and self-hosted modes cover every supported language with nothing to download. On-device is where it varies: each model you can download covers a different set of languages, and the app tells you which on every model, so check before you pick. One of the free ones is English only. That also decides what Language Detection can do on-device, since a model that only knows English cannot detect anything else no matter how the toggle is set. ## Functional Keys A second row of buttons sits just below the recording bar when this is on. It gives you a period, question mark, space, return, delete, and the globe key to switch keyboards, all without leaving Diction. Useful if you want to punctuate or fix a word without reaching for another keyboard. Turn it off if you prefer the cleaner look. Default: on. ## Show Keyboard Key Adds a key to the functional row that shows or hides a full QWERTY keyboard. Tap it once to open the keyboard for quick edits, tap again to dismiss it and return to the dictation view. If you prefer a different key in that slot (like the globe key for switching keyboards), turn this off and customise the row to your liking. Default: on. ## Show QWERTY by Default When this is on, the full keyboard opens automatically every time the Diction keyboard appears. You can still hide it with the keyboard toggle key and bring it back later. On the next appearance it opens again. Useful if you use Diction as a hybrid keyboard — dictation first, typing for corrections — and don't want to tap the toggle key every time. Default: off. ## Timeout How long the microphone stays active after you stop talking. Once this elapses with no speech, Diction releases the mic and goes idle. Pick what fits how you dictate: * **After dictation**: releases the mic the moment your transcription comes back. Best if you usually dictate one thing at a time. If you use Bluetooth headphones, this also stops music and podcast audio from dropping into lower-quality voice-call mode while the mic is held. * **10 seconds, 30 seconds, 1 minute, and up**: keep the mic ready for a quick follow-up, then release it. * **Manual**: stays ready indefinitely until you tap to stop. Good for long hands-free sessions where you do not want to think about the mic. Default: 5 minutes. ## Auto Start When the microphone gets reactivated after a suspension, or when a session reconnects, Diction can start recording automatically rather than waiting for you to tap. Most people leave this on. Turn it off if you want explicit control over when recording starts. Default: on. ## Hand Moves the confirm button and the speech indicator to the side that matches your dominant hand. Right-handed layout puts the confirm button on the right. Left-handed puts it on the left. Default: Right. ## Haptic Feedback The keyboard vibrates on key moments: mic start, mic stop, successful transcription, and errors. You feel the state change without looking at the screen. Useful when you are dictating while walking or glancing away. Turn it off in Preferences if you prefer silent operation. Default: on. --- --- url: /features/my-words.md description: >- Add names, places, and terms to your personal dictionary. Diction uses them to improve transcription and Writing Tools accuracy --- # My Words Speech models handle everyday words fine. But your friend's last name, the street you live on, the brand you mention ten times a day? Those get garbled. You say "Nguyen" and get "new win." You say "Venmo" and it comes out as "ven mo." Your dog's name Biscotti becomes "this coffee." My Words fixes this. Add your words once, and Diction gets them right every time. ## How It Works Open the Diction app and go to My Words. Add any word or phrase that keeps getting misheard. Each entry can include "also heard as" variants for how the word might come out wrong. For example: | Word | Also heard as | |------|--------------| | Nguyen | New Win, Winn | | Venmo | Ven Mo, Ben Mo | | Acai | Ah Sigh, A Kai | | Peloton | Pellet On, Pell A Ton | When you dictate, Diction checks your custom words against the transcription. The speech model uses your words as hints during recognition, and Writing Tools correct any remaining mismatches. Both layers work together. ## What It Catches My Words works at two levels: 1. **During transcription.** Your custom words nudge the speech model toward the right word when the audio is ambiguous. "Nguyen" is more likely to come through correctly because the model knows to listen for it. 2. **During cleanup.** Even if the raw transcription still gets it wrong, Writing Tools know your words and swap in the correct spelling. "New Win" becomes "Nguyen" because Diction knows that is what you meant. The combination catches most cases. The speech model gets it right more often, and the cleanup catches what slips through. ## Good Candidates for My Words * People's names (friends, family, coworkers) * Brand and company names * Street names and neighborhoods * Restaurant names, food terms * Anything you say regularly that keeps coming out wrong ## Requirements My Words lives on the [Writing Tools](/features/writing-tools) screen in the app. The cleanup layer requires a Diction One subscription, and works across all transcription modes. Your custom words improve both raw transcription (via hints to the speech model) and Writing Tools (via the cleanup step). The hints work whether or not Writing Tools are on, but the cleanup correction layer needs them. --- --- url: /on-device.md description: >- Diction on-device mode runs speech-to-text locally on your iPhone. Audio never leaves your device. No internet required. 99 languages. --- # On-Device Transcription Your voice stays on your phone. On-device mode runs speech models locally on your iPhone. No internet, no servers, no data leaving your device. Ever. Download a model once and dictate anywhere. On a plane, in the underground, in a country with no signal. It works. ## How It Works 1. Download a speech model in the Diction app (one-time, happens automatically on first launch). 2. Switch to the Diction keyboard in any text field. 3. Tap the mic and speak. Transcription happens on your iPhone. 4. Text is inserted. Audio is discarded from memory. Nothing is saved. No account required. No internet required. No setup beyond the initial download. ## What You Get * **Complete privacy**: audio is processed in memory and discarded immediately. Nothing is transmitted anywhere. * **Works offline**: no Wi-Fi, no cellular, no connection of any kind needed. * **Multilingual**: most on-device models support 99 languages. Switch languages in settings. * **Two free models**: Standard and Advanced on-device models are free with no word limits, no daily caps, no restrictions. * **Premium model**: highest accuracy model available with a Diction One subscription. See pricing in the app. ## Best For * You want your voice to never leave your device. Full stop. * Offline dictation: flights, commutes, remote areas, anywhere with no signal * Quick notes and messages where speed matters more than peak accuracy * You want speech-to-text that works without depending on anyone else's server --- --- url: /privacy-first.md description: >- How Diction protects your voice data. On-device processing, self-hosted servers, encrypted transcriptions, open-source server code, and zero analytics in the app --- # Privacy First Voice keyboards are in a uniquely sensitive position. Every app you use, every message you type, every search you run, your keyboard is present for all of it. That kind of access demands more than a policy page. Here is exactly how Diction handles your data. ## The problem with "trust us" When you enable Full Access for a keyboard, you are extending significant trust. The permission exists so keyboards can do things like send audio for transcription or sync custom dictionaries. But in the wrong hands, it is also what would allow a keyboard to read what you type, monitor which apps you use, or send clipboard contents somewhere without disclosing it. Closed-source keyboards can claim anything in a privacy policy. You have no way to verify what the code actually does. Earlier this year, researchers examined a popular voice keyboard and found it was silently collecting full browser URLs, on-screen text via the Accessibility API, clipboard contents including data from password managers, and sending all of it to a server. Nothing in the privacy policy disclosed this. The only way it was discovered was by reverse-engineering the app. This is why Diction exists the way it does. ## How Diction handles your audio ### On-Device Audio is processed entirely on your iPhone using local speech models. Nothing leaves your device. No internet connection is required. Audio is held in memory during transcription and discarded the moment the result comes back. There is no server to breach. No policy to trust. No transmission to protect. The question of where your audio goes has one answer: nowhere. ### Self-Hosted You point Diction at a server you control. Your audio travels to that server and nowhere else. No data touches Diction infrastructure. We have no access to your audio, your transcriptions, or your server. The server software is open source. You can read it, audit it, and run it yourself. ### Diction One Cloud Your audio is processed in memory and discarded the moment transcription completes. No recordings are written to disk. No transcriptions are stored, cached, or logged. Your audio is never used for model training. Every transcription is protected with AES-256-GCM encryption and X25519 key exchange, the same standards used in WireGuard and Signal. Automatic on every request. ## What the Diction app collects Nothing. The Diction app contains no analytics and no tracking code. No usage data, no device identifiers, no behavioural monitoring. Your App Store privacy label reads "Data Not Collected." That is accurate. This website uses Google Analytics. The app does not. Diction has no QWERTY keyboard. There is nothing to type into it, and therefore nothing to log. ## What you can verify We do not ask you to take this on faith. **Server code:** the gateway that handles your audio is [open source on GitHub](https://github.com/DictionLabs/Diction). Read the transcription handler. Verify that audio is not stored. **Encryption:** the AES-256-GCM and X25519 implementation is in the same repository. Read it, audit it, or run it yourself. **On-device mode:** no network requests leave the app. Confirm it with any network inspector. *** On-device, self-hosted, or cloud. The principle is the same. Your voice is yours. We process it, return the text, and get out of the way. [Download on the App Store](https://apps.apple.com/app/id6759807364)  ·  [Server on GitHub](https://github.com/DictionLabs/Diction) --- --- url: /privacy.md description: >- Diction privacy policy. The Diction app has zero analytics and zero tracking. Your voice data is never stored. --- # Privacy Policy Want to understand how Diction is designed to protect your data? [Read our Privacy First page.](/privacy-first) *Last updated: March 2026* Diction is a speech-to-text keyboard for iOS. Your privacy is the foundation of how Diction is built, not a feature we bolt on later. The Diction **app** contains **zero analytics and zero tracking code**. No data is collected, transmitted, or sold by the app. Your App Store privacy label reads "Data Not Collected." That is accurate. This website uses Google Analytics to understand how visitors find diction.one. The app itself contains no analytics of any kind. ## How Each Mode Handles Your Audio ### On-Device Mode Audio is processed entirely on your iPhone using a local speech model. **Nothing leaves your device.** No internet connection is required. Audio is held in memory during transcription and discarded the moment the result is returned. ### Self-Hosted Mode When you connect Diction to your own server: * **Audio travels only to your server.** No data touches any third-party service. * **Nothing is stored by Diction.** Audio is processed and discarded immediately after transcription. * **We have no access** to your audio, your transcriptions, your server, or any other data you produce. ### Diction One (Cloud) When you use the hosted Diction One service: * **Audio is never saved.** Your audio is processed in memory and discarded the moment transcription completes. No recordings are written to disk at any point. * **Transcriptions are never stored.** The transcribed text is returned to your device and immediately removed from server memory. No transcription is saved, logged, cached, or retained in any form. * **No model training.** Your audio and transcriptions are never used to train, fine-tune, or improve any models. ### Diction One Infrastructure Logging The Diction One cloud infrastructure collects system performance logs for debugging and monitoring. These logs include request latency, character counts, error types, and server load metrics. **No client data is ever logged or stored.** Your audio, transcriptions, and any text context sent for Writing Tools are never written to logs. ## What the App Collects **Nothing.** The Diction app does not collect, transmit, or store any personal data. Specifically: * No analytics or usage tracking of any kind * No behavioural monitoring * No device identifiers sent anywhere * No advertising networks or ad code * No data shared with or sold to third parties ## Data Stored on Your Device Diction stores the following locally on your iPhone, accessible only to the app and its keyboard extension: * **Your settings**: selected mode, language, server endpoint (if self-hosted) * **Subscription status**: whether you hold an active Diction One subscription (managed entirely by Apple) * **Downloaded speech models**: for on-device transcription, stored in the app's local container None of this data syncs to iCloud or any external service. Removing the app deletes all local data. ## Keyboard Extension and Full Access Diction requests **Full Access** for the keyboard extension. iOS requires this permission for any keyboard that needs network access. Here is exactly what Full Access enables, and what it does not: * **Network access**: required to send audio to your server or Diction One for transcription * **No keylogging**: Diction has no QWERTY keyboard and no text input to record * **No clipboard access**: Diction does not read your clipboard * **No contacts access**: Diction does not access your contacts, photos, or any other personal data ## Payments Diction One subscriptions are processed entirely by Apple through the App Store. We never receive or store your payment information, Apple ID, or billing details. ## Children's Privacy Diction does not knowingly collect data from anyone, including children under 13. Since we collect no personal information at all, no additional protections are necessary. ## Changes to This Policy If we update this policy, the revised version will be posted here with an updated date. Since Diction collects no data, material changes are unlikely. ## Provider Diction is provided by **Diction Labs**, a trading name of Ondrej Machala. Contact: . ## Contact Questions about privacy? Email or open an issue on [GitHub](https://github.com/DictionLabs/Diction/issues). --- --- url: /releases.md description: What's new in each Diction release. Full changelog for every App Store version --- # Release Notes ## Diction 13.0 * Pairing a self-hosted server is now a QR code, not a manual key. Scan it from your terminal and you're connected. Keys rotate on their own from there. * Writing Tools now runs on your own server too, and it's free there, because it's your hardware doing the work. * On-device transcription is back to full quality for free, in every language. We built our own compact version of a full-size speech model so it fits on your phone without asking you to pay for it, and it's noticeably more accurate than the lightweight model it replaces. * You can start dictating the moment you tap the mic, even while a larger model is still getting ready in the background, instead of waiting it out. * Dictating in a language other than English now gives you that language back. It had been quietly transcribing into English instead. * Live and Live X clean up your text the moment you stop talking, and catch the kind of repeated-phrase glitches speech models sometimes produce before they land in your document. * Long-press accents now cover 47 languages, and they're ordered for the language you're actually typing in rather than a US English layout. * Copy and Save to My Words now work on your last dictation even if you haven't selected anything. * Words you teach the keyboard now reach AI cleanup too, so names and jargon you've corrected before stop getting mangled again. * The app tells you separately when your speech backend and your AI backend are having trouble, and lets you know if your self-hosted server has fallen behind the app. * Fixes for downloads that failed partway on a nearly full device, and for switching models mid-download. * Cloud dictation text now appears sooner. Renewals no longer interrupt an in-progress dictation, and a brief hiccup no longer tells a subscriber they need to subscribe. Clearer errors when the server is at fault instead of blaming your network. * Various polish across the keyboard and settings. ## Diction 12.1 * Pro subscribers are no longer told "Subscription required" by mistake. Existing lockouts heal themselves. * Live mode no longer drops the first words you speak. * Fixes to the keyboard hints, including Edit by voice, which now explains where it lives instead of doing nothing. ## Diction 12.0 * The typing keyboard now matches your language. QWERTZ for German, AZERTY for French, and Spanish gets its ñ where it belongs. Each layout is named by the language it's for, sitting right next to the language picker. * Autocorrect got a lot more careful. It looks at where your finger actually landed before deciding you slipped, so genuine typos get fixed while your names, brands, and jargon are left alone. If you'd rather it stayed out of the way, autocorrection and word suggestions each have their own switch now. * Every letter key shows its number or symbol, and a long press types it, so there's no need to switch layouts for a single digit. Turn the hints off if you prefer a cleaner keyboard. * Bigger keys with tighter gaps, and the suggestion strip now respects the capitalisation you actually typed. * Setting Diction up is simpler. Two screens instead of three, you can skip ahead whenever you like, and anything you skipped stays one tap away from Home. If a permission gets switched off later, Home tells you. * Diction now tells you when it can't reach the server, instead of quietly acting as though you weren't entitled. The keyboard says so directly, a long press explains what's wrong, and there's separate advice for when a VPN or work profile is intercepting the connection rather than the network simply being down. * The keyboard is much harder to kill. We fixed a leak that made it pile up dead views as you switched apps, stopped it dying mid-typing, and made it recover in about a second when the app has been closed, instead of hanging for six. * Tapping "Tap to allow Full Access" opens Diction again. It was doing nothing at all, which left anyone who landed there with no way out. * Live mode holds its connection properly on cellular, and now transcribes in the language you picked instead of guessing, so non-English dictation no longer loses its opening words. * Self-hosted setups: the "Add server" banner finally goes away once you've added one, and the server screen shows real connection health. * Various polish across the keyboard, settings, and onboarding. ## Diction 11.0 * Everything that cleans up and reshapes your words now lives in one place: Writing Tools. Turn each cleanup on or off individually, and choose whether it runs in the cloud or right on your iPhone. * Tones are back. * Started a recording by accident? You can now abandon it without losing the audio. It goes to History under "Not processed," where you can still turn it into text later. Kept for 7 days. * Cleaner transcripts everywhere. Filler words and accidental repetitions are stripped out before you ever see the text. * Numbers, dates, and times come out properly formatted when you dictate in English on your device. * My Words now works with on-device dictation too, so your names and jargon land right whether you're online or not. * Fixed a run of first-launch problems: a setup crash, a screen that could get stuck, and a frozen waveform on a fresh install. * Themed keyboards now behave correctly in apps that force light or dark mode, and edit mode no longer looks like it's recording. * Self-hosted servers fall back gracefully instead of hammering a dead connection, and a self-hosted hiccup no longer knocks out your cloud access. * The keyboard holds up better when you're switching between apps a lot, and you'll get a warning before a model download if your device is nearly full. * Various polish across the keyboard, settings, and History. ## Diction 10.1 * Themes. Pick a color palette and make the keyboard yours. Six themes at launch, with a live preview as you browse. * Self-hosted users running a direct Whisper server without the Diction Gateway no longer get stuck in a silent retry loop. Diction falls back to the batch endpoint correctly. * Free trial extended for everyone, so you can try the new fine-tuned cloud models across all three Diction Cloud tiers. ## Diction 10.0 * Diction One runs on a brand new cloud model. English, Spanish, German, French, Italian, Portuguese, and Dutch are now up to six times faster, and just as accurate or better. * Polish transcription quality has been fixed. * Fewer failed dictations. Cloud retries properly and falls back faster when something does go wrong. * Autocorrect on the QWERTY keyboard fixes typos as you type, splits run-together words, and completes contractions. * Word suggestions above the keys. Tap one to accept. * The keyboard learns the words you correct back, and stops changing them. * Much better corrections and accents when typing in Spanish, Portuguese, French, and German. * Typing feels smoother. No more key-callout blinking or jitter. * The keyboard no longer freezes, and a stuck dictation can be cancelled instead of spinning on retry. * You land back in the app you were typing in after you dictate, on the latest iOS. * AI Companion now formats what you say into paragraphs and lists instead of one long block. * Real iPad support. Wider layouts, a globe key, and right-sized emoji. * Bigger, clearer emoji on iPhone too. * Your music stays on the car speakers when you dictate over CarPlay. * Your music app gets its playback controls back the moment dictation ends. * On-device dictation is reliable on the latest iOS, and fast on every launch after the first. ## Diction 9.0 * Cloud transcription is about twice as fast end to end, so text lands in your app almost as soon as you stop speaking. * An emoji picker is built into the keyboard, with search and skin tone variants, so you can grab the right one without leaving Diction. * The QWERTY spacebar row now has a period key, so ending a sentence is one tap instead of a stretch. * Pause and resume mid-dictation. Take a breath, gather a thought, then pick up where you left off without losing context. * Hold space and slide to move the cursor like a trackpad, matching what your thumb already knows from the system keyboard. * The mic releases the instant your phone rings, so you never miss a call because Diction is holding the audio session. * Diction mode is now equally reliable online or offline. No more failed attempts when your network drops for a moment. * Choose what music does while you dictate: keep playing, duck, or pause. Whichever fits how you use audio. ## Diction 8.0 * Brand-new autocorrect engine, the first real one in Diction. It quietly fixes common mistakes as you type, with no setup required. * The QWERTY keyboard layout has been updated: more compact, more responsive, and easier to use. Suggestion chips now sit inline next to the mic button, and the dismiss key lives in the keyboard row itself. * Suggestions are significantly more reliable. They now track context correctly after backspace and edits, and tapping them works consistently wherever you are. * When you have text selected and speak an edit instruction, the live streaming preview no longer overwrites your selection mid-way. The replacement arrives as a single, clean swap. * Tap the mic inside any transcript to record more and insert it at the cursor. In Live mode, the detail view opens right away so text streams in as you speak. * Added a numpad for number fields. Tap into a phone number, PIN, or numeric field and the keyboard adapts automatically. ## Diction 7.0 * A built-in QWERTY keyboard. When you can't talk out loud, just type without leaving Diction. Autocorrect, word suggestions, long-press accents, key popups, caps lock, double-space-to-period, backspace acceleration, and the feel of a native keyboard. * Diction Live (Beta). Your words now appear as you speak them, in real time, instead of only after you stop. * Automatic language detection. Switch between languages a lot? Diction can now work out which one you're speaking. No need to set it each time. Optional, off by default. * Smarter capitalization. Dictation now respects the field you're writing in, so email addresses, code, and similar text don't get wrongly capitalized. * A cleaner mode switcher. Picking Diction One, Live, an on-device model, or your own server is now a dedicated one-tap screen, with your current plan shown at a glance. * Record and transcribe right inside the app. A new mic button on the home screen lets you capture speech without the keyboard, then copy the text or send it straight to any app with the share button. * More reliable in the moment. Better retry and fallback when a transcription fails, sturdier live-streaming connections, and a refined suggestion strip that stays out of your way. * The keyboard's default key row now includes a period key, and choosing an on-device model starts downloading right away with no extra confirmation step. * Fully localized across all 13 languages, with faster recording start, proper light and dark keyboard theming, and lots of smaller polish and stability fixes. ## Diction 6.0 * Customizable keyboard row. Tap any key to change what it does, rename it, resize it. Add new keys, drag to reorder, delete what you don't need. The whole row is yours now. * Per-key visibility. Toggle "only show in edit mode" so custom keys stay hidden while you're dictating and appear when you select text. No more layout jumping. * Tap-to-fix suggestions. Select a word and three smart alternatives appear above the keyboard: spelling fixes, grammar corrections, or just a better way to say it. * Save to My Words. A new key that teaches Diction your names and jargon with one tap. Custom words feed into transcription for better accuracy going forward. * Undo and redo. Tap to reverse your last dictation, tap again to bring it back. Works for edits too, not just transcriptions. * Diction One now includes both cloud and on-device. Subscribers get the flagship cloud model and the best offline model, so you're covered with or without a connection. * More on-device models. Whisper Small and Nvidia Parakeet join the lineup, giving you more choices for different languages and accuracy needs. * Redesigned home screen. Three clear tiers: Diction, On-Device, and Self-Hosted, each remembering your selection when you switch between them. * Continued improvements to speak-to-replace. Better casing, punctuation matching, and context awareness when editing selected text. * Refreshed onboarding with illustrated steps. * Self-hosted: the gateway now speaks the OpenAI speech API, so any compatible SDK works as a drop-in. * Improved reliability, bug fixes, and various UI polish. ## Diction 5.0 *April 2026* * Profile lets you tell Diction who you are and how you write. AI Companion uses it every time, alongside whatever Tone Preset you have set for the app you are in. * Diction now figures out what you want from where your cursor is. Cursor in empty space, it dictates. Cursor inside a sentence, it inserts. Text selected, it edits or replaces. No more switching modes. * New "After dictation" mic timeout releases the mic the moment your transcription comes back. Plus 10 and 30 second steps for short bursts. If you use Bluetooth headphones, music and podcasts no longer drop into lower-quality voice-call audio while you are holding the mic. * Long dictations come back complete. Long messages, long notes, even full meetings work end to end without truncation. * AI Companion is tuned to sound more human. Less of the em-dash-everywhere, faintly corporate cadence that gives away machine-cleaned text. * Your words come through as you said them, including profanity. No automatic censoring. * Redesigned insights dashboard with a daily time-saved card and a words-per-minute card showing how much faster you are than typing. * Double-tap space now inserts a period and a space, matching the standard iOS keyboard convention. * Smoother onboarding with steadier layout when the keyboard opens, plus a small pulse on the active step. ## Diction 4.0 *April 2026* * Speak to Edit. Select any text, say what you want changed, and it's done. Works for simple replacements and editing instructions like "translate to Czech" or "make this shorter." * Your custom words now improve transcription accuracy directly. Names and jargon get recognized correctly even without AI Companion. * Dictate for as long as you need. Improved reliability for long recordings, no more cut-off transcripts. * Profile lets you tell Diction who you are and how you write, so AI Companion matches your style. * New guided onboarding walks you through setup step by step instead of throwing dialogs at you on first launch. * Improved on-device model setup. Smoother download, faster preparation, automatically ready when done. * The mic no longer activates when you open the app manually. Orange dot only when you're actually dictating. * Improved AI Companion accuracy across apps. * Various UI polish across the keyboard, history, tones, and settings. ## Diction 3.0 *March 25, 2026* * AI Companion now understands where you are in your document. Dictate into the middle of a sentence and it inserts correctly. Select text and tell Diction what to do with it, and it rewrites the selection in place. * A small pulse now lights up in the action bar when Diction hears your voice. You always know exactly when it is listening. * Added a dominant hand setting. If you prefer left-handed use, flip the keyboard layout so the controls are on your side. * Redesigned History with a tabbed view separating recent and all transcriptions. Search works across all of them, and tapping any entry copies it instantly. * Carefully revisited what happens when a transcription fails. We now save your audio automatically and show a retry button on the keyboard so you never have to say it twice. * Added a dedicated Keyboard Preferences screen. Easier to find keyboard settings, and auto-detect language is now on by default. * Added a clear explanation screen for when Full Access is missing. No more silent failures if the keyboard is not fully set up. * Fixed capitalization and spacing when dictating into the middle of existing text, and a rare issue where cloud transcriptions could fail silently when multiple keyboard instances were active. ## Diction 2.0 *March 15, 2026* * AI Companion is now available for cloud mode. After transcription, Diction can optionally clean up your text. It removes filler words, fixes grammar, and polishes the result. Only the transcript is sent for cleanup, never the audio. Off by default, toggle it in Settings. * Added a setup guide that walks you through keyboard installation and permissions before your first dictation. No more guessing why things are not working. * Large model downloads now wait for WiFi by default. No surprise data bills from downloading on mobile. * The cloud subscription is now Diction One, with a redesigned offer screen that makes pricing and what is included much clearer. * Improved dictation reliability. Fixed the tap-to-reconnect loop, globe key skipping past iOS keyboards, and stale heartbeat issues. * On-device models now pre-warm after download so your first dictation is fast. * When something goes wrong, you now see a clear explanation screen instead of a silent failure. * Added a support screen with troubleshooting steps and a way to reach us directly. * Various UI polish across the keyboard and settings. ## Diction 1.0 *March 11, 2026* The first public release. Everything that makes Diction what it is: * Dictation-only keyboard for iPhone. Tap the mic, speak, and text appears wherever your cursor is in any app. No QWERTY, no distractions. * Three transcription modes out of the box: on-device for complete offline use, self-hosted to point at your own server, and Diction cloud. * On-device models in three tiers. The standard model downloads automatically on first launch. Larger models are available for better accuracy. * Self-hosted mode works with any server running the Whisper API format. One Docker command to get started. * 99 languages with automatic detection. Speak in your language and Diction figures it out. * No word limits, no daily caps, no session timeouts. Dictate as much as you want. * Cloud transcriptions are encrypted before they leave the server. Your audio is processed and immediately discarded. * The Diction app contains no analytics and no tracking code. * Configurable idle timeout for hands-free dictation. --- --- url: /self-hosted.md description: >- Run your own speech-to-text server and connect Diction to it. Audio stays on your network. Free, unlimited, open-source. Three setup paths including a faster engine for European languages --- # Self-Hosted Transcription Your server, your models, your rules. Run a Whisper server on your own hardware, paste its URL into the Diction app, and your audio never leaves your network. Good for: regulated industries where audio cannot go to the cloud, people who already run servers at home, anyone who wants a specific model for a specific language or domain, and folks who refuse to hand their voice to someone else's infrastructure. ## How it works Diction speaks the OpenAI transcription API directly. If your server accepts `POST /v1/audio/transcriptions`, Diction can talk to it. That's the whole contract. You have three ways to run it. ### The simple way: whisper only One container, no extras. Start any OpenAI-compatible Whisper server, point the app at its address. ```bash git clone https://github.com/DictionLabs/Diction.git cd diction docker compose --profile small up -d ``` Pick a profile that matches the engine you want (`small`, `medium`, `large`, or `parakeet`). The compose file starts our gateway plus your chosen speech engine. If you want the absolute minimum and don't mind a short pause after you stop speaking, run just the Whisper container and skip the gateway entirely. Details in the [setup guide](/features/self-hosting-setup). ### The fast way: whisper plus the Diction gateway Run our open-source gateway in front of whisper. It adds a WebSocket layer, so the app can stream your audio live while you're still talking. By the time you tap stop, the transcript is already coming back. The longer the dictation, the bigger the gap. Short phrases barely change. Same compose file, same profile command, same URL paste into the app. ### The alternative: a faster engine for European languages Whisper supports 99 languages, but if you mostly dictate in a European language there's a faster option. NVIDIA's speech engine is more accurate, roughly 10x faster, and uses less RAM. It supports 25 European languages. The setup guide covers both engines. Full walkthrough: [Self-Hosting Setup Guide](/features/self-hosting-setup). Already running your own Whisper server? [Use Your Own Model](/features/custom-model). ## What you get * **Audio stays on your network.** From your phone to your server and back. No third party in the middle. * **Free, unlimited, no restrictions.** No Diction subscription needed. No word limits. No daily caps. No trial that expires. * **Works with any Whisper-compatible server.** The app speaks the OpenAI transcription API directly. Use our default stack, use someone else's, roll your own. * **AI parity.** Add a BYO LLM (`LLM_BASE_URL` + `LLM_MODEL`) and set `TEXT_ROUTES_OPEN=true`. Voice editing and suggestions work the same as on Diction One. Weak local models may not follow instructions well -- 7B or larger recommended. * **Optional streaming.** Run our gateway in front of whisper and the app streams audio as you speak. Longer dictations are noticeably faster. * **On-device fallback.** If your server is unreachable, Diction automatically retries using a local model on your iPhone. Your dictation is never lost to a network issue. * **Run it anywhere.** Home server, NAS, Raspberry Pi for tiny models, cloud VM, behind a reverse proxy, over a VPN. If Docker runs there, Diction connects to it. * **Pick your own model.** Run whatever speech model fits your use case. Your language, your accuracy requirements, your hardware. * **Open-source gateway.** The gateway infrastructure is fully open source on GitHub. Inspect it, modify it, contribute to it. ## Best for * You already run Docker at home and want transcription on your own hardware * You work in a regulated industry where audio cannot leave your network * You want a specific model for a specific language or domain * You refuse to send voice data to someone else's cloud * You already have a Whisper server running and just want an iOS keyboard that talks to it --- --- url: /features/self-hosting-setup.md description: >- Run your own speech-to-text server and connect Diction to it. GPU-first setup with the Diction gateway, plus CPU-only Whisper alternatives --- # Self-Hosting Setup Guide Run your own speech-to-text server, point the Diction app at it, start dictating. Your audio never touches our infrastructure. Diction speaks the OpenAI transcription API (`POST /v1/audio/transcriptions`). Any server that implements it works. Below are three ways to set it up. If you have an NVIDIA GPU around, which most people running a self-hosted gateway do, start with Path 1. ## Path 1: NVIDIA GPU (recommended) [Parakeet](https://hub.docker.com/r/dictionlabs/parakeet) transcribes a 5-second clip in well under a second on a consumer GPU. Models are baked into the image, so there's no download on first start. Covers 25 languages: English, Bulgarian, Croatian, Czech, Danish, Dutch, Estonian, Finnish, French, German, Greek, Hungarian, Italian, Latvian, Lithuanian, Maltese, Polish, Portuguese, Romanian, Slovak, Slovenian, Spanish, Swedish, Russian, and Ukrainian. Install the [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) on the host first. ```yaml # docker-compose.yml services: parakeet: image: dictionlabs/parakeet:latest-int8 deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu] gateway: image: dictionlabs/gateway:latest ports: - "8080:8080" environment: DEFAULT_MODEL: parakeet-v3 depends_on: - parakeet ``` ```bash docker compose up -d ``` Paste `http://your-server:8080` into the Diction app's **Self-Hosted** tab. A green dot confirms the endpoint is reachable. Start dictating. Need a non-European language? Use Path 2 below instead. ## Path 2: Whisper + the Diction gateway (no GPU, streaming) No GPU, or need a language Parakeet doesn't cover. Runs on any machine that can run Docker, CPU only. ```yaml # docker-compose.yml services: gateway: image: dictionlabs/gateway:latest ports: - "8080:8080" environment: DEFAULT_MODEL: small whisper-small: image: dictionlabs/whisper-server:latest-cpu volumes: - whisper-models:/home/ubuntu/.cache/huggingface/hub volumes: whisper-models: ``` ```bash docker compose up -d ``` Paste `http://your-server:8080` into the Diction app's **Self-Hosted** tab. Slower than Path 1, but works everywhere. The Diction gateway is fully open source. It runs as a pure proxy and streaming layer. It does not talk to our servers, does not require a subscription, and does not send any telemetry. ## Path 3: Whisper only, no gateway (simplest, limited) The absolute minimum: one container, no gateway, no streaming. ```yaml # docker-compose.yml services: whisper: image: dictionlabs/whisper-server:latest-cpu ports: - "8000:8000" volumes: - whisper-models:/home/ubuntu/.cache/huggingface/hub volumes: whisper-models: ``` ```bash docker compose up -d ``` Open the Diction app, switch to **Self-Hosted**, paste `http://your-server:8000`. ::: warning Path 3 does not work with this image today The app talks to your Whisper server directly here and does not name a model in the request, so the server has to already know which one to load. Speaches, the engine in `dictionlabs/whisper-server`, wants the model per request and answers `422 Field required` instead. Every dictation fails, quietly: the app falls back to on-device and still inserts text. Use **Path 1** or **Path 2** above instead. The gateway names the model for you. Path 3 still works against a server that pins its own model, such as an older `faster-whisper-server` image with `WHISPER__MODEL` set. ::: **The trade-off even when it works:** no streaming. The app waits until you stop speaking, uploads the whole recording to your server, and waits for Whisper to transcribe it. On short phrases that's fine. On longer dictations you'll see a visible pause after you tap stop. ## Choosing a model Paths 2 and 3 support any Whisper model. Pick based on your hardware and what you're dictating. | Model ID | Params | RAM | Notes | |----------|--------|-----|-------| | `DictionLabs/whisper-small-ct2` | 244M | ~850 MB | Recommended starting point. Fast on CPU, fine for most dictations. | | `DictionLabs/whisper-medium-ct2` | 769M | ~2.1 GB | Better with accents and background noise. Slow on CPU, good on GPU. | | `DictionLabs/whisper-large-v3-turbo-ct2` | 809M | ~2.3 GB | Highest accuracy. Manageable on modern CPUs, near-instant on GPU. | These are our own CTranslate2 builds of OpenAI's Whisper checkpoints, published at [huggingface.co/DictionLabs](https://huggingface.co/DictionLabs). Any other CTranslate2 Whisper model works too. For Path 2 (gateway), update `DEFAULT_MODEL` on the gateway service and make sure the Whisper service is named to match: `whisper-small`, `whisper-medium`, or `whisper-large-turbo`. The gateway injects the correct model ID into each request automatically. Path 1 (Parakeet) uses a different engine with models baked into the image. No model selection needed. The full compose file in the [GitHub repository](https://github.com/DictionLabs/Diction) puts each engine behind a profile. Pick one and start: ```bash docker compose --profile small up -d # Whisper small docker compose --profile medium up -d # Whisper medium docker compose --profile large up -d # Whisper large-v3-turbo docker compose --profile parakeet up -d # NVIDIA engine (European languages) ``` Set `DEFAULT_MODEL` on the gateway to match your chosen profile. The three Whisper profiles download their model on first start, so the first `up` takes a few minutes longer while a few hundred megabytes (or 1.6 GB for large) arrives. The compose file handles this with a one-shot pull service per profile. The model lands in a named volume, so it survives restarts and later `up` commands skip straight past it. The Parakeet profile has nothing to download. ## Connecting the app The fast way: scan the QR code. Print it any time with: ```bash docker compose exec gateway gateway auth ``` That works whether the gateway just started or has been running for weeks. If you'd rather catch it at boot, `docker compose logs gateway` shows the same code, but only if you look before the logs scroll past it. Open the Diction app, go to **Self-Hosted**, tap **Scan to pair**, and point the camera at your terminal. The URL and key land in the app in one step. Nothing to type, nothing to copy. Set `PUBLIC_URL` on the gateway (for example `https://your-host:8080`) so the QR carries the address your phone should use; without it the QR carries only the key and the app asks for the URL. Requires Diction 13 or later and a current gateway image. On older versions, or if you'd rather type: 1. Open the Diction app 2. Switch to the **Self-Hosted** tab 3. Paste your server URL into **Gateway URL**: ``` http://192.168.1.100:8080 ``` Replace the address with your server's actual IP. A green dot next to the endpoint confirms it's reachable. Tap the mic and start dictating. ## No public IP? You don't need to open ports on your router. Several free options connect your phone to a home server from anywhere: * **[Cloudflare Tunnel](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/)**. Free, outbound-only connection. No port forwarding. * **[Tailscale](https://tailscale.com/)**. Free WireGuard mesh VPN. Install on server and phone, connect from anywhere. * **[ngrok](https://ngrok.com/)**. Instant public URL. Great for quick testing. ## Locking your gateway down You put your gateway on a tunnel so you can dictate from anywhere. That means anyone who finds the URL can transcribe on your hardware. The gateway fixes this itself: it generates its own key on first start, prints it inside the pairing QR, and accepts it as a `Bearer` token on every request. By default the key is advisory. Paired devices send it, but requests without it still pass, so upgrading the image never locks anyone out. Once your devices are paired, flip enforcement on: ```yaml gateway: environment: DICTION_GATEWAY_AUTH: required ``` From that moment, requests without a valid key get a 401. Keep the `gateway-data` volume from the compose file mounted at `/data`; that's where the key lives. Without it a fresh key is generated on every container recreate and your devices must re-scan. The key also rotates itself. A paired Diction app swaps in a fresh key on a regular schedule, old keys stay valid for a generous grace window so a phone that was off for a week catches up silently, and none of it needs you. If you'd rather manage the key by hand, set `DICTION_GATEWAY_KEY` to your own value; rotation turns off and the app treats it like any manual API key. ### Make a leaked key expire By default, a pairing key works forever once it's issued. That's fine for a home network, but if you ever tunnel your gateway to the internet, a key that leaked once (an old backup, a screenshot, a log you forwarded somewhere) stays valid indefinitely. Set an expiry and it doesn't: ```yaml gateway: environment: DICTION_TOKEN_TTL: 2160h # 90 days ``` Your paired app refreshes its key on its own well before that window closes, so nothing breaks for a device you're actually using. Turning this on for the first time invalidates every key issued before it, so every paired device needs one re-scan. Let a device sit unused past its key's expiry and it'll ask you to re-scan too. That's the point: an expired key just means "prove you still have physical access to the gateway." This only matters if you've also set `DICTION_GATEWAY_AUTH: required` above. Otherwise the gateway accepts requests without a key at all, so expiring the key protects nothing. Want to see it work without waiting three months? Set `DICTION_TOKEN_TTL: 2m` temporarily and watch your app silently refresh its key roughly every minute in the container logs. ## Optional: API key If your server sits behind its own auth (common with reverse proxies or hosted endpoints), enter the key in the **API Key** field in the app's Self-Hosted settings. It's sent as a `Bearer` token with every request. Keys you type by hand are yours: the app never rotates or changes them. ## Any Whisper endpoint works None of the paths lock you to our containers. The Diction app and the gateway both talk the standard OpenAI transcription API. Anything that accepts `POST /v1/audio/transcriptions` with a file upload and returns a JSON transcript works: * [Speaches](https://github.com/speaches-ai/speaches) (the engine behind `dictionlabs/whisper-server`) * [whisper.cpp](https://github.com/ggerganov/whisper.cpp) HTTP server * OpenAI's own Whisper API * Any future model that speaks the same protocol Point the **gateway** at them rather than the app. The gateway names the model on every request, which the OpenAI spec requires and strict servers enforce. The app on its own leaves that field out, so a server that does not pin its own model will reject it. Configure a third-party backend with `CUSTOM_BACKEND_URL` and `CUSTOM_BACKEND_MODEL`, described in [Use Your Own Model](/features/custom-model). Already running one? See [Use Your Own Model](/features/custom-model). ## Requirements * Any machine that runs Docker (home server, NAS, cloud VM, Raspberry Pi for tiny models). An NVIDIA GPU gets you Path 1; without one, Paths 2 and 3 run fine on CPU. * iPhone on the same network, or reachable via tunnel or VPN ## Full configuration The complete compose file with multiple model profiles, and all gateway environment variables, is in the [public GitHub repository](https://github.com/DictionLabs/Diction). ## AI features on self-hosted When you configure `LLM_BASE_URL` and `LLM_MODEL`, your gateway gets full AI parity with Diction One: * **Transcript cleanup** -- remove filler words, fix punctuation (existing, via `?enhance=true`) * **Edit by voice** -- dictate an instruction; the gateway applies it to your text * **Suggestions** -- tap a word and get 2-3 alternatives from the LLM Set `TEXT_ROUTES_OPEN=true` on the gateway to enable the edit and suggest routes. Results depend on model quality -- 7B or larger is recommended for editing. Smaller models often do not follow instructions reliably. --- --- url: /support.md description: >- Get help with Diction voice keyboard for iPhone. Setup guide, troubleshooting, and contact information. --- # Support ## Getting Started Setting up Diction takes under a minute: 1. **Open the Diction app** and grant microphone permission when prompted. 2. Go to **Settings > General > Keyboard > Keyboards > Add New Keyboard** and select **Diction**. 3. Tap **Diction** in the keyboard list and enable **Allow Full Access** (required for transcription). 4. Open any app with a text field, tap the **globe icon** to switch to Diction, and tap the mic. ::: tip The Diction app must be running in the background for the keyboard to work. Launch it once and it stays ready. After a period of inactivity, you may need to open the app again. ::: ## Troubleshooting ### Keyboard does not appear Make sure Diction is added in **Settings > General > Keyboard > Keyboards**. If it still does not appear, restart your iPhone. ### Microphone not working Open the Diction app and grant microphone permission. The keyboard extension cannot request mic access on its own. Permission must be granted through the main app first. ### "Open Diction to start" message The Diction app needs to be running in the background. Open the app, then switch back to your text field and try again. ### "Enable Full Access" message Go to **Settings > General > Keyboard > Keyboards > Diction** and enable **Allow Full Access**. iOS requires this for any keyboard that uses network access. ### On-device transcription not working Make sure you have downloaded a speech model in the Diction app. The Standard model downloads automatically on first launch. Check the On-Device section in the app to confirm. ### Transcription fails or times out Check your internet connection (not needed for on-device mode). If you are using a self-hosted server, verify your endpoint URL is correct and the server is reachable from your phone's network. ## Self-Hosting Diction works with any speech-to-text server that supports the standard transcription API format. For setup guides, Docker Compose files, and documentation, see the [GitHub repository](https://github.com/DictionLabs/Diction). ## Managing Your Subscription To manage or cancel your Diction One subscription: **Settings > Apple ID > Subscriptions** on your iPhone. You can cancel at any time. Your subscription remains active until the end of the current billing period. ## Questions On-device and self-hosted modes are completely free. No word limits, no daily caps. Diction One unlocks cloud transcription with the highest accuracy, plus Writing Tools with per-app tones and a custom dictionary. Free trial included. More accurate speech models, no session time limits, no word caps. Writing Tools clean up filler words and grammar automatically. Context-aware editing reads the text around your cursor so dictating mid-sentence produces correct capitalization and punctuation. Set a tone per app, add your own words for names and jargon, and search your full dictation history. Apple offers none of that. Yes. Diction reads the text around your cursor. Dictate into the middle of a sentence and it inserts with correct capitalization and punctuation. Select text and speak to replace it. Rewrite a sentence, fix a typo, or add to a paragraph, all without touching the screen. Yes. On-device mode works without internet once the model is downloaded. Cloud and self-hosted modes require network access. 99 languages. On-device handles most languages well. Cloud and self-hosted use larger models for even better accuracy across all supported languages. Never. On-device mode processes audio in memory and discards it immediately. Self-hosted mode sends audio only to your server. Diction One cloud processes and discards. No recordings retained, no model training. After transcription, Diction can optionally clean up your text. It removes filler words, fixes grammar, and polishes the result. Set a tone per app (Professional for email, Casual for chat) and add your own words to a custom dictionary so names and jargon come through right. Only the text is sent to the AI, never the audio. Open the app, grant microphone permission, add Diction as a keyboard in iOS Settings, enable Full Access, and start dictating. Under a minute from download to first transcription. [Detailed steps here.](/support) You run a speech-to-text server on your own hardware. Diction connects to it over your network. Your audio never touches any third-party service. The server ships as a Docker image. One command to start. iOS requires Full Access for any keyboard extension that uses the network. Diction needs it to send audio to your server or Diction One for transcription. Diction has no QWERTY keys to log, does not read your clipboard, and does not access contacts or any other personal data. ## Contact Need help? Reach out: * **Email:** * **GitHub:** [Open an issue](https://github.com/DictionLabs/Diction/issues) * **Reddit:** [r/dictionapp](https://www.reddit.com/r/dictionapp) * **X:** [@diction\_one](https://x.com/diction_one) --- --- url: /terms.md description: >- Diction terms of service. Voice keyboard for iPhone with on-device, self-hosted, and cloud transcription modes. --- # Terms of Service *Last updated: March 2026* Diction is a speech-to-text keyboard for iOS. By installing or using Diction, you agree to these terms. If you do not agree, do not use the app. ## The Service Diction transcribes speech to text. Three modes are available: * **On-device**: transcription runs locally on your iPhone. Free, unlimited, no account required. * **Self-hosted**: you connect Diction to your own speech-to-text server. Free, unlimited, no account required. * **Diction One**: our hosted cloud transcription service. Requires a paid subscription. The app and cloud service are provided "as is" without warranty. We may update, modify, or discontinue features at any time. ## Free Trial Every new Diction install includes a **14-day free trial** of all Pro features. The trial starts automatically. No account, no sign-up, and no payment method required. During the trial you get full access to Diction One cloud transcription, Writing Tools, and premium on-device models. When the trial ends, Diction continues working on the Free tier: on-device transcription with basic models and self-hosted mode. Both are unlimited with no restrictions. If you want to keep using Pro features, you can subscribe to Diction One at any time. ## Diction One Subscription Diction One is an optional paid subscription at **$5.99 per month** (USD), billed through Apple's App Store. * Payment is charged to your Apple ID account at confirmation of purchase. * Your subscription **renews automatically** unless cancelled at least 24 hours before the end of the current billing period. * You can manage or cancel your subscription at any time in **Settings > Apple ID > Subscriptions** on your iPhone. * Prices may vary by region due to Apple's local pricing. Refunds are handled by Apple according to their [standard terms](https://www.apple.com/legal/internet-services/itunes/). ## Free Modes On-device and self-hosted modes are free with **no word limits, no daily caps, and no restrictions**. If you self-host, you are responsible for your own server infrastructure and any costs associated with running it. ## Acceptable Use * Use Diction in compliance with all applicable laws. * Do not reverse-engineer, decompile, or redistribute the app. * Do not abuse, overload, or interfere with Diction One or any related infrastructure. * Do not use the service for any unlawful, harmful, or fraudulent purpose. ## Intellectual Property Diction, its name, logo, and cloud infrastructure are the property of their respective owner. The self-hosted server infrastructure is open source. See the [GitHub repository](https://github.com/DictionLabs/Diction) for licence details. The iOS app is proprietary and distributed exclusively through the App Store. Your transcriptions belong to you. ## Limitation of Liability Diction is provided "as is" without warranties of any kind, express or implied. To the fullest extent permitted by law, we are not liable for any damages arising from the use of the app or service, including transcription errors, service interruptions, data loss, or inaccurate output. ## Termination You may stop using Diction at any time by uninstalling the app. We reserve the right to suspend or terminate access to Diction One if you violate these terms. ## Changes to These Terms We may update these terms. The revised version will be posted at this URL with an updated date. Continued use of Diction after changes constitutes acceptance of the updated terms. ## Governing Law These terms are governed by the laws of England and Wales. Any disputes arising from these terms will be subject to the exclusive jurisdiction of the courts of England and Wales. ## Provider Diction is provided by **Diction Labs**, a trading name of Ondrej Machala. Contact: . ## Contact Questions about these terms? Email . --- --- url: /features/tone-presets.md description: >- Set a writing style per app. Professional for email, casual for messages. Diction remembers which tone to use where and applies it automatically --- # Tones You write differently depending on where you are typing. An email to your boss sounds different from a message to a friend. A Slack reply to a colleague has a different register than a note to yourself. Tones let you set a writing style per app. Diction remembers which tone goes with which app and applies it every time, without you changing anything. ## How It Works Open the Diction app, go to Writing Tools, then Tones, and assign a tone to any app on your phone. When you dictate into that app, Writing Tools shape the output to match the tone you picked. Four built-in tones: * **Professional** . Formal structure, complete sentences, no slang. Good for email clients, document editors, and work chat. * **Casual** . Relaxed, conversational, contractions. Good for messaging apps and social media. * **Friendly** . Warm and approachable. Slightly more polished than casual but not stiff. * **Clean** . Minimal cleanup only. Removes filler words and fixes punctuation, but keeps your natural voice. If none of those fit, write your own custom instruction. Describe the style you want in plain language and Diction follows it. ## Same Dictation, Different Results You say: *"hey so the project is done we hit all the deadlines and the client seems pretty happy with everything"* **Professional** (set for Mail): > The project is complete. We met all deadlines, and the client is satisfied with the results. **Casual** (set for Messages): > Project's done, hit all the deadlines. Client seems happy with everything. **Friendly** (set for Slack): > Good news. The project is done, we hit all the deadlines, and the client seems really happy with everything. Same words in, different text out. The app you are typing in determines the tone. ## Set It Once The point of per-app tones is that you set them once and never think about it again. Assign Professional to Mail, Casual to Messages, Friendly to Slack. Every dictation in those apps gets the right tone automatically. No toggling. No remembering which mode you are in. Open the app, tap the mic, speak. The output matches the context. ## Custom Tones The four built-in tones cover most situations, but you might need something specific. A custom tone is a plain-language instruction that tells Writing Tools exactly how to shape the output. Examples: * *"Write like a brief executive summary. No greeting, no filler. Lead with the conclusion."* * *"Keep the original wording as much as possible. Only fix grammar and add punctuation."* * *"Use British English spelling and formal academic tone."* Custom tones work exactly like the built-in ones. Assign them per app, and they apply automatically. ## Requirements Tones require [Writing Tools](/features/writing-tools) to be active. That means a Diction One subscription, and it works across all transcription modes. Without Writing Tools, Diction still transcribes accurately, but the output is raw text without tone shaping. --- --- url: /features/history.md description: >- Every dictation is saved and searchable. Browse recent transcriptions, search the full archive, and tap any entry to see the complete text --- # Transcription History Every dictation you make is saved automatically. No clipboard juggling, no trying to remember what you said five minutes ago. It is all there. ## Two Tabs The history screen has two views: **Recent.** Your latest dictations, right at the top. Tap any entry to see the full text. This is the view you will use most. You dictated something, you need it again, it is right there. **Archive.** The full history of everything you have dictated. Scroll back as far as you need. Same tap-to-open behavior. ## Search Type a word or phrase and Diction searches across all your dictations. Matching text is highlighted in the results so you can scan quickly and find exactly what you are looking for. You dictated a phone number three days ago and forgot to save it? Search for the area code. You mentioned a restaurant name in a message last week? Search for it. The history has it. ## Transcript Detail View Tap any entry in the list and it opens a full detail view with the complete text. No more truncated previews or guessing what the rest says. The full transcription is right there, easy to read and copy. ## Privacy History is stored locally on your device. It never leaves your phone and is not synced anywhere. If you delete a dictation from history, it is gone. --- --- url: /features/custom-model.md description: >- Already running a speech-to-text server? Connect Diction to it directly, or wrap it with the Diction gateway for streaming. Works with any OpenAI-compatible endpoint. --- # Use Your Own Whisper Server Say you already have a speech-to-text server on your homelab. A beefy GPU box, a model fine-tuned for your language, something domain-specific, maybe just a newer release than the one in our default stack. You found Diction and want to point it at your existing setup without running more containers than you have to. Good news: Diction speaks the standard OpenAI transcription API natively. It talks to your server directly. No gateway required. The only question is whether you want streaming. ## Two paths ### Path 1: point Diction straight at your server If your server implements `POST /v1/audio/transcriptions` with a multipart file upload (faster-whisper-server, whisper.cpp HTTP server, LocalAI in whisper mode, and most others do), paste its URL into Diction and you're done. 1. Open the Diction app 2. Switch to the **Self-Hosted** tab 3. Paste your server URL, for example `http://192.168.1.50:8000` 4. Start dictating No extra containers, no compose file, no proxy. **The trade-off:** no streaming. The app uploads your recording to your server after you stop speaking, your server transcribes, the text comes back. On short dictations you barely notice. On longer ones, there's a visible pause between the moment you tap stop and the text arriving. Whether that matters depends on how long your typical dictation is. If you're on a GPU and transcription is already fast, Path 1 is probably all you need. ### Path 2: wrap it with the Diction gateway (streaming) Run our open-source gateway in front of your existing server. It exposes a WebSocket endpoint the app uses to stream audio up as you speak. By the time you stop talking, the transcript is mostly ready. You run just the gateway, pointed at your existing backend: ```yaml services: gateway: image: dictionlabs/gateway:latest ports: - "8080:8080" environment: CUSTOM_BACKEND_URL: http://192.168.1.50:8000 CUSTOM_BACKEND_MODEL: your-model-name ``` ```bash docker compose up -d ``` Paste the gateway's address into Diction's **Self-Hosted** tab: ``` http://192.168.1.50:8080 ``` The gateway forwards to your existing server and adds the streaming layer on top. Short phrases feel about the same as Path 1. Longer dictations are noticeably faster. The gateway is open source. It runs as a pure proxy. No subscription, no account, no telemetry. ## Gateway options These only apply to Path 2. ### Model name ```yaml environment: CUSTOM_BACKEND_URL: http://my-server:8000 CUSTOM_BACKEND_MODEL: your-model-name-here ``` The gateway injects `CUSTOM_BACKEND_MODEL` as the `model` form field on every forwarded request. If your server runs a single model and doesn't care which name it receives, omit `CUSTOM_BACKEND_MODEL` and the gateway will leave the field untouched. ### WAV-only backend Some models only accept WAV audio. The gateway converts for you via ffmpeg: ```yaml environment: CUSTOM_BACKEND_URL: http://my-model:5092 CUSTOM_BACKEND_NEEDS_WAV: "true" ``` Audio arrives as 16 kHz mono WAV. Your model gets what it expects. ### Backend behind an API key ```yaml environment: CUSTOM_BACKEND_URL: http://my-server:8000 CUSTOM_BACKEND_AUTH: "Bearer sk-your-key-here" ``` The gateway injects the `Authorization` header on every forwarded request. ### All options | Variable | Required | Description | |----------|----------|-------------| | `CUSTOM_BACKEND_URL` | Yes | Base URL of your server, e.g. `http://192.168.1.50:8000` | | `CUSTOM_BACKEND_MODEL` | No | Model name to send in the request. Omit if your server runs a single model and doesn't require the field. | | `CUSTOM_BACKEND_NEEDS_WAV` | No | Set to `"true"` if your server only accepts WAV audio. Gateway converts via ffmpeg. | | `CUSTOM_BACKEND_AUTH` | No | Full `Authorization` header value, e.g. `Bearer sk-xxx`. | ## Which path should I pick? * **You want the minimum fuss and your hardware is fast:** Path 1. Paste URL, done. * **You care about perceived latency on longer dictations:** Path 2. One extra container, streaming on top. * **You're on a GPU and transcription already takes under a second:** Path 1 is fine. Streaming barely helps when there's nothing to hide. * **You're on CPU with a larger model:** Path 2 makes a real difference. Both paths keep your audio on your network. Neither sends anything to Diction's servers. ## Requirements * Your existing speech server reachable from the iPhone (Path 1) or from the gateway (Path 2) * Docker on any machine, for Path 2 * For remote access without opening router ports, see [Cloudflare Tunnel, Tailscale, or ngrok](/features/self-hosting-setup#no-public-ip) --- --- url: /features/writing-tools.md description: >- Writing Tools polish your speech into clean text, and understand voice commands to rewrite, translate, or edit. Available with Diction One. --- # Writing Tools Writing Tools are more than cleanup. They polish your natural speech into clean text, and they understand voice commands. Say "translate this to French", "make it shorter", or "rewrite as a bullet list" and it just happens. Think of it as a writing companion that listens, tidies up, and follows instructions. When you speak, you don't speak in perfect sentences. You say "um", pause mid-thought, restart, skip punctuation, and trail off. That is normal. Writing Tools take the raw transcription and clean it up before the text is inserted. And when you need more than cleanup, just tell them what to do. The result: you dictate a quick thought and get a polished sentence. Dictate a paragraph and get something you would be comfortable sending as an email. Or select existing text, say what you want changed, and it is rewritten on the spot. ## Before and After **What you say:** > *"So um I was thinking we could like maybe move the meeting to Thursday instead of um Wednesday because I have a conflict"* **What gets inserted:** > I was thinking we could move the meeting to Thursday instead of Wednesday because I have a conflict. *** **What you say:** > *"Hey can you um send me the the report when you get a chance I need it for the uh the presentation tomorrow morning thanks"* **What gets inserted:** > Hey, can you send me the report when you get a chance? I need it for the presentation tomorrow morning. Thanks. *** **What you say:** > *"Note to self buy milk eggs bread and also pick up the dry cleaning before five"* **What gets inserted:** > Note to self: buy milk, eggs, bread, and also pick up the dry cleaning before five. ## The Tools Each one is a separate switch in the app, so you can keep the parts you want and turn off the rest. * **Clean up.** Removes filler words ("um", "uh", "like", "you know"), drops accidental repetitions ("the the"), adds punctuation and capitalisation, and fixes grammar. * **Add structure.** Reads what you said and lays it out as paragraphs or a list when that is what it actually is. * **Edit by voice.** Long-press the bar and say how to change your text. "Make it shorter." "Translate to Spanish." "Turn this into bullet points." * **Suggestions.** Select a word or phrase and get instant corrections or better-fitting alternatives. * **Note summaries.** Every note you save gets a short title and summary, so your history is searchable at a glance. ## What They Will Not Do * They do not change the meaning of your words * They do not add content you did not say * They do not translate between languages unless you ask * They do not store or learn from your transcriptions * They do not sanitise your language. Profanity comes through as you said it. ## Sounds Human, Not AI AI cleanup tools leave fingerprints. The em-dashes everywhere. The faintly formal vocabulary. The cadence that doesn't quite sound like a person wrote it. Writing Tools are tuned against that. Casual text stays casual. Professional text reads like a careful human, not a corporate template. The output should read like you, not like a model wrote it for you. ## Context-Aware Writing Tools are not running in isolation. They see the text around your cursor and anything you have selected. This means: * Inserted text matches the capitalisation of its position in the sentence * Punctuation adapts to context, so no full stop if you are mid-sentence * Tone and formality match what you have already written * List formatting is continued when you are adding to a list Your recent dictations count too. If you used a specific term two dictations ago, that context carries forward. [Read more about context-aware editing.](/features/context-aware) ## Writing Style Tones shape style per app. Writing Style shapes everything underneath them. In the Diction app, open Writing Style and describe what your work is about and how you write. Software engineer who uses British English. Sales lead who talks to enterprise customers. Doctor who dictates patient notes. A few sentences are plenty. Writing Tools read it on every cleanup. Brand names and jargon come through. Domain language stays in the right register. Your spellings match what you actually use. The same raw dictation produces different results for different people, because their Writing Style is different. Writing Style and Tones stack. Writing Style is the baseline that follows you everywhere. A tone is the local style for the app you are in right now. Set "British English, technical writing" as your Writing Style, then a Professional tone for Mail and a Casual tone for Messages, and your dictations come out as British technical email or British casual messages without you doing anything. Write it once and it applies everywhere Writing Tools run. ## Tones Set a writing style per app. Professional for email, Casual for messages, or write your own instruction. Diction remembers which tone goes with which app and applies it automatically. [Read more about Tones.](/features/tone-presets) ## My Words Add names, jargon, and product terms that speech models keep getting wrong. Diction uses your custom words to improve both raw transcription and Writing Tools accuracy. [Read more about My Words.](/features/my-words) ## Where the Work Happens One picker in the app decides this, and it is the first thing on the Writing Tools screen. * **Diction Cloud** gives you the full set. Your text goes to a Diction server, the tools run there, and the polished version comes back encrypted. * **On device** keeps everything on your iPhone. Nothing you say is sent anywhere. Today this covers Clean up only, and it needs Apple Intelligence. * **Off** writes down exactly what you said, with no model in between. If you run [your own server](/self-hosted), the tools run there instead, on hardware you control. Writing Tools are on by default for Diction One subscribers. When they are active it is the transcription text that gets processed, never the original audio. Audio is discarded immediately after transcription either way. ## Best For * Emails and messages where you want polished output without editing * Long-form dictation where filler words would clutter the text * Professional contexts where grammar and punctuation matter * Quick notes where you want clean text without going back to fix it