User manual

Getting started

Android

  1. Download the APK from GitHub releases.
  2. Install via ADB or by opening the APK on your phone:
$adb install keyjawn-full.apk
Success
  1. Go to Settings > System > Languages & input > On-screen keyboard.
  2. Enable KeyJawn.
  3. Set KeyJawn as your default keyboard.

On some devices, you can switch keyboards by long-pressing the spacebar in any text field, or by tapping the keyboard icon in the navigation bar.

KeyJawn Lite also has internal and closed Google Play test tracks. Google Play production is not active.

iOS beta

The iOS version includes a keyboard extension and a built-in remote SSH terminal.

As of August 28, 2026, the public beta invitation is not accepting new testers. A revised App Store submission has not been sent.

  1. After you install an authorized beta or release, open KeyJawn and tap + to add an SSH host (hostname, port, username).
  2. Set up the SSH public key in Settings > SSH keys, or select password authentication for the host.
  3. Tap the host. Review and save its fingerprint on the first connection. The remote terminal opens after the host is trusted and authentication succeeds.

This page does not claim that an App Store release is live.

iOS remote SSH boundary

KeyJawn does not run shell commands on your iPhone or iPad. The built-in terminal sends input through SSH to the remote server that you configure. That server runs the commands, and KeyJawn displays the returned network output.

KeyJawn does not include a local shell, local file browser, document picker, or file provider. It cannot browse files on your iPhone or iPad.

iOS keyboard and Full Access

  1. Open Settings > General > Keyboard > Keyboards.
  2. Tap Add new keyboard and choose KeyJawn Keyboard.
  3. Basic typing and built-in shortcuts work without Full Access.
  4. Turn on Full Access only if you want the keyboard extension to upload a copied image or read shared settings, user-created shortcuts, and clipboard history.

Full Access is optional. KeyJawn cannot grant it. The built-in remote SSH terminal in the main app does not need keyboard Full Access.

The extension inserts text through the field that has focus. Slash shortcuts insert plain text. Terminal sequences such as Esc or Ctrl+C depend on whether the receiving app forwards inserted control text to its terminal. The built-in SSH terminal sends terminal bytes directly.

iOS copied-image upload

  1. Copy one image in another app.
  2. Open the KeyJawn keyboard or built-in remote SSH terminal.
  3. Tap the SCP key to open Upload copied image.
  4. Select a remote SSH host that uses SSH key authentication. Password hosts remain available for terminal connections but do not appear in this upload panel.
  5. KeyJawn prepares the copied image in memory, writes it by SFTP to the configured remote directory, and inserts the remote path.

The copied-image upload feature does not request Photos or Files access on iOS. It cannot browse your photo library or local files, or list, read, or download remote files. The keyboard extension needs Full Access for this network operation. Both the app and extension require SSH key authentication for the selected upload host.

Android feature guide

The remaining sections describe the Android keyboard unless a section says otherwise.

Basic typing

KeyJawn has three layers you can switch between:

  • Lowercase -- the default layer when you open the keyboard.
  • Uppercase -- tap Shift for one capital letter, or double-tap for caps lock.
  • Symbols -- tap ?123 or swipe up on the keyboard area.

To return from symbols to letters, tap abc or swipe down.

Shift and caps lock

  • Single tap Shift -- types one uppercase letter, then auto-returns to lowercase.
  • Double-tap Shift -- caps lock. All letters are uppercase until you tap Shift again.

Visual indicator: the Shift key changes background color to show which state you're in. Lowercase = default color. Armed (one-shot) = slightly highlighted. Caps lock = fully highlighted.

Terminal keys

The extra row above the QWERTY layout contains:

  • Esc -- sends KEYCODE_ESCAPE. The receiving Android app decides how to handle it.
  • Tab -- sends KEYCODE_TAB. Tab completion in shells, indentation in editors.
  • Ctrl -- toggle modifier with three states:
    • Off -- default, no modifier.
    • Armed -- tap once. The next keypress includes Ctrl, then it resets to Off. Use this for Ctrl+C, Ctrl+Z, etc.
    • Locked -- long-press. Ctrl stays active until you tap it again. Useful for multiple Ctrl combos in a row.
  • < v ^ > -- arrow keys. Hold to repeat. For navigating command lines, moving cursors in editors.
  • Clipboard -- tap to open clipboard history. Long-press to paste most recent item.
  • Upload -- tap to pick and SCP a photo to your configured host.
  • Mic -- tap to start/stop voice input.

Each button has a distinct background color so you can find it at a glance without reading labels.

In the Android full APK, the three left slots (Esc, Tab, Ctrl) are customizable. Long-press any of them to open a picker and select a different key. See key mapping for details.

Number row

The number row sits above the QWERTY keys and is always visible. Each key shows:

  • The digit (tap to type).
  • A small hint label showing the shifted symbol (long-press to type).

For example, long-press 1 for !, long-press 2 for @, and so on. The hints are visible on the key so you never need to guess.

Alt characters

Long-press letter keys for accented variants and alternate characters.

  • Single-alt keys -- keys with only one alternate character fire it immediately on long-press. No popup.
  • Multi-alt keys -- keys with multiple alternates show a popup. Slide your finger to the character you want, then release.

Examples:

  • Long-press a -- popup with accented a variants.
  • Long-press n -- fires the tilde-n variant immediately.
  • Long-press e -- popup with accented e variants.

Quick key

The bottom-right key on the letter layers (next to the spacebar) is a configurable quick key. It defaults to /.

  • Tap -- types the configured character.
  • Long-press -- opens a picker with 24 terminal characters: /, ., ,, ?, !, --, ', ", :, ;, |, ~, `, \, @, #, $, _, &, -, +, =, ^, %. There's also a custom text option for typing up to 8 characters.

Your choice is saved and persists across sessions. Set it to whatever you type most. Also configurable in Settings.

Key mapping

The Android full APK lets you customize which keys appear in the extra row and what the quick key types. There are two ways to configure them:

  • Long-press the key -- long-press any of the three left extra row slots (Esc, Tab, Ctrl by default) or the quick key to open a picker and choose a replacement.
  • Settings -- open the menu (gear icon), tap Settings, and scroll to the key mapping section for all options in one place.

Available extra row options:

  • System keys: Esc, Tab, Home, End, PgUp, PgDn, Insert, Delete
  • Ctrl: keeps its three-state behavior (off, armed, locked) regardless of which slot it occupies
  • Text characters: |, ~, `, \

Changes take effect immediately and persist across sessions.

Key preview

When you tap a letter, number, or symbol key, a small bubble appears above the key showing the character you're pressing. The bubble uses a bounce animation (scales from 0.8 to 1.0) and fades out when you release the key.

Key preview works on all three keyboard layers (lowercase, uppercase, symbols). Special keys like Shift, Enter, Backspace, and the extra row keys don't show a preview.

Voice input

Tap the mic button in the extra row to start speaking.

  1. A waveform animation shows your audio level while recording.
  2. Text appears at your cursor as the speech recognizer processes your words -- streaming partial results, not waiting for silence.
  3. Tap the stop button (or the mic button again) to finish.

Voice input is useful when you're talking to an AI agent -- most of what you type is natural language anyway.

Included in the Android free and full APKs. Requires the RECORD_AUDIO permission.

Clipboard history

Tap the clipboard button in the extra row to open the clipboard history panel. It shows your recent copied text entries. Tap any entry to paste it at your cursor position.

Included in the Android free and full APKs. Clipboard pinning requires the Android full APK.

Android SCP upload

Android SCP upload sends a selected image to a remote server and types the remote path at your cursor.

Setup

  1. Open KeyJawn settings (gear icon, or find it in your app drawer).
  2. Add a host: enter the hostname, port, username, password, and remote upload directory.
  3. Credentials are stored using AndroidX EncryptedSharedPreferences (AES-256).

Usage

  1. Tap the upload button in the extra row.
  2. Pick a photo from your gallery.
  3. KeyJawn SCPs it to the configured server.
  4. The remote file path is typed at your cursor.

This lets you share an Android image with a remote tool that accepts file paths.

Android full APK only. Requires INTERNET and READ_MEDIA_IMAGES permissions.

Slash commands

On the symbols layer, tapping the / key opens a command picker popup instead of typing a literal slash.

  • Select a command from the list to insert it at your cursor.
  • Dismiss the popup (tap outside or press back) to type a literal / instead.

The command list includes common LLM CLI patterns like /help, /clear, /compact, and others.

Built-in command sets are included in the Android free and full APKs. Custom sets require the Android full APK.

Swipe gestures

Swipe across the keyboard area for quick actions:

  • Swipe left -- deletes the previous word.
  • Swipe right -- inserts a space.
  • Swipe up -- switches to the symbols layer.
  • Swipe down -- switches to the letters layer.

Included in the Android free and full APKs.

Themes

KeyJawn includes four keyboard color themes:

  • Dark -- the default. Dark grey keys on a near-black background.
  • Light -- white keys on a light grey background. Better for outdoor use.
  • OLED black -- true black background for AMOLED screens. Saves battery.
  • Terminal -- green text on a dark green background. The classic terminal look.

Changing themes

  1. Open KeyJawn settings (gear icon or app drawer).
  2. Under the Theme section, tap a color swatch.
  3. The new theme applies the next time the keyboard opens.

Themes change every visible element: key backgrounds, text colors, hint labels, the extra row, number row, and accent colors for Ctrl and Shift states.

Android full APK only. Android free users get the Dark theme.

Custom commands

The Android full APK lets you create command sets in addition to the built-in sets.

Creating a command set

  1. Open KeyJawn settings.
  2. Scroll to the Slash commands section.
  3. Tap Add command set.
  4. Enter a name for your set (e.g., "my-project").

Adding commands

  1. Find your custom set in the list.
  2. Tap the + button next to it.
  3. Type the command text. The leading / is added automatically.

Managing sets

  • Toggle any set (built-in or custom) on/off with the checkbox.
  • Delete a custom set with the X button.
  • Remove individual commands from custom sets by tapping the command.

Custom commands appear in the slash command popup alongside the built-in ones. Only commands from enabled sets are shown.

Android full APK only.

Autocorrect

Autocorrect is off by default. In terminal contexts, autocorrect does more harm than good -- it uses setComposingText which breaks web-based terminals and SSH clients.

To toggle autocorrect:

  1. Long-press the spacebar.
  2. Autocorrect toggles on or off for the current app.
  3. When enabled, the spacebar label changes to indicate autocorrect is active.

KeyJawn remembers the autocorrect setting for each Android app.

Included in the Android free and full APKs.