Release Notes
Version 1.0.2-40
March 3, 2026
Terminal
- Photo Background: New terminal background effect that displays a photo from your library behind the terminal. Choose from named opacity presets (Subtle through Vivid), apply one of 9 image filters (Noir, Chrome, Sepia, and more), and optionally enable a Ken Burns cinematic pan/zoom animation with adjustable speed. Photos persist across launches. Configure in Settings > Background Effect.
- Sound Presets: Configurable sounds for the terminal bell and notifications. Bell sounds include 6 presets (Classic Bell, Soft Chime, Glass Tap, Typewriter Ding, Digital Beep, Muted Thud) plus haptic-only and silent options, with a volume slider and live preview. Notification sounds offer 5 presets plus the system default. Configure in Settings.
iOS Local Shell
- imgcat Command: New command to display images inline in the terminal using the Kitty graphics protocol. Supports PNG, JPEG, HEIC, and other image formats. Use -w and -r flags to control display sizing.
- Ping Accuracy: The ping command now uses kernel-level receive timestamps (SO_TIMESTAMP) instead of userspace timing, and batch-drains queued ICMP replies to prevent one-cycle RTT inflation. Round-trip times are more accurate, especially under load.
SSH and Networking
- tssh connection failures now show the actual server error (exec format error, Go panics, version mismatches) instead of the opaque “No valid JSON found in tsshd output” message.
VPN
- Fixed the VPN widget connect button sometimes failing to actually connect or failing to reflect the current VPN state after a cold launch.
Visual Polish
- Added effects across the app for smoother state transitions: bounce and replace animations on copy buttons, breathing and pulsing on reconnection overlays, rotation on VPN connecting indicators, and wiggle effects on key availability badges.
Version 1.0.2-39
March 2, 2026
Keyboard and Input
- Option Key Fix: Fixed the Option key tap triggering a word-delete in the terminal, a regression in build 38. Pressing and releasing Option alone no longer emits any character. Standalone modifier key events (Alt, Shift, Control) are no longer forwarded to the terminal engine; only Command is forwarded for Cmd+hover link detection.
- Force ASCII Keyboard: New toggle in Settings > Locale switches the software keyboard to ASCII-only mode, preventing CJK input methods from substituting pipe | and others with IME characters. Default is off.
Context Menus
- Copy Link: Right-click and edit menu context menus now include a “Copy Link” action alongside “Open Link” when the cursor is over a URL.
- Fixed right-click on a URL not showing the “Open Link” action. Link detection was being silently deduplicated when the cursor was already over the URL from normal hover tracking.
Terminal
- Fixed the shell prompt appearing glued to the previous command after restoring a tssh session that was backgrounded while a TUI app was on the alternate screen. The primary screen dump now includes the cursor position so the trailing blank line is preserved on restore.
Localization
- Norwegian Bokmål: Added Norwegian Bokmål (nb) as the 25th supported language.
VPN
- Fixed VPN disconnect not sending the exit signal to the server. The tsshd client is now closed before the network stack tears down, ensuring the server receives clean shutdown notification instead of holding stale sessions until timeout.
- Moved the “Disconnect VPN” button to immediately below the status section in VPN settings for easier access.
- VPN event history now shows most recent events first.
Version 1.0.2-38
March 1, 2026
Terminal
- Cursor Effect: New “Neon” cursor effect shader adds a glowing outline around the cursor. Enable it in Settings > Cursor.
- Scrollback Preservation: Scrollback history is now preserved when a TUI app (vim, helix, tmux) is running on the alternate screen and iOS evicts the app in the background. Previously reconnecting would corrupt the primary scrollback because TUI output arrived before the alternate screen switch.
- Upstream Rebase: Merged upstream Ghostty commits. Includes the new URL regex rewrite, unsafe byte stripping in paste, new shader uniforms, and key tables restructuring.
SSH and Networking
- tmux via Exec Request: tmux auto-start on tssh sessions now uses a proper SSH exec request instead of typing the command into the login shell. This eliminates the brief login shell flash.
Keyboard and Input
- Action Buttons: The keyboard toolbar drawer now includes four action buttons: Full Screen, Tab Bar Toggle, New Connection, and App Settings. Existing users get the buttons automatically via layout migration.
Live Activity
- Polished the Live Activity lock screen layout: centered title, improved timer alignment, and fixed the activity reposting when the user dismisses it.
- Fixed duplicate Live Activities appearing on the lock screen after an app relaunch. Orphaned activities from previous launches (app kill, crash, system eviction) are now cleaned up on startup.
iOS Local Shell
- Fixed Ctrl-C not interrupting non-interactive iOS shell commands (tail -f).
- Fixed SSH password prompts appearing on the same line as the previous command output instead of on a new line.
Bug Fixes
- Fixed URL detection regex greedily swallowing URLs that follow file paths. For example, “root/shell https://rootshell.com” previously treated the entire string as a single file path instead of detecting the URL separately.
- Fixed Cmd+hover link highlighting requiring mouse movement on iPad and macOS. Links now highlight immediately when Cmd is pressed while the pointer is already over a URL.
- Fixed Cmd+hover link detection not working inside mouse-tracking apps like tmux. Since the xterm mouse protocol doesn’t encode Cmd, link detection now bypasses the mouse-capture gate when Cmd is held.
- Fixed kitty icat pixel size detection on macOS local shell. The terminal window size ioctl now preserves pixel dimensions so kitty graphics protocol images render at the correct size.
- Fixed orphan scrollback history files never being cleaned up when their associated terminal session was deleted.
Version 1.0.2-37
February 27, 2026
Terminal
- Clickable Hyperlinks: URLs in terminal output are now interactive. Cmd+click opens links in Safari (iPad with trackpad / macOS), right-click or two-finger tap shows “Open Link” in the context menu, and the iOS edit menu adds an “Open Link” option when over a link.
- Text Selection Appearance: New setting in Settings > Window to choose how selected text looks: the default rootshell style, your theme’s native selection colors, inverted colors, or fully custom foreground/background colors.
Security
- Scrollback Encryption: Persisted scrollback history is now encrypted at rest with AES-256-GCM using a device-only Keychain key. Existing plaintext scrollback files are migrated transparently on restore.
SSH and Networking
- Locale Override: New setting in Settings > Terminal to control the locale sent to remote servers. Choose Automatic (system locale), Don’t Send (suppress locale entirely), or Custom. Fixes repeated setlocale warnings for users whose OS region produces unavailable locale combinations like en_IL.UTF-8.
- Fixed a crash in local SSH port forwards when many connections arrive simultaneously (e.g. a browser opening multiple sockets).
- Fixed KCP rekey failures after backgrounding the app by suppressing the rekey timer during iOS process suspension.
- Fixed the cursor permanently flipping to underline after resuming a tssh session running Helix, or other focus-reporting apps.
VPN
- Home Screen Widget: New small and medium Home Screen widgets to connect and disconnect your VPN without opening the app. Long-press to choose a VPN profile. Shows profile name, host, status with gradient background and status orb, and a connect/disconnect button.
- Live Activity: Lock Screen and Dynamic Island now show active sessions and real-time VPN stats (bytes in/out, uptime, connection count). A session filter in Settings lets you choose All Sessions, Diary Sessions, or VPN Only.
Keyboard and Input
- Restore Custom Keys: Custom keys removed from the toolbar layout now appear in a “Hidden Keys” section in toolbar settings with a restore button, instead of being permanently deleted.
Bug Fixes
- Fixed blank screen when the last session exits on iOS. The connection sheet is now shown instead of destroying the only window.
Version 1.0.2-36
February 24, 2026
SSH
- Post-Quantum Host Keys: Added ML-DSA-65 and ML-DSA-87 post-quantum host key signature algorithms built on Apple CryptoKit (macOS 26+, iPadOS 26+, visionOS 26+). Combined with the ML-KEM hybrid key exchange added in build 34, Rootshell now has end-to-end post-quantum protection: ML-KEM secures the key exchange against harvest-now-decrypt-later attacks, while ML-DSA authenticates the server’s identity against forgery by a future quantum computer. Currently works with servers running OQS OpenSSH; Rootshell will be ready out of the box when upstream OpenSSH adds ML-DSA support.
Keyboard and Input
- Paste Button: The toolbar’s extra keys drawer now includes a clipboard paste button, so you can paste without a keyboard shortcut or gesture based context menu. Existing users get the button automatically via layout migration.
- Toolbar Shift Modifier: When Shift is active on the virtual keyboard toolbar, characters typed on the regular iOS keyboard are now shifted (a→A, 1→!, ;→:, etc.). Previously only the toolbar’s own keys respected the Shift state.
iOS Local Shell
- Windows ping Hint: Typing “ping -n <count>” (Windows syntax) now suggests the correct flag “-c” instead of “too many arguments” error.
Themes
- System Appearance Tracking: Day/night automatic theme switching now follows the system light/dark mode instead of using sunrise/sunset calculations and device location. This is more reliable and lets you control the switch from Control Center, Settings, or Shortcuts automations.
Fonts
- Smaller App Size: Replaced Nerd Font Mono patched fonts with unpatched originals, reducing bundled font size from 41 MB to 1.6 MB. Nerd Font symbols are already provided automatically by Ghostty’s built-in fallback font. Unused weight variants were also removed. Existing users are automatically migrated to the new font family names.
- Configurable Font Features: Font features (stylistic sets, slashed zero, etc.) are now user-configurable in Settings > Font Features, replacing the previously hardcoded ss01–ss08 and zero features. Enable or disable individual OpenType features per font.
- Font Preview: The font list preview text now reflects your enabled font features so you can see the effect.
Localization
- Hungarian: Added Hungarian (hu) as the 24th supported language.
- Extended translation coverage across all 24 languages with newly localized strings for font features, toolbar key names, iCloud sync status, and other UI elements.
Bug Fixes
- Fixed scrollback restore showing corrupted colors by resolving palette-indexed colors to RGB in the scrollback dump.
- Fixed toolbar modifier keys (Ctrl, Alt, etc.) not applying to custom drawer keys.
- Fixed cursor joystick icon in the toolbar keys editor not matching the actual toolbar button icon.
Version 1.0.2-35
February 23, 2026
Localization
- 23 Languages: The app is now localized into Arabic, Brazilian Portuguese, Catalan, Czech, Danish, Dutch, Portuguese, Finnish, French, German, Hebrew, Italian, Japanese, Korean, Polish, Romanian, Simplified Chinese, Slovenian, Spanish, Swedish, Traditional Chinese, Ukrainian, and Vietnamese.
Keyboard and Input
- Drawer Toggle Hiding: The drawer toggle button in the keyboard toolbar can now actually be hidden via Settings > Toolbar Keys.
macOS/iPad Menu
- Menu Reorganization: View-related items (font size, tab bar, background effect, theme picker, transparency) moved from the Terminal menu to the View menu per macOS Human Interface Guidelines. The Terminal menu now contains splits, Focus Split, scroll, and compose actions.
Bug Fixes
- Local Shell CWD Persistence (iOS): The local shell now restores your working directory when a session reconnects or the app relaunches instead of always resetting to the Documents folder.
- Background Notifications: Terminal notifications (OSC 9/777) now fire when the app is in the background. Previously they were suppressed whenever the terminal was focused, even if you had switched to another app, so long-running commands could not alert you. When the app is in the foreground, notifications only appear for non-focused tabs. On iPhone/iPad, Location Diary must be active for background notifications to fire.
Version 1.0.2-34
February 22, 2026
SSH
- Post-Quantum Key Exchange: SSH connections now negotiate mlkem768x25519-sha256 (ML-KEM + Curve25519 hybrid) as the highest-priority key exchange algorithm. This protects session traffic against future quantum attacks while maintaining classical security. Requires iOS/iPadOS 26+, macOS 26+, or visionOS 26+ because Apple CryptoKit only exposes ML-KEM on those versions; older OS versions fall back to curve25519-sha256 and diffie-hellman-group14. Requires OpenSSH 9.9+ or equivalent on the server.
Keyboard and Input
- Ctrl+Key via Toolbar Now (Hopefully) Uses Proper Key Encoding: The virtual keyboard toolbar’s Ctrl+key combinations now route through Ghostty’s full key encoding pipeline instead of manually encoding legacy control characters. This fixes keys like Ctrl+; and Ctrl+Shift+- that have no legacy mapping, and enables proper CSI u / kitty protocol encoding for all modified keys.
- Custom Key Editor UX: Sequence mode steps are now tappable to edit in-place instead of requiring delete-and-recreate. Quick-add buttons for Return, Tab, Escape, and Space let you build sequences without opening the full Key Combo picker.
- Custom Toolbar Key ESC Fix: Fixed custom toolbar keys whose sequences end with ESC (0x1B) being misinterpreted as Alt+key combinations in editors like Helix. Steps are now sent individually with a short delay after any ESC byte.
- Keyboard Dismiss in Settings: Scrolling now interactively dismisses the keyboard in all settings views with text fields. Number pad fields in Roam settings also gain a Done button.
Terminal
- Bundled Commands — bat and gix: Two new iOS local shell command-line tools are bundled with the app. bat provides syntax-highlighted file viewing with automatic paging (try
bat foo.swift). gix is a fast Git implementation written in Rust for repository operations. - Vim 9.2 Upgrade: Upgraded the bundled Vim from 9.1 to 9.2.0038 (471 upstream patches). Now built with the “huge” feature set, enabling termguicolors (24-bit color in themes like catppuccin), langmap, vartabs, and profiling. Includes updated syntax highlighting, indent rules, filetype detection, netrw/matchit plugins, and new documentation.
- curl Upgrade with HTTP/2: Upgraded bundled curl to 8.19.0 with HTTP/2 support via nghttp2 and OpenSSL. HTTP/2 enables multiplexed transfers and header compression for faster downloads.
- Scrollback Restore Timing: Fixed scrollback restore on remote sessions (SSH, Kubernetes, Console, Mosh, TSSH) sometimes capturing connection spinner animation artifacts. The restore now waits until the session reaches the running state.
Split Panes
- Split Focus Border Customization: New settings under Window > Split Panes to choose the focus border style (none/subtle/standard/bold) and color (accent/gray/custom).
macOS
- Split Pane Focus Border: Maybe fixed the blue pane-focus border incorrectly appearing on single-pane layouts due to a race condition between window key status changes and layout computation. Also suppresses the system UITextInput focus ring on macOS. Could never reproduce this myself, so fingers crossed.
Bug Fixes
- Roam Port Range Defaults: Clearing the port range fields in Settings > Roam now correctly restores the defaults (61000–61999) instead of silently retaining the last entered value.