SwitchShuttle is a powerful cross-platform system tray application that revolutionizes how you manage and execute terminal commands. Built with modern technologies (Rust + Tauri + Vue.js), it provides a sleek interface for organizing, customizing, and quickly accessing your most-used terminal operations.
- π₯οΈ Multi-Platform Support - Works seamlessly on macOS, Windows, and Linux
- β‘ Global Hotkeys - Execute commands instantly from anywhere with keyboard shortcuts
- π¨ Multiple Terminal Support - iTerm, Terminal, Warp, Alacritty, Hyper, and more
- π Smart Organization - Create nested submenus for better command organization
- π§ Dynamic Inputs - Interactive prompts for commands that need user input
- π Multiple Execution Modes - Run in current window, new tab, or new window
- π Auto-Start - Launch at system startup for instant access
- π¨ Modern UI - Beautiful, intuitive interface built with Vue.js
# Install via Homebrew
brew tap s00d/switchshuttle
brew install --cask switchshuttle
- Download the latest release for your platform from GitHub Releases
- Install the application
- Launch SwitchShuttle - it will appear in your system tray
- Right-click the tray icon to access the menu
- Edit Config β Opens your configuration file in your default editor
- Add your commands using the JSON format (see examples below)
- Save and restart the application
- Enjoy your organized command shortcuts!
SwitchShuttle uses JSON configuration files stored in:
- macOS/Linux:
~/.config/switch-shuttle/
- Windows:
C:\Users\<Username>\AppData\Roaming\switch-shuttle\
{
"terminal": "iterm",
"launch_in": "new_tab",
"title": "My Commands",
"commands": [
{
"name": "π Start Development Server",
"command": "npm run dev",
"hotkey": "Ctrl+Shift+D"
},
{
"name": "π¦ Install Dependencies",
"command": "npm install",
"hotkey": "Ctrl+Shift+I"
},
{
"name": "π§ Development Tools",
"submenu": [
{
"name": "π§ͺ Run Tests",
"command": "npm test",
"hotkey": "Ctrl+Shift+T"
},
{
"name": "π Build Project",
"command": "npm run build",
"hotkey": "Ctrl+Shift+B"
}
]
}
]
}
Create interactive commands that prompt for user input:
{
"name": "π Create New Component",
"inputs": {
"componentName": "MyComponent",
"componentType": "functional"
},
"commands": [
"mkdir -p src/components/[componentName]",
"touch src/components/[componentName]/index.tsx",
"echo 'import React from \"react\";' > src/components/[componentName]/index.tsx",
"echo 'export const [componentName] = () => <div>[componentName]</div>;' >> src/components/[componentName]/index.tsx"
],
"hotkey": "Ctrl+Shift+N"
}
Execute a sequence of commands:
{
"name": "π Full Development Cycle",
"commands": [
"git pull origin main",
"npm install",
"npm run lint",
"npm run test",
"npm run build"
],
"hotkey": "Ctrl+Shift+F"
}
Organize commands in hierarchical menus:
{
"name": "π³ Docker Operations",
"submenu": [
{
"name": "π Start Services",
"submenu": [
{
"name": "ποΈ Development",
"command": "docker-compose -f docker-compose.dev.yml up -d"
},
{
"name": "π Production",
"command": "docker-compose -f docker-compose.prod.yml up -d"
}
]
},
{
"name": "π Stop All",
"command": "docker-compose down"
}
]
}
Parameter | Type | Description | Default |
---|---|---|---|
terminal |
String | Terminal application to use | "terminal" |
launch_in |
String | Where to launch commands | "current" |
theme |
String | Terminal theme (if supported) | - |
title |
String | Window/tab title | - |
menu_hotkey |
String | Global hotkey to open menu | - |
commands |
Array | List of command configurations | [] |
Terminal | macOS | Windows | Linux |
---|---|---|---|
iterm |
β | β | β |
terminal |
β | β | β |
warp |
β | β | β |
alacritty |
β | β | β |
hyper |
β | β | β |
Mode | Description |
---|---|
current |
Execute in current terminal window |
new_tab |
Open new tab and execute |
new_window |
Open new window and execute |
Parameter | Type | Required | Description |
---|---|---|---|
name |
String | β | Display name for the command |
command |
String | β | Single command to execute |
commands |
Array | β | Multiple commands to execute |
submenu |
Array | β | Nested subcommands |
inputs |
Object | β | Dynamic input fields |
hotkey |
String | β | Global hotkey shortcut |
- Quick project navigation - Jump to different projects instantly
- Build and test workflows - One-click development cycles
- Docker management - Start/stop containers with hotkeys
- Git operations - Common git commands at your fingertips
- Server management - SSH connections and server commands
- Monitoring tools - Quick access to logs and metrics
- Deployment scripts - Automated deployment workflows
- Database operations - Common database commands
- Asset optimization - Image processing and optimization
- Design system tools - Component generation and updates
- Prototype servers - Quick design server startup
# Clone the repository
git clone https://github.com/s00d/switchshuttle.git
cd switchshuttle
# Install dependencies
npm install
# Development mode
npm run tauri dev
# Build for production
npm run tauri build
# If you encounter signing issues
chmod +x /Applications/switch-shuttle.app
xattr -cr /Applications/switch-shuttle.app
codesign --force --deep --sign - /Applications/switch-shuttle.app
We welcome contributions! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
- Follow the existing code style
- Add tests for new features
- Update documentation as needed
- Ensure cross-platform compatibility
This project is licensed under the MIT License - see the LICENSE file for details.
- Inspired by the original Shuttle project
- Built with Tauri for cross-platform desktop apps
- UI powered by Vue.js
- Issues: GitHub Issues
- Releases: GitHub Releases
Made with β€οΈ by the SwitchShuttle community
β Star this repository if you find it useful!