When you first use Shadowrocket, distinguish between app sections and routing options: Home, Config, Data, and Settings are separate areas, while Proxy and Direct are options under Global Routing. This guide walks through everyday use on iPhone and iPad, including where to add existing service details, enable rules, review connection logs, and check first when something goes wrong.
Start with the distinction: app sections are not connection strategies
The bottom tabs determine what you’re viewing; Global Routing determines how connections are handled. Tapping Data just opens the traffic view—it doesn’t switch routing to Direct. Opening Config doesn’t mean a particular configuration is active. To identify an interface label, check both where it appears and whether it’s selected.
| Interface label | Location and level | Primary purpose |
|---|---|---|
Home | Bottom tab | View the connection toggle, existing servers, and subscriptions, and open Global Routing. |
Config | Bottom tab; may also appear under Global Routing | As a tab, it manages configuration files; as a routing option, it applies rules from the active configuration. |
Proxy | Global Routing option | Route intercepted traffic through a proxy instead of applying the usual rule-by-rule routing. |
Direct | Global Routing option | Connect intercepted traffic directly to its destination without forwarding it through a proxy server. |
Data | Bottom tab | Review traffic and connection records for clues about how a request was handled. |
Settings | Bottom tab | Adjust app preferences, including behaviors such as On Demand. |
The same label can mean different things depending on where it appears. A file on the Config page contains rules; Global Routing → Config is the routing mode that uses configuration rules. When troubleshooting, check these separately: whether the file is selected and whether routing is using it.
Home: check the connection toggle, then the service list
Home is the starting point for everyday tasks. Server entries contain connection details, while a subscription reads and refreshes entries from a service address you already have. Selecting an entry, turning on the connection, and choosing a Global Routing option are three separate actions. Doing only one doesn’t confirm that requests are being handled as expected.
These steps assume you already have your own service provider and subscription. Buying the app does not include a connection service. Use your own valid details when importing, and never post passwords, full subscription URLs, or QR codes containing authentication details publicly.
-
Add service details
Go to Home → tap “+” in the upper-right corner. To add a subscription, choose Subscribe under Type, enter your subscription URL, and save. For an individual server, choose the appropriate Type based on your service details.
-
Check the entries
Return to Home and confirm that the subscription has populated the server list. Check the names, protocols, and required parameters; a saved subscription does not necessarily mean its contents were refreshed successfully.
-
Check routing
Go to Home → Global Routing. To route traffic according to rules, select Config, then check the Config page to confirm which configuration file is selected.
-
Connect and verify
Return to Home, confirm the selected server, and turn on the connection toggle. When prompted during the first connection, allow Shadowrocket to add a VPN configuration. Then visit a specific destination and check the records in Data.
Type on the server edit screen refers to the protocol, not the routing strategy. Names such as Shadowsocks, VMess, VLESS, Trojan, Hysteria2, and WireGuard identify protocols and their parameter formats; Proxy and Direct do not belong in the protocol field. The port must also match your service details—don’t change every server port to 443 just because the destination uses HTTPS.
Global Routing: How Proxy, Direct, Config, and Scene differ
Global Routing is under Home and is the first place to check whether routing rules are being used. It controls how traffic handled by the app is routed; it should not be taken as an absolute guarantee for every network activity on the device. To compare options, use the same destination and network, keeping all other settings unchanged.
- Proxy: Routes traffic through a proxy. Useful as a temporary test of proxy connectivity, but selecting it does not guarantee the server is reachable.
- Direct: Connects directly to the destination. It does not automatically select the fastest server or turn off the app’s connection toggle.
- Config: Applies the rules in the active configuration to decide how traffic is handled. Check this option when you need rules such as DOMAIN-SUFFIX or IP-CIDR to take effect.
- Scene: Applies routing behavior based on configured scene conditions. When troubleshooting, check the scene conditions and related settings; Scene is not a protocol.
How to check: keep temporary tests separate from everyday rule-based routing
Test the proxy route temporarily
- Note which server is selected on Home.
- Temporarily select Proxy under Global Routing.
- Visit a fixed destination and note whether it loads, times out, or shows a connection error.
- Restore the previous routing option after the test.
Check everyday rule-based routing
- Set Global Routing to Config.
- Confirm the active file on the Config page.
- Check which rule and policy match the destination.
- Use records in Data to verify how the request was actually handled.
If a destination works under Proxy but not Config, check the rules and policies further. That result alone does not prove the rest of the configuration is correct.
Config: configuration files, matching conditions, and policies each have a role
The Config page is for managing configuration files. A configuration can contain rules and other network settings; it is not the same as the server details on Home. Refreshing a subscription typically updates service entries, while changing the active configuration can alter rule matching order and routing policies. Track these actions separately so you can isolate the cause if something goes wrong.
Rules are matched from top to bottom, and the matching rule’s policy is applied. FINAL is the fallback when no earlier rule matches. The examples below illustrate rule syntax; they are not a complete configuration file and do not provide a connection service. example.com is a documentation domain, and 192.0.2.0/24 is a documentation-only IP range.
[Rule]
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.0.2.0/24,REJECT,no-resolve
FINAL,PROXY
DOMAIN-SUFFIXmatches domain suffixes. The first example matches example.com and its subdomains, then applies DIRECT.IP-CIDRmatches an IP range. In the example,no-resolvemeans this IP rule won’t trigger an additional domain lookup; it does not disable DNS globally.GEOIPmatches based on IP geolocation data, not a webpage’s language or text in its domain name. Both the data and the destination’s actual IP can affect the result.FINALis the fallback rule. Placing it before specific rules prevents those later rules from matching as intended.
Here, PROXY, DIRECT, and REJECT are rule policies: route through a proxy, connect directly, and reject the request, respectively. The interface option Proxy is related to the PROXY policy in a rule, but they operate at different levels: the former is a global routing option, while the latter is the action taken when an individual rule matches. After editing a file, save it and confirm it’s active, then test again under Global Routing → Config.
Data: use records as evidence, not traffic totals as conclusions
Data shows traffic and connection information. When troubleshooting, identify the destination you want to check, then make a fresh request. Other domains in the log may come from page resources, background app requests, or system activity; don’t assume they belong to the same request just because they appeared around the same time. Whether detailed records are available also depends on your logging settings.
- Note the destination domain, network type, selected server on Home, and Global Routing option.
- Make one request and note the observable result, such as a fully loaded page, a prolonged wait, or a connection error.
- Open Data and check for related records by time and destination. If the details show rule or policy information, compare it with the rules in Config.
- Change one setting, then try the request again. Compare the new result with the old one separately, and don’t treat an earlier connection record as evidence of what happened after the change.
Before sharing troubleshooting details, redact server addresses, authentication fields, and tokens in subscription URLs. The destination domain, error message, time, and routing option are usually enough to describe the issue. Don’t publish your entire configuration just to show someone the full interface.
Settings: understand On Demand and subscription behavior
Settings controls app behavior; it isn’t the usual place to add a server. Settings → On Demand configures connection behavior triggered by conditions. It serves a different purpose from Global Routing: On Demand determines when to establish or maintain a connection, while Global Routing determines how requests are handled once connected. If the connection turns back on after you disconnect manually, check On Demand before changing a DOMAIN-SUFFIX rule.
- Check by network: Note whether the issue occurs on a specific Wi-Fi network or cellular, then check the corresponding conditions under Settings → On Demand.
- Check by domain: If you’ve set a domain-based trigger, make sure the domain you’re testing matches the condition. Don’t rely on the app name alone.
- Check updates: Review subscription update settings under Settings → Subscribe. Verify update behavior and whether the current proxy connection works as separate issues.
- Change settings one at a time: Check the existing conditions first, then adjust a single setting. Don’t change On Demand, the subscription URL, and the Config file all at once.
Automatic subscription updates and On Demand do different things. The former refreshes subscription contents; the latter controls connection triggers. A successful update doesn’t mean every server is reachable. Likewise, a server that currently works doesn’t mean the subscription URL is still returning valid content.
Common misunderstandings: go back to the right section for the issue
I opened Config. Why don’t my rules seem to be working?
First, confirm that the intended file is enabled on the Config page. Then go to Home → Global Routing → Config. Make a fresh request and check the related records in Data. Simply opening Config does not switch the routing mode.
Home says I’m connected. Why won’t the webpage load?
First check whether Global Routing is set as intended, then verify the selected server’s parameters and the result of your request. An active system VPN connection doesn’t guarantee that the remote server, DNS, or destination website is working. Use records in Data to narrow down the issue.
I selected Direct. Does that mean the connection is disconnected?
No. Direct is a routing option; check the connection toggle separately on Home. To disconnect, turn off the toggle on Home. If the connection turns back on later, check whether Settings → On Demand has a trigger condition.
After importing a subscription, do I also need to import it again under Config?
Don’t mix up the two types of information. Home → “+” → Type → Subscribe adds subscription service entries; Config manages configuration files. If your service provides a separate configuration file, check its purpose and contents before deciding whether to enable it.
For everyday use, follow this order: check the service and connection on Home → confirm the routing mode under Global Routing → review rules in Config → check evidence in Data → review automatic behavior in Settings. Keeping connection details, routing policies, and automatic triggers separate helps avoid toggling settings without knowing what changed.