Skip to content

feat: iPhone/iPad app, trusted devices, end-to-end encryption; v0.0.14 - #22

Merged
codejunction merged 2 commits into
mainfrom
feature/iphone-app
Oct 11, 2026
Merged

codejunction merged 2 commits into
mainfrom
feature/iphone-app

Conversation

@codejunction

Copy link
Copy Markdown
Owner

Release 0.0.14.

What's new

  • iPhone and iPad app (ios/): native SwiftUI, built and installed from Windows + WSL with xtool and a free Apple ID.
    • Tabs: Terminals (SwiftTerm, with agent states), System, Schedule (jobs and tasks), Scratchpad, Settings (several PCs, alert sounds).
    • On iPad: a sidebar with up to four tiled terminals, like the web UI.
    • Setup, scripts, and how to install it for someone else: ios/README.md.
  • Trusted devices: after one approved share, the app finds every later share by itself. The share address arrives through ntfy.sh, sealed with AES-256-GCM. Devices are listed and revocable in the Devices page, and a new one raises an alert. Trusted PCs sync between iPhone and iPad through iCloud Keychain.
  • End-to-end encryption for the app: the PC's public key is in the share QR's # fragment. All app traffic goes through one X25519 + AES-256-GCM channel (/e2e), so Cloudflare and Wi-Fi only see ciphertext.
  • Matching 4-digit code on share approval: web, CLI and app.

Fixes

  • The login cookie is Secure through the tunnel, and those responses send HSTS.
  • The share QR code is no longer cut off.
  • sd restart can no longer leave a second server running: shutdown waits at most 5 seconds, and there's a supervisor PID guard.

Checks

  • 167 tests pass, and ruff is clean.
  • CI passed on the branch (all jobs).
  • The iOS app was built and installed on an iPhone (iOS 27) and an iPad (iPadOS 26.5).
  • A Swift (swift-crypto) copy of the app's handshake and Python's e2e.Session were checked against each other in both directions.
  • Screenshots come from a demo shelldeck with made-up data.

- ios/: SwiftUI app (xtool, free Apple ID): terminals via SwiftTerm, agents, system, schedule, scratchpad; iPad split view + tiled panes
- e2e.py + /e2e: X25519 + AES-GCM channel, key pinned from share QR fragment; Cloudflare sees ciphertext only
- trusted devices: skip share approval, URL relayed encrypted via ntfy.sh (relay.py); Devices view lists + revokes, toast on add
- share approval shows matching 4-digit code (web, CLI, app)
- fix: Secure session cookie + HSTS through tunnel; QR svg scales (was clipped)
- fix: bounded graceful shutdown + supervisor pid guard (sd restart spawned a 2nd server)
- ios/README.md + scripts: WSL setup, USB bridge via Apple Devices, install, ipa
- docs: README iOS/iPad section + screenshots (demo data), security notes; CHANGELOG; CLAUDE.md
- ios: iPad pane grid + split views, iCloud Keychain PCs keyed by e2e key, reuse trust (/api/trusted/me), revoked-trust message, label polish
- ios/README: Developer Mode steps, iPhone+iPad sharing
@codejunction
codejunction merged commit accdec3 into main Oct 11, 2026
10 checks passed
@codejunction
codejunction deleted the feature/iphone-app branch October 11, 2026 20:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant