Project V Explained: V2Fly, Xray, v2rayN and v2rayNG

Learn how Project V evolved into the V2Fly and Xray core branches, and which core each graphical client uses.

At a glance

Project V is an ecosystem of projects. V2Fly and Xray follow separate development paths, while v2rayN, v2rayNG and v2flyNG are clients for managing configurations. This guide is for anyone choosing a client, checking node requirements or considering a core change. First distinguish the client, core and protocol, then check compatibility against the server settings.

Project V, V2Fly and Xray: Understanding the Project Landscape

These names are not different skins of the same app. Project V began as an ecosystem of network proxy tools built around V2Ray. In everyday use, “V2Ray” can mean either the project or, more specifically, the core that handles connections. Keep these meanings distinct when installing software or troubleshooting.

Around 2020, community maintenance of the original project gradually shifted to V2Fly, which continued development of the V2Ray core. Xray forked from the V2Ray codebase in 2020 and has since developed independently. The two share a common origin, but their release schedules, features and configuration support differ. Documentation for one should not be assumed to describe the other's current behavior.

Project V / V2Ray project ecosystem
└─ V2Ray codebase
   ├─ V2Fly: continues development of the V2Ray core
   └─ Xray: independent core forked in 2020

Graphical clients
├─ v2rayN: desktop client; runs supported cores depending on version and node type
├─ v2rayNG: Android client; primarily uses the Xray core
└─ v2flyNG: Android client; uses V2Fly's V2Ray core

The diagram shows code lineage and roles; it does not mean all three clients are released by a single project. Client and core versions are numbered separately, too. Updating the client interface does not necessarily update the core currently in use. Check the actual version in the startup log rather than relying on the window title.

Client and Core: How Settings Become Network Connections

Graphical clients manage subscriptions, node lists, settings, system proxy options and processes. The core handles local listening, protocol handshakes, DNS and routing. When you click “Connect,” the client typically generates a runtime configuration and then starts or invokes the core. On Android, the client also routes device traffic through the system VPN service; that is separate from the protocol used by the remote node.

NamePrimary roleWhere to check
v2rayNDesktop node management, subscriptions, system proxy and core selection; support varies by versionSettings → Parameter Settings and startup logs
v2rayNGAndroid node management; primarily uses Xray and routes traffic through the system VPN serviceSide menu: Settings and Logs
v2flyNGAndroid node management; uses the V2Fly coreApp settings and core startup logs
V2Fly / XrayParses configuration, establishes connections, and applies DNS and routing rulesActive runtime configuration and core logs

v2rayN supports multiple cores, but the available options depend on the current release. Before switching, check Settings → Parameter Settings for entries related to Core. Subpage names may differ between versions. Renaming one executable to match another core's filename does not convert the configuration format or add protocol support.

VMess, VLESS and REALITY: Protocol Support Doesn't Guarantee Full Compatibility

VMess and VLESS are proxy protocols, not client names. WebSocket and gRPC are transport methods; TLS and REALITY are security-layer settings. Whether a node works depends on the combination of protocol, transport, security layer and version—not simply on whether “VLESS” appears in a list.

Be sure to distinguish VLESS from REALITY. VLESS does not provide encryption by itself, so deployments need a suitable secure transport. For a VLESS + REALITY node, use a core that explicitly supports the combination and preserve all required settings, including serverName, publicKey, shortId and the server's flow value. It is not the same as importing ordinary VLESS + TLS and toggling an extra option.

Xray Core

Recommended

If the server explicitly provides VLESS + REALITY or requires an Xray-specific feature, choose a compatible Xray version. This recommendation is based on node parameter compatibility, not a promise of better speeds in every network environment.

Best for: Nodes that explicitly require Xray or use REALITY

V2Fly V2Ray Core

Best for configurations deployed and tested according to V2Fly documentation. For existing VMess nodes, check transport settings and version support first; there is no need to change the server just because the core has a different name.

Best for: Existing V2Fly deployments that need to stay aligned with their configuration and documentation

Bottom line: Get the full settings before choosing a core

Ask the service provider to confirm the protocol, transport, security layer and minimum core version. Getting all four details before importing the node makes troubleshooting easier than repeatedly switching cores and guessing which settings are missing.

Subscriptions, JSON and Routing: What Can Be Migrated

A subscription is a way to retrieve node information in bulk, not a proxy protocol. It may contain a collection of share links or a complete configuration. Whether a client can read it depends on the content format and its parser. Base64 is just an encoding; it does not make configurations compatible across clients.

  1. In v2rayN, check the subscription URL under Subscription Groups → Subscription Group Settings. In v2rayNG, open Subscription Group Settings from the side menu. Labels may vary slightly by version.
  2. After updating, open a node's edit window and check the address, port, user ID, transport type and TLS settings one by one. Don't stop at confirming that the node name appears.
  3. If parsing fails, make sure the response is subscription data—not a login page, expiration notice or web error. Subscription URLs contain access credentials; don't post them publicly in forums.
  4. When migrating a full JSON configuration, first check the target core and configuration format. A successful subscription import does not guarantee that custom DNS, routing or local inbound settings will migrate too.

In common V2Ray / Xray JSON configurations, inbounds defines local entry points, outbounds defines connection exits, and routing.rules determines which exit matching traffic uses. The snippet below shows only a routing rule: it sends traffic from local-socks through the proxy outbound. It is not a complete, runnable configuration.

{
  "routing": {
    "rules": [
      {
        "type": "field",
        "inboundTag": ["local-socks"],
        "outboundTag": "proxy"
      }
    ]
  }
}

The accompanying configuration must include an inbound with tag set to local-socks and an outbound with tag set to proxy. If the tags don't match, the routing rule won't work as intended. For the full fields and routing rules, see the routing configuration reference. Don't copy this JSON directly when switching to a core that uses a different configuration format.

System Proxy, TUN and Ports: Checking the Connection Path

A desktop system proxy sends traffic from apps that honor system proxy settings to a local listening port. TUN routes traffic through a virtual network interface and requires support from both the client and its core. Neither is a VMess or VLESS protocol, and importing a subscription does not necessarily enable either feature.

The three ports below illustrate a connection path; they are not guaranteed defaults for every version. Read the local listening ports in your current settings, then compare them with the app proxy and remote node ports. Don't enter the remote port 443 in a browser's local proxy port field.

10808
Example: local SOCKS inbound port
10809
Example: separate HTTP inbound port
443
Example: remote TLS server port

Choosing or Switching Clients: Frequently Asked Questions

Choose in this order: platform, node settings, core support, then interface preferences. On desktop, check core support in the current v2rayN release. On Android, choose between v2rayNG and v2flyNG based on node requirements. Back up subscription groups and custom rules before migrating, and change one setting at a time when testing.

Do I need to install a separate V2Ray interface if I already have v2rayN?

Usually not. Start the installed v2rayN, select a node, then check the logs for the core name and version actually running. If a core file is missing, follow the current release's instructions to add the required component. Installing multiple interfaces won't fix the same missing file.

Are v2rayNG and v2flyNG just different names for the same app?

No. They use different cores: Xray and V2Fly, respectively, and their supported features vary by version. For a REALITY node, first check Xray support. For an existing V2Fly configuration, test it with the corresponding core. Don't choose based only on app icons or similar names.

Why does the same subscription work on desktop but time out on Android?

Compare the node details on both devices, especially the transport type, server name and security-layer settings. Then check the core versions in each device's logs. If the settings match, check Android VPN permissions, per-app settings, device time and network before assuming the subscription has expired.

Do I need to rewrite all my rules after switching cores?

First distinguish client-managed rules from hand-written JSON. The client may regenerate managed rules, but you should still check the active configuration. Validate hand-written JSON against the target core's documentation, field by field. Test one node and one specific route before restoring complex routing to avoid introducing several errors at once.

Keep a record of three things: client version, core version shown in the logs, and node settings with sensitive details removed. When reporting an issue, include these and the relevant error lines. That's more useful than saying only “V2Ray won't connect” and helps identify whether the problem is in the interface, configuration, protocol or network.

Client Downloads by Platform