This guide is for users who already have a subscription or server details from their provider. First, distinguish a server subscription from a remote configuration. Then import using Subscribe, Add Server, QR code, or clipboard, and check the update result, Global Routing, and Connectivity Test. Not every method creates an updatable subscription group, and a successful import does not mean the connection is ready.
First, distinguish server subscriptions from Config files
In Shadowrocket, Home is where you select servers, manage server subscriptions, and connect. Config is for managing rule configuration files, while Settings is for adjusting app preferences. Server subscriptions provide connection entries; rule configurations determine how requests are routed. An HTTPS URL alone does not tell you which type of content it contains.
Subscribe on the Config page is for remote configuration files. If you have a server subscription URL from your provider, go to Home, tap “+” in the upper-right corner, then open Add Server and set Type to Subscribe. Importing a server subscription as a rule configuration may cause a parsing error, or leave you without the expected server list.
Server subscription
- Where to find it
- Home → + → Type → Subscribe
- What it contains
- A set of server connection details
- Example URL
https://example.com/sub?token=xxxx- Where to check
- Subscription groups and their entries on Home
This URL is for format illustration only. Use a valid URL you already have.
Remote rule configuration
- Where to find it
- Config → Subscribe
- What it contains
- Configuration text with sections such as [General] and [Rule]
- Example URL
https://example.com/profile.conf- Where to check
- Configuration files saved and selected in Config
A configuration may change DNS, rules, and policy references. Review its contents before applying it.
To identify the format, first check how the provider describes the URL, then inspect the response. Don’t rely on the file extension alone. An HTTPS URL may return a login page, an error, or an expiration notice—none of these can be parsed as a server subscription. Subscription tokens usually act as access credentials, so redact the full URL, passwords, and UUIDs when troubleshooting.
Method 1: Create an updatable subscription with Subscribe
To keep server entries in sync, create a subscription with Type set to Subscribe. The entry stores the subscription URL and fetches the server list again when updated. Unlike saving server details individually, this preserves a source that can be requested again.
-
Copy the URL
Copy the complete subscription URL from your provider’s information, including
https://, the path, and query parameters. Don’t include explanatory text, line breaks, or trailing punctuation. -
Choose the type
Go to Home → “+” in the upper-right corner → Add Server → Type → Subscribe. Make sure you haven’t selected a single-server protocol type.
-
Enter the URL
Paste the subscription URL into URL and enter a recognizable name in Remarks. Check that the token is complete, then save the entry.
-
Update the list
Return to Home and pull down to update the subscription. Wait for the request to finish, then expand the subscription group and check that server entries were added—not just an empty group.
-
Check the entries
Open an entry’s details and check that its Type, server address, and Port match the information you have. Then select the server on Home. Verify that it works before changing automatic update settings.
For a remote rule configuration URL, go to Config → Subscribe to add and fetch the configuration. Review its contents in Config before selecting it. Updating a remote configuration and updating a server subscription are separate actions; updating one does not sync the other.
Method 2: Enter server details manually in Add Server
If you have a server address, port, and authentication details but no import link, go to Home → “+” → Add Server. Choose a Type first, then fill in the fields for that protocol. Changing Type also changes the required authentication, transport, and TLS settings. A manually added entry is a single connection, not an automatically updatable subscription.
| Type | Required details | Common omissions |
|---|---|---|
| Shadowsocks | Server address, Port, encryption method, Password | The encryption method doesn’t match the server, or a required server-side plugin parameter is missing. |
| VMess / VLESS | Server address, Port, UUID, transport settings | Only the UUID is entered, while enabled settings such as TLS, SNI, or WebSocket Path are missing. |
| Trojan | Server address, Port, Password, TLS settings | The connection address is confused with the server name used for certificate validation. |
| Hysteria2 | Server address, Port, authentication details, TLS settings | An enabled obfuscation parameter is missing, or the current network restricts UDP. |
| WireGuard | Private key, peer public key, Endpoint, interface address | A key is treated like a regular password, or peer and interface details are missing. |
For example, enter 443 as the Port only if your details explicitly specify 443. Don’t change the port to this value just because TLS is enabled. The connection IP, SNI, and HTTP Host can serve different purposes; enter each as shown in the original configuration. If TLS verification fails, first check the device time, server name, and certificate details. Disabling verification is not a general-purpose fix.
- Before saving, check the Type. The same server address and port do not imply the same authentication protocol.
- After saving, return to Home and select the entry. Seeing it in the list does not mean it is selected as the connection target.
- After changing any settings, reconnect and test again. Don’t mistake the previous connection status for the result of your changes.
Methods 3 and 4: Scan a QR code or import from the clipboard
QR codes and the clipboard are ways to transfer data, not connection protocols. A QR code can contain a single-server URI or a subscription URL; clipboard content can do the same. Whether an import creates a subscription group depends on the parsed content, not the import method.
Scan a QR code
- Display a QR code you already have on another screen or on paper, then open the scanner from Home. Allow camera access when prompted the first time.
- Keep the full QR code in frame and make sure it’s clear. After scanning, review the parsed result. For a single server, check the Type and Port; for a subscription, check the URL.
- Confirm and save, then return to Home to check for the new entry or subscription group. If the QR code only opens a regular webpage, obtain the actual connection details instead of saving the webpage URL as a subscription.
If the QR code is displayed on the same device, use the corresponding text link where possible instead of repeatedly capturing and sharing an image that may contain credentials. A QR code may include a password, UUID, or subscription token; protect it like any other connection credential.
Import from the clipboard
- Copy only the complete link text, such as a single-server share link beginning with
ss://,vmess://,vless://, ortrojan://. Don’t copy an entire chat conversation. - Return to Shadowrocket and follow the clipboard detection prompt to import. If iOS asks for paste access, allow it only for this action you initiated.
- If no detection prompt appears, first check that the original text is still on the clipboard. For a regular HTTPS subscription URL, you can go to Home → “+” → Type → Subscribe and paste it into URL instead of relying on automatic detection.
- After saving, check the number and names of the entries. Importing after copying the same link multiple times may create duplicates; review them individually and keep the entries you need.
Example format for a server subscription URL:
https://example.com/sub?token=xxxx
Example format for a remote configuration URL:
https://example.com/profile.conf
Common prefixes for single-server share links:
ss://
vmess://
vless://
trojan://
The domain and token above are format examples, not usable connection details. Don’t manually edit the encoded content in a share link. In particular, if characters such as +, /, =, or % are replaced or truncated by a messaging app, the original parameters may not be recoverable.
After importing, check Global Routing and the connection
Importing only gets the details into the app. Next, select a server on Home, check Global Routing, turn on the connection, and allow the VPN configuration when prompted by iOS. Then run Connectivity Test and test the destinations you actually need. A successful single test only confirms that the request received a response that time.
Config
Recommended forRoutes requests according to the rules in the currently selected configuration. Check the rule order and policy references in Config before deciding whether a request should connect directly or through a proxy.
Best for: everyday use after verifying the rule configuration.
Proxy
Sends general requests through the proxy route and can help temporarily isolate rule-related issues. System traffic, bypass settings, and network conditions still matter, so this does not mean every packet from the device follows the same route.
Best for: checking basic server connectivity and temporarily isolating rule issues.
Direct
Uses a direct connection. Even if a server has been imported and selected, a webpage opening in this mode does not prove the proxy server is working.
Best for: checking direct connectivity on the local network.
Scene
Applies routing behavior based on the configured scene conditions. Check which scene is currently active and review its settings; this is not another global proxy mode with a fixed meaning.
Best for: network switching needs with configured and verified scene conditions.
In Config mode, use the rules below to understand first-match behavior. This is not a complete configuration. The policy referenced by PROXY must be available in the actual configuration; pasting in a few rules does not complete the setup.
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
DOMAIN-SUFFIX matches a domain and its subdomains; IP-CIDR matches an IP range; GEOIP matches using an IP geolocation database; and FINAL catches requests that did not match earlier rules. Rules are evaluated from top to bottom, so specific rules should come before broad ones. While testing, check Settings → On Demand for automatic connection conditions to avoid a condition reconnecting after you disconnect manually.
Troubleshoot import failures and update issues
First, distinguish three cases: no entries were created, which points to a fetch or parsing issue; entries were created but won’t connect, which points to server settings or the connection path; or some destinations fail after connecting, which is when to check rules and DNS. Troubleshooting by stage helps avoid attributing every issue to a “broken subscription.”
The link pasted successfully, so why is the list still empty?
First check whether you added a server subscription under Config → Subscribe by mistake. Add server subscriptions via Home → “+” → Type → Subscribe. Then check whether the URL is missing a token, contains spaces, or returns a login or expiration notice. If an HTTP status is shown, check authorization and access conditions for 401 or 403, and the path for 404.
A subscription update timed out. Do I need to connect first?
First confirm that your current network can reach the subscription URL. If you already have a working server, connect and try again. If the subscription needs to be fetched through your existing proxy, check Settings → Subscribe → Update via Proxy. Without a working connection, enabling this option won’t solve the initial fetch; check your URL and network first.
The QR code was recognized. Why won’t it connect?
Successful recognition only means the QR code contents could be parsed. Open the imported entry and check the Type, Port, authentication details, and TLS settings one by one. Select it on Home, then run Connectivity Test. If every entry fails, check the local network; if only one fails, check that server’s settings and status first.
Why did my name and settings change after an update?
A subscription update replaces the group data with what the remote source returns, so manual edits within the group may be overwritten. Check the source in the subscription group. If you need to maintain an entry independently, save its complete details separately using Add Server and manage it yourself rather than relying on subscription updates for that entry.
The test passed, but a webpage still won’t load. Why?
First check whether Global Routing is set to Config, Proxy, Direct, or Scene. Then review the actual rule match and DNS result for the request. In Config mode, pay particular attention to the order of DOMAIN-SUFFIX, IP-CIDR, GEOIP, and FINAL rules. Don’t repeatedly delete and re-import the entire subscription to fix a single destination.