Package selection / platform and architecture

V2Ray Downloads
v2rayN and Android clients

Choose your operating system first, then check the processor architecture. Use v2rayN on desktop; for Android, start with v2rayNG or choose v2flyNG if your configuration calls for it.

All three clients are free and open source. Installers and subscription configurations are separate; after installation, you’ll need to import your own connection details.

First installation and connection steps →

Choose an installer by operating system

Windows installer

Two interface versions; check that your system is x64 first.

v2rayN

Windows · Desktop / WPF · x64

Maintenance marker 7.24.1

Top pick

The download is a ZIP archive. Extract it fully before running the installer inside.

Desktop features a next-generation cross-platform UI, ideal for first-time installations or anyone who wants a consistent experience across desktop systems. The WPF version is the classic, stable option with a familiar Windows interface. Choose it if you’re used to its workflow.

The two versions may have different layouts and settings menus, so button locations in tutorial screenshots might not match exactly. Find subscription management, the server list, system proxy, and logs before configuring your connection. This makes differences easier to spot than importing an entire old configuration at once.

Don’t launch the app from the ZIP preview, and don’t mix files from the two interface versions in one directory. Before updating, note your local port and routing mode. If you want to try the other version, keep your existing working installation and back up its configuration first.

Installation steps after downloading

Test a basic connection before setting up routing rules, background operation, or auto-start.

  1. Make sure the installer matches your device

    The file extension, operating system, and processor architecture must all match. Save the file somewhere easy to find and wait for the browser to finish downloading before opening it. If the system says the package can’t be recognized, check that the download is complete, the file type is correct, and your system meets the requirements. Don’t rename the file to try to bypass the installer’s checks.

  2. Install the app and keep default network settings

    On desktop, follow the installer or disk image prompts. On Android, follow the system prompts to allow installation from the selected source. When you first open the app, confirm that the interface and logs load correctly before adding connection details. Leave Mux, advanced DNS, and custom routing untouched for now. Keeping variables to a minimum makes it easier to tell whether a later issue comes from the installation or the configuration.

  3. Import your own subscription or server configuration

    A client isn’t a server service, and downloading it won’t provide a working node automatically. Use a subscription link or configuration you’re authorized to access, then check the imported server name, protocol, and transport settings. Subscription URLs often contain credentials; don’t post them in comments, screenshots, or shared documents. Hide sensitive details before asking for help.

  4. Start the connection and check the target app

    Select a server, enable the proxy mode you need, then open a specific address for testing. On desktop, check the system proxy; on Android, confirm VPN permission has been granted. The client’s running status, a single latency result, and access in the target app are separate indicators. Use the logs and the target app’s behavior together; one success message doesn’t mean every app is connected.

Updates and configuration migration

Update the client and adjust rules separately so you can tell what changed.

Save the current working setup first

Before updating, note the client name, server in use, proxy mode, and local listening port, then export any configuration you want to keep. Subscription data that can be fetched again differs from manually added settings. Pay particular attention to custom servers, custom rules, per-app lists, and local DNS settings.

If you’re switching from WPF to Desktop, or from one Android client to another, don’t assume you can copy the entire configuration directory. Migrate subscriptions and settings you know are compatible first, then restore interface options one at a time. Backups may contain server credentials, so store them separately from documents you share publicly.

Run a basic check after updating

Quit the old process first, then update using the method for your platform. When you reopen the client, check that the server list, subscription groups, and proxy mode are as expected. Test with a configuration you know worked before. If something changes, save the specific error from the logs and avoid changing the server, DNS, and routing rules all at once.

The maintenance marker is app-level information, while each button points to a package entry for a specific platform. They may not sync during an update. The numbers in the Android package filenames on this page may differ from the maintenance marker. After downloading, check the installer or the client’s About page; don’t edit the version number in the link.

Common installer questions

Troubleshoot package selection, installation, first connection, and updates separately.

Which should you choose: the Windows Desktop or WPF version?

For a first installation, start with Desktop, which features a next-generation cross-platform interface. Choose the classic, stable WPF version if you prefer the familiar Windows experience. Both downloads are x64 packages. Before switching versions, back up your subscriptions, routing rules, and local listening settings. Don’t install one version over the other’s program directory.

Should I download the arm64 or universal Android version?

Most mainstream phones released after 2015 are best suited to arm64, but confirm that your system provides a 64-bit runtime. If you’re unsure of the architecture, choose the universal version. It includes resources for multiple architectures and is usually larger; that doesn’t make connections faster.

Why can’t I connect right after downloading and installing the client?

The client reads configuration and establishes connections; the installer does not include a working server. Import a subscription or server configuration you’re authorized to use, select a server, then enable the system proxy or the appropriate connection mode. Check the client logs and test access in the target app to confirm the connection.

What should I check if the installer says the package is incompatible?

Check your operating system, processor architecture, and package format, then review the installer’s specific message. This page offers x64 packages for Windows; macOS downloads are split between Apple Silicon and Intel; Linux packages vary by architecture and deb or rpm format. For Android, also check the system version and signing compatibility with any installed app.

What should I save before updating?

Keep your subscription groups, custom servers, routing rules, DNS settings, and local port settings, and note your current proxy mode. Backups and subscription URLs may contain credentials, so store them somewhere you control. After updating, test a connection you know works before restoring complex rules.

Why does the version shown differ from the number in the installer filename?

The displayed version comes from an app-level maintenance marker, while each button links to a package entry for a specific platform. They may not sync while the manifest is being updated, and filename numbers don’t always change alongside the app-level marker. After downloading, check the version shown by the installer or the client’s About page. Don’t edit the version number in the download URL.