- ✨ Click Launch ✨
Click Launch is a desktop application that streamlines your local development workflow. Instead of manually starting multiple services (databases, web servers, APIs, etc.) with different commands and arguments, you configure them once in a YAML file and launch everything with a single click.
⬇️ Download ClickLaunch 3.0.1 for macOS
- Click to launch: Start your entire dev stack instantly
- Visual interface: GUI for starting, stopping, and monitoring processes
- Flexible configuration: YAML-based setup with customizable arguments
- Process monitoring: Real-time status, logs, and runtime tracking
- Argument types: Toggle switches, dropdowns, and text inputs
- Environment variables: Set custom env vars per process, editable before launch, merged with system environment
- Auto-restart: Automatically restart crashed processes with configurable retry limits
- Process grouping: Organize processes into collapsible groups with per-group start/stop
- Resource monitoring: Real-time CPU and memory usage per process, with historical charts
- Log export: Export process logs as plain text files for sharing or debugging
- Settings panel: Customize theme, log buffer, notifications, grouping, and resource monitor display
| Homepage | Dashboard | Log Drawer |
|---|---|---|
![]() |
![]() |
![]() |
- Click the download link above (or grab it from the Releases page)
- Double-click the DMG to open it
- Drag
ClickLaunch.apponto theApplicationsfolder shortcut - Launch ClickLaunch from Applications or Spotlight
ClickLaunch is signed with an Apple Developer ID and notarized, so it should launch without any Gatekeeper warning on first run.
Create a config.yml file in your project directory to define your development stack. The configuration follows this structure:
| YAML Path | Type | Required | Description | Example |
|---|---|---|---|---|
project_name |
string |
✅ | Display name for your project | "My Dev Stack" |
processes |
array |
✅ | List of processes to manage (min: 1) | See process structure below |
| YAML Path | Type | Required | Description | Example |
|---|---|---|---|---|
processes[].name |
string |
✅ | Display name for the process | "Web Server" |
processes[].base_command |
string |
✅ | Base command to execute | "npm start" |
processes[].group |
string |
❌ | Group name for organizing processes | "Backend" |
processes[].cwd |
string |
❌ | Working directory for the process (relative to config file or absolute) | "./packages/api" |
processes[].env |
object |
❌ | Custom environment variables | See env config below |
processes[].env_file |
string |
❌ | Path to a .env file (relative to cwd or absolute) |
".env" |
processes[].restart |
object |
❌ | Auto-restart configuration | See restart config below |
processes[].args |
array |
❌ | List of configurable arguments | See argument types below |
Define custom environment variables for each process. These are merged with the system environment, with your custom values taking precedence.
processes:
- name: "API Server"
base_command: "pnpm start"
env:
NODE_ENV: development
DEBUG: "api:*"
DATABASE_URL: "postgres://localhost:5432/mydb"Rules:
envfield is optional- If present, must be an object with string keys and string values
- Empty string values are allowed (useful for declaring a variable exists)
- Values override any existing system environment variables with the same name
Load environment variables from a .env file. The file path is resolved relative to the process's working directory (cwd). Variables from the env file are loaded first, then any explicit env values override them.
processes:
- name: "API Server"
base_command: "pnpm start"
cwd: "./packages/api"
env_file: ".env"
env:
NODE_ENV: development # overrides .env value if presentSupported .env format:
KEY=VALUEpairs, one per line- Lines starting with
#are comments - Blank lines are ignored
- Quoted values are unquoted (
"hello world"→hello world) export KEY=VALUEsyntax is supported
Precedence (highest to lowest):
- Explicit
envvalues (from YAML config, editable in UI) .envfile values- System environment variables
Add an optional group field to organize processes into collapsible groups. Processes sharing the same group are displayed together with Start All / Stop All controls. Ungrouped processes appear in an "Other" section.
processes:
- name: "PostgreSQL"
group: "Infrastructure"
base_command: "docker compose up postgres"Configure automatic restart behavior for processes that crash unexpectedly.
| YAML Path | Type | Required | Default | Description |
|---|---|---|---|---|
restart.enabled |
boolean |
✅ | - | Enable/disable auto-restart |
restart.max_retries |
number |
❌ | 3 |
Max consecutive restart attempts before giving up |
restart.delay_ms |
number |
❌ | 1000 |
Delay in milliseconds before restarting |
restart.reset_after_ms |
number |
❌ | 3.0.1 |
Reset retry counter if process runs longer than this |
Behavior:
- Processes that exit with code
0(clean exit) are not restarted - Manually stopped processes are not restarted
- The retry counter resets if the process runs successfully for longer than
reset_after_ms - When max retries are exceeded, the process shows a "Crashed" status
| YAML Path | Type | Required | Description | Example |
|---|---|---|---|---|
args[].type |
string |
✅ | Argument type: toggle, select, or input |
"toggle" |
args[].name |
string |
✅ | Display name in UI | "Watch Mode" |
args[].default |
any |
✅ | Default value (type depends on arg type) | true, "development", "3000" |
| YAML Path | Type | Required | Description | Example |
|---|---|---|---|---|
args[].values |
array |
✅ | Exactly 2 values: one for true, one for false |
See toggle example |
args[].values[].value |
boolean |
✅ | Must be true or false |
true |
args[].values[].output |
string |
❌ | Command line output (can be empty) | "--watch" |
| YAML Path | Type | Required | Description | Example |
|---|---|---|---|---|
args[].values |
array |
✅ | List of options (min: 2) | See select example |
args[].values[].value |
string |
✅ | Option value | "development" |
args[].values[].output |
string |
❌ | Command line output (can be empty) | "--env=development" |
| YAML Path | Type | Required | Description | Example |
|---|---|---|---|---|
args[].output_prefix |
string |
❌ | Prefix added to user input | "--port" |
project_name: "Development Services"
processes:
- name: "Web Server"
group: "Frontend"
base_command: "pnpm start"
env_file: ".env"
restart:
enabled: true
max_retries: 3
delay_ms: 1000
reset_after_ms: 3.0.1
args:
- type: "toggle"
name: "Arg1"
values:
- value: true
output: "--arg1"
- value: false
output: ""
default: true
- type: "select"
name: "Environment"
values:
- value: "development"
output: "--env=development"
- value: "staging"
output: "--env=staging"
- value: "production"
output: "--env=production"
default: "development"
- type: "input"
name: "Port"
default: "3000"
output_prefix: "--port"
- type: "input"
name: "Additional args"
default: ""
output_prefix: ""Notes:
- For input arguments, set
output_prefix: ""if you want the raw value without any prefix. - The
restartconfiguration is optional. Processes without it will show "Crashed" status on non-zero exit.
Click the cog icon in the navigation bar to open the settings panel. Changes are applied instantly and persisted across sessions.
| Setting | Type | Default | Description |
|---|---|---|---|
| Theme | Toggle | Nord | Switch between Nord (light) and Forest (dark) themes |
| Show grouping | Toggle | On | Show processes in collapsible groups or as a flat list |
| Show resource monitor | Toggle | On | Show or hide CPU/memory usage columns |
| Show timestamps | Toggle | On | Show or hide the timestamp prefix on each log line |
| Log buffer size | Number | 10000 | Maximum log lines kept per process (100-50,000) |
| Show notifications | Toggle | On | Enable or suppress toast notifications |
| History duration (min) | Number | 15 | Minutes of resource history to retain per process (1-120) |
- Open Click Launch
- Load your config: File → Open config file
- Configure arguments: Adjust toggles, dropdowns, and inputs as needed
- Launch processes: Click the play button next to each service
- Monitor: View real-time logs and runtime information
- Stop when done: Use stop buttons or close the app
Press ⌘ + / while the log drawer is open to display the keyboard shortcuts reference.
| Shortcut | Description |
|---|---|
⌘ + / |
Show keyboard shortcuts |
⌘ + F |
Focus search input |
Escape |
Close shortcuts modal or drawer |
Enter |
Next search result |
Shift + Enter |
Previous search result |
- Fork the repository
- Create a feature branch
- Make your changes
- Run tests and quality checks
- Submit a pull request
See CONTRIBUTING.md for detailed guidelines.
This project is licensed under the MIT License - see the LICENSE file for details.
- Issues: GitHub Issues
- Discussions: GitHub Discussions


