Client setup and configuration guides

V2Ray Mirror Client Downloads

Choose an open-source client for your platform. Find configuration guides for subscriptions and routing, plus core selection advice.

  • Free Forever
  • Xray · V2Fly
  • Subscriptions & Routing

Download Clients

Choose a Client for Your Platform

Use v2rayN on desktop and start with v2rayNG on Android. Check your operating system and processor architecture, then choose the matching package on the download page. The client reads your configuration; connecting also requires valid server details.

Windows

v2rayN · Desktop / Classic WPF

The desktop edition uses a cross-platform interface, while the classic WPF edition retains a familiar layout. Choose based on interface preference and check the system requirements before installing. You do not need both editions to use the same subscription.

Go to downloads Windows client

macOS

v2rayN · Apple Silicon / Intel

Check your chip under About This Mac, then choose the package for the matching architecture. Follow the system prompts to authorize the app on first launch. If the system proxy is enabled but your browser is unaffected, check whether it uses separate proxy settings.

Go to downloads macOS client

Android

v2rayNG · v2flyNG Alternative

v2rayNG uses the Xray core, while v2flyNG offers the V2Fly core. arm64 is suitable for most devices; if you are unsure of your architecture, check the universal package details. Approve the system VPN permission before connecting, and check whether another VPN app is already in use.

Go to downloads Android client

Linux

v2rayN · deb / rpm

Choose deb or rpm to match your distribution's package manager, then select x64 or arm64. A graphical client is useful for managing subscriptions interactively; command-line tools and background services may not use the desktop system proxy, so check each app's proxy settings separately.

Go to downloads Linux client

When moving to another device, keep your subscription groups and any custom rules you need. System proxy settings, permissions, and local listening ports are device-specific; copying a server list alone will not migrate them.

View all clients →

Protocols & Cores

Configuration Options & Protocol Support

VMessVLESSTrojanShadowsocks
REALITYXrayV2Fly

A protocol defines how a connection works; transport and security layers determine how it is carried. REALITY is a security option, while Xray and V2Fly are cores. These are different layers, not interchangeable choices.

Save groups and update by source

A subscription URL retrieves server configurations; it is not the same as a link for sharing a single node. Save the URL in a v2rayN subscription group, update the subscription, then select a server from the list. Keeping sources in separate groups makes it easier to identify which update failed. Subscriptions are easier to maintain than individual entries when providers change their configurations, but an update may replace existing entries. Keep any important details before making manual edits. Subscription URLs often contain access credentials, so redact them from screenshots, logs, and support requests.

Subscription GroupsSave URLs by source
UpdateUpdate Subscription

The interface illustration shows where to find settings; menus vary by client. A successful import does not mean every protocol parameter was recognized correctly. If fields are missing, compare the original configuration with the core's supported options instead of repeatedly changing routing modes.

Read the protocol and core guide →

First-Time Setup

Import, connect & verify

After installation, start with a known-good configuration and establish a basic connection. Change one thing at a time, note the result, then add custom routing or per-app settings.

v2rayN on desktop and v2rayNG on Android have different interfaces, but both involve three separate states: whether the configuration was added, whether the core or VPN service started, and whether the target app's traffic actually uses it. Seeing entries in the list only confirms that import produced a result.

Read the full guide
  1. Import a subscription or share link

    Add a subscription URL to a subscription group and update it; import a single share link from the clipboard. In v2rayNG, you can also import a configuration from the add button in the top-right corner. Identify what the link is for before choosing an action—a webpage URL or expired subscription cannot be used as a server node.

    If the list is still empty after an update, check the logs for address resolution, connection, or format errors. Do not share the full subscription URL or assume that one failed fetch means the client installation is broken.

  2. Select a server and connection method

    Select a server from the list, then enable the system proxy on desktop or approve VPN access on Android. Keep the default or existing routing preset for now and limit custom rules; making several changes at once makes it harder to find the cause of a problem.

    A real connection latency test can help determine whether a configuration can establish a test request. Results depend on the destination and route; they are not a bandwidth measurement and do not predict how every app will perform.

  3. Check traffic from the target app

    Open the app that needs the proxy and make a real request, then check the client logs, system proxy status, and in-app settings. If the test succeeds but the browser does not, first check browser extensions, separate proxy settings, and whether they point to the correct local port.

    Once connected, restore routing rules one at a time. When ending a desktop proxy session, make sure the system proxy is cleared or restored. On Android, disconnect the VPN service in the client and check the connection status in the system status bar.

Open-Source Ecosystem

Project V, Cores & Clients

The download is a graphical client; the core handles connections, and the configuration provider manages the remote service. Keeping these three layers separate helps identify whether an update, compatibility issue, or connection failure belongs to the client, core, or service.

Technical BackgroundProject V

Proxy tools and a modular configuration system

Execution LayerV2Fly / Xray

Protocol, transport, and routing implementation

Management Layerv2rayN / v2rayNG / v2flyNG

Configuration import and graphical interface

Project V and V2Ray

Project V is a starting point for understanding V2Ray's technical background. V2Ray uses a modular design that organizes features such as inbound and outbound connections, routing, and transport in a configuration system. In everyday conversation, “V2Ray” can also refer broadly to a family of clients or configurations, but downloads need to be identified by their specific software name. The same term in search results may refer to a core, a graphical interface, or simply a configuration format.

That is why this site organizes downloads by client and operating system, with protocol details in the guides. You do not need to write a full configuration by hand to get started with a graphical client, but it helps to know what connection parameters a share link contains, who provides the subscription, and which settings are local to your device. This makes it easier to describe the right part of the setup when moving devices or asking for troubleshooting help.

How V2Fly and Xray Have Evolved

V2Fly continues the community development of V2Ray, while Xray has developed its own feature path from related technical foundations. They share some protocol and configuration concepts, but that does not mean every newer feature, default field value, or behavior is the same. For security layers, transport combinations, and advanced routing, refer to the documentation for the core in use and check what the client supports.

Even with the same protocol name, a connection can fail if the transport path, server name, fingerprint, or security parameters do not match. Choose a core that meets the server's configuration requirements first, then check whether the client exposes the necessary settings. There is no need to rank cores by a single universal speed score: the route, server load, device resources, and type of request all affect performance.

What the Three Clients Offer as Open Source

v2rayN, v2rayNG, and v2flyNG are all open-source graphical clients. v2rayN is for desktop platforms and provides a server list, subscription management, and local proxy settings. v2rayNG is for Android and uses the Xray core; v2flyNG is an Android alternative with the V2Fly core. Similar names do not mean their packages are interchangeable or that their interfaces have identical options.

Open source means the code and license terms are available for review. Use, modification, and redistribution must still comply with each project's license and the licenses of its dependencies. The license for a client should be considered separately from that of its core. The client does not provide a remote service; after installation, you still need a configuration from a source you are authorized to use, and must follow local laws and network policies.

Client Updates and Configuration Compatibility

Updating the graphical interface, the core, and a subscription are three different operations. An interface update may move settings, a core update may change protocol support, and a subscription update retrieves remote configuration entries. When something goes wrong, note which operation preceded the issue and check the relevant logs. Updating a subscription will not add features the client does not support.

Before updating, save any subscription groups, custom routing rules, and local port settings you need. Afterward, test the connection with a configuration that worked before, then check the system proxy and per-app rules. This site provides download links and user guides; it is not an upstream project and does not manage subscriptions. Refer to the download page when choosing a package, and to the client itself for its current menus and compatibility.

Technical Notes

Client Guides & Troubleshooting

Find instructions for the issue you are seeing. First identify whether it occurs during configuration import, core startup, or app traffic routing, then follow the relevant troubleshooting steps.

A failed subscription update and a local port conflict occur at different layers. For the former, check the fetch URL and network access; for the latter, check logs for listener errors. Re-importing a subscription will not diagnose a port conflict.

View all articles →