Skip to content

Jessedev1/wow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WOW

Run all your dev commands in parallel with one WOW.

WOW is a lightweight CLI tool that reads a wow.json from your project root and spins up all your development processes in parallel — each with its own colored, labeled output stream. No more juggling terminal tabs.

[  WOW] 🚀 Starting My Project (4 commands)
[  WOW] ──────────────────────────────────────────────
[ Vite] ▶ npm run dev
[ Vite]   VITE v5.4.0  ready in 320 ms
[ Vite]   ➜  Local:   http://localhost:5173/
[Queue] ▶ php artisan queue:listen
[Queue]   Queue listener started successfully.
[Queue]   Processing: App\Jobs\SendEmail
[  WOW] ⏳ Expose starting in 3s...
[  Logs] ▶ tail -f storage/logs/laravel.log
[Expose] ▶ expose share http://my-domain.test
[Expose]   Expose is sharing http://my-domain.test

Installation

Prerequisites

WOW is built with Rust. If you don't have Rust installed yet:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Install WOW (clone + installer)

git clone https://github.com/jessedev1/wow.git
cd wow
./install.sh

If you get permission denied on macOS/Linux:

chmod +x install.sh
./install.sh

That's it. The wow command is now available everywhere on your machine.

Updating

cd wow
git pull
./install.sh

Uninstalling

cargo uninstall wow

Quick Start

# Navigate to your Laravel project (or any project)
cd ~/Projects/my-app

# Generate a starter config
wow init

# Edit wow.json to match your project
nano wow.json

# Run everything
wow

Usage

wow                     Start all enabled commands
wow run                 Start all enabled commands (same as above)
wow run <group>         Start only commands in a specific group
wow init                Generate a starter wow.json
wow list                Show all configured commands
wow check               Validate wow.json without starting
wow --help              Show help
wow --version           Show version

wow / wow run

Reads wow.json from the current directory and starts all enabled commands in parallel. Each command gets its own colored prefix so you can easily tell which output belongs to which process.

Press Ctrl+C to gracefully stop all processes at once.

# Start everything
wow

# Start only frontend commands
wow run frontend

# Start only backend commands
wow run backend

wow init

Creates a starter wow.json in the current directory with example commands for a typical Laravel project. Won't overwrite an existing file.

wow list

Displays all commands in a formatted table with their group, restart policy, and enabled status.

  My Project — 6 commands

  NAME        COMMAND                              GROUPS          RESTART       STATUS
  ──────────────────────────────────────────────────────────────────────────────────────
  Vite        npm run dev                          frontend        never         enabled
  Queue       php artisan queue:listen             backend         on-failure    enabled
  Expose      expose share http://my-project.test      frontend        never         enabled (3s delay)
  Mailpit     mailpit                              backend, mail   always        enabled
  Logs        tail -f storage/logs/laravel.log     backend         never         enabled
  Scheduler   php artisan schedule:work            backend         on-failure    disabled

wow check

Validates your wow.json without starting anything. Useful after editing the config to catch mistakes early.

  ✅ wow.json is valid!

  Project:   My Project
  Commands:  6 total, 5 enabled
  Groups:    backend, frontend, mail

Configuration

WOW is configured through a wow.json file in your project root.

Full example

{
  "project": "My Project",
  "commands": [
    {
      "name": "Vite",
      "cmd": "npm run dev",
      "color": "cyan",
      "group": ["frontend"]
    },
    {
      "name": "Queue",
      "cmd": "php artisan queue:listen",
      "color": "yellow",
      "group": ["backend"],
      "restart": "on-failure",
      "max_retries": 5
    },
    {
      "name": "Expose",
      "cmd": "expose share http://my-project.test",
      "color": "magenta",
      "group": ["frontend"],
      "delay": 3
    },
    {
      "name": "Mailpit",
      "cmd": "mailpit",
      "color": "green",
      "group": ["backend", "mail"],
      "restart": "always"
    },
    {
      "name": "Scheduler",
      "cmd": "php artisan schedule:work",
      "group": ["backend"],
      "enabled": false
    }
  ]
}

Minimal example

Only name and cmd are required. Everything else has sensible defaults:

{
  "commands": [
    { "name": "Vite", "cmd": "npm run dev" },
    { "name": "Queue", "cmd": "php artisan queue:listen" }
  ]
}

Reference

Project fields

Field Type Required Default Description
project string No Directory name Project name displayed at startup
commands array Yes List of commands to run

Command fields

Field Type Required Default Description
name string Yes Label shown as prefix in terminal
cmd string Yes Shell command to execute
color string No Auto-assigned Prefix color (see below)
group string[] No [] Groups for wow run <group>
delay number No 0 Seconds to wait before starting
restart string No "never" Restart policy (see below)
max_retries number No 3 Max restart attempts
enabled boolean No true Set false to skip without removing
env object No {} Extra environment variables
cwd string No Project root Working directory override

Colors

red · green · yellow · blue · magenta · cyan · white

If no color is specified, WOW assigns colors automatically in the order listed above.

Restart policies

Policy Behavior
never Don't restart. Show exit code if the process crashes.
on-failure Restart only on non-zero exit code, up to max_retries.
always Restart on any exit (including clean exit), up to max_retries.

A 1-second pause is applied between restarts to prevent tight crash loops.


Groups

Commands can belong to one or more groups. Use wow run <group> to start only commands in that group.

{
  "name": "Queue",
  "cmd": "php artisan queue:listen",
  "group": ["backend"]
}
{
  "name": "Mailpit",
  "cmd": "mailpit",
  "group": ["backend", "mail"]
}
wow run backend   # Starts Queue + Mailpit
wow run mail      # Starts Mailpit only
wow run frontend  # Starts only frontend-tagged commands
wow               # Starts everything

A command without any groups will only run when you start all commands (i.e. wow or wow run without a group name).


Tips

Delay long-starting dependencies. If a command depends on another being ready (like Expose needing the dev server), use delay to give it time:

{ "name": "Expose", "cmd": "expose share http://app.test", "delay": 3 }

Temporarily disable commands without removing them by setting enabled to false. They'll show as "disabled" in wow list but won't run.

Use env to pass secrets or flags without polluting your shell:

{ "name": "Worker", "cmd": "php artisan queue:work", "env": { "QUEUE_CONNECTION": "redis" } }

Use cwd for monorepos where commands need to run from different subdirectories:

{ "name": "API", "cmd": "php artisan serve", "cwd": "./api" },
{ "name": "Frontend", "cmd": "npm run dev", "cwd": "./frontend" }

Commit wow.json to your repo so every team member gets the same dev setup with one command.


Built With

  • Rust
  • clap — CLI argument parsing
  • tokio — Async runtime for parallel process management
  • serde — JSON deserialization
  • colored — Terminal colors

Credits

Created and maintained by Jessedev1 (jesse@codewow.nl).

License

MIT — see LICENSE.

About

CLI tool to run multiple development commands in parallel

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors