CLIENTS / XRAY / V2FLY
V2Ray Client Comparison
Choose for Desktop or Android
Start with your operating system, then check which core your configuration needs. For desktop, start with v2rayN; for Android, start with v2rayNG. Consider v2flyNG if you have a specific need for the V2Fly core.
All three are open-source GUI clients. A client provides the interface for managing settings; the core handles the actual connection. You'll still need to provide a valid configuration after installing a client.
Compare the three clients
This table covers common use cases; it doesn't combine every release's features into a single promise. Interfaces, core components and system permissions vary by platform and version. For a specific feature, check the settings and startup behavior of the package you actually install. Scroll horizontally to view all columns on narrow screens.
| Feature | v2rayN | v2rayNG | v2flyNG |
|---|---|---|---|
| Platforms | Windows、macOS、Linux | Android | Android |
| Core options | Manage Xray, V2Fly and other core configurations; available options depend on the release | Primarily used with Xray | V2Fly core |
| Maintenance | Actively maintained | Actively maintained | Community-maintained; check recent updates and compatibility with your system before choosing |
| Ease of use | Basic imports are straightforward; routing and multi-core options take some time to learn | The basic connection flow is simple; you'll need to understand Android VPN permissions | Basic usage is similar to other Android clients; check core compatibility first |
| Subscription groups | Organize groups, update subscriptions and manage the server list | Supports subscription management and configuration groups; menus may vary by interface | Supports subscription management; what it can parse depends on the client parser and core |
| Routing rule interface | Desktop tools centralize rule editing and management, making it easier to review domains, IPs and outbound settings | Includes routing settings and per-app traffic controls | Includes basic routing settings; check core support for complex rules |
| TUN and traffic routing | Offers a TUN setup path that depends on the required components, system permissions and platform support | Routes traffic through Android's VPN service; this is not the same as a desktop TUN toggle | Routes traffic through Android's VPN service; this is not the same as a desktop TUN toggle |
| VLESS / REALITY | Requires a core that supports the feature; check the transport and security settings | A good Android option for Xray-based configurations, but check the core's capabilities | Don't assume Xray-specific configurations will work as-is, especially those using REALITY |
| Best for | Everyday desktop use, subscription management, routing troubleshooting and multiple cores | Everyday Android use, per-app routing and Xray configurations | Users with existing V2Fly configurations or a need to check how that core behaves |
v2rayN: Desktop subscriptions and routing
Top desktop pick
Choose v2rayN if you manage configurations on a computer, switch between subscription groups or check connection logs. Its desktop workflow brings the server list, system proxy and routing tools together, making it easier to inspect settings and connection results side by side. Builds are available for Windows, macOS and Linux, but that doesn't mean every menu and component is identical across platforms.
Subscription groups and routing tools for centralized management
Groups become especially useful when you have several configuration sources. Grouping them by source makes it easier to spot which one failed to update. When adjusting routing, you can also check whether the active configuration matches the selected rule set. The desktop interface makes it easier to review domain policies, rule order and outbound settings. More rules don't necessarily mean better results, so start with a simple set you can understand.
The Windows download section offers a desktop edition and a classic WPF edition. The desktop edition uses a newer cross-platform interface, while the WPF edition retains the classic workflow. If you're new, follow the download page's guidance. If you already have established habits, check whether the settings you rely on are still where you expect them instead of choosing based only on how new the interface looks.
Evaluate system proxy and TUN separately
Apps that follow the system proxy, such as browsers, can usually start with system proxy mode. Other apps may ignore that setting, in which case TUN may be worth considering. TUN involves a virtual network interface, routing and DNS settings, and may require extra permissions or components. Turning it on isn't a universal fix for connection problems. For the first connection, confirm the configuration works in a simpler mode before routing more traffic through it.
Windows download options · macOS download options · Linux download options
v2rayNG: Everyday Android connections and per-app routing
Top Android pick
If you don't specifically need the V2Fly core on Android, start with v2rayNG. The usual workflow is to import a configuration, update subscriptions, select a server and connect—often starting from a link in your clipboard or a subscription URL. For configurations using VLESS, REALITY or similar features, check the transport, security settings and core requirements in the shared configuration, not just the protocol name.
Grant VPN permission first, then check per-app routing
Android usually asks you to grant VPN permission when you first connect. This allows the client to create a local traffic-routing tunnel; it doesn't confirm that the remote configuration is working. After Android shows the VPN as connected, open the apps you need and test them. If another app is already using the system VPN, resolve that conflict before troubleshooting protocol settings.
Per-app routing lets you choose which apps use the proxy, but it operates at a different level from domain routing. If an app doesn't connect as expected, first check whether it's included in the traffic routing scope, then see which outbound is selected by the domain or IP rules. Changing both layers at once can fix one app while leaving another broken.
Background stability also depends on system settings
A connection that drops when the screen locks isn't necessarily a protocol or core issue. Android battery optimization, background restrictions and network changes can all affect long-running connections. Check the system's battery settings for the client, then use its logs to decide whether configuration changes are needed. Keeping your existing configuration before updating is more useful for troubleshooting than repeatedly reinstalling the app.
v2flyNG: An alternative for existing V2Fly configurations
V2Fly core
The main reason to choose v2flyNG is its core, not its interface. It's worth considering if you already have a verified V2Fly configuration or need to reproduce V2Fly parsing and routing behavior on Android. If you don't have a specific need, v2rayNG is usually the more straightforward starting point, with fewer core differences to identify before troubleshooting a connection.
Related ecosystems don't mean configurations are interchangeable
V2Fly and Xray share some project history, but their features have evolved separately. Some basic settings may look similar, but that doesn't mean extended fields, security options or complete JSON configurations are interchangeable. If a configuration explicitly requires an Xray feature, changing the client name alone won't make it compatible. For more on the two cores, read the protocol and core guide.
Before choosing, check recent release notes, compatibility with your Android version and the core features included in the build. Whether the community maintenance pace suits your needs is more useful than simply ranking the three projects from newest to oldest. There's no need to migrate a V2Fly configuration that's already working just because names have changed.
Choose a client by use case
Check configuration compatibility before switching clients
Migration involves more than copying a subscription URL. Share links, subscription contents and complete core configurations are different types of data. Clients usually parse the first two to generate a core configuration; the last may contain core-specific fields. A URL that updates in your old client may not be fully understood by the new one.
- Record your current settings.Keep the configuration source, protocol and transport details, along with routing and DNS settings you've verified. Subscription URLs may contain credentials; don't include them in public screenshots or posts.
- Check the target core.See whether your configuration depends on specific features, then confirm which core the new client actually runs. Don't apply Xray-specific fields directly to a V2Fly configuration.
- Import first, then inspect the entries.Make sure parsing hasn't dropped any important fields. Entries appearing in the list only confirms the import worked; you still need to test the connection.
- Test in a basic mode first.Confirm one configuration works before restoring complex routing, per-app rules or TUN settings. This helps distinguish connection issues from traffic-routing issues.
- Test the apps you actually use.Check your browser and other required apps, including after switching networks. If something fails, use the logs to investigate instead of repeatedly switching clients.
If the new client imports only some entries, first check the subscription format and supported protocols. If all entries appear but websites won't load, check proxy mode, system permissions, routing and DNS. For terminology, see the glossary; for common usage questions, see the FAQ.
Verdict: Choose by platform first, then by core
For desktop, start with v2rayN.Subscription groups, rule management and logs are easier to handle on a computer. Choose a package for your operating system and processor architecture. For Android, start with v2rayNG.Begin with a basic import and Android VPN permission, then set up per-app routing if needed. Choose v2flyNG only for a specific V2Fly need.Use it if you already have a compatible configuration or need to verify that core's behavior.
The client determines how you manage settings; the core determines which configurations it can handle; network conditions and the server both affect connection quality. None of these factors replaces the others. Once you've chosen a platform, visit the client downloads page for the right package and follow the guide to import your configuration. That's more effective than repeatedly switching between clients.