An excerpt from the repository, fetched Nov 13, 2026.
Read the project’s introduction
Vegeta
Vegeta is a versatile HTTP load testing tool built out of a need to drill
HTTP services with a constant request rate. It's over 9000!
Features
Usable as a command line tool and a Go library.
CLI designed with UNIX composability in mind.
Avoids nasty Coordinated Omission.
Extensive reporting functionality.
Simple to use for distributed load testing.
Easy to install and run (static binary, package managers, etc).
Install
Pre-compiled executables
Get them here.
macOS
You can install Vegeta using the Homebrew:
$ brew update && brew install vegeta
Or with MacPorts:
$ port install vegeta
Arch Linux
$ pacman -S vegeta
FreeBSD
On FreeBSD you can install Vegeta with the built in package manager because there is a Vegeta Package available.
$ pkg install vegeta
Source
git clone https://github.com/tsenart/vegeta
cd vegeta
make vegeta
mv vegeta ~/bin # Or elsewhere, up to you.
Versioning
Both the library and the CLI are versioned with SemVer v2.0.0.
After v8.0.0, the two components
are versioned separately to better isolate breaking changes to each.
CLI releases are tagged with cli/vMAJOR.MINOR.PATCH and published on the GitHub releases page.
As for the library, new versions are tagged with both lib/vMAJOR.MINOR.PATCH and vMAJOR.MINOR.PATCH.
The latter tag is required for compatibility with go mod.
Contributing
See CONTRIBUTING.md.
Usage manual
Usage: vegeta [global flags] <command> [command flags]
global flags:
-cpus int
Number of CPUs to use (default = number of cpus)
-profile string
Enable profiling of [cpu, heap]
-version
Print version and exit
attack command:
-body string
Requests body file
-cert string
TLS client PEM encoded certificate file
-chunked
Send body with chunked transfer encoding
-connect-to value
A mapping of (ip|host):port to use instead of a target URL's (ip|host):port. Can be repeated multiple times.
Identical src:port with different dst:port will round-robin over the different dst:port pairs.
Example: google.com:80:localhost:6060
-connections int
Max open idle connections per target host (default 10000)
-dns-ttl value
Cache DNS lookups for the given duration [-1 = disabled, 0 = forever] (default 0s)
-duration duration
Duration of the test [0 = forever]
-format string
Targets format [http, json] (default "http")
-h2c
Send HTTP/2 requests without TLS encryption
-header value
Request header
-http2
Send HTTP/2 requests when supported by the server (default true)
-insecure
Ignore invalid server TLS certificates
-keepalive
Use persistent connections (default true)
-key string
TLS client PEM encoded private key file
-laddr value
Local IP address (default 0.0.0.0)
-lazy
Read targets lazily
-max-body value
Maximum number of bytes to capture from response bodies. [-1 = no limit] (default -1)
-max-connections int
Max connections per target host
-max-workers uint
Maximum number of workers (default 18446744073709551615)
-name string
Attack name
-output string
Output file (default "stdout")
-prometheus-addr string
Prometheus exporter listen address [empty = disabled]. Example: 0.0.0.0:8880
-proxy-header value
Proxy CONNECT header
-rate value
Number of requests per time unit [0 = infinity] (default 50/1s)
-redirects int
Number of redirects to follow. -1 will not follow but marks as success (default 10)
-resolvers value
List of addresses (ip:port) to use for DNS resolution. Disables use of local system DNS. (comma separated list)
-root-certs value
TLS root certificate files (comma separated list)
-session-tickets
Enable TLS session resumption using session tickets
-targets string
Targets file (default "stdin")
-timeout duration
Requests timeout (default 30s)
-unix-socket string
Connect over a unix socket. This overrides the host address in target URLs
-workers uint
Initial number of workers (default 10)
encode command:
-output string
Output file (default "stdout")
-to string
Output encoding [csv, gob, json] (default "json")
plot command:
-output string
Output file (default "stdout")
-threshold int
Threshold of data points above which series are downsampled. (default 4000)
-title string
Title and header of the resulting HTML page (default "Vegeta Plot")
report command:
-buckets string
Histogram buckets, e.g.: "[0,1ms,10ms]"
-every duration
Report interval
-output string
Output file (default "stdout")
-type string
Report type to generate [text, json, hist[buckets], hdrplot] (default "text")
examples:
echo "GET http://localhost/" | vegeta attack -duration=5s | tee results.bin | vegeta report
vegeta report -type=json results.bin > metrics.json
cat results.bin | vegeta plot > plot.html
cat results.bin | vegeta report -type="hist[0,100ms,200ms,300ms]"
-cpus
Specifies the number of CPUs to be used internally.
It defaults to the amount of CPUs available in the system.
-profile
Specifies which profiler to enable during execution. Both cpu and
heap profiles are supported. It defaults to none.
-version
Prints the version and exits.
attack command
-body
Specifies the file whose content will be set as the body of every
request unless overridden per attack target, see -targets.
-cert
Specifies the PEM encoded TLS client certificate file to be used with HTTPS requests.
If -key isn't specified, it will be set to the value of this flag.
-chunked
Specifies whether to send request bodies with the chunked transfer encoding.
-connections
Specifies the maximum number of idle open connections per target host.
-dns-ttl
Specifies the duration to cache DNS lookups for. A zero value caches forever.
A negative value disables caching altogether.
-max-connections
Specifies the maximum number of connections per target host.
-duration
Specifies the amount of time to issue request to th
Read the full README on GitHub