Choose your operating system, then your CPU architecture. Use v2rayN on desktop; v2rayNG is the recommended choice for Android, with v2flyNG as an alternative for core compatibility.
All three clients are free and open source. After installing, import a valid subscription or server configuration.
Windows installer
One client, two interfaces. Both options below are x64 packages.
v2rayN
Recommended7.24.1
Desktop is the modern cross-platform UI, suited to first-time installs and use across desktop operating systems. WPF is the classic, stable version for users who want to keep their existing workflow. Choose one interface, then import your configuration; you don't need to run both at once.
The download is a ZIP archive. Extract it completely, then run the installer inside. Don't launch it from the archive preview.
System and installation requirements
What to check
Requirements
Where to check
Operating system
Use a version of Windows that still receives security updates. Check the installer for the current minimum version requirement.
Settings → System → About
CPU architecture
This page provides an x64 package. Check your system type and app compatibility before installing.
System Information → System type
Runtime
If you're prompted that a runtime is missing, install the required runtime for this package and try again.
Installer and app startup prompts
Install the app in a location where you have read and write access. Don't keep its configuration in a temporary downloads folder. On first launch, confirm the main window opens before importing a subscription. System proxy settings affect apps that read them, but they don't automatically route every program. To route other apps, configure TUN mode separately after reviewing its permissions and routing implications.
Before switching from WPF to Desktop, export your settings in the client and note your local listening ports, subscription groups, and routing rules. Don't overwrite the existing directory with a different branch. Exit the old client before launching the new one to avoid port conflicts and prevent both processes from changing system proxy settings.
macOS disk images
Check the chip in About This Mac; don't infer it from the computer's appearance or purchase date.
v2rayN
Recommended7.24.1
Choose Apple Silicon for an Apple M-series chip, or the Intel package if About This Mac lists an Intel processor. Matching the package to your Mac's architecture can avoid startup and runtime differences caused by compatibility layers.
Open the DMG and copy the app to Applications, then launch it from there. Once the copy is complete, you can eject the disk image.
System and installation requirements
What to check
Requirements
Where to check
macOS version
Use a macOS version that still receives security updates. Check the app's prompt for the minimum compatible version.
Apple menu → About This Mac
Chip architecture
Apple M series uses arm64; Intel uses x64.
About This Mac → Chip or Processor
Network permissions
When changing proxy settings or enabling traffic routing, review the permissions requested by the system.
System Settings → Network
If a security prompt appears on first launch, check the file's source, selected architecture, and the exact message. Then look in Privacy & Security for an option to allow the app to open. Don't disable system-wide security just to launch one app. If macOS explicitly says the file is damaged or incompatible, download the package for the correct architecture instead of repeatedly changing permissions.
After configuring the system proxy, check the current network service's proxy settings to confirm the address and port match the client. If your browser can't connect after switching networks, waking from sleep, or quitting the client, check for a stale local proxy first. Quit from the client menu, and exit the old process before replacing app files during an update.
Android packages
Check the architecture first, then core compatibility. Most mainstream phones released since 2015 should use arm64.
v2rayNG
Recommended · Xray core2.2.6
The recommended GUI client for Android. Manage subscriptions, choose nodes, and connect in one app. For configurations using VLESS or REALITY, check that the server settings are supported by the current core.
The app's displayed version and the package filename may temporarily differ. Check the selected file and the running version shown under About after installation.
v2flyNG
Alternative · V2Fly core1.10.31
A good fit when an existing configuration depends on V2Fly behavior. This isn't a v2rayNG theme: the clients use different cores and support different configuration options. Before importing, check the protocol, transport, and security fields. Don't copy every advanced setting from one client to the other without checking compatibility.
The minimum Android version depends on the selected APK. Follow the installer prompt.
Settings → About phone → Android version
Device architecture
Most mainstream phones released since 2015 use arm64. For older devices or when unsure, choose the universal build.
Device information or processor specifications from the manufacturer
Required permissions
Allow app installs from the current source. When connecting, approve the system VPN request.
App installer and system VPN prompt
A phone's age is only a rough guide. Some devices have 64-bit processors but run apps in a different environment. Check your device information and the installation result. If you see “App not installed,” first check available storage, whether the file finished downloading, and whether an installed app with the same name has a conflicting signature. Not every installation error is caused by the processor architecture.
On your first connection, Android asks for VPN authorization. This creates a local entry point for routing traffic; it doesn't mean the server connected successfully. For testing, run only one app that needs the system VPN connection. If the connection drops in the background, check your device manufacturer's battery settings for background restrictions rather than granting every permission up front.
Linux packages
Choose deb or rpm to match your distribution's package manager, then check whether you need x64 or arm64.
v2rayN
Recommended7.24.1
The Linux desktop version includes a graphical configuration interface. Debian- and Ubuntu-based systems generally use deb packages; Fedora- and RHEL-based systems generally use rpm. Matching the package format is only the first step: different distributions using the same format may still require different library versions.
amd64 and x86_64 correspond to x64 here; aarch64 corresponds to arm64. If the filename specifies a distribution, also check that your system meets its dependencies.
System and installation requirements
What to check
Requirements
Where to check
Desktop environment
Requires a desktop session that can run graphical apps.
System Settings → About
Package format and architecture
Match deb / rpm to your distribution and x64 / arm64 to your processor.
System information and graphical package manager
Dependencies and permissions
Use the package manager to check dependencies. Grant additional permissions for traffic routing only when needed.
Software installer and client settings
After opening the package, use your distribution's graphical installer to review dependencies and the installation result. If a required dependency version is unavailable, don't force the installation; first check which distribution and version the package targets. If installation succeeds but the app won't launch, note the library names and versions in the error, then use the troubleshooting guide. Reinstalling usually won't fix unmet dependencies.
System proxy settings on Linux depend on your desktop environment, and apps may handle proxy settings differently. If your browser works but another app doesn't, check that app's network settings first. Don't run the entire graphical client with elevated privileges just to use a regular proxy. Configure permissions for TUN and other features separately, as described in the client documentation.
What to check after installation
Downloading the files and establishing a proxy connection are separate steps. First make sure the client starts, then verify your configuration and traffic route.
Install → Import configuration → Select a node → Test the proxy
Startup and permissions
First, confirm the app opens normally. Grant system proxy, VPN, or traffic-routing permissions only when you enable those features; a successful installation doesn't require granting every permission in advance.
Subscriptions and nodes
Import a valid subscription URL or server configuration, then check that the client recognizes its protocol and transport fields. The client itself doesn't provide accounts, subscriptions, or servers.
Connection and testing
Select a node and test the connection before enabling your preferred proxy mode. Test access in a browser and check the logs to see whether the failure occurred during DNS resolution, the handshake, or routing.
System proxyRouting rulesDNS
Updates and configuration migration
Keep a restorable configuration backup before updating, then test a small part of your setup afterward.
Before exporting, check that your backup includes subscription groups, custom routing rules, local ports, and app preferences. Some settings may be stored in separate files, so copying only the main program may not be enough. Backups may contain subscription URLs and server identity details. Keep them somewhere you control; don't post them in public forums or attach full configuration screenshots to routine bug reports.
Quit the running client before installing a new version. On desktop, check the system tray or menu bar to confirm the background process has exited. On Android, keep the existing app data when installing over the current version. Updates from a different source may be blocked by signing restrictions, and migrating between interfaces or cores may expose configuration differences. If there's a conflict, save the original configuration before deciding whether to reinstall. Don't clear data as a first step.
After updating, check the running version on the About page and test the connection with a known-good configuration. Confirm the system proxy address, listening port, and routing rules haven't changed unexpectedly before restoring automatic subscription updates. If the issue started with the new version, note your system, architecture, package name, and error message, then follow the troubleshooting steps.
Download and installation FAQs
First determine whether the issue is the wrong package, a system installation restriction, or a connection configuration problem.
Which should you choose: the Windows Desktop or WPF version?
For your first install, start with Desktop, which uses a modern cross-platform interface. Choose the classic, stable WPF version if you prefer its familiar interface or already use a WPF-based workflow. The two versions differ in interface, not in servers or network routes. Export your configuration before migrating, and avoid mixing program directories.
How do you know whether to download arm64 or x64?
On Windows, check System type in System Information. On a Mac, check the chip in About This Mac: choose Apple Silicon for an Apple M-series chip, or Intel for an Intel processor. On Linux, check the hardware architecture in your system's About page. On Android, check your device's processor. Most mainstream phones released since 2015 should use arm64; if unsure, choose the universal build.
Android says the app can't be installed. Should you uninstall the old version first?
First check available storage, permission to install apps, and the package architecture. If an app with the same name is already installed, the signing source may differ or the package you're installing may be older. Don't uninstall it right away: export your configuration and make sure the backup works, then follow the specific error message. Packages from different sources may not install over one another.
Why can't you connect after installing the client?
The client manages configurations and forwards traffic; it doesn't include server access. Import a valid subscription or server configuration, select a node, and start the connection. Then check that system proxy settings or VPN authorization are active. If it still fails, check node availability first, followed by routing and DNS.
Will updating the client keep your subscriptions and routing settings?
A standard in-place update usually preserves app data, but don't assume configurations are fully compatible when switching interface branches, installation sources, or major versions. Export your configuration before updating, and note your subscription groups, routing rules, and local ports. After updating, test a node before restoring automatic updates and custom routing.
What if the version shown doesn't match the installer filename?
The version shown may come from app-level update information, while each installer has its own filename; they may not match temporarily. Before downloading, check the selected platform, architecture, and actual filename. After installation, check the running version on the client's About page. Don't change numbers in a download URL to guess the name of another installer.