When you first open Shadowrocket, start by distinguishing its four main areas: Home is where you manage connections, Config is for configuration files, Data shows traffic and connection records, and Settings controls app preferences. This guide assumes you already have connection details or a subscription from your provider. It explains the interface labels, the order of operations, and how to interpret the same English term in different parts of the app.
Check what you're buying, then explore the four tabs
Shadowrocket is a closed-source commercial app for Apple platforms, primarily used on iPhone and iPad. App Store is the only place to purchase and install it. The app is sold as a one-time purchase; check the App Store listing for the price, compatibility, system requirements and purchase availability. To verify the app, look for developer Shadow Launch Technology Limited and app ID 932747118.
Buying the app does not include a connection plan. After installation, you still need connection details or a subscription of your own. This site does not provide, sell or recommend nodes, subscriptions or providers. An empty list in the app does not mean the purchase failed: buying the app and importing connection details are separate steps.
English labels are kept as they appear in the app so you can match them directly. Wording and menu locations may vary by device, display language and app updates. Check the item name and function rather than relying on an icon's position.
Home: Connection controls, servers and subscriptions
Home is the starting point for everyday use. Check your connection status, choose a server and manage imported connection entries here. The server list is separate from the configuration file list in Config: servers specify connection destinations, while configuration files define how traffic is handled.
Subscribe identifies a subscription. A subscription URL retrieves a set of connection details; it is not a regular webpage URL or a server domain. The steps below apply only to subscriptions you already have permission to use. The example https://example.com/sub?token=xxxx is a placeholder format for illustration and cannot be used to connect.
-
Open Home
Open Home and check the connection toggle and any existing entries. If a usable configuration is already in place, note your current selection so you can restore it after troubleshooting.
-
Add a subscription
Go to Home → tap “+” in the top-right corner → Type → Subscribe. Enter your complete subscription URL in the URL field, then save.
-
Check the entry
Return to Home and check whether the subscription has populated the server list. If the list is empty, first verify that the URL is complete and check the fetch result. Don't add the same URL repeatedly.
-
Select and connect
Select the server you want to use, then turn on the connection toggle. The first time you connect, iOS may ask for permission to add a VPN configuration. Verify the app name and follow the system prompt.
-
Check access
Visit the destination you want to test, then check the corresponding record in Data. Turning on the connection only indicates that the connection process has started; it does not confirm that DNS resolution, routing or access is working as expected.
Shadowsocks, VMess, VLESS, Trojan, Hysteria2 and WireGuard in the list are protocol names, not connection quality ratings. When editing an entry, use the protocol, server address, port and authentication details from your existing information. Don't switch protocols or guess common ports just to try to connect.
Config: Configuration files vs. Config in Global Routing
The bottom Config tab is where you manage configuration files. A configuration file can contain rules, DNS settings and other options. Importing a file, editing it and making it the active configuration are separate actions, each of which should be verified. Seeing a filename in the list does not prove that current traffic is using that file.
| Interface location or item | What it does | What to check |
|---|---|---|
| Servers in Home | Provide the parameters needed for a proxy connection. | Do the protocol, address, port and authentication details match? |
| Config tab | Manages configuration files and settings such as rules. | Which file is active and the order of rules within it. |
| Global Routing → Config | Applies the current configuration's rules to determine how traffic is handled. | Is the correct configuration selected, and does the destination match the expected rule? |
For example, DOMAIN-SUFFIX matches domain suffixes, IP-CIDR matches IP ranges, GEOIP matches based on IP geolocation, and FINAL handles traffic that did not match earlier rules. These are rule keywords, not bottom tabs or server protocols. Rules are generally checked in order, so changing their order may change the outcome.
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT
FINAL,DIRECT
This is a rule-reading example, not a complete configuration: the first line matches the example domain and its subdomains, the second matches a specified private IP range, and the last sends all remaining traffic directly. Don't replace an existing file with this example. All traffic in it ultimately uses DIRECT; no proxy route is configured.
Global Routing: Proxy, Direct, Config and Scene
Global Routing controls how traffic is routed overall. Here, Proxy and Direct are routing modes, not bottom tabs. To find out why a request uses a particular route, first check Home → Global Routing, then check the active configuration and server selection.
- Config: Handles traffic according to the rules in the active configuration. For domain- or IP-range-based routing, first check this mode and the active file.
- Proxy: Routes traffic through a proxy. The specific route depends on the selected server or related policy. This mode cannot fix incorrect authentication details or guarantee access to every destination.
- Direct: Sends traffic directly. The presence of server entries in the app does not mean requests are necessarily going through one of them.
- Scene: Applies routing based on configured scenarios. Before using it, check which scenes are configured and what conditions activate them. It is not an automatic fix that works without setup.
The Direct interface mode and the DIRECT policy in a rule both mean direct routing, but their scope differs: the former is a global selection, while the latter applies only to traffic matching that rule. Likewise, switching to Proxy does not add a rule for a specific domain.
A check sequence for everyday routing and quick troubleshooting
Use your existing rules
- Go to Home → Global Routing and select Config.
- Open Config and verify which file is active.
- In Data, check the matching rule and handling result for the destination.
Compare routing modes
- First note the current mode and selected server.
- Under appropriate test conditions, switch to Proxy or Direct on its own.
- Compare the result for the same destination, then restore the original settings when the test is done.
Change one condition at a time. Otherwise, you won't know whether the result came from the server, configuration rules or routing mode.
Data: Check results, not connection details
Data shows traffic and connection information, making it the place to check what actually happened. After visiting a destination, look for a record matching its time and address; this is more useful than checking the connection toggle alone. Available fields and record detail depend on the current interface and logging settings. Don't infer fields that aren't shown.
- Note the time and destination domain for one test. Pause unrelated activity to reduce background request noise.
- Make one request, then open Data and look for its connection record by time and destination.
- If the details show a DNS result, matching rule, policy or connection error, note each separately. Don't treat any one item as the whole story.
- Return to Home or Config, change just one setting relevant to the issue, then test the same destination again.
An increase in traffic counters may come from background tasks or retries; it doesn't mean the target page loaded completely. Likewise, a successful connection does not guarantee that the service responded properly. If you can't find a record, first confirm that you retried the request, checked the right time range and have logging enabled before investigating routing further.
Settings: App behavior and On Demand
Settings controls app-level behavior and options. It is separate from the settings in a Config file. To determine whether a setting belongs to app preferences or the active configuration, check where you access it. When troubleshooting, write down the full path, such as Settings → On Demand, rather than just noting that automatic connection was enabled.
On Demand triggers connection behavior when configured conditions are met; it is not the same as rule-based routing. Even when a connection starts automatically, check Global Routing and the active configuration to see how requests are handled. When setting up a working connection for the first time, connect manually and verify it before configuring On Demand. This avoids introducing several variables at once.
- Check the setting: Open Settings → On Demand and review the current toggle and configured conditions. Don't rely on the connection status in Home alone.
- Check the trigger: Test a network change that meets the configured conditions and see whether the expected connection behavior occurs.
- Check routing: After the connection starts, return to Home → Global Routing, then check the actual requests in Data.
- Keep a baseline: Note the original settings before changing anything. If the behavior is unexpected, restore them and repeat the same test with a manual connection.
Common questions when getting started
Home is empty after purchase. What went wrong?
Buying the app does not generate connection details automatically. First make sure you have a subscription or server parameters, then go to Home → “+” and add them using the appropriate Type. If you've added a subscription but the list is empty, check that the URL is complete and that the subscription was fetched successfully.
There's a file in Config. Why aren't my requests following its rules?
First go to Home → Global Routing and check that Config is selected. Then open the bottom Config tab and confirm which file is active. Retry the destination request and check its record in Data. A filename in the list alone doesn't mean the rules are active.
I've selected a server. Does Direct still use it?
Selecting a server and choosing how traffic is routed are separate actions. First check Home → Global Routing: Direct means traffic is handled directly. To use your existing routing rules, verify that Config is selected and check the active configuration. To compare proxy behavior briefly, test Proxy on its own, then restore the original setting.
Can I stop checking Data after enabling On Demand?
No. Settings → On Demand controls when a connection starts; Data shows what happened to requests. After a connection starts under the configured conditions, visit the same destination and check Global Routing, the active configuration and connection records to see whether the result matches expectations.
A simple way to remember the tabs: Home selects connections, Config manages configuration, Data shows results, and Settings controls app behavior. When something goes wrong, note the page, full navigation path and actual symptoms before deciding what to change. Don't update a subscription, switch routing modes and edit rules all at once, or it will be difficult to reproduce the cause.