Support

Getting Started

Welcome to rootshell! Here are some quick tips to help you get started with your new terminal emulator.

Local Shell

rootshell includes a built-in local shell that works offline. On macOS, you get full access to your local system shell with all installed utilities and your standard environment. On iOS, the local shell provides a curated set of pre-bundled Unix utilities including ls, cd, pwd, cat, grep, curl, ping, dig, awk, and more—perfect for file management, scripting, and network diagnostics.

SSH Connections

To connect to a remote server via SSH, enter your connection details including host, port (default 22), and username. rootshell supports both password and SSH key authentication. For complex network setups, you can configure jump hosts (bastion servers) to proxy your connection through intermediate servers. Local network hosts using .local addresses are automatically resolved via mDNS.

Tabs & Splits

Open multiple terminal sessions using tabs (Cmd + S) and close them with Cmd + W. Split your current terminal horizontally with Cmd + D or vertically with Cmd + Shift + D. Navigate between splits using Cmd + Option + Arrow keys.

Quick Connect

The quick connect field at the top provides fast access to your servers. Start typing to see autocomplete suggestions from your connection history and configured cloud instances. Host Shorthand patterns (HSS) are also expanded automatically, letting you connect with shortcuts like prod1 instead of typing full hostnames.

The Tab key is your friend—use it to accept autocomplete suggestions quickly. On iOS and iPad without a hardware keyboard, you'll find the Tab key in the keyboard toolbar above the virtual keyboard.

For more on profiles, suggestion sources, and matching modes, see Profiles & Quick Connect below.

Report an Issue

Found a bug or have a feature request? We track issues on GitHub.

Frequently Asked Questions

How do I manage SSH keys?

SSH keys are stored securely in the iOS Keychain. rootshell supports Ed25519, ECDSA, and RSA key formats. You can import keys from PEM or OpenSSH format files, or generate new keys within the app. For added security, enable biometric protection to require Face ID or Touch ID either once per session or for every signing operation.

Can I sign git commits on a remote server without copying my GPG key?

Yes. rootshell can act as a GPG agent and forward it over SSH or tssh, so signing operations on the remote (signed commits, gpg --sign, signed tags) are handed back to the device, signed locally with a key that never leaves the iOS Keychain, and returned to the server. Existing SSH keys can be reused for GPG signing (including YubiKey PIV), or you can import standalone GPG keys. See the GPG Agent Forwarding section below for setup details.

Which cloud providers are supported?

rootshell integrates with AWS, Azure, DigitalOcean, and Linode. Connect your accounts using API tokens or OAuth authentication. Once configured, your cloud instances appear in quick connect suggestions, and you can generate kubeconfig files for managed Kubernetes clusters (EKS, AKS, DOKS).

Console access varies by provider. For Linode, rootshell establishes a secure WebSocket connection directly to your Linode's console (LISH). For AWS EC2, rootshell generates an ephemeral SSH key pair, pushes the public key to the instance via EC2 Instance Connect, and then establishes an SSH session—the temporary key is discarded after use.

How do I access Kubernetes nodes?

Import your kubeconfig file in Settings to browse your clusters and nodes. To get shell access to a node, rootshell creates an ephemeral debug pod scheduled on that specific node. The pod runs a privileged container with host namespace access, giving you a shell into the node's environment. When you disconnect, the debug pod is automatically deleted.

If the app is terminated unexpectedly before cleanup, orphaned debug pods may remain in your cluster. rootshell detects these orphans on next launch and offers to clean them up, so you don't accumulate stale pods over time.

How do I customize the appearance?

rootshell includes over 450 bundled themes from the Ghostty project. Browse and switch themes in Settings with live preview. You can also customize your font family and size, and choose between Light, Dark, or Auto appearance modes that follow your system settings.

Profiles & Quick Connect

Profiles are saved connection templates that store everything needed to reach a server in one click. Quick Connect is the unified search field at the top of the app that brings profiles, history, cloud instances, and local network devices together in a single list of suggestions.

Connection Profiles

A profile stores a name, host, port, username, and authentication method (password or SSH key). You can also configure optional extras:

  • Jump hosts (bastion servers)
  • SSH agent forwarding
  • Port forwarding rules
  • Automatic tmux attach (see tmux Control Mode)
  • A launch command to run on connect

Profiles sync across your devices via iCloud.

Organizing Profiles

  • Folders — hierarchical grouping (e.g., Work / Production)
  • Tags — cross-cutting labels that span folders
  • Color tags — visual color coding for at-a-glance identification
  • Icons — custom SF Symbols per profile

Browse all profiles with Cmd + Shift + P.

Quick Connect

The Quick Connect field aggregates suggestions from four sources, shown in priority order:

Source Description
Profiles Saved profiles, sorted by frequency of use
History Previous connections, sorted by most recent
Cloud Instances from connected cloud providers (AWS, Azure, DigitalOcean, Linode)
Local Network Devices discovered via Bonjour/mDNS on your local network

Suggestions are deduplicated and capped at 15 results.

Autocomplete & Matching

  • Tab inserts the current suggestion
  • Default: prefix matching — type the beginning of a name or host
  • Double-tap Tab or Shift + Tab: switch to substring matching (matches anywhere in the name or host)
  • HSS patterns are also expanded — see Host Shorthand below
  • On iOS/iPadOS without a hardware keyboard, Tab is in the keyboard toolbar

Connection Protocols

  • SSH — standard secure shell, supports all features (agent forwarding, jump hosts, port forwards)
  • Mosh — UDP-based, survives network changes and app suspension, ideal for mobile
  • tssh — QUIC and KCP-based transport, resilient connections over unreliable networks

Set the protocol per-profile in the profile editor.

tmux Control Mode

rootshell has deep native integration with tmux's control mode (tmux -CC). Instead of tmux painting its windows and panes as text inside a single terminal, rootshell turns every tmux window into a native tab and every pane into a native split. You get full smooth scrolling, native copy and paste, pinch-to-zoom font sizing, and all of the usual tab and split keyboard shortcuts and gestures—no tmux prefix-key gymnastics to switch between windows or panes, and none of the janky redraw scrolling of a normal tmux session. Requires rootshell 1.0.7-101 or later.

Launching Control Mode

Run one of these in any tab on a compatible transport. The tab you launch from becomes the gateway for the session.

Command What it does
tmux -CC new Create a new tmux session and open its first window as a native tab
tmux -CC attach -t 0 Attach to an existing session (here, session 0)
tmux -CC attach Attach to the most recently detached session

The Gateway Tab

The tab you launched from is the gateway for the whole session. Every window and pane in the session you attached to opens as a native tab and split in the current window. Because rootshell tracks the gateway as special, closing the gateway tab detaches the session and closes all of its related tabs. The tmux server keeps running, so you can re-attach later from this device or another one.

What Works

Everything tmux does to its windows and panes is reflected as native tabs and splits, and the sync is two-way: actions you take in rootshell are routed to the server, and changes made by tmux commands—or by another client attached to the same session—show up in rootshell in real time.

  • Windows — create, close, rename, reorder, and select. New windows open as native tabs, and renaming a window updates its tab title.
  • Panes — split horizontally or vertically, close, toggle zoom, resize, and focus. Each pane maps to a native split, and layout changes reconcile automatically.
  • Sessions — switch between sessions from the sessions dashboard; the session you switch to opens focused on its current window.
  • Per-window font sizeCmd + +, Cmd + -, and Cmd + 0 scale a whole window's panes together (one size per window).
  • Native terminal feel — panes are real terminal views, so selection, copy and paste, and smooth scrollback all work natively—no tmux copy-mode.

Focus stays put: activity on another tmux client attached to the same session won't yank your visible tab. Only your own actions—or a session switch you request—change which tab is selected.

Spotting tmux Tabs

tmux tabs are badged so you can tell them apart at a glance. Each window tab carries a T badge, and the gateway tab carries a star badge. Both are tinted with a color pulled from your active theme's palette, so the exact color follows whatever theme you're using. If you run more than one tmux -CC gateway at the same time, each group gets its own distinct color. These colors are deliberately kept clear of the blue roaming indicator used by tssh and mosh tabs, so a tmux group never looks like a roaming session.

In the Vertical Tab Bar

When you use the vertical tab sidebar, a tmux gateway is shown as a collapsible group with its window tabs indented beneath it; everything else stays flat in tab order.

  • The gateway header shows the star badge, the session name, and the connection host and port. A chevron collapses or expands the group (and the collapsed state is remembered), and a window count appears while it's collapsed. Inline buttons let you open a new window, open the sessions dashboard, or close the gateway.
  • Window rows are indented under their gateway and carry the same theme-tinted T badge used in the horizontal tab bar.
  • Hidden windows collect in a Hidden group at the bottom of the gateway. A window can be hidden without killing it, and the hidden state is saved with the session.
  • Reordering — drag a window tab to reorder it within its own gateway group, and the move is routed to the tmux server. Gateway headers themselves aren't draggable, while ordinary tabs can still be dragged freely, including past a whole gateway group. Searching the sidebar auto-expands groups to reveal matches.

Detaching

When you attach, rootshell prints a short menu into the gateway tab:

[ rootshell tmux control mode ]
Press ESC to detach.

Press ESC in the gateway tab to cleanly detach and drop back to your shell on that tab. Closing the gateway tab detaches as well. Either way, the tmux session keeps running on the server so you can re-attach later.

Compatible Transports

Control mode works over a local shell on Mac, SSH, and tssh—transports that carry a byte-accurate stream. Mosh is not supported for control mode, because its UDP state-sync transport can't carry the control-mode protocol; use SSH or tssh instead. Your server needs a build of tmux that supports control mode (-CC).

Recovering After the App Closes

rootshell treats gateway tabs as special so they can survive the app being terminated. If the app is force-quit or relaunched, it restores the gateway and its window tabs as placeholders, forces the terminal parser back into control mode, and tries to re-sync with the running tmux server by finding the protocol framing again. If tmux is still running, your tabs and panes reattach automatically. If tmux is gone—for example, the server exited while rootshell was closed—the re-sync times out after a short wait, the placeholder tabs are removed, and the gateway drops you back to a normal shell.

Siri & Shortcuts

rootshell integrates with the Shortcuts app and Siri, so you can launch connections from automations, the home screen, or by voice.

Open Connection Profile

The Open Connection Profile action connects to any saved profile. It appears in the Shortcuts app under rootshell's actions and accepts the following parameters:

Parameter Description
Profile The saved connection profile to open (required)
Directory Working directory to cd into after connecting
Command Command to run after connecting
Execute in Shell When disabled, uses exec to replace the shell with the command (default: on)

The profile picker in Shortcuts includes search and suggestions, so you can find profiles by name or hostname.

Siri

You can also connect by voice. Siri recognizes phrases like "Open [profile name] in rootshell" and "Connect to [profile name] with rootshell".

Host Shorthand (HSS)

Host Shorthand lets you create quick aliases for your servers using pattern matching. Configure shortcuts in YAML format and store them in the app's Documents directory.

Configuration Example

Create a YAML file with patterns that expand short names to full hostnames:

patterns:
  - short: "^prod(\\d+)$"
    long: "prod#{1}.example.com"
    note: "Production servers"
  - short: "^dev$"
    long: "dev.internal.example.com"
    note: "Development server"

With this configuration, typing prod1 in quick connect expands to prod1.example.com. Capture groups from the regex pattern are available as #{1}, #{2}, etc. in the expansion template.

SSH Agent Forwarding

rootshell supports SSH agent forwarding, allowing you to use your local SSH keys on remote servers without copying private keys. Configure agent forwarding on a per-connection basis in the connection settings.

Approval Modes

Choose how rootshell handles agent signing requests:

  • Auto-approve: All signing requests are automatically approved
  • Per-session: Approve each key once per terminal session
  • Per-request: Prompt for approval on every signing request

You can also restrict which keys are available for forwarding, selecting specific keys instead of exposing your entire keychain to the remote server.

GPG Agent Forwarding

rootshell can act as a GPG agent and forward it over SSH or tssh, so signing requests issued on the remote (signed git commits, gpg --sign, release tag signing, etc.) are handed back to the device, performed locally, and returned to the server. Your GPG private key never leaves the device. Requires rootshell 1.0.6-93 or later.

Key Sources

Two kinds of keys can be forwarded:

  • Existing SSH keys — Any key configured under Settings → Connections → SSH Keys can be used for GPG signing with no extra import step, including YubiKey-backed PIV keys. The same key that authenticated your SSH session can also sign commits on the other side. Supports Ed25519, RSA, and ECDSA P-256.
  • Imported GPG keys — Standalone signing keys can be added under Settings → Connections → GPG Keys by pasting an ASCII-armored secret block (gpg --export-secret-keys --armor KEYID) or dropping a binary .gpg file. Imported keys must be exported without a passphrase. RSA, Ed25519, and ECDSA P-256/P-384/P-521 signing keys are supported.

Each imported key has a detail screen for renaming, copying the full fingerprint, viewing per-subkey details, or exporting an ASCII-armored public block to paste into gpg --import on the remote.

Per-Connection Settings

GPG agent forwarding is configured per connection. In the connection editor:

  • Enable — Toggle GPG agent forwarding for this connection.
  • Approval Mode — Choose how signing requests are handled:
    • Auto-approve — All signing requests succeed silently.
    • Per-session — First request prompts; subsequent requests for the same key are approved automatically until disconnect.
    • Per-request — Every signing request shows an approval sheet (with hash preview and remote host).
  • Forwarded Keys — Optionally restrict which keys this connection can use; leave empty to forward all configured keys.
  • Remote Socket Path — Where the forwarded agent socket appears on the server. Defaults to $HOME/.gnupg/S.gpg-agent; point your remote gpg at it (e.g., export GNUPGHOME=$HOME/.gnupg).

Transport Support

GPG agent forwarding rides on a reverse Unix-socket forward channel that only SSH and tssh expose, so the option is shown for those protocols only. Mosh sessions hide the toggle, since UDP cannot carry the forward.

Decryption (PKDECRYPT)

Decryption support — letting the remote gpg --decrypt ask the device to unwrap session keys for RSA, ECDH Curve25519, ECDH P-256, and X25519 — is included in rootshell 1.0.6-94 and later. When available, it uses the same per-connection enable toggle and approval mode as signing; sign and decrypt approvals are tracked separately in per-session mode, so approving a signing operation never silently approves a decryption.

Location Diary

iOS suspends background apps after a short period, which drops TCP-based connections like SSH, Kubernetes, and Cloud Console sessions. Location Diary uses iOS location services to keep rootshell active in the background, preserving your sessions while you switch between apps.

Resilient transports like Mosh and tssh use UDP state-sync that survives app suspension and network changes—they don't need Location Diary at all.

Modes

  • Off — Location tracking disabled. Background sessions may disconnect when the app is suspended.
  • Session Only — Manually enabled; stays active until you turn it off or close the app. Not remembered across app restarts.
  • Auto During Active Sessions (recommended) — Automatically enables when you have SSH, Kubernetes, or Cloud Console sessions. Automatically pauses when all those sessions end. Remembered across restarts.

Which Sessions Need It

  • Needs Location Diary: SSH, Kubernetes, Cloud Console, SSH started from local shell — these use TCP connections that the OS will close when the app is suspended.
  • Doesn't need it: Mosh, tssh — their UDP state-sync protocol survives network changes and app suspension. Local shell also doesn't need it.

Privacy: Location entries are automatically pruned after 5 minutes.

Touch Gestures

rootshell supports two touch interaction modes, toggled in Settings → Terminal.

Scroll Mode (default)

Gesture Action
Single finger drag Scrolls through terminal output
Long press (~0.5s) Starts text selection
Two-finger tap Opens context menu (copy, paste, split, find, settings, theme)
Two-finger long press Opens new connection sheet
Pinch in/out Decrease/increase font size (shows columns × rows overlay with reset)
Swipe left/right Switch between tabs

Legacy Mode

Gesture Action
Single finger drag Selects text
Two-finger drag Scrolls through terminal output
Long press Opens context menu (copy, paste, etc.)

Mouse capture apps (tmux, vim): In Scroll Mode, single-finger pan sends scroll events to the running application, and long press acts as mouse click-and-drag.

Mod-Tap

Mod-Tap lets a single key perform different actions depending on whether it's tapped quickly or held down. The classic example: Caps Lock sends Escape on tap, acts as Control on hold.

Presets

  • Caps Lock → Escape / Control — Tap sends Escape, hold acts as Control.
  • Escape → Escape / Control — For users who already remapped Caps Lock to Escape at the OS level.

Custom Rules

  • Source keys: any modifier key, letter, digit, or symbol
  • Tap actions: Escape, Backspace, Return, Tab, Space, Delete, arrow keys, Home/End/Page Up/Down, or a custom text sequence
  • Hold modifiers: Control, Alt, Shift, or Command
  • Hold threshold: adjustable from 150ms to 300ms (default 200ms)

Caps Lock LED note: The keyboard LED still toggles when Caps Lock is pressed. To avoid this, remap Caps Lock to Escape in iOS Settings → Keyboard → Hardware Keyboard → Modifier Keys, then create a mod-tap rule for Escape instead.

Keyboard Shortcuts

rootshell supports extensive keyboard shortcuts when using an external keyboard:

Clipboard

Action Shortcut
Copy Cmd + C
Paste Cmd + V

Tabs & Windows

Action Shortcut
New Tab Cmd + S
New Window Cmd + N
New Local Shell Cmd + T
Duplicate Tab with SSH Cmd + Shift + R
Previous Tab Cmd + {
Next Tab Cmd + }
Switch to Tab 1-9 Cmd + 1 - 9

Split Windows

Action Shortcut
Split Right Cmd + D
Split Down Cmd + Shift + D
Close Split Cmd + W
Focus Split Left Cmd + Option + Left Arrow
Focus Split Right Cmd + Option + Right Arrow
Focus Split Up Cmd + Option + Up Arrow
Focus Split Down Cmd + Option + Down Arrow
Toggle Split Zoom Cmd + Shift + Enter
Equalize Splits Cmd + Shift + E

View & Display

Action Shortcut
Toggle Tab Bar Cmd + Shift + B
Toggle Tab Switcher Cmd + Shift + \
Toggle Theme Picker Cmd + Shift + T
Toggle Background Effect Cmd + Shift + L
Toggle Compose Cmd + Shift + K
Toggle Full Screen Cmd + Shift + F
Toggle Transparency Cmd + Shift + O (Mac only)

Terminal

Action Shortcut
Find Cmd + F
Select All Cmd + A
Clear Screen Cmd + K
Browse Hosts Cmd + B
Browse Profiles Cmd + Shift + P
Toggle AI Agent Cmd + I
Increase Font Size Cmd + +
Decrease Font Size Cmd + -
Reset Font Size Cmd + 0
Scroll to Top Cmd + Home
Scroll to Bottom Cmd + End
Scroll Page Up Page Up
Scroll Page Down Page Down
Settings Cmd + ,