* Rename cmuxterm to cmux across entire codebase - Rename GitHub repos: manaflow-ai/cmuxterm -> manaflow-ai/cmux, manaflow-ai/homebrew-cmuxterm -> manaflow-ai/homebrew-cmux - Rename bundle IDs: com.cmuxterm.app -> com.cmux.app - Rename CLI: CLI/cmuxterm.swift -> CLI/cmux.swift - Rename homebrew submodule: homebrew-cmuxterm -> homebrew-cmux - Update all socket paths: /tmp/cmuxterm*.sock -> /tmp/cmux*.sock - Update all GitHub URLs, DMG names, Sparkle URLs - Update all source files, scripts, tests, docs, CI workflows * Bump version to 1.23.0
2.5 KiB
2.5 KiB
Contributing to cmux
Prerequisites
- macOS 14+
- Xcode 15+
- Zig (install via
brew install zig)
Getting Started
-
Clone the repository with submodules:
git clone --recursive https://github.com/manaflow-ai/cmux.git cd cmux -
Run the setup script:
./scripts/setup.shThis will:
- Initialize git submodules (ghostty, homebrew-cmux)
- Build the GhosttyKit.xcframework from source
- Create the necessary symlinks
-
Build and run the debug app:
./scripts/reload.sh
Development Scripts
| Script | Description |
|---|---|
./scripts/setup.sh |
One-time setup (submodules + xcframework) |
./scripts/reload.sh |
Build and launch Debug app |
./scripts/reloadp.sh |
Build and launch Release app |
./scripts/reload2.sh |
Reload both Debug and Release |
./scripts/rebuild.sh |
Clean rebuild |
Rebuilding GhosttyKit
If you make changes to the ghostty submodule, rebuild the xcframework:
cd ghostty
zig build -Demit-xcframework=true -Doptimize=ReleaseFast
Running Tests
Basic tests (run on VM)
ssh cmux-vm 'cd /Users/cmux/GhosttyTabs && xcodebuild -project GhosttyTabs.xcodeproj -scheme cmux -configuration Debug -destination "platform=macOS" build && pkill -x "cmux DEV" || true && APP=$(find /Users/cmux/Library/Developer/Xcode/DerivedData -path "*/Build/Products/Debug/cmux DEV.app" -print -quit) && open "$APP" && for i in {1..20}; do [ -S /tmp/cmux.sock ] && break; sleep 0.5; done && python3 tests/test_update_timing.py && python3 tests/test_signals_auto.py && python3 tests/test_ctrl_socket.py && python3 tests/test_notifications.py'
UI tests (run on VM)
ssh cmux-vm 'cd /Users/cmux/GhosttyTabs && xcodebuild -project GhosttyTabs.xcodeproj -scheme cmux -configuration Debug -destination "platform=macOS" -only-testing:GhosttyTabsUITests test'
Ghostty Submodule
The ghostty submodule points to manaflow-ai/ghostty, a fork of the upstream Ghostty project.
Making changes to ghostty
cd ghostty
git checkout -b my-feature
# make changes
git add .
git commit -m "Description of changes"
git push manaflow my-feature
Keeping the fork updated
cd ghostty
git fetch origin
git checkout main
git merge origin/main
git push manaflow main
Then update the parent repo:
cd ..
git add ghostty
git commit -m "Update ghostty submodule"
See docs/ghostty-fork.md for details on fork changes and conflict notes.