Desktop uses a modern cross-platform interface and is a good fit for first-time installs or users who want a consistent experience across operating systems. WPF keeps the classic Windows interface for users familiar with its menus and window layout. Choose based on interface preference and runtime environment, not package name or connection speed. Both editions require you to import a configuration and choose a proxy mode that suits your apps.
The download is an archive. Extract the entire folder before running the app; don’t launch it from the archive preview.
Windows requirements and setup
Check
Requirement
Before you install
Processor architecture
x64 Windows
Check System type under Settings > About. Don’t choose based on your PC’s brand alone.
Runtime
Follow the launch prompt for the package you downloaded
If prompted to install a .NET runtime, check the version and architecture shown in the message.
Program folder
A local folder you can write to and keep
Extract the full archive to a permanent folder, not a temporary one. Keep the program files and bundled files in their original relative locations.
Proxy permissions
System proxy and TUN have different permission requirements
Start with standard permissions. If you need TUN, follow the client’s prompts to grant the required permissions.
Create a dedicated folder for the install and preserve the extracted package’s file structure. If v2rayN is already installed, don’t put Desktop and WPF files in the same folder. Back up subscription groups and manually added nodes from the old client, then launch the new version from its own folder. Delete the old folder only after confirming your settings migrated correctly. Missing runtimes, occupied ports, and quarantined program files are separate issues; troubleshoot the specific error instead of repeatedly changing subscriptions.
For your first connection, start with system proxy: save your subscription URL, update the groups, select a node, enable the system proxy, and test it in a browser. Some command-line tools don’t use the system proxy and need proxy environment variables configured separately. v2rayN TUN mode can route traffic from more apps, but results still depend on routing rules, DNS settings, and system permissions. Enabling TUN doesn’t guarantee that every connection is being proxied.
Download for macOS
Open About This Mac to check your chip. Apple M series and Intel Macs use different packages.
Choose Apple Silicon if About This Mac lists an Apple M series chip; choose Intel if it lists an Intel processor. Don’t use the year you bought your Mac to identify its chip—different architectures can be sold in the same year. Use the package that matches your hardware. If macOS says the app can’t be opened, first check your system version, architecture, and security alert before looking for additional runtimes.
Open the DMG and follow the installer to move the app to Applications. Launch it from there and complete the initial setup.
macOS requirements and setup
Check
Requirement
Before you install
Chip
Apple Silicon or Intel
Check the chip or processor field in About This Mac.
Operating system version
Meet the compatibility requirements for the app package
Note your macOS version and compare it with any launch prompt.
Install location
Applications folder
Launch the app after copying it. Avoid running it from the disk image long-term.
Network settings
System proxy or a traffic-routing mode supported by the client
Check whether another proxy tool has already changed settings for the same network service.
The first launch may trigger a macOS security alert. Read it carefully and confirm you’re opening the app you just installed before granting access in System Settings. Don’t disable macOS security features just to launch an app. If the app opens but websites won’t load, troubleshoot the proxy mode, node, and DNS instead. Install permission issues occur at launch; whether a subscription node is online is a separate question.
When using the system proxy, check the network service you’re currently connected through, such as Wi-Fi or Ethernet. Proxy settings for one service may not apply after you switch networks. Before quitting the client, clear the system proxy using the client’s controls so it doesn’t point to a local port that is no longer running. Back up subscriptions and custom routes before upgrading. After replacing the app, check the local listening port and proxy status before browsing as usual.
Download for Android
v2rayNG uses the Xray core; v2flyNG is an alternative that uses the V2Fly core. Install and manage settings for each client separately.
For most phones released since 2015, arm64 is a good first choice, but compatibility depends on the device. Choose the universal package if you’re unsure of the architecture or the installer reports that the arm64 package is incompatible. Both packages are architecture-specific distributions of the same client, not feature tiers. v2rayNG is for users with Xray configurations and related protocol combinations; support depends on the version installed.
The first connection requires system VPN permission. After installation, import a configuration before connecting.
v2flyNG is for Android users who want the V2Fly core. Before choosing it, check that the protocol and transport settings in your subscription are supported by your installed version. Don’t assume every setting supported by another client will transfer as-is. The apps can keep separate configurations, but stop one VPN session before testing the other client to avoid mistaking a system-level conflict for a node issue.
Installing another client won’t sync your existing settings. Re-import your subscription and check custom settings when migrating.
Android requirements and setup
Check
Requirement
Before you install
Device architecture
arm64 or an architecture supported by the universal package
Check your device details first. If you can’t confirm the architecture, use the universal package.
Operating system compatibility
Meet the APK’s installation requirements
If Android reports an incompatible version, note your Android version and the exact error text.
Install source
Allow installs from the app you’re using to download or manage files
Follow the system prompt and grant permission only to the install source you’re using.
Connection permissions
System VPN permission
Approve the permission the first time you connect, and check for any other active VPN sessions.
Background activity
Check your device’s battery settings
If the connection drops when the screen locks, check background activity and battery restrictions.
Installing the APK and connecting to a VPN are two separate steps. Allowing an install source lets you install the app; you still need to approve VPN access when starting a connection. If an upgrade reports a signature mismatch, don’t rush to uninstall—the app’s local nodes and settings may be deleted. Back up your configuration first, then check whether the existing install source and new package can be used for a direct upgrade. If not, follow the migration steps before reinstalling.
To import a v2rayNG subscription, create a subscription group, enter and save the URL, then update the subscription. When the update succeeds, select a node, connect, and test it in a browser. If the connection drops when the screen locks, check background restrictions. If only one app has trouble, review the per-app proxy list. Client test results can help you compare nodes, but won’t necessarily reflect how every app accesses its destinations.
Download for Linux
Choose deb or rpm based on your distribution’s package system, then check whether you need x64 or arm64.
deb is commonly used by Debian, Ubuntu, and other distributions with the Debian package system; rpm is for distributions that use RPM. A matching package format doesn’t guarantee that every release of a distribution meets the package’s dependencies, so check your package manager’s messages before installing. amd64 and x86_64 identify x64 packages; arm64 and aarch64 identify a different processor architecture. These packages aren’t interchangeable.
This page offers a graphical desktop client. When choosing a package, consider your desktop environment, distribution dependencies, and processor architecture.
Linux requirements and setup
Check
Requirement
Before you install
Package format
deb or rpm
Check which package format your distribution’s software installer supports.
Processor architecture
Processor architecture
Check your system information for the architecture; don’t guess from the package extension.
Desktop environment
A desktop session that can run graphical apps
Make sure the app menu and graphical software installer are available.
Dependencies and permissions
Meet the dependencies for the package you’re installing
Resolve dependencies using your package manager. Configure permissions for traffic routing separately.
Use your distribution’s graphical software installer to open the package and review dependencies and installation results. If it reports an error, note the specific dependency and system version rather than reopening the same package repeatedly. If an app with the same name is already installed from another source, check where its settings are stored and how it was installed. Replacing program files and migrating user settings are separate tasks. Back up custom routes and subscriptions before upgrading, then test the connection after installation.
The Linux desktop proxy, a browser’s own proxy, and terminal environment variables can all take effect independently. If the client says it’s running, that only confirms its local service is active; it doesn’t mean every app uses the proxy. Test first with an app known to use the system proxy, then check other programs individually. For broader traffic routing, check the client’s supported modes, permissions, and DNS settings. Don’t enable multiple conflicting routing rules at once.
Installation prep, Configuration transfer
Before downloading: check your device and existing settings
Check your operating system, processor architecture, and the install location of any existing client. The package format determines how to install; the architecture determines whether the app can run. Confirm both before proceeding. If you already use a client, back up your subscription groups, manually added nodes, custom routes, and local port settings. Being able to update a subscription later doesn’t mean every manual setting will be restored.
For a first install, choose the download for your platform. Switching interface editions or clients requires a separate migration step. Don’t assume settings are shared between desktop program folders or between the two Android apps. Keep the original error message and system details to help distinguish installation, permission, and connection problems.
After downloading: subscriptions, proxy mode, and testing
The client manages configurations and connections; the package itself doesn’t include a subscription. Once you have a subscription URL you’re authorized to use, enter it in the group settings, save it, and update the subscription. URLs may contain credentials, so hide the full link in screenshots, support requests, and synced notes. After updating, check the protocol and node names, select a node, then enable the appropriate system proxy or VPN mode.
Use V2Ray node speed tests alongside real-world access checks. A failed test may be caused by the test target, DNS, or network conditions, so don’t delete an entire group based on one result. To learn how VLESS protocol works with other transports, see the configuration guide. Your V2Ray protocol choice must match the parameters provided by the server.
A V2Ray client manages subscriptions, node lists, routing rules, and connection controls; the core handles connections according to the configuration. Project V provides background on the ecosystem. V2Fly and Xray are related core families, not operating systems. Choose a graphical client based on your device, then check the protocol and transport requirements in your subscription. This avoids confusing a core name with a package architecture.
v2rayN is for desktop platforms and can manage supported cores and configurations. v2rayNG is for Android and uses the Xray core; v2flyNG is for Android and uses the V2Fly core. The three clients may have different interfaces and accept different configuration parameters. Check whether your subscription can be imported with the version you’re using. If a protocol isn’t recognized, first confirm the subscription format and client support before switching apps.
Open-source code can be studied and improved, but installation still depends on system compatibility and upgrade planning. You don’t need to chase every interface change. Upgrade when a feature you need, a compatibility issue, or a relevant fix gives you a clear reason. After upgrading, check that your subscription groups and routes are still there, then test real-world access so you don’t mistake new default settings for your old configuration.
Download and installation FAQ
Which should I choose for Windows: Desktop or WPF?
For a first install, try Desktop, which uses a modern cross-platform interface. WPF is the classic, stable edition for users who prefer the familiar Windows interface. Fully extract either package before use. Back up your current settings before migrating, and don’t mix the program files from the two editions in the same folder.
How do I tell whether my Mac has Apple Silicon or Intel?
Open About This Mac from the Apple menu. Choose Apple Silicon if the chip is listed as an Apple M series, or Intel if the processor is listed as Intel. In the package name, arm64 means Apple Silicon; 64 is the Intel option listed here.
What’s the difference between arm64 and the universal Android package?
For most phones released since 2015, arm64 is a good first choice, but check your device’s actual architecture. The universal package includes multiple architectures and is suited to devices with an unknown architecture or those that report the arm64 package as incompatible. Both packages are builds of the same client, not different tiers of node or protocol support.
Does the app come with a working subscription?
The package contains the client app, but it doesn’t configure a connection for you. After launch, import a subscription URL or node configuration you’re authorized to use, update the subscription, and select a node. Then configure system proxy or VPN mode. Subscription URLs may contain credentials, so don’t share the full link publicly.
What should I keep before upgrading?
Back up your subscription groups, manually added nodes, custom routing rules, and related settings. Note your current proxy mode and local ports. Exit the old app before installing or extracting the new package. On first launch, check that your groups and routes are intact before updating subscriptions. Don’t run two clients that use the same local port at the same time.
The download finished, but the app won’t start. What should I check first?
Check your operating system and processor architecture, then make sure the archive is fully extracted. On Windows, check for any runtime requirements shown at launch; on macOS, review the security alert; on Android, check install-source permissions and signature conflicts; on Linux, review package dependency messages. Keep the exact error text and troubleshoot for your platform.