v2rayN for Windows: Installation, Setup, Desktop vs. WPF, and Common Fixes

Choose a v2rayN build, install it, import a subscription, and configure the Windows system proxy. Compare Desktop and WPF, and fix common runtime and port issues.

At a glance

For first-time v2rayN setup on Windows, or for troubleshooting startup failures, empty subscription lists, or browsers that still cannot connect. Choose the right architecture and interface, then extract the files, update subscriptions, select an active server, and configure the system proxy. Use logs, listening ports, and an explicit proxy request to pinpoint whether the issue lies with the client, core, or application.

1. Desktop or WPF: Choose an interface, then check your architecture

v2rayN is a configuration and management interface; connections are handled by the proxy core it launches. Desktop uses a cross-platform interface, while the classic WPF edition uses Windows UI technology. They mainly differ in layout, interaction, and package dependencies. The interface alone does not determine whether a server configuration will connect.

Desktop

Recommended

For a first setup, start with Desktop. Follow the steps in this guide and note where to find subscription groups, the active server, system proxy, and routing settings.

Best for: First-time setup and users who prefer a cross-platform interface.

Classic WPF

Best for users familiar with the traditional Windows workflow. Don’t mix files from different interface editions. Back up your configuration before switching, then extract and test the other edition separately.

Best for: Users already familiar with WPF who want to keep their existing workflow.

Before downloading, open Windows Settings → System → About and check System type. Choose the x64 build for an x64-based processor; on ARM64 devices, choose the matching build. The interface may launch under compatibility emulation even if the bundled core is incompatible, so don’t judge compatibility by whether the main window opens.

2. Extract the Full Package and Launch for the First Time

Extract the entire archive to a writable folder, such as D:\Tools\v2rayN. Don’t launch the main program from an archive preview or extract only the executable. Keep the interface, core, and data files together in the directory structure provided with the release.

  1. Check the Download

    On this site’s download page, choose the Windows build with the right architecture and interface edition. Keep track of which version you selected; when troubleshooting, don’t overwrite one version’s files with another’s in the same folder.

  2. Extract All Files

    In File Explorer, select Extract All and place the complete folder somewhere your account can write to. Avoid protected program directories.

  3. Launch the Main Program

    Open the extracted folder and run v2rayN.exe. First, check that the main window and notification-area icon appear. No server is configured yet, so you can’t assess the connection at this point.

  4. Check the Startup Log

    Check the log or information area in the main window. If it reports a missing runtime, missing core, or access denied, fix that first, before importing a subscription.

Closing the window may leave the app running in the notification area. Before launching it again, check the taskbar notification area so you don’t mistake a hidden window for a failed startup. Before upgrading or replacing files, exit from the tray menu and make sure related core processes have stopped.

3. Import a Subscription: Save the URL, Then Update

A subscription URL retrieves a set of configurations; it isn’t a server address or an ordinary web link. It may contain an account identifier or access token, so protect it like a password. Adding a subscription group only saves the URL. You must update the subscription for servers to appear in the list.

  1. Create a Group

    In the main window, open Subscription groups → Subscription group settings, add an entry, enter a recognizable name and the subscription URL, then save. Depending on the version, the add control may be labeled “Add” or shown as a plus sign.

  2. Update the Subscription

    Return to the Subscription groups menu and select Update all subscriptions (without proxy). If you don’t have a working connection yet, try fetching the subscription directly first and check the request result in the log.

  3. Check the Imported Configs

    Check that servers appear in the list and that their type, address, and port look right. If a group filter is active, switch to the relevant group so an empty filtered list isn’t mistaken for an import failure.

  4. Set the Active Server

    Right-click the server you want in the list and select Set as active server. Selecting a row may not switch the active configuration; check the active marker and the core log that follows.

If you already have a working connection and the subscription service requires proxy access, try the menu option to update through a proxy. Don’t keep retrying it when no server is available: the update request itself needs a working proxy route.

VMess, VLESS, and other types must match the server configuration. Don’t guess the port, user ID, transport, TLS, server name, or other parameters. Subscription updates may overwrite manual changes. To make a temporary adjustment, first copy the entry into a separate configuration and keep the original group for comparison.

4. System Proxy and Routing: Configure Traffic Entry and Exit Separately

Once you’ve selected an active server, open System proxy at the bottom of the main window or in the tray menu and choose Set system proxy. This directs Windows proxy traffic to the local listening address. Routing rules determine whether traffic that reaches the core uses the proxy, connects directly, or takes another configured outbound route. These are separate settings.

First Test: Start with the System Proxy, Then Check Routing

Route Apps Through the Proxy
  • Under System proxy, select Set system proxy.
  • In Windows Settings → Network & Internet → Proxy, check the local address and port.
  • If your browser uses its own proxy extension, check whether it overrides the system settings.
The Core Selects the Outbound Route
  • Start with a standard routing preset provided by the client.
  • Check whether custom rules send the target domain direct or block it.
  • Temporarily switch to global proxy mode for comparison, then restore your usual rules.

Changing routing won’t send an app through the proxy if it doesn’t use the system proxy. And if traffic reaches the core but is routed directly, resetting the system proxy alone won’t fix it.

For initial troubleshooting, don’t enable TUN, change DNS, and turn on LAN access all at once. First get a browser that follows the system proxy working, then expand coverage as needed. TUN works differently and involves a virtual network interface, permissions, and routing, so it’s best tested separately from basic installation issues.

Before exiting, select Clear system proxy in the client, then quit from the tray menu. If the browser stops working after an unexpected exit, check Windows proxy settings for a local port that is no longer listening. Remove only the settings from this test; don’t overwrite proxy settings managed by your organization or another app.

5. Local Ports: Check the Listener, Then Find the Process Using It

Listening ports can vary by version and existing configuration. The two numbers below identify common setups; they aren’t a recommendation to make every version use the same ports. Open Settings → Parameter settings and check the local listening ports and inbound types against the core startup log.

10808
A common local inbound port; HTTP support depends on the inbound type
10809
A separate HTTP port used by some older configurations; it may not be present in your setup

If the log shows address already in use or a bind failure, first check whether another client instance or program is using the port. Run this read-only query in PowerShell. If your port is different, change the port number in the query.

Get-NetTCPConnection -State Listen -LocalPort 10808 -ErrorAction SilentlyContinue |
  Select-Object LocalAddress, LocalPort, OwningProcess

Get-Process -Id 1234

In the second command, 1234 is an example process ID. Replace it with the OwningProcess value from the previous command. No output means no TCP listener was found at the time of the query; it may not have started yet, so this doesn’t prove the port is in use.

6. Missing Runtime or Core Startup Failure

An app that won’t open at all and a window that opens but can’t connect are different problems. For the first, check the interface’s dependencies; for the second, start with the core log. Re-importing a subscription won’t fix a missing runtime, and installing a runtime won’t fix incorrect server authentication parameters.

SymptomCheck FirstWhat to Do
Prompt to install or update .NETFramework name, version, and architecture shown in the promptInstall the matching runtime required by the release package. If it specifically requires Windows Desktop Runtime, don’t substitute a component that includes only the base runtime.
Interface opens, but core files are missingWhether extraction completed and any security software actionsAfter confirming the source is trustworthy, extract the entire package again. Don’t copy individual core files from another version’s folder.
Core exits immediately after configuration is generatedThe first specific error in the logDetermine whether the issue is an incompatible configuration field, a missing resource file, or a port bind failure, then fix the relevant error.
TLS or certificate errorSystem time, server name, and server-side parametersSync your system clock and verify the configuration. Don’t treat disabling certificate validation as a general fix.

Don’t install a fixed major version of .NET just because another version’s guide recommends it. Framework dependencies can change between releases, so follow the current startup prompt. To check installed components, run dotnet --list-runtimes in a command prompt. If the command isn’t available, that alone doesn’t mean a self-contained build can’t start.

v2rayN, V2Fly, and Xray are different layers of software: v2rayN manages configurations, while V2Fly and Xray are core projects that grew out of the Project V ecosystem. VLESS and certain security or transport combinations require a core that supports them. Don’t cycle through cores in the interface just to clear an error; first check what the server requires.

7. Verify Connectivity: Separate App Issues from Connection Issues

A successful latency test only shows that the request used by that test received a response; it doesn’t mean every browser request will work. For a meaningful test, keep the same active server and destination, and change only one setting at a time so you can identify what made the difference.

  1. Confirm the core is running: The startup log shows no configuration parsing or port bind errors, and the local port is listening.
  2. Specify the proxy explicitly: Make a request to the local HTTP or mixed inbound from the command line. This bypasses whether the app reads the system proxy settings.
  3. Test the browser: If the command succeeds but the browser fails, check the system proxy, extensions, and the browser’s own network settings.
  4. Restore your usual rules: If a temporary switch to global proxy mode works, restore your original routing and check whether a specific rule caused the difference.

The command below applies only if local port 10808 provides an HTTP or mixed proxy. If you have only a SOCKS inbound, don’t use an HTTP proxy address. --max-time 15 limits the entire request to 15 seconds; it’s not a speed test or a guarantee that the service is available.

curl.exe --proxy http://127.0.0.1:10808 --max-time 15 -I https://example.com/

If the local port can’t be reached, recheck the listener. If the local connection succeeds but the request then times out remotely, check the active server, server status, and routing logs. Any HTTP response—even a non-success status code—means an HTTP endpoint responded. Check the response content rather than treating it automatically as a proxy failure.

Once setup is complete, note the working active configuration, listening port, and routing mode, and back up any necessary configuration. Before upgrading, keep a rollback copy of the existing folder. Verify startup and connectivity in a new folder before switching your usual shortcut, and avoid changing the interface edition, core, and custom rules all at once; otherwise, it’s harder to pinpoint the cause of a problem.

Download v2rayN