Xray and V2Fly cores: XTLS, REALITY, and Protocol Compatibility Compared

This article compares the origins of the Xray and V2Fly core branches, reviews support for XTLS, REALITY, and related features, examines configuration compatibility, and explains which core powers v2rayN, v2rayNG, and v2flyNG.

Quick overview

This guide is for users choosing a client, checking subscription compatibility, or migrating server configurations. The key takeaway: standard VMess, VLESS, WebSocket, and TLS configurations overlap considerably between the two core branches, while XTLS Vision, REALITY, and some extension fields belong to the Xray branch. Use the node protocol, client type, and logs to choose the right core.

How the two core branches differ

The V2Fly core generally refers to the community continuation of v2ray-core. It handles inbound and outbound settings, routing, DNS, transport, and policies. Xray-core grew into an independent branch from the early v2ray-core codebase. It retains many similar configuration structures while extending support for VLESS, XTLS, REALITY, and more. These are not two themes for the same program, and switching between them is not as simple as renaming the client.

Desktop and Android clients mainly handle subscription management, node editing, system proxy controls, and log display. The core is what actually establishes connections and applies routing. Whether the same server address, port, and user ID work with another core depends on matching protocol fields, transport, security layer, and core version.

25.3.6
Xray configuration baseline used here
5.28.0
V2Fly configuration baseline used here
10808
Common local SOCKS port
10809
Common local HTTP port

The versions above indicate the generation used when checking configurations for this article; they are not necessarily the latest versions shown in the download center. Core updates may add fields, remove legacy aliases, or change validation rules. Before migrating a configuration, confirm the version actually running and check the first version line in the logs.

Xray core

Recommended

Supports common VMess, VLESS, Trojan, SOCKS, and HTTP outbounds, along with Xray features such as XTLS Vision and REALITY.

Best for: VLESS Vision, REALITY nodes, and everyday primary configurations

V2Fly core

Continues the v2ray-core configuration model and suits standard VMess, VLESS, WebSocket, gRPC, TLS, and existing routing configurations.

Best for: standard-protocol nodes, existing V2Fly servers, and configuration maintenance

Bottom line: identify the security layer before choosing a core

Use the Xray core when a share link or subscription contains security=reality or flow=xtls-rprx-vision. Standard VMess or VLESS with TLS, WebSocket, or gRPC is the main area where both cores may be compatible.

Why XTLS Vision and REALITY are the main differences

XTLS is a transport optimization system in the Xray branch. In current node configurations, it is most often used with VLESS and the xtls-rprx-vision flow control. The client and server must both understand the corresponding flow value. If the server requires Vision but the client core ignores or does not recognize the field, the connection will usually fail during the handshake rather than downgrade automatically to standard TLS.

REALITY is Xray’s security and handshake scheme. A working client configuration typically needs the server address, port, user ID, serverName, public key, shortId, fingerprint, and other details. If the subscription lacks the public key or the shortId does not match, the core will reject the handshake even when a TCP connection can be opened to the address and port.

Capability or configuration Xray-core V2Fly core Migration check
VMess + WebSocket + TLS Supported Supported Check the path, Host, and TLS name carefully
Standard VLESS + TLS Supported Supported Transport fields and server version still require verification
VLESS + XTLS Vision Supported Do not treat it as an Xray Vision configuration Keep the Xray core
VLESS + REALITY Supported This set of Xray fields is not supported Cannot be converted by simply renaming it
Domain and IP routing rules Supported Supported Check rule resources and field names

A typical Xray REALITY outbound snippet

{
  "protocol": "vless",
  "settings": {
    "vnext": [
      {
        "address": "198.51.100.20",
        "port": 443,
        "users": [
          {
            "id": "11111111-2222-3333-4444-555555555555",
            "encryption": "none",
            "flow": "xtls-rprx-vision"
          }
        ]
      }
    ]
  },
  "streamSettings": {
    "network": "tcp",
    "security": "reality",
    "realitySettings": {
      "serverName": "www.example.com",
      "fingerprint": "chrome",
      "publicKey": "Example public key showing the field location",
      "shortId": "6ba85179e30d4fc2"
    }
  }
}

This snippet is only for identifying the field hierarchy; its address, user ID, and public key do not identify a usable node. Passing it to a core without REALITY support commonly results in a configuration parsing error, an unknown security type, or startup failure. The correct fix is to switch to the matching Xray core, not delete the offending field and continue.

Matching protocols do not guarantee interchangeable configurations

Xray and V2Fly share many historical configuration concepts, including inbounds, outbounds, routing, dns, and policy. A basic VMess outbound is often easy to migrate, but a complete configuration may also reference branch-specific fields, rule resources, transport parameters, or experimental features. A core being able to read the JSON only proves that syntax and field validation passed; it does not prove that traffic is being routed as intended.

Subscriptions add another layer of client-side conversion. The content may be a list of share links or structured data generated by a server. v2rayN, v2rayNG, and v2flyNG parse the subscription first, then generate the runtime configuration required by the core. As a result, the same subscription can show the same node name in two clients while producing different JSON.

Core assignments for the two node types

Contains Xray-specific fields
  • Use v2rayN with the Xray core on desktop
  • Use v2rayNG with the Xray core on Android
  • Keep flow, publicKey, shortId, and fingerprint
  • Upgrade the server and client together before enabling new fields
Standard VMess or VLESS
  • Choose the client according to the server’s actual core
  • Check the WebSocket path, Host, and port
  • Check the TLS serverName and system time
  • Retest DNS and routing after migration

The protocol name is only the first condition. A configuration is ready to migrate only when its security layer, transport layer, and flow-control fields all match.

Migration checklist

  1. Check whether the node uses VMess, VLESS, or another protocol. Do not rely solely on the node label.
  2. Check key fields including security, flow, network, serverName, Host, and path.
  3. Confirm the core and version actually used by the target client, and record the first line of the startup log.
  4. Establish a connection with one node first, then test domain resolution, direct-connection rules, and proxy rules.
  5. Import the full subscription only at the end, so a batch of nodes does not hide an individual configuration error.

Bottom line: monitor both connectivity and routing during migration tests

Opening one webpage in a browser does not mean the migration is complete. Test at least one proxied domain, one direct domain, and one DNS query, then confirm that the outbound tag in the logs matches the expected rule.

Which core do v2rayN, v2rayNG, and v2flyNG use?

v2rayN is a desktop client. In current use, it typically relies on the Xray core for VLESS, Vision, and REALITY nodes. The client handles the node list, subscription updates, system proxy, and routing settings, while the core process handles the actual connection. When troubleshooting, distinguish the client interface version from the core version; they are not the same version number.

v2rayNG is an Android client powered by the Xray core, making it suitable for sharing subscriptions that include REALITY or Vision nodes with a desktop setup. v2flyNG targets V2Fly core configurations and is better suited to environments that explicitly use V2Fly servers, standard VMess/VLESS, and an existing v2ray-core configuration model.

Which core should I use if a subscription includes both standard nodes and REALITY nodes?

Use the Xray core first. It handles standard VMess, standard VLESS, and Xray-specific nodes, avoiding the loss of REALITY and Vision settings when switching to V2Fly.

If the same VMess node works with both cores, will the speed always be different?

No. Speed is also affected by server load, packet loss, congestion control, TLS, transport, and the local network. Repeat the test at least three times during the same period, using the same node and routing rules.

Can v2flyNG import a subscription with REALITY nodes directly?

The subscription parser may display the node, but the V2Fly core cannot use that alone to run an Xray REALITY configuration. Use v2rayNG instead and re-import the original subscription to preserve all fields.

Where should I look first if webpages stop opening after changing the core?

First confirm that the core process has started, then check whether the local SOCKS or HTTP ports are still 10808 and 10809. Next, check the system proxy port and the configuration parsing, DNS, and handshake errors in the logs.

Can I migrate VLESS by copying only the server address and user ID?

No. Also copy the port, transport, security layer, serverName, flow, path, Host, and, for REALITY, the public key, shortId, and fingerprint.

Choose a core by node type and troubleshoot the connection

If the subscription clearly includes VLESS, REALITY, or Vision, choose v2rayN on desktop and v2rayNG on Android; this is usually the shortest path. If the server explicitly runs V2Fly, the nodes use standard VMess or VLESS, and an existing routing configuration has been verified, use v2flyNG to stay within the same core family.

Do not assume protocol incompatibility from a “node timeout” alone. A timeout can also result from an unreachable address, a blocked port, an incorrect system clock, abnormal DNS results, or a stopped server. Core incompatibility more often appears as configuration or handshake errors such as unknown field, unsupported security, failed to parse config, or invalid flow.

Log symptom Check first Next step
unknown field or unsupported security Core branch and configuration fields Confirm whether REALITY configuration was passed to V2Fly
invalid flow flow value and protocol combination Check whether it is VLESS with xtls-rprx-vision
connection refused Server port and process Confirm the address, port, and server listening status
context deadline exceeded Network path, DNS, and handshake parameters Test address reachability and serverName separately
Local port conflict Listening ports such as 10808 and 10809 Stop duplicate core processes or change the client ports

Five steps to verify the client

  1. Stop the current connection completely and confirm that the old core process has exited.
  2. Open the client settings and record the core name, core version, local SOCKS port, and HTTP port.
  3. Start only one node and check whether the logs show that the configuration loaded and the local listener started.
  4. Enable the system proxy, visit the target domain, and verify the matched routing rule and outbound tag in the logs.
  5. Restore automatic subscription updates and the full routing rules only after the single-node test succeeds.

The final decision on core selection

The overlap between Xray and V2Fly covers many basic proxy configurations, but they are now independently evolving cores. Xray is identified mainly by the combination of VLESS, XTLS Vision, and REALITY. V2Fly’s value lies in maintaining its own configuration model and server deployment path. There is no rule that guarantees compatibility after rewriting every node into one kind of JSON.

For most users, the most reliable order of checks is node fields, client core, server implementation, and runtime logs. Use v2rayN on desktop and v2rayNG on Android to cover Xray-specific nodes; use v2flyNG when maintaining a clearly V2Fly-based environment. After changing cores, recheck the subscription, DNS, routing, and local proxy ports.

Download v2rayN View installers for four platforms