Network Throttling
Throttle shapes the traffic flowing through Probe so you can see how your app behaves on a slow or flaky network. It works in two modes: a global profile that applies to every request, and a scoped rules list where each rule has its own URL matcher and shape parameters.
Throttling kicks in for everything that goes through Probe — desktop traffic and any phone or tablet using Probe as its proxy. There’s no separate iOS/Android setting to maintain.
What gets shaped
Section titled “What gets shaped”Each profile is built from these knobs:
- Down speed (bytes/sec) — caps how fast Probe streams the response back to the client. Probe meters the response in chunks and sleeps between them so the average rate matches your value.
- Up speed (bytes/sec) — same idea, but for the request body going to the upstream.
- Down delay / Up delay (ms) — extra latency added on each leg. Up delay is added before the request is forwarded; down delay is added before the response is surfaced. Together they simulate one round-trip’s worth of RTT.
- DNS delay (ms) — extra delay applied at the start of every connection, on top of the directional delays.
- Down loss / Up loss (%) — probability that a response (or request body) is dropped. At 100% loss the request hangs forever, simulating a dead network.
A value of 0 on any knob means “no effect” — Probe’s metering loops short-circuit and the traffic flows at full speed.
Built-in presets
Section titled “Built-in presets”Open the Throttle picker in the toolbar to pick a preset. The values match Apple’s Network Link Conditioner reference profiles where applicable.
| Preset | Down | Up | Delay (down/up) | Loss |
|---|---|---|---|---|
| Off | uncapped | uncapped | 0 / 0 | 0% |
| DSL | 2 Mbps | 256 kbps | 5 / 5 ms | 0% |
| 3G | 780 kbps | 330 kbps | 100 / 100 ms | 0% |
| LTE | 50 Mbps | 10 Mbps | 50 / 65 ms | 0% |
| High Latency DNS | uncapped | uncapped | 0 / 0 ms (+ 3000 ms DNS) | 0% |
| Very Bad Network | 1 Mbps | 1 Mbps | 500 / 500 ms | 10% / 10% |
| 100% Loss | uncapped | uncapped | 0 / 0 | 100% / 100% |
You can save your own custom profiles next to the built-ins if you frequently reach for a specific shape.
Global mode
Section titled “Global mode”Click the throttle icon in the toolbar and pick a preset (or Custom to dial your own). The change applies immediately to every new connection — both desktop and any device using Probe as its proxy. Pick Off to disable throttling.
The icon highlights when a profile other than Off is active so you don’t forget you’re shaping traffic.
Scoped rules: throttle only what matters
Section titled “Scoped rules: throttle only what matters”The global profile is a blunt instrument — it touches every request. The scoped rules list lets you apply different shapes to different URLs, leaving everything else alone.
Each rule has:
- a matcher — host, URL glob, or app/process name,
- a profile — the same set of knobs as the global profile (down/up bps, delays, loss),
- an enabled toggle.
Probe evaluates the rules in order; the first match wins, and the matched profile overrides the global profile for that request. Once a rule is chosen for a request, its shape is locked in for both the request and response leg, even if you edit the rules list mid-flight.
The rule editor
Section titled “The rule editor”Add or edit a rule from the throttle rules list. On macOS, the editor opens as a native child window — a separate OS window with its own title bar — so you can leave it floating while you watch live traffic in the main Probe window and tweak the rule’s pattern or shape on the fly. On Windows, the editor opens as an in-app modal dialog with the same fields. Quick-create paths (e.g. right-click a log row → Throttle for this URL) use the same surface — child window on macOS, dialog on Windows.
URL-shape note
Section titled “URL-shape note”Throttle URL globs are matched against the MITM-shaped URL — including :443 for HTTPS and :80 for HTTP. Write patterns with a wildcard before the path (e.g. **/v1/upload/*) or include the default port if you’re matching on host exactly. Map Local, Map Remote, and Breakpoints strip the default port for you; throttle and Scripting URL matchers do not, so be explicit there.
Worked example: slow uploads only
Section titled “Worked example: slow uploads only”You want to verify your upload progress UI on a real LTE connection — but only for upload calls. Other traffic should flow at full speed.
- Set the global profile to Off.
- Open the throttle rules list and add:
- Matcher: URL glob
**/v1/upload/* - Profile: Down
50 Mbps, Up1 Mbps, delay50 / 65 ms
- Matcher: URL glob
- Save and enable the rule.
Now uploads crawl at 1 Mbps and you can watch your progress bar do real work, while every other request still flies.
Related
Section titled “Related”- Breakpoints — pause traffic instead of slowing it.
- Scripting —
pro.req/pro.reshooks if you need conditional shaping that throttle rules can’t express. - Map Local — combine a fake response with a delay to test loading states.