Use v2rayN first on Windows, macOS, and Linux. On Android, choose v2rayNG when you need Xray protocol support, or v2flyNG when you need to preserve a v2fly-based configuration model. This guide is for users installing a client, migrating a subscription, or checking VLESS, VMess, and Reality compatibility. By the end, you can choose based on the node protocol and your use case.
Start by narrowing candidates by platform and node type
The three apps have similar names, but different roles. v2rayN is a desktop client for Windows, macOS, and Linux; v2rayNG and v2flyNG target Android. The platform eliminates most wrong choices: use v2rayN on desktop, then choose between the two Android clients by core family.
The second factor is the node configuration. When a subscription contains only VMess, Shadowsocks, or standard VLESS, all three cores can usually handle some common combinations. When it clearly includes VLESS, XTLS Vision, Reality, Mux parameters, or Xray-specific transport fields, prefer an Xray-based client. Being able to import a link does not mean the active core can execute every field in it.
The third factor is the configuration source. When a provider explicitly specifies Xray, VLESS Reality, or Vision, use v2rayN on desktop and v2rayNG on Android. If you already have v2fly JSON configurations, need to preserve v2fly routing semantics, or the node maintainer generates configurations specifically for v2fly-core, v2flyNG is the more direct Android choice.
v2rayN
RecommendedA single desktop entry point for subscriptions, system proxy settings, routing rules, and multiple core configurations—well suited to everyday desktop use.
Best for: Windows, macOS, and Linux workstations
v2rayNG
An Android Xray-core client for VLESS, Reality, VMess, and mobile setups that need per-app proxying.
Best for: Xray nodes and everyday Android connections
v2flyNG
An Android v2fly-core client that keeps its configuration model aligned with the v2fly ecosystem, making it suitable for existing VMess and standard routing setups.
Best for: v2fly configurations and existing-node compatibility
Bottom line: platform comes before feature count
Limit the candidates to your current operating system first, then check the core features used by the subscription. Desktop users do not need to compare all three repeatedly; Android users should not overlook the configuration differences between Xray and v2fly just because the interfaces look similar.
Core Families and Protocol Support
The client handles the interface, subscriptions, configuration generation, and system integration; the core actually establishes the connection. v2rayN and v2rayNG center their mainstream configuration paths on Xray-core, while v2flyNG corresponds to v2fly-core. Both core families handle VMess, common transports, and routing rules, but Xray has a clear ecosystem fit for VLESS, XTLS Vision, and Reality combinations.
Version checks cannot rely on the client name alone. For example, in the v2rayN 7.x and v2rayNG 1.10.x interface families, client and core versions update separately. After upgrading a client, confirm the loaded core on the About page, core management page, or runtime log. The protocol name in a subscription link is only the first layer; transport, security, and flow-control fields also affect compatibility.
| Comparison | v2rayN | v2rayNG | v2flyNG |
|---|---|---|---|
| Primary platforms | Windows、macOS、Linux | Android | Android |
| Primary core path | Xray-core, with additional core options available depending on the version | Xray-core | v2fly-core |
| VMess | Supported | Supported | Supported |
| VLESS | Suitable for Xray configurations | Suitable for Xray configurations | Verify against the v2fly core and configuration fields |
| Reality and Vision | Preferred choice | Preferred choice | Not the preferred option for this type of node |
| System integration | Desktop paths including the system proxy and TUN | Android VPN interface and per-app proxying | Android VPN interface and routing settings |
Subscription Management and Cross-Device Use
Subscription management is not about the number of buttons; it is about clear updating, grouping, and failure recovery. v2rayN is well suited to multiple subscription sources: save nodes by group, then test latency, filter results, and set an active server on desktop. If the list is empty after an update, first check whether the subscription group is enabled, then review network and parsing errors in the update log.
Both v2rayNG and v2flyNG can maintain subscriptions on Android, but the same subscription may not produce identical node fields in both cores. Some providers return different content based on the client type, or place Xray-specific nodes alongside general VMess nodes. After importing, open the node details and verify the address, port, transport, security layer, and SNI instead of relying only on the node name.
When sharing a subscription between desktop and Android, there is no need to export a database between devices. A more reliable approach is to add the same subscription URL separately and let each device update independently. Node deletion, ordering, and the currently selected server are usually local data; manual sorting on one device should not be expected to sync automatically to another.
Recommended setup: subscribe separately on desktop and Android
Desktop (v2rayN)
- Add a subscription group and save the original URL
- After updating, test latency before setting an active server
- Open “Settings” → “Parameter Settings” and verify the local ports
- Choose the system proxy or TUN based on the app’s needs
Android (v2rayNG)
- Add the same subscription URL
- For Reality nodes, verify the SNI and fingerprint fields
- Enable per-app proxying when needed
- Run the connection test again after changing networks
Keep the subscription source consistent while managing client settings separately. Desktop rules and the mobile app list remain independent, making troubleshooting clearer.
Bottom line: the same subscription does not mean the same runtime configuration
The node servers can be shared, but system proxy settings, DNS, routing, and per-app lists belong to each device. When changing clients, migrate the subscription URL first, then configure the integration method again for the new platform.
Routing, System Proxy, and Per-App Features
Routing determines which connections use the proxy and which connect directly. v2rayN’s advantage is that desktop system proxying, rule-based routing, and TUN scenarios are managed in one client. For ordinary browsers and apps that follow the system proxy, enable the system proxy first; evaluate TUN only for programs that do not read system proxy settings. When both methods are enabled, make sure DNS and routing are not processing the same traffic twice.
Android does not use the same desktop system-proxy workflow. v2rayNG and v2flyNG usually take over traffic through the system VPN interface and can decide on a per-app basis whether traffic enters the proxy. When banking, LAN, or enterprise apps must stay direct, per-app proxying is more direct than writing individual domain rules. Use core routing when you need to split traffic by domain, destination IP, or geographic rules.
Routing rules are generally matched in order. Once a domain rule matches, traffic goes to its designated outbound; rules that resolve IPs may be affected by DNS results; unmatched connections go to the final default outbound. Broad rules placed first can prevent precise rules later from running. Put exact domains and destination addresses first, followed by broader geosite, geoip, or fallback rules.
- Step 1: Build a minimal configuration. Keep only one known-good node, disable extra routing and complex DNS options, and verify the basic connection first.
- Step 2: Confirm the integration method. In v2rayN, check the system proxy status and local ports such as 10808 and 10809; on Android, confirm the VPN connection status in the system status bar.
- Step 3: Add rules one group at a time. Add only one set of domain or IP conditions at a time, and watch the core log for the destination address, outbound tag, and error reason.
- Step 4: Test direct and proxied traffic. Visit one site that should connect directly and one target that should use the proxy. Do not judge every rule from a single webpage.
- Step 5: Restore the app scope. On Android, add the per-app list again; on desktop, start the programs that require TUN integration.
Migration and Verification: From Connected to Reliable
The most common migration mistake is copying the generated JSON directly. A client regenerates its runtime configuration based on its own version, core, and interface options; outbound tags, DNS structures, or experimental fields from an old file may not fit the new environment. Migrate the subscription URL and individual node links first, then rebuild routing and system integration settings in the target client.
For a single-node check, record five items: server address, remote port, protocol, transport, and security layer. For VLESS Reality, also verify serverName, publicKey, shortId, and flow; for VMess WebSocket, verify Host and the path; for TLS connections, check SNI. If a subscription converter omits any field, the node may appear present while the handshake fails.
Performance comparisons should also control the variables. On the same network, use the same server and run three consecutive tests of connection setup time and download speed; after switching clients, wait for the old connection to end. If one client uses global proxying while the other uses rule-based routing, the results cannot directly represent core performance. Timeouts, DNS failures, and connection refusals in the logs are more useful for diagnosis than a single latency figure.
- v2rayN check: Open “Settings” → “Parameter Settings” and confirm the local listening ports, log level, and system proxy options; then set the active server in the main list.
- v2rayNG check: Open the node details and verify the protocol fields. Under “Settings” → “Per-App Proxy,” confirm the target app scope before starting the connection.
- v2flyNG check: Confirm that the subscription provides a configuration executable by the v2fly core, then verify the VMess, transport-layer, and routing fields before connecting.
- General check: Close other local proxy programs first to avoid listening conflicts on 10808, 10809, or a custom port.
- Network check: Test separately on Wi-Fi and mobile data. If only one network fails, check DNS, IPv6, and network-side restrictions first.
Selection order
1. Operating system: Desktop / Android
2. Node protocols: VMess / VLESS / Reality
3. Core requirement: Xray / v2fly
4. Integration method: System proxy / TUN / Per-app proxy
5. Verification results: Logs, ports, DNS, routing outbound
Common Client Selection Questions
Similar names do not guarantee configuration compatibility. If imports fail, the connection drops offline, or only some apps work, check the four layers: platform, core, protocol, and integration method. The questions below cover common decisions after installation.
Should v2rayNG be installed on Windows?
No. Use v2rayN on Windows, macOS, and Linux; v2rayNG is for Android. After installing the desktop client, update the subscription, then open “Settings” → “Parameter Settings” to verify the local ports.
There is a Reality node on Android. Which client should I choose?
Choose v2rayNG, which uses the Xray core. After importing, open the node details and verify that VLESS, Reality, SNI, publicKey, shortId, and flow are all present before testing the connection.
Must a VMess subscription use v2flyNG?
No. VMess can be handled through both Xray and v2fly paths. If an Android subscription also includes VLESS Reality nodes, prefer v2rayNG; choose v2flyNG when the configuration maintainer explicitly uses the v2fly core.
What should I do if the subscription imports successfully but every node times out?
First check the device time and current network, then verify the server address, remote port, and security layer. On desktop, check the core log for DNS failures or port conflicts; on Android, switch networks once and reconnect.
Do all three clients need to be installed at the same time?
No. Keep the client appropriate for each device: v2rayN on desktop, and either v2rayNG or v2flyNG on Android based on the core requirement. Running similar clients in parallel can instead cause port or VPN integration conflicts.