A single Shadowrocket share link describes one connection, while a subscription URL fetches and updates a set of entries. This guide is for users who already have their own service details or subscription: identify the link prefix, check the address, port, authentication, and transport fields, then review a single entry in Add Server or save a subscription through Subscribe. All examples use example.com and sample credentials for format illustration only; they cannot be used to connect.
1. Tell share links and subscription URLs apart
Text beginning with ss://, vmess://, vless://, or trojan:// is usually a single-connection share link. It packages the fields required by the protocol into copyable text. After import, Shadowrocket saves those fields as a connection entry in Home. The name is only a label for identification; it cannot replace the address, port, or authentication details.
Subscription URLs usually begin with https://. Shadowrocket requests the URL, reads the subscription content returned by the server, and parses its entries. A subscription URL is not a proxy protocol: one subscription can contain entries that use different protocols. A regular webpage URL may also begin with HTTPS; opening it in a browser does not mean it can be used with Subscribe.
2. ss://: Authentication and server address
A common Shadowsocks sharing format, SIP002, combines the encryption method and password as method:password, encodes them in Base64URL, and places the result before @, followed by the server address and port. Decoding the authentication part of the example below gives aes-128-gcm:test; test is a sample password only.
ss://[email protected]:8388#SS%20Demo
| Position | Example | How to check |
|---|---|---|
| Protocol prefix | ss:// | Indicates Shadowsocks, not an HTTPS address. |
| Authentication | YWVzLTEyOC1nY206dGVzdA | Decode to get the encryption method and password, then check each after import. |
| Server | example.com:8388 | The domain and port must match the existing service details. |
| Label | #SS%20Demo | %20 represents a space; the display name is SS Demo. |
You may also encounter an older format: the entire string method:password@host:port is encoded and placed after ss://. In this format, @ is not visible outside the encoded text; that does not mean the server address is missing. Some links also carry plugin details in query parameters. If the existing service requires a plugin, restoring only the encryption method, password, and port is not enough for a complete configuration.
- Random-looking authentication text is not necessarily a subscription URL; it may simply be encoded fields.
- Base64URL commonly uses
-and_in place of some Base64 characters. Padding at the end may also be omitted, so avoid editing it by hand. - The encryption method must match the server settings. A port of 8388 does not mean every Shadowsocks service uses that port.
3. vmess://: An encoded JSON description
A common VMess share-link format consists of vmess:// followed by a Base64-encoded JSON object. Unlike the Shadowsocks example above, the server address is usually stored in the JSON add field rather than appearing at the end of the link. The structure below is decoded for illustration; it is not an address to paste into Subscribe.
{
"v": "2",
"ps": "VMess Demo",
"add": "example.com",
"port": "443",
"id": "00000000-0000-4000-8000-000000000000",
"aid": "0",
"scy": "auto",
"net": "tcp",
"type": "none",
"host": "",
"path": "",
"tls": "tls",
"sni": "example.com"
}
v identifies the share format, not the Shadowrocket app version. ps is a label, add and port specify the connection target, id is the UUID credential, and aid corresponds to Alter ID. The all-zero UUID shown is for format illustration only; use the complete value supplied by your existing service. Changing the label will not fix an authentication error.
netspecifies the transport. If your existing configuration uses WebSocket, you usually also need to checkhostandpath; do not assume the TCP example above applies.tlsandsnirelate to TLS settings. The connection address and TLS server name can differ, so keep the values from the original configuration.scydescribes VMess encryption settings. It is separate from TLS and cannot replace it.- Encoded text may include padding characters or be split across lines when forwarded. Copy the entire original link; do not take just the first line or include the quotation marks around it.
4. vless:// and trojan://: Similar structure, different authentication
Common VLESS and Trojan share links both resemble URI structures: authentication follows the prefix, the server address and port come after @, query parameters follow ?, and a label follows #. Similar appearance does not mean you can simply change the prefix: VLESS usually uses a UUID, while Trojan uses a password, and the server-side protocol must match.
vless://[email protected]:443?encryption=none&security=tls&type=tcp&sni=example.com#VLESS%20Demo
trojan://[email protected]:443?security=tls&type=tcp&sni=example.com#Trojan%20Demo
| Field | VLESS example | Trojan example |
|---|---|---|
| Authentication | UUID | Password demo-password |
| Target | example.com:443 | example.com:443 |
| Transport | type=tcp | type=tcp |
| TLS | security=tls | security=tls |
| server name | sni=example.com | sni=example.com |
In the VLESS example, encryption=none is a protocol field; it does not mean the connection is not using TLS. Query parameters may also describe a WebSocket path, Host, flow, or other transport details. Field names can vary between share formats. After importing, open the entry and check that these details match the original configuration.
- If a password contains reserved characters such as
@,#, or?, it must be URI-encoded; otherwise, it may be mistaken for a field separator. - IPv6 addresses in URIs are usually enclosed in square brackets before the port, so the address colons are not confused with the port separator.
- You can change the label to a name that is easier to recognize; do not guess the UUID, password, SNI, or path from the label.
- 443 is an example port only. Whether TLS is enabled, which port is used, and which server name matches the certificate all depend on the existing service.
5. Use Add Server or Subscribe as appropriate
First identify whether you have a single share link or a subscription URL, then choose the right entry point. Home manages connection entries, Config manages configuration files, and Settings manages app preferences. Pasting a subscription URL into a regular connection's server field will not make the app parse it as a subscription.
-
Identify the prefix
Check the beginning of the text. Treat the four protocol prefixes as single share links. For an HTTPS URL, first confirm that it is a Subscribe URL supplied by your existing service, not an account webpage.
-
Review a single entry
In Home, tap the “+” in the upper-right corner to open Add Server. To add an entry manually, select the matching protocol under Type, then enter the address, port, and authentication details from your existing service. After importing a share link, open the entry and check those fields too.
-
Add a subscription
Go to Home → “+” → Add Server, set Type to Subscribe, enter your own subscription URL, add a label you can recognize, and save. Do not enter a single
ss://link as the subscription URL. -
Check for updates
Return to Home, pull down to refresh the subscription, and check whether entries appear. After the update, review the number of entries, protocols, and key fields. If the service has changed its content, the list may change too.
-
Test the connection
Select the entry you want to test, allow the VPN configuration when prompted by the system, and turn on the connection. Then check how requests behave. Successful field parsing, a successful subscription update, and access to a target website are three separate outcomes; verify each one.
https://example.com/sub?token=xxxx
The address above illustrates the format of an HTTPS subscription URL; it is not a usable subscription. Preserve the full path, parameters, and token in a real URL, including query parameters that may look unnecessary. A subscription update may replace entries managed by that subscription. Before making manual changes you need to keep, note the original values and check the result after updating.
6. After importing, check Global Routing—not the protocol
A link determines how to connect to a server; Rule determines how requests are handled. If an entry connects but requests are not routed as expected, check Home → Global Routing. The suggestions below describe routing options for everyday use with existing rules; they are not recommendations for a protocol or service.
Config
RecommendedHandle requests according to the current configuration. Check which Config is enabled, along with the order of Rule entries and their target policies. Requests assigned DIRECT in the configuration will not automatically use a proxy just because a connection entry is selected.
Use when: You have specific rules and want to handle requests differently depending on their destination.
Proxy
Use proxy routing to temporarily rule out the effect of Rule-based routing during a test. Before switching, confirm the selected proxy or policy group. Restore the original routing setting when testing is complete.
Use when: You have checked the connection fields and need to narrow down a routing issue.
Direct
Use direct routing. A webpage loading in this mode does not prove that the imported proxy entry works. To test the proxy connection, switch explicitly to the appropriate routing mode.
Use when: You want to check direct network access temporarily.
Scene in Global Routing is for scene settings. Check the matching scene conditions in the app; do not treat Scene as a protocol parameter in a share link. Settings → On Demand manages on-demand connection behavior; it cannot fill in a missing UUID, password, or transport path. For more field details, see Configuration Field Guide; for basic concepts, see Quick Glossary.
[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT
This snippet illustrates rule order only: requests to example.com and its subdomains use PROXY, while unmatched requests go to DIRECT through FINAL. DOMAIN-SUFFIX matches domain suffixes; GEOIP and IP-CIDR are IP-related rules and do not belong in a share link's authentication fields. Renaming a link to PROXY does not create a routing rule.
7. Format errors, failed updates, and credential safety
Copied link reports a format error—what should you check?
First make sure the prefix is complete, then look for spaces, line breaks, Chinese punctuation, or explanatory text copied from a message. For VMess, make sure you copied the entire encoded text. For VLESS and Trojan, confirm that an address and port still follow @. Do not force an import by changing the protocol prefix.
The subscription URL opens, but no entries appear
Check that Home → “+” → Type is set to Subscribe and that URL contains the complete subscription URL. A URL that returns a login page, error page, or regular HTML is not a valid subscription. Ask the administrator of your existing service to confirm the response format, then refresh again in Home.
Subscription updates keep timing out—what should you do?
First distinguish a network timeout from an authentication error returned by the server. If you already have a working connection, check Settings → Subscribe → Update via Proxy, then return to Home and refresh. This setting only changes the route used for subscription requests; it cannot fix an expired token, incorrect URL, or server-side issue.
Import succeeded, but you still can't access the network
Open the entry and check the protocol, address, port, authentication, TLS server name, and transport settings in order. Then check Home → Global Routing. If behavior changes after switching routing modes, check the Rule entries in Config. If the entry cannot connect in any mode, verify the details against your existing service instead of trying random ports.
What should you hide in a screenshot when asking for help?
Hide the password, UUID, full subscription URL, and token, and do not share a complete QR code publicly. A QR code usually just carries the same share text in another form. If credentials have been exposed, reset the relevant authentication through your existing service's management portal, then update the entry in Shadowrocket.
Get and verify Shadowrocket
Shadowrocket is a paid client for Apple platforms, available exclusively through the App Store. Verify the developer, Shadow Launch Technology Limited, the official app icon, and app ID 932747118. The app is a one-time purchase; this does not include a service plan. Check the App Store page for system requirements. For initial setup, use service details you already have.