vmuxKeyboardExtension
A system-wide iOS keyboard tuned for terminal work, with Esc, Tab, Ctrl, function row, arrows, and shell symbols.
What it is
vmuxKeyboardExtension is a third-party iOS keyboard. After you install it once, you can pick it from the globe key in any app on your iPhone or iPad — Mail, Slack, GitHub, Notes, an SSH client like Termius or Blink, or vmuxPhone itself — and the keyboard you get is the one a shell user actually wants. Esc, Tab, the full function row, arrow keys, brackets, pipe, tilde, slash, and grave are all primary keys. Modifier keys (Ctrl, Alt, Shift, Cmd) are sticky toggles. There is no autocorrect dictionary fighting with your commit messages, and there is no comma-on-spacebar trying to "help" you type code.
The system keyboard does not have any of those keys, and switching to a third-party keyboard is the only way to get them everywhere on iOS. If you find yourself jumping between apps that need a real terminal layout — for example, pasting commands into a chat thread, editing a ~/.zshrc snippet in Notes, or typing into the GitHub mobile app — this keyboard saves you the layer-switching tax every time.
What is on the keyboard
The full layout mirrors a 2021 MacBook Pro US ANSI keyboard:
- Function row. Esc plus F1 through F12 across the top. Always visible — no Fn-toggle dance.
- Number row. Backtick,
1–0, hyphen, equals, backspace. Shifted gives~,!@#$%^&*(),_,+. - QWERTY rows. Standard US ANSI letter layout, plus
[ ] \to the right of P, and; 'to the right of L. - Arrow cluster. Up arrow tucked into the right Shift row, plus Left / Down / Right on the bottom row.
- Bottom row. Globe (next keyboard), Fn, Ctrl, Option, Cmd, space, Cmd, Option, then the arrows.
Every special key sends the same byte sequence a hardware terminal expects (xterm-style CSI for arrows, F-keys, Page Up / Down; ESC for the Esc key; ^A–^Z for Ctrl + letter chords). When you tap Ctrl + C in a remote ssh session running through any iOS SSH client, the remote shell sees an interrupt the same way it would from your laptop.
See Layout and keys for the full reference.
Sticky modifiers
Ctrl, Alt, Shift, Cmd, and Fn are all sticky. Tap once to arm, the next regular keypress combines, and they automatically disarm — except CapsLock and Fn, which stay armed until you tap them again. This is the same one-shot pattern that the vmuxPhone accessory bar uses, so the muscle memory carries over.
Swipe to type
Swipe typing is on by default and uses an on-device dictionary of around twenty thousand English words. You glide your finger across letter keys, lift, and the top word appears. Up to four candidate words show up in place of the function row while you are inside a word — tap one to commit, or just keep typing. There is no network call. The dictionary lives in the keyboard bundle.
You can turn swipe typing on or off from the host app (open the vmux Keyboard app on the home screen, toggle Enable Swipe Typing). It also adapts to your usage — words you commit get a small frequency boost, words you immediately delete get penalized.
See Swipe gestures for the rest of the gesture set, including the spacebar trackpad mode.
Where it works
Anywhere iOS lets you bring up a keyboard. That means:
- Every app with a text field — Mail, Messages, Notes, Safari address bar, Slack, GitHub, Discord, you name it.
- Any third-party SSH or terminal client — Termius, Blink Shell, Prompt 3, ish, a-Shell, plus our own vmuxPhone.
- The system search and Spotlight.
- The lock screen widget search field.
It does not activate inside secure text fields (passwords) — iOS substitutes the system keyboard automatically for those.
System requirements
| Requirement | Minimum |
|---|---|
| iPhone | iOS 17 or later |
| iPad | iPadOS 17 or later |
| Disk | About 1 MB |
| Memory | iOS limits keyboard extensions to roughly 60 MB. The whole bundle plus the swipe dictionary fits comfortably under that. |
| Network | None. Everything runs offline. |
| Permissions | None for the basic layout. Allow Full Access is optional and only matters for the planned haptic feedback and clipboard helpers — see below. |
About "Allow Full Access"
iOS keeps third-party keyboards in a tight sandbox by default. They can read what you type into the text field, but they cannot read or write the system clipboard, send haptic feedback, or talk to the network. Granting Allow Full Access loosens that sandbox.
vmuxKeyboardExtension currently uses light haptic feedback on each keypress when you tap from inside a vmuxPhone session. The keypress haptic does not need Full Access — it runs under the host app's relaxed sandbox. The extension does not request the network, does not log keystrokes, and never sends anything off-device. The setup screen turns Full Access off by default and we recommend leaving it that way unless we explicitly tell you to enable it for a future feature.
See Installing the keyboard for the full setup walkthrough.
What is and is not in the box
| Feature | Status |
|---|---|
| Full key layout, Esc, Tab, F-row, arrows, modifiers | Yes |
| Swipe typing with on-device dictionary | Yes |
| Sticky one-shot modifiers (Ctrl, Alt, Shift, Cmd, Fn, CapsLock) | Yes |
| Themes that follow the active vmux terminal theme | Yes |
| Spacebar trackpad mode (long-press, drag to move cursor) | Yes |
| Voice / dictation | No — disabled in the current release |
| Cross-app text replacement | No |
| Network access | No |
Where to go next
- Installing the keyboard — first-time setup.
- Layout and keys — every key and what it sends.
- Swipe gestures — swipe typing, trackpad mode, candidate bar.
- Using with vmuxPhone — when to use this keyboard versus the embedded one.
- Troubleshooting — keyboard not appearing, keys not registering, layout lag.
The companion in-app keyboard for vmuxPhone is documented at Keyboard and input. The full app family is at all vmux apps.