git404hub

what is saboteur fr?

vadimsemenykv/saboteur — explained in plain English

Analysis updated 2026-05-18

157GoAudience · developerComplexity · 3/5Setup · easy

tl;dr

HTTP layer fault injection proxy in Go that sits between your app and an upstream service to inject delays, errors, dropped connections, and corrupted bodies based on rules.

vibe map

mindmap
  root((saboteur))
    Inputs
      HTTP traffic on port 8080
      Rule config YAML
      Control API calls
    Outputs
      Forwarded or faulted responses
      Prometheus metrics
      SSE traffic stream
    Use Cases
      Local resilience testing
      CI chaos checks
      Demo failure modes
    Tech Stack
      Go
      Docker
      HTTP
      Prometheus

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

what do people make with this?

VIBE 1

Inject 500 errors or 5 second delays on specific URL paths to test how your service handles a flaky upstream

VIBE 2

Wire Saboteur into CI to fail a build when a service does not retry or time out correctly

VIBE 3

Demo failure modes to a team by toggling fault rules live from the web UI

what's the stack?

GoDockerHTTPPrometheus

how it stacks up fr

vadimsemenykv/saboteurcaddyserver/replace-responsepgrwl/pgrwl
Stars157156159
LanguageGoGoGo
Last pushed2025-06-18
MaintenanceStale
Setup difficultyeasymoderatemoderate
Complexity3/52/54/5
Audiencedeveloperops devopsops devops

Figures from each repo's GitHub metadata at analysis time.

how do i run it?

Difficulty · easy time til it works · 30min

Easiest path is the provided Docker image, building from source needs the Go toolchain.

in plain english

Saboteur is a small proxy program that sits between your application and another service it talks to over HTTP. Its job is to break things on purpose. You point your traffic at Saboteur on port 8080, it forwards the requests to the real service, and along the way it can inject faults such as delays, error responses, dropped connections, corrupted bodies, or rate-limited streaming. A separate web UI and API on port 8081 lets you create and toggle the rules that decide when faults fire. The README describes it as an HTTP-layer fault injection proxy and calls out the contrast with Toxiproxy, which works at the TCP level. Because Saboteur understands HTTP, the matching rules can look at things like the URL path, the request method, specific headers, and query parameters. Each rule has a priority, an optional percentage for how often it should fire on matching traffic, and a fault definition that says what kind of break to apply. It is meant for testing whether your service handles bad conditions gracefully, either while developing locally or as part of a continuous integration pipeline. The README shows Docker and Docker Compose commands to run it, a YAML config example with a mock upstream, and a list of environment variables for things like the upstream URL, ports, an optional API key, log level, and traffic log size. For running and observing it, there is a control API for listing and editing rules, a server-sent-events stream of live traffic, Prometheus metrics, and a SIGHUP signal that reloads the config file without restarting. Building from source uses the Go toolchain, and a Dockerfile and multi-arch buildx command are provided.

prompts (copy fr)

prompt 1
Write a Saboteur rule that returns 503 for 20 percent of POST requests to /api/payments and leaves GETs alone
prompt 2
Show me a docker compose snippet that puts Saboteur between my Go service and a mock upstream with a 200 ms delay rule
prompt 3
Build a CI script that starts Saboteur, drops 10 percent of connections, and asserts my integration tests still pass
prompt 4
Subscribe to the Saboteur server sent events stream and print every request that matched a fault rule
prompt 5
Compare Saboteur to Toxiproxy and pick the better fit for testing HTTP timeout handling in my Node service

Frequently asked questions

what is saboteur fr?

HTTP layer fault injection proxy in Go that sits between your app and an upstream service to inject delays, errors, dropped connections, and corrupted bodies based on rules.

What language is saboteur written in?

Mainly Go. The stack also includes Go, Docker, HTTP.

How hard is saboteur to set up?

Setup difficulty is rated easy, with roughly 30min to a first successful run.

Who is saboteur for?

Mainly developer.

peek the repo → explain another one

This repo across BitVibe Labs

double-check against the repo, no cap.