Ghostty-based macOS terminal with vertical tabs and notifications for AI coding agents https://cmux.com
Find a file
2026-01-28 03:12:50 -08:00
.github/workflows Rename app to cmuxterm 2026-01-28 02:38:24 -08:00
Assets.xcassets Add dev build branding and reload scripts 2026-01-28 01:20:48 -08:00
ghostty@ef19290456 Fix focus when switching tabs 2026-01-22 15:53:35 -08:00
GhosttyTabs.xcodeproj Ensure tab focus owns key input 2026-01-28 03:12:50 -08:00
GhosttyTabsUITests Improve update UI error details 2026-01-28 01:49:02 -08:00
Resources/terminfo/78 Add bundled terminfo resources 2026-01-23 18:26:23 -08:00
scripts Rename app to cmuxterm 2026-01-28 02:38:24 -08:00
Sources Ensure tab focus owns key input 2026-01-28 03:12:50 -08:00
tests Rename app to cmuxterm 2026-01-28 02:38:24 -08:00
.gitignore Ignore local env, build output, and release zips 2026-01-26 02:05:03 -08:00
.gitmodules Fix focus when switching tabs 2026-01-22 15:53:35 -08:00
AGENTS.md agents 2026-01-22 03:18:02 -08:00
CLAUDE.md Rename app to cmuxterm 2026-01-28 02:38:24 -08:00
cmux-Bridging-Header.h Rename to cmux and add About panel 2026-01-26 03:05:03 -08:00
ghostty.h Initial commit: macOS terminal app with vertical tabs using libghostty 2026-01-22 01:16:24 -08:00
Package.resolved Initial commit: macOS terminal app with vertical tabs using libghostty 2026-01-22 01:16:24 -08:00
Package.swift Rename to cmux and add About panel 2026-01-26 03:05:03 -08:00
README.md Rename app to cmuxterm 2026-01-28 02:38:24 -08:00

cmuxterm

Vertical tabs for Ghostty on macOS, built on libghostty.

Download macOS

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:

./scripts/sparkle_generate_keys.sh

For manual appcast generation (uses SPARKLE_PRIVATE_KEY):

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