# Feature catalog — 2dust/v2rayN

> Canonical page: https://codevetter.com/unpack/v2rayn/feature-catalog

# Feature catalog — 2dust/v2rayN

Scanned commit 28139853a8087d81e1ac7ffaf7013b937958f5d2 (2026-09-20). Generated by codevetter codevetter 1.12.0 on 2026-09-22.

User-facing features center on managing proxy server profiles (11 share-URI protocols plus custom/outbound/group types), subscription groups with scheduled updates and optional subconvert rewriting, and one-click activation that generates a core config and launches the matching core. Around that are system-proxy control per OS (including a PAC file server on Windows), TUN mode with privilege escalation, a full Clash-compatible API panel (proxies/connections/mode switch), batch latency/speed/mixed/UDP testing, per-server traffic statistics, self/core/geo-file updating from GitHub, WebDAV backup, global hotkeys, autostart, QR/clipboard/image import, and regional presets for Russia and Iran.
- Servers can be added per-protocol via dedicated ReactiveCommands (VMess, VLESS, Shadowsocks, SOCKS, HTTP, Trojan, Hysteria2, TUIC, WireGuard, Anytls, Naive) plus Custom, Custom-Outbound, PolicyGroup and ProxyChain types, or bulk-imported from clipboard, screen QR scan, or image file. — [v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs#L23-42](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs#L23-L42) [v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs#L449-559](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs#L449-L559)
- FmtHandler.ResolveConfig dispatches on share-URI prefixes (vmess://, ss://, vless://, trojan://, socks://, socks4/5://, hysteria2://, hy2://, hysteria2+realm://, tuic://, wireguard://, anytls://, naive://, naive+https/quic://) to per-protocol Fmt classes that parse into ProfileItem; GetShareUri does the reverse for export/QR. — [v2rayN/ServiceLib/Handler/Fmt/FmtHandler.cs#L7-110](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Handler/Fmt/FmtHandler.cs#L7-L110) [v2rayN/ServiceLib/Global.cs#L238-250](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Global.cs#L238-L250)
- Subscription update (SubscriptionHandler.UpdateProcess) validates http(s) URLs, honors per-sub custom request headers and User-Agent, supports a 'MoreUrl' list of extra subscription links merged into the result, and optionally rewrites the URL through a subconvert service (default https://sub.xeton.dev/sub?url=) with target/config params. — [v2rayN/ServiceLib/Handler/SubscriptionHandler.cs#L60-195](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Handler/SubscriptionHandler.cs#L60-L195) [v2rayN/ServiceLib/Global.cs#L142-162](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Global.cs#L142-L162)
- ConfigHandler.AddBatchServers tries in order: base64/plain share-URI lists, SS SIP008 JSON, WireGuard INI-style config, inner 'v2rayn://' URIs, then foreign-subscription custom formats; when isSub it first removes the group's old servers, then restores the previously-active node and clones traffic stats onto the new IndexIds. — [v2rayN/ServiceLib/Handler/ConfigHandler.cs#L2037-2135](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Handler/ConfigHandler.cs#L2037-L2135)
- System proxy control (SysProxyHandler.UpdateSysProxy) supports ForcedChange/ForcedClear/Pac/Unchanged per OS: WinInet InternetSetOption + registry fallback on Windows, embedded proxy_set_linux_sh/proxy_set_osx_sh scripts on Linux/macOS, and a PAC mode that hosts a generated pac.txt on a local TcpListener port. — [v2rayN/ServiceLib/Handler/SysProxy/SysProxyHandler.cs#L7-117](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Handler/SysProxy/SysProxyHandler.cs#L7-L117) [v2rayN/ServiceLib/Handler/SysProxy/ProxySettingWindows.cs#L58-198](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Handler/SysProxy/ProxySettingWindows.cs#L58-L198) [v2rayN/ServiceLib/Manager/PacManager.cs#L15-93](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Manager/PacManager.cs#L15-L93)
- TUN mode is supported end-to-end: TunModeItem settings feed CoreConfigContext.IsTunEnabled, sing-box TUN inbound/rule embedded templates exist (tun_singbox_inbound/tun_singbox_rules/tun_singbox_dns), and on Linux/macOS the core is relaunched via sudo when ShouldRunAsSudo(coreType in sing_box/mihomo/Xray) is true. — [v2rayN/ServiceLib/Handler/Builder/CoreConfigContextBuilder.cs#L45-53](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Handler/Builder/CoreConfigContextBuilder.cs#L45-L53) [v2rayN/ServiceLib/ServiceLib.csproj#L52-54](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/ServiceLib.csproj#L52-L54) [v2rayN/ServiceLib/Manager/CoreManager.cs#L298-322](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Manager/CoreManager.cs#L298-L322)
- A Clash-compatible dashboard is provided by ClashApiManager talking to http://127.0.0.1:{StatePort2}: GET /proxies and /providers/proxies merged into ClashItem, delay tests via /proxies/{name}/delay, proxy selection via PUT /proxies/{group}, mode switch via PATCH /configs, and connections list/kill. — [v2rayN/ServiceLib/Manager/ClashApiManager.cs#L9-195](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Manager/ClashApiManager.cs#L9-L195) [v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs#L14-15](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs#L14-L15)
- SpeedtestService.RunLoop supports ESpeedActionType modes over selected servers with a configurable page size and delay interval; UDP testing is delegated to ServiceLib.UdpTest's Socks5UdpChannel; mixed/concurrency counts are floored at Global.SpeedTestConcurrencyCountMin=10. — [v2rayN/ServiceLib/Services/SpeedtestService.cs#L12-80](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Services/SpeedtestService.cs#L12-L80) [v2rayN/ServiceLib.UdpTest/Socks5UdpChannel.cs](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib.UdpTest/Socks5UdpChannel.cs) [v2rayN/ServiceLib/Global.cs#L94-95](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Global.cs#L94-L95)
- Per-server traffic statistics are collected by StatisticsManager via StatisticsXrayService and StatisticsSingboxService polling core APIs, stored in ServerStatItem rows with daily counters reset in InitData, and pushed to the UI through the DispatcherStatisticsRequested event. — [v2rayN/ServiceLib/Manager/StatisticsManager.cs#L18-98](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Manager/StatisticsManager.cs#L18-L98) [v2rayN/ServiceLib/Services/Statistics/StatisticsXrayService.cs](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Services/Statistics/StatisticsXrayService.cs)
- Self/core update (UpdateService) queries GitHub release APIs or follows the /releases/latest redirect, compares SemanticVersions (with sing-box locked to <=1.14.x via LockedMaxVersion), picks an arch-appropriate download URL per OS (incl. linux riscv64/loongarch64), downloads via DownloadService, and for v2rayN itself hands the zip to AmazTool. — [v2rayN/ServiceLib/Services/UpdateService.cs#L9-363](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Services/UpdateService.cs#L9-L363) [v2rayN/ServiceLib/Manager/CoreInfoManager.cs#L232](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Manager/CoreInfoManager.cs#L232)
- Geo data updates download geosite.dat/geoip.dat (default Loyalsoldier v2ray-rules-dat or user-configured GeoSourceUrl) plus sing-box .srs rule-sets collected from routing rules and DNS config into bin/srss/. — [v2rayN/ServiceLib/Services/UpdateService.cs#L139-148](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Services/UpdateService.cs#L139-L148) [v2rayN/ServiceLib/Services/UpdateService.cs#L369-531](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Services/UpdateService.cs#L369-L531) [v2rayN/ServiceLib/Global.cs#L8-9](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Global.cs#L8-L9)
- A background TaskManager long-running loop performs scheduled work: every minute it refreshes subscriptions whose AutoUpdateInterval elapsed, every 20 min saves config+ProfileEx, hourly deletes expired temp/log/test files and refreshes geo files, and daily runs CheckHasUpdateOnlyAll which can publish HasUpdateNotified. — [v2rayN/ServiceLib/Manager/TaskManager.cs#L22-154](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Manager/TaskManager.cs#L22-L154)
- WebDAV backup/restore is implemented in WebDavManager (WebDav.Client package) which uploads a 'backup.zip' into a '<AppName>_backup' directory on a user-configured server with basic-auth credentials. — [v2rayN/ServiceLib/Manager/WebDavManager.cs](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Manager/WebDavManager.cs)
- Autostart is per-OS in AutoStartupHandler: Windows writes HKCU Run key 'v2rayNAutoRun_<md5>' or registers a highest-privilege logon task when admin; Linux writes ~/.config/autostart/v2rayN.desktop from an embedded template; macOS writes and launchctl-loads a LaunchAgent plist. — [v2rayN/ServiceLib/Handler/AutoStartupHandler.cs#L9-251](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Handler/AutoStartupHandler.cs#L9-L251) [v2rayN/ServiceLib/Global.cs#L78-79](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Global.cs#L78-L79)
- Regional presets (ApplyRegionalPreset for Default/Russia/Iran) swap routing/DNS/geo sources (runetfreedom, Chocolate4U lists) and re-download geo files; global hotkeys are configurable per action via Config.GlobalHotkeys and registered through user32 RegisterHotKey on WPF. — [v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs#L780-792](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs#L780-L792) [v2rayN/ServiceLib/Global.cs#L185-211](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/ServiceLib/Global.cs#L185-L211) [v2rayN/v2rayN/Manager/HotkeyManager.cs#L62-101](https://github.com/2dust/v2rayN/blob/28139853a8087d81e1ac7ffaf7013b937958f5d2/v2rayN/v2rayN/Manager/HotkeyManager.cs#L62-L101)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
