Client guide / Platforms and cores
V2Ray Client Comparison
Choose for Desktop or Android
Start with your operating system, then check the protocols and core your nodes require. For desktop, start with v2rayN; for Android, start with v2rayNG. Consider v2flyNG if you already have a V2Fly configuration.
Compare platforms, cores, and features
Know the difference between a client and its core. The client handles subscriptions, settings, connection controls, and logs; the core processes protocols and routes traffic. Two clients may import the same subscription URL without supporting every node configuration it contains. First check platform compatibility, then verify the required protocols, transports, and security settings. Finally, compare how each client works.
This table summarizes common GUI workflows; features may vary by release. Core packaging, menu labels, and permission requirements can change with updates. If something differs, check the installed package, current settings, and logs.
| Feature | v2rayN | v2rayNG | v2flyNG |
|---|---|---|---|
| Platforms | Windows、macOS、Linux | Android | Android |
| Core | Usually Xray; other core options depend on the current release and settings | Xray | v2fly |
| Maintenance | Actively maintained; check for UI and configuration changes before upgrading | Actively maintained; client and core capabilities evolve with releases | Alternative client; check current release notes for its maintenance cadence |
| Getting started | Basic connections are straightforward; routing and TUN require some additional setup | A good starting point for importing subscriptions on Android; requires VPN permission and may need background restrictions adjusted | Basic workflows are similar to other Android clients; check core compatibility before choosing |
| Subscription management | Subscription groups, updates, filtering, and automatic update settings | Manage and update subscription groups; easily switch configurations on mobile | Import and update subscriptions; available management options depend on the current UI |
| Routing rule UI | Edit desktop rules and manage rule sets; inspect rule order and outbound tags | Routing settings and per-app proxy controls to choose which traffic is handled | Routing settings; available rules depend on the v2fly core |
| TUN and traffic handling | TUN configuration available; permissions, virtual adapters, and system routes depend on the platform | Routes traffic through Android’s VPN service; desktop TUN setup steps do not apply | Routes traffic through Android’s VPN service and requires system permission |
| Best for | Desktop users who manage subscriptions centrally and edit routing rules | Everyday Android use and features that require the Xray core | Users with configurations specifically built for V2Fly who are comfortable checking compatibility |
Don’t treat the number of features as a ranking of connection quality. Real-world performance depends on the exit node, node service status, local network, DNS, and routing rules. This comparison helps you choose a client that supports your setup and workflow; it can’t replace testing the actual connection to your current nodes.
Choose v2rayN for desktop subscriptions and routing
For a desktop GUI on Windows, macOS, or Linux, start with v2rayN. Its desktop layout makes it easy to view server lists, subscription groups, logs, and connection status at once. It works well for managing multiple subscription sources and investigating why a rule didn’t match as expected. The benefit is configuration visibility and room to manage—not a guarantee of faster connections on any particular platform.
Organize subscription sources into groups
Create a subscription group for each source, enter a label and the full subscription URL, then update it. Keep manually added servers separate from subscription-generated ones so changes after an update are easier to understand. Automatic update intervals control how often updates run; they don’t automatically replace a node that stops working. Before enabling filters, make sure your regular expressions won’t exclude entries you need.
Select a server, test its real connection latency, then set up the system proxy. Only apps that honor the system proxy setting will use it. If a browser works but other apps still connect directly, check each app’s proxy behavior before assuming the subscription import failed. To route more traffic, see the TUN mode setup guide.
Separate the interface from core capabilities
The Windows download section offers the Desktop and classic WPF editions. Desktop uses a newer cross-platform interface, while WPF retains the classic desktop workflow. These are interface choices, not separate sets of protocol capabilities. After choosing an edition, check the core settings. For VLESS, XTLS Vision, or REALITY, confirm that the core actually in use supports the required combination.
For macOS, choose between Apple Silicon and Intel. For Linux, check the processor architecture and package format. TUN also requires the right permissions, a virtual adapter, and system routes; seeing a toggle in the menu doesn’t mean the platform is ready. Get a regular connection working first, then enable advanced features one at a time. If something goes wrong, the logs will make it easier to spot what changed.
Choose a v2rayN desktop download →Choose v2rayNG for Android and Xray configurations
For your first Android setup, start with v2rayNG. It uses the Xray core and is well suited to importing common subscriptions and selecting a server on your phone. If a node’s instructions require an Xray-specific feature, check the exact settings and core support rather than relying on the node name. VLESS is a protocol; REALITY and flow are configuration details that also need verification.
Follow the mobile connection steps
Add the subscription URL and update it. Confirm the expected configurations appear, select a server, and start the connection. The first time you connect, grant Android VPN permission. This authorizes traffic routing through the VPN service; it doesn’t confirm that the node is reachable. Test actual access and check the logs and exit IP to verify the connection.
Per-app proxy settings and domain routing control different things. Per-app settings determine which apps enter the traffic handling scope; routing rules determine which outbound handles requests that do. If an app can’t connect, first check whether it’s excluded, then inspect routing rules and DNS. Change only one of the app list, routing rules, or node settings at a time to pinpoint the cause.
Troubleshoot Android background limits and VPN conflicts
If the connection drops when the screen locks, check battery optimization, background activity restrictions, and notification settings. Menus vary by device manufacturer, so steps for another phone may not apply. Other apps using Android’s VPN service can also interfere. When testing, use only the traffic handling setup you need to avoid competing for the system VPN connection.
When downloading, check the processor architecture and Android compatibility requirements first. Most newer phones use arm64. The universal build supports multiple architectures; it isn’t necessarily faster or more power-efficient. For import steps, see the Android setup guide. For connection checks, see how to test real connection latency.
Browse v2rayNG downloads →Choose v2flyNG for existing V2Fly configurations
v2flyNG is an Android alternative built on the v2fly core. Choose it to match a configuration to its core branch—not because it’s a lightweight version of v2rayNG or made for older phones. V2Fly and Xray have evolved in different directions within the Project V ecosystem. Similar-looking interfaces don’t mean their underlying features are interchangeable.
Check what your existing configuration requires
Consider v2flyNG when your existing configuration is specifically for V2Fly and its protocols, transports, and parameters are confirmed compatible. If a node relies on Xray features such as XTLS Vision or REALITY, don’t assume it will connect just because the subscription can be read. Successful import only confirms that parsing worked; core startup and actual requests need to be tested separately.
Before switching, keep the original subscription URL, current node settings, and any routing notes. Import one known-compatible configuration first, check the logs, and then decide whether to move the whole subscription. Don’t overwrite the new client’s full runtime configuration with one generated by another client: local ports, inbound structure, outbound tags, and configuration generation can differ.
Check maintenance and platform compatibility separately
If you’re considering v2flyNG as an alternative, check its current release notes, Android compatibility, and core feature support separately. Don’t assume it has the same updates as another client. Without a specific need for V2Fly configurations, Android users will usually find v2rayNG the more direct starting point. If problems arise, check the logs before switching cores.
Browse alternative Android clients →Choose by experience and device
Check configuration boundaries before switching clients
Before changing clients, identify the problem you’re trying to solve. A failed subscription update, a core that won’t start, a browser that can’t connect, and an app that bypasses the proxy are different failure points. Switching clients may change the symptoms without fixing the subscription URL, certificate settings, or routing rules. Record the following details in order to make a useful comparison after the switch.
- Record the subscription source. Keep the full URL and group label, and check that the URL hasn’t expired. If an update fails, distinguish between direct updates and updates through a proxy. An empty list doesn’t necessarily mean the client lacks support for the protocol.
- Check node settings. Verify the protocol, transport, security settings, SNI, and other required fields. For core-specific features, confirm support instead of checking only the server address and port.
- Reconfigure local traffic handling. Set up the system proxy and TUN separately on desktop; Android VPN service settings are separate too. After closing the old client, check whether the system still points to its local proxy address, or requests may go to a port that’s no longer listening.
- Restore rules one at a time. Confirm the basic connection first, then restore custom routing and app lists. Change one type of setting at a time, check the logs to see whether the rule matched, and then move on.
- Verify actual requests. Check proxy behavior with a real connection latency test and exit IP lookup. TCPing can help check port-level reachability, but it doesn’t verify a proxied request.
If neither the old nor new client can connect to the same server, check node status, your device’s clock, network conditions, and configuration rather than reinstalling repeatedly. If only one client fails, compare the active core, generated configuration, and error logs. See the subscription groups and import guide for setup, and the system proxy guide for traffic handling.
Recommendations and downloads
For desktop, start with v2rayN. Choose a package for Windows, macOS, or Linux, then check its architecture and format. Start here to manage subscription groups visually, inspect routing rules, and configure the system proxy or TUN.
For Android, start with v2rayNG. Choose a compatible package for your device, import a subscription, and grant VPN permission. Consider v2flyNG as an alternative only if your existing configuration specifically requires V2Fly and you’ve confirmed compatibility. There’s no universal ranking independent of your device, core, and node requirements.
Next, choose a package for your platform in the Download Center. After installation, follow the subscription import and connection guide. You don’t need to configure every advanced feature before your first connection.