Choose a Version First: Desktop, Classic, and CPU Architecture
The first step in installing v2rayN is not importing a subscription. First confirm your operating system, CPU architecture, and interface edition. Choosing the wrong package can leave the app unable to start, trigger an incompatibility warning, or cause the core process to exit immediately. Check your device details, then select the matching file in the download center.
Choosing a Windows Version
Most Windows PCs made in recent years use the x64 architecture, so choose the Windows x64 package. Devices with ARM processors should use arm64. Choose an x86 package only when you are certain the system is 32-bit; if Settings shows “64-bit operating system, x64-based processor,” do not download the x86 version.
v2rayN Desktop uses a cross-platform interface, with similar workflows on Windows and macOS. It suits users who want a consistent experience across both desktop systems. Classic is mainly for Windows; its menus, tray controls, and server-list management follow the long-established workflow and suit users already familiar with it. Both editions support subscription imports, server selection, system proxy settings, and routing rules, although setting names and menu locations may change between releases.
Choosing a macOS Version
On macOS, open “About This Mac” or “System Information” and confirm the processor type first. Choose arm64 for Apple silicon and x64 for Intel processors. A mismatched architecture may still run through compatibility support, but it can make troubleshooting core calls, tray display, and updates more difficult. For a first installation, use the native architecture package directly.
When moving from an older release to a newer one, re-import the subscription instead of overwriting the entire program folder. Older settings may contain different core paths, local ports, routing rules, and interface fields; copying the whole folder can carry broken settings into the new release. If you need to preserve custom rules, record the rules, listening ports, and subscription groups first, then restore them one by one in the new version.
Before Installation: File Location, Permissions, and Network Status
The Windows Classic edition may be distributed as a compressed archive. Extract it before running the main program; do not launch it from the archive preview window. The program needs to read core files, configuration, and runtime data from its own folder. Starting it from a temporary preview location can cause missing core files, unsaved settings, or scattered files after an update.
Place the program folder somewhere your current account can read and write. English and Chinese paths are both acceptable, but avoid temporary folders that are frequently cleaned up. Windows usually does not require permanent administrator access during initial setup. Grant elevated permissions only when a network feature needs system-level access or security policy explicitly blocks a write operation.
After downloading on macOS, move the app to “Applications” before launching it. The first time macOS opens an app downloaded from the internet, it may ask you to confirm its source; check the Privacy & Security settings for the reason it was blocked. Once you have confirmed that the file came from this site’s download center, follow the system’s Allow steps. Avoid moving the app repeatedly, as macOS may record its permissions again and require renewed approval for startup or network access.
Before the first launch, check these three basics:
- Keep the system date, time, and time zone correct. Clock drift can affect TLS-based connections.
- Make sure the current network can reach local resources and commonly accessed direct-connection sites, so a basic connectivity issue is not mistaken for a server problem.
- Exit any old instance using the local proxy port, especially a previously running v2rayN process.
First Launch: Check the Core Before Setting Local Ports
v2rayN is a graphical client; the selected core handles VMess, VLESS, Trojan, or Shadowsocks connections. Many configurations use the Xray core, while some releases also offer the V2Ray core. The client manages settings, invokes the core, switches the system proxy, and displays runtime logs. An open interface does not mean the core is running successfully.
After the first launch, open Settings and check the core type and core path. If the release offers a core check or version-information function, run it once. When the logs show the core version, listening address, and a startup-complete message, the program is ready to accept local connections. If the logs say the executable cannot be found, check that the package was fully extracted, the CPU architecture is correct, and security settings are not blocking the core.
Next, confirm the local listening port. Different releases may offer SOCKS, HTTP, or mixed ports, and their defaults may vary. Beginners can keep the defaults provided by the current release; there is no need to force a number copied from an older guide. What matters is recording the “actual current port,” because browser proxy settings, developer tools, and port-diagnosis commands must all match it.
The local listening address should normally remain a loopback address for connections from this computer only. Unless other devices on your LAN explicitly need access, do not enable LAN connections. Exposing a LAN listener also requires considering the firewall, network environment, and access controls, so it is not necessary for a first installation.
Fields to Watch in the Logs
address already in use: The local port is already occupied by another process.connection refused: The destination rejected the connection, possibly because the server is not listening or the port is incorrect.timeout: The connection did not complete within the allotted time. Check the local network, server status, and routing path separately.failed to parse: The configuration could not be parsed, commonly because subscription conversion failed or manually entered parameters have an invalid format.- Certificate-name or handshake errors: verify the server address, SNI, transport method, and security-layer parameters.
Do not rely only on the latency number shown in the server list. Latency tests may use different probes; a response does not guarantee that the target website is reachable, while a server that ignores a particular probe may still proxy connections normally. Judge a configuration by the core logs, real connection tests, and whether all subscription parameters are complete.
Importing Subscriptions: Updates, Groups, and Server Selection
After obtaining a subscription URL, add a record in subscription-group management. The name is for local identification, so use a service purpose or route category; copy the full URL without introducing leading or trailing spaces or line breaks. Save it and run a subscription update. The import is complete only when configurations appear in the server list. Saving a URL without updating it will not generate servers automatically.
If a subscription update fails, first check whether the URL has expired and whether the current network can reach the subscription server, then review the update log. Do not repeatedly create identical subscriptions. Duplicate groups produce same-named servers and make it difficult to identify the source of a configuration. The number of updated servers depends on what the provider publishes; repeated clicks will not increase it.
When selecting a server, verify that its protocol and parameters are complete. VMess configurations typically include a user ID, transport method, and security settings; VLESS may also depend on TLS, Reality, SNI, a fingerprint, or flow-control parameters; Trojan requires the correct password and security-layer details; Shadowsocks requires a matching cipher and password. v2rayN generates the configuration from the subscription, so ordinary users should not change these fields without knowing the server-side settings.
After selecting a server, set it as the active server. Highlighting a row in the list does not necessarily switch to it; check the status bar, tray menu, or logs for the current server. The core normally reloads its configuration after a switch, so existing connections may briefly drop. That is a normal result of reloading the configuration.
System Proxy Modes: Why a Working Server May Not Proxy Your Browser
Once the core starts, it only opens a local proxy endpoint. Whether an app uses that endpoint depends on the system proxy, the app’s own proxy settings, or another interception method. The most common first-install issue is that server tests and core logs look normal while the browser still connects directly. The usual cause is not a protocol error but an inactive system proxy.
After you choose “Set system proxy” in v2rayN, the client writes the current local proxy address to the operating system. Most browsers and desktop apps that follow the system proxy will read it. After applying the setting, close and reopen the browser before testing; some running apps read proxy status only at startup and do not respond immediately to system changes.
Common system proxy modes can be understood as follows:
- Clear system proxy: Remove the proxy settings written by v2rayN so apps use the system’s original network behavior.
- Automatic configuration or rule mode: Use a configuration script or rules to decide which requests go through the local proxy.
- Global proxy: Requests that follow the system proxy enter v2rayN, and the core’s routing rules decide their final exit.
“System proxy rules” and “core routing rules” operate at different layers. The system proxy determines whether traffic enters v2rayN; core routing determines whether traffic that has entered is proxied, sent directly, or blocked. If an app ignores the system proxy entirely, changing core routes will not make it use the proxy. Check whether the app offers its own HTTP or SOCKS proxy settings.
On macOS, check the Proxy page in Network settings to see whether the current service has HTTP, HTTPS, or SOCKS entries. On Windows, verify the address and port in the system proxy settings. For a manual check, the port must match v2rayN’s current listening port. If the system page still contains an old port, clear the system proxy in v2rayN first, then set it again.
Routing: Start with Presets, Then Add Custom Rules
Routing determines where connections go after entering the core. During first use, avoid immediately piling on custom domain and IP rules. Start with the basic preset provided by the release, confirm that both proxied and direct connections work, and then add rules based on actual needs. This makes it easier to tell whether an issue comes from the server, system proxy, or routing rules.
Rules are usually matched in order, so an earlier rule may take effect before a later one. Domain rules match domains in requests, IP rules match resolved addresses, and process rules depend on whether the client and operating system support the relevant identification method. After changing rules, reload the configuration and use the logs to confirm which rule actually matched.
DNS can also affect routing. If a rule depends on a domain but an app resolves it to an IP first and sends a direct IP connection to the proxy, the core may not receive the original domain. Conversely, DNS requests and actual connections using different exits may return an address unsuitable for the current route. During initial setup, keep DNS simple; configure separate domain groups for mainland China and destinations outside mainland China, remote resolution, or more granular anti-pollution rules only after basic connectivity is stable.
Do not interpret “global proxy” as meaning that all traffic from every device must pass through the server. With only a system proxy configured, some apps may still bypass it, and other LAN devices will not connect automatically. If you need to handle more traffic types, you can explore the client’s TUN feature, but it involves a virtual network adapter, system permissions, DNS interception, and routing-table changes, so it should not be the first step after installation.
Common Issue 1: System Proxy Not Taking Effect
Troubleshoot an inactive system proxy in a fixed order instead of changing several options at once.
- Confirm that the v2rayN process is still running and that its tray icon is visible.
- Check the core logs to confirm that the local listener was created successfully.
- Confirm that the current server is set as active, rather than merely selected in the list.
- In system settings, verify that the proxy address points to this computer and that the port matches the client.
- Restart the browser or app you are testing to rule out an older process caching the proxy settings.
- Temporarily use the basic routing preset to rule out custom rules incorrectly sending the target to a direct or blocked exit.
If only one app is affected while the browser works through the proxy, check that app’s network settings first. Some programs use their own proxy, some support only HTTP proxies, and others ignore the system proxy completely. In that case, copying v2rayN’s local address and the port for the relevant protocol into the app’s settings is more effective than repeatedly switching servers.
If no app can connect but direct access returns after disabling the system proxy, check whether the core has exited. A system proxy only sends requests to a local port; when no process is listening, pages typically fail immediately with a connection error. If restarting the core does not help, check for port conflicts and configuration parsing errors.
Common Issue 2: Port Conflicts and Duplicate Processes
Port conflicts commonly occur when an older v2rayN instance did not exit fully, a core process remained in the background after a crash, or another network tool is using the same port. The address already in use message in the logs is a direct signal. Do not launch multiple client instances in succession; first identify the process listening on the port.
On Windows, you can check the example port 10808 in PowerShell. If your actual setting uses another port, replace the number in the command with the current value:
Get-NetTCPConnection -State Listen |
Where-Object LocalPort -eq 10808 |
Select-Object LocalAddress, LocalPort, OwningProcess
After obtaining the process ID, check the process name under “Details” in Task Manager. If it is a leftover v2rayN or core process, exit normally from the client menu first; end the process only when the interface cannot be used. Do not terminate system processes in bulk without confirming their names.
On macOS, check the same example port in Terminal:
lsof -nP -iTCP:10808 -sTCP:LISTEN
If another service that must remain available is using the port, change the local listening port in v2rayN. Then update the system proxy and any apps using manual proxy settings. Changing only the client port while leaving app ports unchanged will make the core appear healthy while apps cannot connect.
Duplicate processes can also come from startup settings. If both the new and old versions launch automatically, they may compete for the same port after login. Once migration is complete, keep startup enabled only for the version you use and confirm that the old program has exited. On Windows, check the list of startup apps; on macOS, check Login Items and background extensions.
Common Issue 3: Subscription Updates Successfully but Servers Cannot Connect
A successful subscription update only means that the client retrieved and parsed the subscription content; it does not mean every server is online. If a server cannot connect, try another configuration in the same subscription first. If several configurations time out, check the local network, subscription validity, and provider notices. If only one fails, focus on that server’s address, port, and protocol parameters.
Manual changes to subscription servers may be overwritten by the provider’s content at the next update. For temporary testing, duplicate a configuration and modify the copy, keeping the original subscription server for comparison. Do not mix the SNI, transport path, user ID, or Reality parameters from different servers; these fields must match the corresponding server.
Let the subscription determine the protocol. Client support for a protocol does not mean an existing server can be switched to it arbitrarily. VMess, VLESS, Trojan, and Shadowsocks use different authentication and transport parameters; changing only the protocol name does not convert a configuration. Ordinary users should use the complete configuration delivered by the subscription.
Post-Installation Stability Checklist
After completing the initial setup, keep a reproducible baseline: one subscription group that updates normally, one verified server, the default local port, a basic routing preset, and a clearly understood system proxy state. When problems appear later, return to this baseline first, then restore custom settings one at a time.
- Before updating the client, record the current version, core type, local port, and routing preset.
- After a subscription update, confirm that the current active server still exists.
- After switching networks, run another real connection test instead of relying only on an old latency result.
- When exiting the client, confirm that the system proxy has returned to the expected state.
- When a problem occurs, save the logs from the relevant time period before restarting the program so key errors are not overwritten.
- Change one set of custom rules at a time; reload the configuration and verify the match results after each change.
Windows and macOS place controls in different locations, but the troubleshooting logic is the same: confirm the client process, then the core process; confirm the local port, then the system proxy; verify subscription parameters, then inspect routing and DNS. Following this order separates “the program will not open,” “the server will not connect,” and “the browser bypasses the proxy,” avoiding trial and error across multiple settings pages.