This guide is for v2rayN users choosing a core, migrating legacy nodes, or troubleshooting protocol compatibility. The decision takes two steps: read the node’s protocol, security layer, and flow fields, then choose a core that fully supports them. Use Xray for REALITY or XTLS Vision nodes; standard VMess, Shadowsocks, and conventional transport nodes can generally stay on V2Fly.
How the Two Core Branches Relate
V2Fly continues the general-purpose proxy framework of v2ray-core, with configurations built from inbound, outbound, routing, DNS, policy, and transport modules. Xray-core evolved from the same technical foundation, so the two retain many similarities in JSON structure, VMess node representation, and common transport layers. Similarity does not mean configurations are interchangeable: when a configuration contains a branch-specific security layer, flow value, or transport parameter, the other core may refuse to start or ignore fields it cannot recognize.
Xray focuses on VLESS, XTLS Vision, REALITY, and related transport capabilities. V2Fly focuses on a general-purpose proxy core, VMess compatibility, and modular configuration. Here, “core” means the background program that reads the configuration, creates outbound connections, and handles traffic. v2rayN is the desktop management interface that stores nodes, generates configurations, starts the core, and controls the system proxy; they are separate components.
- Shared foundation: Both can receive local application traffic through an inbound and forward it to a proxy or direct outbound according to routing rules.
- Key difference: Xray provides REALITY and XTLS Vision implementations, commonly represented by
security: realityandflow: xtls-rprx-vision. - Version matters: Older and newer releases within the same branch may also differ in supported fields. Check both the core name and version when assessing compatibility.
- Client responsibility: A subscription only delivers node information. Whether a connection works depends on the client parser, core capabilities, and server configuration.
Bottom line: the branch name is not the starting point
Start by checking the protocol, security, flow, and transport in the node link or subscription entry. If REALITY or xtls-rprx-vision appears, choose Xray. For standard VMess, Shadowsocks, or conventional transports, V2Fly may be retained.
Compatibility Differences: REALITY, XTLS Vision, and Conventional Transports
REALITY is not a standalone proxy protocol. A common combination uses VLESS for user identification and the proxy session, TCP or another supported method for transport, and REALITY for the secure handshake and server identity parameters. Nodes usually also include a public key, short ID, serverName, and fingerprint. If a required value is missing, or the client fails to write it into the core configuration after parsing, the handshake will fail.
XTLS Vision is usually represented by flow: xtls-rprx-vision. It is not the same level of concept as standard TLS, WebSocket, or gRPC: TLS or REALITY describes the security layer, Vision is an Xray traffic-handling mode, while WebSocket, gRPC, and TCP are transport methods. Do not judge a node by the word “VLESS” alone; also inspect its security and flow values.
| Node combination | Xray | V2Fly | Selection criteria |
|---|---|---|---|
| VLESS + TCP + REALITY + Vision | Fully supported | Do not use with this combination | Contains reality and xtls-rprx-vision fields |
| VLESS + TCP + TLS | Supported | Check the specific version and configuration format | Prefer the core type specified by the subscription |
| VMess + WebSocket + TLS | Supported | Supported | Both are mature compatibility scenarios |
| VMess + TCP | Supported | Supported | Check the UUID, port, and time synchronization |
| Standard Shadowsocks node | Supports common encryption methods | Supports common encryption methods | Focus on whether the encryption method is recognized by the current version |
| gRPC transport node | Supported | Supports standard configurations | Check serviceName, TLS, and the domain |
Xray core
RecommendedHandles REALITY, XTLS Vision, and common VLESS combinations while also supporting mainstream VMess nodes, making it a strong everyday default for v2rayN.
Best for: new subscriptions, REALITY nodes, VLESS Vision nodes
V2Fly core
A good choice for already-verified VMess, standard TLS, WebSocket, and general routing configurations, with fewer changes when migrating legacy setups.
Best for: legacy VMess nodes, existing V2Fly JSON configurations
Choose the core from node fields, not the subscription name
A subscription name is only display text supplied by the server. One subscription can contain VMess, VLESS, Shadowsocks, and multiple transport types at once. After an update, v2rayN parses each entry as a separate node. Check each entry individually instead of applying one compatibility conclusion to the entire group based on its name.
For VLESS links, focus on security, flow, type, sni, fp, the public key, and the short ID. For VMess nodes, check the server address, port, UUID, transport, Host, path, and TLS toggle. Modern VMess configurations typically use alterId: 0; when importing an old backup with obsolete parameters, follow the server’s current configuration.
Recommended approach: keep two validation paths for different node generations
New nodes and primary subscriptions
- Use the Xray core in v2rayN
- Test VLESS, REALITY, and Vision entries first
- Re-read the node fields after updating the subscription
Legacy configurations and compatibility checks
- Keep confirmed-working V2Fly configurations
- Use the same VMess node for comparison testing
- Export the current client configuration before migrating
Use the two paths to isolate configuration compatibility issues. Do not let both cores listen on the same local port at the same time.
- Select the target node in the v2rayN node list, open the editor, and record its protocol, port, transport, security type, and flow.
- Go to “Settings” → “Parameter Settings” and review the core-related options. Labels may vary slightly between v2rayN versions; follow the wording shown in the current interface.
- After selecting Xray, restart the current node and open the log window to confirm that Xray actually started, rather than merely changing the displayed group.
- Run a real connection latency test. A reported latency only confirms that the connection flow completed; it does not guarantee higher download throughput.
- If switching to V2Fly produces an unknown-field error, configuration parsing failure, or an immediate core exit, switch back to Xray and check whether the node contains REALITY or Vision parameters.
Compare performance on the same node and during the same time window
Core selection is primarily a compatibility issue and only secondarily a performance issue. Results from different nodes, data centers, or time periods cannot be attributed directly to the core. To reduce variables, use the same server, protocol, routing mode, and test target, changing only the client core. Stop active downloads before testing and make sure no second proxy process is occupying the listening port.
A LAN test setup used the Windows desktop client, local SOCKS port 10808, and the same 1 Gbps access server, with three rounds for each core. For VMess + WebSocket + TLS, the median real-connection latency was 86 ms on Xray 25.3.6 and 89 ms on V2Fly 5.28.0; single-thread download speeds were 92 Mbps and 89 Mbps. A difference of about 3% is not enough to show that one core is generally faster, since a momentary route fluctuation can exceed it.
A REALITY + Vision node cannot be compared with V2Fly on an equivalent basis because the underlying capabilities are not equivalent. Compare different Xray versions instead, or compare it with a VMess or standard TLS node separately provided by the server. Keep routing rules identical as well; if one test uses a proxy outbound while another goes direct because of a domain rule, the results are not meaningful.
Test record example
Client: v2rayN
Local entry: SOCKS 127.0.0.1:10808
Remote port: 443
Routing mode: Global proxy
Test rounds: 3
Recorded items: core version, real-connection latency, single-thread download, core log errors
Conclusion: treat a one-off difference below 10% as route fluctuation
Only investigate core implementation further when a stable difference persists across multiple tests on the same node, with identical logs, routing, and local load. Node congestion, cross-network routing, and server load usually have a greater impact than core differences.
Steps for switching from V2Fly to Xray
Switching cores does not automatically fix node parameters. Older VMess nodes can usually be tested directly, but hand-written JSON, cached subscription data, and custom routing rules require separate checks. Record the currently working nodes and core version first, so you can tell whether a later problem comes from configuration changes, a subscription update, or the core switch.
- Save the current state: Export the current nodes or back up the v2rayN configuration directory. Also note the active node name, system proxy mode, and local port.
- Update the core: Use the core management entry provided by v2rayN to update it. Stop the old core process before starting the new one.
- Check listening ports: Make sure local ports such as 10808 are not occupied by an old process. When the log shows address already in use, end the process holding the port instead of repeatedly clicking Connect.
- Refresh the subscription: Update the target subscription so the client re-parses the node fields. For REALITY nodes, check that the public key, short ID, SNI, and fingerprint are complete.
- Validate one by one: Test a known-working VMess node first, then a VLESS + REALITY node. This separates basic network failures from protocol-specific failures.
- Restore routing: Re-enable the original split-routing rules only after the connection works, then check that DNS, direct domains, and proxy domains match the expected routes.
When switching back to V2Fly, first remove or disable nodes that depend on REALITY or XTLS Vision. Do not delete unknown fields and force the core to start: removing security, flow, or the public key does not convert the original node into a standard TLS node. The client configuration must match the server’s listening method; protocol conversion requires the server to provide the corresponding entry as well.
Common Compatibility Issues and Fixes
Start troubleshooting with the core log. A “connection failed” message only means that one step in process startup, configuration parsing, DNS, TCP connection establishment, or the security handshake did not complete. Log messages such as unknown field, failed to build config, connection refused, timeout, and address already in use point to different causes and should not all be treated as a failed node.
Why does a REALITY node import successfully but exit as soon as it connects?
First confirm the actual core name and version in the log, then check that the node includes the public key, short ID, SNI, fingerprint, and xtls-rprx-vision. If V2Fly is currently selected, switch to Xray and restart the node.
Both cores connect to my VMess node. Which one should I keep?
Keep routing, DNS, and test times identical, then run three rounds of real-connection latency and download tests with each core. If the difference is below 10%, keep the currently stable configuration. If the subscription also contains REALITY nodes, standardizing on Xray can reduce unnecessary switching.
Why is port 10808 already in use after switching cores?
Disconnect the current connection and end any leftover core process, then check the local listening port under “Settings” → “Parameter Settings.” Do not let Xray and V2Fly listen on 127.0.0.1:10808 simultaneously.
Why did the node fields change after updating the subscription?
A subscription update rebuilds entries from the server’s current content. First compare the protocol, port, transport, and security layer. If the server changed from VMess to VLESS + REALITY, use Xray and follow the newly delivered public key and short ID.
The node reports latency, but the browser cannot open websites. Why?
Check that the system proxy is enabled, the browser uses the system proxy, and routing rules send the target domain to a proxy outbound. Then review the DNS log to ensure an incorrect direct rule has not taken over resolution.
Final choice: use Xray for newer protocols, and keep stable legacy configurations on V2Fly when needed
For most desktop environments using v2rayN, Xray is the better default core. The reason is not that every node will be faster, but that it covers common configurations such as VMess while also handling VLESS, REALITY, and XTLS Vision nodes. When subscriptions frequently mix protocols, standardizing on Xray reduces mistakes caused by switching cores.
V2Fly remains suitable for configurations that clearly depend on its structure, long-tested VMess nodes, and existing automation. As long as server and client versions match, conventional WebSocket, TLS, TCP, and routing features can continue to work. There is no need to change a stable setup merely for a newer name, but new REALITY nodes should have a separate Xray validation path.
- Node contains
security=reality: choose Xray. - Node contains
flow=xtls-rprx-vision: choose Xray. - VMess + WebSocket + TLS: both usually work; choose based on existing stability and log results.
- Hand-written V2Fly JSON: check the fields first, then decide whether to migrate; do not replace the executable core directly.
- New and legacy protocols mixed in one subscription: validate entries with Xray first to avoid frequent core switching.
- The core will not start after switching: check configuration parsing and port conflicts first, then investigate the remote network.