Windows setup order: choose the desktop or WPF edition based on your system architecture, then extract the files, update your subscription, and select an active server. Finally, verify the local proxy, system proxy, and routing. This guide covers first-time installs and configuration migrations. Port numbers are shown as examples, not universal defaults. TUN is not a substitute for basic connectivity checks.
Choosing an Edition: Desktop vs. WPF
Interface options: The v2rayN desktop edition uses a cross-platform interface, while the WPF edition targets Windows and retains a classic desktop experience. The difference is primarily in the interface and runtime environment—not a guarantee of faster connections. Performance depends on the server configuration, selected core, network, and server status.
Desktop Edition
RecommendedFirst-time setup: Start with the desktop edition that matches your Windows architecture, then configure subscriptions, the system proxy, and routing using the options in its current interface. It’s recommended as a straightforward way to learn the desktop workflow, not for any protocol or speed advantage.
Best for: First-time setup and users who prefer a cross-platform desktop interface.
WPF Edition
Keep your familiar workflow: Choose this edition if you already know the classic Windows interface and want to keep using it. Before installing, check whether the package includes the required runtime. Don’t assume you need—or don’t need—an extra dependency based on the WPF name alone.
Best for: Users familiar with the classic interface who want to maintain their setup using established Windows workflows.
Check your architecture: In Windows, open Settings → System → About and check “System type.” Choose x64 for standard 64-bit Intel or AMD devices; for ARM devices, prefer an ARM64 package listed on the download page. “64-bit” doesn’t necessarily mean x64, and a working interface doesn’t guarantee that the core executable has the right architecture.
Download and Launch: Use a Writable Program Folder
Prepare the files: Choose the Windows package on the download page. Fully extract archives; for installer packages, follow the setup wizard. Don’t launch the main program directly from an archive preview window, as the core, data files, and relative paths may not load correctly.
-
Check Your Architecture
System information: Open Settings → System → About, note your system type, then choose the matching desktop or WPF package.
-
Extract All Files
Folder permissions: Extract the archive to a dedicated folder you can write to, such as
D:\Tools\v2rayN. Don’t copy just the main program or mix in core files from an older version. -
First Launch
Launch the program: Run
v2rayN.exefrom the extracted folder. If you see a missing runtime or file-loading error, fix the launch issue before setting up subscriptions. -
Keep the Logs
Troubleshooting: Confirm that the main window appears and check the logs. For the first connectivity test, leave TUN off and don’t run another copy of v2rayN at the same time; this helps avoid port conflicts and proxy settings overwriting each other.
Permissions: Running as an administrator is generally not required for ordinary system proxy use. TUN may need permissions for a virtual network adapter or related services; follow the prompts for your version. Don’t permanently disable system protection to get past a single error. On a managed device, check your organization’s policies first.
Import a Subscription: Tell Update Links from Server Links
Add a subscription: In the main window, open Subscription Group → Subscription Group Settings. Add a group, enter a recognizable note, paste the full link into the subscription address field, and save. Subscription URLs often contain access tokens; don’t include them in screenshots, public tickets, or group chats.
Update in the right order: From the Subscription Group menu, try updating the subscription without a proxy first. If the subscription source is only reachable through a proxy, you’ll need a verified working server before choosing the update-through-proxy option. Enabling proxy updates won’t establish a connection when you have a subscription URL but no working server.
- Empty list: Check the update log to distinguish a failed request from a parsing error. A redirect to a login page, an expired subscription, or an extra space copied with the URL can all prevent the server list from appearing.
- Single link: If you have a server share link such as
vmess://orvless://, use the appropriate import option, such as Server → Import bulk URLs from clipboard. Don’t enter it as a subscription update URL. - Active server: After importing, select a server, right-click it, and set it as the active server. Confirm that the active entry in the main window has changed. A server appearing in the list doesn’t mean it’s been selected.
- Auto-update: In Subscription Group Settings, check the auto-update fields and units supported by your version. Frequent updates won’t improve connection speed. If an update fails, check the URL and network route used for the update first.
Keep configurations organized: Manage manually added servers separately from subscription servers. Updating a subscription may rebuild entries in that group, and changes to subscription-generated server settings may be overwritten next time. For a temporary test, copy the server to a separate group and record the original values first.
Cores and Servers: Check the Fields Before Connecting
Match the core to your setup: v2rayN is a management interface; the core handles the actual protocol. Check the core-related settings under Settings → Parameter Settings, then confirm the core in the startup log. VLESS and REALITY require an Xray core that supports those features. Don’t confuse the client, protocol, and core names.
VLESS + REALITY: What to Check
- Core
- Xray with support for the required configuration
- Server port
- Use the value provided by the server
- serverName
- Use the name provided by the server
- Public key and shortId
- Match the server requirements
- flow
- Use xtls-rprx-vision only if required by the server
Keep fields consistent: Don’t change subscription-provided transport, security, or fingerprint settings without a reason. Servers using the same protocol can still require different parameters.
VMess + WebSocket + TLS: What to Check
- User ID
- Must match the server configuration
- Transport
- WebSocket
- Path
- Use the server path; it is case-sensitive
- Host
- Use the value required by the reverse proxy or server
- TLS name
- Match the certificate and server requirements
Names can differ: The connection address, WebSocket Host, and TLS serverName can all be different. Set each one to match the server configuration rather than copying the same value into every field.
Sync your clock: In Windows, open Settings → Time & language → Date & time, check that the clock is accurate, and sync it. A clock that’s off can affect certificate validity checks and some protocol authentication. For TLS errors, check the time, server name, and certificate chain before enabling certificate verification bypass.
System Proxy: Verify the Local Endpoint and Port
Local endpoint: Go to Settings → Parameter Settings and check the local listening port and options such as allowing LAN connections under Basic Settings. The example below uses 127.0.0.1:10808 as a configured local mixed inbound. Use it for HTTP or SOCKS tests only if you’ve confirmed that the inbound supports both. The actual settings and startup log take precedence.
Enable the proxy: After confirming the core has started successfully, choose System Proxy → Set system proxy from the main window or tray menu. This changes Windows proxy settings and mainly affects apps that follow them. Command-line tools, games, and standalone networking components may need separate configuration; not all traffic is automatically routed through the proxy.
# PowerShell: Check whether the example local port is listening
Test-NetConnection -ComputerName 127.0.0.1 -Port 10808
# Test with curl.exe if available and the port supports HTTP proxy connections
curl.exe --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 --head https://v2raymark.com/
How to read the results: TcpTestSucceeded set to True only means a TCP connection to that port succeeded. It doesn’t prove the server works—the port could even be in use by another process. An HTTP status from the request means it got a response, but check routing and logs to confirm whether it went through a remote server. A direct connection may also succeed under your rules.
- Port refused: Check whether the core exited, its configuration failed to generate, or the listening port differs from the example.
- Explicit proxy works: If the command succeeds but your browser doesn’t, check the browser’s own proxy settings and extensions, and look for conflicts with the Windows system proxy.
- Network exposure: If you only need the proxy on this device, don’t enable “Allow connections from the LAN” just to troubleshoot, and never expose the proxy listener directly to the public internet.
Routing and TUN: Expand Only After Basic Connectivity Works
Choose a routing setup: Select a rule set for your needs from Routing in the main window, then check the details under Settings → Routing Settings. Rules are generally matched in order, so an earlier match may prevent later rules from taking effect. “Bypass LAN,” “direct,” and “proxy” describe where traffic goes—not server quality.
| Configuration layer | What it controls | First checks |
|---|---|---|
| System proxy | Whether apps that follow system settings send requests to the local proxy | Whether the browser and Windows proxy settings match |
| Routing rules | Whether traffic entering the core goes direct, through a proxy, or gets blocked | Rule order, destination domain, and final outbound |
| DNS | How domains are resolved and which domain information rules can access | Whether the DNS resolution path works with the expected outbound |
| TUN | Captures configured network traffic through a virtual network adapter | Permissions, adapter, routes, and DNS capture status |
When to use TUN: Enable it only when you need to capture traffic from apps that don’t follow the system proxy. First leave TUN off and verify that an active server works with an explicit proxy. Then enable TUN and test the target app. This helps separate server issues from virtual adapter, DNS, and system routing problems.
Check split routing: A regular webpage loading doesn’t mean every domain uses the same outbound. If some sites work and others don’t, check which rule matches the destination domain, then review DNS and remote connection logs. Don’t change DNS, routing, the core, and the server all at once; it’ll be difficult to tell which change made a difference.
- LAN access: If you need to reach a printer, shared folder, or local service, check that private IP ranges bypass the proxy as expected.
- Domain routing: IP and domain rules rely on different information. Don’t assume what matched based on the rule name alone.
- Advanced configuration: If you need to change DNS or rule order, read the Advanced Setup guide first so you understand the rule fields before editing them.
Common Issues: Diagnose by Symptom and Keep a Recovery Path
Troubleshoot in order: Confirm the app and core are running, then check the local port, subscription contents, active server, system proxy, and routing. “Connection refused,” “timed out,” and “TLS handshake failed” occur at different stages; reinstalling the client won’t fix every issue.
The main window doesn’t appear after launching. Should I try again?
The subscription updated successfully, but no webpages load. What should I check?
The browser can’t access the internet after I close v2rayN. What should I do?
Can I overwrite the program folder while v2rayN is running?
You’re done when the client launches, the subscription parses, an active server is selected, the local inbound is reachable, and requests follow the expected outbound. Record the interface type, system architecture, core, and any changed fields for later reference. When asking for help, redact subscription URLs, user IDs, and other sensitive settings.