Skip to content

Releases: alexkerber/termaway

v1.5.3

Choose a tag to compare

@alexkerber alexkerber released this 27 Jul 19:25
10e87c1

Rotating an iPad no longer wrecks the prompt, the web client works without internet, and the iPad can reach its own session list again.

Rotation stopped breaking the prompt

Rotating the iPad piled up mangled prompt lines, one per rotation, with timestamps wrapped mid-string. A rotation emits several sizes within a few milliseconds, and the cooldown that keeps two clients from fighting over the terminal size dropped every resize inside its window with nothing to retry it — so the last size, the one the client actually settled on, never reached the shell. It stayed on an intermediate width while the client rendered at the final one, and every prompt after that wrapped at the wrong column.

The cooldown now holds the last size of the burst instead of discarding it. This is a server fix, so it reaches iOS and the web client as soon as you update the server — no app update needed.

The web client no longer phones out

It pulled its icon set from a CDN on every load, at an unpinned version. A self-hosted terminal could not draw its own toolbar without internet, and a third party got to run script inside it — both odd for a product whose whole point is that nothing leaves your machine. The icons are now inline. The page makes no request off your own machine.

iPad

  • The session list was unreachable with a session open. The terminal hides the navigation bar to make room for its own top bar, and that took the split view's sidebar button with it — so opening a session left no way back to the list. Tapping the session name or the connection status now brings the sidebar back.
  • The shortcuts bar is as wide as its keys instead of stretching across the screen with everything bunched at one end.
  • The new-session button no longer draws itself inside two rings.

A better installer

The Mac DMG now opens on the app's own palette, with the app and Applications on a card and a trail of the icon's sparkle between them, instead of two icons dropped wherever Finder felt like putting them.

Versions

macOS, Linux and iOS are all on 1.5.3. The previous release, 1.5.2, was server-side only and never had an iOS build; this one puts the three back in step.

v1.5.2

Choose a tag to compare

@alexkerber alexkerber released this 26 Jul 18:18
83ea90d

An agent's notification now reaches your iPad with its own message, and a bell that fired on every prompt stopped firing.

macOS and Linux only. The change is entirely server-side and rides the same event the notification hook already used, so iOS 1.5.1 from the App Store picks it up as soon as you update the server. There is no 1.5.2 for iOS.

Notifications from the terminal itself

Anything in a session can now raise attention with a real message, using the escape sequences terminals already speak:

printf '\033]9;Build finished\007'                    # OSC 9 — a message
printf '\033]777;notify;Codex;Needs approval\007'     # OSC 777 — title and body

WezTerm, iTerm2, Kitty and ntfy hooks send these already, so an agent configured to notify one of those notifies TermAway too, with nothing to install. Before, the best a session could do was ring a bell — attention with nothing to say.

Two limits worth knowing. tmux swallows both sequences — verified against real tmux, with allow-passthrough and with the DCS wrapper, none of it reaches the client — so rich notifications need session persistence turned off. A plain bell passes through either way. And because a sequence can be driven by whatever is on the terminal, a remote host or a file being cat'd, these are rate-limited per session in a way the loopback hook is not.

Fixes

  • A shell that set its window title rang the bell on every prompt. BEL is itself a valid terminator for an escape sequence, so the title write ended in the same byte a bell does, and TermAway counted it. It now checks for bells only in what is left after complete sequences are removed.
  • A long escape sequence could invent a bell. Clipboard sync and inline images base64 their whole payload across several reads; the buffer that tracks a half-received sequence is capped, and on overflow it used to forget it was inside one — so the terminator rang. Related: an abandoned sequence no longer swallows the bells that follow it, which had silenced an agent's permission prompt.
  • Progress updates are no longer notifications. iTerm2 sends progress as OSC 9;4;… and ConEmu uses 9;<digit>; for several other things; each tick was raising an alert.

v1.5.1

Choose a tag to compare

@alexkerber alexkerber released this 25 Jul 09:16
cf338d8

Sessions can now survive a server restart, agents can reach each other, and a few things that never worked now do.

Sessions that outlive the server

Turn on Keep sessions running when the server stops in the Mac app's Preferences → Server → Sessions. Each session then runs inside tmux, so stopping the server — or rebooting — leaves your shells running, and TermAway reattaches to them on the next start.

Off by default; it needs tmux installed. TermAway's own replay buffer still resets on restart, so you reattach to a repainted screen: what survives is the processes and tmux's history.

A side effect worth knowing: because each named session is a tmux session on a shared socket, two agents running in two sessions can talk to each other with plain tmux send-keys and capture-pane, with no extra setup.

Fixes

  • Server discovery listed the same Mac several times. The Bonjour name embedded macOS's LocalHostName, which gains a -NNN suffix on every mDNS name conflict, so each restart published a new identity. It now uses the stable computer name.
  • Terminal search did nothing. It counted matches and the arrows moved through them, but nothing ever scrolled — the function that would have done it was never called, and on iPad the split view had no search wiring at all.
  • The top bar changed its name when you tapped between split panes, reading as a session switch when nothing switched. It now names the session you opened and shows the pane as a position inside it.
  • "Window" is now "Session" throughout the app, matching what everything else — onboarding, settings, the server protocol — already called them.
  • Two TermAway servers on one network no longer collide, and a Bonjour failure can't take the terminal down with it.

For contributors

The repo now has a license, CI, and npm test.

TermAway 1.5.0

Choose a tag to compare

@alexkerber alexkerber released this 24 Jul 18:41
8c5bb29

Drive your coding agents from your iPad or iPhone.

iOS / iPadOS

  • Agent alerts — a notification the instant a CLI agent (Claude Code, Codex, OpenCode…) rings the bell, needs input, or finishes a task. Sessions that need attention are badged in the list, and tapping a notification opens that exact session. Works zero-config (terminal bell) or precisely via a Stop hook → loopback POST /api/notify.
  • Prompt composer — a multi-line field above the shortcuts toolbar for writing, editing and dictating long prompts before sending; drafts are saved per session.
  • Dev-server previews — tap a session's listening port to open it in an in-app browser.

macOS

  • Tailscale — the menu bar shows a copyable Tailscale URL, so you can reach your Mac from anywhere. Self-hosted, no port forwarding.

Linux / server

  • Dev-server port discovery (requires lsof).
  • Auth-gated WebSocket broadcasts; loopback-only /api/notify hardened against cross-origin / DNS-rebinding.

Downloads: macOS app (notarized) and Linux server tarball below. iOS / iPadOS via the App Store.

v1.4.1

Choose a tag to compare

@alexkerber alexkerber released this 08 Jul 12:22
70b0fa1

Maintenance release fixing issues reported after v1.4.0, plus polish.

Fixes

  • Web terminal: session/tab routing (#9) — inactive session output no longer leaks into the active tab, fast tab switches no longer mix scrollback or leave a blank terminal, and newly-created tabs no longer fail with "Not attached to session …". Single-attach is opt-in (mode:"single") so iOS split-pane multi-attach keeps working.
  • macOS: "Server script not found" on launch (#8) — the app now bundles the Node server, web client and production dependencies inside itself, so it works without a local repo checkout. Shipped as a notarized DMG so it opens cleanly on download.
  • iOS: local server discovery — added the local-network usage description so Bonjour discovery works instead of hanging on "Scanning local network…".

Also

  • Clearer "Node.js required" prompt on macOS with a direct download link.
  • Verbose server logging is now gated behind TERMAWAY_DEBUG (quieter production logs).
  • Version synced across all platforms.

Downloads

  • macOSTermAway-macOS-v1.4.1.dmg (notarized). Open it and drag TermAway to Applications.
  • LinuxTermAway-Linux-v1.4.1.tar.gz. Extract and run sudo ./install.sh.

v1.4.0

Choose a tag to compare

@alexkerber alexkerber released this 02 Apr 16:35
b136e53

What's New

iOS/iPadOS App

  • 25 terminal themes — 18 new themes including Catppuccin, Gruvbox, Tokyo Night, Rosé Pine, Kanagawa, Synthwave '84 and more
  • Terminal search — Cmd+F or tap the search icon to search terminal output with inline expanding search bar
  • Face ID lock — Biometric authentication to protect terminal sessions
  • Hardware keyboard shortcuts — Cmd+T (new session), Cmd+W (kill), Cmd+1-9 (switch), Cmd+\ (cycle layouts), Cmd+K (clear)
  • Swipe arrow keys — Swipe on terminal for arrow key input with haptic feedback
  • iPadOS multi-window — Open sessions in separate Stage Manager windows via context menu
  • Light mode support — Full appearance mode (System/Dark/Light) with adaptive chrome, keyboard and toolbar
  • iOS 26 native feel — Liquid Glass effects, symbol animations, content transitions, haptic feedback throughout
  • Readable ANSI colors — Brighter blue in terminal palette for better readability on dark backgrounds
  • Polished connect screen — Inline server URL/password fields, Bonjour discovery cards, loading states
  • Improved session list — Active session highlight, empty state, multi-select delete

macOS App

  • About screen now shows correct version from Info.plist

Web Client

  • WebGL rendering enabled (was loaded but never used)
  • Toast notifications replace alert()/confirm() dialogs
  • Debounced window resize (150ms)
  • Kill confirmation modal with typed name verification
  • Settings backdrop with blur and click-to-dismiss
  • Full ARIA accessibility (roles, labels, focus trap)
  • Touch-optimized close buttons
  • Smooth theme transitions

Server

  • Session name validation (50 char max, allowed characters only)
  • Input size limits (1MB messages, 64KB terminal input)
  • Rename uniqueness check

Stability Fixes

  • Fixed connect timeout task leak on disconnect
  • Fixed WebSocket connection leak during rapid reconnect
  • Fixed multi-window callback overwrite (onSessionRemoved)
  • Fixed PaneConnection premature isConnected + URLSession leak
  • Fixed retain cycles in SplitTerminalView and IndependentTerminalView

v1.3.0

Choose a tag to compare

@alexkerber alexkerber released this 17 Feb 21:28
7d30c48

What's New

Linux Server Support

  • Run the TermAway server on any Linux distro with Node.js 18+
  • systemd service file for automatic startup
  • Install and uninstall scripts included
  • Download the TermAway-Linux-v1.3.0.tar.gz, extract, and run sudo ./install.sh

iPad Split Pane Sessions

  • Each split pane now gets its own independent WebSocket connection and session
  • Ephemeral sessions that auto-clean when the pane is closed
  • Session name routing for multi-pane output

Other Changes

  • Server handles SIGTERM for clean systemd shutdown
  • Updated website with Linux download card and support docs
  • Fixed postinstall script to work on all platforms

v1.2.0

Choose a tag to compare

@alexkerber alexkerber released this 17 Feb 10:24
1ae610f

What's New

  • App Store link — iOS app now available on the App Store
  • iPad split pane support with focus indicator settings
  • Support page for App Store compliance
  • Website improvements — light mode, Astro framework, Vercel deployment
  • Redesigned settings UI with update checker
  • Various bug fixes and reliability improvements

v1.1.4

Choose a tag to compare

@alexkerber alexkerber released this 21 Jan 12:01
655470c

What's New

Redesigned Settings

  • New tabbed settings window with modern macOS design
  • Organized settings into General, Server, and About tabs

Check for Updates

  • Added "Check for Updates" feature that works with GitHub releases
  • Available from menu bar and About tab
  • Automatically downloads the latest version

Security Improvements

  • Server password now stored securely in macOS Keychain
  • Removed plaintext password storage in UserDefaults

Bug Fixes

  • Fixed server heartbeat loop that only cleaned up one stale connection per interval
  • Fixed WebSocket reconnection to use exponential backoff (2s → 4s → 8s → max 30s)
  • Fixed memory leak from URLSession not being stored
  • Fixed client count display inconsistency
  • Fixed potential zombie Node.js processes on server stop
  • Improved Node.js discovery with which node fallback

Full Changelog

v1.1.3...v1.1.4

v1.1.3

Choose a tag to compare

@alexkerber alexkerber released this 12 Jan 12:17
a3db330

Security Hardening

  • Timing-safe password comparison - Prevents timing attacks on authentication
  • Rate limiting - Max 5 auth attempts per minute per IP to prevent brute force
  • Session-only password storage - Web client now uses sessionStorage (clears on tab close)

Bug Fixes

  • Fix terminal scroll jumping - iOS terminal no longer jumps when typing in a full screen

Reliability

  • Clear heartbeat interval on server shutdown
  • Add 1MB clipboard size limit to prevent memory exhaustion
  • Clear iOS terminal output callback on cleanup

Code Quality

  • Remove dead code and consolidate duplicates