Test your app on a bad network, on purpose
A macOS tool that throttles bandwidth, adds latency, and drops packets so you can see how your app behaves on a weak connection. Works for the iOS Simulator, Android Emulator, and browsers, with per-port targeting and a one-click reset.
Key Features
Pick from EDGE, 3G, LTE, Poor WiFi, Lossy WiFi, or Satellite profiles with preset bandwidth, delay, and loss values.
Switch to Custom and set your own bandwidth, delay in milliseconds, and packet loss percentage.
Throttle all ports, a port group, or a specific list, so you can slow one service and leave the rest of your machine alone.
The iOS Simulator, Android Emulator, and web browsers all use the host network stack, so a single throttle covers all three.
Why We Built This
Your app only ever sees good WiFi
Apps get built and tested on a fast desk connection, so the loading states, timeouts, and retries that users actually hit on a train never get exercised. macOS can already do this through dnctl and pfctl, but the incantations are long, easy to get wrong, and leave rules behind if a run dies. Bottleneck Simulator wraps them in a small GUI with presets, keeps its rules inside a dedicated pf anchor, and tracks state on disk so teardown is clean.
Slow-network paths — spinners, timeouts, retries, partial loads — are the least tested part of most apps because the developer never sees them.
Pipes, anchors, and pf tokens take several correct commands to set up and another set to tear down, which is why most people skip the test entirely.
All rules live in an isolated pf anchor with the config and pf token saved to a state file, so a reset removes exactly what was added and nothing else.