Tunneling & relay
A persistent outbound WebSocket to a self-hosted relay: multiplexed frames, heartbeats and automatic reconnect. No inbound port, no firewall changes.
One small Go binary that tunnels public traffic to your machine, lets you watch, rewrite, break and replay requests, and diff two implementations side by side.
Live inspector
Try the filters — this is the same split-view the dashboard gives you at localhost:4040.
{
"id": 8821,
"email": "ada@lovelace.dev",
"plan": "pro"
}Architecture
Your machine never accepts an inbound connection. The agent holds an encrypted WebSocket open to the relay, the relay maps a generated hostname to that tunnel, and the inspection layer observes traffic without altering normal request and response behaviour.
Capabilities
A persistent outbound WebSocket to a self-hosted relay: multiplexed frames, heartbeats and automatic reconnect. No inbound port, no firewall changes.
Requests stream into localhost:4040 in real time with full headers, bodies, query params, status and a timing breakdown you can search and filter.
Scan local ports, identify running HTTP services and propose safe routing rules before traffic reaches the wrong backend.
Turn observed traffic into a living endpoint map with normalized paths, request volume, latency and error-rate context.
Convert a captured response into an editable mock, tune its status, body and delay, then activate it locally in seconds.
Create public webhook endpoints for Stripe, GitHub, Shopify or custom providers with signature checks, toggles and test deliveries.
Re-fire any captured request, or change method, URL, headers and JSON body inline first. Replays are tagged and linked to their parent request.
Point Stripe, GitHub, Shopify, Discord, Slack, Twilio, SendGrid or PayPal at a generated endpoint. Provider and signature headers are detected automatically.
Declarative patterns like /api/v1/* and /auth/* fan a single public URL out across as many local microservices as you run.
Fixed or jittered latency, configurable error rates, forced status codes, dropped connections and artificial timeouts on the routes you choose.
Mirror live traffic to a second implementation and compare status, headers and nested JSON bodies side by side before you ship the rewrite.
Save request collections as JSON fixtures and replay whole interactions in order, with the original delays preserved.
Access tokens, named tunnels, expiry rules and an instant kill switch — plus redaction of secrets before anything is written to disk.
The local development lab
Routa is the layer between the internet and your local services: observe, control, branch, break and replay every interaction from one place.
Scan local ports, identify HTTP services and confirm proposed routes before traffic is forwarded.
Normalize dynamic paths and track volume, methods, latency, errors and body schemas as traffic arrives.
Turn any captured response into a local mock, then edit its status, JSON body and delay.
Generate public webhook endpoints for Stripe, GitHub, Shopify, Slack, Discord or custom providers.
Re-fire a request exactly or edit its method, path, headers, query and JSON before sending.
Send /auth, /api and /webhook traffic to different local ports from one public gateway.
Inject headers, rewrite paths, change query values, edit JSON dot-paths or return a forced response.
Add latency and jitter, inject failures, drop connections or enforce upstream timeouts.
Duplicate traffic to a second implementation while the primary response still serves the client.
Compare status, timing, headers and nested JSON to see exactly what changed between implementations.
Persist request history as a shareable fixture with ordering and inter-request timing intact.
Use named tunnels, secrets, redaction rules, expiry and a kill switch before sharing localhost publicly.
Native everywhere
Download a native executable for Apple Silicon, Intel Macs, Linux ARM servers, Raspberry Pi, Windows ARM laptops or standard x64 machines. Build the complete matrix from source with one command.
make build-allCLI reference
routa dev 3000Inspect and forward a local servicerouta dev 3000 --relay ws://relay.example.com:8080 --name my-appExpose a named public tunnelrouta dev --config routa.yamlLaunch reproducible routing and middlewarerouta relay --port 8080 --domain relay.example.com:8080Run a self-hosted edge relayrouta versionPrint version and system informationMove the same routes, mutations, simulations, shadows and recording rules into a versioned routa.yaml file and run it with --config.
Why Routa
Tunneling gets traffic to localhost. Routa gives you the inspection, discovery, mutation, failure testing, branching, diffing and deterministic playback that happen after the connection is made.
| Capability | Routa | Ngrok | Postman | Mockoon |
|---|---|---|---|---|
| Tunneling | Routa + | Ngrok + | Postman - | Mockoon - |
| Live HTTP inspection | Routa + | Basic | - | - |
| API discovery & service mapping | Routa + | - | - | - |
| Traffic mutation & chaos | Routa + | - | - | Partial |
| Webhook gateway | Routa + | Basic | - | - |
| Replay, shadowing & deep diff | Routa + | - | Replay | - |
| Standalone Go binary | Routa + | Routa + | Heavy GUI | Separate tool |
Quick start
go install github.com/7uyash/routa/cmd/routa@latestGo 1.21+, or grab a release build.
routa dev 3000Node, Go, Python, Rails — anything serving HTTP locally.
http://localhost:4040Traffic starts streaming immediately.
Download a native binary or build every target with make build-all.
routes:- path: "/api/v1/users/*"target: "http://localhost:8081"mutations:- name: "Inject Debug Header"request:set_headers:X-Debug-Mode: "true"simulations:- latency_ms: 250error_rate: 0.1shadows:- shadow_url: "http://localhost:9090"compare_response: true
Capture a real webhook once, save it as a fixture, and replay the whole sequence on demand — no provider, no waiting, no flaky reproduction steps.