Aug 6, 2026 · Client Comparison · About 9 min read

v2rayN vs. v2rayNG vs. v2flyNG: Desktop and Android Client Comparison

Compare v2rayN, v2rayNG, and v2flyNG by platform, core, subscription support, and routing to find the right desktop or Android client.

At a glance

For desktop, choose v2rayN. On Android, consider v2rayNG when you need Xray and REALITY support; choose v2flyNG only if your setup specifically requires the V2Fly core. Compare platforms, protocol fields, subscriptions, and traffic handling below, then follow the setup steps for each device. Although the clients have similar names, their installers, core settings, and routing options are not interchangeable.

Choose by device first: v2rayN for desktop, then compare Android cores

Start with your operating system, then compare features. v2rayN is for Windows, macOS, and Linux desktops; v2rayNG and v2flyNG are for Android. You don't need the same app on your computer and Android device to use the same service. What matters is matching the protocol and connection settings required by the server.

v2rayN: the desktop option

Recommended

A good fit for managing subscriptions, reviewing logs, and adjusting routes on a computer. The interface and bundled core components can vary by platform and release, so check the operating system, processor architecture, and edition before downloading. This recommendation is for desktop use; v2rayN does not replace an Android client.

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

v2rayNG: the Android option for Xray

Uses the Xray core for proxy connections and routes device traffic through Android's VPN service. If you need a combination such as VLESS and REALITY, check that the bundled core version supports it and that all required fields are present after import.

Best for: Android devices, Xray configurations, and per-app proxy controls

v2flyNG: the Android option for V2Fly

Uses the V2Fly core and is suited to configurations already verified to work with it. Don't assume that transport or security settings intended for Xray will work just because the app names are similar; check compatibility field by field.

Best for: Android devices with existing V2Fly configurations and relevant maintenance experience

The installer must also match your device's architecture. For example, a desktop x64 build and an ARM64 build are different files. Android installers may also vary by architecture. Check your system information, then choose the right option from the download center—it's easier than troubleshooting an app that won't start.

Cores and protocols: “supports VLESS” doesn't mean full compatibility

The client provides the interface, manages subscriptions, and starts the core. The core handles protocol handshakes, transport, parsing, and routing. v2rayN can manage different cores, so its capabilities depend on the core you've selected and installed. The key difference between v2rayNG and v2flyNG is their use of Xray and V2Fly, respectively.

What to checkv2rayNv2rayNGv2flyNG
Supported systemsWindows、macOS、LinuxAndroidAndroid
CoreCan manage cores such as Xray and sing-box, depending on the release and settingsXrayV2Fly
VMess supportCheck the selected core and transport settingsCheck node parameters and core versionCheck node parameters and core version
VLESS + REALITYChoose a core and configuration method that support this combinationCheck REALITY fields and required core capabilitiesNot a direct replacement for Xray REALITY configurations
Primary traffic handlingSystem proxy, manual per-app proxy, or TUNAndroid VPN serviceAndroid VPN service

A node requires at least a protocol, address, port, and credentials. It may also include a transport type, TLS, security extensions, and flow-control settings. Even if both clients recognize VLESS, they may not support every combination used by the server. REALITY is not the same as ordinary TLS; switching it to TLS or deleting unrecognized fields usually won't fix the connection.

Choosing an Android client: start with the node parameters

If the provider explicitly requires Xray or supplies REALITY parameters, start with v2rayNG on Android. Consider v2flyNG only after confirming that the configuration is intended for V2Fly. If a field isn't supported, use a compatible client or configuration rather than deleting it and hoping for the best.

Importing subscriptions: reuse the URL, not necessarily the config file

All three clients can manage subscriptions, but “subscription” doesn't refer to one universal configuration format. A typical node subscription returns a list of share links, which may be Base64-encoded. Native JSON, by contrast, may be a complete core configuration containing inbounds, outbounds, DNS, and routing. Subscription update and custom configuration import are separate functions.

  1. Desktop: In v2rayN, open “Subscription group” → “Subscription group settings,” add the URL, and save. Then select “Update current subscription (without proxy).” If the URL is only reachable through a proxy, choose the proxied update option once you have a working connection.
  2. Android: In v2rayNG or v2flyNG, add the URL under “Subscription settings” and save it. Return to the main screen and select “Update subscription.” Menu locations and labels may vary slightly by release.
  3. After updating: Check that nodes appear in the list, then open a node's details and verify the protocol, transport, and security settings. A populated list only means the nodes were parsed; it doesn't prove the server is reachable.
  4. When migrating: Add the compatible subscription provided by your service provider whenever possible. If you only have native JSON, confirm the target core and import method; don't overwrite the entire client configuration.

If the subscription updates on your computer but not on Android, compare the networks used on each device, confirm the subscription URL is complete, and check whether the update request is routed through a proxy. If your provider offers different formats for different clients, use the matching subscription option rather than repeatedly changing node names.

System proxy vs. VPN: connecting to a node doesn't mean an app is using the proxy

On desktop, first check whether traffic is reaching the local proxy. v2rayN's system proxy setting mainly affects apps that honor the system proxy. Some programs use their own network settings, so you may need to configure a proxy manually or set up TUN. Android clients request VPN permission when started and route traffic through a virtual network interface—a different mechanism from the system proxy toggle on a computer.

10808
Common local SOCKS or mixed inbound port
10809
Separate HTTP inbound port used by some configurations

These are common troubleshooting ports, but not every version listens on both. Newer configurations may use a single mixed inbound. Check the actual local listener settings under v2rayN “Settings” → “Parameter settings,” then confirm them in the startup log. For manual proxy setup in an app, the address is usually 127.0.0.1; the port and proxy type must match the active inbound.

Split tunneling: choose what to capture before deciding where it goes

Per-app settings determine which apps enter the proxy tunnel; core routing determines which outbound handles connections inside it. These are separate layers. Traffic from an excluded Android app won't be processed by the core's domain rules. On desktop, a connection that never reaches the proxy won't be captured just because you added a routing rule.

Set up both devices: share the node source, configure traffic scope separately

Desktop: v2rayN
  • Add a compatible subscription and select a working node.
  • Test the browser connection with the system proxy first.
  • Check the order of domain and IP rules.
  • Set up TUN only if you need to capture traffic from the whole device.
Android: v2rayNG or v2flyNG
  • Import a node compatible with the core in use.
  • Start the connection and grant VPN permission.
  • Configure per-app proxying as needed.
  • Test access to both direct and proxied destinations.

Both devices can use the same subscription source, but routing, DNS, and app selection must be configured and tested separately.

When troubleshooting rules, check whether broad rules come before specific ones, then confirm that the outbound tag exists. Domain rules can also depend on DNS handling, destination format, and sniffing settings. If the same site behaves differently on each device, the nodes may be identical—the difference could be that one client matches a domain while the other only sees an IP address.

  1. Keep the node unchanged and temporarily route all traffic through the proxy to test basic connectivity. Restore your intended split-tunnel rules when you're done.
  2. Once basic connectivity works, restore domain and IP rules, changing only one type of setting at a time.
  3. Check the logs to confirm which outbound handles the destination. If the logs don't show routing details, temporarily increase the log level and restore it when troubleshooting is complete.

Common questions: subscriptions, speed, and using two devices

Can I import nodes between v2rayNG and v2flyNG?

You can try importing share links supported by both clients, but open the node details and check the transport and security settings. Native JSON also depends on core syntax, so changing the filename alone won't make it work. Check REALITY configurations against Xray support first; don't treat them as generic VLESS configurations.

Will switching clients improve download speeds?

You can't tell from the client name alone. Compare the clients using the same node, network, test destination, and roughly the same time, then check whether the connection is stable. Look in the logs for DNS failures, connection timeouts, and retries. Speed figures collected under different conditions aren't useful for choosing a client.

Can I use one subscription on both a computer and Android?

First confirm that both clients can parse the subscription, then check your provider's device, concurrent connection, and data limits. Using the same subscription URL doesn't mean unlimited concurrent connections are allowed. Each device must update separately to show the nodes returned at that time; local changes don't sync automatically in real time.

Why does the connection still fail after a successful subscription update?

Check the log for the first clear error. If the desktop app reports that an address is already in use, check the active listening port. If it reports an unsupported field or protocol, verify the selected core. On Android, also check VPN permission and the node details. A successful update doesn't mean the connection is working.

Final checklist: confirm platform, protocol, and traffic handling

On desktop, choose v2rayN and check the installer against your system architecture, selected core, and system proxy settings. On Android, first determine whether the server depends on Xray capabilities: choose v2rayNG for REALITY; choose v2flyNG if you have a confirmed need for a V2Fly configuration. Unless you have a specific core requirement, there's no need to install both Android clients just because their names are similar.

For your first setup, follow the getting started guide to import a subscription and test the connection. To adjust which traffic is routed, see the configuration guide, from beginner to advanced. Check node connectivity separately from whether app traffic enters the proxy; this usually makes troubleshooting easier than reinstalling repeatedly.

Download v2rayNChoose a client for your platform