This guide is for users deciding between the v2rayN Avalonia desktop and WPF editions. Check the operating system first, then your tray and system proxy preferences, and finally the runtime and core directories. By the end, you’ll know which package to download, which settings to migrate, and how to verify that the proxy is actually working.
Key Differences Between the Avalonia Desktop and WPF Editions
The first difference is the UI technology, not the proxy protocols. Avalonia is a cross-platform UI framework, so the same v2rayN desktop interface can be built for Windows, macOS, and Linux. WPF is a Windows desktop UI technology, so the WPF edition is Windows-only. Both editions handle subscription management, server selection, routing, system proxy controls, and core process management. Actual connectivity depends mainly on the Xray core supplied with the package or configured by the user—not on which framework renders the window.
With the same valid configuration, VMess, VLESS, Trojan, Shadowsocks, REALITY, and common transport methods do not change automatically when switching between Avalonia and WPF. If the server address, port, user ID, transport, security parameters, and routing rules match, the configuration passed to the core should also match. So “a server works in the WPF edition but not in the Avalonia edition” cannot be attributed to the UI framework alone. Also check the core version, migrated settings, permissions, DNS, and system proxy state.
Avalonia Cross-Platform Desktop Edition
Supports Windows, macOS, and Linux, with menus and controls kept as consistent as possible across platforms. It suits users who want a similar configuration workflow on different desktop systems.
Best for: macOS, Linux, and Windows users who want a cross-platform workflow
Windows WPF Edition
RecommendedUses Windows’ native desktop UI conventions, so tray behavior, window focus, file pickers, and system proxy controls typically feel more familiar on Windows.
Best for: a Windows-only daily setup where tray behavior and native desktop interactions matter
The term “desktop edition” can also be confused with “a package that depends on a runtime.” When downloading, check the platform, architecture, UI type, and whether the runtime is bundled; don’t look only for “desktop” in the filename. For Windows x64, framework-dependent packages are usually smaller, but the required .NET runtime must already be installed as described on the page. Self-contained packages include the required runtime components, making them larger but better suited to environments where you don’t want to manage the runtime separately.
Bottom Line: The UI Edition Does Not Determine Protocol Performance
Choose Avalonia or WPF based on your operating system and desktop workflow, then verify the Xray core and server parameters. Switching UI editions solely to chase lower latency usually does not produce repeatable network performance gains.
Comparing OS Support, UI, and Tray Behavior
The operating system is the clearest filter. On macOS and Linux, choose the Avalonia desktop edition because WPF does not run on either platform. Windows gives you both options: use Avalonia for a workflow closer to other platforms; choose WPF if you rely more on the Windows notification area, window minimization, startup behavior, and native file dialogs.
Avalonia’s advantage is a consistent cross-platform structure, but “consistent” does not mean desktop behavior is identical on all three systems. macOS menu bar behavior, tray protocols across Linux desktop environments, and the Windows notification area each work differently. Whether closing the main window exits the app or leaves it in the tray also depends on v2rayN options and desktop support. After the first launch, test closing the window, double-clicking the tray icon, opening the tray context menu, and quitting the program.
| Comparison | Avalonia Desktop Edition | WPF Edition |
|---|---|---|
| Supported platforms | Windows、macOS、Linux | Windows |
| UI focus | Similar layout and interactions across platforms | Windows-native desktop controls and interactions |
| Tray behavior | Depends on the specific system and desktop environment | Uses the Windows notification area |
| File and directory selection | Uses a cross-platform adapted picker | Uses the Windows desktop picker |
| Recommended migration approach | Export settings first, then import them on the target platform | Migrate the configuration directory within Windows |
High-DPI scaling also deserves a separate check. At 125%, 150%, or different scaling levels across multiple monitors, inspect node-list column widths, QR code windows, log windows, and menu positions. If text is clipped, first check system scaling and the current v2rayN version, then try restarting the client. Don’t modify server settings to fix a purely visual issue.
Linux users should also confirm that their desktop environment supports a system tray. A missing tray icon does not mean the core has stopped running. Return to the main window to check connection status and logs, or inspect the local listening port. On macOS, handle the network access permission prompt during the first run, then verify the change by visiting a website in a browser after switching the system proxy.
Do System Proxy, Routing Rules, and Core Operation Differ?
v2rayN’s “system proxy” and “core operation” are separate layers. Once the core starts, it listens on local SOCKS, HTTP, or mixed proxy ports. The system proxy feature points the proxy settings of Windows, macOS, or the Linux desktop environment to those ports. If the core is running but the system proxy was not applied, apps configured to use a proxy manually may connect while an ordinary browser still connects directly.
On Windows, the WPF edition calls the system proxy API, with the usual “System Proxy” entry available in the main interface or tray menu. The Avalonia edition provides the same capability, but the menu location and status icon may vary by version and platform. After switching it, don’t rely only on the menu checkmark: verify that the system proxy address points to 127.0.0.1 and that the port matches the local port shown under “Settings” → “Parameter Settings”.
- Select a known-working server from the server list and set it as the active server.
- Open “Settings” → “Parameter Settings” and note the local SOCKS, HTTP, or mixed proxy port.
- Start the core, check the logs for a successful listening message, and make sure there are no port conflicts or configuration parsing errors.
- Open the system proxy from the main interface or tray menu, then choose automatic configuration or global proxy mode as needed.
- Open a browser and test an actual visit, then switch once to direct mode to confirm that the traffic path changes with the setting.
Routing rules are also executed by the generated core configuration. The logic for domain rules, IP rules, geosite, geoip, direct exits, proxy exits, and blocked exits does not change between Avalonia and WPF. However, the route editor’s table layout, button positions, and default column widths may differ. After migration, check rule order because an earlier rule may match first and change the final outbound path.
If you want only specific apps to use the proxy, leave the system proxy off and enter 127.0.0.1 with the local port inside those apps. Be clear about the proxy type: an app configured for SOCKS5 must use the SOCKS listening port, while HTTP requires the HTTP or compatible mixed port. Reversing 10808 and 10809 is a common reason an app cannot connect even though the core has started after migration.
Check port 10808 on Windows:
netstat -ano | findstr :10808
Check port 10808 on macOS or Linux:
lsof -nP -iTCP:10808 -sTCP:LISTEN
Check in This Order: Listening Port Before System Proxy
First confirm that the core is listening on the port specified in Parameter Settings, then check whether the system proxy points to the same address. If nothing is listening, repeatedly toggling the system proxy will not fix a core startup failure, configuration parsing error, or port conflict.
Choose an Edition by Operating System and Workflow
For Windows-only users, the WPF edition is usually the more straightforward starting point, especially if you’re accustomed to the notification area, minimizing to the tray, startup with Windows, and native Windows window behavior. If your current WPF setup is stable and you have no cross-platform migration needs, there is no reason to switch solely because Avalonia is cross-platform.
A sensible reason for a Windows user to choose Avalonia is wanting a similar interface across macOS or Linux devices, or wanting to become familiar with the cross-platform menu structure. Before switching, back up subscription URLs, routing rules, and necessary custom settings. Don’t copy the entire old program directory over the new one, because the UI edition, runtime structure, and configuration layout may change between releases.
Recommended Setup: Choose the UI Edition for Your Desktop Environment
Primary Windows desktop
- Prefer the WPF edition
- Verify the notification area and startup behavior
- Confirm the .NET 8 desktop runtime requirement
- Keep the familiar system proxy workflow
Cross-platform desktop setup
- Use the Avalonia desktop edition
- Test tray support on each system
- Migrate settings through export and import
- Check system proxy permissions separately on each platform
The right choice is not whichever UI framework is newer, but whichever edition best fits your current operating system, tray environment, and configuration workflow.
macOS and Linux users do not need to compare the two editions repeatedly; choose the Avalonia build for the matching platform and processor architecture. Check your device architecture before downloading to avoid using an x64 build on incompatible hardware. Linux users should also verify the execution permissions and desktop dependencies required by the package format. On macOS, complete the security approval and network permission checks required on first launch.
Work and personal environments may lead to different choices. If a work device imposes centralized restrictions on system proxy changes, startup behavior, or background apps, follow the device management rules and test with an app-level proxy. On a personal device, decide whether to enable startup based on how often you use v2rayN. In either environment, don’t run two v2rayN instances at once and have them compete for the same listening port.
- Windows only: Start with the WPF edition unless you specifically need a consistent cross-platform interface.
- Windows plus other desktop platforms: Use Avalonia across platforms to reduce the cost of switching between menu structures.
- Tray stability matters: Test WPF first on Windows; on Linux, confirm tray protocol support in your desktop environment.
- Existing stable setup: Keep the working edition and test migration through exported settings instead of overwriting the original directory.
- Runtime installation is restricted: Check the download page and choose a build compatible with your system and runtime environment.
How to Migrate Between Editions
The goal of migration is to preserve essential settings without bringing old UI caches, window state, or incompatible options directly into the new edition. Exit v2rayN first, then confirm that no v2rayN or Xray processes remain in Task Manager or the system process list. Copying settings while the app is still running may produce incomplete files.
If you use subscriptions, record the subscription group names, URLs, update methods, and custom notes first. For manual servers, use the client’s export feature to save share links or configurations. For routing, record the enabled rule sets, rule order, default outbound, and DNS settings. These are more valuable to migrate than window size, theme, or list column widths.
- Update the subscription once in the old edition and remove duplicate servers you no longer use.
- Export the necessary server configurations and separately record subscription URLs and group settings.
- Open “Settings” → “Parameter Settings” and record the local ports, log level, system proxy mode, and startup status.
- Exit the old edition completely, then extract or install the new edition into a separate directory.
- After starting the new edition for the first time, leave the system proxy off. Import subscriptions and servers, then check the fields.
- Start the core with one server, confirm that the logs look normal, and then enable the system proxy for a browser test.
- Check routing and DNS, and decide whether to keep the old directory only after testing is complete.
If the old edition used 10808 but the new edition generated a different port on first launch, browser extensions, development tools, or command-line environments that depend on the old port will not update automatically. Change the new port back to the original value or update each client setting, but make sure two programs never listen on 127.0.0.1:10808 at the same time.
If the server list looks normal but connections fail after migration, compare the core logs first instead of deleting every subscription. Check the server address resolution, system time, transport parameters, REALITY fields, TLS server name, and local port conflicts. If every server fails, the problem is more likely to involve the core, permissions, DNS, or the system proxy. If only one server fails, inspect that server’s parameters first.
Can I copy the entire old directory after switching to Avalonia?
It’s not recommended. Export servers and subscriptions from the old edition, complete the first launch in a new directory, and restore routing, DNS, and parameter settings one by one. This avoids carrying over window caches or edition-specific settings.
What should I do if the tray icon is missing after launch?
First check whether the main window is still running, then review the close-window and tray options under “Settings” → “Parameter Settings”. On Linux, also confirm that the desktop environment has tray support enabled. A missing icon alone does not prove that the core has exited.
The system proxy is enabled, but the browser still connects directly. What should I do?
Check the local listening port, then verify that the system proxy points to 127.0.0.1 and the same port. Next, inspect the core logs for port conflicts, DNS resolution failures, or configuration loading errors.
What should I do if the WPF edition says the runtime is missing?
Install the matching .NET 8 desktop runtime according to the download instructions, then restart v2rayN. If installing a separate runtime is inconvenient, choose a compatible self-contained build offered on the download page.
Can both editions be kept at the same time?
Yes, they can be placed in separate directories for migration testing, but do not run them simultaneously. Fully exit the other instance before testing and confirm that local ports such as 10808 and 10809 are not held by an old process.
Pre-Download and Post-Launch Checklist
Before downloading, confirm four things: operating system, processor architecture, UI type, and runtime model. Windows x64 users can choose between Avalonia and WPF; macOS and Linux users should choose the corresponding Avalonia build. The main difference between framework-dependent and self-contained builds is whether runtime components are bundled with the app—not a difference in protocol capabilities.
After launch, verify everything in this order: configuration, core, ports, system proxy, and routing. This separates UI issues from network issues: an open window only proves that the UI process started; a successful listening message in the logs proves that the local proxy endpoint was created; browser traffic switching as expected confirms that the system proxy is fully working.
- Confirm that you downloaded the build for Windows, macOS, or Linux, and that its processor architecture matches the device.
- Windows users should explicitly choose Avalonia or WPF; package size does not indicate how many features are included.
- For a framework-dependent build, first meet the .NET runtime requirement stated on the page.
- After the first launch, go to “Settings” → “Parameter Settings” and record the actual local listening ports.
- Start one working server and check the core logs for configuration parsing or port conflict errors.
- Enable the system proxy and perform an actual access test, then switch back to direct mode to confirm the state change works.
- After importing custom routes, check rule order, the default outbound, and DNS—not just the server list.
- Confirm that closing the window behaves as expected and locate the exit option in the tray menu.
If you’re still unsure, keep the current stable edition and place the other one in a separate directory for a short test. Use the same subscription, server, and routing conditions to compare startup speed, tray behavior, system proxy switching, and wake-from-sleep recovery. After these hands-on checks, the result is usually more reliable than judging by screenshots alone.
Choose a v2rayN Edition by Platform
Windows users can choose the Avalonia desktop or WPF edition based on tray and UI preferences, while macOS and Linux users should choose the corresponding Avalonia build. After downloading, follow the getting-started tutorial to import subscriptions, configure the system proxy, and verify the connection.