Quick Links
- Discord — ask questions, discuss features
- GitHub Issues — report bugs or request features
- Getting Started — initial setup guide
Core Principles
SuperCmd follows these architectural principles:- Extension Compatibility — The app must be compatible with existing Raycast extensions without requiring modifications to extension code
- Runtime Control — All changes and enhancements must be implemented in SuperCmd itself, not in extensions
- API Parity — Keep APIs in sync with
@raycast/apiand track implementation status - Progressive Enhancement — Gradually implement all Raycast APIs to achieve full parity
Development Setup
Install Prerequisites
Ensure you have the following installed:
- macOS (required — native Swift modules won’t compile on Linux/Windows)
- Node.js 22+ — check with
node -v - Xcode Command Line Tools — run
xcode-select --install - Homebrew — used at runtime to resolve
gitandnpmfor extension installation
Build Native Modules
The This compiles the Swift binaries (color picker, hotkey monitor, speech recognizer, window manager, etc.) into
dev script does not compile the Swift native helpers — you need to build them once before your first run:dist/native/.Run Development Mode
- TypeScript watch for main process
- Vite dev server for renderer
- Electron app in development mode
Making a Pull Request
Branch Naming
Use descriptive branch names with a prefix:feat/description— new featurefix/description— bug fixdocs/description— documentationchore/description— maintenance, cleanuptest/description— tests
Commit Messages
Follow Conventional Commits:PR Checklist
Before submitting your PR, verify:-
npm run buildcompletes without errors - You’ve tested your changes locally with
npm run dev - Your PR description includes: what changed, why, compatibility impact, and how you tested it
- If you modified the Raycast API shims, you’ve tested with at least one existing Raycast extension
PR Size
Working with Extensions
SuperCmd aims for compatibility with Raycast extensions. When working on the runtime:- Test against popular extensions — Calculator, Clipboard History, etc.
- Check the API docs — The shims are in
src/renderer/src/raycast-api/. Reference the Raycast API docs - Graceful degradation — If an API is not yet implemented, add a stub that logs a warning rather than throwing
Testing Extension Compatibility
Adding New API Support
When implementing a new Raycast API:Check Official Documentation
Reference the Raycast API docs for the official specification
Implement in raycast-api/
Add the API to the appropriate runtime file in
src/renderer/src/raycast-api/. See the Raycast API File Map for guidance.Bridge to Main Process (if needed)
If system-level operations are needed, add IPC handlers in
src/main/main.ts and expose them in src/main/preload.tsCode Style and Patterns
System-Level Logic
System-level logic lives insrc/main/. IPC, settings, file access, and native module bridges belong here.
UI Code
UI code lives insrc/renderer/src/. Views, hooks, and components go here.
Raycast API Compatibility
All Raycast API implementations go insrc/renderer/src/raycast-api/. Keep logic in focused runtime files and use index.tsx as an integration/export surface.
Reporting Bugs
When opening an issue, include:- macOS version
- Node.js version (
node -v) - SuperCmd version (Settings → About, or check
package.json) - Steps to reproduce
- Expected vs actual behavior
- Console logs if available (Cmd+Option+I to open DevTools)
Available Scripts
Getting Help
- Discord — Join our Discord server for real-time help
- GitHub Discussions — Ask questions in GitHub Discussions
- Documentation — Check CLAUDE.md for architecture details