Windows
v2rayN · Desktop pickChoose between Desktop and classic WPF builds. Desktop uses a newer cross-platform interface, while WPF retains the classic desktop workflow. Pick the one that fits your preferences and environment.
Go to downloads →Start by checking your operating system and processor architecture. Use v2rayN on desktop; on Android, choose between v2rayNG and v2flyNG based on your core requirements.
Choose between Desktop and classic WPF builds. Desktop uses a newer cross-platform interface, while WPF retains the classic desktop workflow. Pick the one that fits your preferences and environment.
Go to downloads →Choose the matching build for Apple Silicon or Intel. Check your chip in About This Mac. The first time you open the app, follow system prompts for app approval and network permissions.
Go to downloads →v2rayNG uses the Xray core; v2flyNG is an alternative based on V2Fly. Most current devices use arm64. If you’re unsure about your device’s architecture, check system information or choose a universal build.
Go to downloads →For Debian- and Ubuntu-based distributions, look for a deb package; for Fedora and similar distributions, look for rpm. Also check whether you need x64 or arm64, and confirm desktop session and system tray support.
Go to downloads →The client, core, and subscription are three separate components. Installing a client gives you an interface and local proxy capabilities; it does not provide a working server. Before you begin, have a subscription URL or server configuration you’re authorized to use, and confirm the server’s protocol, transport, and security settings. A server name or location label alone is not enough to connect.
A single subscription can include multiple protocols, but whether a client can import it depends on the subscription format and core compatibility. Don’t rely on the file extension alone: share links, aggregated subscriptions, and complete JSON configurations use different import options. For your first setup, import a subscription from a known source, choose one profile, and check that the local proxy starts. This keeps the number of unknowns manageable.
After installation, use the default network settings to make an initial connection. On desktop, check that the system proxy is handling browser traffic; on Android, confirm VPN permission has been granted. Consider TUN mode or per-app proxying only when you need to handle games, command-line tools, or specific apps. Establish a repeatable basic connection before changing routing rules to make troubleshooting easier.
Before upgrading a device with an existing setup, keep your subscription groups, routing rules, and custom DNS settings. Don’t overwrite one client’s entire data directory with another’s: interface settings, core configuration, and rule files each have their own structure. To migrate, reimport your subscription first, then move over only the custom settings you actually use.
Learn what the settings in the client actually do. Start with the configuration source, then decide how traffic enters the proxy, which outbound handles it, and where domain names are resolved.
Subscription groups make it easier to keep servers from different sources separate. In v2rayN, add a note and subscription URL under Subscription Groups, save, update the relevant group, then select a profile from the server list. v2rayNG also supports managing sources through subscription groups. Unlike pasting share links one at a time, subscriptions can sync addresses and parameters in one place, but an update may replace existing entries. Keep manual configurations you need long term in a separate list. Test filter expressions on a small set first so you don’t hide servers you need.
Routing rules decide whether traffic goes direct, through a proxy, or gets blocked; they don’t determine whether an app sends traffic to the client. In v2rayN, check the system proxy and routing mode separately. “Bypass mainland China” doesn’t mean every app will follow the system proxy. Rules are usually evaluated in order, so place clear exceptions such as local network addresses appropriately before handling domain and IP lists. The snippet below uses Xray-style rules and must go in the right configuration structure; a direct outbound must also exist. One rule alone cannot replace a complete configuration.
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
}
TUN mode can route traffic from apps that ignore the system proxy by using a virtual network interface. It is not the same as “global routing”: TUN controls how traffic enters, while routing determines where it goes next. Before enabling TUN on desktop, check permissions, required components, and OS support. Avoid running other tools that also take over network traffic. Android usually uses the system VPN interface, so don’t apply desktop TUN instructions directly. If local network access stops working, check private address exclusions and DNS rather than repeatedly switching servers.
DNS resolves domain names to IP addresses, and the resolution path must work with your routing targets. If a page won’t load, check the logs for DNS timeouts, then see whether the server can establish a connection. Don’t paste a public DNS address into every DNS field: local, remote, and bootstrap DNS serve different purposes. The snippet below shows the minimum structure for core DNS, not a complete routing setup. Interpret v2rayNG’s “Enable local DNS” in the context of your configuration. If you use FakeDNS, make sure both the traffic entry and routing setup support it.
{
"dns": {
"servers": ["localhost"]
}
}
Xray and V2Fly are related but independently developed core projects, and their protocol details and configuration fields don’t fully match. In v2rayN, check the current build and settings for available core options; don’t assume any configuration can be switched between cores as-is. On Android, compare v2rayNG and v2flyNG for their different core lineages. Back up your configuration before switching, check compatibility for transport, security settings, and rule resources, then test with the same server profile. A core’s ability to import a link doesn’t mean it supports every optional parameter in that link.
If the client says it’s running but apps still can’t connect, first check whether their traffic is reaching the local proxy. Browsers, command-line tools, and background services may use different proxy settings. If a browser works, that only confirms that browser’s current connection path. Next, check the selected server profile, matched routing rules, and connection logs; then investigate DNS. Checking these three stages separately is more effective than changing the port, DNS, and routing all at once.
Latency tests also depend on what’s being tested. A successful address probe doesn’t guarantee that a website will work. A real connection test more closely reflects the proxy path, but results still depend on the test target, network load, and timing. Evaluate servers against your actual needs rather than relying on a single test. For definitions, see the glossary; to edit rules, follow the advanced configuration guide step by step.
The client provides the controls; the core handles connections. Understanding the difference helps you assess configuration migrations, protocol compatibility, and what to check after an update.
Technical background on the V2Ray project
Independently developed core projects
Graphical clients for end users
Project V is a useful starting point for understanding the V2Ray ecosystem. V2Ray organizes protocol handling, transport, and routing in a configurable proxy core. Graphical clients turn common tasks into server lists, subscription groups, and settings screens. What people call “installing V2Ray” often means installing a client and its companion components, not editing the entire core configuration by hand.
As a result, options with the same name in different interfaces don’t necessarily work the same way internally. A client may combine several low-level parameters into one toggle or expose only some settings. When troubleshooting, note the client name, core, and operating mode, then consult the relevant documentation. Confusing the client with the core can lead you to mistake an interface issue for a protocol problem.
The V2Fly community continues to maintain V2Ray-related implementations. Xray emerged from a related technical lineage and later developed independently. The projects share some concepts, but protocol support, transport extensions, and configuration requirements change as each evolves. For configurations involving VLESS, VMess, Trojan, or REALITY, check core capabilities and server settings individually rather than assuming support based on a label in the client.
A share link usually contains the information needed for a single server connection. A complete JSON configuration may also include inbounds, outbounds, routing, and DNS, so the two aren’t interchangeable. When moving a full configuration to another core, check field meanings, outbound tags, and rule resources. When importing a link into another client, confirm that optional parameters haven’t been dropped.
v2rayN, v2rayNG, and v2flyNG are released as open-source software, and the client projects use the GPL-3.0 license. Cores and bundled components have their own licenses, which should be reviewed separately when redistributing or modifying them. Open source means the code can be read, studied, and modified under the license terms; it doesn’t mean every release has been independently audited, nor does it remove the need to assess subscription sources and server operators.
For desktop, start with v2rayN: server management, subscription groups, and routing settings fit into a desktop workflow. On Android, start with v2rayNG. Consider v2flyNG if you have a specific need for V2Fly compatibility. These recommendations are based on platform and configuration needs, not made-up performance rankings. For details, see the client selection guide.
A client update may change the interface, how configurations are generated, or the bundled core. Before updating, record a working server profile, system proxy status, and custom rules, and keep a configuration backup. After updating, test the basic connection in the same network environment, then check subscription updates, DNS, and TUN. Avoid rewriting all your routing rules during an upgrade, or it will be hard to tell what caused a change.
Check project release notes and the actual build for maintenance status and specific compatibility details. The homepage focuses on stable selection guidance; download information is on the downloads page. If a setting has moved after an update, confirm your client version and platform, then consult the relevant tutorial instead of hunting for it by following an old screenshot.
Subscription URLs may contain access credentials and should be treated as sensitive information. Don’t share complete subscription URLs, user IDs, or server authentication details in screenshots, logs, or support requests. When describing an issue, you can include the protocol, field names, and error message while removing anything that identifies your account. Server list exports may contain the same sensitive information.
A client provides local connection and management tools; service quality also depends on your network and server. Switching apps won’t fix an expired subscription or change server-side restrictions. Check that your configuration comes from a valid source and that your account is active before troubleshooting local settings. This can save you from unnecessary reinstalls and repeated imports.
Find guidance on installation, subscription formats, and server selection. Before following the steps, confirm your client and platform, and don’t mix configuration snippets from different cores.
Install v2rayN with deb or rpm packages on Ubuntu, Debian, Fedora, and other distributions. Resolve dependency and system tray issues, then configure a desktop autostart entry to launch it after login.
Read the desktop setup guide →Learn how Base64 subscriptions, full JSON configurations, and vmess:// / vless:// share links are structured, and how to import, export, and convert them in v2rayN and v2rayNG.
Read the subscription format guide →When a subscription has many servers, start with real connection latency, then weigh traffic multipliers, locations, and VLESS/VMess/Trojan protocol differences. Find suitable options for everyday browsing, video, and remote work.
Read the server selection guide →