Skip to content

Repository files navigation

iGhostty

Ghostty-powered terminal for jailbroken iOS — roothide and rootless bootstraps alike — built on libghostty-spm's terminal core with a host-managed I/O backend.

The app never spawns a process. ighosttyd, a root LaunchDaemon, owns every terminal session and is the only component that can start one; the app reaches it over a mach service and is entitled to nothing else. Sessions therefore outlive the app — quitting detaches, and relaunching reattaches to the shells still running.

Layout

Path Purpose
iGhostty/ The app: main.swift, Application/, Backend/, Interface/, Resources/
iGhosttyDaemon/ ighosttyd: the only process that spawns anything
Shared/ XPC wire protocol, compiled into both targets
Packages/iGhosttyKit/ Transport layer: the TerminalTransport protocol
Configuration/ xcconfig files; Version.xcconfig is the version's home
Packaging/ Debian control, maintainer scripts, ldid entitlements
Scripts/ xcodebuild wrapper, deb packager, versioning

iGhostty.xcodeproj is checked in (objectVersion 77, folder-synchronized groups — adding a file to a synchronized folder adds it to the target). The local ../libghostty-spm checkout is referenced as a path dependency. See Documentation/ARCHITECTURE.md for the ownership and data-flow design, the jailbreak path rules, and per-window tabs.

Packaging

make deb           # unsigned iPhoneOS build, ldid ad-hoc sign, roothide .deb
make deb-rootless  # the same binaries, packaged under /var/jb
make set-version VERSION=1.2.3

Requires ldid and dpkg-deb (Homebrew). Both packages carry the same arm64 binaries and differ only in layout: the roothide one declares iphoneos-arm64e and installs /Applications/iGhostty.app, /usr/libexec/ighosttyd and the LaunchDaemon plist unprefixed, for the bootstrap to relocate into the jbroot it picked this boot; the rootless one declares iphoneos-arm64 and installs the same three paths under /var/jb. postinst bootstraps the daemon either way.

Tests

make test          # the PTY harness
make harness       # just the daemon's spawn path, on macOS

The harness covers what a device test is worst at debugging: forkpty/execve, the read loop, exit-status decoding, TIOCSWINSZ, and the path resolution of each jailbreak layout. Everything else is debugged on device: make deb and install.

About

Ghostty-powered terminal for jailbroken iOS — daemon-backed sessions that survive relaunch

Resources

Stars

56 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages