_ _ _ _ _ _ _ _
/ \ / \ / \ / \ / \ / \ / \ / \
( w | i | r | e | c | l | a | w )
\_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
Auto-document your API by watching it work.
Wireclaw is a local HTTP/HTTPS proxy that captures every API request and response, stores them in SQLite, and gives you a real-time web dashboard, terminal UI, and one-click OpenAPI export. No code changes. No SDKs. No manual documentation.
Built with Rust. Zero unsafe. Zero config.
| The Problem | The Cost |
|---|---|
| API docs drift from code the moment they ship | Hours of manual updates, outdated contracts |
| Debugging production issues means hunting through logs | Slower incident response, frustrated teams |
| Onboarding new devs requires explaining API behavior | Repeated knowledge transfer, tribal knowledge |
| No easy way to compare "this request works, that one doesn't" | Staring at JSON diffs in text editors |
Wireclaw turns API observability from a chore into a byproduct of normal development.
Point your HTTP client at the proxy. Ship your code. Browse the dashboard. Export the spec. Done.
- π΄ Capture β Local HTTP/HTTPS proxy. Every request/response logged to SQLite, organized by named session.
- π HTTPS MITM β Auto-generated per-host TLS certificates. Inspect encrypted traffic without touching client code.
- π Real-Time Dashboard β WebSocket-powered traffic visualization. One-click OpenAPI export. Three themes including Synthwave '84.
- π OpenAPI Auto-Generation β Generate OpenAPI 3.0 specs from live traffic. Real examples, inferred schemas, no manual work.
- π Replay & Chain β Re-send any captured request. Dry-run, diff, edit in
$EDITOR, batch replay, and chain requests with Lua variable extraction. - π Search & Diff β Regex search across method, path, headers, body. JSON-aware structural diff between any two requests.
- π Performance Monitoring β Latency percentiles (p50, p95, p99), error rates, slow request detection.
- π₯οΈ Terminal UI β Full ratatui interface with live streaming, keyboard navigation, JSON syntax highlighting. Works over SSH.
- π€ Export β HAR 1.2, curl commands, raw HTTP, Postman collections.
- β‘ Zero Config β Works out of the box. Customizable via
~/.config/wireclaw/config.tomlwhen you need it.
git clone https://github.com/synthalorian/wireclaw.git
cd wireclaw
cargo install --path .# Start proxy + dashboard
wireclaw capture --session my-api --dashboard
# Point your client at the proxy
export HTTP_PROXY=http://127.0.0.1:8080
curl https://api.example.com/users
# Open the dashboard
# β http://localhost:8746# After capturing traffic, export the spec
wireclaw openapi --session my-api --output api-spec.json# List captured requests
wireclaw list --session my-api
# Replay a specific request
wireclaw replay --id <request-id>
# Compare two requests side-by-side
wireclaw diff --a <id1> --b <id2> --session my-apiwireclaw tui --session my-api# Full demo: capture + dashboard + sample traffic
./demo.shThe demo script starts a proxy, generates sample API traffic, and opens the dashboard. Perfect for screen recording a submission video.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β wireclaw β
β β
β ββββββββββ ββββββββββ ββββββββββ ββββββββββββββββββ β
β β CLI β β TUI β β Config β β Web Dashboard β β
β β(clap) β β(ratatuiβ β(TOML) β β (axum+ws) β β
β βββββ¬βββββ βββββ¬βββββ βββββ¬βββββ βββββββββ¬βββββββββ β
β β β β β β
β βββββΌββββββββββββΌββββββββββββΌββββββββββββββββΌββββββββββ β
β β Core Dispatch β β
β ββββ¬βββββββ¬βββββββββ¬ββββββββββ¬βββββββββββ¬βββββββββββββ β
β β β β β β β
β ββββΌβββ ββββΌβββ ββββΌββββ ββββΌβββ βββββΌβββββ β
β βProxyβ βReplayβ βSearchβ βExportβ β Logger β β
β β(hyperβ β β β(regex)β β(HAR) β β β β
β ββββ¬βββ ββββββββ ββββββββ ββββββββ βββββ¬βββββ β
β β β β
β β βββββββββββββββββββββββββββββββββββββΌβββββββββββ β
β ββββ SQLite Storage (sqlx) β β
β β sessions.db β requests β responses β β
β β ~/.local/share/wireclaw/sessions/*.db β β
β βββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Data Flow: Client β Proxy β Target β Proxy β Client β
β β β
β Logger β SQLite β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- 34,000+ lines of Rust β zero
unsafeblocks - 53 unit tests β all passing
- SQLite + sqlx β type-safe async database operations
- HTTPS MITM β auto-generated per-host certificates via
rcgen - Lua scripting β hooks for request/response transformation
- WebSocket proxy β captures and replays WebSocket frames
- HAR/Postman/curl export β industry-standard formats
wireclaw looks for config at ~/.config/wireclaw/config.toml. Sensible defaults are used if it doesn't exist.
listen_addr = "127.0.0.1:8080"
data_dir = "~/.local/share/wireclaw"
[session]
auto_create = true
default_name = "default"
[proxy]
listen_addr = "127.0.0.1:8080"
timeout_secs = 30
max_body_size = 10485760 # 10MB
capture_headers = true
capture_bodies = true
[replay]
delay_ms = 0
follow_redirects = true
max_redirects = 10| Path | Purpose |
|---|---|
~/.config/wireclaw/config.toml |
Configuration file |
~/.local/share/wireclaw/sessions/<name>.db |
Per-session SQLite database |
Each session gets its own SQLite database with indexed tables for requests, responses, and session metadata.
# Build
cargo build
# Test
cargo test
# Lint
cargo clippy -- -D warnings
# Format
cargo fmtLicensed under the Apache License, Version 2.0. See LICENSE for details.
Developed by synth (synthalorian) with assistance from synthclaw πΉπ¦ β a digital entity from the neon grid of 1984.
This is the wave. πΉπ¦π