LoadWave
Getting started

Installation

Install LoadWave with go install, from a release archive, or build it from source. One self-contained binary with the dashboard inside it.

Every LoadWave install is one executable with the dashboard embedded in it. There is no agent package, no server component and no database — the same file runs a test, coordinates a fleet, and serves the UI.

With go install

go install github.com/SnowyFoxStudios/LoadWave/cmd/loadwave@latest

Needs Go 1.26 or later. The binary lands in $(go env GOPATH)/bin, so make sure that is on your PATH.

From a release archive

Download from Releases. Every archive is one self-contained executable — extract it and put it wherever you keep local binaries.

From source

Building from source needs Go 1.26+ and Node 26+, because the dashboard is a React application compiled and then embedded into the Go binary.

git clone https://github.com/SnowyFoxStudios/LoadWave.git
cd LoadWave
make build      # ./bin/loadwave

make build runs the frontend build first and then compiles the Go binary around it. Running go build ./cmd/loadwave on its own produces a working binary too, but it embeds a placeholder where the dashboard should be, and the server will tell you so when you open it. That is deliberate: contributors working only on Go never need a Node toolchain.

Check it worked

loadwave version

Then, for a real end-to-end check that needs nothing else installed and no service to point at:

loadwave demo --duration 30s --headless

That starts a small target server inside the same process, runs a two-scenario test against it and prints a report. If that works, the whole path — coordinator, agent, worker processes, merged metrics, thresholds — works.

What you will need in production

Nothing else, for a single-machine run. Two things are worth setting up before a large or distributed one:

  • Raise the file descriptor limit. Every connection is a descriptor and the default will bite long before the CPU does: ulimit -n 65535.
  • Run NTP on every load host. Metric buckets are aligned to the wall clock so that nodes agree on what a given second means. See Distributed runs.

Next

On this page