• VMess · VLESS · Trojan · Shadowsocks
  • Xray · V2Fly

V2Ray Protocol & Core Reference

Check the server configuration first, then choose a client core. Protocol, transport and security are separate settings. Speed and battery use cannot be judged by protocol name alone.

v2rayN is the primary desktop client for managing settings, while v2rayNG and v2flyNG target different core families on Android. The Getting Started guide covers installation, importing profiles and making your first connection; this page explains settings, trade-offs and compatibility limits. New users can follow the guide first, then use the sections below as a reference.

How protocol layers map to settings

Proxy protocols define how requests are represented

VMess, VLESS, Trojan and Shadowsocks all let a client tell a server which destination to reach and how to handle authentication and data. None of them represents a complete network setup. A connection also involves DNS resolution, an underlying transport, a security handshake and routing. Several options in what looks like a single server entry in v2rayN may actually belong to different layers. To judge whether a setup will work, separate those layers instead of treating one setting as a universal switch.

VLESS can use different transports and security layers, so knowing that a server uses VLESS is not enough to configure a client. At minimum, you need the server address, port and user ID, then must verify the transport, security type and any fields required by that combination. Trojan typically relies on TLS for transport security, while the encryption method is a core part of Shadowsocks configuration. Importing a subscription can fill in these fields, but it cannot remove the need for them to match.

Transport defines how data is carried

TCP, WebSocket and gRPC describe different transport methods, not different accounts. WebSocket is often used with reverse-proxy deployments, where the path and request host may be needed for routing. With gRPC, check settings such as the service name. Plain TCP generally has no equivalent path setting. Copying a WebSocket path into another transport neither improves compatibility nor makes an incomplete profile complete. An editable field in the client does not mean the current combination will use it.

TLS and REALITY belong to the security layer; they are not alternatives to VMess or VLESS at the same layer. “VLESS + REALITY” is a combination of a proxy protocol and a security scheme. TCP is a transport, Xray is the core that runs the configuration, and v2rayN is a graphical client for managing it. There is no contradiction in seeing all these names together. When discussing a setup, describe the full combination instead of attributing its behavior to just one component.

Configuration layerCommon settingsWhat to check
Proxy protocolVMess、VLESS、Trojan、ShadowsocksAuthentication method, user ID or password, protocol options
TransportTCP、WebSocket、gRPCServer listener, path or service name
Security layerTLS、REALITYServer name, certificate validation or authentication material
Execution layerXray、V2FlyWhether the active core implements the required feature

Check traffic routing and the remote protocol separately

System proxy, TUN and Android VPN mode route app traffic to the client; the remote protocol carries the received requests to the server. Getting the first part right does not prove that the remote handshake succeeded, and a successful remote test does not prove that every app is using the client. In v2rayN, apps that ignore the system proxy may still connect directly when only system proxy mode is enabled. In v2rayNG, VPN mode still requires attention to per-app routing and LAN bypass rules.

Routing rules choose an outbound route after traffic reaches the client. They can match domains, addresses or other conditions. DNS determines how destination names are resolved and whether routing can still see the domain. Resolving the server address and resolving the final destination are separate tasks. If the first fails, the connection cannot be established; if the second fails, the client may appear to be running while websites remain unreachable. Check each stage in the logs rather than labeling every failure a protocol incompatibility.

Keep configuration notes by layer: record the address and authentication first, then transport, then security settings and routing exceptions. Change one layer at a time and keep the last known-good profile. That makes it easier to identify whether a failure comes from traffic routing, the protocol handshake or name resolution, and helps prevent subtle settings from being lost when moving between clients.

Proxy protocol trade-offs

VMess vs. VLESS: different roles for authentication and encryption

VMess is an early, widely used proxy protocol in the Project V ecosystem. Its design includes user authentication and data protection, so configuration involves a user ID, encryption options and time-sensitive authentication requirements. Distinguish current implementations from legacy configurations: compatibility settings from older guides are not automatically good choices for a new setup. If an imported profile fails authentication, check the user ID, client clock and server requirements before cycling through encryption options at random.

VLESS uses a leaner protocol design and leaves data encryption to an external security layer. “Lean” describes the protocol’s responsibilities; it does not guarantee lower latency on every network. VLESS is commonly paired with TLS or REALITY, so assess security and connection overhead for the complete combination. A correct user ID cannot compensate for a misconfigured security layer, and disabling that layer does not produce an equivalent secure setup.

VMess can be a sensible choice for an existing, well-maintained deployment that remains compatible. VLESS is common in newer deployments built around Xray features. The deciding factor is what the server offers, not which name looks newer in a client dropdown. Changing the protocol in the client cannot create a matching server listener. Migration requires coordinated changes on both sides and a fresh review of authentication, transport and security settings—not just copying the address and port.

Trojan: security built on TLS

Trojan uses TLS to establish a secure connection, then handles proxy authentication and request forwarding within it. Typical settings include a password, server name and certificate validation options. Rather than bundling authentication and encryption entirely into the protocol, Trojan reuses the established TLS infrastructure. This keeps the security layer’s role clear, but certificates, domain names and handshake settings must be correct. A correct password cannot fix a certificate name mismatch, and a valid certificate does not prove the proxy password is right.

Trojan is more than “TLS with a password.” Core support for transport extensions and additional options varies, and a share link may not capture every deployment detail. After importing into v2rayN or v2rayNG, check that the security type, server name, transport and password are all present. For a handshake error, start with the TLS layer; if the handshake succeeds but authentication fails, check the password and server settings. This avoids unnecessary trial and error.

Shadowsocks: compact settings, exact method required

Shadowsocks uses a compact encrypted-proxy design. A typical profile contains an address, port, encryption method and password. For modern use, confirm the exact method and implementation support; “supports Shadowsocks” does not mean every variant will interoperate. Authentication and key requirements can differ between generations, and some methods require a specific key format rather than an arbitrary password. A client displaying a method name does not prove that its active core implements it.

Shadowsocks uses relatively few settings and can suit setups with a fixed, directly managed endpoint, but a compact profile still depends on accurate server details. TCP and UDP support depends on the server, client and current traffic mode. Plugins and extra encapsulation are not universal core features. For older share links that rely on extensions, verify support in the client you plan to use. If an extension field is unclear, ask the provider before removing it and proceeding.

ProtocolDesign focusEasy-to-miss requirements
VMessBuilt-in authentication and data protectionSystem clock, modern configurations and legacy settings
VLESSLean proxy layer; security handled separatelyExternal security layer, flow control and core support
TrojanSecure connection and authentication over TLSCertificate name, password and transport extensions
ShadowsocksCompact encrypted-proxy configurationExact encryption method, key format and UDP requirements

Ultimately, choose a protocol for maintainability: whether the current service is stable, the client continues to support it, settings can be migrated completely, and logs are usable when something goes wrong. There is no need to replace a working setup just because another protocol has a different name. When you need a new feature, weigh migration costs against server support; that is usually more useful than chasing the newest protocol.

TLS, REALITY and authentication boundaries

Check the name and trust chain when using TLS

TLS encrypts the connection and verifies the server’s identity. The address entered by the client can be a domain or an IP address, but the server name used for security verification is a separate setting. Connecting to an address does not mean any certificate presented by that address should be trusted. Check the certificate’s validity period, name and trust chain. If the system clock is significantly wrong, even a valid certificate may appear expired or not yet valid, so check time synchronization early when troubleshooting a TLS handshake.

The server name usually maps to the SNI or ServerName field in the client, and may differ from the address used to connect. The address locates the server; the server name is used during the handshake and verification. The Host value in a WebSocket request belongs to yet another layer and may be used to route traffic through a reverse proxy. A deployment may use the same name for all of them, but they are not the same setting. Follow the deployment instructions and check each field separately.

TLS application-layer protocol negotiation selects the application protocol used over the connection and is common with HTTP-based transports. It is not a performance toggle to enable at will; the client and server need compatible negotiation settings. Before using custom options, confirm what the transport actually requires. Changing the server name, negotiation list and transport at once makes a single handshake error harder to diagnose because it could have several causes.

REALITY is a security scheme, not a standalone proxy type

REALITY is a transport security scheme supported by Xray and is often paired with VLESS. It has its own authentication and handshake requirements. Clients typically need the server’s public-key material, an allowed server name and a short ID. The public-key material is used for the server identity and handshake; it does not replace the VLESS user ID. The user ID, short ID and public key serve different purposes, so getting one right cannot make up for mismatches in the others.

The client fingerprint setting in REALITY affects how the handshake is constructed, but does not replace authentication. Choosing a familiar-looking name from a list will not fix an incorrect public key or mismatched short ID. Fingerprint options also depend on the active core implementation, so after migration check that the setting is recognized, not just that it appears in the configuration. Some interfaces retain unknown fields even when the core cannot use them. Check the runtime logs.

VLESS flow-control settings must also be evaluated alongside the transport and security combination. Common Vision options provide traffic-handling features in specific implementations; they are not required for every VLESS connection. If the server requires a flow-control setting, use the same option and confirm that the client supports it. If the server does not use it, do not add it in pursuit of speed. An empty flow-control field after import does not by itself mean the link is incomplete; first check whether the deployment requires one.

Break handshake errors into verifiable steps

When troubleshooting a secure connection in v2rayN, first check whether the server address resolves, then whether the connection reaches the destination port, and finally whether the security handshake and proxy authentication complete. An open port only suggests that a transport connection may be possible; it does not prove identity verification succeeded. Likewise, a timeout does not necessarily point to the security layer: DNS failure, a bad path or a server that is not listening can all fail before the handshake. The stage reported in the logs is more useful than a generic “unable to connect” message.

When moving a REALITY profile to v2rayNG, check whether the import process preserves the server name, fingerprint, short ID, public-key material and flow-control setting. Interface labels may change between client versions, but the settings must still match the server’s requirements. If the original profile worked and the migrated one does not, compare these fields before investigating network differences. Don’t share the full link to troubleshoot: its user ID and authentication material may let others use the same endpoint.

TLS and REALITY do not replace security measures in end-user applications. The client’s secure connection and a website’s HTTPS connection are separate layers, and the path beyond the server still matters. When choosing a setup, consider what is trusted, how authentication material is stored and how it is updated. A clearly configured combination with fewer settings is usually easier to maintain than one stacked with unknown options.

Connection speed and resource use

Measure first requests and sustained downloads separately

VMess, VLESS, Trojan and Shadowsocks cannot be ranked outside the context of the full connection. The time it takes to open a site includes DNS resolution, connection setup, the security handshake, proxy authentication and the destination’s response. Sustained download speed depends more on bandwidth, congestion, server load and limits on the resource itself. One combination may take longer to open initially but deliver steady throughput; another may complete the handshake quickly but perform poorly on long connections because of packet loss or throttling.

A v2rayN connection test covers only the path used by that test request; it does not represent the performance of every app. The test target, connection reuse and cache all affect the result. A fast response from one endpoint to the test address says little about video, software repositories or work systems. For a fair comparison, keep the client, network, target resource and traffic mode the same. Record first-request latency, repeated access and large-file transfer separately instead of crediting every change to the protocol.

Security handshakes such as TLS require round trips and cryptographic work, so high-latency networks tend to magnify connection setup costs. An established connection reused by an app does not pay the full setup cost for every request. Browser connection pools, core-level reuse and server idle timeouts all affect the outcome. Distinguish cold starts from existing connections before comparing; otherwise, the first and second test may not have gone through the same handshake process.

Encryption, encapsulation and multiplexing all have costs

The cost of encryption depends on the processor, system implementation and hardware acceleration. The same method can perform differently on a desktop and a low-power device, so desktop benchmarks do not predict phone battery use. VLESS delegates encryption to an external security layer, but that does not eliminate encryption overhead from the overall connection. Trojan uses TLS and incurs TLS processing costs too. Evaluate the complete connection, not just the number of bytes handled by the proxy layer.

Transports such as WebSocket and gRPC add their own framing, state management and deployment paths. Extra encapsulation may add processing overhead, but reverse-proxy infrastructure, connection reuse and network routing can also provide practical benefits. A transport that is more stable in one deployment is not inherently faster. Meet the server’s deployment requirements first, then decide whether extra encapsulation is necessary. Avoid adding layers just because they are available when the application does not need them.

Multiplexing lets multiple logical requests share an existing connection, reducing the cost of setting up connections repeatedly. But they also share the underlying connection’s congestion and failures. Packet loss on that connection can delay every logical request, and timeouts on the server or intermediate devices affect reuse. If the browser already reuses connections at the application layer, adding another layer of multiplexing may provide little benefit. Decide based on repeated tests under the same conditions, not on the assumption that more is always better.

SymptomCheck firstDon’t assume
Slow first page loadDNS, cold-connection handshake, destination responseThe proxy protocol has insufficient throughput
Download speed fluctuatesPacket loss, congestion, server load and destination throttlingChanging the protocol name will fix it
Stalls under heavy request loadConnection count, reuse strategy and CPU usageEvery connection needs multiplexing
Some apps behave unexpectedlyUDP support, traffic mode, routing and DNSThe entire server is down

Control test conditions when comparing resource use

To compare resource use in v2rayN, have both profiles handle the same workload and observe three stages separately: idle, sustained transfer and a high volume of short requests. Memory use includes cached settings, rule data and runtime management; it does not mean the active connection is using the same amount of network resources. Track the GUI and core processes separately so interface refresh costs are not mistaken for protocol processing. Very verbose logs can also increase disk and CPU load.

Test UDP applications separately. Real-time voice, games and other datagram-based services depend on jitter, packet loss and sustained reachability; a web test is no substitute. Some combinations rely on specific encapsulation or implementations for UDP forwarding, which both the server and client must support. If a test fails, confirm that the UDP path is actually enabled before investigating latency. A working connection that supports only the current TCP workload does not prove that every type of traffic is being forwarded correctly.

Keep a baseline profile when tuning performance, change one setting at a time and repeat the same task at different times. Don’t make a lasting change based on a result seen only once. Repeatable improvements in stability are more meaningful than an occasional peak. To distinguish the effects of traffic mode and routing, see System Proxy vs. Routing Modes.

Android battery use and background operation

A persistent VPN does not mean the device is under constant heavy load

On Android, v2rayNG and v2flyNG can use the system VPN interface to route app traffic. Seeing a VPN indicator means the traffic-routing service is running, not that the processor is constantly under heavy load. Battery use depends on traffic volume, connection wakeups, wireless conditions, encryption, DNS requests and background activity from other apps. Blaming the client’s persistent notification for high drain can obscure which apps are actually generating traffic.

Android battery statistics may attribute some network processing to the VPN client even when another app initiated the requests. Consider usage duration, foreground and background traffic, and comparisons under the same workload rather than relying on a single percentage. Continuous video playback, heavy cloud sync and short push notifications have different load profiles, affecting throughput, connection frequency and device wakeups. Differences between workloads can have a much larger effect on battery life than switching protocols.

The wireless radio also uses power when waking from sleep. Frequent short connections, overly frequent keepalives and repeated retries after failures can all keep it active longer. If incorrect settings trigger repeated handshakes, the battery drain usually comes from the failure loop, not excessive overhead during normal protocol operation. First check the logs for repeated timeouts, authentication failures and connection attempts; then consider simplifying the profile or changing background settings.

Evaluate battery-saving settings alongside reliability

If Android restricts v2rayNG in the background, service may stop when the screen locks and reconnect when the app regains network access. Removing battery restrictions can help keep the connection active, but it also lets the client run in the background for longer; it is not simply a battery-saving switch. Start with the intended use: allow the necessary background activity for all-day access, or disconnect after specific tasks to avoid keeping the client running unnecessarily.

v2flyNG’s background behavior is also affected by Android scheduling and device manufacturers’ policies. Switching core families does not bypass system restrictions or guarantee lower battery use. When comparing the two clients, run only one at a time and keep the network, app workload and observation period similar. If one maintains a VPN service while the system stops the other, their battery figures are not comparable. Compare the cost of completing the same task, not total usage with different background uptime.

VPN mode and proxy-only mode cover different traffic. Proxy-only mode typically requires apps to use the local proxy explicitly; it does not mean all device traffic is handled. It may appear to use less battery simply because it processes less traffic. Per-app proxy settings and LAN bypass rules can reduce unnecessary routing, but they also change the traffic path. Before changing them, identify which apps must use the proxy rather than compromising the intended connection just to lower a battery statistic.

Check mobile network changes and DNS separately

Switching between Wi-Fi and mobile data changes the address, route and system network state; existing connections may not survive the switch. v2rayNG may need to re-establish remote connections, and apps may retain stale connection pools. Don’t immediately blame the protocol if service briefly drops after switching. If it does not recover, check whether the client can reconnect, whether DNS is still using a broken route and whether apps work after rebuilding their connections.

Failed DNS retries or misrouted requests can also increase background activity. Remote and direct DNS need reachable routes, and server-address resolution must not depend on a proxy connection that has not yet been established. FakeDNS changes how domains map to addresses; it is not a battery-saving feature. Before enabling it, understand how it interacts with routing, app caches and VPN traffic. See FakeDNS: How It Works and When to Use It for more on its limitations.

Troubleshoot battery use in three rounds: first complete a fixed task with the normal configuration, then check for unexpected traffic while idle with the screen locked, and finally reproduce a network switch. Record the client state, task duration and error type for each round; this is more useful than recording battery percentage alone. If a round shows repeated authentication errors, fix the settings before comparing further, or you will only measure the cost of retries caused by a bad configuration.

For specific v2rayNG background settings, follow Troubleshooting Android Battery Drain and Background Operation. The goal of long-term use is to complete tasks reliably while minimizing unnecessary wakeups, not to make the client’s battery usage appear as close to zero as possible. Protocol choice is only one factor; background policies, traffic sources and network quality matter too.

The Xray and V2Fly core families

A shared origin does not mean configurations remain interchangeable

V2Fly continues the related Project V implementations and community maintenance, while Xray developed an independent feature path within the same technical ecosystem. The two share concepts and some similar configuration structures, but their features, fields and behavior are maintained separately. Understanding their relationship helps clarify protocol names and configuration terms. Treating it as “any configuration file can be swapped between them” can cause problems during migration. Check compatibility against specific features and fields, not just project origins.

Xray support for REALITY and related VLESS flow-control combinations is a common factor in client selection. V2Fly has its own support for protocols, transports and routing. Check the capabilities of the core actually installed, not an old article or screenshot from a previous client version. Features evolve and fields change; this page does not promise that every feature will remain unchanged. Before migrating, check the client logs and the relevant configuration documentation.

v2rayN is a desktop GUI client for managing servers and subscriptions, parsing profiles, configuring the system proxy and starting cores. A setting shown in the interface only means there is an entry for it; the selected core still executes the configuration. After switching cores, a previously working field may no longer be supported, and some server profiles may not suit the new core. Before switching, confirm the protocol, security layer and flow control required by the endpoint instead of comparing core names alone.

Choose an Android client based on the features you need

v2rayNG primarily targets Xray core capabilities and suits Android setups that need the corresponding protocol combinations. v2flyNG is an Android alternative in the V2Fly family for profiles that match its implementation. The two clients may have similar interfaces and import workflows, but the same share link is not guaranteed to behave identically in both. For links with a specific security scheme or extension fields, check core support first, then verify the imported settings in the interface.

Updating a client and updating its core are not the same thing. The GUI parses subscriptions and generates runtime configuration; the core handles communication. An outdated version of either layer can affect support for new fields. Replacing the core does not guarantee that an old interface will generate the right settings, and updating the interface does not guarantee the active executable implements the required features. If a field appears but has no effect, check both how the configuration is generated and which core actually runs.

ClientBest suited forCheck before migrating
v2rayNDesktop default for managing subscriptions, routing and coresSelected core, generated configuration and traffic mode
v2rayNGAndroid client focused on Xray capabilitiesSecurity layer, flow control, VPN and per-app routing
v2flyNGAndroid alternative from the V2Fly familyProtocol extensions, transport implementation and subscription fields

Migrate settings field by field

Start Xray-to-V2Fly configuration migration with the smallest working connection. Create a basic setup with one remote outbound, confirm authentication and the security handshake, then migrate routing, DNS and other settings gradually. Copying a large configuration with many rules makes it hard to tell which fields were ignored or use different defaults, even if the program starts successfully. Starting without exiting only confirms that some startup checks passed; it does not prove that every traffic path behaves as expected.

Routing assets and core configuration also need to be treated separately. Some rules refer to domain or IP classification data. The result depends on whether the files are available, the category names exist and the paths load correctly. Copying routing text from another client without the required data can cause load failures or unexpected matches. This usually does not mean the remote proxy protocol is broken; check startup logs and rule-matching behavior separately.

Be clear about who maintains custom configuration. A GUI client may regenerate runtime files when reloaded, when a subscription updates or when settings change, so edits to generated output may not persist. For custom fields, prefer the client’s supported settings and confirm where they are saved and what can overwrite them. Exported configurations may contain authentication details; remove addresses, user IDs, passwords and other sensitive data before sharing a report.

Choose a core by first meeting required capabilities, then considering stability and maintenance. If an existing V2Fly configuration works and needs no additional features, keep using a compatible client. For a specific combination such as REALITY, choose an Xray setup that can express and run it fully. Select an installer for your operating system and processor from the client downloads page; there is no need to find a separate client just because a protocol has a different name.

Share links and subscription compatibility

A successful import only means some information was parsed

A subscription distributes configuration; it is not a new proxy protocol. The response may contain a set of share links or structured configuration, which the client must identify and convert into internal profiles. Seeing server names after import only confirms that the parser read some content. Open the profiles and check that authentication, security and transport settings are present. Correct names, the expected number of entries and a working connection are three different outcomes.

VMess share links commonly wrap encoded structured data. VLESS and Trojan links typically express settings as an address with query parameters, while Shadowsocks links also require attention to how authentication data and extensions are encoded. Link generators may handle field names and encoding differently, so the prefix alone does not establish compatibility. An older parser may silently ignore a new field rather than report an error; no error message does not prove complete compatibility.

Base64 in a subscription response is a way to package content, not encryption. Anyone with the subscription URL may be able to read server and authentication details, so treat the URL as a sensitive credential. Don’t post a full subscription link in a public screenshot, log or issue report, and don’t send the response to an unknown conversion service. To compare formats, inspect only the necessary fields locally and use a redacted copy when describing the issue.

Compare fields instead of repeatedly reimporting

To compare the same endpoint in v2rayN and v2rayNG, check the address, port, authentication, transport, security layer, server name and additional settings in order. For REALITY, also check the public-key material, short ID, fingerprint and flow control. For WebSocket, check the path and request host; for gRPC, check the service name. If a field is blank, determine whether that is a valid default or an import omission before filling it with a value from another profile.

Special characters can cause import differences. Reserved characters in a password, remark or path must be encoded correctly for the share format. Double encoding can make the client read the encoded text instead of the original value. When copying manually, check for line breaks, leading or trailing spaces and content truncated by a messaging app. If the same link works in one client but fails in another, compare the parsed fields before repeatedly updating the subscription without changing any actual settings.

Structured configuration and share links are not interchangeable containers. A full configuration may include multiple outbounds, routing rules, DNS, inbounds and policies, while a single share link usually carries only one remote endpoint and a limited set of options. Converting a full configuration into a list of links can preserve servers but lose routing and DNS behavior. Importing in the other direction does not restore the original global settings automatically, so migrate server profiles and client-wide settings separately.

Short configuration example: rules have dependencies too

The snippet below shows a common routing pattern in Xray or V2Fly configuration, illustrating how a rule refers to an outbound tag. It is not a complete runtime file; merge it into an existing configuration and make sure an outbound named direct is defined. The rule uses private address ranges and does not depend on additional classification data. It handles only this type of address and does not cover domain routing, DNS or every LAN discovery scenario.

{
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "type": "field",
        "ip": [
          "10.0.0.0/8",
          "172.16.0.0/12",
          "192.168.0.0/16",
          "fc00::/7"
        ],
        "outboundTag": "direct"
      }
    ]
  }
}

This snippet also shows why valid JSON syntax is not enough. Even with every brace and quote in place, the rule will not work as expected if its outbound tag does not exist or the GUI generates a different routing structure. Rule order matters too: an earlier matching rule may select the outbound. When using a GUI client, express the desired behavior through its routing settings rather than replacing the entire generated configuration with an example.

If some endpoints disappear after a subscription update, check the response format, group filters and parsing messages before concluding that the service removed them. If an update fails, distinguish between access to the subscription URL, the authentication response and content parsing. Keep a verified working profile as a baseline to determine whether the problem lies in distribution format or connectivity. Find answers to common questions in the Help Center.

Choose and test a setup by use case

List your constraints before choosing a combination

For desktop use with v2rayN, first confirm the server’s available configuration and your local traffic-routing needs. If system proxy is enough for everyday browsing, keep the traffic path simple. Consider TUN when apps that ignore the system proxy also need coverage. Choose a protocol that matches the existing endpoint: keep a well-maintained VMess deployment, meet the TLS requirements for Trojan, pair VLESS with its security layer, and confirm the method and key requirements for Shadowsocks. A feature-rich client does not mean you need to enable everything.

For mobile use with v2rayNG, evaluate reliable recovery and background overhead together. If you need Xray features such as REALITY, use a profile that imports all required settings. For an endpoint suited to the V2Fly implementation, v2flyNG is another option. Don’t run both clients as the system VPN at the same time. Stop one before comparing them so that a switch in system traffic routing is not mistaken for a remote protocol failure.

Development and office tasks often involve browsers, command-line tools, internal addresses and dependency repositories. System proxy settings may not cover every tool, and some programs use their own proxy configuration. Check traffic coverage and routing exceptions before changing the remote protocol. Internal addresses usually need an explicit direct route, and DNS must resolve their names. If only one tool fails, start by checking the proxy settings that tool actually uses.

Use caseCheck firstTest
Desktop browsingSystem proxy, TLS or REALITY settingsCold-start access and sustained browsing
Always-on mobile useVPN routing, background policy and failed retriesRecovery after screen lock and network changes
Development and office workTool routing, internal domains and routesTest the browser and the actual tools separately
Real-time datagram trafficEnd-to-end UDP support and forwarding methodJitter, packet loss and sustained connectivity in the actual app

Validate in stages instead of making a one-shot judgment

Stage one: confirm that the client and core start normally. If startup fails, check field formats, feature support and file dependencies before changing the system proxy. Stage two: test one remote connection and check whether address resolution, the security handshake and authentication complete. Stage three: route traffic from the actual app and confirm that its requests reach the client. Stage four: verify routing, DNS and special traffic types. Clear results at each stage show which layer to change next.

If the connection succeeds but websites do not load, check whether destination resolution failed, routing chose the wrong outbound or the destination itself is down. A reachable test address proves only that particular path works. Browsers may cache DNS results and apps may retain old connections, so make a new request after changing settings and restart affected apps if needed. Avoid resetting everything at once: service may return temporarily, but you will not know what actually fixed it.

Check DNS against the intended traffic path, not just whether it returned an address. Direct DNS, remote DNS and server-address resolution serve different purposes, and routing rules may affect DNS requests themselves. Results can also be affected by browser secure DNS and caching, so don’t draw conclusions from a single check in one page. See DNS Path Checks for v2rayN and v2rayNG; define the expected route first, then verify where the requests actually go.

Keep a baseline and migrate one capability at a time

Keep the existing working endpoint during migration. Import the new combination, test it independently, then move groups and defaults. If the new profile needs a different core, check whether other frequently used endpoints are compatible before switching, so fixing one connection does not break an entire group. After subscription updates, spot-check key fields, especially security, flow control and transport. For long-term maintenance, recording why a setting changed is more useful than keeping many indistinguishable copies.

Keep troubleshooting notes concise: record the client, core family, protocol combination, traffic mode, failure stage and most recent change. Never record or publish full passwords, user IDs or subscription URLs. Filter logs around the time the issue occurred so unrelated output does not hide the relevant error. When contacting the configuration provider, reports such as “security handshake failed” or “flow control missing after import” are more actionable than simply saying “it’s slow.”

The right setup meets the required capabilities, completes everyday tasks reliably and makes failures traceable to a specific layer. There is no universal speed ranking independent of device and network conditions, and changing a protocol name cannot solve every problem. Start with a complete configuration that matches the server, then control variables when comparing stability, resource use and battery life. To start configuring, return to Getting Started; for an installer, visit the client downloads page. Use this page’s sections as a reference for configuration settings.