N.N Logo Say Hello
iOS 16.0+ Custom Keyboard

Shell Keyboard

The terminal keyboard for iOS that never reads what you type.

A custom keyboard extension giving you esc, ctrl, alt, tab, arrows, and function keys directly on your iOS device. Use ssh, vim, and tmux on your phone without fighting the stock keyboard.

Shell Keyboard's terminal layer on iPhone, showing esc, tab, ctrl, alt, shift, arrow keys, home and end, and shell punctuation, below a text field where 'git status' has been typed.

Features

Terminal layer

esc top-left where vim expects it, ctrl, alt, tab, a full arrow cluster, home / end, pgup / pgdn, ins, del, and the twelve punctuation characters a shell actually needs — ~ / | \ < > [ ] { } ( ). All on one screen, no layer switching.

Function keys

Tap fn and the top row becomes F1–F12. Everything else stays exactly where it was, so nothing under your thumbs moves.

Modifiers that latch

Tap ctrl to arm it for the next key, or double-tap to lock it. Ctrl+C is two taps, deliberately — never one.

Arrow keys that match your app

Normal mode for shells that expect ^[[A. Application mode for full-screen apps (vim, tmux, less, htop). A third mode moves the text cursor instead, for ordinary text fields.

Return or Enter

Long-press Return to switch between carriage return (CR) and line feed (LF).

Letters and symbols without leaving

An abc layer for hostnames, paths and commit messages, and a symbols layer carrying every printable ASCII punctuation character exactly once.

Built-in reference

Searchable cheat sheet of every ANSI escape sequence the keyboard sends, with the hex bytes, inside the app.

Privacy by design

Never asks for Full Access. Shell Keyboard collects nothing and reads nothing. Read the privacy policy.

Gallery

The fn layer, where the top row has become F1 through F12 while every other row stays exactly where it was.

Tap fn. Only the top row changes.

The Arrow Keys settings panel offering Normal, Application, and Move the cursor, with an explanation of what each one sends.

Arrows that match the app you're in.

The abc layer, a QWERTY letter layout for typing hostnames, paths and commit messages without switching keyboards.

Letters, without leaving.

The symbols layer, carrying every printable ASCII punctuation character.

Every ASCII punctuation character, exactly once.

The Reference tab inside the app: a searchable list of keys with the exact escape sequences and hex bytes each one sends.

A searchable reference for every sequence it sends.

iPad

Shell Keyboard's terminal layer on iPad, showing esc, tab, ctrl, alt, shift, arrow keys, home and end, and shell punctuation, below a text field where 'git status' has been typed.

Everything a shell needs, on one screen.

The fn layer, where the top row has become F1 through F12 while every other row stays exactly where it was.

Tap fn. Only the top row changes.

The Arrow Keys settings panel offering Normal, Application, and Move the cursor, with an explanation of what each one sends.

Arrows that match the app you're in.

The abc layer, a QWERTY letter layout for typing hostnames, paths and commit messages without switching keyboards.

Letters, without leaving.

The symbols layer, carrying every printable ASCII punctuation character.

Every ASCII punctuation character, exactly once.

The Reference tab inside the app: a searchable list of keys with the exact escape sequences and hex bytes each one sends.

A searchable reference for every sequence it sends.

What it does NOT do

Please read this before buying:

  • Works in native terminal apps — Blink Shell, Termius, Prompt, a-Shell, iSH — and in ordinary text fields.
  • Does not work with a terminal or editor running inside a web browser (code-server, Jupyter, ttyd, Wetty). A web page listening for keydown events will see nothing — an iOS keyboard extension can only insert text. No third-party iOS keyboard can do this — it's an iOS limitation, not a missing feature.
  • In "move the cursor" mode, arrows move left and right only. Moving by a line would require reading the text around your cursor, which this keyboard deliberately never does.