https://github.com/fetch-kit/chaos-proxy
Proxy for injecting network chaos (latency, failures, drops, rate-limiting) into API requests.
https://github.com/fetch-kit/chaos-proxy
chaos-testing javascript reliability testing typescript
Last synced: 10 days ago
JSON representation
Proxy for injecting network chaos (latency, failures, drops, rate-limiting) into API requests.
- Host: GitHub
- URL: https://github.com/fetch-kit/chaos-proxy
- Owner: fetch-kit
- License: mit
- Created: 2025-09-20T00:43:03.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2026-04-20T01:08:31.000Z (about 2 months ago)
- Last Synced: 2026-04-20T03:13:19.947Z (about 2 months ago)
- Topics: chaos-testing, javascript, reliability, testing, typescript
- Language: TypeScript
- Homepage:
- Size: 209 KB
- Stars: 21
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
[](https://www.npmjs.com/package/chaos-proxy)
[](https://www.npmjs.com/package/chaos-proxy)
[](https://github.com/gkoos/chaos-proxy)
[](https://github.com/gkoos/chaos-proxy/actions)
[](https://codecov.io/gh/gkoos/chaos-proxy)
# Chaos Proxy
Chaos Proxy is a proxy server for injecting configurable network chaos (latency, failures, connection drops, rate-limiting, and transforms) into HTTP traffic.
Use it via CLI or programmatically with ordered middleware chains (global and per-route).
## Features
- YAML-based config with runtime reload support
- Built-in middleware primitives for latency, errors, drops, limits, throttling, and transforms
- Route matching by method and path
- Optional OpenTelemetry tracing export
- Extensible middleware registry
## Installation
```bash
npm install chaos-proxy
```
## Quick Start
### CLI
```bash
npx chaos-proxy --config chaos.yaml [--verbose]
```
### Programmatic API
```ts
import { loadConfig, startServer } from 'chaos-proxy';
const cfg = loadConfig('chaos.yaml'); // port comes from chaos.yaml
const server = await startServer(cfg);
// ...run your traffic through http://localhost:5000 (or whatever port is set in chaos.yaml)
await server.close();
```
### Minimal Config
```yaml
target: "http://localhost:4000"
port: 5000
global:
- latency: 100
```
## Documentation
Detailed guides live in [docs/index.md](./docs/index.md):
- [Chaos middlewares](./docs/chaos-middlewares.md)
- [Observability](./docs/observability.md)
- [Hot reload](./docs/hot-reload.md)
- [Examples](./docs/examples.md)
## Presets
Ready-made chaos bundles are available in [presets](./presets):
- [mobile-3g.yaml](./presets/mobile-3g.yaml)
- [flaky-backend.yaml](./presets/flaky-backend.yaml)
- [burst-errors.yaml](./presets/burst-errors.yaml)
- [timeout-storm.yaml](./presets/timeout-storm.yaml)
## Runtime Reload
Chaos Proxy supports runtime config reload via `POST /reload`. See [docs/hot-reload.md](./docs/hot-reload.md) for full details.
## Join the Community
Have questions, want to discuss features, or share examples? Join the Fetch-Kit Discord server:
[](https://discord.gg/sdyPBPCDUg)
## License
MIT