p99 is a latency profiler focused on tail latency.
It helps answer:
Where is time actually going, and how bad is the tail?
p99 can probe HTTP endpoints, report latency percentiles, retain slow request samples, compare saved runs, inspect Go runtime signals, capture pprof profiles, and analyze OpenTelemetry-style span JSON.
The main signals are percentiles and distributions, not averages. The CLI reports p50, p90, p95, p99, p999, max latency, error rate, and error classes.
Install the latest release binary:
curl -fsSL https://raw.githubusercontent.com/Justin-Arnold/p99/main/scripts/install.sh | shWith Go:
go install github.com/Justin-Arnold/p99/cmd/p99@latestFrom a local checkout:
go build ./cmd/p99With Nix:
nix run github:Justin-Arnold/p99 -- help
nix build github:Justin-Arnold/p99As a flake input on NixOS or nix-darwin:
{
imports = [ inputs.p99.nixosModules.default ];
programs.p99 = {
enable = true;
enableCompletions = true;
};
}For nix-darwin, use inputs.p99.darwinModules.default.
Probe an endpoint:
p99 http https://api.example.com/users/123Probe with load and save a run file:
p99 http --rps 100 --duration 2m --concurrency 20 --output run.json https://api.example.com/searchProbe a weighted mix of complex requests:
p99 http --request-spec requests.yaml --seed 123 --duration 2m --output run.jsonRead a saved run:
p99 report run.jsonCompare two saved runs:
p99 compare before.json after.json --max-p99-regression 20%Print build information:
p99 versionInstall shell completion:
p99 completion zsh > ~/.zsh/completions/_p99Watch a live endpoint:
p99 watch --rps 50 --window 5s https://api.example.com/searchAnalyze spans:
p99 spans traces.jsonThe full documentation lives in the GitHub Wiki. The source pages are kept in wiki/ so they can be reviewed and versioned with the code.
Start with wiki/Home.md, then read the command pages for detailed explanations of every command and flag. For complex POST/search workloads, see wiki/Request-Specs.md.
Run the test suite:
go test ./...Run Nix checks:
nix flake check --all-systems --no-build