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
Use Cases
API refactoring — Test refactored endpoints against real production traffic to catch behavioral regressions before they ship.
Database migrations — Run your new schema in shadow mode and verify it returns identical results to the current one.
Framework upgrades — Upgrade your framework on the shadow service and validate with real request patterns, not synthetic tests.