Desktop platform for network routing and traffic analysis. 15+ VPN protocols, configuration depth and API at enterprise level. Built on top of the sing-box-lx fork (upstream sing-box + XHTTP transport + AmneziaWG 2.0) as execution engine — on every platform, including the Windows 7 32-bit legacy build.
Repository: https://github.com/Leadaxe/singbox-launcher
🌐 Languages: English | Русский

A cross-platform desktop client (Windows, macOS, Linux) that wraps sing-box and adds the entire surface around it: visual configurator, multi-subscription management, per-server switching with ping, network observability, declarative routing with preset bundles, a local HTTP API, and self-healing supervision.
Three layers that together define the product:
if/if_or conditions, DNS server selection with conditional rules.127.0.0.1, 24 endpoints covering state read/write, action triggers, traffic capture control, and a one-shot snapshot endpoint for support workflows.type=xhttp on vless/vmess/trojan nodes is parsed, generated into config.json, and round-tripped back to share URIs (no longer degraded to httpupgrade). Runs on the bundled sing-box-lx core.jc / jmin / jmax, s1-s4, h1-h4, plus CPS packets i1-i5), parsed from both wireguard:// and awg:// URIs and emitted into endpoints[]. h1-h4 accept AWG 2.0 randomization ranges (lo-hi) — the core picks a fresh in-range value on every handshake (core ≥ 1.13.13-lx.6). AWG endpoint MTU is auto-clamped to 1280.vpn://… link (the .vpn file content) or the raw [Interface]/[Peer] text of a WireGuard/AmneziaWG .conf straight into Sources: the launcher decodes the profile / detects the conf blocks and imports them as regular WG/AWG endpoints.vless://, vmess://, …) can be mixed in a single configuration.X-Hwid, X-Hwid-Limit, Announce, Subscription-Userinfo).auto-route, auto-redirect, and find_process enabled by default.if / if_or). Toggle as checkboxes.invert.⚠ badge on Configurator open; engine never tries to fetch SRS over a not-yet-up VPN.prefer_ipv4 / prefer_ipv6 / ipv4_only / ipv6_only.⚠ DnsTimeout / ⚠ TcpRstEarly surfacing concrete diagnostic signals.[restart 2/3] during recovery.stage → rename for config / state / settings; no half-written files on kill -9 or power loss.⌘R / Ctrl+R reconnect (kill sing-box for restart), ⌘U / Ctrl+U update subscriptions, ⌘P / Ctrl+P ping all proxies.-start (auto-start VPN on launch), -tray (start minimized to tray). Useful for autostart, system services, and headless deployment.vless://, vmess://, trojan://, ss://, hysteria2://, wireguard://) from the matching outbound in config.json.GET /debug/snapshot or Copy snapshot button packages template + state + cache + config into a single JSON for bug reports.🔬 dbg button in Traffic Profiler flips sing-box log_level=debug with atomic rebuild and revert.sing-box binary (and wintun.dll on Windows). The core is the sing-box-lx fork (XHTTP + AmneziaWG 2.0) from its GitHub Releases — on every platform, including the Windows 7 32-bit legacy-windows-7 build (with a GitHub-proxy mirror fallback if GitHub is blocked).singbox-launcher -start # auto-start VPN on launch
singbox-launcher -tray # start minimized to system tray
singbox-launcher -start -tray # combined — headless autostart scenario
Useful for OS-level autostart (LaunchAgents / Task Scheduler / systemd --user) and for running the launcher as a background service that drives sing-box without showing a window.

Add multiple subscription sources, each with its own update schedule and per-source raw cache. The Servers tab exposes selector groups (proxy-out, vpn ①, ru VPN, etc.) defined in your ParserConfig and shows per-server latency with one-click switching. Active outbound is mirrored in the system tray for quick swaps without opening the main window.
Per-source SubscriptionMeta surfaces upstream state — profile title, support URL, traffic usage (UploadBytes / DownloadBytes / TotalBytes), expiration date, last-fetch status, and provider announcements (📢 on success-with-announce, ⚠ on error-with-announce — actionable URL in the UI).
Share URI — right-click any proxy row in the Servers tab → first menu line shows the Clash API outbound type (lowercase: vless, vmess, trojan, selector, direct, …), then Copy link generates a share URI from the matching outbound in config.json (or from a WireGuard endpoint[] entry if the tag isn't an outbound). Convenient for moving a server to another device or sharing it with a teammate.

Two-level rule model:
enum, dns_server, outbound with whitelists), local SRS rule-sets, conditional fragments (if / if_or), and DNS-server definitions. Toggle as checkboxes. Includes ready-made bundles like ru-direct (Russian traffic → direct), ads-all (ad-block via SRS), Telegram routing, BitTorrent splitting, and more.Matchers cover the full sing-box surface: domain (4 variants), IP CIDR, ports, network, protocol, process, package name, GeoSite / GeoIP via SRS, composite rules with invert, per-rule outbound chains through selectors (urltest / failover).
The Subscription identification section (right side) implements SPEC 061 — the canonical XTLS / Remnawave subscription-header protocol. Random per-installation HWID, opt-out toggle, optional hash-based device model. Regenerate at any time.

Per-DNS-server enable/disable, multiple transports (UDP / DoH / local), strategy (prefer_ipv4 / prefer_ipv6 / ipv4_only / ipv6_only), per-domain DNS rules pointing to specific servers (e.g. domain=mysite.ru → test server), default DNS resolver selection. SRS-based domain rules supported via the same library as routing rules.

TUN inbound (system VPN driver), MTU, stack selection (system / gvisor), TLS root certificate store, URLTest target and interval, custom proxy-in inbound — all in the wizard, no JSON editing required.
Power tools on the right:

Always-on background capture with a 60-second × 3000-event rolling buffer. Two data sources joined by connection ID: Clash API /connections (per-process metadata from sing-box) and sing-box log tail (DNS resolves, router matches, outbound dials).
Per-process view has four sub-tabs:
Issue classification surfaces concrete problems: DnsTimeout (DNS resolver did not respond), TcpRstEarly (TCP closed <1s with 0/0 bytes — firewall RST / TLS fail / block). Verbose mode (🔬 dbg) toggles log_level=debug with atomic config rebuild and revert. Pre-session backfill copies the last 60 seconds of matching events in
$ claude mcp add singbox-launcher \
-- python -m otcore.mcp_server <graph>