Xray vs. V2Fly Core: VLESS, XTLS Vision, and REALITY Support

Both are part of the Project V ecosystem, but the two core projects differ in protocol support, transports, and configuration fields. This guide compares their key differences and explains how to choose between v2rayNG and v2flyNG.

At a glance

If a node uses REALITY or xtls-rprx-vision, first confirm that Xray supports it. For standard VLESS, VMess, and Trojan nodes, also check the transport and configuration fields. This guide is for anyone switching cores, choosing an Android client, or troubleshooting subscription compatibility. It breaks protocol names down into connection settings you can verify, rather than using the core name to predict speed.

Core vs. client: know what each does

Xray-core and the V2Ray-core maintained by V2Fly are separate core projects. They share technical roots but have evolved independently. The core handles inbound connections, matches routing rules, and establishes proxy outbound connections. The client manages subscriptions and the UI, and generates the configuration. A node appearing in the client does not mean the selected core can use all of its fields.

Parse subscription Generate configuration Load core Match routing rules Establish outbound connection

v2rayN is a desktop client; its actual connection capabilities depend on the selected core and its version. On Android, this guide covers v2rayNG with the Xray core and v2flyNG with the V2Fly core. The app version and core version are separate details. Record both when troubleshooting, and don't use the client version as a proxy for protocol support.

Each stage can fail independently. For example, the client may import a node successfully but omit the REALITY public key from the generated configuration. Or the core may start, while the client's shortId doesn't match the server's. Verify that a node can connect separately from confirming that it appears in the list.

Protocol guide: VLESS is not REALITY

VLESS is a proxy protocol, XTLS Vision is a specific flow-control mode, and REALITY is a security layer used by Xray. They operate at different layers. A subscription URL starting with vless:// alone doesn't tell you whether V2Fly can use the node. Check the transport, security layer, and flow as well.

Feature or combinationXrayV2FlyWhat to check
VMessCommon combinations supportedCommon combinations supportedTransport, TLS, and client and server versions
Basic VLESSSupportedBasic protocol supportedDoesn't guarantee support for the same extensions
TrojanSupportedSupportedTLS name, password, and specific transport combination
VLESS + VisionSupported with compatible versions and configurationXray's Vision flow is not supportedxtls-rprx-vision
VLESS + REALITYSupported with compatible versions and configurationXray's REALITY is not supportedPublic key, serverName, shortId, and fingerprint
WebSocket + TLSCommon configurations supportedCommon configurations supportedpath, Host, and serverName are separate fields

“Supported” does not mean every configuration is interchangeable. A protocol being available in both cores only means they share some capabilities. Check the specific versions for newer transports, configuration formats, and extension parameters. In particular, don't copy new Xray transport fields directly into a V2Fly configuration.

Bottom line: choose a core for the complete configuration

Check security and flow first, then the transport. If you see REALITY or xtls-rprx-vision, test with Xray. For standard TLS and protocols supported by both, then check whether the configuration works with V2Fly.

XTLS, Vision, and REALITY: know what each setting means

Don't assume XTLS in older guides maps directly to the Vision settings commonly used today. Don't copy historical flow names such as xtls-rprx-direct into a new configuration. A common Vision setup uses flow: xtls-rprx-vision with either TLS or REALITY as the security layer. Vision doesn't require REALITY.

REALITY doesn't disable TLS certificate checks. The client must verify settings such as the server's public key, allowed serverName, shortId, and fingerprint. Keep the server private key on the server; never send it to clients as a subscription field. Standard TLS typically relies on certificate chain and hostname validation. If certificate validation fails, check the hostname and system time first.

VLESS + REALITY + Vision

Transport
TCP/raw; the name depends on the version
Security layer
REALITY
Flow
xtls-rprx-vision
Authentication parameters
Public key, shortId, serverName
Core
Xray

Use the combination provided by the server, and check field names against the Xray version in use.

VMess + WebSocket + TLS

Transport
WebSocket
Security layer
TLS
Example path
/ws
Example hostname
example.com
Core
Xray or V2Fly; verify each setting

Paths and hostnames are examples for illustration; whether traffic passes through a relay depends on the server setup.

Don't add a Vision flow to a WebSocket node at random, or change a TLS node's security setting to REALITY and expect it to work. These changes alter the connection protocol, and the server must be configured to match. If subscription details are incomplete, get the missing parameters instead of copying a public key or shortId from another node.

Configuration migration: the same port doesn't mean the same configuration

Before switching cores, back up the current configuration and test one node first. A subscription URL, a node saved by the client, and core JSON are three different data formats. Even when both use JSON, their configuration formats may differ. Don't assume V2Fly configuration formats are compatible with the JSON commonly used by Xray just because the file extensions match.

443
Example server-side TLS/REALITY port
10808
Example local SOCKS inbound port
127.0.0.1
Example local listen address

These values are configuration examples for troubleshooting, not defaults for every version. Server port 443 and local port 10808 serve different sides of the connection. If the local port is already in use, changing the server port usually won't help. If the server isn't serving the expected connection on port 443, a working local inbound still won't establish a proxy connection.

  1. Document the current setup: Note the client version, core version from the startup log, node transport, and security layer. Keep a restorable copy of the configuration.
  2. Test a shared protocol first: Establish a baseline with a fully configured combination supported by both, such as VMess + WebSocket + TLS. Don't migrate all extension-based nodes at once.
  3. Review the generated configuration: Check protocol, transport settings, the TLS hostname, and outbound tags. Remove credentials before sharing logs.
  4. Check routing rule dependencies: Make sure the running core can find geosite.dat and geoip.dat, and that the categories referenced by your rules exist.
  5. Restore features one at a time: Re-enable DNS, split routing, and TUN in sequence to avoid compounding errors across multiple settings.

Routing and DNS aren't optional extras. The same hostname can use different outbound connections depending on where DNS resolution happens, IPv6 availability, and rule order. Keep these settings constant when comparing cores; otherwise, a speed difference may simply mean traffic switched from proxy to direct, not that one protocol is more efficient. See DNS settings in the advanced configuration guide for more on routing rules.

Choosing a client: v2rayNG or v2flyNG?

When choosing an Android client, start with what your subscriptions require, then consider your workflow. For nodes using REALITY or Vision, choose a v2rayNG version with the corresponding Xray capabilities. If you already have V2Fly configurations, use protocols supported by both, and want to stay on the V2Fly core, consider v2flyNG. Node count and a similar-looking interface are no substitute for checking protocol support.

If a node connects after you fill in missing fields manually but fails when imported from the same subscription, the issue may be in the client's parser, not the core. Conversely, if the UI saves every field but the core reports that a flow isn't supported, the subscription URL may not be the problem. Distinguishing between the two helps avoid repeated reinstalls that don't address the actual cause.

Bottom line: test one node before migrating a subscription

Keep a working configuration in the original client, then test the new client with one fully configured node. Once the connection, DNS, and split routing behave as expected, import the remaining groups. Don't rewrite all your rules while switching cores.

Troubleshooting: check fields, then the handshake, then the network

“Failed to start” and “can't connect after startup” are different problems. For startup failures, check the configuration format, supported fields, and port conflicts first. For connection failures, check name resolution, handshake parameters, and routing. The exact error message matters. The examples below describe common causes; they aren't guaranteed messages from every version.

SymptomCheck firstNext step
Unknown field or unsupported flow while loading configurationCore version, field names, and protocol combinationCheck whether an Xray extension is being used with V2Fly
Local listener fails to startIs 127.0.0.1:10808 already in use?Stop duplicate processes, or update the inbound port and the port used by the client
TLS hostname or certificate validation failsserverName, certificate validity period, and system timeCorrect the settings; don't disable validation as a permanent workaround
REALITY handshake failsPublic key, shortId, serverName, fingerprint, and server logsCheck each setting against the configuration provided by the server
Connection times out with no configuration errorDNS resolution, server port, routing, and network reachabilityFirst confirm the connection reaches the correct address, then check the protocol parameters
Some domains work, others don'tDNS policy, IPv6, rule order, and outbound tagsUse the same test destination and check which rule actually matches

Keep testing conditions consistent, too. A successful TCP handshake only means the destination port was reachable at that moment; it doesn't confirm VLESS authentication or a completed TLS or REALITY handshake. To compare Xray and V2Fly, use the same protocol combination supported by both, the same exit, and the same test address. Record request latency and download throughput separately instead of combining them into a single “speed” score.

The choice comes down to a simple rule: use Xray for REALITY or Vision; for protocols supported by both, choose based on configuration compatibility and how you maintain your setup. The core name alone doesn't determine stability. Complete parameters, compatible versions, and correctly configured DNS and routing are what make connections reproducible.

Download v2rayNView platforms and installers