Release v2.4.2
Downloads
macOS (Universal) - Supports both Apple Silicon and Intel
Option 1: Installation Script (Recommended)
Install with a single command (version v2.4.2):
curl -fsSL https://raw.githubusercontent.com/Leadaxe/singbox-launcher/develop/scripts/install-macos.sh | bash -s -- v2.4.2The script will:
- Download the release archive
- Extract and install to
/Applications/ - Fix macOS quarantine attributes and permissions
- Launch the application automatically
Option 2: Homebrew (stable releases only, available a few hours after the release)
brew install --cask leadaxe/tap/singbox-launcherUpdate later with brew upgrade --cask singbox-launcher. The Cask installs the latest stable release, not a pre-release.
Option 3: Manual Installation
- Download:
singbox-launcher-v2.4.2-macos.zip - Extract the ZIP file
- Remove quarantine attribute (required):
xattr -cr "singbox-launcher.app" && chmod +x "singbox-launcher.app/Contents/MacOS/singbox-launcher"
- Double-click
singbox-launcher.appto run- If macOS blocks the app, go to System Settings → Privacy & Security and click "Open Anyway"
- Alternatively, right-click the app and select "Open" (first time only)
Windows (amd64)
Option 1: Installer (Recommended)
- Download:
singbox-launcher-v2.4.2-win64-setup.exe - Run it and confirm the administrator prompt once. The launcher goes to
C:\Program Files\singbox-launcher, your data to%LOCALAPPDATA%\singbox-launcher;sing-box.exe,wintun.dll, the config template and Mesa3D are included, nothing is downloaded on first launch- Tasks: desktop shortcut, Start with Windows, software OpenGL (Mesa3D) for RDP / VMs without a GPU
- Installing over a previous version keeps your data; uninstall from Settings → Apps asks whether to remove the data too
- The installer is not code-signed yet: if SmartScreen shows "Windows protected your PC", click More info → Run anyway
Option 2: Portable ZIP
- Download:
singbox-launcher-v2.4.2-win64.zip- or
singbox-launcher-v2.4.2-win64-full.zip— full bundle:sing-box.exe,wintun.dll, the config template and Mesa3D (mesa3d/, used only when no hardware OpenGL — RDP, VMs) are already inside, nothing is downloaded on first launch
- or
- Extract the ZIP file to a folder your account can write to, for example
D:\Tools\singbox-launcher\— settings stay next to the program (portable.txt)- Under
C:\Program Files\the launcher keeps its data in%LOCALAPPDATA%\singbox-launcherinstead
- Under
- Run
singbox-launcher.exefrom that folder — no administrator rights, no UAC prompt- TUN needs administrator rights: Start offers Restart as administrator or Switch to proxy mode
- The regular archive downloads
sing-boxandwintun.dllon first launch
Windows 7 (x86, legacy)
- Download:
singbox-launcher-v2.4.2-win7-32.zip - Extract the ZIP file to a folder and run
singbox-launcher-win7-32.exe- For Windows 7 / 32-bit or legacy compatibility only
- Runs as administrator (UAC prompt on every start), settings stay next to the program (
portable.txt); no installer and no daemon service
Linux Support
⚠️ Linux build temporarily unavailable - мы ищем тестировщика для ручного тестирования перед включением автоматической сборки.
Checksums
See checksums.txt for SHA256 checksums of all files.
Release notes — v2.4.2 (2026-11-12)
EN
A patch release after v2.4.1. Core sing-box-lx 1.14.4-lx.33 (was 1.14.4-lx.30), contract 1.1.167 (was 1.1.156).
New
- Node window: a node pasted or saved as Xray JSON (
protocol,settings,streamSettings) is now accepted on the JSON tab and in the Origin field, and the node is rebuilt from it with Regen; before, the save was refused for a missingtype. The source keeps its dialect: a sing-box document is stored as a document trimmed to itsoutbounds/endpoints, an Xray config — to itsoutbounds; everything else (route,dns,routing,log) is dropped with one message. Pasting the other dialect over a node switches the node's source kind instead of being rejected. - Several tunnels, each for its own networks: a WireGuard, AWG, OpenVPN or OpenConnect node has a new switch Only its own networks on its Settings tab. With it on, only the networks the tunnel announces go into it — WireGuard allowed IPs, routes and domains pushed by an OpenVPN or OpenConnect server — and everything else follows your rules; the tunnel does not have to be chosen as a direction. The new preset Tunnel routes on the Rules tab does the work and can be dragged to set its priority. Nothing changes until the switch is turned on. A tunnel that announces the default route takes all traffic.
- Anti-sniff decoy follows core
lx.33: besides the mode, Settings now has Decoy sending (on retry by default — the first attempt goes clean, a failed one is repeated with the byte; or always), Decoy node types (defaultmasque) and Decoy relay types (defaultvless). The two type lists are picked from a fixed set: chosen types are shown as chips, a chip is removed with a click, a type is added from the drop-down. A core older thanlx.33runs without the decoy — if a service or a remote machine relies on it, update the core there. - Configurator and Traffic Profiler for Local and for a machine can be open side by side: one Configurator window per target (
Configureon a machine no longer just raises the local window), and both window titles name the target —Config Wizard — Local/— <machine>,Traffic Profiler — <target>, which stays in the title while recording.
Changed
- Taildrop settings now belong to the node and travel with its backup. If Taildrop is allowed on a node, clipboard and links from your own devices are accepted and received files go to Downloads by default; both can be turned off on the Settings tab of the node. Per-device permissions are gone, old settings are not migrated. Nodes of remote machines do not have these settings: their files are saved with the Save button in the node window.
- Double copy goes to one device chosen on the Settings tab of the node; nothing is sent until you choose it.
- A clipboard text or a link sent while acceptance is off no longer disappears silently: a notification names the device and where to turn it on.
- The JSON tab of a Tailscale node has a read-only field below the editor with what the build adds to the stored body, real values included:
disable_taildrop,state_directory,taildrop_directory. The tab used to claim it showed exactly what reachesconfig.json.
Fixed
- A daemon service or a remote machine running a core older than the launcher's no longer rejects the whole config with
unknown field "quic_sniff_decoy". Settings the core does not know yet are left out of the config sent to it (the log names them), and Anti-sniff decoy (was QUIC sniff decoy) now defaults to Off, as in the core: until you change a tunnel option in Settings, nothing about it is written to the config. If you relied on the decoy for MASQUE, Hysteria2 or TUIC behind a relay, turn it on in Wizard → Settings. - The tailnet state directory of a machine no longer leaks into the local
config.jsonafter the machine's Configurator was opened — the path is now applied only to that machine's build. - Renaming a Tailscale node no longer registers a new device: the state directory name is now a parameter of the node, and new nodes get a random one.
Core
sing-box-lx 1.14.4-lx.33(was 1.14.4-lx.30). A breaking config change in the core:lx.quic_sniff_decoyis now an object{mode, outbound_type, detour_type, send}— the old string or boolean form fails to load, andlx.awg_masqueradeis removed. The decoy byte now also covers XHTTP over HTTP/3 and AmneziaWG with QUIC masquerade (ip=quic), and by default is sent only on a retry after a failed first attempt. The launcher writes the new form itself; a service or a remote machine must run corelx.33to keep the decoy.
Technical / Internal
- Contract 1.1.157–1.1.161: Taildrop settings as fields of the node record (
state_dir_id,taildrop_double_copyand the accept/auto-save switches travel with the backup); the node record fieldown_routesand thetunnel-routespreset (SPEC 180). - Contract 1.1.163: new
registry/core_config.json(config keys outside node bodies withmin_core: rootlx,lx.mtu_align,lx.quic_sniff_decoy,lx.awg_masquerade); the build applies it for the target's core (installed core for Local, the machine's passport version for a remote), the daemon apply — for the service core.quic_sniff_decoydefault isoff; an empty rootlxblock is no longer emitted. - Contract 1.1.164: core
lx.33turnedlx.quic_sniff_decoyinto an object and removedlx.awg_masquerade. Registry:awg_masqueradevariable removed, new mobile-onlyquic_sniff_decoy_send/quic_sniff_decoy_outbounds/quic_sniff_decoy_detours.core_config.jsongainsforbidden: true: such a key is dropped from the config for any core version, unknown included — set forlx.awg_masquerade. - Contract 1.1.165:
origin.kindis the dialect of the stored source —singbox | xray | uri | wg_ini(wasuri | wg_ini | json), decided once by the registry (source_kinds.json) when the text comes in; stored text is never re-sniffed. The 1.1.87 rule «a node's source is only a sing-box body» is withdrawn: the source is kept whole in its dialect, documents trimmed to node arrays on save, arrays cut into records on input. Oldjsonkinds are migrated on load by the registry (unrecognized →singbox), the source text is left as is. Corpus:node_edit/*(kinds, documents kept, two Xray cases),backup/legacy_origin_kind_jsonwith the neworigin_kindexpectation. - Contract 1.1.166: the launcher template writes
lx.quic_sniff_decoyas the object{mode, outbound_type, detour_type, send}, same as LxBox; the three companion variables arein: both, the two type lists are a closedtext_list+options(nooptions_open);core_config.jsongates the key belowlx.33. Settings renders a closedtext_list+optionsas a multi-select (chips + drop-down). - Contract 1.1.167: a list setting that was cleared stays empty — an empty
text_listvalue in the state is an explicit empty list and is no longer replaced by the template default (the default applies only while the setting is untouched or reset).
RU
Патч после v2.4.1. Ядро sing-box-lx 1.14.4-lx.33 (было 1.14.4-lx.30), контракт 1.1.167 (было 1.1.156).
Новое
- Окно узла: узел, вставленный или сохранённый как Xray JSON (
protocol,settings,streamSettings), теперь принимается на вкладке JSON и в поле Origin и пересобирается из него по Regen; раньше сохранение отклонялось из-за отсутствияtype. Источник хранится в своём диалекте: документ sing-box — документом, обрезанным доoutbounds/endpoints, конфиг Xray — доoutbounds; остальное (route,dns,routing,log) не сохраняется, об этом одно сообщение. Вставка другого диалекта поверх узла меняет вид его источника, а не отвергается. - Несколько туннелей, каждый для своих сетей: у узла WireGuard, AWG, OpenVPN и OpenConnect на вкладке Settings появился переключатель Only its own networks. С ним в туннель идут только сети, которые он объявляет, — allowed IPs у WireGuard, маршруты и домены, присланные сервером OpenVPN или OpenConnect, — а остальное идёт по вашим правилам; выбирать туннель Направлением не нужно. Работу делает новый пресет Tunnel routes на вкладке Rules, его приоритет задаётся перетаскиванием. Пока переключатель не включён, ничего не меняется. Туннель, объявляющий маршрут по умолчанию, забирает весь трафик.
- Anti-sniff decoy приведена к ядру
lx.33: кроме режима, в Settings появились Decoy sending (по умолчанию на повторе — первая попытка идёт чисто, неудачная повторяется с байтом; либо всегда), Decoy node types (по умолчаниюmasque) и Decoy relay types (по умолчаниюvless). Оба списка типов выбираются из готового набора: выбранные типы показаны чипами, чип убирается нажатием, тип добавляется из выпадающего списка. Ядро старшеlx.33работает без обманки — если она нужна службе или удалённой машине, обновите ядро там. - Конфигуратор и Профайлер трафика для Local и для машины можно держать открытыми одновременно: у каждой цели своё окно Конфигуратора (
Configureу машины больше не поднимает локальное окно), а заголовки обоих окон называют цель — «Мастер конфигурации — Локально» / «— <машина>», «Профайлер трафика — <цель>», и во время записи тоже.
Изменено
- Настройки Taildrop теперь принадлежат узлу и переносятся с его бэкапом. Если на узле разрешён Taildrop, буфер и ссылки от своих устройств принимаются, а файлы сохраняются в Downloads; обе настройки можно выключить на вкладке Settings узла. Разрешений по устройствам больше нет, старые настройки не переносятся. У узлов удалённых машин этих настроек нет: их файлы сохраняются кнопкой Save в окне узла.
- Двойное копирование уходит на одно устройство, выбранное на вкладке Settings узла; пока устройство не выбрано, ничего не отправляется.
- Текст для буфера или ссылка при выключенном приёме больше не пропадают молча: уведомление называет устройство и место, где включить приём.
- На вкладке JSON узла Tailscale под редактором появилось поле только для чтения: что сборка добавит к хранимому телу, с настоящими значениями —
disable_taildrop,state_directory,taildrop_directory. Раньше вкладка утверждала, что показывает ровно то, что попадёт вconfig.json.
Исправлено
- Служба или удалённая машина с ядром старше ядра лаунчера больше не отвергает весь конфиг с ошибкой
unknown field "quic_sniff_decoy". Настройки, которых ядро ещё не знает, в отправляемый ему конфиг не попадают (лог называет их), а Anti-sniff decoy (бывшая QUIC sniff decoy) по умолчанию теперь Off, как в ядре: пока вы не меняли настройки туннелей в Settings, в конфиг о них ничего не пишется. Если обманка была нужна для MASQUE, Hysteria2 или TUIC за реле — включите её в Мастере → Settings. - Каталог состояния tailnet машины больше не попадает в локальный
config.jsonпосле открытия Конфигуратора машины — путь действует только в сборке этой машины. - Переименование узла Tailscale больше не регистрирует новое устройство: имя каталога состояния стало параметром узла, у новых узлов оно случайное.
Ядро
sing-box-lx 1.14.4-lx.33(было 1.14.4-lx.30). Несовместимое изменение конфига ядра:lx.quic_sniff_decoyтеперь объект{mode, outbound_type, detour_type, send}— прежняя строка или bool не загружаются, аlx.awg_masqueradeудалён. Байт-обманка теперь действует и на XHTTP поверх HTTP/3, и на AmneziaWG с маскировкой под QUIC (ip=quic), и по умолчанию шлётся только на повторе после неудачной первой попытки. Лаунчер пишет новую форму сам; службе или удалённой машине для обманки нужно ядроlx.33.
Техническое / Внутреннее
- Контракты 1.1.157–1.1.161: настройки Taildrop как поля записи узла (
state_dir_id,taildrop_double_copy, переключатели приёма и автосохранения переносятся с бэкапом); поле записи узлаown_routesи пресетtunnel-routes(SPEC 180). - Контракт 1.1.163: новый
registry/core_config.json(ключи конфига вне тел узлов сmin_core: корневойlx,lx.mtu_align,lx.quic_sniff_decoy,lx.awg_masquerade); сборка применяет его под ядро цели (установленное ядро у Local, версия из паспорта у машины), apply службы — под ядро службы. Дефолтquic_sniff_decoy—off; пустой корневой блокlxв конфиг не пишется. - Контракт 1.1.164: ядро
lx.33сделалоlx.quic_sniff_decoyобъектом и удалилоlx.awg_masquerade. Реестр: переменнаяawg_masqueradeснята, новые только-mobilequic_sniff_decoy_send/quic_sniff_decoy_outbounds/quic_sniff_decoy_detours. Вcore_config.jsonпоявилосьforbidden: true: такой ключ снимается из конфига при любой версии ядра, включая неизвестную — поставлено уlx.awg_masquerade. - Контракт 1.1.165:
origin.kind— диалект хранимого источника,singbox | xray | uri | wg_ini(былоuri | wg_ini | json); определяется один раз реестром (source_kinds.json) при входе текста, хранимый текст заново не нюхается. Норма 1.1.87 «источник узла — только sing-box тело» отменена: источник хранится целиком в своём диалекте, документы при сохранении обрезаются до узловых массивов, массивы на входе режутся на записи. Старый видjsonмигрирует при загрузке по реестру (не опознано →singbox), текст источника не меняется. Корпус:node_edit/*(виды, документы целиком, два кейса Xray),backup/legacy_origin_kind_jsonс новым ожиданиемorigin_kind. - Контракт 1.1.166: шаблон лаунчера пишет
lx.quic_sniff_decoyобъектом{mode, outbound_type, detour_type, send}, как LxBox; три переменные-спутника —in: both, оба списка типов — закрытыйtext_list+options(безoptions_open);core_config.jsonснимает ключ у ядер старшеlx.33. Settings рисует закрытыйtext_list+optionsмножественным выбором (чипы + выпадающий список). - Контракт 1.1.167: очищенная настройка-список остаётся пустой — пустое значение
text_listв состоянии это явный пустой список, дефолт шаблона его больше не подменяет (дефолт действует, пока настройку не трогали или после сброса).