Shadowrocket Share Links Explained: ss://, vmess://, vless://, trojan:// and Subscription URLs

A share link describes one server; a subscription URL provides a server list that can be refreshed. This guide explains how common prefixes are structured and how imported links appear in Shadowrocket.

At a glance

This guide is for iPhone and iPad users who already have their own service details but aren’t sure which type of link to import. First, distinguish share links, subscription URLs, and rule configurations. Then identify the authentication and transport fields in four common prefixes, and check the import and refresh behavior in Home. All examples use demonstration data that cannot be used to connect. This site does not provide, sell, or recommend servers or subscriptions.

1. Distinguish share links, subscription URLs, and rule configurations

Server settings, subscription sources, and routing rules are separate layers in Shadowrocket. A share link carries connection details for one server; a subscription URL points to remote content that can be requested again; and a rule configuration determines how requests are routed. Even when each appears as text or a URL, they are not interchangeable.

Content typeWhat it usually containsWhat to check after import
Single-server share linkProtocol, server address, port, authentication details, and optional transport parametersThe corresponding server’s details in Home
Server subscription URLA remote URL and access credentials; the response contains a server listThe subscription source and its entries in Home
Rule configurationRouting rules, policies, and other configuration data, depending on the fileThe selected configuration and rules in Config

An https:// URL is not automatically a server subscription. It could point to a login page, help page, or rule configuration. Check the purpose described by your existing service and the response content—not how long the URL looks. A server-list subscription does not necessarily configure DNS or routing rules. After importing, check the current Global Routing setting.

2. ss:// and vmess://: Base64 doesn’t encode the same kind of data

ss://: Find the encryption method and password, then the address and port

ss:// identifies a Shadowsocks share link. A common SIP002 format puts “encryption method:password” in Base64-encoded userinfo, with the server address and port outside it. Older formats may encode the entire connection string instead. Don’t assume every ss:// link can be split at the same point.

Decoded userinfo example:
aes-256-gcm:demo-password

Example server details:
Server: example.com
Port: 8388
Method: aes-256-gcm
Password: demo-password

Here, 8388 is only a sample port, not a required Shadowsocks port. The actual port must match your existing service. A link may also include a plugin query parameter and a note after #. The note helps identify the entry but does not replace the address. If the service requires extra plugin parameters, the address, password, and port alone may not be enough to connect.

vmess://: Commonly a Base64-encoded JSON object

A common vmess:// share format encodes a JSON object after the prefix. The example below shows how decoded data might look; it is not a complete link you can paste into an import field. Share formats can vary, so check the fields shown after import.

{
  "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"
}

What decoding tells you—and what it doesn’t

Base64 is an encoding, not a way to protect credentials. Inspect the structure locally; don’t submit a full share link to an online decoder. After importing, check the protocol, port, and transport settings before testing the connection.

3. vless:// and trojan://: URI fields you can’t leave out

vless:// and trojan:// commonly use a more readable URI structure: authentication details come after the prefix, the server address and port follow @, query parameters follow ?, and a note follows #. Readable doesn’t mean safe to share—the authentication details should still be treated like a password.

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

trojan://[email protected]:443?security=tls&sni=example.com#Demo-Trojan
Field or positionMeaningWhat to check
Before @The VLESS example uses a UUID; the Trojan example uses a passwordDon’t interchange the two types of credentials
example.com:443Server address and portUse the port specified by your existing service
security=tlsTLS settings in the share formatCheck the imported TLS settings and certificate name
sniServer name used in the TLS handshakeMatch the name provided by the service; don’t replace it with the address
type=ws、host、pathWebSocket transport and request parametersPreserve the exact path, capitalization, slashes, and Host
#Demo-VLESSDisplay nameChanging the display name won’t fix authentication or transport errors

In a VLESS example, encryption=none describes a protocol parameter; it doesn’t mean the entire connection has no TLS. Check security and the imported settings to see whether TLS is enabled. Similarly, 443 confirms only the port number, not that certificate validation, SNI, or the WebSocket path is correct.

Special characters in a URL may need percent-encoding. In this example, %2Fdemo decodes to /demo. When handling a link manually, don’t decode it repeatedly and then rebuild it. Don’t treat an @ or # that belongs to a password as a structural delimiter. IPv6 addresses in the URI host usually need square brackets to distinguish their colons from the port separator.

4. Subscription URLs: Keep the remote source; refresh the list

A server subscription is usually an HTTPS URL, like the obviously fictional example below. During import, Shadowrocket requests the URL and parses the response to create selectable server entries. The response may contain multiple share links as text or may be encoded as a whole. You can’t tell whether it uses Shadowsocks, VMess, VLESS, or Trojan just by looking at the subscription URL.

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

Choose the import option that matches the information you have

You have a single share link
  • Copy the complete ss://, vmess://, vless://, or trojan:// link.
  • Use the add option in Home to import it, or scan a QR code containing the link.
  • Open the new entry and check its Type, address, port, and authentication fields.
  • If the parameters change, import the link again or update the corresponding entry manually.
You have a server subscription URL
  • In Home → +, open the add screen and set Type to Subscribe.
  • Enter the full URL, including its path, query parameters, and token.
  • Save and fetch the list, then check that the expected servers appear under the source.
  • To sync remote changes, update the subscription instead of adding the same source again.

Scanning a QR code and using the clipboard are just ways to enter data. Whether the code contains a single share link or a subscription URL determines how the imported item is managed.

Updating a subscription fetches its remote source again, so the number of entries, names, addresses, and credentials may change. A successful update doesn’t mean the currently selected server can connect or that routing rules are correct. Before updating, note which entry you’re using. Don’t assume local edits to subscription entries will remain; the next update may recreate those fields.

5. What to check in Home, Config, and Settings after importing

Use Home to view and select servers; it’s the starting point for checking an import. Config manages rule configurations, while Settings contains app settings. A share link containing type=ws is not a routing rule in Config. Transport settings determine how to connect to a server; rules determine which policy handles each request. These are separate layers.

  1. In Home, open the new entry’s edit screen. Confirm that Type matches the original prefix, then check the server address, port, authentication details, TLS, and transport settings.
  2. If you imported a subscription, confirm the entry belongs to the expected source and isn’t a standalone entry with the same name.
  3. Check Global Routing. For everyday rule-based routing, make sure Config is selected and that the expected configuration is chosen on the Config screen.
  4. Select a server you’re authorized to use, turn on the connection, authorize the system VPN configuration, and then test an actual request.
  5. To check automatic reconnection behavior, open Settings → On Demand. This isn’t a subscription refresh switch, and it won’t fill in missing server parameters.

Config: Route traffic using the current configuration

Recommended

Use this when a valid rule configuration is already in place. Requests are matched against the current configuration; it’s not safe to assume that unmatched requests will always connect directly. Their handling depends on the configuration’s fallback policy.

Best for: Everyday routing by domain or IP after checking the rules

Proxy: Temporarily rule out routing rules

Send proxy-eligible requests through the currently selected proxy to compare the result with Config. This won’t fix server passwords, TLS, or transport settings, and it’s not a substitute for a complete connectivity test.

Best for: Checking whether routing rules are the issue while using the same server

Direct: Test a direct connection for comparison

Handle requests using a direct connection. A webpage loading in this mode doesn’t prove the newly imported server works—the request may not have used it at all.

Best for: Briefly checking basic local network connectivity as part of troubleshooting

In a rule configuration, DOMAIN-SUFFIX matches domain suffixes, GEOIP and IP-CIDR match their respective IP conditions, and FINAL handles requests that don’t match earlier rules. These aren’t query parameters for the four share-link formats, and importing a server won’t generate them for your needs. For more on rule configurations, see the Getting Started guide or the Troubleshooting manual.

6. Common questions about importing and updating

I copied a link, but no server appeared. Is the protocol wrong?

First, make sure the copied text starts with the protocol prefix, contains no extra instructions such as “tap to import,” and hasn’t been split by a messaging app. In Home → +, check the add type: import a single share link as a server, or choose Subscribe for an HTTPS subscription. If it still isn’t recognized, check the complete original link. Don’t replace the prefix yourself.

The QR code scanned successfully. Why can’t I connect?

A successful scan only means the QR code’s text could be read. Open the entry in Home and check that the port is complete, then verify the UUID or password, SNI, WebSocket path, and other fields. The QR code may be expired or may contain only a webpage URL. A successful scan doesn’t confirm that a server is usable.

Latency is shown, but webpages still won’t load. What should I do?

A latency result doesn’t verify authentication, DNS, TLS, or the full connection to the destination website. First, confirm that you selected the server you just checked. Then temporarily compare Global Routing → Proxy with Config. If only Config fails, check which rule matches. If both fail, check authentication, TLS, and transport settings instead of just changing the display name.

A subscription update created entries with duplicate names. Which one should I delete?

In Home, distinguish standalone entries from entries under a subscription source, then compare their addresses, ports, and protocols. The same name doesn’t mean the connection details are the same. Remove an old standalone entry only after confirming you no longer need it. If the same subscription was added twice, keep the verified source to avoid maintaining two separate lists.

The subscription URL times out. Can I change its port to 443?

Don’t replace the existing parameters with a guessed port. The access port for an HTTPS subscription URL is separate from the connection port of servers in its list. Check whether your current network can reach the source, whether the URL is complete, and whether the token is valid. A webpage response that returns a login page doesn’t mean the subscription updated successfully.

7. Final checks: valid structure, source, and actual requests

After importing, verify three things separately: the text was recognized, the server parameters are correct, and requests actually follow the expected route. None of these confirms the others. A successful import creates a local entry; a successful refresh retrieves remote content. Actual access still depends on server status, your current network, DNS, and routing settings.

Next: Change one layer at a time

Keep the original link and check the imported fields first. Once the fields are correct, test the connection; adjust rules only after the connection is confirmed. Don’t change the port, TLS, and Global Routing all at once, or you won’t know which change fixed access.

Genuine App Store listingVerify before you buy