cryload is a powerful, fast, and practical HTTP benchmarking tool for stress testing APIs and web services.
Built with Crystal for high performance and low overhead.
- High-throughput HTTP load testing with a lightweight CLI experience
- Concurrent benchmarking with configurable connection count
- Request count mode (
-n) and duration mode (-d) support - Flexible request customization (method, headers, body, timeout, TLS)
- JSON output mode for CI/CD and automation workflows
Download the latest prebuilt binary from the Releases page, then make it executable:
chmod +x cryload
./cryload --helpRequires Crystal 1.19.0 or later.
git clone https://github.com/sdogruyol/cryload.git && cd cryload
shards build --releaseThe binary will be at bin/cryload.
Run your first benchmark in seconds:
bin/cryload http://localhost:3000 -n 10000 -c 100cryload <url> [options]Options:
| Option | Description |
|---|---|
-n, --numbers |
Number of requests to make |
-d, --duration |
Duration of test in seconds |
-c, --connections |
Concurrent connections (default: 10) |
-m, --method |
HTTP method (default: GET) |
-b, --body |
HTTP request body |
-H, --header |
HTTP header, repeatable (-H "Key: Value") |
--timeout |
Client connect/read timeout in seconds |
--insecure |
Accept invalid TLS certificates for HTTPS |
--json |
Print final result as JSON |
-h, --help |
Show help |
Examples:
10,000 requests to localhost
cryload http://localhost:9292 -n 1000010 seconds with 100 connections
cryload http://localhost:3000 -d 10 -c 100Simple POST request
cryload http://localhost:3000/api/login -n 1000 -m POSTPOST with plain text body
cryload http://localhost:3000/api/echo -n 500 -m POST -H "Content-Type: text/plain" -b "hello"POST with JSON body
cryload http://localhost:3000/api -n 500 -m POST -H "Content-Type: application/json" -b '{"name":"cry"}' --timeout 5POST with multiple headers
cryload http://localhost:3000/api -n 300 -m POST -H "Authorization: Bearer token123" -H "X-Request-ID: benchmark-1" -b '{"ok":true}'Duration mode + timeout
cryload http://localhost:3000/api -d 15 -c 50 --timeout 3HTTPS with self-signed cert (skip TLS verification)
cryload https://localhost:8443 -n 1000 --insecureJSON output for automation/CI
cryload http://localhost:3000/api -n 1000 --jsonExample output:
Preparing to make it CRY for 10 seconds with 100 connections!
Running load test @ http://localhost:3000/
Latency (ms) avg: 0.53 stdev: 0.76 max: 35.39
Percentiles (ms) p95: 0.96 p99: 1.34
1696170 requests in 10.11s
Requests/sec: 167803.62
2xx: 1696170 Non-2xx: 0
cryload is written in Crystal, combining Ruby-like developer ergonomics with compiled-language speed.
- Fork the repo
- Create your feature branch (
git checkout -b my-feature) - Commit your changes (
git commit -am 'Add feature') - Push to the branch (
git push origin my-feature) - Open a Pull Request
MIT