Project V Explained: V2Fly, Xray, and GUI Clients

Learn how Project V, V2Fly, and Xray relate, where v2rayN, v2rayNG, and v2flyNG fit, and what to check about protocols and open-source licenses.

At a glance

Project V is the starting point for understanding this ecosystem. V2Fly and Xray are the core projects to distinguish, while v2rayN, v2rayNG, and v2flyNG provide graphical interfaces. This guide is for readers choosing a client, checking node compatibility, or considering a core switch. Start by identifying each project’s role, then verify protocols, transports, security settings, and licenses against the actual release—don’t assume a client’s name guarantees compatibility.

Project V Origins: Projects, Cores, and Protocols Are Different Layers

Project V began as an effort to build network proxy tools and related components around V2Ray. V2Ray’s core role isn’t to display a list of subscriptions; it reads configuration to accept inbound connections, select routes, and make outbound connections. In everyday use, “V2Ray” may refer to the project, the core program, or a broader category of proxy configurations. When troubleshooting, clarify which one you mean.

GUI clients operate at a different layer. They display server lists, store subscriptions, generate configuration, launch the core, and show logs. The core and its implementations handle connections using protocols such as VMess and VLESS. Seeing a protocol name in a client’s interface doesn’t prove that its bundled core supports every combination of transport and security settings.

So “V2Ray is installed” isn’t enough to identify a problem. Include the client name and version, the running core and its version, the node protocol, and the error log. Before sharing logs, remove subscription URLs, user IDs, and other credentials.

V2Fly and Xray: Shared Roots, Independent Development

V2Fly is a community project that continues maintaining the V2Ray core. Its core is commonly called V2Fly-core, though V2Ray still appears in program names and documentation. Xray-core branched from related code in 2020 and has developed independently since. The projects have historical ties, but that doesn’t make them standard and premium editions of the same release line.

AspectV2Fly-coreXray-core
Project roleCommunity-maintained continuation of the V2Ray coreIndependent core branched from related code
CompatibilityCheck the protocol and configuration documentation for the specific versionCheck the protocol and configuration documentation for the specific version
Common use casesMaintaining and migrating existing V2Ray configurationsRelated configurations such as VLESS, XTLS Vision, and REALITY
Core licenseMIT LicenseMozilla Public License 2.0

VMess and VLESS are protocol names; TCP and WebSocket are transport options, while TLS is a connection security setting. REALITY and XTLS Vision involve specific implementations and configuration requirements, so they shouldn’t be treated like interchangeable options alongside VMess. For nodes using REALITY or Vision settings, confirm that the core supports the complete combination—not just that the client can import the link.

Takeaway: Check Node Settings Before Choosing a Core

List the protocol, transport, security method, and additional parameters provided by your provider, then check which ones the current core supports. Don’t replace an executable or reuse an entire configuration just because two cores share historical roots.

Where the Three GUI Clients Fit

v2rayN targets desktop environments on Windows, macOS, and Linux. Installation methods, permissions, and system proxy behavior vary by platform. It manages subscriptions and routes, and can use different cores where supported. Whether you can switch to a particular core depends on the client version, bundled files, and node type—not on the letter N in its name.

ClientPlatformsCoreCheck before choosing
v2rayNWindows、macOS、LinuxDesktop management interface; core choice depends on compatibilitySystem architecture, core files, node support, and proxy entry point
v2rayNGAndroidUses the Xray coreNode settings, core version, and system VPN permission
v2flyNGAndroidUses the V2Fly coreCompatibility with existing configuration and system VPN permission

v2rayNG and v2flyNG have similar interfaces and workflows, but they aren’t two skins in the same package. When switching Android clients, check imported subscriptions, per-app settings, routing, and DNS again. Don’t assume another app will inherit those local preferences.

Android clients usually use the system VPN interface to capture device traffic. This local traffic-capture method is separate from the protocol used by a remote node. On desktop, the system proxy mainly affects apps that honor system proxy settings. In both cases, client routing rules also apply, so the connection toggle alone doesn’t tell you where traffic goes.

Client, Core, and Remote Server: A Port Example

The example below uses specific ports to show how the layers fit together. These aren’t universal client defaults or values you must copy during setup. The local listening address can be 127.0.0.1; use the port actually configured. The remote port must match the server configuration.

10808
Example: local SOCKS inbound port
10809
Example: local HTTP inbound port
443
Example: remote service listening port

With this setup, the browser first sends requests to the local HTTP inbound at 127.0.0.1:10809. The core checks the route: traffic matching a direct rule connects straight to its destination; traffic matching a proxy rule may connect to the remote service on port 443. Changing the local HTTP port to the remote port won’t fix a server connection problem.

Application
  → Local HTTP inbound: 127.0.0.1:10809
  → Core routing check
      → Direct outbound → destination site
      → Proxy outbound → remote server:443 → destination site

Some versions use a mixed inbound that accepts multiple types of proxy request on one listening port, so there may not be two separate ports to find. If you see an “address already in use” error, first check for a local port conflict. For remote handshake or authentication errors, check the server settings. These problems occur at different stages and require different fixes.

Switching and Troubleshooting: Record First, Test One Change at a Time

Switching cores isn’t a universal fix. A client saving a node doesn’t mean the core started successfully; a running core doesn’t mean remote authentication succeeded. The steps below use common v2rayN menu paths as an example. Labels may differ by version and platform. If an option isn’t available, don’t create a configuration field with the same name yourself.

  1. Record the current setup

    Open “Help” → “About” and note the client version. Then find the core name and version in the startup log. Back up your current configuration and note the active node and routing selection.

  2. Check the core

    Go to “Settings” → “Parameter Settings” and look for “Core Type” or the equivalent core selection page. Check which core is selected for the target protocol. If you can’t find this option, check the documentation for your version before proceeding; don’t overwrite core files.

  3. Check inbound settings

    Under “Settings” → “Parameter Settings,” check the local listening address and port. For the example above, confirm HTTP requests go to port 10809. If you use a mixed inbound, follow the values shown in the interface.

  4. Test one change

    Keep the same node and routing rules, change only the core selection after confirming compatibility, then save and restart the service. Check the first error in the log, then test proxy access and direct access separately. Don’t change DNS, transport, and routing at the same time.

A subscription is a way to distribute configuration, not a guarantee that different cores will receive identical, valid settings. During import, the client parses fields and generates core configuration. Missing transport paths, service names, or security settings may go unnoticed during import but cause a connection failure later. Compare each setting with the original node instructions, and don’t share the full subscription URL publicly.

Open-Source Licenses: Check the Core and GUI Separately

Open-source projects don’t all use the same license. V2Fly-core uses the MIT License, Xray-core uses MPL 2.0, and v2rayN and v2rayNG are licensed under GPLv3. For v2flyNG redistribution, also check the license and inherited-code notices for the specific version. Third-party dependencies bundled with an app may have their own obligations, so the package name alone doesn’t give you the full picture.

These are pointers for identifying licenses, not legal conclusions about every packaging combination. Before modifying, distributing within an organization, or repackaging software, check the relevant version’s LICENSE, COPYING, third-party notices, and build instructions. The site’s branding doesn’t imply an affiliation with or endorsement by upstream projects.

FAQ: How to Tell Similar Names Apart

If I installed v2rayN, am I using V2Fly?

Not necessarily. Check the startup log for the actual core name, then review the core type setting. v2rayN is a GUI client; its name doesn’t tell you which core is running. When reporting a problem, include both the client and core versions.

Why does the same subscription stop working in another Android client?

First compare the number of imported nodes and their protocols, then check transport and security settings against core support. Next, check system VPN permission and per-app scope. A successful subscription update doesn’t mean you can skip node compatibility checks.

Do I have to switch my nodes to VLESS when using Xray?

You don’t need to change protocols just because the core name is different. Keep the protocol actually provided by the server and check that the current core supports it. Changing VMess to VLESS in the client alone will fail if the server hasn’t been configured to match.

Why do some apps still connect directly after I switch cores?

First check whether those apps are covered by the system proxy or Android VPN, then check whether routing sends the apps or their destinations direct. For further troubleshooting, follow the steps in Troubleshooting layer by layer instead of repeatedly switching cores.

Download v2rayNChoose a client and platform