Shadowrocket Supported Protocols: Shadowsocks, VMess, VLESS, Trojan, Hysteria2, and WireGuard

Compare Shadowrocket protocols by transport, encryption, and handshake, with key fields and typical use cases for each.

At a glance

Shadowrocket supports several connection protocols, but matching protocol names do not mean their settings are interchangeable. This guide is for users who already have a service provider and connection details. It explains what to check across authentication, transport, encryption, and routing, so you can identify whether to verify the Password, UUID, TLS, UDP, or key fields before importing the configuration and testing the connection. We do not provide, sell, or recommend nodes or subscriptions.

Understand protocols, transport, and routing first

A protocol determines how the client communicates with a server; Global Routing determines which path handles traffic. These are separate settings. Adding Trojan in Home does not automatically route every request through that entry, and adding rules in Config does not supply missing server authentication details.

Shadowrocket is a paid client for Apple platforms, primarily iPhone and iPad, and is available exclusively through the App Store. It is closed-source commercial software sold as a one-time purchase; buying the client does not include a service plan. Check the App Store listing for system requirements and purchase availability.

LayerTypical settingsWhat to verify
Protocol and authenticationShadowsocks、VMess、VLESS、TrojanType, Password, or UUID must match the server
Transport and handshakeTCP、UDP、WebSocket、TLS、QUICConfirm the server uses the same transport and handshake settings
Server entryAddress, port, and authentication fieldsConnect to the correct service endpoint
Traffic routingGlobal Routing and rules in ConfigConfirm the request being tested actually uses the selected entry

The port number does not identify the protocol. 443 is commonly used for TLS services, but entering 443 does not enable TLS automatically. If the server uses another port, enter the value shown in your existing configuration. The comparison below explains settings; it does not rank protocol performance.

Shadowsocks, VMess, and VLESS: Check authentication first

For these three protocols, first match the Type and authentication details, then check any additional transport settings. Do not copy an entry's address and password into a different Type. Changing the client's selection does not change which protocols the server supports.

ProtocolKey fieldsEncryption and transport notes
ShadowsocksServer, port, Password, and encryption methodThe encryption method must match; UDP support depends on both configurations and network conditions
VMessServer, port, UUID, encryption, and transport settingsAuthentication is time-sensitive; WebSocket or TLS also requires matching fields
VLESSServer, port, UUID, transport, and security settingsThe protocol itself does not encrypt payloads; security depends on the outer mechanism used in the configuration

Shadowsocks: Don't guess the encryption method

The Shadowsocks Password and encryption method must be checked together. For example, if your existing configuration specifies aes-128-gcm, do not change it to chacha20-ietf-poly1305. Some methods have additional key-format requirements, so do not assume all authentication material is an ordinary password of any length. Keep the imported settings intact, then compare each field with your existing configuration.

VMess: Check the UUID and device time

VMess uses a UUID as an important authentication credential, and a significantly incorrect device clock can cause authentication to fail. First make sure the system date and time are correct, then check that the UUID is complete. If the server uses WebSocket, verify the Path and Host as well. If TLS is also enabled, check the server name and certificate verification settings. These values cannot be derived from the UUID.

VLESS: Authentication is not encryption

A VLESS UUID identifies the user; it does not mean the traffic is encrypted. Check TLS or other supported security settings against your existing configuration. If it includes Flow, confirm both ends support and use the same setting. VLESS and VMess both use UUIDs, but that does not mean you can change only the Type and leave all other settings untouched.

Trojan and Hysteria2: Check TLS and UDP separately

For Trojan, focus on the password and TLS. Hysteria2 also requires a network that can carry UDP. For either protocol, a reachable port alone does not prove that the protocol handshake or an actual request has succeeded.

ProtocolConnection characteristicsCheck first
TrojanTypically handles authentication and proxy traffic within a TLS connectionPassword, TLS server name, certificate, and system time
Hysteria2Based on QUIC and relies on UDP underneathAuthentication details, TLS, UDP reachability, and any additional settings in your existing configuration

With a domain certificate, the Trojan connection address may differ from the server name used for TLS verification. Enter each value according to your configuration. For example, if the server address is an IP but the certificate was issued for a domain, do not use the IP in place of the certificate name. If you encounter a certificate error, check the name, certificate validity, and system time rather than treating disabled verification as the default fix.

Hysteria2 is not enabled by switching another protocol's transport setting to UDP. It has its own handshake and authentication flow, and its settings cannot be mixed with configurations for other Hysteria generations. If the current network restricts UDP, Hysteria2 may not connect even when ordinary websites and TCP services are reachable. If your existing configuration includes bandwidth or obfuscation settings, verify them as provided rather than guessing or entering larger values.

Takeaway: Check network conditions first

If the same Hysteria2 configuration fails only on a particular Wi-Fi network, test it over cellular first and note the difference. Then check the Wi-Fi network's UDP conditions. Do not change authentication fields first or assume other protocols will necessarily be faster.

HTTP, SOCKS5, and WireGuard: Proxy endpoint or tunnel?

HTTP, SOCKS5, and WireGuard use different field structures and cannot share the same account setup. The first two are common proxy endpoints; WireGuard uses keys to create a network-layer tunnel. Access to a destination also depends on what traffic the server allows it to forward.

A WireGuard Endpoint contains the server address and port, while the tunnel address is internal to the tunnel; they are not interchangeable. Allowed IPs define address ranges and influence peer selection. They are not domain rules and cannot directly replace DOMAIN-SUFFIX in Config. When troubleshooting, check the key pairings, UDP reachability, and the peer's return route.

Import an existing configuration: Check Home → Type

Importing is usually better than rebuilding a configuration manually because it preserves complex settings, but you should still verify key fields afterward. The steps below assume you already have a subscription or a single connection configuration. A subscription manages server entries; a configuration file in Config manages rules and related behavior. They are not the same set of settings.

  1. Keep the original configuration

    Note the currently selected server and the Home → Global Routing setting. Before making changes, keep a recoverable copy of the existing configuration so troubleshooting does not cause you to lose both the connection settings and the rules.

  2. Choose an import method

    To add a single connection manually, go to Home → “+” in the upper-right corner → Type, then select the protocol used by your existing configuration. To use a subscription, select Subscribe under Type along the same path and enter your own subscription URL.

  3. Check each field

    After saving, check the server, port, and Password or UUID. Then verify the protocol-specific TLS, WebSocket, UDP, or WireGuard key settings. After updating a subscription, check whether the entries have been replaced by content from the remote source.

  4. Test after connecting

    Return to Home, select the entry you want to test, and turn on the connection. Allow the VPN configuration when prompted by the system. Note the current Global Routing setting, then visit a specific test destination. Do not rely only on the latency number shown in the list.

Troubleshoot subscription update failures separately from server connection failures. An update may fail because the subscription URL is invalid, the token has changed, or the fetch path is unreachable. A server connection may fail because of authentication, the handshake, or forwarding. Keep the existing entries, identify the stage where the failure occurs, and then update the existing subscription. Repeatedly deleting and re-adding entries will not fix incorrect server-side settings.

Use Global Routing to isolate protocol and rule issues

When testing a protocol, keep the server and destination fixed and change only one routing setting at a time. Proxy, Direct, Config, and Scene under Home → Global Routing are routing modes, not connection protocols. Scene applies the configured scene; it is not an additional transport method.

Config

Recommended

Routes requests according to the active rules in Config. Rules can direct traffic to DIRECT, a proxy policy, or REJECT; requests that do not match a rule do not necessarily go direct automatically.

Best for: Everyday use with valid rules when you need to check routing results rule by rule

Proxy

Uses the proxy path as the global routing choice and can help isolate the effect of ordinary routing rules. It does not guarantee that all system traffic is captured, and it cannot fix protocol authentication failures.

Best for: Temporarily checking whether the selected server can reach a destination

Direct

Handles requests through a direct connection. If a website opens in this mode, that does not prove the proxy server selected in Home completed its handshake.

Best for: Checking whether the local network and destination are reachable, as a troubleshooting comparison

The following is a rule syntax example, not a complete configuration ready to use as a replacement. PROXY must refer to a valid proxy policy in the current configuration. Rules are evaluated in order, and FINAL handles requests that did not match earlier rules.

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.168.0.0/16,DIRECT
GEOIP,CN,DIRECT
FINAL,PROXY

DOMAIN-SUFFIX matches domain suffixes, IP-CIDR matches IP address ranges, and GEOIP uses a geolocation database to determine an address's location. If a destination works with Proxy but fails with Config, check the matching rule, policy, and DNS results before changing protocols. Restore the original routing mode after testing so the temporary settings do not affect later requests.

Common protocol connection questions

Why does the handshake still fail when the port is set to 443?

The port does not determine the protocol. Go back to Home and edit the entry. First confirm the Type, then check whether TLS, a server name, and authentication fields are required. If you use WebSocket, also verify the Path and Host. A reachable port does not mean the full handshake succeeded.

Why won't websites load even though a latency value appears?

A latency test reports only the result of a specific test. First check that Home → Global Routing is not set to Direct, bypassing the entry you want to test. Then temporarily use Proxy to isolate routing rules and visit the same destination. If it still fails, check DNS, authentication, TLS, and server forwarding separately.

Does Hysteria2 or WireGuard fail only after switching Wi-Fi networks?

Keep the configuration unchanged and test over cellular first. These two connection types rely on UDP, so changed network conditions are worth checking early. Then check Settings → On Demand for settings that trigger connections based on the network. To avoid automatic changes interfering with a manual test, note and temporarily disable relevant triggers, then restore them afterward.

After updating a subscription, can I just switch Type back to the previous protocol?

Changing Type alone is not enough. Check all fields provided by the existing subscription and confirm whether the server-side protocol has actually changed. If the updated details are incorrect, check with your service provider. Authentication, transport, and TLS settings must match as a set; keeping the old password does not guarantee that the connection will work.

A useful troubleshooting record includes the current network, selected protocol, Global Routing setting, destination address, and failure stage—not just “it doesn't work.” Change one variable at a time and retest the same destination to determine whether the issue is in the configuration, network, or rules. For help with first-time authorization and basic operation, see the guide on this site.

Verify Shadowrocket on the App Store