cmux/README.md
2026-01-28 02:38:24 -08:00

51 lines
1.8 KiB
Markdown

# cmuxterm
Vertical tabs for Ghostty on macOS, built on libghostty.
[![Download macOS](https://img.shields.io/badge/Download-macOS-1b5fdd?style=for-the-badge&logo=apple)](releases/latest/download/cmuxterm-macos.dmg)
## 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 `cmuxterm-macos.dmg` to the release.
## Auto updates
cmuxterm uses Sparkle with the same update UI flow as upstream Ghostty. The app looks for
an appcast at:
```
https://github.com/manaflow-ai/cmuxterm/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:
```bash
./scripts/sparkle_generate_keys.sh
```
For manual appcast generation (uses `SPARKLE_PRIVATE_KEY`):
```bash
SPARKLE_PRIVATE_KEY=... ./scripts/sparkle_generate_appcast.sh cmuxterm-macos.dmg vX.Y.Z appcast.xml
```
### Required GitHub secrets
- `APPLE_CERTIFICATE_BASE64`: Base64-encoded Developer ID Application .p12
- `APPLE_CERTIFICATE_PASSWORD`: Password for the .p12
- `APPLE_SIGNING_IDENTITY`: e.g. `Developer ID Application: Your Name (TEAMID)`
- `APPLE_ID`: Apple ID used for notarization
- `APPLE_APP_SPECIFIC_PASSWORD`: App-specific password for the Apple ID
- `APPLE_TEAM_ID`: Apple Developer Team ID
- `SPARKLE_PUBLIC_KEY`: Sparkle EdDSA public key for update verification
- `SPARKLE_PRIVATE_KEY`: Sparkle EdDSA private key for appcast signing