- macOS 14+
- Xcode 15+
- Zig (install via
brew install zig)
-
Clone the repository with submodules:
git clone --recursive https://github.com/manaflow-ai/cmux.git cd cmux -
Run the setup script:
./scripts/setup.sh
This 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
| 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 |
If you make changes to the ghostty submodule, rebuild the xcframework:
cd ghostty
zig build -Demit-xcframework=true -Doptimize=ReleaseFastssh 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'ssh cmux-vm 'cd /Users/cmux/GhosttyTabs && xcodebuild -project GhosttyTabs.xcodeproj -scheme cmux -configuration Debug -destination "platform=macOS" -only-testing:cmuxUITests test'The ghostty submodule points to manaflow-ai/ghostty, a fork of the upstream Ghostty project.
cd ghostty
git checkout -b my-feature
# make changes
git add .
git commit -m "Description of changes"
git push manaflow my-featurecd ghostty
git fetch origin
git checkout main
git merge origin/main
git push manaflow mainThen 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.
By contributing to this repository, you agree that your contributions are licensed under the project's GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later).