Installation
Install graith and the gr CLI.
The binary’s called gr.
Install
macOS upgrade and uninstall
Normal Homebrew and tarball upgrades preserve service registrations. The new
CLI validates and caches its matching signed app before a preserved restart;
registration moves to that generation only while the job is down. If an older
release cannot read newer persisted state, the existing state-version guard
stops the downgrade and gr doctor lists the state backup to restore.
Before uninstalling, remove all per-user registrations while the signed package is still available:
gr daemon service status --all-profiles
gr daemon service remove --all-profiles
brew uninstall graith # or remove the tarball files
Removal preserves all user data. Homebrew has no supported pre-uninstall hook,
so it cannot do the logged-in user’s Service Management cleanup automatically.
If the package was removed first, reinstall the same or a newer signed release
and run gr daemon service repair, then remove --all-profiles. Do not use a
wildcard launchctl command: named profiles are independent exact jobs and an
unknown live job is intentionally quarantined.
Native stable and graith-dev releases
The normal stable release and moving dev release use the isolated libghostty
backend on macOS arm64 and Linux amd64/arm64. Intel macOS is unsupported: new
stable and dev releases do not publish a Darwin amd64 archive, and Homebrew
stops with an unsupported-platform error instead of selecting another backend.
Assets attached to historical releases remain unchanged.
For stable installations, Homebrew and the package repositories select the
matching graith_<version>_darwin_arm64.tar.gz or Linux tar/deb/rpm/apk asset.
For the moving channel, Homebrew selects versioned dev assets such as
graith-dev_<dev-version>_darwin_arm64.tar.gz,
graith-dev_<dev-version>_linux_amd64.tar.gz, or
graith-dev_<dev-version>_linux_arm64.tar.gz for those native targets. Each
native archive contains its final executable, normal release metadata,
executable-bound libghostty-native.spdx.json, and
THIRD_PARTY_NOTICES.libghostty.md. Stable Linux deb/rpm/apk packages carry the
same executable bytes and native evidence. The matching checksum file binds
every archive/package, and GitHub build provenance can be verified after
download:
archive=graith-dev_<dev-version>_linux_amd64.tar.gz
checksums=graith-dev_<dev-version>_checksums.txt
gh attestation verify "$archive" --repo d0ugal/graith
grep " ${archive}$" "$checksums" > archive-checksum.txt
test "$(wc -l < archive-checksum.txt)" -eq 1
sha256sum --check archive-checksum.txt
For a stable download, substitute its exact filename, for example
graith_0.70.0_linux_amd64.tar.gz, and use the stable checksums.txt; the same
attestation and checksum commands apply. Verify a downloaded deb/rpm/apk by
selecting its exact line from the same stable checksums.txt.
Use graith-dev_<dev-version>_linux_arm64.tar.gz on arm64. The release
workflow builds each Linux artifact from the exact pinned Ghostty/Zig dependency
unit on Linux, compares the executable across tar/deb/rpm/apk, and executes
those final bytes on the target architecture before publication. Stable releases
remain drafts until the complete same-revision set, checksums, provenance,
configured signing, and downstream metadata have been prepared and validated.
The complete GitHub release is exposed before that metadata is pushed, so its
URLs never point at private draft assets; interrupted channel pushes are safe to
retry.
After restarting the dev daemon, verify the selected canary without relying
on a live helper process:
gr-dev doctor
gr-dev doctor --json | jq -r .terminal_backend
Every supported stable/dev artifact reports libghostty-helper. See
Troubleshooting
for the matching startup and failure log records.
The dev and stable releases do not publish separately named rollback archives. Persistent scrollback remains backend-neutral, so a fresh native start, upgrade from an older release, or native-to-native upgrade needs no state conversion. On macOS, remove the relevant service registration before uninstalling its package as described above.
Shell completion
# bash
source <(gr completion bash)
# zsh
gr completion zsh > "${fpath[1]}/_gr"
# fish
gr completion fish | source
# powershell
gr completion powershell | Out-String | Invoke-Expression
Verify
gr version
gr doctor # health checks, verifies dependencies
gr doctor --autofix fixes common issues: truncates oversized logs, cleans stale PID files, and removes orphaned worktrees.