The InkSpoke keyboard (iOS)
The InkSpoke keyboard is a full custom keyboard for iOS that lets you dictate — and type — into any app without leaving the field you're in. Swap to it in Messages, Mail, Notes, a browser, a chat app, anywhere, tap Start, and your spoken words land right at the cursor.
It's a complete keyboard, not just a mic button: a QWERTY layout with number and symbol pads, an emoji picker, long-press accents, a trackpad cursor, word suggestions, and multi-language typing all live here too.
The keyboard needs Allow Full Access turned on to work. Full Access is what powers the voice round-trip (and selected-text capture) — without it, tapping Start can't hand off to the main app. See Set up InkSpoke on iOS for the exact steps to add the keyboard and grant Full Access.
The voice round-trip
Here's the one thing that makes the InkSpoke keyboard different from every other dictation button: an iOS keyboard extension cannot record audio directly. iOS simply doesn't allow it. So instead of recording inside the keyboard, InkSpoke does a quick round-trip through the main app.
- You tap Start on the keyboard toolbar.
- The keyboard launches the InkSpoke app (via a private
inkspoke://link) to capture audio. A "switch back to continue — swipe along the bottom bar" overlay appears to guide you back to your original app once recording is underway. - The app transcribes your speech and writes the result to a shared storage area (the App Group) that both the app and the keyboard can read.
- The keyboard picks up the finished text and injects it at your cursor — but only if the transcription's session ID matches the one it started.
That last step matters. The session-ID check is what guarantees a dictation only lands in the field you actually started it from. A transcription you made straight from the main app won't get auto-injected into some random text box later.
When InkSpoke injects text right after an existing word, it adds a leading space for you, so your dictated phrase doesn't collide with what's already there.
If the InkSpoke app isn't running (or was force-quit), the keyboard detects the stale state and relaunches it for you. If a transcription can't be saved or uploaded, the keyboard flashes "Recording saved — open InkSpoke to retry" — open the main app to finish it. (The keyboard never re-uploads on its own, to stay within iOS's tight memory limits for extensions.)
The toolbar
Above the keys, a slim toolbar holds the controls you'll use most:
┌──────────────────────────────────────────────────┐
│ [ 🎙 Start ] [ Workspace ▾ ] [ EN ▾ ] [ 😊 ⚙ ]│ ← toolbar
├──────────────────────────────────────────────────┤
│ the this that │ ← word suggestions
├──────────────────────────────────────────────────────┤
│ q w e r t y u i o p │
│ a s d f g h j k l │
│ ⇧ z x c v b n m ⌫ │
│ 123 🌐 space · EN return │
└──────────────────────────────────────────────────────┘
| Toolbar control | What it does |
|---|---|
| Start / Done (mic) | Begins the voice round-trip. Its label changes with the session state (see below). |
| Workspace | Picks the workspace whose tone, vocabulary, and refinement to apply to your dictation. On iOS you choose this manually (see the note below). |
| Language switcher | Cycles through your enabled keyboard languages. This also sets the dictation language. |
| Settings / emoji | Opens the emoji picker and quick access to keyboard settings. |
The mic button's states
The Start / Done button reflects where you are in a dictation:
| State | Button shows | What's happening |
|---|---|---|
| Idle / session active | Start | Ready. Tap to begin dictation. |
| Capturing | Done (with a cancel option) | The main app is recording your voice. Tap Done to finish, or cancel to discard. |
| Processing | ⏳ hourglass (with a cancel option) | Your speech is being transcribed; the text is about to be injected. |
On the desktop app, InkSpoke can auto-match a workspace to whatever app you're in. On iOS this auto-matching is disabled — a recent iOS change removed the ability for a keyboard to see which app it's running inside. So you pick the workspace yourself from the toolbar, and your choice is remembered (it persists via the shared App Group) until you change it. Learn what workspaces do in What are workspaces.
Typing features
Even when you're not dictating, the InkSpoke keyboard is a capable everyday keyboard:
| Feature | How to use it |
|---|---|
| QWERTY + number/symbol pads | Tap 123 to reach numbers and symbols. In numeric fields, InkSpoke shows the matching decimal or phone-number pad. |
| Per-key preview | A small popup shows each character as you press its key, so you can see what you're about to type. |
| Long-press accents | Long-press a key to bring up its accented variants (for example é, è, ê, ë) and slide to the one you want. |
| Emoji picker | Tap the emoji button in the toolbar to browse and insert emoji. |
| Trackpad cursor | Drag your finger along the space bar to move the cursor precisely, character by character. |
| Word suggestions | A suggestion bar above the keys offers the likely next word or completion — tap one to insert it. |
| Tap forgiveness | A "nearest key" hit test quietly corrects near-misses, so a slightly-off tap still lands on the key you meant. |
Multi-language input
The InkSpoke keyboard can type in several languages, each with the right composition method. The space bar shows a badge for the active language and method (for example VI / Telex or JA / Romaji), and space/return labels and decimal separators are localized to match.
| Language(s) | How typing works |
|---|---|
| English, French, German, Spanish, Portuguese, Italian | Direct QWERTY (passthrough) — you type the letters as-is. |
| Vietnamese | Telex composition — you type accent keys after a letter and InkSpoke composes the diacritics. |
| Japanese | Romaji → Kana, with a Kanji candidate bar to pick the character you mean. |
| Korean, Chinese, Russian, Thai (and others in the catalog) | Fall back to the English QWERTY layout for typing, but still set the dictation (ASR) language so your voice is transcribed correctly. |
Selecting a keyboard language also sets the dictation language — unless you've overridden it manually — so switching to Vietnamese to type also tells InkSpoke to transcribe your voice as Vietnamese.
You manage your enabled languages in Settings → Keyboard → Keyboard Languages (also reachable from General → Keyboard Languages): reorder them (the first is your default), add languages from the catalog, or remove ones you don't use. Auto and English are always kept. The full catalog is Auto, English, Vietnamese, French, German, Spanish, Portuguese, Italian, Japanese, Korean, Chinese, Russian, and Thai.
Tap the language button in the toolbar to hop between your enabled languages mid-sentence — handy when you're mixing languages in one message.
Next steps
- Set up InkSpoke on iOS — add the keyboard and grant Full Access.
- Dictation and features on iOS — recording, refinement, history, and more.
- What are workspaces — how tone and vocabulary shape your dictation.
- Sync mobile with desktop — bring your desktop workspaces to your phone.