Comparing Xray and V2Fly cores: VLESS, XTLS, and REALITY support

Compare the origins of the Xray and V2Fly core branches, their protocol, transport, and configuration differences, and how to choose between v2rayNG and v2flyNG.

At a Glance

Choose a core based on node parameters, not the client’s name. Both branches handle standard VMess and some VLESS configurations, but nodes using REALITY or xtls-rprx-vision require an Xray build with the relevant support. This guide is for users troubleshooting imported subscriptions, switching Android clients, or migrating configurations. It covers protocol compatibility, which fields to check, and how to verify a switch.

1. Xray and V2Fly: The Core Is Not the Client Interface

V2Ray is the name of a proxy software project and is also commonly used as a general term for this type of tool. V2Fly is the community project that maintains V2Ray. The core handles inbound connections, routing, protocol processing, and outbound connections. Xray branched from the V2Ray codebase. The two share a history but now have independent feature development and configuration conventions. Xray is not simply V2Fly under a new name.

The client manages subscriptions, node settings, and system network options; the core handles the actual connection. On Android, v2rayNG uses the Xray core, while v2flyNG uses the V2Fly core. On desktop, when using v2rayN, check which core the current configuration invokes rather than relying on the main window title. After updating the client, check the startup log to confirm the loaded core name and version.

Import subscriptionGenerate configurationLoad coreMatch routing rulesComplete remote handshake

This sequence highlights two different failure cases: seeing a node in the list only means the client parsed the subscription. The node is usable only when the core loads the configuration and completes the remote handshake. A protocol name appearing in the interface does not guarantee that the current core understands every field in that protocol combination.

2. VLESS, XTLS, and REALITY: Where Support Differs

Protocol, transport, and security are separate layers. VMess and VLESS are proxy protocols; TCP and WebSocket carry the data; TLS and REALITY provide connection security. XTLS Vision optimizes eligible traffic through a specific flow-control mechanism. A node labeled “VLESS” alone does not tell you which core to use—you also need to check the security layer and flow.

Common features across the two core branches
FeatureXrayV2FlyWhat to check
VMessSupportedSupportedUUID, encryption options, transport, and TLS parameters must match
Standard VLESSSupportedSupported by some implementationsCheck the specific version and configuration format; support does not extend to every VLESS feature
TCP / WebSocket + TLSCommon combinations supportedCommon combinations supportedThe domain, certificate validation, path, and Host must match the server
XTLS VisionSupported for compatible configurationsDoes not support Xray’s Vision implementationFor flow=xtls-rprx-vision, choose a compatible Xray core
REALITYSupportedDoes not support Xray’s REALITY implementationCheck the server name, public key, shortId, and fingerprint

VLESS does not encrypt payloads on its own; common configurations pair it with a security layer such as TLS or REALITY. It is not simply a “new version” that replaces VMess. To assess compatibility, consider the complete combination—for example, “VLESS + TCP + REALITY + Vision”—rather than comparing only the first item.

Bottom line: Choose the core based on security and flow

If security is set to reality or flow is set to xtls-rprx-vision, use an Xray core that supports that combination. For standard VMess + WebSocket + TLS, check the parameters first; there’s no need to migrate just to switch cores.

3. Two Configuration Examples: Fields to Check Together

These cards illustrate how to identify parameters; they are not ready-to-use nodes. The domains use reserved example names, and the paths and ports are illustrative. Use the values provided by the server or subscription for an actual connection. In particular, don’t combine one node’s UUID with another node’s public key and a third node’s server name.

VLESS + REALITY + Vision

Transport
TCP
Security layer
reality
Flow
xtls-rprx-vision
Fingerprint
chrome (example)
Authentication parameters
Server-matched public key and shortId

Use an Xray core that supports this combination. Set the server name and authentication parameters as specified in the node details.

VMess + WebSocket + TLS

Transport
ws
Path
/proxy-ws (example)
Security layer
tls
Server name
node.example.com (example)
VMess encryption
auto

Both core branches handle common combinations; the path, Host, and certificate domain must still match the server.

A REALITY client does not use the server’s private key. It needs the corresponding public key and other authentication details; the private key must remain on the server. shortId is represented in hexadecimal, and valid values are determined by the server. Don’t treat it as a note or generate a replacement for the value in your subscription. The server name is usually set through serverName or the link parameter sni and must match the server configuration.

The “fingerprint” in a client usually refers to an emulated TLS ClientHello profile, not a device identifier. Changing fingerprint to chrome won’t fix an incorrect public key, UUID, or port. REALITY does not necessarily mean Vision is enabled: they are separate configuration options. Set flow only when the server uses a compatible combination.

4. Configuration Migration: Similar JSON Does Not Mean Full Compatibility

Traditional Xray and V2Fly configurations both include structures such as inbounds, outbounds, and routing, but shared structures do not make every field interchangeable. V2Fly configurations also vary by format. Before migrating, confirm which configuration format the target core accepts, then check the specific protocol and transport fields. Handing an entire Xray configuration to V2Fly may cause it to fail during loading.

This example shows a common Xray VLESS + TLS + Vision outbound snippet to illustrate where flow is set. It is not a complete configuration; the example domain and all-zero UUID are deliberately invalid and cannot be used as a real node. The snippet does not include REALITY parameters, and changing tls to reality alone will not convert it.

{
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "node.example.com",
            "port": 443,
            "users": [
              {
                "id": "00000000-0000-0000-0000-000000000000",
                "encryption": "none",
                "flow": "xtls-rprx-vision"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "tls",
        "tlsSettings": {
          "serverName": "node.example.com",
          "allowInsecure": false
        }
      }
    }
  ]
}
  1. Save your current settings first. Note the client and core versions, current node, and routing preset. Backup files may contain credentials, so store them securely.
  2. Migrate one node first. Reimport it using a node link or subscription supported by the target client, then inspect the generated configuration. Don’t overwrite all routing and DNS settings at once.
  3. Confirm the core starts first. If the log reports an unknown protocol, unknown security type, or unsupported flow, fix the configuration or choose a compatible core instead of repeatedly testing network latency.
  4. Restore routing next. Check the outbound tags referenced by the rules, domain and IP data files, and DNS handling. A working connection does not mean the old rules migrated correctly.

5. Choosing and Testing v2rayNG vs. v2flyNG

Android users with REALITY or Vision nodes will usually want v2rayNG. If your existing V2Fly configuration uses a standard compatible combination and works correctly, you can keep using v2flyNG. For desktop users, v2rayN is the management interface; the key questions are which core the current node uses and whether that core supports its parameters.

Don’t change the core, node, DNS, and routing preset all at once. Change one thing at a time so you can identify the cause of any issue. The port numbers below illustrate the role of each port; they are not speed-test results or universal client defaults. Check the current configuration to see which ports are in use.

443
Remote TLS port in this example
10808
Local SOCKS port used in troubleshooting examples
53
Common port for traditional DNS services

A TCP connection to remote port 443 only shows that this layer is reachable; it does not confirm that VLESS authentication, TLS, or the REALITY handshake succeeded. If local port 10808 is already in use, the core may fail to start, regardless of remote protocol compatibility. DNS follows its own path: a browser resolving a domain does not prove that the resolver used by the core is reachable.

6. FAQ: Importing, Starting, and Connecting Are Different

V2Fly supports VLESS. Why won’t my REALITY node work?

VLESS is a protocol; REALITY is a separate capability. Supporting VLESS does not mean supporting REALITY, and it does not guarantee Vision support either. Check the complete node configuration and use an Xray core that supports its security layer and flow. Don’t just remove the REALITY fields.

Will switching to Xray always make my connection faster?

Not necessarily. Performance also depends on remote server load, network path, packet loss, transport, and client resource limits. Vision’s processing does not guarantee a fixed speed increase for every request. Confirm compatibility first, then compare real-world performance under the same network conditions.

Can I leave flow blank to work with an older core?

Don’t treat that as a universal fallback. If the server requires Vision, leaving flow blank on the client may cause the connection to fail. The server must provide a configuration supported by both sides; deleting a field on one side won’t make an incompatible server switch protocols automatically.

Can I use the same subscription in both Android clients?

It depends on the subscription format and the nodes it contains. Being able to parse a subscription does not mean every node is compatible; standard VMess and REALITY nodes may appear in the same group. Check each imported node’s protocol, transport, and security settings, and avoid having both clients take over the VPN connection at the same time.

Bottom line: Verify one connection before restoring the full configuration

Check in this order: the configuration loads, traffic is routed into the client, the remote handshake succeeds, and routing produces the expected result. Once you identify the failing layer, you can decide whether to switch cores, correct parameters, or troubleshoot the network—without blindly reinstalling the client.

Download v2rayN