explaingit

vadimsemenykv/saboteur

Analysis updated 2026-06-24

157GoAudience · developerComplexity · 3/5Setup · easy

TLDR

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.

Mindmap

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
Click or tap to explore — scroll the page freely

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 build with it?

USE CASE 1

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

USE CASE 2

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

USE CASE 3

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

What is it built with?

GoDockerHTTPPrometheus

How does it compare?

vadimsemenykv/saboteurimshire/xu-shopawuqing/backupx
Stars15714096
LanguageGoGoGo
Setup difficultyeasyhardeasy
Complexity3/54/53/5
Audiencedeveloperdeveloperops devops

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

How do you get it running?

Difficulty · easy Time to first run · 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.

Copy-paste prompts

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?

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.

Open on GitHub → Explain another repo

This repo across BitVibe Labs

Verify against the repo before relying on details.