How to Choose Between v2rayN, v2rayNG, and v2flyNG: A Side-by-Side Comparison of Three V2Ray Clients

Compare three clients by platform support, core family, subscription management, routing, and update cadence—with clear picks for desktop and Android.

Quick takeaways

For desktop, start with v2rayN. On Android, v2rayNG is usually the better first choice when the setup uses the Xray core; choose v2flyNG when existing nodes specifically depend on v2fly behavior. This guide is for first-time installs, subscription migrations, and client compatibility checks. By the end, you can choose based on platform, protocol, routing needs, and maintenance.

Filter by platform first—not by feature count

The biggest difference between these clients is not the number of buttons; it is where they run. v2rayN targets Windows, macOS, and Linux desktops, with system proxy control, multiple subscription groups, and a fairly complete routing editor. v2rayNG and v2flyNG target Android, with workflows built around mobile network changes, background connections, and per-app routing. Desktop and Android are not mutually exclusive choices: a common setup is v2rayN on a computer and either v2rayNG or v2flyNG on a phone.

This comparison uses an interface baseline compiled on May 28, 2026: v2rayN 7.15.4, v2rayNG 1.10.33, and v2flyNG 1.10.33. Later releases may change menu labels or bundled core versions, but minor updates are unlikely to overturn the platform focus, core family, or configuration model. If your interface differs slightly, look for the same setting by name instead of following button locations mechanically.

3 types
Desktop platforms: v2rayN
2 options
Android clients available
10808
Common local SOCKS port
100 nodes
Subscription parsing sample
Client Primary platforms Primary core family Best suited for
v2rayN Windows、macOS、Linux Manageable cores such as Xray and v2fly Desktop system proxy, TUN, advanced routing, and multiple subscriptions
v2rayNG Android Xray VLESS, Reality, mobile networks, and per-app routing
v2flyNG Android v2fly Existing VMess configurations and consistent v2fly behavior

The core family determines protocol and configuration compatibility

The client interface imports, edits, and starts configurations; the core handles connections, transport, DNS, and routing rules. v2rayNG uses the Xray core, making it a good fit for nodes that use VLESS, Reality, XTLS Vision, and other Xray capabilities. v2flyNG uses the v2fly core and is better suited to environments that preserve v2fly configuration semantics, rely on existing VMess deployments, or explicitly specify v2fly behavior on the server.

v2rayN serves a different role: it is a desktop manager that can manage different cores within the available settings. After importing a share link, it generates a configuration based on the node type—but successful import does not guarantee core support. For example, if a subscription contains a VLESS Reality node, confirm that the selected core supports that configuration. Handing the same node to a core that does not recognize its fields commonly produces an unknown-setting error in the startup log or causes the core process to exit immediately.

v2rayN

Recommended

A complete desktop management experience for system proxy, TUN, subscription groups, and fine-grained routing—well suited as a primary computer client.

Best for: everyday use on Windows, macOS, and Linux

v2rayNG

Uses the Xray core, providing more direct support for VLESS, Reality, and Xray routing configurations.

Best for: new Android nodes and the Xray protocol ecosystem

v2flyNG

Uses the v2fly core. Its interface is close to v2rayNG, with an emphasis on preserving v2fly configuration behavior.

Best for: existing VMess configurations and v2fly environments on Android

Bottom line: match node requirements before comparing interface preferences

When a subscription mentions Xray, VLESS Reality, or Vision, choose v2rayNG on Android. Choose v2flyNG when the server configuration has long been maintained alongside the v2fly ecosystem. Do not overlook core differences just because the interfaces look similar.

How to identify core requirements from a subscription

Subscription management affects long-term maintenance

When there are only a few nodes, all three clients can import individual share links from the clipboard. Once you have dozens of nodes and need regular updates, subscription groups, update methods, and duplicate handling become the key differences. v2rayN offers more desktop space, making it easy to separate work, home, and test subscriptions into groups with independent update intervals and active configurations.

In v2rayN 7.15.4, open “Subscription groups” → “Subscription group settings” to add an address and assign an alias to each group. Then choose “Subscription groups” → “Update all subscriptions (without proxy)”. If the current network cannot reach the subscription address directly, start a working configuration first and update through the proxy. Afterward, do not check only the node count: spot-check the address, port, transport, and TLS fields for unexpected changes.

  1. First import: Create a dedicated subscription group first. Do not mix test links with long-term subscriptions.
  2. After updating: Record the node count before and after import. For example, if a sample subscription should contain 100 nodes but only 73 appear, check the logs for parsing errors.
  3. Configuration spot-check: Check one VMess node, one VLESS node, and one Reality-enabled node. Verify the server address, port, SNI, and transport type.
  4. Connection test: Test real latency first, then select a node and enable the system proxy. A “Test failed” result is not by itself a reason to delete the node; the server may simply ignore a particular probe method.
  5. Set an update schedule: Match the update frequency to the provider’s change rate. Daily updates make sense for frequently changing subscriptions; stable configurations do not need requests every few minutes.

The subscription entry points in v2rayNG and v2flyNG are both near “Subscription settings” in the side menu. Add an address, return to the main screen, and choose “Update subscription” from the top-right menu. Android may restrict background network activity, so use the update time and node count shown in the client as the source of truth. If an update times out, connect to a known working node first, then enable proxy-based updates in the subscription settings.

Comparing system proxy, TUN, and per-app routing

On desktop, v2rayN typically starts with system proxy mode. It writes a local HTTP or SOCKS listening address to the system proxy settings, allowing browsers and apps that honor those settings to send traffic through the client. The common local SOCKS port is 10808; the HTTP port may use a neighboring port depending on the version and configuration. Confirm the actual values under “Settings” → “Parameters settings” → “Basic settings” instead of hard-coding a port based on guesswork.

Some desktop programs ignore the system proxy or also need UDP traffic intercepted; that is when TUN becomes worth considering. TUN uses a virtual network interface to handle a broader range of traffic, but it is also more likely to conflict with enterprise network tools, virtual machine adapters, game accelerators, and local firewall rules. “Supports TUN” does not mean “TUN should always be enabled.” When system proxy covers everyday browsing, keeping the interception scope smaller makes troubleshooting easier.

Capability v2rayN v2rayNG v2flyNG
System proxy Supported; suitable for regular desktop apps Does not work through the desktop system proxy model Does not work through the desktop system proxy model
TUN or virtual network interception Supported; useful for apps that ignore proxy settings Handled through the Android VPN service Handled through the Android VPN service
Per-app routing Usually relies on routing rules and process matching Choose which apps to proxy or bypass Choose which apps to proxy or bypass
Domain and IP routing Well suited to editing multiple rule groups and rule sets Supports mobile routing settings Supports v2fly-family routing settings

Choosing per-app routing in practice

Bottom line: broader interception means more troubleshooting variables

Start with the system proxy or the default mobile connection to verify the node, then enable TUN, per-app routing, and custom DNS step by step. Change only one setting at a time so you can distinguish node failures from routing mistakes and local network conflicts.

What to check when updating and migrating configurations

Updating a client is not just about getting a new interface. Core versions, routing data formats, subscription parsers, and system compatibility may change at the same time. Users who regularly adopt new protocols should check whether the client integrates compatible cores promptly. Those with stable VMess configurations should focus more on whether their settings migrate cleanly after an update. There is no need to chase the highest version number mechanically, but staying indefinitely on a release that cannot recognize current subscription fields is also a bad idea.

v2rayN has many configurable items, so before upgrading, record your subscription groups, active core, listening ports, system proxy mode, and custom routes. When switching between v2rayNG and v2flyNG on Android, do not assume every internal setting will transfer perfectly. The safest approach is to keep the original subscription address and any essential single-node share links, re-import them into the new client, and restore per-app proxying, routing mode, and DNS settings one by one.

Do the computer and phone need to use the same client?

No. You can use v2rayN on a computer and v2rayNG on Android. As long as both recognize the protocols and transport parameters in the same subscription, each device can maintain its own configuration.

Why does v2rayNG import successfully but still fail to connect?

Open the log from the top-right menu and first check the address, port, UUID, SNI, Reality public key, and short ID. Successful import only means the link format was parsed; it does not mean every field is correct.

What should I do if a subscription update times out?

Connect to a known working node first, then open “Subscription settings”, enable proxy-based updates, and try again. Also make sure the subscription address has no extra spaces and that system time synchronization is enabled.

Can v2rayNG and v2flyNG be installed at the same time?

Yes, you can keep both for comparison, but only one client can establish the Android VPN connection at a time. Disconnect the current client before starting the other one so a connection handoff is not mistaken for a node failure.

A website stopped opening after an upgrade. Should I roll back first?

First check under “Settings” whether the local port, DNS, routing mode, or active core changed, then test with a known working node. Restore a backed-up configuration only after confirming a persistent compatibility problem between the new version and your existing setup.

Minimum information to preserve during migration

Final choice: match the device and node type

If your main device is Windows, macOS, or Linux, choose v2rayN. It covers desktop system proxy, TUN, subscription groups, core management, and advanced routing, bringing most desktop needs into one interface. For a first setup, import the subscription, test latency on one node, and enable the system proxy. Configure TUN only when an app does not honor the system proxy.

If the device is Android and the subscription includes VLESS, Reality, Vision, or an explicit Xray requirement, choose v2rayNG. It maps more directly to the Xray ecosystem and works well for mobile per-app routing. For a first setup, follow “Subscription settings” → “Update subscription” → select a node → start the connection, then open “Settings” → “Per-app proxy” if needed.

If Android uses a long-standing VMess configuration and both the server and existing rules are maintained around the v2fly core, choose v2flyNG to preserve behavior within the same core family. Still verify the subscription fields before migrating: similar client names do not mean every Xray-specific configuration will run directly.

  1. Everyday desktop use: Choose v2rayN and start with the system proxy.
  2. New Android protocol nodes: Choose v2rayNG and verify the Xray and Reality parameters carefully.
  3. Existing v2fly setup on Android: Choose v2flyNG to keep server and client core semantics aligned.
  4. Cross-device use: Install v2rayN on the computer, then choose v2rayNG or v2flyNG on Android according to the node’s core. The client names do not need to match.
Client downloads View download options by platform