At a glance

Choose a client based on the node’s protocol, transport, security layer, and flow. For VLESS + REALITY or XTLS Vision, v2rayNG is the preferred choice on Android. If your nodes use VMess or WebSocket + TLS and the server is configured for V2Fly, consider v2flyNG. This guide covers the projects’ history, compatibility limits, and what to check after importing—whether you’re comparing Android clients or sharing a subscription between desktop and Android.

1. How Project V, V2Fly, and Xray are related

Project V is a collection of tools and technologies for network proxying, with V2Ray as its core project. The V2Fly community continues to maintain the V2Ray core, while Xray was forked from the V2Ray codebase in 2020 and developed independently. The projects share a history, but their cores now evolve separately. Similar-looking configuration files don’t guarantee that every feature is interchangeable.

The core establishes connections, applies routing, handles DNS, and transfers data. The client displays nodes, manages subscriptions, provides settings, and launches the core. On Android, v2rayNG uses the Xray core and v2flyNG uses the V2Fly core. Desktop v2rayN is a client—not a third protocol or an alias for either core.

So, “The node says V2Ray—which app should I install?” isn’t enough to choose a client. Providers may use “V2Ray node” as a catch-all for several configurations. Check the fields in the node details and the core features the server requires.

2. Protocol compatibility: VLESS is not REALITY

A common source of confusion is treating VLESS, REALITY, and XTLS as a single feature. VLESS is a proxy protocol; it does not itself provide encryption for the entire connection. TLS and REALITY are separate security-layer options. XTLS Vision involves flow control and data handling; a common configuration field is flow=xtls-rprx-vision.

Node capability Xray core V2Fly core What to check
VMess Supported Supported Transport type, TLS, path, and server compatibility requirements
Basic VLESS Supported Basic VLESS is implemented; check the version and configuration format in use The vless:// prefix alone isn’t enough—check the security layer and flow too
WebSocket + TLS Common combinations supported Common combinations supported Host, path, server name, and certificate validation
REALITY Supported Cannot use Xray REALITY configurations Server name, public key, short ID, and fingerprint
XTLS Vision Compatible VLESS combinations supported Not compatible with Xray Vision flow Does xtls-rprx-vision match the server requirements?

“Supports basic VLESS” doesn’t mean “supports every VLESS share link.” A link may include security=reality, type=tcp, and flow=xtls-rprx-vision at the same time. If any required feature is unsupported, the link may import but fail to start—or start but fail during the handshake.

Bottom line: Choose Xray for REALITY or Vision

Check the node’s security layer and flow. If it specifically requires REALITY or xtls-rprx-vision, use v2rayNG on Android and make sure its bundled core is recent enough. Don’t try v2flyNG based on the VLESS label alone.

3. v2rayNG vs. v2flyNG: Choose a client for your nodes

The two apps have similar names, but choosing between them is straightforward. Start with the provider’s requirements, then consider how you maintain your setup. Broader feature support doesn’t make every connection faster. For the same standard VMess node, link quality, exit congestion, and routing rules usually matter more than the client’s name.

v2rayNG · Xray core

Recommended

Choose v2rayNG for VLESS + REALITY, XTLS Vision, or subscriptions that mix different Xray-compatible nodes. After importing, check the security layer, flow, and core version. A client recognizing a link doesn’t guarantee a successful connection to the server.

Best for: First-time client selection, REALITY nodes, and everyday use of Xray-specific features

v2flyNG · V2Fly core

Stick with v2flyNG if you have a stable VMess or standard WebSocket + TLS setup and both the server documentation and configuration workflow are built around V2Fly. It’s a separate core path—not an “old app” that must be replaced with Xray.

Best for: Existing V2Fly deployments, verified settings, and keeping your current configuration workflow

If your current client works, first identify what switching is meant to solve. A new node requiring REALITY or a core that doesn’t recognize the flow is a clear feature requirement. Hearing that a core is “faster” isn’t enough reason to migrate. Before upgrading or switching devices, save your subscription URL and essential routing settings—but never post links containing account details in public forums.

4. Which share-link fields determine compatibility?

A subscription distributes a list of nodes; it isn’t a connection protocol. Base64 is commonly used to encode the list, while vmess:// and vless:// are node-sharing formats. Base64 only changes how text is represented—it can’t add REALITY support to a core that lacks it, and it shouldn’t be treated as encryption.

When checking a VLESS node, sort its fields into the four groups below. These descriptions explain what the parameters mean; they aren’t a ready-to-use node link. Get actual values from the provider—don’t guess or assemble them from experience.

Field group Common fields What to check
Destination and identity Server address, port, UUID Must match the server. Port 443 doesn’t mean the other parameters are correct.
Transport type=tcp、type=ws、path、host Don’t remove or change the WebSocket path or Host arbitrarily
Security layer security=tls or security=reality, sni, fp Distinguish the server name from the connection address; set the fingerprint as specified by the provider
REALITY and flow control pbk、sid、flow=xtls-rprx-vision Check the public key, short ID, and flow; don’t replace these with standard TLS parameters

REALITY clients use the public key information provided by the server; the private key stays on the server. Some versions of the editor may use different field names, so check the documentation for that version to confirm which fields correspond. The public key in a share link isn’t a value for you to generate yourself. Changing it arbitrarily breaks the relationship required for the handshake.

  1. Import from a complete link or subscription to avoid truncating query parameters when copying by hand.
  2. Open the node editor and confirm that the protocol, transport, security layer, and flow are all preserved.
  3. If an entry is skipped, check the import format and app version first. Don’t assume that a missing node means the server is down.
  4. If the entry appears but the connection fails, check the core logs and server parameters.

5. Importing and testing on Android: remote ports vs. connection tests

In the commonly used Chinese-language version of v2rayNG, subscription management is usually under “Subscription group settings” in the side menu. Add the URL, then select “Update subscription” from the main-screen menu. To add a single share link, tap “+” in the upper-right corner, then “Import from clipboard.” Menu labels may vary slightly by version. Check the current interface in v2flyNG too; don’t assume one version’s menu path applies to every release.

443
Common remote TLS ports; use the value specified for your node
10808
Example local SOCKS listener setting
10809
Example local HTTP listener setting

These three items are examples, not speed-test results or defaults for every version. The remote port is the server’s connection endpoint; a local listener port is where apps send traffic to the client. Don’t mix them up. Some versions use a mixed listener port, so check the actual settings. Don’t add an HTTP endpoint that doesn’t exist just to match a tutorial.

  1. Record the versions: Find the app version and core version on the About screen or in the startup log. Include both when reporting an issue; the app version number doesn’t replace the core version.
  2. Check the node: Select the imported node and verify the server port and security layer. Don’t enter a local port such as 10808 as the server port.
  3. Start the service: The first time you start in VPN mode, approve the permission prompt from Android. Stop any other service using Android’s VPN connection before testing.
  4. Verify access: Open a destination that should use the proxy, then check the logs for connection and routing entries. A “running” status alone doesn’t mean the destination’s traffic is going through the proxy.
  5. Understand the test: TCP latency only reports the result of a particular connection test. It doesn’t fully verify authentication, TLS, REALITY, or access from an actual app.

6. Sharing a subscription between desktop v2rayN and Android

Sharing a subscription avoids entering nodes twice, but it doesn’t sync all local settings. Desktop system proxy settings, Android VPN permissions, per-app rules, and DNS policies are configured separately. Even with the same node selected on both devices, different routing rules may send traffic to the same destination through different exits.

Recommended: Share the node source, check local settings on each device

Desktop · v2rayN
  • Add the same subscription URL, then update it manually to confirm the nodes are available.
  • For REALITY or Vision, confirm that the current configuration runs on an Xray core that supports the feature.
  • Check whether the system proxy or TUN is enabled and whether the destination matches a proxy rule.
Android · v2rayNG or v2flyNG
  • Choose a client based on the node’s capabilities, then import the same subscription.
  • Make sure per-app rules aren’t excluding the target app.
  • Check the VPN service, DNS settings, and background status.

The same subscription provides the same node source, but update timing, import support, and local rules may differ. Verify each device separately.

If the desktop works but Android doesn’t after switching networks, first compare the node actually selected on each device and the core’s capabilities. Then check Android’s app routing and DNS resolution path. Don’t skip these checks just because the subscription is the same. Subscription URLs may contain access tokens; hide the full URL, UUID, and other account details in troubleshooting screenshots.

7. Troubleshooting import failures, handshake errors, and slow speeds

Choosing a core addresses feature compatibility, not every network issue. The stage where an error occurs is more useful for diagnosis than asking which core is “more powerful.” First check whether the node imports, then whether the core starts, then the remote handshake and destination access. Compare performance only after that.

Symptom Check first Next step
Some nodes are missing after a subscription update Response content, sharing format, and client parsing support Test with a complete individual link and check the app version
Configuration error at startup Unknown fields, unsupported flow, or custom configuration structure Check the startup log to confirm which core is actually running
REALITY handshake failure Public key, short ID, server name, fingerprint, and system time Restore each parameter from the original values provided by the server
Works in the browser but not in a specific app Per-app proxy rules, routing, DNS, and destination protocol Confirm the app’s traffic enters the client before switching cores
Connects, but speeds are slow Network congestion, packet loss, exit restrictions, and device load Keep the node and destination fixed, repeat the test, and don’t compare across different routes

Should you switch from V2Fly to Xray for better speeds?

There’s no universal answer. Vision’s processing may perform differently in suitable scenarios, but that doesn’t mean it’s faster on every network. A meaningful comparison uses the same device, network, server, and comparable configuration, and tracks handshake time, download throughput, and stability separately. If the protocol or route changes, you can’t attribute the entire difference to the core.

The node only says VLESS. What should you ask first?

Bottom line: Match the configuration before comparing performance

For REALITY or Vision nodes, start with v2rayNG. For existing V2Fly configurations, first verify compatibility with v2flyNG. Once connected, check routing, DNS, and network performance. Treat feature selection and speed testing as separate steps.