Not everyone using your app is on a fast connection. Users on 3G in emerging markets, attendees on overloaded conference WiFi, commuters hitting cellular dead spots — they all experience your app differently. Simulating these conditions on your Mac during development helps you catch issues before your users do: slow-loading screens, missing timeout handling, broken offline states, and assets that never finish downloading.
This guide covers what conditions are worth simulating, the tools available on macOS, and practical tips for getting the most out of your testing.
When testing, it helps to have realistic values for the conditions you're simulating. Here are some common profiles:
Keep in mind that bandwidth alone doesn't tell the full story. High latency makes every round trip slow, even if bandwidth is decent. Packet loss forces retransmissions and can make TCP connections stall. DNS delays add seconds before the first byte even starts loading. A realistic simulation accounts for all of these.
Apple's Network Link Conditioner (NLC) is the classic approach. It installs as a preference pane in System Settings and includes some preset profiles. You can find full setup instructions in our Network Link Conditioner guide.
NLC works for basic testing, but its presets are limited and switching between profiles requires toggling the conditioner off and back on. There's no menu bar indicator, so it's easy to forget it's active. It also lacks an auto-disable feature — if you walk away, throttling stays on until you manually turn it off.
If you prefer the terminal, macOS also has built-in pfctl / dnctl tools that can throttle without installing anything — see our full throttling guide for the commands.
Both Charles and Proxyman are proxy-based debugging tools that include throttling as a secondary feature. Charles lets you configure bandwidth and latency under Proxy > Throttle Settings. Proxyman has a built-in "Network Conditions" panel with presets for 3G, 4G, and various WiFi conditions.
These tools are a good fit if you already use them for traffic inspection and want throttling in the same app. But if you just need to simulate slow network conditions, they're overkill — Charles costs $50 and Proxyman runs $60/year or $100 lifetime. Both route traffic through a proxy layer, which can interfere with certificate pinning and VPN connections.
Network Throttler is a menu bar app designed specifically for this. Click the icon, select a built-in profile — 3G, Edge, DSL, LTE, 1 Mbps, or lossy WiFi — and throttling starts immediately. The profiles use realistic values for bandwidth, latency, and packet loss, so you don't need to look up numbers.
For specific scenarios, you can create custom profiles with exact values for download speed, upload speed, latency, packet loss, and DNS delay. The auto-disable timer is particularly useful here: set it for 5 or 10 minutes, run through your test flow, and throttling turns off automatically when you're done.
You might also find this useful: Network Link Conditioner: Setup Guide, Common Issues & Alternatives