June 25, 2026 · Open Source · About 12 minutes

V2Fly, Xray, and Their Clients Explained: A Clear Guide to the Project V Open-Source Ecosystem

Trace Project V’s history, understand the roles, licenses, and maintenance status of the V2Fly and Xray core families, and see which core powers v2rayN, v2rayNG, and v2flyNG.

At a glance

V2Fly and Xray are two core families that grew from a shared technical foundation, while v2rayN, v2rayNG, and v2flyNG are client interfaces for configuration, subscriptions, and system proxying. This guide is for anyone who sees these names but cannot tell how they fit together. By the end, you’ll know which core is running, whether a subscription is compatible, and which layer to focus on when upgrading.

Four concepts that are easy to mix up

The short version: Project V is the ecosystem behind the technology; V2Fly and Xray are core families; VMess and VLESS are protocols or configuration capabilities; and v2rayN, v2rayNG, and v2flyNG are the clients users interact with every day. They belong to different layers and should not be compared as equivalents.

The core handles the actual data processing. It reads inbound, outbound, DNS, routing, and transport settings, listens on local ports, and decides where traffic goes according to the rules. For example, after a client sets its local SOCKS endpoint to 127.0.0.1:10808, the core—not the interface button—accepts connections, matches domain rules, and establishes remote connections.

The client interface turns complex configuration into usable menus. Adding subscriptions, choosing nodes, switching the system proxy, viewing logs, and generating core configuration are usually handled by the client. Whether a connection continues after the interface closes depends on how the client runs and whether the core process is still active.

2015
Project V’s early beginnings
2020
Two core paths take shape
2 families
V2Fly and Xray
10808
Common local SOCKS example port

Where each name fits

Bottom line: identify the layer before troubleshooting

If an import fails, first check whether the client can recognize the subscription. If startup fails, check the core log. If web traffic is routed incorrectly, inspect routing and DNS. Mixing these issues together often leads to repeated reinstalls without finding the configuration error.

How Project V split into the V2Fly and Xray paths

Project V originally centered on the V2Ray name, with inbound, outbound, routing, DNS, and underlying transport designed as composable modules. Configuration structures such as inbounds, outbounds, and routing.rules reflect this design.

Around 2020, the original community’s maintenance organization and contribution model changed. The V2Fly community continued maintaining v2ray-core, focusing on compatibility, module maintenance, and the evolution of existing configurations. Xray-core developed independently from the shared technical foundation, with its own release cadence, extensions, and implementation choices.

A “shared origin” does not mean the two are identical today. They still share many concepts, including inbound and outbound handlers, routing rules, VMess, VLESS, SOCKS, and HTTP local endpoints, but specific fields, defaults, transport extensions, and support for new features may differ. A core starting successfully does not mean every copied field behaves as expected.

Comparison V2Fly family Xray family
Common core name v2ray-core Xray-core
Version identification Commonly seen in the 5.x release line Commonly seen in the 1.x release line
Primary license MIT MPL-2.0
Configuration foundation JSON configuration with modular inbound and outbound handlers JSON configuration with modular inbound and outbound handlers
Compatibility check Check the protocol, transport, security parameters, and version Check the protocol, transport, security parameters, and version
Recommended approach Keep the same core family when continuing with a verified V2Fly configuration Use Xray when the subscription explicitly requires Xray capabilities

What the license difference means

MIT and MPL-2.0 both allow public use, research, and code redistribution, but their notice and source-disclosure obligations differ when you create derivative work. Ordinary users generally do not need to choose between them when installing a client. Developers embedding a core into their own software, modifying source code, or redistributing it should read the license text included with the project.

Clients have their own licenses as well. The commonly distributed codebases of v2rayN, v2rayNG, and v2flyNG currently use GPL-3.0, and client and core licenses must be understood separately. A client’s license does not automatically change the independent core it invokes to the same license.

Bottom line: compatibility depends on capabilities, not family names

If existing nodes are stable, there is no need to switch immediately just because the other path adds a new feature. Switching cores is justified when a subscription explicitly requires specific transport fields, the current core cannot recognize the configuration, or the log points to a missing capability.

Which cores power v2rayN, v2rayNG, and v2flyNG?

v2rayN is a desktop client for Windows, macOS, and Linux. It is neither a protocol nor an alias for a single core. The 7.x release line provides interfaces for subscriptions, routing, system proxying, TUN, and core management. It commonly runs with Xray-core and can also use a supported V2Fly core when configured accordingly.

v2rayNG is an Android client that primarily invokes Xray-core. It brings share links, subscription groups, routing settings, and the VPN service entry point together in a mobile interface. v2flyNG also targets Android, but follows the V2Fly core path. The interfaces may look similar, but their core origins and feature support timelines are not necessarily the same.

A subscription service provides node data; it does not install a particular client on the device. A standard VMess or VLESS share link may be recognized by different clients, but specific transport extensions require checking core capabilities. Seeing a node name only means the link was parsed successfully, not that every connection parameter is fully supported.

Client Platform Core relationship Best suited for
v2rayN Windows、macOS、Linux Desktop client that manages supported cores, commonly using Xray-core Desktop subscription management, system proxying, routing, and TUN
v2rayNG Android Xray-core Subscriptions explicitly designed for Xray or requiring its capabilities
v2flyNG Android v2ray-core The V2Fly path when keeping the same core family is important

How to identify the core currently running

  1. Check the version

    In v2rayN 7.x, open “Help” → “About” and record the client version first. The client version and core version are separate numbers; do not treat them as one.

  2. Check the core type

    Go to “Settings” → “Parameter Settings” → “Core Type” to see which core is selected for the current node configuration. The field location may change between minor releases, but its name usually includes Core or the equivalent core label.

  3. Read the log

    Start the node and open the runtime log. Its opening lines usually show Xray 1.x or V2Ray 5.x. This is more reliable than guessing from the client icon.

  4. Check on mobile

    In v2rayNG or v2flyNG, go to “Settings” → “About” and record the client version. Then check the startup log for the core name and version number.

  5. Test the local endpoint

    Confirm in the log that the local endpoint is listening. A common SOCKS example is 127.0.0.1:10808. If the port is already in use, change it or stop the old process occupying it.

How to assess subscription, protocol, and core compatibility

A subscription is usually a set of node entries. After updating it, the client first parses VMess, VLESS, and other share content, then generates configuration the core can read. There are two gates: the client must recognize the subscription format, and the core must support the converted protocol and transport parameters.

With VLESS, seeing a vless:// prefix is not enough. Also check the server address, port, user ID, encryption field, transport, server name, and security-layer parameters. Missing any critical field can appear as a connection timeout, handshake failure, or configuration error in the log.

VMess does not mean “it will connect as long as V2Ray is supported.” Clock skew, an incorrect user ID, a mismatched transport path, or an incorrect TLS server name can all cause failure. Start troubleshooting with the first error in the log instead of changing DNS, routing, and protocol parameters at the same time.

routing-example.json
{
  "inbounds": [{
    "listen": "127.0.0.1",
    "port": 10808,
    "protocol": "socks"
  }],
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [{
      "type": "field",
      "ip": ["geoip:private"],
      "outboundTag": "direct"
    }]
  }
}

Four-step compatibility check

  1. Check parsing first: After updating the subscription, do nodes appear, and are their addresses and ports complete? No nodes usually indicates a subscription URL, content-format, or update-process problem.
  2. Then check startup: After selecting a node, watch the core log. Unsupported configuration fields usually trigger an error before a connection is established.
  3. Next check the handshake: If the core starts normally but the connection fails, verify the protocol, security layer, transport, server name, and system time.
  4. Finally check routing: If the node is connected but some websites behave incorrectly, inspect DNS, routing rules, the system proxy, and TUN. Do not keep changing the subscription format.

Bottom line: node visibility, core startup, and connection success are different states

A node appearing in the list only means the client parsed it. A listening port in the log only means the core started. A normal response from the destination confirms that the protocol, transport, DNS, and routing are working together correctly.

How ordinary users should choose and maintain a setup

On desktop, start with v2rayN and let verified configuration and subscription requirements determine the core. On Android, use v2rayNG when the subscription documentation explicitly provides parameters for Xray; if an existing configuration is based on V2Fly and has been stable, v2flyNG can reduce migration variables.

Separate client upgrades from core upgrades. A client upgrade may change menus, subscription storage, or system-proxy behavior; a core upgrade may change configuration validation, protocol implementation, or routing capabilities. Upgrade one layer at a time so the log makes the source of any change easier to identify.

Before migrating, record the client version, core version, local listening port, routing mode, and DNS settings. On desktop, at minimum note whether the SOCKS port is 10808, whether the system proxy is global or rule-based, and whether TUN is enabled. Saving only the subscription URL cannot fully restore these local options.

Does v2rayN mean it uses the V2Fly core?

No. v2rayN is a desktop client, and the 7.x release line can manage cores and configurations. Open “Settings” → “Parameter Settings” → “Core Type”, then use the startup log to confirm whether Xray-core or v2ray-core is actually running.

Can the same subscription be imported into all three clients?

Standard VMess and VLESS entries can usually be parsed by multiple clients, but specific transport fields may not be compatible. After importing, check the node count, start nodes one at a time, and read the logs. Do not confuse “displayed successfully” with “fully supported.”

Why does the original configuration fail after switching cores?

First look for errors such as unknown field, invalid value, or unsupported in the log, then check the transport, security layer, and routing fields. If restoring the original core makes it run again, the issue is more likely a configuration difference than a subscription account problem.

How should I handle port 10808 already being in use?

First quit any old client or core process still running in the background. If both must run at once, choose an unused port in the local listening settings and update the browser or system proxy to point to it.

Do I need to install both v2rayNG and v2flyNG?

Usually not. Choose one according to the core required by the subscription. You can test them separately for compatibility, but do not let both clients manage Android’s network connection at the same time.

Ultimately, Project V is a map of technical relationships, not a piece of software that needs to be installed separately. V2Fly and Xray implement the cores, while the three clients organize subscriptions, nodes, routing, and system network entry points into usable interfaces. When something goes wrong, check the client, core, protocol, transport, DNS, and routing in that order; the troubleshooting path is much clearer than simply switching software.

Download V2Ray clients Choose v2rayN or v2rayNG for your system