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
RecommendedA 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 check | v2rayN | v2rayNG | v2flyNG |
|---|---|---|---|
| Supported systems | Windows、macOS、Linux | Android | Android |
| Core | Can manage cores such as Xray and sing-box, depending on the release and settings | Xray | V2Fly |
| VMess support | Check the selected core and transport settings | Check node parameters and core version | Check node parameters and core version |
| VLESS + REALITY | Choose a core and configuration method that support this combination | Check REALITY fields and required core capabilities | Not a direct replacement for Xray REALITY configurations |
| Primary traffic handling | System proxy, manual per-app proxy, or TUN | Android VPN service | Android 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.
- VMess: Check the UUID, transport type, TLS settings, and system time. An incorrect device clock can affect authentication.
- VLESS + TLS: Check the server name, certificate verification, transport path, and any flow required by the server.
- VLESS + REALITY: Check the public key, short ID, server name, fingerprint, and flow. Refer to the server configuration for the exact fields.
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.
- 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.
- 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.
- 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.
- 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.
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.
- Desktop browser can't connect: Make sure the node is set as the active server, then check the tray menu and select “Auto-configure system proxy.”
- Only one desktop app fails: Check whether it ignores the system proxy or has an outdated manual port configured. Don't change the subscription as your first step.
- Android says it's connected, but an app connects directly: Check whether per-app proxying is enabled and whether the app is included or excluded.
- Android connection keeps dropping: Check whether the system restricts background activity or another app is trying to use the VPN service.
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.
- 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.
- Once basic connectivity works, restore domain and IP rules, changing only one type of setting at a time.
- 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.
- Step 1: Identify whether your device runs Windows, macOS, Android, or Linux, and choose the corresponding installer.
- Step 2: Check protocol, transport, security settings, and core compatibility to make sure no node fields were lost during import.
- Step 3: Verify a single node connection before adding per-app, DNS, or routing rules.
- Step 4: Record the settings you've verified. When troubleshooting later, change one variable at a time instead of switching the core, node, and routing together.
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.