October 19, 2026 · Troubleshooting · About 10 minutes

Shadowrocket Slow? Troubleshooting Nodes, Routes, Protocols, and Your Local Network

Troubleshoot slow Shadowrocket speeds layer by layer: check your node, route, protocol, and local network with tests you can run on iPhone or iPad.

At a glance

For users with their own provider and subscription, when Shadowrocket connects but webpages or file transfers are slow. First distinguish latency, throughput, and page-load delays, then keep test conditions consistent as you check the local network, node, route, and protocol. Change one thing at a time to produce reproducible findings instead of repeatedly changing every setting.

1. Define “slow”: latency, throughput, and time to first content

When the Shadowrocket connection switch is on, it means the system tunnel has started—not that every destination is reachable or performing normally. The latency test in Home is not a sustained bandwidth test: one successful probe does not rule out later packet loss, congestion, remote throttling, or a slow response from the destination site.

First identify where the delay occurs. A link that takes a long time to show anything may be waiting on DNS resolution, connection setup, or the TLS handshake. If text appears quickly but images keep loading, resource requests or sustained transfers may be constrained. If video starts normally and then keeps buffering, check throughput over several minutes. Don’t judge route quality by a single millisecond reading.

Symptoms and what to check first
What you observeCheck firstHow to compare
Only the first visit is slowDNS, connection setup, TLSOpen the same page three times; record the first load separately from later loads
Starts fast, then slows downThroughput, congestion, server throttlingTransfer the same file for 60 seconds and record the rate midway through
Only one website is slowDestination service, routing result, node exitKeep the node unchanged and test two destinations you normally use
All apps are slowLocal access network, current node, shared routeCompare Wi-Fi with Cellular first, then compare your existing nodes

Note the units: Mbps means megabits per second; MB/s means megabytes per second. In an ideal conversion, 80 Mbps is about 10 MB/s; real-world transfers also have protocol overhead. Don’t mistake an app reading of 8 MB/s for a tenfold shortfall from a plan advertised at 80 Mbps.

2. Establish a repeatable test baseline

Before you start, save the configuration you’re using and note the selected node in Home, the Global Routing mode, and the network used for testing. The steps below use your existing settings and don’t involve obtaining a new connection service. Run tests close together in time so differences in network load at different times aren’t mistaken for configuration changes.

  1. Record the current setup

    In Home, note the current node and Global Routing mode. In Config, confirm the active configuration. Check Settings → On Demand for any automatic connection conditions; record the current state, but don’t change it just to run a speed test.

  2. Keep the destination fixed

    Choose a webpage you can normally access and a specific file you’re allowed to test. Use the same destinations in every round. Pause cloud sync, photo uploads, and other bandwidth-heavy tasks so they don’t compete for capacity.

  3. Check routing

    In Home → Global Routing, check the current selection. Config applies the configuration’s rules; Proxy uses the proxy routing mode, and Direct uses the direct routing mode. If you use Scene, verify the settings that the scene actually applies—don’t rely on its name alone.

  4. Repeat the measurements

    Test each condition three times for about 60 seconds per round, and note the median result. Don’t switch nodes, protocols, and networks at the same time. Start a fresh connection to the destination before each test so browser connection reuse or caching doesn’t mask changes.

  5. Restore your original configuration

    After the comparison, restore your original Global Routing mode and configuration. If you changed On Demand, restore its original conditions too, then check your usual apps to make sure the diagnostic settings won’t affect regular use.

3. Local network: compare Wi-Fi and Cellular first

If the same node is slow on Wi-Fi but works normally on Cellular, the change is associated with the access network—but that doesn’t prove the router is faulty. The two connections use different carrier routes, and the difference may also lie between the access network and the node. Narrow down where the issue occurs before checking the router or contacting your provider.

After switching networks, start a new request rather than watching a task that was already downloading. Existing connections may stall or retry after the device’s address changes. If the issue occurs only after switching, manually disconnect and reconnect Shadowrocket to test. On Demand controls when a connection is established automatically; it does not increase bandwidth.

4. Nodes and routes: separate server differences from time-of-day effects

Here, a “node” means a set of server connection parameters in Home; a “route” is the network path from your device to that server and then to the destination. Switching nodes usually changes the exit location and network path too. If one node is faster, that only shows that performance differs along the paths you tested—it doesn’t prove the original server is underpowered.

Local app Access network Node entry Proxy server Exit route Destination service

Choose two nodes you already have and compare them, keeping the protocol, destination, and local network the same where possible. If only one node is consistently slow, check its service status, usage limits, and whether its settings have changed. If several nodes slow down only in the evening and recover during the day, record the time rather than rebuilding all your configurations. Congestion on a shared route, load at the entry point, or load at the destination can all cause this pattern.

Example log: hypothetical figures, not a performance guarantee
Conditions held constantWhat changedExample readingsWhat you can conclude
Same Wi-Fi, same fileNode A changed to node B0.8 MB/s to 5.2 MB/sContinue comparing the two nodes and their routes; don’t change local DNS first
Node A, same fileWi-Fi changed to Cellular0.8 MB/s to 4.6 MB/sCheck the access network and the route to the node first
Same node, same Wi-Fi2:00 p.m. and 9:00 p.m.5.0 MB/s to 0.7 MB/sThere may be a time-of-day pattern; repeat tests over several days before drawing conclusions

Also check your provider’s account page for exhausted data, expiration, or speed limits. Shadowrocket’s Data reading may use a different accounting method from your provider, so one local cumulative figure can’t rule out an account-side limit. If you need to update an existing subscription, save your configuration first, update it through the original subscription source, and confirm whether the selected node’s parameters actually changed.

5. Protocols: verify settings before comparing transport behavior

In Home, open the edit screen for the current server and check Type, address, and port against the parameters from your existing provider. A port number alone doesn’t identify a protocol or determine its speed: if the server specifies 443, use 443. Don’t switch to another port just because it seems more common. Changing the port locally won’t make the server offer a different service.

A protocol comparison requires the server to support each corresponding entry. You can’t test by simply changing VLESS to Trojan in Type. Even when both entries work, they may use different servers, so the measured difference may not come from the protocol. Compare the full settings and network conditions before considering protocol overhead.

Error: i/o timeout

Cause and next steps: A network read or write operation exceeded its wait time. This message alone doesn’t identify where the problem is. Check the destination and surrounding details in the same log entry, verify the address and port, and test the same node on another local network.

Error: connection refused

Cause and next steps: The destination port refused the connection, possibly because no service is listening or an intermediary actively rejected it. Check the port against your existing settings and ask your provider to confirm the entry point’s status; repeated speed tests won’t fix it.

Error: certificate verify failed

Cause and next steps: TLS certificate verification failed; check the full error to determine why. Verify the system date and time, Server Name, and server certificate status. Disabling certificate verification is not a speed optimization.

Error messages may come from different connection components; the exact wording depends on the log. If an error keeps appearing, treat it as a connection failure first. Don’t mistake long waits caused by repeated retries for low available bandwidth.

6. Rules and DNS: confirm where requests actually go

If the same node works normally in Proxy mode but slows down again in Config, check the active Config rules and DNS behavior first. Rules determine how requests are handled; DNS determines how domain names are resolved. They aren’t the same setting. Don’t replace the configuration, resolver, and node all at once, or you won’t know which change made a difference.

Don’t use an IP address instead of an HTTPS domain for general speed tests. This can change certificate verification, the TLS Server Name, virtual hosting, and the CDN route—so you’re no longer testing the same destination. Send requests to the normal domain and check the connection log to see whether resolution completed and which policy was applied.

7. Common questions and wrapping up

Why are downloads slow when latency is only a few dozen milliseconds?

Latency measures a short response; downloads require sustained transfer. Keep the node and file fixed, test continuously for 60 seconds, and repeat three times. If throughput is low while latency remains steady, check speed limits, load, and the exit route. Don’t draw conclusions from latency rankings alone.

Proxy mode is faster. Should I always use it?

Treat it as a clue for checking your rules first. Record the comparison in Home → Global Routing, then return to Config and inspect the rules that match the destination request. When troubleshooting is complete, restore the mode that suits your regular use.

The connection stalls after switching networks. Will reconnecting fix it?

First test with a new request to rule out an old connection waiting to retry. Then check the automatic connection conditions in Settings → On Demand and note the difference between manual and automatic connections. Don’t rely on repeated reconnects as a permanent way to improve speed.

All my existing nodes are slow. What information should I provide next?

Provide the test time, access type, destination type, readings from all three rounds, and the single-setting comparisons you’ve already made. Include a redacted error log, hiding passwords, UUIDs, keys, and tokens in subscription URLs. Ask your provider to confirm the service status.

When you finish troubleshooting, write down a reproducible finding, such as “same node and destination; all three Wi-Fi tests were slow, but Cellular recovered,” rather than just “Shadowrocket is slow.” If only one destination is affected, keep checking its relationship to the exit route. If every destination is affected, investigate shared access or node routes. Don’t assign a cause before you have a comparison.

Verify Shadowrocket on the App Store