This guide is for users who already have their own provider configuration or subscription and need to identify link formats. First, distinguish a single server configuration from a remote subscription URL. Then check the authentication, transport, and TLS fields in four common share-link formats. Finally, troubleshoot the import, update, and connection stages. All examples use fictional data that cannot connect to a real service; no service access is provided.
1. The Prefix Determines How a Link Is Parsed—not Connection Quality
When Shadowrocket receives a link, it first needs to determine whether it contains server settings or points to a remote address used to retrieve configuration. Links such as ss://, vmess://, vless://, and trojan:// typically contain a single server entry. A subscription URL beginning with https:// points to remote content; the app must send a request and receive a response before it can parse the entries.
| Link format | Main contents | How it changes |
|---|---|---|
ss:// | Shadowsocks encryption method, password, address, port, and more | Reimport or edit manually |
vmess:// | Usually Base64-encoded VMess JSON parameters | Reimport or edit manually |
vless:// | VLESS UUID, address, transport, and security parameters | Reimport or edit manually |
trojan:// | Trojan password, address, TLS, and transport parameters | Reimport or edit manually |
| HTTPS subscription URL | Remote configuration endpoint and possibly an access token | Fetch remote content when the subscription is updated |
An HTTPS URL may return a web page, login page, or another file, so being able to open it in a browser does not mean it can be imported as a subscription. Likewise, a port of 443 in a share link does not by itself confirm that TLS is enabled. Protocol, port, and transport security are separate fields; check them together.
2. ss://: Decode the Encryption Method and Password First
Shadowsocks share links commonly follow the basic SIP002 format: authentication information comes before @, the server address and port come after it, and an optional name can follow #. The authentication information is usually a URL-safe Base64 encoding of method:password. Older formats may encode a larger portion of the link, so its appearance alone is not enough to determine whether it is valid.
ss://[email protected]:8388#Demo-SS
- Decoding
YWVzLTEyOC1nY206dGVzdAgivesaes-128-gcm:test. The encryption method isaes-128-gcm, and the example password istest. example.comis an example server address, and8388is an example port—not a standard port for every Shadowsocks service.Demo-SSis the display name. Changing it will not fix an incorrect address, password, or encryption method.- If the original link includes a
pluginquery parameter, it may contain plugin settings. Do not remove it just to shorten the link, and check whether the relevant feature is supported.
Base64 is an encoding, not a way to keep credentials secret. Anyone with the complete link can usually recover its password. Do not paste the original link into a public decoding website. To check its contents, review the fields in Shadowrocket after import and compare them with your existing configuration.
3. vmess://: Check the Outer Encoding and Inner JSON Separately
A common VMess share-link format puts Base64-encoded JSON after vmess://. The example below shows decoded data; it is not a complete share link to paste into a URL field. Export tools may use different combinations of fields, so check the actual import result.
{
"v": "2",
"ps": "Demo-VMess",
"add": "example.com",
"port": "443",
"id": "00000000-0000-4000-8000-000000000001",
"aid": "0",
"scy": "auto",
"net": "ws",
"type": "none",
"host": "example.com",
"path": "/demo",
"tls": "tls",
"sni": "example.com"
}
add,port, andidspecify the server address, port, and UUID, respectively. The UUID shown here is for demonstration only.net: wsindicates WebSocket;hostandpathare part of its transport parameters.tls: tlsindicates that TLS is enabled in this example.snispecifies the server name used for the handshake; it is a different protocol field from the WebSocket Host.aidis the Alter ID field in older formats. Arbitrarily changing its value will not fix authentication failures.
In this example, v is a share-link format field, not the Shadowrocket version. Even if the name and server address are correct after import, check the transport type, TLS, Host, and Path. A missing slash, incorrect path capitalization, or mismatched SNI can cause an entry to be added successfully but fail during the handshake.
4. vless:// and trojan://: Include Every Query Parameter
Common VLESS and Trojan share links use a URI-like format: credentials first, then the address and port, followed by additional parameters after a question mark. Both examples below use TLS, but their authentication methods differ. You cannot use one protocol in place of the other by simply changing the prefix.
vless://[email protected]:443?encryption=none&security=tls&type=tcp&sni=example.com#Demo-VLESS
trojan://[email protected]:443?security=tls&type=tcp&sni=example.com#Demo-Trojan
| Field | Meaning | What to check |
|---|---|---|
Content before @ | VLESS uses a UUID; Trojan uses a password | Do not mistake the display name for an authentication credential |
encryption=none | VLESS does not provide encryption at this protocol layer | This does not mean outer TLS is disabled |
security=tls | Specifies the TLS security layer | Check the SNI, certificate, and server configuration |
type=tcp | Specifies TCP as the transport here | Do not copy this value if the actual configuration uses WebSocket |
sni=example.com | Server name used for the TLS handshake | Do not assume it can be omitted when the address is an IP |
In a URL, & separates parameters and # introduces a remark. Reserved characters in a password, path, or remark must be percent-encoded according to the part of the URI where they appear. For example, the query parameter path /demo?mode=1 can be written as %2Fdemo%3Fmode%3D1. Do not encode the entire link repeatedly, or copy line breaks, Chinese punctuation, or quotation marks from surrounding text.
5. Single-Link Imports and Subscription Updates Follow Different Workflows
A single share link is a snapshot of server settings at a given point in time. A subscription URL, by contrast, is an endpoint that can be requested again. The address below illustrates the format only; token=xxxx is an obvious placeholder value and does not correspond to a real service. A subscription may return an encoded list of links or another supported format; its URL suffix alone does not tell you what it contains.
https://example.com/sub?token=xxxx
Choose an Import Method Based on What You Have
You have a single share link
- Copy the complete link, including the protocol prefix, credentials, query parameters, and remark.
- Open Shadowrocket and confirm the clipboard import prompt. If the system asks for permission to paste, allow it as needed.
- Check the new entry in Home, then open its edit screen to verify the address, port, authentication, and transport fields.
- If the upstream settings change, reimport the link or edit the entry manually. The entry will not automatically become associated with subscription updates.
You have your own subscription URL
- In Home, tap
+in the upper-right corner and set Type to Subscribe. - Enter the complete subscription URL and save it with a recognizable name.
- Update the subscription, then check the server entries in its group.
- Changes to remote content appear locally only after another update. Test the entries after updating.
A single-link import saves server settings; a subscription import saves a remote endpoint and its update relationship. Neither replaces valid authorization from the service provider.
A subscription update may add, replace, or remove entries it manages. Do not treat manual edits within a subscription group as permanent backups; a later update may overwrite them with remote settings. Record any differences before editing. To keep a separate configuration, use an entry that is clearly independent of subscription management and maintain it yourself.
Subscription tokens often act as access credentials. When troubleshooting a failure, record only the response status, error text, and stage where it occurred; do not share the full URL. If a token has been exposed, reset or revoke it in your own service management portal, then save the new URL in Shadowrocket.
6. After Import, Use Global Routing to Identify Where the Problem Occurs
A share link describes how to connect to a server; it is not a complete set of traffic-routing rules. Use Home to select a server and control the connection, and Config to manage rule configurations. When checking Global Routing, distinguish between a request that was not sent to the selected server and one that reached the server but failed to connect. Otherwise, you may keep editing a link that is already correct.
Config: Check Where Traffic Goes Under the Current Rules
RecommendedWith an existing, valid rule configuration, let the rules determine where traffic goes. Check matching rules such as DOMAIN-SUFFIX, IP-CIDR, and GEOIP, and the target set by FINAL. Do not assume every request will use the server you just imported.
Best for: Checking whether everyday requests match the expected policy when you already have routing rules
Proxy: Temporarily Isolate Rule Effects
Route traffic handled by the app through the proxy for comparison testing. This cannot fix an incorrect password, UUID, or TLS setting, and it does not guarantee that all system traffic will use the proxy.
Best for: Checking whether Config rules are sending test requests somewhere else
Direct: Check Your Local Network Baseline
Connect traffic handled by the app directly. This helps check whether the local network is working, but opening a webpage in this mode does not prove that the newly imported server is available.
Best for: Comparing against the local network to rule out basic connection problems
Takeaway: Troubleshoot in Order—Parse → Update → Handshake → Routing
If no entry is created, check that the link is complete. If the subscription list does not load, check the URL and response. If an entry exists but cannot connect, check authentication and TLS. If the connection is established but specific requests fail, check Global Routing and the rules. Change one variable at a time, and restore the original mode after testing.
7. Common Issues and How to Fix Them
I copied a link, but no import prompt appeared. Why?
First, check that the clipboard content starts with a complete prefix such as ss://. Remove surrounding quotation marks, explanatory text added by a messaging app, and any line breaks within the link. Then check that the system did not deny paste access. You can enter an HTTPS subscription manually under Home → + → Type → Subscribe. Do not enter a single-server share link as a subscription URL.
The subscription update succeeded, but the servers still will not connect. Why?
A successful update confirms that subscription content was retrieved and parsed; it does not mean every server entry passed a connection test. Select the relevant entry in Home and check its port, authentication, transport, and TLS settings. Also check whether the remote service has disabled the entry. Downloading a subscription and completing a proxy handshake are separate results.
What should I do if a subscription update returns 401, 403, or a web page?
A 401 usually indicates that authentication is required; a 403 usually means the request was denied. Check your own service documentation for the specific cause. Verify that the token is complete and has not expired, and make sure you did not copy a management page URL by mistake. If the response is an HTML login page, get the subscription URL again from your existing management portal instead of repeatedly changing the server port.
Can I change vless:// to trojan:// and use the link as is?
No. A VLESS UUID and a Trojan password are different authentication fields, and the server listens for different protocols. Restore the complete original link and import it using the protocol configured on the server. Do not change the prefix just because both protocols use 443 or TLS.
The link imports, but there is a certificate error. Should I disable verification?
First, check the device's date and time. Then compare the original settings and verify the SNI, server name, and certificate validity. Pay particular attention to the TLS server name when the address is an IP. Disabling certificate verification is not a general fix: it weakens identity verification and will not resolve an incorrect UUID, password, or WebSocket Path.
Get Shadowrocket and Follow the Import Guide
Get Shadowrocket for iPhone or iPad on the App Store for a one-time payment of $2.99. The Mac (Apple Silicon and Intel), Windows, Android, and Linux versions are free. Check the App Store listing for current iPhone and iPad system requirements. Visit the download page to choose the option for your device, then follow the guide to import your own configuration.
This site does not provide, sell, or recommend nodes, subscriptions, or VPN services.