Desktop and WPF are two interface options for v2rayN, not two proxy protocols. If you’re installing v2rayN for the first time or need cross-platform support, start by evaluating Avalonia Desktop. If your Windows setup is already working well, you can stick with WPF. This guide compares installers, runtime requirements, subscription migration, proxy modes, and troubleshooting to help you choose and switch without losing your existing settings.
Desktop vs. WPF: The Interface Is Not the Core
The main differences are the UI framework and supported platforms. Desktop uses Avalonia to provide a cross-platform interface for Windows, macOS, and Linux. WPF is a Windows desktop UI framework, so the WPF version is for Windows. “Desktop” in the filename doesn’t mean it’s a server edition or that it automatically routes all network traffic after installation.
| Comparison | Avalonia Desktop | WPF |
|---|---|---|
| UI framework | Avalonia | Windows Presentation Foundation |
| Supported platforms | Windows、macOS、Linux | Windows |
| Typical workflow | Cross-platform layout, with some differences across operating systems | Familiar Windows desktop experience; easy to keep your existing workflow |
| Runtime requirements | Depends on whether the package is self-contained and which platform it targets | Depends on whether the package is self-contained and whether the .NET Desktop Runtime is required |
| Protocol support | Depends on the core and configuration in use | Depends on the core and configuration in use |
| Migration considerations | System integration, paths, permissions, and feature locations | Compatibility with existing settings, dependencies, and core updates |
v2rayN manages subscriptions, servers, routing, and core processes; the selected core handles the actual connections. VMess and VLESS are protocol names. Xray and V2Fly are separate core projects, while Avalonia and WPF are UI technologies. Switching to Desktop doesn’t make a node faster or automatically enable protocol options that weren’t supported before.
Bottom line: Compare performance under the same conditions
Test with the same node, core version, routing rules, and proxy mode. If any of these differ, the results can’t tell you whether Avalonia or WPF performs better.
Choose by platform: Either version on Windows; Desktop on other desktop OSes
For a fresh install, you can try Desktop first. Windows users with a stable setup don’t need to migrate just because the interface has a different name. Choose based on your operating system, the features you need, and your established workflow—not on the assumption that cross-platform means identical features. Menus, tray behavior, and system proxy support can vary between releases, so check the installed app and release notes.
Avalonia Desktop
RecommendedA strong option to evaluate for a new installation. On Windows, choose the desktop installer. On macOS, select ARM64 or x64 for your processor. On Linux, check both the processor architecture and package format for your distribution. Test subscription updates, the system tray, system proxy, and any TUN features you need before settling on it.
Best for: Fresh installs, cross-platform workflows, and macOS or Linux desktops
Windows WPF
A good choice if you want to keep a proven Windows workflow. If your subscriptions, routing, keyboard shortcuts, and tray controls are all working, you can continue using WPF and keep the client and core up to date using the release notes. If something goes wrong, check dependencies, permissions, or node settings first; changing the UI won’t fix every issue.
Best for: Stable Windows setups and users who rely on a familiar interface and workflow
- Windows: Go to Settings → System → About to check your system type. The x64 installer on the download page is for x64 systems; don’t infer your architecture from the computer brand alone.
- macOS: Open About This Mac from the Apple menu. Choose ARM64 for Apple silicon or x64 for an Intel processor. Don’t make cross-architecture translation your default for a first install.
- Linux: Check your architecture with
uname -m:x86_64corresponds to x64, andaarch64to ARM64. Debian- and Ubuntu-based systems typically use DEB packages; Fedora and other RPM-based systems use RPM packages.
Runtime Requirements: A Launching UI Doesn’t Mean the Proxy Is Ready
Runtime requirements depend on the specific release package. It’s not as simple as “Desktop doesn’t need .NET, but WPF always requires a separate .NET install.” Either UI may be distributed as a self-contained package that includes its managed runtime. Framework-dependent packages require a compatible runtime on your system. For WPF, check specifically for the .NET Desktop Runtime—not just the standard .NET Runtime.
- Check the installer first: Confirm the operating system, architecture, and release notes for the package. If the app reports a missing runtime, install the runtime type and major version specified in the message. Don’t install a random version and keep retrying.
- Then check that the app starts: Make sure the main window opens and the configuration directory is writable. Don’t unpack Desktop and WPF files into the same directory; they could overwrite components or the core.
- Next, start the core: Select a server and check the logs. A missing core file, insufficient execute permissions, or a port conflict can leave the window open while the network remains unavailable.
- Finally, route app traffic: Enable the system proxy or explicitly configure a test app to use the local proxy. Installation is complete only when the proxy entry point, routing, and remote connection are all working.
On macOS, the first launch may also require allowing the app to run and granting network permissions. On Linux, TUN may require virtual network interface access and permission to modify routes. These are operating system integration issues, and changing UI frameworks may not fix them. Confirm that a standard proxy connection works before setting up traffic capture that requires elevated permissions; this keeps troubleshooting focused.
Feature Coverage: Test Subscriptions, System Proxy, and TUN Separately
You can verify everyday use in three stages: check that the subscription creates the right server list, the core can connect, and app traffic reaches the client. The system proxy mainly affects apps that honor system proxy settings. TUN captures traffic through a virtual network interface, but is still subject to routing, DNS, permissions, and exclusion rules. These are separate features, and an “enabled” message isn’t a substitute for testing an actual connection.
These ports illustrate the testing steps; they aren’t guaranteed defaults for every version. Some configurations use separate SOCKS and HTTP inbounds, while others use a mixed inbound. Check the actual listening port and inbound type under Settings → Parameter Settings; menu labels may vary by release. The commands below apply only if the corresponding inbound is configured.
# SOCKS inbound: resolve the target domain through the proxy
curl --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 https://example.com/
# HTTP inbound: establish an HTTPS connection through the HTTP proxy
curl --proxy http://127.0.0.1:10809 --connect-timeout 10 https://example.com/
A successful explicit proxy test only confirms that this proxy path works; it doesn’t prove that the system proxy or TUN covers other apps. If a command returns content but your browser doesn’t load pages, check its proxy settings and the system proxy status. If it can’t connect to the local port, check that the core is running and the port matches. If it connects to the local proxy but still times out, check the node, DNS, and routing.
- Subscriptions: Add the URL under Subscription Groups and update it. Check the number of nodes, group name, and protocol fields. Don’t rely on the update message alone—inspect the server entries it creates.
- Routing: Test with the same rules and distinguish direct outbound traffic from proxied traffic. After switching interfaces, check the paths to existing rules files and external data files.
- TUN: Stop any other client instance first, then check the required permissions, DNS, and routing. Avoid running two TUN clients at once; both could change system routes and make the cause of a problem hard to identify.
Migrating from WPF to Desktop: Back Up and Test Separately
Keep your existing setup intact and create a separate environment you can roll back from. You can usually add subscription URLs again, but subscriptions don’t include all local settings. Check custom routing, listening ports, keyboard shortcuts, DNS, core selection, and TUN settings individually. Even though both are v2rayN, don’t assume every version can use an existing configuration directory as-is.
Migration Plan: Keep the Old Setup and Test the New One
Existing WPF setup
- Use the backup or export feature in your current version.
- Record local ports, core, routing, and DNS settings.
- Keep the original configuration directory, but exit the app and core.
- Store subscription URLs securely; don’t include them in public screenshots.
New Desktop setup
- Use a separate directory or the platform’s standard installation method.
- Add the subscription again and select a known working node.
- Test a standard proxy connection before restoring custom rules one by one.
- Test the tray, auto-start, and TUN last.
Run only one setup at a time. Once the new one is verified, decide whether to remove the old installation. This helps prevent port conflicts and conflicting system proxy settings.
- Record a baseline: Note the old client and core versions, active node, and proxy mode. Record a test destination that loads successfully; there’s no need to send a complete log to anyone.
- Start with a minimal configuration: Add only the subscription and one working node. Leave complex routing, scheduled tasks, and TUN disabled for now to reduce variables during the first test.
- Restore settings one at a time: Test after each change. If the problem starts after restoring routing, check the rules and data files first instead of reinstalling the UI.
- Check what happens on exit: Close or quit the client and verify that the system proxy is restored as expected. If the old app left proxy settings behind, network problems may occur before the new app starts.
Cross-platform migration also involves path formats. Windows drive paths can’t be used directly on macOS or Linux. If an exported configuration references external rules, certificates, or other files, select their paths again on the target system. Don’t copy the entire configuration directory over to save a step; that can bring along settings specific to the old operating system.
Common Issues: Startup Failures, Port Conflicts, and Choosing the Wrong Version
Use a consistent troubleshooting sequence: installer and dependencies → core startup → local inbound → node connection → system proxy or TUN. This helps separate UI problems from network problems and prevents a failed subscription update from being mistaken for an Avalonia compatibility issue. Start with these focused checks before deciding whether to switch versions.
Desktop won’t open. Will reinstalling WPF fix it?
First, note the startup error. Check the installer’s operating system and architecture, then check the runtime or graphics dependencies mentioned in the error. On macOS or Linux, WPF isn’t an alternative for that platform. On Windows, first check whether files from different packages were mixed or a required runtime is missing.
Both versions are open. Why can’t the new one connect?
Fully exit the old version, then check the new version’s logs for an address-in-use error. On Windows, use netstat -ano | findstr :10808 to check whether the example port is in use; replace it with the port you actually use. Don’t just close the window—the app and core may still be running in the system tray.
The subscription imported successfully, but nodes won’t connect. Why?
Check the core selected for the server, its transport method, and TLS settings, then review the connection log. A subscription being parsed successfully doesn’t mean the current core supports every protocol field. First test the same node that worked in the old setup so you don’t mistake a dead node for a UI difference.
I only use Windows. Do I have to switch to Avalonia?
No. If your existing WPF setup meets your needs, you can keep using it. To evaluate Desktop, test the tray, system proxy, and everyday features in a separate setup first. Base your decision to migrate on actual features and maintenance needs, not the name of the UI framework.
Can I copy my desktop configuration directly to an Android client?
Add the subscription again on Android rather than copying the desktop configuration directory. v2rayNG uses the Xray core, while v2flyNG uses the V2Fly core; check that the selected client supports your node’s protocol. Don’t carry over desktop listening ports, system proxy, or TUN settings to a mobile device.
The choice comes down to two rules: On macOS and Linux, start with the Desktop package for your platform. On Windows, consider Desktop for a fresh install; if you have a stable WPF setup, decide whether to migrate based on your needs. Whichever UI you choose, first test one node, one inbound, and one proxy mode before adding custom routing or TUN.
Download v2rayN for Your Platform
Choose Windows Desktop or Windows WPF in the download center, or get the macOS or Linux package for your architecture. For a first-time setup, follow the guide to add a subscription and test the proxy.