One Go binary · one TOML file · plain SSH

Run shell commands on a pile of servers, in parallel, and watch it happen.

gorun takes the commands you already type, runs them on every server at once, and shows each server's progress live, in your terminal or your browser. Nothing to install on the servers.

curl -fsSL https://raw.githubusercontent.com/jenmud/gorun/master/scripts/install.sh | sh

42 servers, 324 tasks, one deliberate failure, about fifteen seconds.

0agents on your servers
1static binary
∥every server at once
100%plain shell you can copy

How it works

Three steps. If you can write the command, you can run it everywhere.

1

Write tasks

A task is a shell command or script in a Gorunfile. Add dependencies, timeouts, retries, sudo, templates and secrets from your environment when you need them.

2

Say who runs what

List servers, put them in groups and tag them. Groups and bundles share task lists, so a hundred servers stay one readable file.

3

Pick and run

gorun Gorunfile opens a picker. Choose servers, check their tasks, press enter, and watch every server work at once.

[tasks.update]
cmd  = "apt-get update && apt-get upgrade -y"
sudo = true

[servers]
tasks = ["update"]

[servers.hosts.web-1]
hostname = "web-1.example.com"
    [servers.hosts.web-1.ssh]
    username = "deploy"
# check the plan, then run it
$ gorun Gorunfile --list-servers
$ gorun Gorunfile

# no picker: scripts, cron and CI
$ gorun Gorunfile --run --plain --tag prod

# the same, in a browser
$ gorun -web Gorunfile

Why gorun

Plain commands

A task is a shell command. When something breaks, copy it and run it by hand. --dump-tasks writes every task out as a runnable script.

Parallel by default

Every selected server runs at the same time. A failure stops that server, never the others, and the run exits non-zero.

Nothing runs by accident

You pick servers and tasks in a picker first, untick anything you don't want, and every task has a timeout.

Grows with you

Dependencies, bundles, server groups, tags, templates with per-task variables, file copies, retries and include for large fleets.

Remembers

Every run is saved with its commands, exit codes and output, to browse later in the terminal or the web UI.

Terminal or browser

A fast TUI for operators and a live web dashboard for everyone else, both fed by the same engine and events.

Terminal and web, same engine

Use whichever fits the moment. Runs started from the terminal show up live in the web dashboard too.

The picker

Fuzzy-filter servers, groups and tags, check each server's task pipeline, then run.

The web dashboard

gorun -web ticks servers, starts runs and streams progress live.

See every demo →

When to use something else

gorun runs commands; it doesn't enforce state. It has no modules, facts, drift detection, dry runs, dynamic inventories or secrets vault. If you need those, reach for Ansible, Salt, Puppet or Nix. If you need to run the same commands on many machines and see what happened, gorun is the short path.

Open the playground