V2Ray Client Comparison
Platform, Core, and Setup Differences
For desktop, start with v2rayN; for Android, start with v2rayNG. Consider v2flyNG only if you specifically need V2Fly core compatibility. Choose for your device first, then for your configuration needs.
- 3 GUI clients
- Xray / V2Fly cores
- Desktop and Android
Client comparison table
This table compares how the clients work, not how many features they have. Menus and supported options vary by version and core.
Swipe horizontally on narrow screens to see the full table.
| Comparison criteria | v2rayN | v2rayNG | v2flyNG |
|---|---|---|---|
| Platform support | Windows、macOS、Linux | Android | Android |
| Core options | Xray / V2Fly; match the configuration to the core | Xray | V2Fly |
| Maintenance | Actively maintained, with the desktop interface continuing to evolve | Actively maintained, keeping pace with Android and the Xray ecosystem | Community-maintained; check its release cadence separately |
| Ease of use | Easy to import a basic configuration; proxy, routing, and TUN require separate setup | Relatively easy; import a configuration, grant VPN permission, and start testing | Similar basic workflow; check V2Fly configuration compatibility yourself |
| Subscription groups | Desktop group management, with per-group subscription updates | Subscription management and group filters; menus vary by version | Subscription management; group views and options depend on the installed version |
| Routing UI | Visual routing settings for managing rule sets and match order | Preset routing, rule settings, and per-app selection | Routing settings; available rules must be supported by the V2Fly core |
| TUN / traffic handling | TUN mode available; requires the relevant system permissions | Handles traffic through Android's VPN service; it does not use a desktop-style TUN toggle | Handles traffic through Android's VPN service; system permission required |
| Best for | Desktop users, users with multiple subscription groups, and users who need detailed routing | Most Android users, including those with Xray-based configurations | Users with existing V2Fly configurations who want to stay in the same core environment |
v2rayN
Subscription groups, system proxy, and routing management
Choose a desktop download →On Windows, macOS, or Linux, start with v2rayN. Its GUI brings subscription groups, configuration lists, system proxy, and routing settings together. Get a basic connection working first, then add rules as needed. You can keep multiple subscription sources in separate groups; before updating, check the selected group so new subscriptions don't get mixed in with older configurations.
Desktop setups have two separate layers: the system proxy determines which apps send requests to the client, while routing rules determine how those requests are handled. “Auto-configure system proxy” works for browsers and other apps that use the system proxy, but it won't capture traffic from every app. If an app ignores the system proxy, consider TUN mode rather than changing every setting at once.
v2rayN can use either the Xray or V2Fly core, but that doesn't mean both support exactly the same protocol parameters. If an existing configuration depends on a specific Xray feature, keep the matching core. TUN traffic handling is separate from the proxy protocol core; troubleshoot permission or virtual network adapter issues for your platform instead of assuming a core switch will fix them.
The Windows download page offers a desktop edition and a classic WPF edition. The former uses a newer cross-platform interface; the latter retains the classic workflow. On macOS, choose a package for your chip. On Linux, select a package for your distribution and processor architecture. Packages with similar names are not interchangeable.
v2rayNG
Xray core, subscription import, and per-app routing
View Android downloads →For most Android users, v2rayNG is the place to start. The basic workflow is straightforward: add a subscription, update the configuration, select one to use, start the service, and grant Android VPN permission. It uses the Xray core, making it a clear choice for configurations that rely on Xray-specific protocol features. For example, if a configuration uses REALITY, check current Xray support rather than trying to run it directly on the V2Fly core.
Traffic handling on a phone differs from desktop. Android's VPN service creates a local entry point for traffic. A VPN icon in the status bar only confirms that this system-level route is active; it doesn't prove the remote connection is working. After importing a configuration, test by opening the site you want to reach. If it fails, check the subscription, selected configuration, logs, and network environment in that order.
For app-specific routing, look for per-app proxy settings; for domain- or address-based routing, check the routing rules. These settings apply to different things, so change one at a time. Android battery restrictions are another common factor: if the connection drops when the screen turns off and returns when you reopen the app, check background permissions before reinstalling the client.
Check your device's architecture before downloading. Most newer devices use the arm64 package. If you're unsure or installation reports an incompatibility, check the universal build and system requirements. The universal build covers more architectures; it doesn't lower the app's Android version requirements.
v2flyNG
Keep an existing V2Fly configuration environment
View the Android alternative →The main reason to choose v2flyNG is its V2Fly core—not an assumption that an alternative app uses fewer resources. If your existing configuration depends on V2Fly behavior, or you need to reproduce an issue within the same core family, consider it as an Android alternative. For new users without that specific need, v2rayNG is the better starting point, and its instructions are easier to follow consistently.
The two Android clients have a similar basic workflow: import a valid configuration and grant Android VPN permission. That doesn't mean their settings are interchangeable. The core in use must support the protocols, transport methods, and extra fields in your subscription. Being able to import a link doesn't guarantee that its configuration will start or connect successfully.
Consider maintenance separately from feature compatibility. v2flyNG is community-maintained, so check its release cadence and core compatibility independently; don't assume it follows v2rayNG's update schedule. Before migrating, keep the old client and a working configuration. Test basic access, per-app routing, and background operation under the same network conditions, then clean up old data once everything works.
Don't judge performance on older devices by the core name alone. System compatibility, available memory, background restrictions, protocol, and network route all affect the experience. Comparisons are meaningful only when test conditions are documented. If installation fails, check the Android version and device architecture before repeatedly switching clients.
Choose a client for your use case
Narrow your choice down to your device and actual needs. There's no need to add setup work for features you won't use.
Check these three things before downloading
Operating system, package architecture, and required core. Make sure all three match before importing a subscription or setting up a proxy.
- Which client fits your device. For desktop, start with v2rayN; for Android, start with v2rayNG. Choose v2flyNG only if you need V2Fly configuration compatibility. Don't download an installer for a different platform just because the name looks similar.
- Which core your configuration needs. Ask the configuration provider which protocol and parameters are required, especially for specific security handshakes or transport methods. Xray and V2Fly belong to the same open-source ecosystem, but they evolve separately, so their feature support isn't interchangeable.
- Whether the client is really causing the connection problem. If two of the three clients still can't connect, check that the subscription is valid, your device clock is correct, and your local network is working. Keep the error type from the logs when troubleshooting, and hide subscription URLs, account details, and node credentials before sharing them.
Next, choose a package for your platform on the download page. Already installed? Read the user guide. For details on system proxy, TUN, and platform permissions, see the full documentation.