For desktop, start with v2rayN. On Android, consider v2rayNG if your setup needs Xray-specific protocols or features; choose v2flyNG only when you specifically need the v2fly core. This guide compares platforms, cores, traffic routing, and subscription migration for first-time installs and client switches. Choose based on whether your existing configuration will work—not on similar names or a single speed test.
Platform comparison: choose separately for desktop and Android
v2rayN, v2rayNG, and v2flyNG are separate client projects, not three themes for the same app. A client manages server lists, subscription updates, routing options, and service controls. The core parses the configuration, establishes connections, and forwards traffic. Sharing “V2Ray” in their names does not make their protocol support, menus, or configuration files interchangeable.
| Category | v2rayN | v2rayNG | v2flyNG |
|---|---|---|---|
| Platforms | Windows, macOS, and Linux; choose the installer for your platform | Android | Android |
| Core | Desktop management interface; the core in use depends on the configuration, version, and selected components | Xray core | v2fly core |
| Key features | Server management, subscription groups, system proxy, routing, and logs | Subscription management, VPN service, routing, and per-app settings | Subscription management, VPN service, and routing options available in the installed version |
| What to check | Operating system and processor architecture, interface version, and the core actually in use | Whether your servers rely on Xray features and Android background-running requirements | Whether your configuration works with v2fly and whether the current version includes the features you need |
Windows users may also need to choose between the v2rayN desktop edition and the classic WPF edition. This is a choice of interface and runtime, not of proxy protocol. On macOS, check whether your device uses Apple silicon or Intel. On Linux, verify both the processor architecture and the package format (deb or rpm). Installing the wrong package can prevent startup; changing the server address will not fix it.
- Desktop only: Check your operating system and architecture, then choose the matching v2rayN installer.
- Android only: Check the server protocol and security requirements, then choose v2rayNG or v2flyNG.
- Desktop and Android: Install the appropriate client on each device and use the same subscription source, but configure local proxies and routing separately.
Core differences: check the protocol combination, not just VMess or VLESS
VMess and VLESS are proxy protocols; TLS and REALITY are related to connection security, while WebSocket and gRPC are transport methods. Check compatibility across the entire combination. For example, being able to import a VLESS link does not mean the active core supports its security layer, transport, and extra fields.
v2rayNG uses the Xray core, while v2flyNG uses the v2fly core. They share technical roots but have evolved different feature sets. For VLESS with REALITY, check Xray's support requirements; entering the same fields in v2flyNG does not make the configuration compatible. Likewise, with an existing VMess configuration, check the transport, TLS, server name, and path. Don't assume it will work just because both setups use VMess.
v2rayNG: Xray configurations on Android
RecommendedA good first choice when your Android servers explicitly rely on Xray features. After importing, check the server name, fingerprint, public key, and other requirements. The fields you need vary by node type and version.
Best for: everyday Android use and servers that rely on Xray features
v2flyNG: the v2fly environment on Android
A good fit if your existing configuration or workflow is built around v2fly. Compatibility depends on the protocols and transports supported by the included core version; the app's name alone isn't enough to tell.
Best for: existing v2fly configurations and checking behavior with the related core
v2rayN: desktop configuration management
Manage servers and subscriptions from one desktop app. When troubleshooting, check both the client version and the version of the core actually running. An interface update does not necessarily update every core component.
Best for: desktop use on Windows, macOS, and Linux
How to choose: check the complete configuration before switching clients
Write down the node's protocol, transport, and security layer. If the active core does not support any one of them, resolve that compatibility issue first. Repeated speed tests are no substitute for checking the configuration.
Interface and proxy modes: starting the service doesn't route every app through the proxy
On desktop, the two common options are system proxy and TUN. System proxy registers a proxy address with the operating system, but it only works for apps that use those settings. TUN routes matching traffic through a virtual network interface and also involves permissions, routing, and DNS. When first using v2rayN, verify that a browser works through the system proxy before trying TUN for specific apps. This makes it easier to pinpoint problems than changing several settings at once.
- v2rayN: Select a working configuration and set it as the active server. Check the system proxy status in the bottom bar or tray menu. A common path is “System Proxy” → “Set system proxy”; labels vary by version.
- Set a proxy in a desktop app: Open the client's local listening settings and check the address, port, and protocol, then enter them in the target app. Don't assume HTTP and SOCKS ports are interchangeable just because their numbers look similar.
- v2rayNG and v2flyNG: When starting the service, approve Android's VPN connection request. Then check that per-app proxy settings haven't excluded the app you want to use. The VPN icon only confirms that the service is running; it doesn't guarantee a connection to the remote server.
- Test again after changes: First test a page that should use the proxy, then one that should connect directly. Check the logs to confirm that routing matches your expectations.
The ports below are manual configuration examples, not shared defaults for all three clients. If the local address is 127.0.0.1 and both inbounds are enabled, use the examples to identify the proxy type an app needs. If your version offers a mixed port, use it according to its actual capabilities.
Subscription support: syncing servers doesn't sync routing or permissions
All three clients can manage subscriptions, but “subscription support” doesn't mean they accept every format. A typical subscription provides a set of share links that the client parses into server entries. If the subscription endpoint returns a different configuration format, a login page, or an error, successfully copying the URL won't produce usable servers. Before importing, verify that the source is trustworthy, your account is active, and the format is supported by your client, as specified by the provider.
- Add a subscription: Add an entry under subscription groups or settings. Enter a recognizable name and the complete subscription URL; don't use an account login page URL.
- Update subscriptions: In v2rayN, updates are usually started from the “Subscription Group” menu. In v2rayNG, open subscription settings from the top-right menu and run an update. For v2flyNG, follow the subscription menu in your installed version rather than relying on screenshots from another client.
- Check the results: Make sure servers appear, their protocol types match your expectations, and the update log has no errors. Then connect and test access.
- Choose how to update: Try a direct update first if the subscription URL is reachable. Use a proxy only after confirming that direct access fails and that a working proxy is available. This option can't create a connection from scratch when you have no working server after installation.
Setup: use the same subscription source on desktop and Android
Desktop: v2rayN
- Import a subscription URL supported by the client, update it manually, and test a server.
- Choose system proxy or TUN based on the desktop apps you need to route.
- Save routing rules, local ports, and DNS settings separately.
Android: v2rayNG or v2flyNG
- Make sure the selected core supports the subscription's protocol combination.
- Authorize the VPN service and configure per-app proxying if needed.
- Check Wi-Fi, mobile data, and background-running settings separately.
Using the same subscription source simplifies server maintenance, but update each device separately. Routing, permissions, local ports, and custom settings don't sync automatically with the subscription.
Treat subscription URLs as sensitive information. Hide the full URL and account details before sharing screenshots. You don't need to send someone your entire configuration when switching clients. If servers disappear after an update, check the subscription response and parsing errors first; don't immediately delete a working configuration from the old client.
Performance and reliability: a client's name doesn't determine its speed
The same server can perform differently across devices due to Wi-Fi, server load, network congestion, routing rules, DNS, and battery-saving settings. If v2flyNG happens to be faster than v2rayNG in one test, that doesn't prove one core is generally faster. Switching apps may also change the selected server, connection reuse settings, or network route.
- Keep test conditions consistent: Use the same device, network, server, and destination. When comparing protocols, keep all other key conditions the same.
- Measure latency and throughput separately: A fast connection setup doesn't guarantee fast large-file transfers. A successful latency test doesn't mean every connection on a webpage will work.
- Compare foreground and background behavior: If Android works with the screen on but disconnects when locked, check background activity and battery restrictions before changing protocol settings.
- Keep comparison notes: Change one setting at a time and record the time, network, configuration, and log errors. This helps avoid mistaking network fluctuations for improvements from a setting change.
If the logs show a local port conflict, close duplicate instances or change the listening port. For DNS resolution failures, trace the DNS path. For handshake errors, check the system clock and the relevant security-layer fields. These issues need different fixes; repeatedly switching clients can make troubleshooting harder. For more help, see the related sections in the complete troubleshooting guide.
Common client questions: importing, connecting, and switching
I have v2rayN on my computer. Should I install the same client on Android?
Don't choose by name alone. Use v2rayN on desktop; on Android, choose v2rayNG or v2flyNG based on your protocol requirements. Check your operating system on the download page, then import a compatible subscription. Desktop system proxy settings don't carry over to Android.
Why can I import a subscription but still can't connect to some servers?
Open the server's edit screen and check its protocol, transport, security layer, and required fields. Then check the core version in use. Seeing a server in the list only means the import created an entry; it doesn't confirm that the core supports the full configuration at runtime.
Android says the VPN is connected, but my browser won't load pages. What should I do?
First check that the active server works. Then check per-app settings to make sure the browser isn't excluded. Review the logs for DNS or handshake errors, and temporarily stop other services that may be using Android's VPN connection. Test each change separately instead of changing everything at once.
Can I switch from v2rayNG to v2flyNG by importing my backup?
Don't assume app backups use a universal format. Keep the original app configuration and, if possible, reimport a compatible subscription or share link. Check custom JSON, routing, and DNS settings against the target core. Once connections and frequently used apps work, you can deal with the old configuration.
My subscription uses REALITY. Which Android client should I choose?
For Xray configurations, start with v2rayNG and check the required public key, server name, and other fields. A VLESS address and user ID alone don't make a complete configuration. Don't copy Xray-specific fields into a v2fly environment and expect them to work.
What to check, in order: platform, protocol, proxy mode, subscription format
For a first install, getting one complete configuration working is more useful than enabling every advanced option upfront. Desktop users can start with v2rayN; Android users should choose based on their actual Xray or v2fly requirements. If your existing setup works, identify the specific problem a client switch would solve before migrating.
- Check the platform: On desktop, verify the operating system and architecture. On Android, make sure the installer is compatible with your device.
- Check the protocol: Review the protocol, transport, and security layer as a combination. Check the core version if needed.
- Check what traffic is routed: On desktop, start with system proxy settings. On Android, check VPN permission and per-app rules.
- Verify the subscription: After a successful update, test access and keep routing and DNS settings separate for each device.
There is no universal ranking of these three clients independent of your setup. Choose one for your platform, match the core to your configuration, and confirm that traffic actually follows the intended proxy route.