For desktop, choose v2rayN; for Android, start with v2rayNG. Check your operating system and CPU before choosing an installer.
All three clients are free and open source. The installers set up the graphical client; you’ll still need a valid subscription or server details to connect. If you already have a configuration, back it up before upgrading.
Desktop uses a newer cross-platform interface. It’s a good fit for new installs and for anyone who wants a consistent experience across desktop operating systems. Classic WPF is the stable version with the familiar Windows interface, menus, and settings. These are interface variants, not tiers for server quality or connection speed.
The downloads above are ZIP archives. Once the download is complete, extract the entire archive before opening the installer; don’t run it from the archive preview. If the installer reports a missing runtime component, note its name, architecture, and required version, then follow your system’s instructions to install it. Reinstalling or changing subscriptions won’t fix an installation error.
Before switching interface variants, export your subscription and custom routing rules, then quit the old client before opening the new version. If both instances use the same local port, the second may fail to start listening. After installation, follow the guide to enable the system proxy and choose a routing mode for your needs.
Choose arm64 for Apple Silicon and x64 for Intel processors. Open About This Mac from the Apple menu. If it shows an Apple M-series chip, choose the first download; if the processor is listed as Intel, choose the second. The macOS version and chip architecture are separate: updating macOS won’t turn an Intel Mac into an arm64 device.
After downloading the DMG, open the disk image and follow its installer instructions to move the app to Applications. Launch it from there. If macOS displays a security warning on first launch, check the file’s source and the warning before taking action in System Settings. Don’t disable system-wide security just to bypass a single prompt.
When moving from another desktop operating system, start by transferring your subscription, then restore routing and DNS settings one at a time. File paths, permissions, and system proxy interfaces differ, so don’t overwrite the entire old configuration directory. Before connecting, make sure the client core is running, then enable the required system proxy option in the client. After testing, check that the proxy is properly disabled when you quit.
v2rayNG is an Android graphical client that uses the Xray core. For most phones released after 2015, arm64 is usually the right choice, but compatibility depends on the processor and the app architectures supported by the system. Some entry-level devices have 64-bit processors but only support 32-bit apps. If you’re unsure, choose the universal version. It supports more architectures but is usually a larger download.
When you open the APK, Android may ask you to allow your browser or file manager to install apps. Grant permission only for the current installation; don’t loosen permissions for other sources unnecessarily. The first time you connect, Android will ask you to authorize the VPN connection. Read the prompt and confirm to let the client route traffic through the device’s VPN interface.
After installation, import and update your subscription, select a server, and start the connection. The VPN icon in the status bar only confirms that the device’s VPN interface is active; open the app you want to use to check that traffic is actually routed. If the connection stops after a while, check battery optimization and background restrictions before deleting your configuration.
v2flyNG uses the v2fly core and can be an alternative for existing V2Fly configurations. Despite the similar names, it isn’t just a different theme for v2rayNG. Supported protocols, transports, and configuration fields may differ between cores. In particular, don’t assume configurations that use Xray-specific features will work with both.
If your subscription provider requires a specific core feature, check the protocol requirements before choosing a client. When switching apps, import the subscription again rather than copying all of the other app’s internal data. To compare the clients, disconnect the VPN in one before testing the other so that connection switching doesn’t muddy the results.
Debian- and Ubuntu-based distributions usually use deb packages; distributions with RPM package management use rpm. A matching package format doesn’t guarantee compatibility with every distribution. Your system must also meet the package’s library and dependency requirements. For RPM packages in particular, review the installer’s compatibility and dependency warnings before proceeding. Don’t force installation by ignoring dependencies.
Most Intel and AMD desktop PCs use x64, shown as amd64 or x86_64 in package names. ARM 64-bit desktops use arm64, shown as arm64 or aarch64. amd64 is an architecture name; it doesn’t mean the package only works on AMD processors. Check your system’s About or hardware information instead of guessing from the distribution name.
Open the package with your system’s graphical installer, review the dependency details, and complete the installation. These downloads are for devices with a graphical desktop; they aren’t deployment packages for routers or headless servers. After first launch, import your configuration, confirm the local listener is working, then configure the system or app proxy.
Desktop environments vary in how they support system proxies. If one app works through the proxy but another connects directly, check whether that app uses the desktop proxy settings. If you need to set a local proxy address manually, use the listening address, port, and protocol shown in the client. Don’t use the SOCKS port as an HTTP port.
Get the complete subscription URL, add a subscription group in the client, and update it. If you received a single connection share link, use the appropriate import option instead of entering it as a subscription URL. After importing, confirm that server configurations appear, then select one to connect. Subscription URLs often contain credentials; when troubleshooting, share only the error message, never the full URL.
Check startup, proxy, and routing separately
An open client window only confirms that the graphical interface is running. Next, check that the core has started and is listening locally, then confirm the system proxy or Android VPN is enabled, and finally check the routing mode. Change one setting at a time and test it right away. Changing the core, DNS, and routing together makes it difficult to identify the cause of a problem.
Keep a restorable configuration before upgrading
Before upgrading a client you already use, note its version branch, subscription groups, and custom rules, then export the configuration using the app’s built-in feature. When moving between clients, the subscription URL is often easier to transfer than the full internal configuration, but the target core must still support the protocols in use. Recheck local paths, listening ports, and permissions for the new system.
You’ll need a valid subscription URL or server connection details. The client imports configuration, lets you choose routing, and establishes the connection; the installer does not include usable servers. Confirm that your subscription is from a trusted source and that you’re authorized to use it, then import it using the guide. Don’t post your subscription URL publicly.
Which should I choose: the Windows Desktop or classic WPF version?
For a fresh install, start with the Desktop version, which uses a newer cross-platform interface. If you prefer the familiar Windows interface and menus, choose the classic WPF stable version. These are interface variants, not different connection-speed tiers. Export your configuration before switching, and avoid running both versions at once since they may compete for the same local listening port.
Should I download the Android arm64 or universal version?
For most phones released after 2015, arm64 is usually the right choice. Older devices or systems that only support 32-bit apps may not be compatible. Check your device’s processor and system architecture first. If you’re unsure or see an architecture incompatibility warning, choose the universal version. It supports more architectures but is usually a larger download.
Why does the displayed version differ from the download filename?
The version shown on each card comes from the manifest’s latest field, while the download button uses the file URL for that platform. These are separate fields and may be updated at different times. The filename is not a reliable source for a standardized version number. When installing or upgrading, check the version shown in the installer and the client’s About screen.
Will updating the client keep my subscriptions and routing settings?
An in-place update usually retains user data when you stay on the same client and version branch. Don’t assume compatibility when switching branches or cores, or changing the configuration directory. Before updating, export your configuration or back up user data, then quit the old process before installing. On first launch, check your subscription groups, routing mode, and local ports.
Can't install the download? Check these items first
Check that the download completed, the CPU architecture matches, and your system meets the package’s requirements. Fully extract Windows ZIP files before running the installer. On macOS, check the chip and security prompts; on Android, check installation permissions and any signature conflict warnings; on Linux, check the package format and dependency errors. Keep the exact system error message and use the guide to troubleshoot.