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.
- Project layer: Project V provides the historical and technical background; V2Fly and Xray have separate maintenance scopes and release schedules.
- Core layer: V2Fly-core and Xray-core read configuration and handle connections. Their capabilities depend on the specific version.
- Interface layer: v2rayN, v2rayNG, and v2flyNG manage settings and runtime status; they are not protocols with similar names.
- Configuration layer: Server address, port, user ID, transport, security settings, and routing rules all determine how a connection is established.
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.
| Aspect | V2Fly-core | Xray-core |
|---|---|---|
| Project role | Community-maintained continuation of the V2Ray core | Independent core branched from related code |
| Compatibility | Check the protocol and configuration documentation for the specific version | Check the protocol and configuration documentation for the specific version |
| Common use cases | Maintaining and migrating existing V2Ray configurations | Related configurations such as VLESS, XTLS Vision, and REALITY |
| Core license | MIT License | Mozilla 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.
| Client | Platforms | Core | Check before choosing |
|---|---|---|---|
| v2rayN | Windows、macOS、Linux | Desktop management interface; core choice depends on compatibility | System architecture, core files, node support, and proxy entry point |
| v2rayNG | Android | Uses the Xray core | Node settings, core version, and system VPN permission |
| v2flyNG | Android | Uses the V2Fly core | Compatibility 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.
- Desktop subscription and routing management: Check whether v2rayN supports your system and node combination.
- Android with Xray configurations: First check the bundled core in v2rayNG against the node requirements.
- Android with existing V2Fly configurations: Confirm v2flyNG supports your current configuration before migrating rules.
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.
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.
-
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.
-
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.
-
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.
-
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.
- Personal use: Focus on compatibility, configuration sources, and update notes. Running software generally isn’t the same as distributing a modified version.
- MIT-licensed code: When copying or distributing it, retain the copyright and license notices as required.
- MPL 2.0 code: When distributing it, check requirements for covered files and the availability of source code for modifications.
- GPLv3 programs: When distributing a covered program or modified version, meet the license requirements for the corresponding source code and license text. The core’s permissive license doesn’t replace the GUI’s own obligations.
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.