This guide is for anyone choosing a desktop or Android client, trying to understand protocol fields in a subscription, or preparing to move a configuration between Xray and V2Fly. It explains how the two cores relate, how VLESS, VMess, REALITY, and transport layers fit together, and how to choose v2rayN, v2rayNG, or v2flyNG based on node capabilities.
First, separate the core, client, and subscription
Xray and V2Fly are both network proxy cores. The core parses configuration, establishes outbound connections, handles inbound ports, and applies DNS and routing rules; v2rayN, v2rayNG, and v2flyNG are graphical clients. After a subscription is imported, the core—not the node list interface—performs the protocol handshake and forwards traffic.
Both projects are connected to the Project V technology lineage, but they are now maintained and released independently. V2Fly preserves V2Ray’s naming, configuration concepts, and compatibility direction while developing the v5 configuration system. Xray continued from a related code base and developed a more distinct focus around combinations such as VLESS, XTLS, and REALITY. It is inaccurate to think of Xray simply as “a newer version of V2Ray,” because the two do not share one release series.
- Core layer: Reads JSON configuration and handles protocols such as VMess, VLESS, Trojan, Shadowsocks, SOCKS, and HTTP, along with their transport settings.
- Client layer: Manages subscriptions, node filtering, the system proxy, log viewing, and starting or stopping the core process.
- Subscription layer: Stores connection details such as the node address, port, user identifier, transport method, security layer, and server name.
- Routing layer: Uses domain, IP, port, or application traffic rules to choose a direct connection, proxy, or block; it does not automatically change the node protocol.
Core differences between Xray and V2Fly
For everyday decisions, the key question is not an abstract comparison of “which is faster,” but whether the target core can fully recognize the configuration fields. Standard VMess, WebSocket, TLS, SOCKS, and HTTP setups usually offer broad compatibility. For VLESS, XTLS Vision, or REALITY, Xray is often the more direct choice. V2Fly’s strengths lie in continuity with the existing V2Ray configuration model, the evolving v5 configuration system, and related deployment environments.
Xray core
RecommendedStrong support for common newer combinations such as VLESS, XTLS Vision, and REALITY, along with widely used protocols including VMess, Trojan, and Shadowsocks.
Best for: Daily use, VLESS nodes, and REALITY configurations
V2Fly core
Continues the V2Ray configuration model and provides the v5 configuration system, making it suitable for environments built around V2Fly routing, DNS, and inbound rules.
Best for: Existing VMess deployments, V2Fly v5 configurations, and compatibility maintenance
| Comparison | Xray | V2Fly |
|---|---|---|
| Release relationship | Maintained and released independently | Maintained and released independently |
| Common primary protocols | VLESS、VMess、Trojan、Shadowsocks | VMess、Trojan、Shadowsocks、SOCKS、HTTP |
| Key capabilities | XTLS Vision and REALITY combinations | V2Ray configuration continuity and the v5 configuration system |
| Android graphical clients | v2rayNG | v2flyNG |
| Migration focus | Check flow, security, and realitySettings | Check the configuration version, protocol fields, and transport fields |
Bottom line: Match configuration capabilities before comparing speed
If a subscription includes VLESS, flow=xtls-rprx-vision, or security=reality, choose Xray first. If the environment already uses V2Fly v5 configurations and stable VMess nodes, staying with V2Fly is usually easier than migrating immediately.
The same protocol name does not guarantee interchangeable configurations
Seeing VMess on two nodes does not mean their configurations can be swapped unchanged. A complete connection also includes the transport method, TLS settings, server name, path, Host, fingerprint parameters, and multiplexing policy. If the client omits one critical field during import, you may see “the node is present but cannot connect,” a timed-out latency test, or repeated retries in the log.
VLESS makes this especially clear. VLESS is the protocol-layer name, REALITY covers security and handshake-related settings, while TCP, WebSocket, and gRPC are transport-layer choices. A common configuration combines these layers, for example VLESS + TCP + REALITY + Vision. During migration, preserve fields such as serverName, publicKey, shortId, fingerprint, and flow; do not copy only the server address, port, and user identifier.
{
"address": "server.example",
"port": 443,
"protocol": "vless",
"security": "reality",
"flow": "xtls-rprx-vision",
"serverName": "www.example.com",
"fingerprint": "chrome"
}
- VMess: Check the user identifier, alterId compatibility settings, transport method, TLS, and WebSocket path.
- VLESS: In addition to the user identifier, verify flow, the security layer, and the transport parameters required by the server.
- REALITY: Check serverName, publicKey, shortId, and browser fingerprint fields. Missing any required item can cause the handshake to fail.
- Routing rules: A successful core connection does not guarantee the expected routing. Also check domain rules, IP rules, and the final outbound target.
Different release cycles do not mean newer is always better
Xray and V2Fly use separate version series, so their release schedules and feature priorities do not move in sync. Upgrading a client also does not necessarily upgrade the core at the same time: the graphical interface, core files, and subscription format may change independently. When troubleshooting, record the client version line, core type, and node protocol separately instead of simply saying “everything is up to date.”
For a stable setup, keep a known-working configuration before upgrading, then upgrade the client and test the existing node. If the log shows unknown field, failed to parse config, or unsupported security, the configuration fields usually do not match the core’s capabilities. If the configuration loads successfully but the connection times out, continue by checking the network, DNS resolution, port, and server status.
Ports should also be included in troubleshooting notes. For example, if a desktop setup uses 10808 for the local SOCKS endpoint and 10809 for the HTTP endpoint, browsers and other tools must connect to the matching port type. Pointing an HTTP client at a SOCKS port is often mistaken for a core startup failure. These ports are examples; check the actual values under v2rayN’s “Settings” → “Parameter Settings.”
Bottom line: Record three details before upgrading
Save the client version line, the current core name, and the complete protocol combination of one working node. After upgrading, retest the same node for 3 rounds before updating the subscription. This helps separate version issues from node fluctuations.
How to choose between v2rayN, v2rayNG, and v2flyNG
For Windows desktops, v2rayN is the natural starting point. It provides subscription groups, a system proxy, routing rules, latency tests, and log viewing, with comprehensive graphical controls for Xray-based setups. After importing a subscription, open the node details to confirm the protocol and transport fields, then check the local listening ports, log level, and system proxy options under “Settings” → “Parameter Settings.”
On Android, v2rayNG is a better fit when the subscription mainly uses VLESS, REALITY, or Xray-related configurations. If you explicitly maintain a V2Fly environment, use V2Fly v5 configurations, or need to match an existing V2Fly server, choose v2flyNG. Similar graphical interfaces do not mean identical core capabilities, and a successful import does not guarantee that every field was preserved.
Recommended setup: Use the same protocol stack on desktop and Android
Desktop (v2rayN)
- Prefer the Xray core for VLESS and REALITY
- Check local ports under “Settings” → “Parameter Settings”
- Retest the same node for 3 rounds after a subscription update
Android (v2rayNG)
- Import the same Xray-compatible subscription
- Confirm VpnService authorization on the first connection
- Enable per-app proxying when needed and check the routing rules
Using the same subscription does not require the same client, but matching protocol capabilities across both devices reduces lost fields and migration errors.
When v2flyNG is the better fit
- The server and configuration-generation workflow are explicitly based on V2Fly.
- The existing subscription mainly contains long-tested VMess or other V2Fly-compatible nodes.
- You already maintain V2Fly v5 configurations and depend on their structure and fields.
- The team needs the mobile setup to match an existing V2Fly test environment.
Do not force a configuration built for one core into another client just because its interface feels more familiar. A safer order is to identify the protocol first, choose the core second, and compare client workflows last. If a subscription contains several node types, create two subscription groups labeled “Xray” and “V2Fly” so they do not get mixed after an update.
Migrating from one core to another
Migration is not as simple as replacing an executable file. The address, port, and user identifier are usually easy to preserve; the transport layer, security layer, DNS, routing, and local inbound settings are much easier to miss. Before migrating manually, export the current configuration or save the subscription source. Then test a structurally simple node first and restore complex routing afterward.
- Record the original environment: Note the client version line, core name, local listening ports, system proxy mode, and a currently working node.
- Check the protocol combination: Confirm whether it is VMess, VLESS, or another protocol, and record related fields such as TCP, WebSocket, gRPC, TLS, and REALITY.
- Import into the target client: Prefer a subscription or complete share link; do not copy only the address and port.
- Disable complex routing first: Use a basic proxy path for the initial connection and confirm that the log contains no configuration parsing errors.
- Restore DNS and split routing: Add domain, IP, and application rules one group at a time, reconnecting after each change.
- Cross-check the result: Test the same node for 3 latency rounds and access both direct and proxied destinations to confirm the final outbound follows the rules.
| Symptom | Check first | Recommended action |
|---|---|---|
| Fields are empty after import | Whether the client recognizes the subscription format | Use complete share information or a compatible client |
| Unknown field warning | Whether the field belongs to the other core | Switch to the matching core; do not casually delete security parameters |
| All latency tests time out | DNS, port, system time, and server status | Find the first failure in the log |
| The browser works but other tools fail | SOCKS versus HTTP port type | Check the actual listening settings for ports such as 10808 and 10809 |
| Some domains bypass the proxy | Routing order and the final rule | Place specific rules before broad rules |
Common questions about choosing a core
There is no universal core choice independent of the node configuration. Protocol capabilities, server deployment, client platform, and maintenance cost all affect the result. The questions below can quickly narrow the options.
Does a VMess node have to use V2Fly?
No. Xray and V2Fly can both handle common VMess scenarios, but you still need to check the transport method, TLS, WebSocket path, and other configuration fields. Recognizing the VMess protocol does not mean every extension parameter is identical.
Which core should I choose for a VLESS node?
If the node includes XTLS Vision, REALITY, publicKey, shortId, or similar fields, choose Xray first. Consider another combination only when the configuration provider clearly states its compatibility target.
Can switching cores directly reduce latency?
The core affects protocol implementation and data processing, but network distance, congestion, server load, and packet loss are usually more decisive. Test continuously for 3 rounds on the same device, node, and network, then judge the result together with the logs and actual access tests.
What if a subscription works in v2rayNG but not in v2flyNG?
Open the node details first and inspect the protocol and security fields. If it contains REALITY, Vision, or Xray-specific settings, continue using v2rayNG. If it is a standard VMess configuration, check subscription parsing, the transport path, the TLS server name, and local network permissions.
Can I keep both clients on the same device?
Yes, for comparison testing, but only one local proxy or VpnService session should run at a time. If both clients listen on the same port, such as 10808, the one started later may fail because the port is already in use.
The decision can be reduced to one chain: check the node protocol and security layer, then the core explicitly supported by the server, then the client platform, and only afterward compare interfaces and usage preferences. Users focused on VLESS and REALITY will usually choose Xray with v2rayNG; users with established V2Fly v5 configurations and mature VMess environments are better served by continuing with V2Fly and v2flyNG.