Skip to main content

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.

Full Access is required

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.

  1. You tap Start on the keyboard toolbar.
  2. 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.
  3. 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.
  4. 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.

Smart spacing

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 app was force-quit

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 controlWhat it does
Start / Done (mic)Begins the voice round-trip. Its label changes with the session state (see below).
WorkspacePicks the workspace whose tone, vocabulary, and refinement to apply to your dictation. On iOS you choose this manually (see the note below).
Language switcherCycles through your enabled keyboard languages. This also sets the dictation language.
Settings / emojiOpens 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:

StateButton showsWhat's happening
Idle / session activeStartReady. Tap to begin dictation.
CapturingDone (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.
Workspaces are chosen by hand on iOS

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:

FeatureHow to use it
QWERTY + number/symbol padsTap 123 to reach numbers and symbols. In numeric fields, InkSpoke shows the matching decimal or phone-number pad.
Per-key previewA small popup shows each character as you press its key, so you can see what you're about to type.
Long-press accentsLong-press a key to bring up its accented variants (for example é, è, ê, ë) and slide to the one you want.
Emoji pickerTap the emoji button in the toolbar to browse and insert emoji.
Trackpad cursorDrag your finger along the space bar to move the cursor precisely, character by character.
Word suggestionsA suggestion bar above the keys offers the likely next word or completion — tap one to insert it.
Tap forgivenessA "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, ItalianDirect QWERTY (passthrough) — you type the letters as-is.
VietnameseTelex composition — you type accent keys after a letter and InkSpoke composes the diacritics.
JapaneseRomaji → 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.

Cycle languages without leaving the field

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