Project V ecosystem · Clients and setup

V2Fly OfficialClients and setup

From subscription imports to routing rules, find open-source clients and platform-specific setup guides.

  • VMess
  • VLESS
  • Trojan
  • REALITY

Setup at a glance

Subscriptions, routing,
and proxy modes in one place

Subscription groups and filter keywords

Group multiple subscription sources before updating them. In v2rayN, add a name and URL under Subscription Group Settings, save, then update the subscription. Filter keywords help organize server names; they do not modify remote configuration. Separate work and test subscriptions to keep their sources clear, and make it easier to replace a subscription URL later. Unlike pasting individual share links, subscriptions keep server changes in sync. If the list is empty after an update, clear the filter first and check whether the URL has expired. Reinstalling the client repeatedly is unlikely to help.

See how to manage groups and filters →
Subscription group settings
NameWork
Filter keywordFilter by server name
Update after savingUpdate subscription

Choose an installer

Find a client for your platform

Check your operating system and processor architecture first, then choose an interface or core. The download page has links for each option.

Browse all clients →

Windows

Top pick: v2rayN

The desktop edition uses the cross-platform Avalonia interface, while the classic WPF edition has a different layout. If you are new to v2rayN, start with the desktop edition. If you already use WPF, compare the two interfaces before deciding whether to switch. Check both system requirements and processor architecture when choosing a package; do not rely on the client name in the filename alone.

After installation, open Subscription Group Settings, save your subscription URL, and update it. Then select a server. Enable automatic system proxy and test the connection in a browser. If the core will not start, check the logs for port conflicts and configuration errors. TUN requires additional permissions, so enable it separately after a standard proxy connection works.

macOS

v2rayN

Choose arm64 for Apple Silicon devices and x64 for Intel devices. Check the chip or processor in About This Mac from the Apple menu. Download the disk image and follow the prompts to install the app in Applications. Launch it from there rather than running it long-term from a temporary mounted volume.

If a security alert appears the first time you open the app, verify its source and use the option provided in System Settings to allow it. Do not disable system protection entirely just to launch the app. After adding a subscription, check system proxy and DNS behavior separately. If your browser cannot connect after you quit the client, check Network settings for a leftover local proxy address, then restart the client and confirm it is listening.

Android

Top pick: v2rayNG

For most setups, choose v2rayNG with the Xray core. If you need the v2fly core, see the v2flyNG alternative. arm64 works for most recent phones. If you are unsure of your device's architecture, check its specifications first. A universal package supports more architectures; it does not provide better connectivity.

Add a name and URL in Subscription settings, return to the main screen, update the subscription, select a server, and connect. The system's VPN connection prompt establishes a local traffic-capture tunnel; it does not mean the subscription is working. If the connection drops when the screen locks, check battery optimization and background permissions. For per-app routing, confirm whether each app is on the proxy list or the bypass list to avoid reversing the intended behavior.

Linux

v2rayN

Choose deb or rpm based on your distribution's package system, then select x64 or arm64. Debian- and Ubuntu-based distributions generally use deb packages; Fedora and similar distributions generally use rpm. The download page lists links by architecture. Review dependency prompts from your package manager, and do not mix packages built for different architectures.

Desktop environments handle system proxy settings differently, and command-line programs may ignore the desktop proxy. First confirm that the client is listening locally, then set the proxy address in the specific app. If you need TUN, check permissions and routing changes; do not run your entire desktop session with elevated privileges. When troubleshooting, determine whether the app is bypassing the proxy or the core's outbound connection is failing before changing settings at a different layer.

Cores and the open-source ecosystem

Clients, cores, and protocols

Think in three layers: the interface manages configuration, the core runs it, and the protocol defines how the two endpoints communicate.

Project VV2FlyXray

Project V and V2Fly

Project V is an open-source ecosystem of network proxy tools, including V2Ray, one of its core software projects. The V2Fly community continues development and documentation for V2Ray-related cores. In everyday conversation, “V2Ray” is also used loosely to refer to related clients, but v2rayN installed on a desktop is not itself a core. Knowing the difference makes it easier to understand what a guide means by “updating the client” versus “switching the core.”

Graphical clients typically manage subscriptions, server lists, routing templates, and system settings, then pass the resulting configuration to a core to run. A field shown in the interface does not by itself prove that the current core supports it. Check the selected core, server requirements, and configuration generated by the client. Recording all three is usually more useful during troubleshooting than replacing the whole setup.

Xray and V2Fly do not support exactly the same features

Xray is a separate core project that grew from related code. The two projects share some concepts but have evolved independently. Understand VMess, VLESS, transport, and security layers separately. REALITY is a security-related technology, not simply another standalone server protocol alongside all proxy protocols. Whether a configuration works depends on the specific combination, not just whether the client recognizes the share link.

For configurations involving XTLS or REALITY, check the requirements for the corresponding Xray implementation. Different cores are not guaranteed to handle every field, default, or behavior identically. When migrating, keep a working copy of your configuration, then test a connection known to be supported and check the logs for unknown fields, transport mismatches, or handshake errors. The configuration window shown here illustrates inbound and routing fields; it is not a complete, runnable configuration.

What the three open-source clients include

v2rayN is a desktop client with graphical server, subscription, and routing management. v2rayNG is for Android and is commonly distributed with the Xray core. v2flyNG offers an Android option based on the v2fly core. All three are open-source clients, but similar names do not mean their interfaces, core capabilities, or platform permissions are identical.

Open source means the code can be viewed, used, and redistributed under each project's license terms; it does not mean every component uses the same license. Treat the graphical interface, core, and routing data as separate components. A client is not a subscription service: installing software does not provide working servers. The provider determines a subscription's validity period, contents, and terms of use. Choose a client by first checking which protocols your configuration requires, then considering your platform and preferred workflow.

Updating the client, core, and subscription

Client updates mainly affect the interface, configuration management, and platform support. Core updates affect protocol implementation and runtime behavior. Subscription updates fetch server details from a remote source. These update different components. Reinstalling the interface usually will not fix an expired subscription, and repeatedly updating a subscription will not fix an interface problem. Identify the affected layer before choosing what to update.

Before updating, save any settings you need and note the selected core, routing mode, and local listening ports. After updating, test a basic connection before restoring custom rules and TUN. A subscription update may replace parameters from its source, so manage persistent manual settings separately from subscription groups. Subscription URLs, share links, and full configurations may contain access credentials; do not include them in public screenshots or troubleshooting reports.

Troubleshoot configuration in data-flow order

A connection can be traced through several stages: the app, inbound, routing, outbound, and remote server. If a browser does not use the system proxy, the issue is between the app and inbound. A port conflict is a local listener issue. Traffic sent to the wrong tag points to routing. A mismatch in remote parameters calls for checking outbound settings and the server. DNS can also affect name resolution and rule matching, so consider it from the start, not only at the end.

Change one variable at a time and keep logs from before and after each change. First confirm that the server configuration connects, then test routing rules, and finally configure transparent traffic capture. A website loading only proves that one request completed; it does not prove that every app, domain, or transport followed the expected route. To confirm what is happening, check client logs alongside the app's own proxy settings rather than relying on the tray icon alone.

Clarify these four points before configuring

Can I use a subscription URL and a share link interchangeably?
Not necessarily. A subscription usually returns a collection of servers; a share link describes a single connection, and a full configuration may also include routing and DNS. Check the format before choosing an import option. Subscription and node terminology →
Are global proxy and TUN the same switch?
No. Global mode generally describes where traffic goes after it enters the core; TUN describes how traffic is captured. You can still route traffic selectively with TUN enabled. Changing the global policy cannot capture traffic from an app that is not in the proxy chain. Proxy mode terminology →
Why can't I connect after a successful import?
A successful import only means the client accepted the input. Check that the configuration is complete, the core supports it, the remote server is available, and the time and network meet connection requirements. Check the logs first instead of assuming every failure is caused by the subscription format. Protocol and transport terminology →
Are direct, proxy, and block fixed protocol names in routing rules?
They are often used as outbound tags, and each tag must match an actual outbound definition. A name does not create an outbound by itself. When copying rules, check their references and the default route as well. Routing terminology →

Configuration guides

Recent technical articles

Explore guides on core compatibility, desktop editions, startup logs, and more.

View all articles →