VMess vs. VLESS: Encryption, Transport Options, and Client Compatibility

Compare VMess and VLESS authentication, encryption responsibilities, common transport combinations, and support in v2rayN and v2rayNG to understand the node types in your subscription.

At a glance

VMess and VLESS are proxy protocols—not clients or transport methods. To determine whether a subscription node will work, check the protocol, transport, security layer, and core in use. This guide is for users importing subscriptions, checking node settings, or choosing a desktop or Android client. Learn what UUID, TLS, REALITY, and flow do, and how to identify where a connection is failing by checking the relevant fields.

VMess vs. VLESS: Understand Authentication, Encryption, and Transport

A node is more than a “VMess” or “VLESS” label. A complete connection usually includes a server address, port, user credentials, transport, and security layer. The protocol defines how proxy requests are handled and users identified; TCP and WebSocket carry the data; TLS or REALITY provides the corresponding secure handshake and connection protection.

VMess supports encryption within the protocol, and modern configurations typically use AEAD authentication. Common VLESS configurations set encryption to none and rely on an outer layer such as TLS or REALITY to protect the connection. This covers common subscription configurations; newer extensions and different core implementations may work differently.

How Common Subscription Configurations Differ
ComparisonVMessVLESS
User credentialsUses settings such as UUID for authentication; modern configurations use AEAD.Common configurations use a UUID to identify the user; it must match the server.
Data encryptionSupports encryption within the protocol; the specific algorithm depends on the configuration and core implementation.Common encryption: none configurations do not encrypt data within the protocol.
Outer-layer protectionTLS can be added; protocol-level encryption does not make transport settings irrelevant.Common public-facing configurations rely on TLS or REALITY for connection protection.
Transport optionsCommon options include TCP and WebSocket; the server configuration determines what's available.Common options include TCP, WebSocket, and gRPC; support depends on the core and server.
Additional checksSystem time, authentication settings, and alterId in legacy configurations.flow, the security layer, and required REALITY fields.

Check the Full Configuration Before Comparing Protocol Names

For each node, note the protocol, transport, security layer, and flow. Switching clients just because a node is labeled VLESS—or copying a VMess UUID into a VLESS node—does not convert the protocol.

Encryption: VLESS with none Doesn’t Mean the Entire Connection Is Unencrypted

“VLESS is unencrypted” leaves out an important detail: it usually means the VLESS protocol itself does not encrypt proxy data when configured with encryption: none. It does not mean there is no encryption at the outer layer. With VLESS + TLS, TLS protects the connection between the client and the TLS termination point. With REALITY, the core must support and perform the corresponding handshake.

Conversely, VLESS + TCP with the security layer also set to none does not get the outer-layer protection described above. HTTPS in an application protects only that application-layer traffic; it does not mean the entire proxy connection is encrypted. Don’t disable the security layer just to troubleshoot, and don’t treat disabling certificate verification as a permanent fix.

Transport Combinations: WebSocket, TLS, REALITY, and Vision

WebSocket is not an encryption protocol, and TLS is not limited to any particular proxy protocol. So VMess + WebSocket + TLS and VLESS + WebSocket + TLS have similar transport setups, but differ in authentication and protocol handling. Even with the same address and port, changing the protocol in the client’s dropdown is not enough.

Common Combinations and Settings to Check
CombinationKey fieldsCommon pitfall
VMess+WebSocket+TLSUUID, encryption option, WebSocket Path, Host, and TLS server name.Treating the WebSocket Host and TLS server name as the same setting.
VLESS+WebSocket+TLSUUID, encryption, Path, Host, and TLS settings.Copying the path from another node or adding a flow that doesn’t apply.
VLESS+TCP+TLSUUID and TLS server name; if the server requires Vision, the flow must match too.Assuming every VLESS node requires xtls-rprx-vision.
VLESS+TCP+REALITYUUID, public key, shortId, server name, fingerprint, and any flow required by the server.Importing only the address and UUID while missing REALITY settings.

xtls-rprx-vision is a flow setting, not a general-purpose speed boost for any transport. Common Vision setups use TCP with TLS or REALITY; don’t add it to a WebSocket node based on guesswork. Keep fields at their subscription values unless the server requires otherwise.

443
Example TLS server port; the port alone doesn’t confirm TLS is enabled
10808
Example local SOCKS inbound port; different from the remote port
0
Common alterId value for modern VMess AEAD configurations

These numbers illustrate what the fields mean; they’re not instructions to change every node. The server sets the remote port, while the client’s current settings determine the local port. A remote port of 443 alone doesn’t prove that a security layer is enabled. A nonzero alterId in an older guide is a legacy setting to verify; don’t reuse it without confirming with the server.

Client Compatibility: Importing a Node Doesn’t Mean the Core Can Run It

v2rayN is a desktop client that runs nodes using its selected core. v2rayNG is an Android client that uses the Xray core, while v2flyNG uses the v2fly core. Clients manage subscriptions, the interface, and routing, but whether a protocol combination works ultimately depends on the core version and its supported features.

Check Both Platforms: Test the Same Subscription on Each Client

Desktop: v2rayN
  • After importing the subscription, open the target node’s editor and check its protocol, transport, and security layer.
  • For VLESS + REALITY or Vision, make sure the active core is Xray and supports that combination.
  • Check the startup output to distinguish a configuration parsing error from a connection failure.
Android: v2rayNG / v2flyNG
  • In v2rayNG, check that the bundled Xray core supports the fields used by the subscription.
  • With v2flyNG, choose nodes supported by its v2fly core; don’t assume Xray-specific combinations will work.
  • After updating the subscription, check the target node again to make sure you haven’t selected an older manually imported copy.

A subscription can include different protocol combinations. The same node list doesn’t mean every client supports every node equally.

For v2flyNG, seeing “VLESS” in the interface doesn’t prove that REALITY or Vision is supported; check the app and core’s actual support information. VMess isn’t immune to compatibility issues either: legacy share formats, authentication modes, and transport fields can also prevent a node from connecting after import.

  1. Check the app’s About or core information for the current app and core versions, then ask your provider which combinations are required.
  2. After updating the subscription, check whether nodes with the same name appear in multiple groups so you know exactly which one you’re testing.
  3. Save the full error message. If the app exits during startup, check for unsupported fields before changing routing rules.

Importing a Subscription: Check the Fields, Not the Protocol Name, to Diagnose Speed

Common VMess share links use vmess://, while common VLESS share links use vless://. VMess links often encode a configuration block; VLESS links typically carry transport and security settings as URI query parameters. A subscription may return multiple nodes at once. Recognizing the link prefix only confirms that the correct parsing method was used.

When troubleshooting, keep the original subscription node and make a copy to inspect. Share links and subscription URLs often contain active credentials. Before asking someone to help, hide the UUID, tokens, and any account-identifying details. Don’t post a full subscription URL in public logs or screenshots.

Why Does VMess Work but VLESS Fail in the Same Subscription?

Open the failing node’s editor. First check whether the security layer is REALITY and whether the flow is xtls-rprx-vision, then verify that the current core supports them. Next, make sure the public key, shortId, and server name were imported correctly. Don’t assume the account is invalid.

The Node Shows Latency, but the Browser Won’t Load Pages. Is This a Protocol Compatibility Issue?

Not necessarily. A successful TCP probe only means the port is reachable. First confirm what was tested, then check the system proxy and local inbound settings. If the local SOCKS port is 10808, use the command below to test directly and bypass the browser’s proxy selection.

VMess Suddenly Fails Authentication. Should You Switch to VLESS?

Enable automatic time synchronization, check the UUID, and update the subscription again. VMess authentication depends on time information, so a significant system clock error can cause failures. Changing the protocol name won’t fix authentication unless the server configuration is changed to match.

If Both Protocols Connect, Which One Is Faster?

Test the same destination at similar times, recording connection setup time, sustained download performance, and failures. Results are meaningful only when the route, server load, transport, and test conditions are comparable. Speed differences between different servers can’t be attributed to the protocol alone.

curl --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 -I https://example.com/

This command assumes a SOCKS inbound is listening locally at 127.0.0.1:10808. If the client uses a different port, replace it with the actual value. socks5h lets the proxy resolve the destination hostname; --connect-timeout 10 sets a 10-second connection timeout; and -I requests response headers. This checks connectivity, not bandwidth. Once the request reaches the core, it still follows the current routing rules.

Choosing a Protocol: Keep Working Nodes and Match the Server Configuration

Choosing a protocol isn’t an upgrade based on its name. If a VMess node already works reliably, there’s no need to replace its settings just because you see VLESS. Likewise, if the server provides a complete VLESS + TLS or REALITY configuration, there’s no need to switch to VMess for “compatibility.” What matters is that both ends support the protocol implementation and the full set of connection settings.

Keep the Complete, Tested Subscription Configuration

Recommended

Keep the protocol, transport, and security layer provided by the server. Confirm that the core supports them, then test the connection. Update the subscription separately from routing settings to reduce the number of variables when troubleshooting.

Best for: everyday use, importing across devices, and existing working nodes

Keep VMess for Existing Deployments

If the server uses VMess and the client supports its authentication and transport, keep the existing settings. If problems occur, check the system time, UUID, and transport fields first.

Best for: existing VMess servers and troubleshooting with a known-compatible configuration

Use the Required VLESS Security Settings

If the server explicitly provides TLS or REALITY settings, choose a core that supports that combination. Set the Vision flow only when required by the server; don’t add extra parameters.

Best for: users with complete VLESS settings and a clear understanding of core support

Download v2rayNChoose a platform and installer