Quick overview

For Windows, macOS, or Linux, start with v2rayN 7.x. For Android, v2rayNG 1.10.x with the Xray core is the primary choice. If you use standard VMess, WebSocket, or TLS configurations, or need v2fly for compatibility testing, keep v2flyNG 1.8.x as a fallback. The sections below cover the recommended selection order, subscription imports, and cross-device setup.

Start by narrowing the options by platform

These three apps are not direct substitutes on the same platform. v2rayN targets desktop environments and runs on Windows, macOS, and Linux, while v2rayNG and v2flyNG target Android. Filtering by device first reduces the choice from three apps to one or two.

Desktop users typically need system proxy controls, tray management, multiple subscription groups, and more complete route editing, making v2rayN the better fit. Android clients use the system VPN interface to handle app traffic, so v2rayNG and v2flyNG are designed around mobile workflows.

v2rayN 7.x

Recommended

The desktop interface provides complete configuration access: manage multiple subscription groups, switch the system proxy, and review core logs and connection details.

Best for: Windows, macOS, and Linux as a daily driver

v2rayNG 1.10.x

Uses the Xray core on Android, with broad support for VLESS, VMess, Trojan, and common transport combinations.

Best for: Android as a primary client and subscriptions using Xray features

v2flyNG 1.8.x

Uses the v2fly core on Android, making it suitable for standard V2Ray configurations and useful for compatibility checks against an Xray environment.

Best for: standard VMess configurations and a v2fly-core fallback

If you only use one desktop device, start directly with v2rayN. If you only use Android, check whether the subscription includes Xray-oriented parameters such as Reality. If it does, prefer v2rayNG; otherwise, both Android clients can move on to the next comparison.

The core family determines protocol and parameter compatibility

The client handles the interface, subscriptions, and system integration; the core actually parses node configurations and establishes connections. Similar names do not guarantee identical field support. For VLESS, Reality, flow control, and transport security parameters in particular, whether the core recognizes a field matters more than the button layout.

v2rayNG uses the Xray core and is suited to configurations containing Xray extensions such as VLESS, XTLS Vision, and Reality. v2flyNG uses the v2fly core and is better suited to standard V2Ray combinations such as VMess, VLESS, WebSocket, gRPC, and TLS. v2rayN 7.x is a desktop management frontend; its actual connection capabilities still depend on the selected core and its version.

Comparison point v2rayN v2rayNG v2flyNG
Primary platforms Windows、macOS、Linux Android Android
Common core paths Desktop core management; depends on the selected core Xray v2fly
VLESS + Reality Choose an Xray core that supports this configuration Suitable as a primary client Should not be the first choice for this type of configuration
VMess + WebSocket + TLS Standard support Standard support Standard support
Route editing More complete information in the desktop interface Supports domain, IP, and per-app controls Suitable for standard rules and basic routing

Bottom line: check the subscription fields before comparing interfaces

Open a node’s details. If you see security=reality, flow=xtls-rprx-vision, or Reality public-key parameters, choose v2rayNG on Android. If the configuration mainly uses standard fields such as VMess, WebSocket, and TLS, v2flyNG has a clearer role as a fallback.

How to compare subscription management and updates

All three clients can import subscriptions, but desktop and Android management priorities differ. v2rayN is better for separating work, daily-use, and test configurations into subscription groups, while Android clients focus on quick updates, node selection, and stable background connections.

In v2rayN 7.x, go to Subscription Groups → Subscription Group Settings to add an address, then choose Subscription Groups → Update All Subscriptions. If the provider gives you a clipboard link, first make sure the chat app has not truncated it, and do not mistake a single-node share link for a subscription URL.

In v2rayNG 1.10.x, the usual path is Sidebar → Subscription Group Settings to add a subscription, then return to the main screen and choose Update Subscription. For a single-node configuration, tap “+” in the upper-right corner and select Import from Clipboard. v2flyNG has a similar layout; after importing, update once, select a node, and start the connection.

Recommended setup: share one subscription across both devices

Desktop (v2rayN)
  • Create a separate subscription group and name it by purpose
  • After updating, check the node protocol and transport fields
  • Verify that the local mixed proxy port is 10808
  • Start with basic routing rules to validate traffic splitting
Android (v2rayNG)
  • Import the same subscription URL
  • After updating, confirm that the node names match the desktop client
  • Enable per-app proxying in Settings when needed
  • Re-establish the VPN connection after switching nodes

Sharing a subscription between devices syncs only the nodes and parameters provided by the server. Local routes, per-app lists, and system proxy status remain separate on each client.

Do not set automatic updates too frequently. Subscription contents usually do not change minute by minute, so update manually when needed or set a daily schedule. If a connection fails after an update even though node names are unchanged, check protocol-field errors in the logs instead of repeatedly refreshing the subscription.

The practical differences in routing

Routing determines which requests use the proxy outbound, which connect directly, and which are blocked. All three clients support domain and IP rules, but desktop is better for reviewing the complete rule order, while Android adds another layer: choosing which apps enter the proxy.

v2rayN’s local proxy usually listens on the loopback address. For a mixed port of 10808, set the browser’s manual proxy to 127.0.0.1 and 10808, not the device’s LAN address. If another program is using the port, go to Settings → Parameters to change the local port, save, and restart the core.

  1. Verify global connectivity first: Temporarily route all target traffic through the current node to confirm that the protocol, address, port, and transport parameters work.
  2. Then enable basic routing: Switch to domain- and IP-based routing, reopen the target website, and avoid reusing an old connection.
  3. Finally add custom rules: Give each rule one clear purpose and check the top-to-bottom matching order.
  4. Check the app scope on Android: When per-app proxying is enabled, confirm that the target browser or app is included in the selected list.
Desktop local proxy check
Address: 127.0.0.1
Port: 10808
Rule order: Custom rules → Common domain rules → IP rules → Final outbound
Change path: Settings → Parameters → Local listening port

v2rayNG’s per-app proxy is useful when only selected apps should enter the tunnel, but it is a separate control layer from core routing. If an app is not included, its requests never reach the core; only after entering the core do they match domain, IP, and outbound rules. Check in this order when troubleshooting.

v2flyNG can also handle standard routing, but its main reason for selection should be v2fly-core compatibility, not automatic rule migration. Even when both Android clients import the same subscription, local rules, DNS settings, and app lists must still be configured separately.

Bottom line: check app scope on mobile and the listening port on desktop

When some Android apps work and others do not, check the per-app proxy list first. When a desktop browser cannot connect at all, confirm that the core is running and verify that 127.0.0.1:10808 matches the browser or system proxy settings.

Two practical client-selection paths

You do not need to score every feature. Answer three questions in order—device, subscription protocols, and routing needs—and you can usually choose a primary client within a minute.

Desktop path: v2rayN as the central entry point

Android path: v2rayNG primary, v2flyNG for comparison

When v2flyNG makes sense as a fallback

v2flyNG is not meant to replace Xray in every scenario; it provides a distinct core path. When the subscription uses standard V2Ray configurations, the server has long used VMess or standard VLESS, and no Xray extension fields are required, v2flyNG can provide a stable Android connection.

Its second value is diagnostic comparison. If the same standard configuration behaves differently in v2rayNG and v2flyNG, the logs can help identify whether the issue is in client settings, core parsing, or server parameters. Keep the server address, port, user identifier, transport, TLS, and SNI identical during comparison, or the result will not be meaningful.

For comparison testing, use a fixed sequence: stop the current connection, clear old logs, import the same single-node configuration, connect once and save the error details, then repeat in the other client. Do not change DNS, routing, and transport parameters at the same time, or you will not know which change fixed the issue.

Bottom line: assign primary and fallback roles by core

For Android as a primary client with Xray extension configurations, choose v2rayNG. Keep v2flyNG for standard V2Ray configurations and core comparison. Installing both is about dividing responsibilities, not maintaining the same configuration twice indefinitely.

Common selection questions

The questions below focus on “imported successfully but does not work” and whether both Android clients need to be configured. Check the actual fields and system integration status first; do not judge by the node name alone.

Can desktop and Android use the same subscription directly?

Yes. Add the same URL and update it in v2rayN and v2rayNG, but configure local routing, DNS, the system proxy, and the per-app list separately. First compare whether same-named nodes have identical protocol, port, transport, and TLS fields.

What should I do if v2rayNG says the imported configuration is invalid?

Open the node details and check the address, port, user identifier, transport, and security parameters. If the configuration contains Reality, pay special attention to the public key, shortId, serverName, and flow fields. Missing fields must be corrected at the subscription source; changing the routing mode will not fix them.

The v2rayN core is running, but the browser still cannot open websites. What should I check?

First verify that the system proxy is enabled, then check whether the browser still points to 127.0.0.1:10808. If you changed the port, go to Settings → Parameters to confirm the actual listening value, and check the logs for port conflicts or DNS resolution errors.

I installed v2rayNG. Do I still need to keep v2flyNG?

For ordinary use, there is no need to maintain both. Keep v2flyNG only when the subscription mainly uses standard V2Ray configurations, requires a v2fly-core environment, or you are comparing core compatibility.

After switching clients, some subscription nodes are missing. What should I check first?

First confirm that you imported the complete subscription URL rather than a single-node link, then run an update manually. Check the update log for format-parsing errors. If only nodes using a specific protocol are missing, verify that the client and core versions recognize the relevant fields.

The final choice can be summed up in one sentence: use v2rayN on desktop, prefer v2rayNG on Android, and use v2flyNG for standard V2Ray configurations or core-comparison scenarios. Protocol compatibility matters more than interface preference, while local routing and system integration determine whether the imported configuration actually connects.