How to Install and Set Up v2rayN on Windows: Desktop vs. WPF, Plus Common Issues

Install v2rayN on Windows: choose Desktop or WPF, unpack the right build, install required runtimes, import a subscription, and configure the system proxy.

At a glance

This guide is for first-time v2rayN users on Windows and anyone dealing with startup crashes or no internet after importing a subscription. Check your system architecture and interface edition first, then extract all files, install any required runtimes, import your subscription, and verify the node, local port, and system proxy in order. Change one thing at a time to tell installation issues apart from connection problems.

1. Choose Desktop or WPF, then select your architecture

Open Windows Settings → System → About and check System type. For an x64 processor, choose the Windows x64 package. On an ARM64 device, choose the ARM64 package if that edition offers one. Don’t download a package just because its filename says Windows, and don’t confuse your system architecture with the node protocol.

Desktop edition

Recommended

Uses a cross-platform desktop interface. A good starting point for a first-time setup; choose the Windows architecture listed on the current download page. The interface edition affects menu layout, not node bandwidth or network latency.

Best for: first-time installs and users who prefer a cross-platform interface.

WPF edition

Uses the classic Windows desktop interface. Choose it if you’re already familiar with this layout. Runtime requirements depend on the release package; don’t assume the dependencies in an old guide apply to a newer version.

Best for: users who prefer the classic interface or already have a Windows workflow.

Desktop and WPF refer to the interface implementation; Xray and V2Ray are proxy cores; VMess and VLESS are node protocols. These are different layers. Switching interfaces won’t fix an incorrect server address, and switching cores won’t install the runtimes required by the main application.

2. Extract all files and launch the app outside the archive

  1. Choose the right package

    Go to the download center and select the Windows edition and architecture you need. Check the package details first to see whether it’s an archive, an installer, or a release bundle that includes its runtime environment.

  2. Extract all files

    Extract the archive to a fixed, writable folder such as C:\Tools\v2rayN. Don’t extract only v2rayN.exe, and don’t launch the app from the archive utility’s preview window.

  3. Install required runtimes

    If startup reports a missing .NET component, note the runtime name, major version, and architecture shown in the prompt, then install the matching component. If the WPF package requires the Windows Desktop Runtime, the standard .NET Runtime may not be sufficient.

  4. Check that it starts

    Launch the main application and make sure the main window and log panel open normally. For the first check, use a standard user account. Only follow prompts to elevate permissions later if you enable features such as TUN that require them.

If you’re using an installer, follow its setup wizard; you don’t need to extract an archive as well. If the app crashes on launch, note the error and package type first. Moving the app between folders repeatedly or installing several incompatible runtimes will make troubleshooting harder.

3. Import a subscription and check the node list before connecting

A subscription link provides node configurations; it isn’t a proxy address for your browser. It usually contains access credentials, so treat it like a password. Don’t include the full link in public screenshots or support logs. An expired subscription, exhausted quota, or login page response can all cause an update to fail.

  1. Add a subscription group

    In the main window, open Subscription Groups → Subscription Group Settings and add a group. If your interface has a “+” button, you can use that instead. Enter a recognizable name, then paste the full subscription link into the address field.

  2. Update the subscription

    After saving, choose Update All Subscriptions (without proxy) from the Subscription Groups menu. If you don’t have a working proxy yet, try updating directly first. Menu wording may vary slightly between releases; use the option shown in your version.

  3. Check the node list

    Look for node names, addresses, ports, and protocols. If the list is empty, check the update log before enabling the system proxy. If the response is a web page instead of subscription data, ask your service provider what the link is for.

  4. Set an active node

    Select a node, then set it as the active server from the right-click menu. Run a test such as Test server real connection latency. Once it returns a result, move on to configuring your browser proxy.

Try updating through a proxy only if a working node is already available and the subscription address actually requires a proxy. Real connection latency depends on the test target and current route. For example, 180 ms means that request succeeded and took that long; it doesn’t indicate sustained download speed or guarantee access to every website.

4. Check the local port and system proxy

Open Settings → Parameter Settings and check the port under Basic Settings or the local listening options. The name may vary by version, such as “local mixed listening port.” The example below uses mixed port 10808; if your configuration differs, update the command and system settings together.

10808
Example mixed listening port
127.0.0.1
Loopback address
1–65535
Valid port number range

Older guides sometimes specify separate SOCKS port 10808 and HTTP port 10809. Check your current settings to see whether the installation uses separate listeners; don’t copy those values blindly. HTTP proxy requests must use a port that supports HTTP. A mixed listener can accept the corresponding proxy request types on the same port.

5. System proxy vs. TUN: validate one mode at a time

First-time setup: start with the system proxy, then enable TUN only if needed

System proxy
  • Start with browsers and other apps that follow system proxy settings.
  • Enable it under System Proxy in the main window, then clear it before exiting.
  • Apps that ignore system proxy settings may still connect directly.
TUN mode
  • For cases where traffic needs to be handled at the network level.
  • May require elevated permissions, a virtual network adapter, and support from the selected core.
  • Check for DNS, routing, and virtual network adapter conflicts separately.

Turn off TUN and use the system proxy to verify the node and port first. Test TUN separately only if you need to capture traffic from specific apps, so you don’t change multiple variables at once.

Routing rules and the system proxy are also different things. The system proxy determines whether an app sends requests to the client; routing rules determine whether the client proxies, bypasses, or blocks those requests. For your first setup, choose a standard routing mode in the interface. If a domain behaves unexpectedly, check which rule matched its request.

Don’t assume Global mode automatically covers every Windows app. With the system proxy, an app that doesn’t read system proxy settings won’t connect through the client just because you changed the client’s routing mode. Test with an app that explicitly supports proxies first, then decide whether you need TUN.

6. Test from the command line to separate local and remote failures

Run the following commands in PowerShell, in order. The first checks whether a process is listening on the example port. The second explicitly uses an HTTP proxy, avoiding differences caused by browser cache, extensions, or system proxy settings. You can replace the test URL with an HTTPS site you know is reachable.

Get-NetTCPConnection -State Listen -LocalPort 10808

curl.exe --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com/
ResultWhat it meansNext step
No listener foundThe core isn’t listening on that port, or the example value doesn’t match your settings.Check the parameter settings and core log before switching nodes.
Connection to localhost refusedThe request hasn’t reached the local proxy successfully.Check the port, listening address, and core process.
Timeout after local connectionThe issue may involve the remote connection, DNS, or the target site.Try another test target, then compare the node test with the error log.
HTTP response headers receivedThe explicit proxy request received a response.Continue by testing the system proxy and routing in your browser.

If you see only 200 Connection established, that means the proxy tunnel was established; check the target site’s response or any subsequent errors as well. Even if the final response is 403, distinguish “the site denied access” from “the local proxy didn’t start”—they require different fixes.

7. Common installation issues and how to fix them without reinstalling

Nothing happens when I double-click. Should I reinstall?

Check the taskbar tray and Task Manager first to see whether the app is already running in the background. If the process exits immediately, note the startup message and check the architecture, runtime, and extracted files. Don’t overwrite the old folder and hope for the best. To compare builds, extract the new package to a separate folder, exit the old process, then launch it.

How do I find what’s using the port?

Run Get-NetTCPConnection -State Listen -LocalPort 10808 and note OwningProcess. Then use Get-Process -Id process_id to identify it. First check whether it’s an old core from a duplicate launch. If you switch to another free port, reapply the system proxy and update any apps with manually configured proxy settings.

A node shows latency, but my browser can’t connect. What should I check?

First, run a command that explicitly specifies the proxy. If it succeeds but the browser fails, check the browser’s proxy extension, system proxy address, and routing rules. If the command fails too, check the active node and core log. A basic latency or TCP test doesn’t verify a complete proxy request.

My nodes or settings disappeared after an update. What should I do?

First check whether you launched another copy of the app from a different folder. Before updating, exit the app completely and back up configuration data in the original folder; check your release notes for its exact location. Don’t overwrite configuration files while two interface editions are running. You can import the subscription again, but save custom routing and local settings separately.

I can’t access any websites after exiting. How do I restore the connection?

Reopen the client, select Clear System Proxy under System Proxy, then exit. If the client won’t start, remove the outdated manual proxy from Windows proxy settings. For managed settings on a work device, contact your administrator first. Then check for other software that may still be intercepting network traffic.

8. Post-install checklist

The installation is complete once these checks pass. If a single node times out or one website has an issue later, check the node, target site, and routing rules before switching between Desktop and WPF. Keep the package type, system architecture, and a redacted error log handy to make troubleshooting much faster.

Download clientsWindows · Android · macOS · Linux