Skip to content

nikooo777/snago

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

snago logo

CI Go Version Latest Version License

snago — HTTP request capture & replay tool

Capture, inspect, and replay any HTTP request. Point any traffic at snago — webhooks, API calls, form submissions, health checks — and it saves every request to disk. Replay them later against any target with headers, body, and query strings fully preserved.

Single binary, zero runtime dependencies.

snago example output

Use cases

  • API development — Capture requests from any client, inspect what was actually sent, and replay to reproduce issues or test changes.
  • Webhook debugging — Point GitHub/Stripe/Slack webhooks at snago, inspect payloads, and replay them while iterating on your handler.
  • Request archiving — Persist incoming traffic for later analysis without modifying your application.
  • Integration testing — Record real requests from third-party services and replay them against your local environment.

Install

go install github.com/nikooo777/snago@latest

Or build from source:

git clone https://github.com/nikooo777/snago.git
cd snago
make build

Quick start

# 1. Start capturing
snago serve

# 2. Send any request (from another terminal)
curl -X POST -H "Content-Type: application/json" \
  -d '{"action":"test"}' http://localhost:7624/any/path

# 3. Inspect the captured request
snago inspect captures/<file>.gob

# 4. Replay it to your real server
snago replay --target http://localhost:9090 captures/<file>.gob

Commands

snago serve

Start an HTTP server that captures every incoming request to a .gob file. All requests receive a 200 OK response with body ok — it acts as a universal sink.

snago serve [--addr :7624] [--dir ./captures] [--verbose] [--no-body]
Flag Default Description
--addr :7624 Listen address
--dir ./captures Output directory for captured .gob files
--verbose false Print full request details (headers + body) for each capture
--no-body false Hide request body from verbose output

Example output:

$ snago serve
INFO snago listening addr=:7624 dir=./captures
POST /api/orders 5 headers 66b → 1771366415797329694_38aab851.gob
GET /health 2 headers 0b → 1771366415801479108_bd746ac6.gob

The server shuts down gracefully on Ctrl+C. If running behind a reverse proxy, it reads X-Forwarded-Proto to detect the original scheme (http/https).

snago inspect

Pretty-print a captured request — method, URL, timestamp, headers, and body. Binary bodies are shown as [binary data, N bytes] instead of raw bytes.

snago inspect [--save-body [file]] [--no-body] <file.gob>
Flag Default Description
--save-body (off) Save request body to a file. Omit filename for auto-detection (MIME-based extension)
--no-body false Hide request body from output
$ snago inspect captures/1771366415797329694_38aab851.gob
POST https://example.com/api/orders
Captured: 2026-02-17 23:15:56

Content-Type: application/json
Authorization: Bearer tok_xxx

{"item":"widget","qty":3}

Extract the body with automatic filename and extension detection:

# Auto-detect: generates 1771366415797329694_38aab851_body.json
snago inspect --save-body captures/1771366415797329694_38aab851.gob

# Explicit path
snago inspect --save-body=payload.json captures/1771366415797329694_38aab851.gob

snago replay

Re-send a captured request. By default, replays to the original host. Use --target to redirect it.

snago replay [--target URL] [--verbose] <file.gob>
Flag Default Description
--target (original host) Override destination URL (scheme://host)
--verbose false Print full response details (headers + body)
# Replay to original destination
snago replay captures/1771366415797329694_38aab851.gob

# Replay to a different host (path and query string are preserved)
snago replay --target http://localhost:9090 captures/1771366415797329694_38aab851.gob

Hop-by-hop headers (Connection, Transfer-Encoding, Content-Length) are automatically stripped before sending.

snago version

snago version
# or
snago --version

Environment variables

All flags can be set via environment variables (flags take precedence when both are set):

Variable Flag equivalent Default
SNAGO_SERVE_ADDR --addr :7624
SNAGO_SERVE_DIR --dir ./captures
SNAGO_SERVE_VERBOSE --verbose false
SNAGO_REPLAY_TARGET --target (empty)
SNAGO_REPLAY_VERBOSE --verbose false

License

MIT

About

Snag, inspect, and replay HTTP requests. A lightweight GO capture tool for webhooks, API debugging, and request forensics.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors