Shadowrocket
Rules and Configuration Reference
Browse by configuration section, match condition, and policy. First identify the Config handling the request, then see why it matches a particular Rule.
This is a reference guide, not a first-connection walkthrough. If you haven’t imported your existing subscription or server details yet, start with Getting Started to add, connect, and verify. Return to the relevant section for questions about rule scope, priority, or configuration overrides.
Configuration Structure and Editing Guidelines
Understand the difference between a complete configuration, its rule list, and server details before making changes.
One file, distinct sections
A Shadowrocket configuration can include connection-handling options, routing conditions, domain mappings, and request rewrites. Section names in square brackets separate these functions: [General] contains general processing options, [Rule] contains rules checked in order, [Host] contains explicit domain mappings, and [URL Rewrite] contains URL handling rules. These names are functional, not decorative headings; content in the wrong section may not be parsed as expected. When reviewing an unfamiliar file, find these sections first and then inspect their settings line by line, rather than searching for a domain and pasting in a snippet.
Server details and routing rules serve different purposes. A server entry specifies where to connect, which protocol to use, and the authentication parameters; a rule specifies the policy for a request. DOMAIN-SUFFIX,example.com,PROXY alone does not create a working server, and successfully importing a subscription does not mean a particular rule file is enabled. This guide assumes you already have your own subscription or server details. Example domains and addresses illustrate match scope only; they are not connection resources.
Save a copy before making one change at a time
In Config, check which file is selected, note its name, and keep the original content in a separate copy. Before editing, check whether the file comes from a remote URL and whether updates download the entire file again. A remote configuration and a server subscription may both appear as links, yet update different items; identify them by their import method and contents. Don’t treat a remote file as permanent local notes until you understand how it updates: a later update may overwrite rules you added manually.
Keep existing section names and add content only to the intended section. Start with one narrowly scoped DOMAIN rule, then save, enable the configuration, and establish a new test connection. Expand to DOMAIN-SUFFIX only after confirming the result. A successful save means the text was written; it doesn’t confirm that every keyword, parameter, or policy is valid. Address any parsing warnings first instead of adding more rules to obscure the original error.
[General]
dns-server = system
[Rule]
DOMAIN,api.example.net,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
[Host]
lab.example.com = 192.168.10.20
This snippet shows a configuration skeleton, not a complete connection setup. It uses system DNS, sends one exact domain to DIRECT, sends example.com and its subdomains to PROXY, sends all other requests to DIRECT, and assigns a fixed address to a lab domain. Actual access still depends on the selected server, network reachability, whether the address belongs to your environment, and whether the relevant service is running. Don’t use the example address mapping in production as-is.
Separate valid syntax from the right behavior
A line can be syntactically valid but still conflict with your networking goals. For example, FINAL,DIRECT and FINAL,PROXY are both valid fallback policies, but they send unmatched requests in entirely different directions. Reviewing a configuration means more than checking for errors: ask which requests reach the line, whether the target policy is available, and whether the connection can recover from failure. Record the expected input and result for each change, and keep a before-and-after diff.
If a file contains duplicate sections or conflicting settings, organize it into a clear structure before troubleshooting further. Don’t assume without verification that “the last duplicate always takes effect.” Keep rules for the same purpose in readable locations, avoid redundant mappings, and preserve enough notes to explain why a setting exists. This is usually easier to maintain than piling on more conditions.
Routing Modes and When Rules Apply
Correct rules are only the starting point. The current mode, selected configuration, and connection state determine whether they are used.
What Config, Proxy, and Direct do
Before reviewing rules, check Global Routing on Home. Config uses the current configuration’s routing logic. Proxy sends requests through the proxy path, while Direct accesses targets directly. Neither of the latter two modes is a substitute for testing Rule order. If a domain works in Proxy mode, that only suggests the proxy connection may be working for that test; it doesn’t prove the DOMAIN-SUFFIX rule is correct.
The rule walkthroughs here assume Global Routing is set to Config, the target configuration is enabled, and the connection has been re-established. If Scene is also shown in the interface, first confirm which configuration and policies the active scene uses; a scene name is not itself a rule. Interfaces can vary across devices, so check the current selections on screen. The key is to identify which processing logic handles the request, not to memorize a button’s location.
| Mode and interface label | What to check | Useful for |
|---|---|---|
| Config | Current Config and Rule order | Checking domain, IP, and FINAL routing |
| Proxy | Selected proxy server and reachability | Isolating proxy connection issues |
| Direct | Direct access on the current network | Establishing a baseline for a direct connection |
General is not a second Rule section
Options in General affect the underlying processing environment, such as the DNS source, whether certain address families are handled, and which targets are excluded from particular processing. They are not equivalent to individual conditions in Rule. If an earlier network-scope setting excludes a type of request, adding a rule for it at the end of Rule may not have the intended effect. Check General while troubleshooting, but don’t change all its options at once.
For example, dns-server = system means to use the system DNS source; it doesn’t mean all requests connect directly or that DNS will resolve every domain you want to reach. The policy determines the proxy path, while name resolution provides an address for the subsequent connection. Check these separately. If the original configuration has other DNS options, understand how they interact before changing them; don’t replace the whole section just to make it match an example.
[General]
dns-server = system
[Rule]
DOMAIN,api.example.com,PROXY
FINAL,DIRECT
In this example, only the exact domain api.example.com is explicitly sent to PROXY. Under Config, you can use this to check the first matching condition. After switching modes, the observed connection direction no longer proves the order of these two lines. For a controlled comparison, note the mode, make the same request, then restore the original Config. Otherwise, one temporary mode change can invalidate the assumptions behind subsequent rule tests.
Connection state and existing sessions
Long-lived connections may continue on their original path after you save a configuration. Reused browser connections, app sessions running in the background, and DNS caches can all affect what you observe. For a clean test, close existing sessions in the target app, disconnect and reconnect if needed, then make a new request. Don’t conclude that a new rule failed just because an existing media stream hasn’t changed paths; likewise, a page displayed from local cache doesn’t prove network access succeeded.
Connectivity Test can help assess a server’s basic connectivity, but it is not the same test as a specific app request. A server test can pass while the target domain fails to resolve or the service rejects the request. Conversely, a page loading partially doesn’t mean all related subdomains use the same policy. Validate rules against specific requests and match results rather than relying on a single test icon.
Domain Rule Scope and Boundaries
Start with the exact domain you need, then decide whether to broaden the match to a suffix or keyword.
DOMAIN: match one exact domain
The match value for DOMAIN is a domain name, not a full URL. DOMAIN,api.example.com,PROXY applies to api.example.com; a matching string in a page path won’t make it match another site, and it doesn’t automatically cover www.example.com. Don’t include https://, a path, query parameters, or a trailing port. If you need to distinguish paths under the same domain, domain rules aren’t the right tool. First confirm that the app exposes the relevant request information.
An exact-domain rule is useful for a narrowly scoped exception. For example, if the main site and other subdomains use the proxy path but an internal API should connect directly, put the API’s DOMAIN rule before the broader suffix rule. This makes the exception-first intent clear in the file. Exact-domain rules don’t get automatic priority; this one is checked first because it appears first. If you swap the lines, the later exception may never run.
[Rule]
DOMAIN,intranet.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
DOMAIN-SUFFIX: domain suffixes and subdomains
DOMAIN-SUFFIX,example.com,PROXY covers example.com itself and subdomains such as api.example.com and img.cdn.example.com. It matches the domain boundary, not an arbitrary string: notexample.com is not a subdomain of example.com. Usually, enter the base domain directly; there’s no need to write *.example.com. Adding wildcard syntax to a suffix value can make it more ambiguous.
Suffix conditions are useful for managing one domain tree, but a single service may use several unrelated domain trees. A page may also contact separate domains for sign-in, static assets, and APIs. So even if the main site matches a rule, images or sign-in may take a different route. Inspect actual requests and identify the purpose of each necessary domain instead of broadening the rule to a whole public suffix. This is especially important for shared hosting domains, where an overly broad match can affect unrelated services.
DOMAIN-KEYWORD: a broader contains match
DOMAIN-KEYWORD checks whether a domain contains a specified keyword. DOMAIN-KEYWORD,example,PROXY has a wider scope than the example.com suffix and may also match other domains containing example. It doesn’t determine whether those domains belong to the same organization, and it doesn’t search only the registrable domain. Use a keyword condition only when you explicitly need a broad contains match and are prepared for incidental matches.
If you only need api.example.com and download.example.com, prefer exact-domain or suffix conditions. Don’t use a short keyword just to save a line. A single letter or common abbreviation is hard to audit and can unexpectedly include new sites without any configuration changes. Keep keyword rules easy to find and test them against examples that should and should not match.
| Condition | Example value | Match scope |
|---|---|---|
| DOMAIN | api.example.com | Exact domain only |
| DOMAIN-SUFFIX | example.com | This domain and its subdomains |
| DOMAIN-KEYWORD | example | Domain contains this string |
Domain visibility and input cleanup
Domain conditions require the processing flow to associate a request with a domain. If an app connects directly to an IP, or the request doesn’t retain a name that can be matched, a domain rule may not work as intended. Check the target address and logs instead of putting an IP in DOMAIN. For internationalized domain names, use the form that matches the name actually recognized in processing. When copying rules, watch for full-width commas, invisible spaces, and URL-encoded characters.
When organizing rules in bulk, remove duplicates first, then check whether an earlier broad condition shadows a later, more specific one. Keeping duplicate domains with different policies doesn’t enable automatic selection; position still determines the result. For basic examples of rule scope, see Getting Started with DOMAIN, GEOIP, and FINAL. Then review both the rule scope and its position in the complete configuration.
IP Ranges, Address Families, and GEOIP
A domain answers “what is it called?” An IP rule answers “where does it connect?” They are not interchangeable.
IP-CIDR: match a network prefix
IP-CIDR describes an IPv4 address range using an address and prefix length. 192.168.0.0/16 represents a range defined by a 16-bit network prefix; it doesn’t match a page URL just because its text starts with 192.168. A longer prefix usually means a smaller range; a single IPv4 address can be expressed as /32. Before editing, confirm whether you’re targeting a network or one host. Don’t mix a subnet mask or port number into the CIDR parameter.
Local network services often need direct access to local addresses, but set exceptions according to your actual network. Sending a private address range to DIRECT doesn’t create routing between subnets or bypass device and router access controls. If you connect to a different Wi-Fi network with a different address range, the old local exception may no longer point to the same service. Corporate, guest, and home networks may also use overlapping address ranges, so verify the current environment.
[Rule]
IP-CIDR,192.168.0.0/16,DIRECT
IP-CIDR,10.0.0.0/8,DIRECT
IP-CIDR,172.16.0.0/12,DIRECT
FINAL,PROXY
no-resolve: avoid resolving names just to match a rule
IP rules can use the no-resolve parameter to indicate that matching the rule should not trigger an additional domain lookup. This can be useful when the target address is already known or you want to avoid resolving a name solely to check an IP range. It doesn’t mean “the connection never needs DNS,” nor does it guarantee that a proxy endpoint, app, or later rule won’t perform resolution. Actual behavior depends on whether the request already has an address and what conditions follow.
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
FINAL,PROXY
Here, the explicit domain policy comes first, followed by an exception for local addresses. If a request has only a domain, an IP rule with no-resolve should not be treated as a guarantee that it can identify a private address from that domain. If the request already includes a target IP, the address can be checked directly. Choose the behavior you actually need: resolving an address for classification, or preserving the domain-based path. Don’t mechanically add the same parameter to every IP rule.
IP-CIDR6: handle IPv6 ranges separately
IPv4 ranges do not automatically cover IPv6. If your network uses IPv6, include that address family in your tests. IP-CIDR6 also uses CIDR notation, but with IPv6 addresses. The 2001:db8::/32 range below is reserved for documentation examples; don’t use it as a real production network range. Use a range you’ve confirmed is relevant to your own environment.
[Rule]
IP-CIDR6,2001:db8::/32,DIRECT,no-resolve
FINAL,PROXY
When a domain returns both IPv4 and IPv6 addresses, an app may prefer one family or try both in parallel. A single success or failure may not reveal which address rule was involved. Record the address family and destination IP, then review the rule coverage. If the IPv6 path has a problem, first check network connectivity and configuration support; disabling an address family at random is not a universal fix.
GEOIP: classify addresses, not content
GEOIP,CN,DIRECT checks geographic data associated with the destination IP. It doesn’t use the webpage’s language, site operator, or your device’s location, and the classification may not always match expectations. CDNs, shared IPs, and service migrations can give the same domain different addresses on different networks. Don’t generalize one GEOIP match to every request for a site.
For stable domain-based behavior, define domain exceptions first, then use GEOIP as a broader IP classification condition. When investigating a mismatch, record the resolved IP, test network, and matching rule instead of simply saying a site “should belong to” a location. Also check whether the geographic data source suits your use case; classification does not replace verification of the destination and network reachability.
Policy Meaning and First-Match Behavior
The first matching condition determines the policy. “More specific” rules do not automatically skip ahead of earlier ones.
PROXY, DIRECT, and REJECT explained
PROXY sends a request through the proxy path, but the connection still depends on the selected server and a valid server reference in the configuration. DIRECT accesses the target directly; it doesn’t mean “try the proxy, then fall back if it fails.” REJECT blocks matching requests; it isn’t a performance switch. These policies serve different purposes, so don’t rotate them randomly when a request fails. Decide which path the target should use, then check name resolution, connectivity, and the service response along that path.
If a configuration uses custom policy names, confirm that each one exists and that references match definitions exactly. Don’t assume a server remark name is a usable policy, or copy references from another file without their corresponding definitions. This guide uses built-in policy directions to explain the basics and doesn’t include complete custom policy group definitions. If a name isn’t recognized, fix the reference instead of adding more rules with the same name.
Top to bottom, not automatic “most specific first”
Read Rule from top to bottom. When a request satisfies a condition, that rule’s policy applies; later rules are not checked to assign a different policy to the same match. Rule types have no universal ranking that overrides their order in the file. For example, if a suffix rule for example.com appears before an exact-domain exception for api.example.com, the earlier rule will usually match first and shadow the exception. This is one of the most common hidden mistakes in long rule lists.
[Rule]
DOMAIN,api.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
DOMAIN-KEYWORD,example,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
For api.example.com, the first exact-domain condition matches and selects DIRECT, so the suffix rule isn’t checked. For www.example.com, the first condition doesn’t match, but the second does, selecting PROXY. Another domain containing example but not under that suffix may match the keyword condition. IP rules get a chance only if an earlier condition hasn’t already matched; they are not an independent layer that forcibly overrides other rules.
FINAL belongs at the end
FINAL has no separate match value. Common forms are FINAL,PROXY and FINAL,DIRECT. It handles requests that didn’t match earlier rules, so put it last. If FINAL is in the middle, later rules won’t get their normal chance to match. When adding a rule, appending it to the end may accidentally place it after an existing FINAL. Check the bottom of the list after every edit instead of only confirming that the new line exists.
Choose the fallback direction for your network needs and make sure it matches your test expectations. FINAL is not a backup server that takes over when a connection fails, and it won’t run after an earlier PROXY connection fails. Once a rule selects a policy, any connection failure is a separate issue along that policy path. Mistaking FINAL for failure recovery can lead to repeated edits to irrelevant end-of-list rules while the actual problem remains untouched.
Organize rule order into reviewable layers
A common layout puts explicit service exceptions first, followed by appropriately scoped domain groups, then local address and geographic conditions, and finally FINAL. This makes the list easier to review; it isn’t a fixed order for every environment. If your goal requires an IP range to take precedence over all domain conditions, put it earlier and account for the need for address information and the effect on later domain checks.
To review rule order, list one input that should match each important rule and another that should continue down the list. Testing only positive matches can miss shadowing caused by broad conditions. Use the same approach when removing old rules: an exception that seems inactive for a long time may only matter on a particular network, address family, or sign-in flow. Clear notes about each rule’s purpose are a more reliable measure of configuration quality than the number of rules.
DNS Resolution and Host Mappings
Separate “which address a name resolves to” from “which policy handles the connection” before investigating resolution differences.
DNS results and routing results are separate observations
DNS translates a domain into an address needed for a connection; Rule chooses the processing policy for a matching request. They can affect one another, but they are not the same setting. A domain may resolve successfully but remain unreachable, and different connection paths may perform resolution in different places. When investigating, record at least the domain, resolved address, matching rule, and resulting policy. An IP for a domain doesn’t prove routing is correct, and seeing PROXY doesn’t prove the destination is reachable.
The DNS source in General affects the resolution environment. With the system source, results may vary across Wi-Fi, cellular, and system network settings. If you specify another source, check that it’s reachable on the current network and whether the configuration has other resolution options. Don’t change DNS, servers, and rule order all at once without recording the changes. Even if access returns, you won’t know which change fixed it.
Host creates explicit name-to-address mappings
Host is useful for assigning an address to a lab service you manage, a fixed internal device, or a temporary migration test. The usual format is a domain, an equals sign, and an address. It isn’t for page paths or protocol passwords. The configuration below maps lab.example.com to a private address and sets DIRECT for that domain. These express two separate decisions: Host maps the address, while Rule selects the route.
[General]
dns-server = system
[Rule]
DOMAIN,lab.example.com,DIRECT
FINAL,PROXY
[Host]
lab.example.com = 192.168.10.20
The mapping is useful only if the corresponding device and service exist on your network. Saving it doesn’t create a server or give the device a route to another LAN. If the service uses HTTPS, its certificate must match the domain being accessed. Mapping a domain to an address that accepts TCP connections doesn’t guarantee TLS verification will succeed. For certificate errors, check the domain, certificate, and service configuration; disabling verification isn’t a standard part of using Host.
Why you shouldn’t pin public service addresses long-term
Public services often use DNS to direct traffic to different regions, loads, or address families. Manually pinning an IP bypasses that process. An address that works today may later be moved, taken out of service, or become unsuitable for your network. Shared services may also rely on the request’s domain to select a site. Use Host mappings only when there’s a clear reason and they can be verified and removed; don’t permanently apply an IP from a one-off troubleshooting test to every device.
If you need a temporary mapping, record the original domain, resolved address, replacement address, and how to restore the original behavior. Remove the mapping after testing and check that normal resolution resumes. A stale Host entry can make later DNS changes appear ineffective because the domain is still explicitly pointed to the old address. Check for the exact domain in Host before changing the DNS source in General.
Differences caused by caches and address families
Resolution caches may exist in the system, app, browser, and connection-handling process. After saving a configuration, a page refresh may still use an earlier address or an existing connection. To compare results before and after a mapping, start a new request session, reconnect if needed, and inspect the actual destination address. A page displaying again doesn’t prove the cache was cleared; the page itself may be local data.
Another common difference is the coexistence of IPv4 and IPv6. Mapping only one IPv4 address or testing just one address family may not explain all of an app’s connection behavior. Check the app’s actual connection records to see which address it chose, then verify whether IP-CIDR and IP-CIDR6 cover the relevant ranges. For requests that connect directly to an IP, Host is usually not the right troubleshooting starting point because there is no name to translate.
USER-AGENT and URL Rewrite
These conditions depend on request details being visible; they are not universal detectors for every app or encrypted request.
What USER-AGENT matches
USER-AGENT uses identifiable User-Agent information in a request; it is not a general index of app names on the device. It can’t identify every connection from an app icon, and it shouldn’t be described as app-based routing for all traffic. Different apps may use the same system networking component, and one app may send different identifiers—or none of the information required for this match—in different requests. Confirm which fields are actually present before using this condition.
[Rule]
USER-AGENT,ExampleApp*,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
This example uses an identifier beginning with ExampleApp to show the condition’s format; it doesn’t mean a real app will necessarily match. The condition can only be evaluated when the processing flow can access the relevant request information. For connections that don’t expose that field, analyze observable details such as the domain or destination address. Don’t try to compensate for missing input by adding increasingly broad wildcards.
HTTPS does not automatically expose request paths and headers
The domain or address information available to ordinary routing rules is different from the ability to read the full contents of an encrypted request. Being able to match a domain with DOMAIN-SUFFIX doesn’t mean you can read HTTPS paths, query parameters, or User-Agent. Design rules around fields that are actually visible. Don’t change certificate trust or broaden processing just to test a request-header rule that may not apply; understand the security impact and requirements separately.
If you simply need to route a site in a particular direction, a domain rule is often more direct. Consider USER-AGENT and similar conditions only when the task genuinely depends on request-level details and you’ve confirmed that the processing flow can identify them. For testing, use a request you control and compare its input identifier with the expected policy; don’t infer that a field was read just because one visit succeeded.
URL Rewrite: changes the request URL, not the proxy policy
URL Rewrite handles URLs that match an expression. Its role differs from Rule: Rule selects a policy, while a rewrite changes the matching request URL or triggers the corresponding redirect behavior. The example below targets a cleartext HTTP URL and redirects requests for example.com to the corresponding HTTPS URL. The dots in the expression are escaped, the leading anchor restricts the match to the start, and a capture group preserves the original path.
[URL Rewrite]
^http://example\.com/(.*)$ https://example.com/$1 302
Here, 302 indicates a temporary redirect. Whether the client makes the next request as expected also depends on the request method and app behavior. Don’t assume a redirect always preserves every method and request body, or that a changed browser address bar means every background API followed the same rule. Start with a simple, observable request and confirm the response and redirect chain before expanding the scope.
Limit regex scope and prevent loops
When writing an expression, define the scheme, domain boundaries, and path scope before adding capture groups. If the dots in a domain aren’t escaped, a regex may treat them as any character and match unintended addresses. A broad keyword alone may also affect query parameters or other sites. If the replacement still matches the original expression, it can cause repeated redirects. Check the entire chain: original URL → new URL → whether the new URL matches again.
Don’t put account credentials, subscription tokens, or service keys in rewrite snippets that may be shared. Remove sensitive parameters from requests used for examples or notes while keeping enough structure to reproduce the rule’s behavior. Manage any sensitive information in a real configuration privately; don’t post it as a troubleshooting attachment. Before copying someone else’s expression, read both the target domain and replacement URL so the destination isn’t missed.
Review URL Rewrite as a separate checklist item rather than checking Rule alone. Even when domain routing works as expected, a bad rewrite can send a request down another path. Conversely, having a rewrite rule doesn’t mean it handles every connection; applicability depends on the request protocol, visible information, and active configuration.
Rule Verification, Troubleshooting, and Maintenance
Change one condition at a time. Use a new request to check the matching line and actual route, and keep a recoverable copy of the configuration.
Use a minimal, reversible test process
Copy the current working configuration, choose a test domain you’re authorized to use, and write down the expected policy. Add one exact-domain rule and check that it comes before relevant broad conditions and FINAL. Save and enable the copy, set Global Routing to Config, then establish a new connection. Check the domain, destination address, matching condition, and resulting policy. Expand the scope or merge the rule into your regular configuration only after those observations match expectations.
Don’t replace a working setup with a long new configuration and then try to infer the cause from a pile of failures. For remote configurations, preserve the source and local differences. For subscriptions that update, distinguish changes to server data from changes to rule files. If something breaks after an update, first identify which item was updated. A changed server address or authentication detail is a different problem from a misspelled DOMAIN value; changing the same rule won’t fix both.
- Record the current network, Config name, Global Routing mode, and test target. Save the original configuration.
- Change one rule or setting only. Check its section and whether earlier or later rules shadow it.
- Save and confirm that the edited file is enabled, then start a new test session.
- Compare the domain, address, rule, and policy in the logs. If needed, use Direct and Proxy as baselines.
- Restore Config and record the result. If it doesn’t match expectations, revert the change before checking something else.
Narrow down the cause based on what you observe
If the expected rule never appears in the match log, first check the mode, selected configuration, and whether the request was actually made in the current session. Then check whether the domain was entered as a URL, an earlier broad condition matched, or the app connected directly to an IP. If PROXY matched but access failed, investigate the selected server, protocol parameters, DNS, and target service instead of adding more rules for the same domain. Record a rule match and a successful connection as separate outcomes.
| Symptom | Check first | Next test |
|---|---|---|
| Route unchanged after editing | Global Routing, current Config, existing connections | Does a new session match the intended line? |
| Exact-domain rule does not match | Earlier suffix, keyword, or FINAL rules | Does the actual domain exactly match the value entered? |
| PROXY matches but the request still fails | Server status, protocol parameters, and resolution | Compare Direct and Proxy for the same target |
| Only part of the page loads | Separate domains for APIs, sign-in, and assets | Do failed requests use a different policy? |
| Manual rules disappear after an update | Remote configuration overwrite and local copies | Review the changes before and after the update |
Troubleshoot protocol issues separately from routing rules. For example, a Trojan server’s address, port, password, and SNI are connection parameters; see Trojan Parameter Setup. For Hysteria2 and UDP network requirements, see Hysteria2 and QUIC Explained. If protocol parameters are wrong, a matching routing rule can’t supply the missing authentication details.
Remove sensitive information before sharing diagnostics
A minimal useful record usually includes the rule snippet, routing mode, target domain, and stage of failure; the full subscription isn’t needed. Before sharing, remove tokens from subscription links, server passwords, identifying details, and private network information. Check screenshots for address bars, QR codes, and notifications too. If you replace details with example.com or other documentation domains, say what was changed while preserving rule order and syntax so others can assess shadowing.
Maintain rules around actual use cases. Remove unused Host entries, consolidate duplicate domains, confirm FINAL remains last, and keep a few test inputs for important services. Recheck local addresses and address families after switching networks; a successful test on home Wi-Fi doesn’t guarantee the same behavior everywhere. More rules don’t automatically mean more precise matching. For long-term maintenance, document each exception’s purpose, inputs, and rollback method.
Getting and Using the App
Shadowrocket is a closed-source commercial app. The iPhone and iPad version costs $2.99 as a one-time App Store purchase. Versions for Mac (Apple silicon and Intel), Windows, Android, and Linux are free. A one-time app purchase is not a subscription to connection services. This site does not provide, sell, or recommend servers or subscriptions; this guide explains how to use information you already have. Check the App Store listing for iPhone and iPad system requirements. See the Download for All Platforms page for platform-specific access and installation guidance. Get installers for other platforms from this site’s /dl/ directory.
To review connection permissions and the Home screen, return to Getting Started. For questions about obtaining the app, restoring purchases, or installing it, see Download FAQs. Always save the current state before troubleshooting rules, and test with the smallest reproducible change. If the result doesn’t explain the issue, revert the change and narrow down the cause instead of keeping a temporary workaround in the configuration.