vmux
AppsvmuxKeyboardExtension

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, 10, 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

RequirementMinimum
iPhoneiOS 17 or later
iPadiPadOS 17 or later
DiskAbout 1 MB
MemoryiOS limits keyboard extensions to roughly 60 MB. The whole bundle plus the swipe dictionary fits comfortably under that.
NetworkNone. Everything runs offline.
PermissionsNone 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

FeatureStatus
Full key layout, Esc, Tab, F-row, arrows, modifiersYes
Swipe typing with on-device dictionaryYes
Sticky one-shot modifiers (Ctrl, Alt, Shift, Cmd, Fn, CapsLock)Yes
Themes that follow the active vmux terminal themeYes
Spacebar trackpad mode (long-press, drag to move cursor)Yes
Voice / dictationNo — disabled in the current release
Cross-app text replacementNo
Network accessNo

Where to go next

The companion in-app keyboard for vmuxPhone is documented at Keyboard and input. The full app family is at all vmux apps.