chaos arena

The fetch client chaos arena

A browser-based benchmark that runs fetch, axios, ky, and ffetch side-by-side under identical controlled chaos. No install, no server, no account - opens directly in your browser.

Use case 1: compare clients

Run native fetch, axios, ky, and ffetch against the exact same chaos profile and workload. This isolates client-level behavior under identical transport conditions.

Use case 2: diagnose resilience settings

Tune timeout, retries, and plugin configuration in a repeatable environment to see how your strategy shifts tail latency, success rate, and error shape.

What you can do in the arena

Every setting is live - change it and re-run. The entire arena state encodes into the URL so you can share a specific experiment with a link.

Configure the chaos layer

The built-in chaos engine (powered by chaos-fetch) intercepts every outbound request before it hits the network. You compose global rules that apply to all clients simultaneously:

Rules are executed in order and can be stacked. Start from one of eight presets (zero-config, light, api-instability, meltdown-recovery, rate-limited, slow-network, burst-traffic, brownout) or build your own.

Configure each client independently

Each of the four clients has its own configuration panel. Cards are draggable so you can reorder them visually.

fetch (native)

No config - the browser baseline. No timeout, no retry, no error handling. Shows what you get with zero effort.

axios

Configurable timeout. No retry built-in - shows where a popular client sits without a retry layer.

ky

Timeout, retry limit, retry methods, retry status codes, Retry-After awareness, backoff base and max. A capable baseline with sensible ergonomics.

ffetch

Everything ky has, plus three opt-in plugins you can toggle per run: dedupe (collapse identical in-flight requests), circuit breaker (stop retrying a broken upstream), and hedge (race a backup request to cut tail latency). Plugin execution order is configurable.

Run settings

Set the total request count (default 60), concurrency (default 6 simultaneous requests), and target URL. You can point the arena at any CORS-enabled endpoint - use a local dev server or a public API.

What gets measured

Automated diagnosis

After each run a diagnostic engine analyzes each client against the chaos conditions and surfaces two things:

The engine includes guard rules that suppress harmful recommendations - for example it won't suggest adding more retries if your timeout is already too tight, and won't suggest a circuit breaker for rate-limit problems. When a recommendation is suppressed the UI shows the reason.

Share and reproduce

Every chaos config, client setting, and run parameter is encoded into the URL. Copy the address bar to get a shareable link that reproduces the exact same experiment in anyone's browser.

From the blog