Server management / Guide

Shadowrocket Subscription and Server Management

Identify the information you have, then choose Subscribe, Add Server, or an import option. Check the fields and test the connection after saving, then organize or remove entries.

Use this page as a topic-by-topic reference. If you haven’t made your first connection yet, start with Getting Started to complete the import, choose Global Routing, and verify the connection. Then come back to manage multiple subscriptions, updates, and backups. Shadowrocket is a paid app available through the App Store; a one-time app purchase is not a service plan. This guide covers only how to manage subscriptions or server details you already have.

01 / Choose an import method

Subscribe: Import a subscription you already have

Identify your information before choosing an option

If you have a subscription URL that returns a server list, look for Subscribe. If you have the Address, Port, and authentication details for a single server, go to Add Server in the next section. The difference is not connection capability, but how the information is maintained: a subscription typically provides multiple server entries from one URL and can be fetched again later; a manually entered record is saved field by field and must be checked field by field when edited. Entering a single server’s share link as a subscription URL—or a subscription webpage as a server Address—will make troubleshooting harder.

After opening Shadowrocket, look for Subscribe under Config or another server management option. The location may vary with screen size and app layout, so follow what the current app displays. Before proceeding, make sure you copied the full URL, including its path, query parameters, and final characters. Here’s a fictional example to illustrate the format; it won’t return usable information. Treat real URLs as sensitive: don’t post them in public discussions, screenshots, or support requests.

https://example.com/sub?token=xxxx

Check the three results separately after saving

Enter your existing URL in Subscribe, then save or update as prompted by the current interface. First, check whether the subscription appears in the list. Next, check whether updating it creates server entries. Finally, select an entry and see whether it connects. These results are not interchangeable: a subscription name appearing does not mean its contents parsed successfully, and a server name appearing does not mean its parameters are valid. For your first import, compare the entry count and names with what you expect, open one entry to check its Type, Address, and Port, and only then test the connection.

If the list is empty, check the original text for line breaks, leading or trailing spaces, or a URL copied only in part. If the app reports that fetching failed, check whether the device can reach the URL and whether the source that manages your existing information still maintains it. Don’t immediately delete and add it repeatedly; that can leave multiple entries with indistinguishable names. If content was fetched but could not be parsed, record “fetch failed” and “parse failed” as separate clues. The former points to the URL or network reachability; the latter points to the returned content or its format. For more detailed steps, see the subscription update troubleshooting checklist.

How subscription records and server entries relate

A subscription is the entry point for future updates; server entries are the results you can select. A change in an entry’s name, order, or count after an update does not by itself mean that manually entered app settings were changed. First check whether the change came from the same subscription, then confirm that the currently selected server is still listed. The information delivered by a subscription depends on the details you already have; Shadowrocket displays and manages the returned content. Before relying on manual changes long term, find out whether the next subscription update will overwrite them. Don’t assume updated entries are permanent local drafts.

For your first import, start with one subscription you can identify. Note its display name, how the entries change after an update, and one test result. This isn’t a limit on how many subscriptions you can have; it gives you a clear starting point. If you add several subscriptions at once and then find an empty list, it can be hard to tell which URL or update caused the change. If you already have multiple entries, go to Organize multiple subscriptions and establish a clear naming and checking order.

02 / Manual entry

Add Server: Enter a single server’s details

Choose Type based on the information you have

Use Add Server when you have the complete details for a single server. Select the Type that matches your information, then fill in the fields shown for that Type. Don’t choose a protocol based on a guess and try to force parameters for different protocols into the same form. Shadowsocks, VMess, VLESS, and Trojan are protocol types; the available fields vary by Type and in-app options. The most reliable approach is to compare your information with the form side by side, matching each field name, format, and toggle. Don’t guess at missing details.

FieldWhat to checkCommon mistake
TypeMatch the protocol specified in the server details you already have.Using the server’s name as the protocol.
AddressEnter the hostname or address only, without a webpage path.Including https:// and the path.
PortEnter the port number specified in your information.Copying an example value or entering a local port instead of the remote port.
PasswordFill this in only when required by the selected Type, and match it exactly.Accidentally including spaces or line breaks when copying.
RemarkUse a recognizable remark to distinguish entries.Using the remark in place of the actual Address.

Understand the core and additional fields

Address identifies the remote server, Port identifies its access port, and Remark helps you recognize the entry in the list. Whether Password, UUID, encryption method, TLS, SNI, and other parameters appear—and how they fit together—depends on the selected Type and the information you already have. Trojan details often require checking Password and TLS-related fields; VMess and VLESS details commonly include UUID and transport settings. Similar field names don’t mean you can copy an entire configuration from one Type to another. For more on these differences, see Trojan field guide and VMess and VLESS field differences.

When entering details manually, start with fields that don’t expose authentication information: check Type, then the characters in Address and the digits in Port, then protocol-specific fields, and finally Remark. Save the entry and open it again to make sure keyboard substitutions, copied whitespace, or switching forms didn’t change anything. The example values example.com, 443, and your-password are fictional and illustrate field formats only; they’re not substitutes for your own details. Don’t include passwords, UUIDs, or private keys in public screenshots.

Saving does not verify the connection

Saving an Add Server entry only confirms that the form accepted what you entered. Next, select it in the list and check its connection status or run a test as needed. If the test fails, first confirm that Type matches the fields, then check for any additional transport or authentication requirements in your information. Don’t change five or six parameters at once. Change one clearly suspect field, save, and test again so you can tell what made a difference. If your existing information still doesn’t resolve the issue, keep a screenshot of the original entry or notes on non-sensitive fields, then ask whoever maintains that information. Don’t turn a guess into a permanent configuration.

Manually entered entries are maintained separately. They can also help you compare details with a server entry in a subscription, but don’t assume they’re the same record. A subscription update may replace its server entries; manually entered entries generally need to be changed by hand. If the list contains subscription and manually entered entries with similar names, distinguish them by source and remark before deciding what to keep. The next section covers QR code and clipboard imports: they change how you enter information, not the need to check fields.

03 / Quick import

Scan QR Code and import from the clipboard

Check what the QR code contains before scanning

Scanning is a way to let the app read information you already have; it isn’t a server protocol. A QR code may contain a single server’s share link or a subscription URL. Check the result using the Add Server or Subscribe steps, as appropriate. When looking for Scan QR Code or another scanning option in Shadowrocket, follow the name and location shown in the current app. Before using the camera, make sure the QR code contains the information you intend to import. Don’t judge its contents only by the server name printed beside it. After scanning, review the recognized Type, address, or subscription record before saving.

A QR code displayed on the same iPhone may not be easy to scan with that device’s camera. Check whether the current app offers an option to recognize an image or read from the clipboard; available options depend on the interface, so don’t assume a particular button location is fixed. If the QR code is on another device, use the camera to scan it. If it’s in an image on this device, make sure the image is clear and complete, then use the recognition option available in the app. If recognition fails, don’t crop into the QR code’s edges. Also check that it contains text the app can process, not just a webpage link.

Avoid extra characters when importing from the clipboard

Clipboard import is useful when you’ve copied a complete share link or subscription URL. Select only the text you need—avoid copying explanations, quotation marks, or bullet points along with it. If the app offers a clipboard recognition option, review its preview. If there’s no matching option, paste the text manually into Subscribe or the appropriate Add Server field, based on its contents. Don’t assume copying alone creates an entry, and don’t connect without checking what you pasted. Some messaging apps shorten the link shown on screen, so verify separately that the clipboard contains the full text.

After recognition, check what was imported. If it’s a server entry, verify Type, Address, Port, authentication fields, and Remark. If it’s a subscription URL, make sure it was saved as a Subscribe entry and check the server list after updating. QR codes and the clipboard are just input methods; they can’t confirm that the information is complete. In particular, if a QR code contains multiple lines of text, the app may recognize only the part it can process. If the result doesn’t match what you expected, go back to the original text rather than guessing how to complete a partial entry.

What to do if import fails

If scanning produces no result, check the image, brightness, and camera permissions, then confirm that the QR code actually contains a subscription URL or server share text you already have. If clipboard import produces no result, paste the copied text into a regular text field on your device. Check its first and last characters and make sure there are no spaces, line breaks, or explanatory text, then try again in the app. Switching import methods can’t restore missing text. If the content is complete but recognition still fails, use the format guide in the next section to determine whether it’s a subscription URL, a single-server link, or a set of details to enter manually.

After importing, don’t immediately scan the same code repeatedly. Duplicate entries may have the same Remark but come from different import attempts, making it hard to tell which one you selected later. Open the new entry, check its source, and confirm whether an entry with the same address and parameters already exists. To update an existing subscription, use its update option instead of scanning the same QR code again. Before removing duplicates, follow the save-and-delete checks in the final section of this page. For an overview of the four import options, see Four ways to add a server.

05 / Keep entries in sync

Subscription updates: timing, results, and follow-up checks

An update fetches the subscription content again

Updating a Subscribe entry makes the app fetch the information currently returned by that URL. It doesn’t “speed up” every server or automatically fix incorrect parameters. After an update, names, entry counts, and fields may change to match the returned content. If the original subscription is temporarily unreachable, check the app’s message and current list before assuming the servers have permanently stopped working. Note the currently selected entry and subscription name beforehand. Compare the expected changes with the actual results, then test the connection to distinguish a real content change from a change in the local selection state.

If an entry has been working reliably, don’t make repeated refreshes your first response to a connection problem. If only one server fails to connect, check its test result and actual connection status first. If several entries under the same subscription fail at once, check the subscription URL and the content returned by that update. If you’ve received clear notice that your existing information changed, update the relevant Subscribe entry rather than refreshing every subscription. This makes it easier to trace list changes to a specific entry and action.

Separate fetch errors from parsing errors

When fetching fails, check that the subscription URL is complete, that the device’s current network can reach it, and that the original URL is still valid. If parsing fails or an update returns an empty list, check whether the returned content contains server information the app can recognize, whether a webpage was mistaken for a subscription URL, and whether the original text contains extra line breaks or was truncated. If the update reports success but expected entries are missing, check which subscription group you’re viewing, whether duplicate names exist, and whether sorting or filtering moved the results. Follow one line of investigation at a time, and don’t delete the original entry before you know what went wrong.

If the current app offers automatic update options, set them according to your needs. Don’t assume every subscription needs the same update schedule. Frequent updates can make list changes harder to trace; never checking updates can leave you using entries that no longer match your existing information. A more manageable approach is to note which subscriptions you check regularly and which you update manually only when your information changes, then review entry counts, names, and key fields after each update—not just the completion message. Updates require a network connection, so an offline device can’t confirm whether the latest fetch succeeded.

How to confirm an update didn’t mislead you about connectivity

First find the entry you were using before the update. If it’s still in the list, check whether its Type, Address, Port, or required additional fields changed. If the name changed, look it up by subscription and fields rather than relying on Remark alone. Then run an available connection or test operation. If needed, check the selected server and Global Routing status on Home. In Global Routing, Config, Proxy, and Direct mean routing according to configuration, proxying, or direct connection. A different routing mode can change test and everyday results. Be clear whether you’re testing server parameters, a rule path, or reachability of a destination; these aren’t the same as an “update failure.”

If the results after an update differ significantly from what you expected, first save non-sensitive details that describe the change, such as the subscription display name, update message, change in entry count, and a record’s Type. Don’t repeatedly overwrite the current state, and don’t post the original URL publicly. Continue narrowing down the cause with the five-step troubleshooting checklist. For specific URLs or authentication details, contact only the person or service that maintains the information you already have. Before adding the subscription again, check whether your existing information is saved elsewhere using the Deletion and backup section.

06 / Organize the list

Manage multiple subscriptions: sources, remarks, and selection

Use names to track purpose, not to replace fields

When subscriptions, manually entered servers, and scanned entries are all present, the main challenge isn’t the number of records—it’s knowing how they relate. Give each subscription a recognizable display name, and use different Remarks for manually entered entries. Names can suggest a purpose or source category, but shouldn’t include sensitive details such as Password, UUID, or a full subscription URL. Avoid permanent remarks such as “fast” or “always works,” too: test results change, while Remarks often remain in the list and can lead to outdated assumptions.

When organizing entries, locate the subscription first, review its server results, and then check separately entered servers. If two entries have the same Remark, don’t delete one immediately. Open both and compare Type, Address, Port, and whether each came from a subscription. The same server may appear twice because it was added in different ways, or two entries may simply share a name but have different parameters. List order can change after a subscription update, so assuming “the first entry is the one I used last time” increases the chance of selecting the wrong one. If you regularly sort or filter the list, first understand what determines the order.

Distinguish listed entries from the entry currently in use

A server saved in the list isn’t necessarily selected on Home. When troubleshooting a connection, identify the current selection, determine which subscription it belongs to—or whether it was entered manually—and then check Global Routing. In Config mode, traffic follows the configuration rules; Proxy mode routes traffic through the proxy; Direct mode connects directly. The comparison below is for organizing troubleshooting, and actual traffic depends on the current configuration and app interface. Recording the routing mode helps prevent attributing behavior in Direct mode to a particular server.

Global RoutingWhat to check when troubleshootingWhat not to assume
ConfigWhich policy the current configuration and rules apply to the target traffic.All traffic passes through the currently selected server.
ProxyThe currently selected server and its connection status.Every destination will produce the same test result.
DirectThe device’s current network and direct connection results.The server connection has been verified.

If an update adds many similar entries to a subscription, check which subscription they belong to before changing the sort order. Neither latency nor a name uniquely identifies an entry: records with the same name may point to different Addresses, and latency changes with network conditions. Use a consistent manual check, such as “subscription name → server Type and non-sensitive address details → current selection → test result.” That way, you can find the right entry even when the list order changes. Before removing an entry you no longer use, check whether the current configuration still selects it.

Keep configuration files separate from subscription lists

Config may also contain rule configurations, which are different from the server list under Subscribe. In a rule, PROXY and DIRECT are policy keywords, not subscription names. The snippet below illustrates rules matching domains, geographic locations, and remaining traffic. It’s for understanding the syntax only; it contains no usable servers and shouldn’t be pasted into the Subscribe field. If a rule points to a policy that doesn’t match the currently available servers, check the configuration and server selection separately instead of repeatedly updating the subscription.

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
GEOIP,CN,DIRECT
FINAL,PROXY

The goal of managing multiple subscriptions is to make each update and test traceable to a specific entry—not to shrink the list as much as possible. Keep names and source information clear enough to identify entries, then remove only what you no longer need. For more on DOMAIN-SUFFIX, GEOIP, and FINAL, see the glossary. For the basic steps to choose Global Routing for your first connection, see Getting Started.

07 / Interpret test results

Latency tests, Connectivity Test, and sorting

Know what the test measures first

A latency test typically shows how a server responds under current network conditions. For Connectivity Test and similar diagnostic options, check the interface description to understand what’s being tested. A number doesn’t mean every website or rule path has the same response, nor does it verify that the connection works for everyday use. Before testing, make sure the device is online, the server entry was imported correctly, and you know the current network conditions. Otherwise, different results for the same entry at different times may simply reflect changed test conditions—not a change to the subscription.

Start by testing a few entries whose fields you’ve checked. Note whether the app displays a value, an error, or a pending state. Values are useful for comparison under the same conditions at the same time. Interpret errors alongside Type, Address, Port, authentication details, and network reachability. Don’t skip further checks based on one low latency result, and don’t delete an entry based on one timeout. A test may use a different destination or route from everyday traffic. This matters especially with Config rules: confirm whether you’re testing server connectivity or reaching a destination through a particular rule.

Sorting changes the view, not the information

Sorting by latency or another condition can make entries easier to find, but usually changes only their display order—not their permanent order in the underlying information. Entries can move after a subscription update, a change to the sort option, or another test. Identify entries by subscription and fields; don’t use “the third server” as your only clue. If an entry that failed a test moves to the bottom, that doesn’t mean it disappeared from the subscription. Check the current filter and sort settings before deciding the record is missing.

When comparing two servers, test them on the same network at roughly the same time, and check each record’s Type and source. A test can help you choose what to investigate next, but it can’t replace checking the fields. If a record passes the test but everyday access still doesn’t work as expected, return to Home and confirm that it’s selected, then check whether Global Routing is set to Config, Proxy, or Direct. In Config mode, also check which policy the rules match. Conversely, if everyday use works but an individual test shows no value, first understand what that test measures and what its message means. Don’t immediately change a configuration that’s working.

Move from server diagnostics to rule diagnostics

Check the rules only after confirming the server parameters and connection status. The lines below show where common match types appear in a configuration: DOMAIN matches a specific domain, DOMAIN-SUFFIX matches a domain suffix, IP-CIDR applies to an address range, and FINAL handles traffic not matched by earlier rules. The example.com and address range in this example are for illustrating syntax only. Whether PROXY works as expected still depends on the current configuration and server selection. Don’t treat a rule snippet as a list of latency test targets.

[Rule]
DOMAIN,example.com,PROXY
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT
FINAL,PROXY

If the problem affects only one destination, first check which rule it matches, then check the corresponding policy and current server. If several destinations fail, return to server connectivity, subscription updates, and the device’s network status. Working from specific cases to the broader setup makes it easier to identify the cause than switching servers, updating subscriptions, and rewriting rules all at once. Testing and sorting are management tools, not fixes: they help show what to check next but can’t replace the original parameters or rules. Browse Troubleshooting by topic for more symptoms.

08 / Final checks

Checks before deleting, rebuilding, or backing up

Confirm which type of entry you’re deleting

Before cleaning up the list, distinguish subscription records, server entries generated by subscriptions, manually entered servers, and Config rule configurations. Deleting an item may affect future updates or the current selection, so don’t remove entries in bulk based only on similar names. Before deleting a subscription, check whether it’s still the update source for any server entries. Before deleting a single server, check whether it’s selected and whether it may reappear after the next subscription update. Before deleting a Config entry, check whether it contains custom rules you need to keep. Read the deletion target and confirmation prompt shown in the interface carefully.

A safer order is to check the entry’s source and non-sensitive fields, confirm whether the current connection depends on it, and make sure you’ve saved the original information yourself. Subscription URLs, server authentication fields, and rule files serve different purposes. A screenshot of one list may not be enough to rebuild a configuration, but publicly sharing a screenshot with a full sensitive URL isn’t appropriate either. Keep backups somewhere you control. You can use sanitized notes to record names and purposes; protect the complete details needed for recovery according to their sensitivity.

Back up subscriptions, manual entries, and rules separately

To recreate a subscription entry, keep the complete subscription URL you already have and a name that helps you identify it. To recreate a manually entered server, save the required fields and additional options for its Type. Save custom rule configurations separately. Don’t assume that keeping a subscription URL preserves every manually entered server, or that keeping one share link restores your previous rule file. If the current app offers options such as export, sharing, or Import from Cloud JSON, read the interface description first and confirm which kind of information will be exported or imported. Don’t infer the scope from the option’s name alone.

After backing up, verify the saved content without changing existing entries. Check that you can distinguish subscription and manual entries, that text hasn’t been truncated, and that rule snippets retain their line breaks and order. Don’t test whether a file or text containing authentication details was “backed up successfully” by posting it in a public comment or screenshot. If you only need troubleshooting notes, make a separate sanitized list with subscription display names, server Types, non-sensitive remarks, and action dates. It can help you find the right entry, but it can’t replace complete recovery data.

After deletion, decide whether to import again

After deleting an entry, return to the list to confirm it’s gone, check whether the current selection changed, and make sure other subscriptions still update as before. If you deleted a single server entry generated by a subscription but kept the subscription, it may reappear after the next update. If you deleted the subscription itself, confirm how its updates were previously managed. To rebuild an entry, choose the right method in Subscribe or Add Server; don’t recreate the same entry through QR scanning, the clipboard, and manual entry all at once.

When replacing a device or getting the app again, first follow Restore Purchases to check your App Store purchase record, then restore your own subscription and configuration details. Shadowrocket availability and system requirements for iPhone and iPad are as listed on the App Store page. App purchase status and saved server information are separate. A one-time app purchase is not a service plan, and restoring a purchased app doesn’t automatically recreate every server field you saved manually. If something is missing, first identify whether it’s the app, a subscription entry, a server entry, or a rule configuration, then restore the relevant item.