feat: add http function to script engines
Install • Quick Start • Examples • Configuration • Templating
Overview
Sarin is designed for efficient HTTP load testing with minimal resource consumption. It prioritizes simplicity and features like templating add zero overhead when unused.
| ✅ Supported | ❌ Not Supported |
|---|---|
| High-performance with low memory footprint | Web UI or complex TUI |
| Dynamic requests via 370+ template functions | Detailed response body analysis |
| Request scripting with Lua and JavaScript | Distributed load testing |
| Multiple proxy protocols (HTTP, HTTPS, SOCKS5, SOCKS5H) |
HTTP/2, HTTP/3, WebSocket, gRPC |
| Captcha solving (2Captcha, Anti-Captcha, CapSolver) |
Plugins / extensions ecosystem |
Installation
Docker
docker run --rm -it aykhans/sarin:latest --version
With a local config file:
docker run --rm -it -v /path/to/config.yaml:/config.yaml aykhans/sarin -f /config.yaml
With a remote config file:
docker run --rm -it aykhans/sarin -f https://example.com/config.yaml
Nix
Run directly without installing (requires flakes enabled):
nix run github:aykhans/sarin/release -- -U http://example.com -r 100 -c 10
Install into your profile:
nix profile add github:aykhans/sarin/release
Or add it to your own flake via the overlay:
{
inputs.sarin.url = "github:aykhans/sarin/release";
# In your outputs, apply the overlay to nixpkgs:
# nixpkgs.overlays = [ inputs.sarin.overlays.default ];
# then reference pkgs.sarin
}
The release branch tracks the newest stable release cut from main, so nix flake update moves between releases rather than following every commit; pre-releases are excluded. Pin an exact release with github:aykhans/sarin/v1.4.2, or track development with github:aykhans/sarin (the main branch).
Pre-built Binaries
Download the latest binaries from the releases page.
Building from Source
Requires the Go version declared in go.mod.
git clone https://github.com/aykhans/sarin.git && cd sarin
CGO_ENABLED=0 go build \
-ldflags "-X 'go.aykhans.me/sarin/internal/version.Version=dev' \
-X 'go.aykhans.me/sarin/internal/version.GitCommit=$(git rev-parse HEAD)' \
-X 'go.aykhans.me/sarin/internal/version.BuildDate=$(date -u +%Y-%m-%dT%H:%M:%SZ)' \
-X 'go.aykhans.me/sarin/internal/version.GoVersion=$(go version)' \
-s -w" \
-o sarin ./cmd/cli/main.go
Quick Start
Send 10,000 GET requests with 50 concurrent connections and a random User-Agent for each request:
sarin -U http://example.com -r 10_000 -c 50 -H "User-Agent: {{ fakeit_UserAgent }}"
Run a 5-minute duration-based test:
sarin -U http://example.com -d 5m -c 100
Use a YAML config file:
sarin -f config.yaml
For more usage examples, see the Examples Guide.
Configuration
Sarin supports environment variables, CLI flags, and YAML files. When the same option is specified in multiple sources, the following priority order applies:
CLI Flags (Highest) > YAML > Environment Variables (Lowest)
For detailed documentation on all configuration options (URL, method, timeout, concurrency, headers, cookies, proxy, etc.), see the Configuration Guide.
Templating
Sarin supports Go templates in URL paths, methods, bodies, headers, params, cookies, and values. Use the 370+ built-in functions to generate dynamic data for each request.
Example:
sarin -U "http://example.com/users/{{ fakeit_UUID }}" -r 1000 -c 10 \
-V "REQUEST_ID={{ fakeit_UUID }}" \
-H "X-Request-ID: {{ .Values.REQUEST_ID }}" \
-B '{"request_id": "{{ .Values.REQUEST_ID }}"}'
For the complete templating guide and functions reference, see the Templating Guide.
License
This project is licensed under the MIT License. See the LICENSE file for details.
