https://github.com/jcaromiq/goku
Goku is an HTTP load testing application written in Rust
https://github.com/jcaromiq/goku
benchmark benchmarking http load-testing mcp mcp-server performance performance-testing rust
Last synced: 3 months ago
JSON representation
Goku is an HTTP load testing application written in Rust
- Host: GitHub
- URL: https://github.com/jcaromiq/goku
- Owner: jcaromiq
- License: mit
- Created: 2023-02-06T13:10:47.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2025-06-02T23:43:27.000Z (8 months ago)
- Last Synced: 2025-10-21T04:40:00.896Z (3 months ago)
- Topics: benchmark, benchmarking, http, load-testing, mcp, mcp-server, performance, performance-testing, rust
- Language: Rust
- Homepage:
- Size: 1.37 MB
- Stars: 139
- Watchers: 2
- Forks: 5
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: Changes.md
- Contributing: .github/CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Goku
[](https://github.com/jcaromiq/goku/actions/workflows/ci.yml)
[](https://crates.io/crates/goku-bench)

Goku is a high-performance, scalable HTTP load-testing tool designed for benchmarking and performance analysis of web services. Inspired by tools like [Drill](https://github.com/fcsonline/drill) and [Vegeta](https://github.com/tsenart/vegeta), Goku offers modern features and simplicity for engineers to simulate and analyze traffic efficiently.
## Features
* Fast and scalable HTTP load testing
* Supports structured, real-time metrics
* Detailed performance analytics
## Install
### Automatic download (Linux, OSX, WSL)
You can download the latest version of Goku directly to your current directory with the following command:
```bash
curl -sSL https://raw.githubusercontent.com/jcaromiq/goku/v2.0.0/scripts/install.sh | sh
```
### Using Cargo
```bash
cargo install goku-bench
goku --version
```
### Manual download
Go to the Goku's [GitHub Releases page](https://github.com/jcaromiq/goku/releases) and download the latest `.tar.gz` file that matches your system. Currently, tarballs are available for the following:
* Linux (x86_64)
* macOS (x86_64)
* Windows (x86_64)
### Source
As a requirement, you need `rust` installed:
```shell
$ cargo build --release
```
## Versioning
CLI is versioned with [SemVer v2.0.0](https://semver.org/spec/v2.0.0.html).
## Contributing
See [CONTRIBUTING.md](.github/CONTRIBUTING.md).
## Usage manual
```console
Usage: goku [OPTIONS] --target
Options:
-v, --verbose Runs in verbose mode
-t, --target URL to be requested using an operation [default: GET] Ex. GET http://localhost:3000/
-r, --request-body File path for the request body
-c, --clients Number of concurrent clients [default: 1]
-i, --iterations Total number of iterations [default: 1]
-d, --duration Duration of the test in second
--headers Headers, multi value in format headerName:HeaderValue
--scenario Scenario file
--timeout Timeout value in ms, defaults set to 30000
-h, --help Prints help
-V, --version Prints version information
```
#### `--target` `-t`
Specifies the operation and url to make the request, default to GET.
Format: GET https://localhost:3000
#### `--request-body` `-r` Optional
Specifies the path of file with the body to send.
#### `--clients` `-c`
Specifies the number of concurrent calls to be used, defaults to 1.
#### `--iterations` `-i`
Specifies the total number of calls to be performed, default to 1.
#### `--duration` `-d`
Specifies the duration of the test in seconds.
#### `--headers` Optional
Specifies the headers to be sent.
#### `--scenario` Optional
Specifies the scenario file in yaml format.
````yaml
target: POST http://localhost:3000/
clients: 50
requests: 1000
headers:
- key: "bar"
value: "foo"
- key: "Content-Type"
value: "application/json"
body: "{\"firstName\": \"Terry\",
\"lastName\": \"Medhurst\",
\"maidenName\": \"Smitham\",
\"age\": 50}"
````
#### `--help`
Prints help.
#### `--version`
Prints version information.
###### Simple targets
```
goku --target "GET http://localhost:3000"
goku --target http://localhost:3000?foo=bar
goku -c 50 -i 1000 --target http://localhost:3000
goku -c 50 --duration 60 --target http://localhost:3000
```
###### Targets with custom headers
```
goku --target "GET http://localhost:3000" --headers Content-Type:application/json --headers bar:foo
```
###### Targets with custom bodies
```
goku -c 50 -i 1000 -r body.json --target "POST http://localhost:3000"
```
###### Targets with custom bodies and headers
```
goku -r body.json --target "POST http://localhost:3000" --headers Content-Type:application/json --headers bar:foo
```
###### Output
```
Concurrency level 50
Time taken 4 seconds
Total requests 1000
Mean request time 169.90099999999998 ms
Max request time 415 ms
Min request time 5 ms
95'th percentile: 319 ms
99.9'th percentile: 367 ms
```
## License
See [LICENSE](LICENSE).
## Donate
If you appreciate all the job done in this project, a small donation is always welcome:
[](https://www.buymeacoffee.com/jcaro)