1.8 KiB
1.8 KiB
cmux
Vertical tabs for Ghostty on macOS, built on libghostty.
Releases
Tag a version like v0.1.0 and push it to trigger the GitHub Actions release workflow.
The workflow builds GhosttyKit.xcframework, builds the Release app, signs, notarizes,
staples, and uploads cmux-macos.dmg to the release.
Auto updates
cmux uses Sparkle with the same update UI flow as upstream Ghostty. The app looks for an appcast at:
https://github.com/manaflow-ai/GhosttyTabs/releases/latest/download/appcast.xml
To sign updates, set these secrets for release builds:
SPARKLE_PUBLIC_KEY: Sparkle EdDSA public key (embedded in the app).SPARKLE_PRIVATE_KEY: Sparkle EdDSA private key (used when generating appcasts).
You still need to generate and upload appcast.xml alongside each release asset.
To generate keys locally (stores the private key in your Keychain and appends values
to .env), run:
./scripts/sparkle_generate_keys.sh
For manual appcast generation (uses SPARKLE_PRIVATE_KEY):
SPARKLE_PRIVATE_KEY=... ./scripts/sparkle_generate_appcast.sh cmux-macos.dmg vX.Y.Z appcast.xml
Required GitHub secrets
APPLE_CERTIFICATE_BASE64: Base64-encoded Developer ID Application .p12APPLE_CERTIFICATE_PASSWORD: Password for the .p12APPLE_SIGNING_IDENTITY: e.g.Developer ID Application: Your Name (TEAMID)APPLE_ID: Apple ID used for notarizationAPPLE_APP_SPECIFIC_PASSWORD: App-specific password for the Apple IDAPPLE_TEAM_ID: Apple Developer Team IDSPARKLE_PUBLIC_KEY: Sparkle EdDSA public key for update verificationSPARKLE_PRIVATE_KEY: Sparkle EdDSA private key for appcast signing