Prerequisites
Before you begin, ensure you have the following installed:- macOS - Required for Swift compilation and native integrations
- Node.js 22+ - Check your version with
node -v - npm - Comes bundled with Node.js
- Xcode Command Line Tools - Required for the Swift compiler (
swiftc) - Homebrew - Used at runtime to resolve
gitandnpmfor extension installation
System Dependencies
Install Xcode Command Line Tools
If you don’t have Xcode Command Line Tools installed:Verify Swift is available:
Getting Started
Install dependencies
electron-builder install-app-deps automatically via the postinstall hook.Build native modules
dist/native/:color-picker- Native macOS color pickersnippet-expander- Text snippet expansionhotkey-hold-monitor- Global hotkey detectionspeech-recognizer- Speech-to-text recognizermicrophone-access- Microphone permission helperinput-monitoring-request- Input monitoring permission helperwindow-adjust- Window management utilities
macOS Permissions
SuperCmd requires several macOS permissions to function properly. You’ll be prompted on first use:| Permission | Why | Required for |
|---|---|---|
| Accessibility | Window management, keystroke injection | Window tiling, snippet expansion |
| Input Monitoring | Global hotkey detection | Hold-to-speak, launcher shortcut |
| Microphone | Voice dictation (speech-to-text) | Optional — voice features |
| Automation (AppleScript) | Selected text capture, system automation | Extension actions |
You may need to restart the app after granting permissions. If features don’t work, check System Settings → Privacy & Security.
Development Workflow
Making Changes
-
Make your changes in the appropriate directory:
src/main/- Electron main processsrc/renderer/- React UI and Raycast API shimssrc/native/- Swift native helpers
- The dev server will hot-reload renderer changes automatically
- Main process changes require restarting the Electron app
-
Native module changes require running
npm run build:nativeagain
Testing Extensions
When working on the Raycast API compatibility layer:- Test with popular Raycast extensions from the store
- API shims are in
src/renderer/src/raycast-api/ - Reference the Raycast API docs
- See CLAUDE.md for the complete API implementation status
Troubleshooting
swiftc: command not found
swiftc: command not found
Run
xcode-select --install and restart your terminal. Verify with swiftc --version.npm install fails on native modules
npm install fails on native modules
Ensure Xcode Command Line Tools are installed and up to date:
App launches but hotkeys don't work
App launches but hotkeys don't work
Grant Input Monitoring permission (not just Accessibility) in System Settings → Privacy & Security and restart the app.
Window management doesn't work
Window management doesn't work
Grant Accessibility permission. The
window-adjust.swift module checks AXIsProcessTrusted().Extensions fail to install
Extensions fail to install
Verify Homebrew is installed with
brew --version. SuperCmd needs Homebrew-resolved git to clone extensions from GitHub.node-gyp build errors
node-gyp build errors
Check your Node.js version with
node -v — requires 22+. Try deleting node_modules and running npm install again.Apple Silicon (M1/M2/M3/M4) issues
Apple Silicon (M1/M2/M3/M4) issues
Ensure you’re running the arm64 version of Node.js, not the x64 version via Rosetta. Check with:Should output
arm64.Native features missing after npm run dev
Native features missing after npm run dev
Run
npm run build:native first. The dev script doesn’t compile Swift binaries automatically.Next Steps
- Learn about the project architecture
- Understand build commands and packaging
- Read the contributing guidelines