At a glance

For anyone setting up v2rayN on Windows or macOS for the first time. Choose the download for your OS and processor, prepare the runtime, import a subscription, and select an active server. Then check the local listener, system proxy, and routing. Start with the system proxy and leave TUN off. If something goes wrong, troubleshoot in this order: app startup, core startup, proxy connection, then traffic routing.

Choose a download: Desktop Edition, WPF, and processor architecture

v2rayN is a desktop client for managing server configurations, running proxy cores, and providing system proxy controls. It does not include servers. Before you begin, get a valid subscription URL or server share link. Opening the main window alone does not establish a working connection.

On Windows, go to Settings → System → About and check System type. On macOS, open the Apple menu → About This Mac and check Chip or Processor. Choose ARM64 for Apple silicon and x64 for Intel. For Windows on ARM, check the release notes too; the file extension alone does not tell you whether a package will run.

Desktop Edition

Recommended

Uses a cross-platform interface. Download the package for Windows or macOS. The setup is similar on both platforms, but system permissions and proxy settings differ. This guide focuses on this edition.

Best for: first-time users and anyone who wants a consistent workflow across both desktop platforms.

Windows WPF Edition

Keeps the classic Windows interface and runs on Windows only. It is not a macOS installer. Differences in interface framework do not mean differences in server protocols; configuration support depends on the core in use.

Best for: users familiar with the classic Windows interface who want to keep using it.

Check the current instructions on the download page. Installers, archives, and disk images require different steps, so not every release can simply be extracted and run. On first use, don't launch both interface editions at the same time; they may compete for local ports.

First launch on Windows: app folder and runtime

An archive may contain the app, core directories, and other required files. Moving only the main executable to your desktop can leave the window working while the core fails to start. If you downloaded an archive, extract all its contents to a fixed location you can write to, such as C:\Users\Public\Tools\v2rayN, and make sure the folder permissions suit your needs.

  1. Extract the package

    For an archive, select Extract All in File Explorer, then open the extracted folder. For an installer, follow the setup wizard. Don't run the app from an archive preview window.

  2. Install the required runtime

    If startup reports a missing .NET runtime, note the required runtime type, major version, and architecture, then install it from Microsoft. The WPF edition needs the matching .NET Desktop Runtime. Installing only the SDK or a runtime for another architecture may not fix the issue.

  3. Launch as a standard user

    Open the main app with standard user permissions and test the basic proxy setup first. Don't treat Run as administrator as a universal fix. Handle extra permissions for features such as TUN only after the basic connection works.

  4. Check write permissions

    Open Settings, save once, then quit normally and relaunch. If the language or other options revert, check whether the configuration folder is writable and make sure you haven't launched a different copy of the app.

First launch on macOS: app location and security prompts

For a .dmg download, open the disk image and drag the app to Applications as instructed. For an archive, extract it and move the app to a permanent location. After installation, eject the disk image and launch the app from Applications instead of running a temporary copy from the image.

macOS system proxy settings are configured per network service. After switching between Wi-Fi and Ethernet, go to System Settings → Network → the active service → Details → Proxies to check the current settings. On older macOS versions, look under System Preferences → Network → Advanced.

First-time setup: language, subscription, and active server

The interface language does not affect server protocols. To change it, look for the language option under Settings → Preferences, save, and restart if prompted. Some releases place the language option elsewhere in Settings. This guide uses Chinese menu names; look for the equivalent options in your interface.

  1. Add a subscription group

    Open Subscription Group → Subscription Group Settings, add a group, and enter a name and subscription URL. Remove any spaces at the beginning or end of the URL, and make sure you copied a subscription link rather than a website login URL.

  2. Update the subscription

    Return to Subscription Group and run the relevant update action. If you don't have a working proxy yet, try updating without one first. Only try updating through a proxy if you already have a working connection and a direct update fails.

  3. Check the import

    Make sure servers appear in the list and have protocol, address, and port values. If you get a webpage or login prompt instead, stop retrying the import and ask the provider to confirm the subscription URL and access requirements.

  4. Set the active server

    Right-click the server you want and select Set as Active Server. Then check the core logs to confirm it starts normally. Selecting a row in the list may not switch the server actually in use.

If you have a single vmess:// or vless:// link, copy it in full and use the Import from Clipboard option under Server. A share link and a subscription URL are different: a share link usually imports one server, while a subscription URL fetches and updates configurations in a group.

System proxy and routing: configure them separately

The system proxy lets apps that follow system proxy settings connect to the local listener. Routing rules determine whether traffic that reaches the core goes through the proxy, connects directly, or is blocked. These settings are not interchangeable. For your first test, use the system proxy and leave TUN off to avoid extra variables such as permissions, virtual adapters, and DNS interception.

10808 is an example port for reference, not a guaranteed default for every version. First check the actual local listener type and port under Settings → Preferences, then match your system settings. If the interface provides separate HTTP and SOCKS ports, enter each under the correct protocol; don't copy settings for a combined listener.

Check the local listener

Listen address
127.0.0.1 (example for local access)
Listener type
HTTP/SOCKS combined; check the current settings
Example port
10808
LAN access
Leave off during initial setup

Confirm the core is listening on this port before configuring apps to use it. Don't expose the listener on every network interface just to troubleshoot.

Check proxy connections

System proxy
Select Set system proxy automatically
HTTP address
127.0.0.1
HTTP port
Match the actual HTTP or combined listener
TUN mode
Keep off during initial testing

The system proxy does not route all device traffic. Apps that connect directly or use their own proxy settings may ignore it.

On Windows, check the result under Settings → Network & internet → Proxy. On macOS, check the proxy options for the active network service. For the first test, don't enable a manual proxy, an automatic configuration script, and another proxy app at the same time; otherwise, it can be hard to tell which settings are taking effect.

Test the connection: an open port doesn't guarantee a working website

Test from the client outward. First confirm that the app and core are running, then check the local port, and finally test a proxy request. The commands below assume you have confirmed that the HTTP or combined port is 10808. If yours differs, replace the number first. The destination in the commands is just an example.

Windows: check the listener, then send a request

Test-NetConnection -ComputerName 127.0.0.1 -Port 10808
curl.exe --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com/

macOS: specify the proxy explicitly

curl --proxy http://127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com/

Specifying a proxy explicitly avoids differences in whether a terminal reads system proxy settings, but core routing rules still apply. A successful Windows port test means only that a local process accepted the connection. An HTTP response means only that the destination was reachable under the current rules; it doesn't prove that every website or app will work.

What you seeCheck firstNext step
Local connection refusedIs the core running, and does the port match?Check the core logs for startup failures or port conflicts
Local connection succeeds, but request times outActive server, remote connection, and routingCheck the logs for the same request, not just older errors
Command works, browser doesn'tIs the browser using the system proxy?Check the browser's own proxy settings and reconnect
Some domains failRouting rules, DNS, and destination service statusRetest the same destination, changing only one setting at a time

Common first-use questions

The window opens, so why can't I access the internet?

Check in order that a server was imported, set as active, and started successfully in the core. Then confirm that System Proxy is set to Set system proxy automatically. If an explicit proxy command works but the browser doesn't, check how the browser connects before changing server protocols.

A port is in use. Should I change all the ports?

First quit any other v2rayN instance or core process that's still running. On Windows, run netstat -ano | findstr :10808 to check listening ports, then look up the matching PID in Task Manager. Don't stop system processes you don't recognize. If you do change the port, update the settings in every app that uses the proxy.

What if the first subscription update times out?

Check that the URL is complete, the subscription is still valid, and the system date and time are correct. If you don't have a working proxy, don't keep retrying with Update through proxy. Try that option only if you have a working server and a direct update fails. For more help, see subscription update troubleshooting.

Can't access websites after quitting the client?

Reopen the client, select Clear system proxy under System Proxy, then quit normally. If the app stopped unexpectedly, clear the local address it left behind on the system proxy settings page. Make a note of any proxy or script required by your workplace network before changing or removing it.

Should I turn on TUN right away?

No. First verify the basic connection with a browser and an explicit proxy command. Configure TUN separately only if an app ignores the system proxy and you need to route its traffic. Check permissions, routing, and DNS, then retest requests that worked before. TUN is not a required fix for a failed connection.

After the initial setup

A successful setup isn't just a changed icon. Confirm that the active server is clear, the core starts without errors, requests follow the expected route, and your normal network connection works again after you quit. Keep this minimal working setup, then add startup options, extra rules, or TUN one at a time so you can roll back changes if needed.