Safe shadow traffic testing for production systems.
mroki mirrors live HTTP traffic to a shadow service, diffs the JSON responses, and surfaces the differences — so you can validate changes against real production behavior before rolling out.
A gate is a pair of services: a live (production) URL and a shadow (experimental) URL.
A proxy forwards each request to both services and sends the raw responses to the API — without affecting the live response. The API computes the JSON diff server-side.
The hub is a web UI for managing gates, browsing captured requests, and visualizing response diffs side-by-side.
Architecture
graph TD
Client([Client]) -->|HTTP Request| Proxy[mroki-proxy]
Proxy -->|Forward| Live[Live Service]
Proxy -->|Forward| Shadow[Shadow Service]
Live -->|Live Response| Proxy
Shadow -->|Shadow Response| Proxy
Proxy -->|Return live response| Client
Proxy -.->|Send raw responses| API[mroki-api<br><i>REST API + Diff</i>]
API -->|Store| DB[(PostgreSQL)]
Hub[mroki-hub<br><i>Web UI</i>] -->|Query| API