Skip to content

release v2.4.2

Latest

Choose a tag to compare

@github-actions github-actions released this 12 Nov 01:18

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.2

The 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-launcher

Update later with brew upgrade --cask singbox-launcher. The Cask installs the latest stable release, not a pre-release.

Option 3: Manual Installation

  1. Download: singbox-launcher-v2.4.2-macos.zip
  2. Extract the ZIP file
  3. Remove quarantine attribute (required):
    xattr -cr "singbox-launcher.app" && chmod +x "singbox-launcher.app/Contents/MacOS/singbox-launcher"
  4. Double-click singbox-launcher.app to 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)

  1. Download: singbox-launcher-v2.4.2-win64-setup.exe
  2. 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

  1. 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
  2. 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-launcher instead
  3. Run singbox-launcher.exe from 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-box and wintun.dll on first launch

Windows 7 (x86, legacy)

  1. Download: singbox-launcher-v2.4.2-win7-32.zip
  2. 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 missing type. The source keeps its dialect: a sing-box document is stored as a document trimmed to its outbounds/endpoints, an Xray config — to its outbounds; 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 (default masque) and Decoy relay types (default vless). 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 than lx.33 runs 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 (Configure on 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 reaches config.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.json after 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_decoy is now an object {mode, outbound_type, detour_type, send} — the old string or boolean form fails to load, and lx.awg_masquerade is 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 core lx.33 to 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_copy and the accept/auto-save switches travel with the backup); the node record field own_routes and the tunnel-routes preset (SPEC 180).
  • Contract 1.1.163: new registry/core_config.json (config keys outside node bodies with min_core: root lx, 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_decoy default is off; an empty root lx block is no longer emitted.
  • Contract 1.1.164: core lx.33 turned lx.quic_sniff_decoy into an object and removed lx.awg_masquerade. Registry: awg_masquerade variable removed, new mobile-only quic_sniff_decoy_send / quic_sniff_decoy_outbounds / quic_sniff_decoy_detours. core_config.json gains forbidden: true: such a key is dropped from the config for any core version, unknown included — set for lx.awg_masquerade.
  • Contract 1.1.165: origin.kind is the dialect of the stored source — singbox | xray | uri | wg_ini (was uri | 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. Old json kinds 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_json with the new origin_kind expectation.
  • Contract 1.1.166: the launcher template writes lx.quic_sniff_decoy as the object {mode, outbound_type, detour_type, send}, same as LxBox; the three companion variables are in: both, the two type lists are a closed text_list + options (no options_open); core_config.json gates the key below lx.33. Settings renders a closed text_list + options as a multi-select (chips + drop-down).
  • Contract 1.1.167: a list setting that was cleared stays empty — an empty text_list value 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 снята, новые только-mobile quic_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 в состоянии это явный пустой список, дефолт шаблона его больше не подменяет (дефолт действует, пока настройку не трогали или после сброса).