How to Throttle Network Speed on macOS

Updated March 2026

If you're building apps that rely on network requests, you've probably wondered how your app behaves on a slow connection. Loading states, timeouts, offline handling, image-heavy pages on 3G — these are things you can't properly test on a fast office connection. Throttling your Mac's network lets you experience exactly what your users do on degraded connections. This guide covers the main approaches on macOS, from Apple's own tool to dedicated third-party apps.

Option 1 — Network Link Conditioner (Apple's tool)

Network Link Conditioner (NLC) is Apple's official tool for simulating network conditions. It's not bundled with macOS or Xcode directly — you need to download it separately from Apple's developer site as part of the "Additional Tools for Xcode" package.

To set it up: sign in at developer.apple.com, navigate to Downloads, search for "Additional Tools for Xcode," and download the DMG for your Xcode version. Inside the DMG, open the Hardware folder and double-click Network Link Conditioner.prefPane to install it into System Settings. Once installed, open it, choose a profile (like 3G or Edge), and toggle it on.

NLC works and it's free. But it has some friction. It's buried inside System Settings as a preference pane — there's no menu bar icon, so there's no visual indicator that throttling is active. Switching profiles requires toggling the conditioner off and back on. There's no auto-disable timer, which means it's easy to forget it's running and spend 20 minutes wondering why your internet is slow. The tool also hasn't been visually updated in years, and some developers report installation issues on newer macOS versions.

Option 2 — pfctl / dnctl (Terminal method)

macOS ships with pfctl (packet filter) and dnctl (dummynet control) — built-in tools that can shape network traffic directly from the terminal. No downloads, no installs. If you're comfortable with the command line, this is the most lightweight approach since it uses infrastructure already in your OS.

Here's a minimal example that limits bandwidth to roughly 1 Mbps with 100ms of latency:

# Create a dummynet pipe with bandwidth and delay
sudo dnctl pipe 1 config bw 1Mbit/s delay 100

# Create a pf anchor that routes traffic through the pipe
echo "dummynet-anchor \"throttle\"" | sudo pfctl -f -
echo "anchor \"throttle\"" | sudo pfctl -f -

# Add the dummynet rule
echo 'dummynet in quick proto tcp from any to any pipe 1' | \
  sudo pfctl -a throttle -f -

# Enable pf
sudo pfctl -e

To undo it and restore normal networking:

# Flush the anchor rules and destroy the pipe
sudo pfctl -a throttle -F all
sudo dnctl pipe 1 delete
sudo pfctl -d

The advantage is that there's nothing to install — pfctl and dnctl are part of macOS. The disadvantages are real, though: the commands are not intuitive, they require sudo for every invocation, and there's no built-in way to auto-revert. If you forget to undo the rules — or your terminal session gets interrupted — your network stays throttled until you manually clean up. There's also no GUI, no profiles, and no visual indicator that throttling is active. For occasional one-off tests it works, but for regular development testing the manual overhead adds up quickly.

Option 3 — Charles Proxy

Charles is a well-known HTTP proxy and traffic inspector used by many developers. While its primary purpose is debugging network requests, it includes a throttling feature that can simulate slow connections.

To throttle with Charles: install the app, go to Proxy > Throttle Settings, select a preset or configure custom bandwidth and latency values, then enable throttling from the Proxy menu. You can also limit throttling to specific hosts.

The upside is that you get traffic inspection and throttling in one tool, which is valuable if you're already debugging API responses. The downside is that Charles is a $50 proxy tool — it's overkill if you just need to slow down your network. It's also heavyweight, and routing traffic through a proxy layer can interfere with certificate pinning and VPN connections.

Option 4 — Proxyman

Proxyman is a modern, macOS-native alternative to Charles. Like Charles, it's primarily a traffic inspection and debugging proxy, but it includes a built-in "Network Conditions" feature for throttling. It offers preset profiles for 3G, 4G, WiFi, and bad/medium network conditions, and lets you throttle specific hosts rather than your entire connection.

Proxyman has a polished UI and feels at home on macOS. However, the same drawbacks apply — it's a proxy tool where throttling is a secondary feature. It's also more expensive than Charles at $60/year or $100 for a lifetime license. And like any proxy-based approach, it introduces a proxy layer that can cause issues with certificate pinning and VPNs.

Option 5 — Network Throttler (menu bar app)

Network Throttler is a macOS menu bar app built specifically for throttling. There's no proxy layer — it uses a privileged helper to apply system-wide throttling at the network level.

The workflow is simple: install the .pkg, click the menu bar icon, pick a built-in profile (3G, Edge, DSL, LTE, 1 Mbps, or lossy WiFi) or create a custom one with specific bandwidth, latency, packet loss, and DNS delay values. Throttling starts with one click and you can switch profiles instantly without restarting anything. The auto-disable timer lets you set throttling for a specific duration — it turns itself off when your test session ends.

It's a 1.7 MB native SwiftUI app. No analytics, no telemetry. $5.99 one-time with a 7-day free trial.

Which approach should you use?

The right tool depends on your workflow. If you already have Network Link Conditioner installed and only test occasionally, it gets the job done. If you prefer the terminal and don't mind managing pfctl rules manually, that works with zero installs. If you need to inspect traffic and throttle, Charles or Proxyman give you both in one app. If you want the fastest, simplest workflow for day-to-day development testing — something you can toggle from the menu bar in two seconds — Network Throttler is purpose-built for that.

Network Throttler offers a 7-day free trial. Download it here and see if it fits your workflow.

You might also find this useful: Network Link Conditioner: Setup Guide, Common Issues & Alternatives