Shadowrocket Share Link Formats: ss://, vmess://, vless://, trojan:// and Subscription Links

Learn how four share link formats are structured and encoded, how individual links differ from subscriptions, and what to check when a link won’t import.

At a glance

In Shadowrocket, an individual share link carries a set of connection parameters, while a subscription points to a remotely hosted list that can be updated. This guide is for users who have obtained connection details from their own service provider and want to import them or troubleshoot recognition issues. Identify the link type from its prefix, check the encoding, address, credentials, and transport settings, then verify a successful import separately from a successful connection.

1. Identify individual share links and subscription URLs

ss://, vmess://, vless://, and trojan:// are common protocol prefixes for individual connection profiles. They carry a server address, port, credentials, and sometimes transport settings. Turning the text into a QR code only changes how it is shared; it does not turn an individual link into a subscription.

A subscription is usually an https:// URL. Shadowrocket requests that URL, retrieves the list returned by the server, and parses its entries. The list can change even if the URL stays the same. An HTTPS URL is not necessarily a subscription: a regular webpage, sign-in page, or error page is not a list of connection profiles.

4 formats
Prefixes covered in this guide: ss / vmess / vless / trojan
1 profile
A regular individual share link describes one set of connection parameters
443
A port used in the TLS examples below; not a standard port for every service

2. ss://: Check what the Base64 string encodes

A common Shadowsocks sharing format, SIP002, places a Base64-encoded method:password after ss://, followed by @ and the server address and port. In the example below, decoding YWVzLTEyOC1nY206dGVzdA gives aes-128-gcm:test.

ss://[email protected]:8388#Demo%20SS

An older format encodes the entire method:password@host:port string, so do not assume that every Base64 string should be decoded only up to the @. Some links also include a plugin query parameter. The plugin name and its options are part of the connection details, so do not truncate anything after the question mark.

Base64 and URL percent-encoding are separate layers. Base64 may contain +, /, and a trailing =; URL-safe Base64 uses a different character set. Do not replace every + with a space or add a fixed number of equals signs to every link. Start with the complete original text and let the importer handle the format.

3. vmess://: The encoded content is usually JSON

A common VMess share format consists of vmess:// followed by a Base64-encoded JSON object. Unlike the format in the previous section, decoding it usually produces structured data with named fields, not a single line of “password plus address.” The decoded result below is for illustration; it is not text you can paste as a share link.

{
  "v": "2",
  "ps": "Demo VMess",
  "add": "example.com",
  "port": "443",
  "id": "11111111-1111-4111-8111-111111111111",
  "aid": "0",
  "scy": "auto",
  "net": "ws",
  "type": "none",
  "host": "example.com",
  "path": "/demo",
  "tls": "tls",
  "sni": "example.com"
}
FieldWhat to check
add / portThe actual server and port. The port must be a valid number, with no full-width colon.
id / aidUUID and Alter ID. Use the server-provided values; do not treat the UUID like an ordinary password and change it freely.
net / host / pathTransport type and related parameters. Preserve the slashes and capitalization in a WebSocket path.
tls / sniTLS settings and server name. A port of 443 alone does not determine these values.

In the example, v is a field in the share format, not the Shadowrocket app version. Different generators may produce different sets of fields, so do not assume that every missing field can use the same default. After importing, open the profile details and compare the UUID, transport, TLS, and path with the original information. A correct remark and address are not enough to confirm that the other parameters are correct.

4. vless:// and trojan://: Similar structure, different credentials

Both formats commonly show the address and port after @, with query parameters specifying security or transport settings. Similar-looking links do not mean the protocols are interchangeable: in particular, a VLESS UUID cannot be used in place of a Trojan password, or vice versa.

vless://[email protected]:443?encryption=none&security=tls&type=ws&host=example.com&path=%2Fdemo&sni=example.com#Demo%20VLESS

trojan://[email protected]:443?security=tls&type=tcp&sni=example.com#Demo%20Trojan

These examples cover common formats, not every possible transport combination. If the original link includes extra parameters, keep it intact and check whether the current client can map them to the corresponding options. Do not delete unfamiliar parameters just because the link imported without an error, and do not disable certificate verification instead of checking the SNI, system time, and certificate configuration.

5. Import from Home, then manage profiles and rules separately

Individual links and subscriptions are maintained differently. An individual link usually creates a standalone profile; a subscription retains its link to a remote list. Updating a subscription may add, remove, or recreate profiles, so local changes to a subscribed profile should not be treated as permanent server-side settings.

  1. Get the complete original text from your service provider. First determine whether it is an individual protocol link, a QR code, or a subscription URL. Do not copy explanatory text, quotation marks, or ellipses from a chat message.
  2. For an individual link, use the client’s clipboard import option; for a QR code, use the scanner. After importing, return to Home and check for the new profile.
  3. Add a subscription URL under Home → + → Type → Subscribe. Enter the full URL and a recognizable remark. Menu layouts may differ by platform; select the subscription type with the same name.
  4. After updating the subscription, check the number of profiles and any error messages. The example URL https://example.com/sub?token=xxxx illustrates URL structure only; it does not provide a working list.
  5. Open the profile details to verify its parameters, then select the profile you want to use and connect. Manage rules separately in Config; a regular profile list is not a complete rules configuration.

When testing a connection, also check Global Routing. It affects whether requests use the selected profile, but it cannot fix incorrect parameters in a share link. The comparison below covers Shadowrocket’s routing modes; the recommended option is for everyday use with rules already configured.

Config

Recommended

Routing follows the rules in the current configuration. Check the request log to see whether a request actually matched PROXY.

Best for: verifying everyday rule-based routing when rules are already configured

Proxy

Route traffic handled by the client through the proxy. This helps temporarily rule out the possibility that a request missed the rules.

Best for: checking the connection of an imported profile on its own

Direct

Use a direct connection. If a webpage opens in this mode, that does not prove the imported profile’s proxy connection is working.

Best for: comparing against a direct connection on your local network

Takeaway: test one layer at a time

First confirm that the profile parameters are complete. Then temporarily use Proxy to test the connection, and finally switch back to Config to check which rules match. This separates parsing issues, connection failures, and routing results—and avoids changing multiple settings at once and losing track of the cause.

6. If a link is not recognized, check the text, encoding, and response in order

“Link not recognized” and “connection timed out” happen at different stages. The first occurs while parsing the text or subscription content; the second usually occurs after the parameters have been retrieved and a connection attempt has started. Note when the error occurs before deciding whether to copy the details again or check the network and server settings.

Copied a link, but no profile appeared to import?

Paste the original text into a plain-text editor and check that it starts with the complete protocol prefix, has no chat punctuation at the end, and contains no line breaks or spaces that cut off the content. If you only have a screenshot of a QR code, scan it instead of copying the image filename.

The decoded vmess:// content looks garbled. What should I change?

First make sure you copied the complete Base64 string, and distinguish standard Base64 from URL-safe Base64. Do not repeatedly URL-decode the entire string. A common JSON format should reveal fields such as add, port, and id after decoding. If the content is incomplete, get the original link again instead of guessing at the missing UUID.

The subscription URL opens in a browser. Why does the update still fail?

A browser may show a sign-in page, verification page, or error page instead of returning a list. Check that the full query string is intact. If the response shows 401 or 403, ask your service provider to confirm your access credentials and permissions; if it shows 404, check that the path is valid. Do not paste webpage text as a list of profiles.

The import succeeded, but the connection failed. Could the encoding be wrong?

First check the server address, port, password or UUID, then verify the TLS SNI and the WebSocket Host and path. For a certificate error, check the system time and certificate name; for a timeout, check network reachability and service status. Successfully parsing the encoding does not mean the server will accept those parameters.

Why did my remark or settings change after updating the subscription?

An update may recreate profiles from the list on the server. Compare the profiles with the current details from your service provider to confirm that the changes came from the remote list. If you need to keep local changes, distinguish standalone profiles from subscription profiles and avoid selecting outdated details from one of several copies.

After troubleshooting, report only the protocol name, the stage where it failed, and an error message with sensitive details removed. Server addresses, UUIDs, passwords, subscription tokens, and QR codes may grant access. To show the format, use the approach in this guide: keep the field names and replace the actual values. Share complete connection details only through a controlled channel when necessary.

Download Shadowrocket