Choose a device and core first, then configure subscriptions, routing and traffic handling. The interface shown is illustrative; labels may change between client versions.
v2rayN desktop: manage connection settings in one place
v2rayN brings subscriptions, server configurations, routing rules and runtime logs together in one desktop interface. After installation, check the local listening port, import a link from your provider, select the active configuration and start the core. System proxy works for browsers and apps that follow system settings; terminal tools can use a separately specified proxy address. The desktop client makes it easier to keep a familiar workflow across operating systems, but file paths, network permissions and TUN authorization still need to be handled for each system. Do not assume another device's runtime environment applies unchanged.
v2rayNG is an Android client that uses the Xray core. It lets you import subscriptions, scan share-link QR codes and choose a routing mode on your phone. The first time you connect, Android asks for permission to establish a VPN connection; approve it before the client can handle the selected traffic. Unlike a desktop system proxy, Android typically works through a local VPN interface. To proxy only selected apps, check the per-app proxy settings. If the connection drops, check the logs and Android's battery restrictions before reviewing the subscription, so a suspended background process is not mistaken for a server issue.
v2flyNG as an alternative: choose the core family you need
v2flyNG is an option for Android users who need the V2Fly core. Choose it based on configuration and core compatibility, not on how similar its interface looks. Before importing, check the protocol, transport and security settings. A field supported by Xray may work differently or not be supported by V2Fly. If you already have a v2rayNG configuration, keep the original subscription and test the import and connection with a small set of configurations first. Manage permissions and settings separately for the two Android clients, and run only one during testing to reduce VPN interface conflicts.
Import subscriptions to manage server configurations in one place
A subscription URL retrieves a set of server configurations; it is neither a client nor a single share link. In subscription group settings, enter the complete URL and a descriptive label, save it, then update the subscription. A successful update only confirms that the configurations were retrieved; you still need to test the connection separately. If an update fails, check whether the URL was truncated or expired and whether your current network can reach the subscription endpoint. Then decide whether to update through a proxy. Subscription links may contain access credentials, so do not include them in public screenshots, chat logs or support reports.
Subscription URLEnter the URL provided by your service
Auto-update subscriptions
Update subscription
Routing: define the order in which traffic is handled
Routing rules determine whether a connection goes direct, through a proxy or is blocked. Rules are usually checked in order, and the first match takes effect. When starting out, bypass LAN and private addresses to avoid disrupting printers, router admin pages and local development services. To route by domain, add narrowly scoped rules and verify that the corresponding outbound tag exists. DNS affects name resolution and can change how some rules match, so check DNS settings when troubleshooting routing rather than looking only at whether the system proxy is enabled.
TUN mode handles traffic through a virtual network interface, making it useful for apps that do not read system proxy settings. It cannot fix incorrect server parameters. First confirm the connection through the local proxy, then enable TUN to keep troubleshooting focused. Desktop systems may require extra network permissions or elevated privileges; on Linux, watch for changes to virtual interfaces, routing tables and DNS. If LAN access stops working after enabling TUN, disable it and restore the original network state before checking bypass rules. Avoid changing the core, DNS and routing at the same time, or the issue may be hard to reproduce.
v2rayN offers a desktop edition with a modern cross-platform interface and a classic WPF edition. For a first installation, consider the desktop edition; if you are used to WPF, choose based on your environment. The two interfaces do not use different subscription services: connections still depend on the configuration and core compatibility.
If the app fails to start, check the runtime environment, write permissions for its directory and any security software alerts. Avoid repeatedly overwriting the configuration directory. Back up your settings before updating, then confirm that the listening port in the new interface matches the previous one.
v2rayN packages for macOS are available for Apple Silicon and Intel. Check your chip in About This Mac, then choose the matching architecture. The first time you open the app, macOS may ask you to confirm a developer-related prompt. Grant network and proxy permissions as requested.
Installing the app does not automatically enable the system proxy. Start the core, then check the proxy mode and browser requests. Follow the tutorial to handle permission prompts one at a time; do not disable system security protections as a workaround.
v2rayNG uses the Xray core, while v2flyNG is an alternative for the V2Fly core. Most recent phones use the arm64 package; if you are unsure of your device architecture, start with the universal package guide. Similar client names do not mean they support exactly the same protocol fields.
The first connection requires approval for the system VPN permission. If the connection drops after switching to another app, check battery optimization and background activity restrictions. Another app using the VPN interface may also replace the connection.
The v2rayN deb package is for distributions that use the corresponding package management system; the rpm package is for another group of distributions. You also need to distinguish x64 from arm64. Check your distribution, processor architecture and desktop environment before choosing a package. Package format and processor architecture are separate things.
On Linux, apps do not all handle proxy settings in the same way. Check the desktop proxy, terminal environment variables and each app's own proxy settings separately. Consider TUN mode and its network permissions only if you need broader traffic handling.
The client reads configurations and starts a proxy; it does not provide a working server by itself. Have a subscription URL or share link you are authorized to use, then follow the steps in order.
Keep the first test simple: one active configuration, one proxy method and one clearly defined test request. Once the connection is stable, add complex routing and automatic updates. If something breaks, it will be easier to identify what changed.
Enter the complete URL in subscription group settings, save it and update the subscription. Add a single share link through the corresponding import option. Once the configuration appears, check the protocol, server address and transport settings. A failed subscription refresh and a failed connection are different stages; check the logs for each rather than repeatedly updating the subscription.
02
Select a configuration and proxy mode
Set the configuration you want to test as active, then start the connection. On desktop, begin with the system proxy or an app-specific proxy; on Android, approve the VPN permission. A real connection test can help determine whether the selected configuration works, but results depend on the test target and network conditions. Do not delete an entire group of configurations based on one test.
03
Test the browser and command line separately
Open a test page in your browser, then use a command that explicitly specifies the proxy address to check a request. If the browser works but the terminal does not, first check whether the terminal has a proxy configured. If neither works, inspect the core logs, local port and remote connection. Change one setting at a time and keep the steps needed to reproduce the issue.
The Project V open-source ecosystem
Clients, cores and configuration fields
The interface manages settings; the core applies them. Understanding that distinction is more useful for choosing a client and troubleshooting than memorizing a client name.
Project V ecosystem
Graphical clients
v2rayN · v2rayNG · v2flyNG↓
Proxy core families
Xray · V2Fly
Available features depend on the core used by the client and the configuration it supports.
How Project V relates to V2Ray
Project V is an open-source ecosystem built around network proxying, with V2Ray as one of its best-known core names. When people say “install V2Ray,” they often mean installing a graphical client that manages a proxy core. Subscription management, tray menus and configuration editing belong to the client interface; accepting local connections, establishing outbound connections and applying routing are handled by the core. Knowing the difference helps you identify whether an error comes from the interface settings or the core runtime.
The V2Fly and Xray core families
V2Fly continues development related to V2Ray, while Xray is a core project derived from V2Ray that now develops independently. The two share some protocol and configuration concepts, but their features, fields and release schedules are not identical. Check support in the core you use, especially for VLESS, REALITY and certain transport options. REALITY is a connection security technology, not a proxy protocol that can be freely substituted just because it often appears alongside protocol names.
Open-source status and roles of the three clients
v2rayN, v2rayNG and v2flyNG are all open-source client projects. For desktop configuration management, start with v2rayN; on Android, choose between the other two based on Xray or V2Fly compatibility. Open source means the code and applicable licenses are available for review; it does not mean every subscription source is trustworthy. Clients, cores and bundled components may use different open-source licenses. If you modify, redistribute or package them, review each license and release notice separately rather than assuming all dependencies use the client's license.
Program updates and subscription updates are different
A program update replaces client components; a subscription update retrieves server configurations again. The former does not automatically extend your service, and the latter cannot add features missing from the core. Before upgrading, note your proxy mode, port, routing and DNS settings. Afterward, verify a basic connection before restoring advanced options. Keep credentials and subscription URLs in configuration files secure. Remove sensitive information before sharing logs, but retain the error type, time and steps needed to diagnose the issue.
When editing JSON by hand
First determine whether you are editing the client's own settings or a configuration passed to the core. In core JSON, inbounds defines local entry points, outbounds defines traffic exits, routing directs rules to outbound tags, and dns handles name resolution settings. Similar field names do not guarantee full compatibility across cores. Back up the original file before editing, check JSON syntax, then verify behavior one section at a time. Files generated automatically by the client may also be rewritten the next time it starts.
When something goes wrong, identify the stage first: can the app start, can the subscription update, can the core connect, and is the app actually using the proxy?