Xray vs. V2Fly cores: choosing between v2rayNG and v2flyNG

Compare the origins, protocol support, and release cadence of the V2Fly and Xray cores in the Project V ecosystem, with practical core recommendations for Android and desktop.

At a glance

For VLESS + REALITY on Android, start with v2rayNG, which includes the Xray core. If you already have a configuration built for V2Fly, consider v2flyNG. On desktop, check which core v2rayN actually runs rather than relying on the client’s name. This guide walks through identifying the software, checking node requirements, importing and testing configurations, and troubleshooting connection issues. It’s for users switching clients, dealing with failed connections after import, or unsure whether to update a core.

First, distinguish the client from the core

v2rayNG, v2flyNG, and v2rayN are clients that provide a user interface and system integration. The client typically manages subscription groups, node lists, and system proxy controls. The core it runs handles protocol handshakes, outbound connections, routing, and DNS. Client updates and core updates are related, but they are not the same thing.

Project V provides context for these names. The V2Fly community has continued development of the V2Ray core, so names such as V2Ray and v2ray still appear in core programs and configurations. Xray-core branched from related code in 2020 and went on to develop its own features and release track. The two share a history, but that does not mean every configuration can be used interchangeably today.

A subscription is not a core either. A subscription URL returns node details or configuration data, which the client converts into a runnable configuration. Seeing node names after import only confirms that the import worked. It does not guarantee that every transport parameter was retained or that the core supports those parameters.

Protocol compatibility depends on the full set of parameters

Start by opening the node editor and checking the protocol, transport, transport security, and flow. VMess, VLESS, and Trojan are protocol names; WebSocket and gRPC are transport types; TLS and REALITY relate to connection security; and xtls-rprx-vision is a specific flow-control setting. These are different layers, so a “supports VLESS” label alone cannot establish compatibility with the complete configuration.

Node characteristicsRecommended approachWhat to check
VLESS + REALITYUse an Xray version that supports this configurationPublic key, shortId, serverName, fingerprint, and any flow required by the server
VLESS + TLS + VisionFollow the Xray configuration requirementsIs the flow set to xtls-rprx-vision, and does the transport combination match?
VMess + WebSocket + TLSBoth core lines have relevant implementationsAddress, port, UUID, path, Host, and SNI
Standard VLESS or TrojanCheck the specific core version and the client’s import capabilitiesSupport for the transport type, security parameters, and configuration fields

VLESS alone does not distinguish Xray from V2Fly; V2Fly also has a VLESS implementation. REALITY, Vision, and specific transport options are more likely to cause incompatibilities. Conversely, if an existing VMess node works reliably, there is no need to redeploy the server just because you see the name Xray.

Bottom line: check REALITY and flow requirements before choosing a client

If a node explicitly requires REALITY or xtls-rprx-vision, test it with the Xray line. If only the protocol name is known and the other fields are unclear, ask the configuration provider to confirm the parameters instead of switching cores at random.

Choosing and importing on Android

On Android, choose based on the node requirements first, then consider which client suits your workflow. These recommendations cover typical VLESS + REALITY imports; they are not speed rankings for every network. Throughput on the same node can also vary with the route, signal, server load, and routing rules, so you can’t infer performance from the core name alone.

v2rayNG · Xray core

Recommended

Prefer this option for nodes that use REALITY or Vision. After importing, open the node editor and check the key fields, especially whether an older version recognizes newer parameters in the subscription.

Best for: VLESS + REALITY nodes and everyday connections configured for Xray.

v2flyNG · V2Fly core

If you already have a configuration built for V2Fly, you can keep using the corresponding core to test it. Don’t use it as a fallback when a REALITY node fails to import; check the requirements of the original configuration first.

Best for: existing V2Fly configurations and compatibility troubleshooting against V2Fly behavior.

  1. Check what you’re importing. Tell a subscription URL apart from a single-node share link. Don’t paste a subscription URL into the server address field or share it publicly in screenshots or support logs.
  2. Test a single node first. On the v2rayNG home screen, tap “+” in the upper-right corner, then “Import from clipboard.” Edit the imported node and check its address, port, UUID, and transport security settings.
  3. Manage subscriptions separately. Open “Subscription group settings” to add a group and URL, then return to the home screen and use the menu to update the subscription. Menu labels may vary slightly by version; follow the current interface.
  4. Test after connecting. Select a node, start the connection, and approve the system VPN prompt. Test access first, then configure per-app proxy settings so you’re not changing two variables at once.

When switching from v2flyNG to v2rayNG, compatible subscription or node details may carry over, but the full app state does not. Review per-app lists, DNS options, and bypass rules again. Keep only one VPN connection active while testing; a later connection may replace the earlier one, making system behavior look like a node failure.

On desktop, check which core is actually running

The v2rayN client version, the core version bundled with it, and a core updated later may all differ. Open “Settings” → “Parameter settings” to check the local listener and related options, then review the node editor and startup logs for the core name, version, and configuration errors. Core selection options vary between releases, so don’t assume a menu location from one version applies to all versions.

2020
Year the Xray branch was formed
443
Example remote TLS port; must match the server
10808
Example local proxy port; use the value actually configured

The remote port and local proxy port are separate settings. The 443 in a node is where the server listens; 127.0.0.1:10808 entered in a local app points to the proxy running on your computer. The latter works only if a listener is actually using that address and port and supports the required proxy protocol. Don’t change the local port to the remote port to try to fix a handshake failure.

Recommended setup: use a compatible node on both devices and configure access separately

Desktop: v2rayN
  • Import the subscription and check which core each node requires.
  • Test access through the local proxy or system proxy first.
  • Set up TUN mode only if you need to route more applications.
Android: v2rayNG
  • Use the same subscription if it allows multiple devices.
  • Use the system VPN prompt to route traffic.
  • Once connected, adjust the per-app proxy list.

Using the same subscription does not mean sharing the same DNS, routing, or proxy settings. Filters and update timing may also cause the two devices to show different node lists.

System proxy and TUN are ways to route traffic into the client; they cannot add protocol support the core lacks. If the node parameters are incompatible, enabling TUN will not fix the connection. Conversely, if the node connects but an app ignores the system proxy, check how that app connects instead of immediately switching between Xray and V2Fly.

Release cadence and troubleshooting steps

Xray and V2Fly release independently, so their version numbers cannot be compared directly. Android clients usually bundle a newer core with app updates; desktop clients may also manage core files separately. To decide whether to upgrade, check whether the release notes cover the protocol you use, a transport fix, or a configuration change. Update frequency alone is not a measure of stability.

  1. Record the current setup. Note the client version, core version from the startup log, node protocol, and time of the error. Keep a recoverable copy of the configuration before upgrading, and avoid changing the subscription, routing, and DNS at the same time.
  2. Check whether the configuration starts. If you see an unknown field, unknown transport, or unsupported flow, first check the core version and where the configuration came from. Updating the subscription won’t necessarily resolve missing core support.
  3. Then check remote reachability. For a connection timeout, check the address, port, network, and server status. A successful latency test does not replace a full protocol handshake or guarantee that websites will work.
  4. Check the handshake parameters. For TLS certificate errors, check the system clock and SNI. For REALITY, verify the public key, shortId, and serverName. Don’t disable certificate verification as a substitute for troubleshooting.
  5. Finally, check traffic routing. If the core connects but an app still fails, check the system proxy, TUN, per-app list, DNS, and direct-connection rules. Change one setting at a time and test again.

For a meaningful performance comparison, keep conditions consistent: use the same device, network, server, and routing policy, and repeat tests at different times. One website load or latency results from different nodes cannot tell you which core is more efficient. This guide does not rank speeds outside a defined test environment or present one core as the fix for every connection issue.

Common core selection questions

Why can v2rayNG import a subscription when only some nodes work?

A subscription may include different protocols and transport combinations. Compare the transport security, flow, path, and SNI of working and non-working nodes, then check whether the client retained those fields. Seeing a node in the list only means parsing succeeded; it does not mean the handshake worked.

Do I need to switch an existing VMess node from V2Fly to Xray?

If you don’t need new features and the connection is stable, you can keep your current configuration. Check the release notes and logs if you run into a compatibility issue. Switching cores won’t relieve network congestion or fix an incorrect WebSocket path or an expired server certificate.

The same subscription works on desktop but fails on Android. What should I check first?

First confirm that both devices are using the same node, then compare update times, core versions, and key fields. If the parameters match, check Android VPN authorization and per-app settings. If it fails only on mobile data, investigate network reachability. Don’t change the server configuration before you’ve narrowed down the cause.

Bottom line: choose a core to match the node, and troubleshoot how traffic enters the system

Test REALITY and Vision configurations with a compatible Xray version; run existing V2Fly configurations according to their requirements. Once the node connects, work on subscription organization, DNS, and routing. This helps distinguish protocol issues from traffic that never reached the proxy.

Download a clientChoose the installer for your platform