A single share link usually describes one server, while a subscription link retrieves and updates a list of servers. For users who already have their own provider’s connection details or subscription, this guide explains which option to choose under Home → Add Server in Shadowrocket, how to recognize four link formats, and what to check after importing. All example domains, passwords, UUIDs, and tokens are fictional and cannot be used to connect.
1. First, tell the difference: does the link describe a server or retrieve a list?
Check the prefix first, then verify what the source says the link is for. Length alone won’t tell you whether it’s a subscription. ss://, vmess://, vless://, and trojan:// are usually single-server share formats containing the connection parameters required by their protocols. A URL starting with https:// could be a subscription, a webpage, or a remote configuration file; confirm its purpose and response format.
| What to check | Single share link | Subscription link |
|---|---|---|
| What it contains | One server’s address, port, authentication, and transport parameters | A URL for retrieving a server list, sometimes with an access token |
| Common prefix | ss://、vmess://、vless://、trojan:// | https://; the provider specifies its purpose |
| Where to import | Clipboard import prompt, or enter the details under Home → Add Server using the matching Type | Home → Add Server → Type → Subscribe |
| Ongoing maintenance | Reimport or edit when parameters change | Update the list through the original subscription entry |
A subscription is not a proxy protocol, and https:// doesn’t indicate that the list contains only one protocol. A subscription response can include multiple server records of different types, depending on the format provided. It may also contain just one record, so the number of imported entries doesn’t tell you whether a link is a subscription.
2. What should you check in each of the four share formats?
Identifying the prefix is only the first step. Before saving, compare the actual fields in Add Server. A correct address and port don’t guarantee that authentication, TLS, and transport settings are correct. These examples illustrate the formats only; they don’t represent usable services.
ss://: Check Method, Password, address, and port
A Shadowsocks share link often Base64-encodes the encryption method and password together, followed by the server address and port. In the example below, decoding the authentication part gives aes-128-gcm:test. The example port is 8388; it is not a standard port for all Shadowsocks services.
ss://[email protected]:8388#Example-SS
- Under Home → Add Server, set Type to
Shadowsocks, then check Address, Port, Method, and Password. #Example-SSis a remark, not part of the password.- If the original link includes a
pluginparameter, check the corresponding plugin options too; don’t keep only the address, port, and password.
vmess://: commonly a Base64-encoded JSON object
A common VMess share format encodes a JSON object after vmess://, rather than using a direct user@address format. The example below shows decoded data for illustration; it is not a complete share link you can paste to import.
{
"v": "2",
"ps": "Example-VMess",
"add": "vmess.example.com",
"port": "443",
"id": "00000000-0000-4000-8000-000000000001",
"aid": "0",
"net": "ws",
"type": "none",
"host": "edge.example.com",
"path": "/demo",
"tls": "tls",
"sni": "edge.example.com"
}
addandportspecify the connection target;idis the UUID.videntifies the share data format, not the app version.net=wsindicates WebSocket.hostandpathmust match the transport settings; they aren’t all server addresses.- Check
tlsandsniagainst the TLS settings. Don’t add or remove them just because the port is443.
vless://: transport and TLS parameters follow the UUID
VLESS commonly uses a URI format to express its parameters. In the example below, the UUID comes before @, and the query specifies TCP transport and TLS settings. encryption=none does not mean the connection has no TLS.
vless://[email protected]:443?encryption=none&security=tls&type=tcp&sni=vless.example.com#Example-VLESS
- In Add Server, select
VLESS, then check the UUID, Address, and Port. - Next, check the transport type and TLS Server Name. If the original link includes fields such as
flow, use the original values; don’t add fields based on the example. - The same
vless://prefix can represent different transport combinations. Don’t configure every VLESS link as TCP.
trojan://: check Password and TLS Server Name separately
A Trojan link usually carries the password before @. If the password contains URI-reserved characters, they must be percent-encoded correctly. Encoding the already encoded text again changes the actual authentication value.
trojan://[email protected]:443?security=tls&type=tcp&sni=trojan.example.com#Example-Trojan
- In Add Server, select
Trojan, then check Password, Address, Port, and TLS settings. sniis the server name used for the TLS handshake and may differ from the Address used to connect.- Don’t disable certificate verification to work around a connection error. First check the server name, device time, and original parameters.
3. How do you choose an import option in Home?
Keep an existing subscription as a Subscribe entry. For a single share link, first try the app’s clipboard detection. The options below describe what each Add Server setting is for. “Recommended” applies only when you already have a subscription; it is not a ranking of protocol performance.
Type → Subscribe
RecommendedEnter your existing subscription URL and save to retrieve the list. Keeping it as a subscription lets you update it through the same entry instead of maintaining each server’s parameters individually.
Best for: updating a server list when you already have your own subscription
Type → VLESS or another specific protocol
Enter the actual protocol and the server’s Address, Port, and authentication details. VLESS is only an example; select the matching Type for any other protocol.
Best for: a complete set of parameters for one server, or a share link the app can’t recognize automatically
Bottom line: if you need future updates, keep the original subscription entry
If the details identify a subscription URL, save the original URL under Type → Subscribe. Don’t treat the single record retrieved initially as the subscription itself, or you won’t be able to use that independent entry to update the original list later.
Choose a workflow based on what you have
You have a single share link
- Copy the entire link starting with a prefix such as
ss://. Leave out quotation marks and explanatory text from the chat. - Open Shadowrocket. If a clipboard import prompt appears, confirm it. Allow paste access if iOS asks.
- If no prompt appears, go to Home → Add Server, select the matching Type, and enter the original parameters manually.
- After saving, open the entry for editing and check the address, port, authentication, transport, and TLS settings.
You have a subscription URL
- Go to Home → Add Server → Type → Subscribe.
- Enter the complete subscription URL, such as the fictional example below.
- Save and wait for the list to load, then return to Home and check the subscription group and entries.
- For future updates, use the original subscription entry instead of adding the same subscription again.
Both workflows end with checking the saved fields—not assuming the connection works just because the app says it saved successfully.
https://example.com/sub?token=xxxx
The HTTPS URL above is a text example only; don’t open or import it. In actual use, enter the original subscription URL you already have and keep its query parameters. If a chat app has wrapped the link onto multiple lines, check that it contains no spaces, line breaks, or trailing punctuation.
4. How should you check subscription updates and connection tests separately?
A successful subscription fetch means the list was retrieved; it doesn’t mean every server can connect. Likewise, a working server doesn’t prove the subscription URL is still valid. Subscription access and proxy connections use different requests and authentication details.
- First, check whether the list changed. Update the existing subscription from Home and check for errors and new entries. The connection toggle alone won’t tell you whether the update succeeded.
- Next, check which network path the update uses. If your current network can’t reach the subscription URL, and you already have a working connection, check Settings → Subscribe → Update via Proxy. This changes the network path used for subscription updates; it won’t fix an expired token.
- Test one server. Return to Home, select an entry, and use Connectivity Test to check the result. A successful test doesn’t guarantee the destination webpage, authentication, or every transport is working; verify with an actual visit too.
- Finally, check routing. Go to Home → Global Routing and check the current mode. Direct sends requests without a server proxy. Proxy can temporarily help isolate rule-related issues, while Config routes traffic according to the current configuration. Restore your usual mode when testing is complete.
5. Import errors, changed fields, and link privacy
Troubleshoot in order: check that the original link is complete, then verify its format, fields, and network access. Don’t start by changing the password or removing query parameters; either could turn a parseable link into a record that can’t authenticate.
Copied a link, but the app didn’t show an import prompt?
First, check that the copied text starts with the protocol prefix and contains no quotation marks, explanations, or line breaks. Allow paste access if iOS asks. If there’s still no prompt, go to Home → Add Server, select the matching Type, and enter the complete fields from the provider. Don’t paste the entire share link into Address.
The subscription URL opens in a browser. Why is the imported list still empty?
First, confirm the response contains a server list—not a login page, error page, or instructions. Return to Home and check the complete URL in the Subscribe entry, especially the token query parameter. If the response isn’t in a supported subscription format, ask the original provider to confirm the output format; don’t import webpage content line by line as servers.
Can I remove everything after #, sni, or path from a link?
The part after # is usually a remark. sni and path can directly affect TLS or WebSocket connections. Check each field in the entry editor under Home and keep the original parameters; don’t remove query components just to shorten the link.
Will my edits to server fields be kept after a subscription update?
Don’t assume local edits to entries in a subscription will persist; a future update may recreate or overwrite fields. For troubleshooting, record your changes first, create a separate entry for testing if needed, then verify with an update through the original subscription. A separate entry won’t automatically follow changes to the original subscription.
Can I send a Base64-encoded link to someone for troubleshooting?
Don’t share the complete link publicly. Base64 is encoding, not encryption. A share link may contain a Password or UUID, and a subscription URL may contain an access token. When asking for help, share only redacted field names, symptoms, and menu paths. If full credentials have been exposed, replace them through the original provider’s account management page.
Use this order for the final check: identify what you have → choose the right import option → check the fields → test updates and connections separately. This helps distinguish parsing errors, subscription access failures, server authentication failures, and routing issues—without repeatedly changing parameters that are already correct.