This guide is for users who already have a provider configuration or subscription and want to import it into Shadowrocket on iPad or iPhone. Learn to distinguish single-server links from subscriptions by their prefixes, identify addresses, ports, credentials, and transport parameters, then review importing, updating, and troubleshooting. All examples use fictitious values that cannot connect to a server. This site does not provide, sell, or recommend nodes, subscriptions, or other connection services.
1. Single-server share links vs. subscription URLs
A single-server share link describes one connection entry, usually including the protocol, server address, port, and authentication details. A subscription URL is an endpoint for retrieving configuration data: Shadowrocket requests the URL and parses the response into one or more entries. So copying an ss:// link and saving a subscription URL are different actions, with different import targets and update behavior.
| Format | Typical contents | How it updates |
|---|---|---|
ss:// | Shadowsocks connection parameters | Usually re-imported or edited manually |
vmess:// | VMess configuration, often Base64-encoded JSON | Usually re-imported or edited manually |
vless:// | VLESS UUID, endpoint, and query parameters | Usually re-imported or edited manually |
trojan:// | Trojan password, endpoint, and query parameters | Usually re-imported or edited manually |
https://example.com/sub?token=xxxx | Example URL that returns configuration data | Fetch again with a subscription update |
An https:// prefix alone does not identify a subscription. Ordinary webpages, account pages, and subscription endpoints can all use HTTPS. Only use a subscription URL explicitly provided by your service provider, with a response format the client can parse, for importing via Subscribe. A subscription response does not have to contain multiple entries; even a single-entry response can retain remote update support.
Rule of thumb: keep the subscription for ongoing updates
If you have both a subscription URL and a single link copied from it, choose based on what you need: save the subscription to keep entries in sync with changes, or import the individual link to keep one configuration independently. A copied entry does not stay linked to its original subscription.
2. Understand the common link structure
Most URI-style share links can be broken into a scheme, authentication details, host and port, query parameters, and a remark. These components mean different things across protocols, so a username field in one protocol is not necessarily a password field in another. The Trojan example below illustrates the structure; both the password and address are fictitious.
trojan://[email protected]:443?security=tls&sni=example.com#Demo-Trojan
trojan://: the scheme, which identifies the link format.demo-password: the authentication password. Special characters must be percent-encoded according to URI rules.example.com:443: the server address and port. Port 443 is used for this example only; it is not required for every protocol.?security=tls&sni=example.com: query parameters. Whether specific fields are recognized depends on the import format and client support.#Demo-Trojan: a remark, usually shown as the display name. It is not part of the server address.
Percent encoding and Base64 are different things. For example, a space in a remark can be written as %20; Base64 converts a sequence of bytes into transferable text. Neither encrypts credentials. Share links, QR codes, and subscription URLs may expose access credentials. Avoid posting them in public comments or pasting them into online decoding tools from unknown sources.
3. ss://: Identify the cipher and what is encoded
A common Shadowsocks SIP002 share-link format is ss://userinfo@host:port#remark. For common AEAD configurations, userinfo is usually a URL-safe Base64 encoding of method:password. Decoding the encoded section below gives aes-128-gcm:demo-password.
ss://[email protected]:8388#Demo-SS
Decoded authentication fields:
aes-128-gcm:demo-password
Server: example.com
Port: 8388
Cipher: aes-128-gcm
Password: demo-password
You may also encounter older links that encode the entire method:password@host:port string. These formats cannot be parsed by simply taking a fixed number of characters from the start. Base64 padding at the end, =, may be omitted, and URL-safe Base64 may use - and _. Missing padding alone does not mean a link is broken.
- After importing, verify both the cipher and password. The connection may not work as expected if the cipher is wrong, even when the password is correct.
- If a link includes a
pluginparameter, check whether the required plugin and its parameters are supported. Do not simply remove them and assume the resulting configuration is equivalent. - Do not apply Shadowsocks cipher settings to VLESS or Trojan; the protocol fields mean different things.
4. vmess://: Base64 outside, JSON inside
A common VMess share-link format puts Base64-encoded JSON after vmess://. Not seeing @host:port in the link does not mean the address is missing; the address and port are in JSON fields. The example below shows decoded content in one common format, not a complete URI ready to paste for import.
{
"v": "2",
"ps": "Demo-VMess",
"add": "example.com",
"port": "443",
"id": "00000000-0000-4000-8000-000000000000",
"aid": "0",
"scy": "auto",
"net": "ws",
"type": "none",
"host": "example.com",
"path": "/demo",
"tls": "tls",
"sni": "example.com"
}
In this example, add is the server address, id is an obviously fictitious UUID, net indicates WebSocket transport, and path is the WebSocket path. host and sni may be used for HTTP Host and TLS SNI respectively; neither is necessarily the server address. The v field describes this share-link structure, not the Shadowrocket app version.
- First make sure the Base64 data is complete, then check that it decodes to valid JSON. Decodability alone is not enough.
- Matching addresses and ports do not mean two configurations are identical. UUID, transport type, path, TLS, and SNI can all affect the connection.
- Do not casually add or remove JSON quotes or commas, or let line breaks or non-ASCII punctuation from a messaging app get mixed into the original link.
5. vless:// and trojan://: Similar structure, different credentials
These two share links often use a readable URI structure. VLESS usually puts a UUID before @, while Trojan puts a password there. Both can include transport and TLS parameters, but changing the prefix alone does not convert one protocol into the other.
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
| Check | VLESS example | Trojan example |
|---|---|---|
| Authentication | UUID | Password |
| Transport | type=ws means WebSocket | No additional transport encapsulation specified in this example |
| TLS | security=tls | security=tls |
| Name verification fields | sni=example.com | sni=example.com |
VLESS encryption=none does not mean the entire connection has no TLS. It is a different layer from security=tls. A port of 443 also does not guarantee a valid certificate: the certificate, SNI, and actual server configuration must match. If validation fails, check the existing configuration; disabling certificate verification should not be a routine fix.
The four prefixes in this article are not a complete list of protocols. Hysteria2, WireGuard, and others have their own parameter models and import requirements; do not mechanically apply the field tables here. Share formats may also have extensions, even within the same protocol. A successfully parsed entry only confirms that import completed, not that every parameter matches the server.
6. Import and update on iPad and iPhone
In Shadowrocket, Home shows connection status and server entries, Config manages configuration files, and Settings contains app settings. Do not enter a subscription URL as a server domain or identify a Config file by its extension alone. First determine whether you have a single link, a subscription endpoint, or a complete configuration, then choose the appropriate import method.
-
Check the app
Get Shadowrocket from the App Store and verify the developer is Shadow Launch Technology Limited. The app is a closed-source commercial product sold as a one-time purchase; buying the client does not include a connection plan. For iPhone and iPad system requirements, refer to the App Store listing.
-
Import a single link
Copy the complete share link you already have, then return to Home. If a clipboard import prompt appears, review the details and add the entry. If no prompt appears, tap “+” in the upper-right corner of Home, choose the appropriate Type, and enter the original settings field by field. Do not paste the entire URI into the server address field.
-
Add a subscription
On Home, tap “+” in the upper-right corner → Type → Subscribe. Paste your subscription URL into URL and save. The example
https://example.com/sub?token=xxxxis for illustrating the structure only. -
Check for updates
Return to Home and pull down to refresh the subscription, then check whether its group has entries. An update may add, remove, or change entries. Make a separate record of any manually configured entries you need to keep before updating.
-
Test the connection
Select an existing entry. When connecting, allow the VPN configuration if prompted by the system, then use Home → Connectivity Test. Also check Home → Global Routing; Direct does not automatically become Proxy or Config just because a node was imported.
Subscriptions primarily handle retrieving and syncing entries; they do not create a complete rule-based routing setup. When using Global Routing → Config, also check which configuration is active in Config and which policies it targets. DOMAIN-SUFFIX, GEOIP, IP-CIDR, and FINAL are rule keywords, not node-sharing protocols. A successful subscription update does not prove that rules are matching as expected.
7. What to check when importing, updating, or connecting fails
Troubleshoot by stage: if a format error appears before saving, check the link text first; if a subscription request fails, check the endpoint and network path; if an entry appears but cannot connect, check authentication, transport, and routing. Treating these as one problem can lead to repeated changes to settings that were already correct.
The link wasn’t recognized after copying. Is it broken?
First check that the prefix is complete. Remove surrounding quotes, explanatory text, and code fences, and make sure & in the link has not been converted to the literal text &. If only the clipboard prompt is missing, go to Home → “+” and select the corresponding Type manually. Do not change the protocol prefix for that reason.
A subscription update timed out. Should I switch protocols first?
First check that the Subscribe URL is still valid, the token is complete, and your current network can reach the endpoint. Only if you already have a working proxy and the subscription endpoint needs to be accessed through it, go to Settings → Subscribe and check Update via Proxy. This option cannot fix invalid credentials or an incorrect URL.
The entry imported, so why can’t it connect?
Open the entry and check the address, port, password or UUID, then verify TLS, SNI, transport type, and path. Next, use Connectivity Test on Home and check Global Routing. Successful import only means the text was parsed; it does not confirm valid authentication or server reachability.
Why did a name change revert after updating the subscription?
A subscription update may rebuild or overwrite entries based on remote content. Manual edits to a subscription group are not necessarily permanent. If you need to manage an entry independently, first save all its existing parameters separately. Then manage the standalone entry and original subscription separately rather than treating them as the same configuration.
Verify the App Store listing and learn how to import
First verify Shadowrocket’s App Store listing and purchase details, then follow the guide to import a subscription or configuration you already have. The App Store is the only place to get the app. Buying the client does not include connection services; refer to the App Store listing for compatibility and system requirements.
Verify the App Store listing View the guide