github Leadaxe/singbox-launcher v1.2.1
release v1.2.1

4 hours ago

Release v1.2.1

Downloads

macOS (Universal) - Supports both Apple Silicon and Intel

Option 1: Installation Script (Recommended)

Install with a single command (version v1.2.1):

curl -fsSL https://raw.githubusercontent.com/Leadaxe/singbox-launcher/develop/scripts/install-macos.sh | bash -s -- v1.2.1

The script will:

  • Download the release archive
  • Extract and install to /Applications/
  • Fix macOS quarantine attributes and permissions
  • Launch the application automatically

Option 2: Manual Installation

  1. Download: singbox-launcher-v1.2.1-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)

  1. Download: singbox-launcher-v1.2.1-win64.zip
  2. Extract the ZIP file to a folder, for example: C:\Program Files\singbox-launcher\
  3. Run singbox-launcher.exe from that folder
    • You may need administrator rights to install to Program Files
    • The launcher will automatically download sing-box and wintun.dll on first launch

Windows 7 (x86, legacy)

  1. Download: singbox-launcher-v1.2.1-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

Linux Support

⚠️ Linux build temporarily unavailable - мы ищем тестировщика для ручного тестирования перед включением автоматической сборки.

Checksums

See checksums.txt for SHA256 checksums of all files.

v1.2.1 — hotfix: MASQUE / AnyTLS / SSH nodes lost their fields in config.json

Core pinned: sing-box-lx 1.14.0-lx.4 (unchanged). No config migration needed — update the launcher and hit Update/Rebuild; existing wizard state and sources are reused as is.

EN

Highlights

  • Wizard-generated WARP (MASQUE) works again. The config generator emitted MASQUE nodes without any of their protocol fields — only tag/type/server/server_port survived — so sing-box check rejected the config with masque: at least one of ip/ipv6 is required and the VPN never started. The full field set (keys, tunnel ip/ipv6, profile, network, sni, mtu, timeouts) now reaches config.json. Existing state is fine: the wizard source kept the complete URI all along, so after updating no re-registration is needed.
  • AnyTLS nodes authenticate again. The same emitter gap dropped the AnyTLS password (and session-pool tuning) from config.json — nodes connected to the server but failed auth.
  • SSH nodes carry their credentials. SSH outbounds were emitted bare (tag/type/server/server_port), losing user, password, private key, and host-key material.

Technical / Internal

  • Root cause: GenerateNodeJSON (core/config/outbound_generator.go) builds each outbound through a per-scheme switch and had no branches for masque, anytls, ssh — everything their parsers put into node.Outbound was silently dropped. WireGuard was unaffected because it goes through GenerateEndpointJSON, which marshals the whole map. Both the wizard server-source path and the subscription path converge on this emitter, so one fix covers both.
  • Added URI→JSON emission tests for all three schemes (generator_masque_test.go, generator_anytls_ssh_test.go); the pre-existing tests covered only the share-URI parsers, which is why the truncation went unnoticed. Emitted nodes verified against a with_quic lx core: sing-box check passes.

RU

Основное

  • WARP (MASQUE) из мастера снова работает. Генератор конфига эмитил MASQUE-ноды без протокольных полей — доезжали только tag/type/server/server_port, — поэтому sing-box check отклонял конфиг с ошибкой masque: at least one of ip/ipv6 is required, и VPN не стартовал. Теперь в config.json попадает полный набор полей (ключи, туннельные ip/ipv6, profile, network, sni, mtu, таймауты). Ваши данные целы: источник в мастере всё это время хранил полный URI, после обновления перерегистрация WARP не нужна.
  • AnyTLS-ноды снова проходят аутентификацию. Та же дыра в эмиттере выкидывала из config.json пароль AnyTLS (и настройки пула сессий) — нода подключалась к серверу, но не проходила auth.
  • SSH-ноды несут свои учётные данные. SSH-outbound эмитился голым (tag/type/server/server_port) — терялись user, password, приватный ключ и host-key.

Техническое / Внутреннее

  • Корневая причина: GenerateNodeJSON (core/config/outbound_generator.go) собирает outbound через per-scheme switch, и веток для masque, anytls, ssh в нём не было — всё, что их парсеры клали в node.Outbound, молча выпадало. WireGuard не пострадал: он идёт через GenerateEndpointJSON, который маршалит весь map целиком. Путь wizard-источника и путь подписок сходятся в одном эмиттере, так что фикс закрывает оба.
  • Добавлены эмиссионные тесты URI→JSON для всех трёх схем (generator_masque_test.go, generator_anytls_ssh_test.go); прежние тесты покрывали только парсеры share-URI — потому усечение и оставалось незамеченным. Эмитированные ноды проверены на ядре с with_quic: sing-box check проходит.

Don't miss a new singbox-launcher release

NewReleases is sending notifications on new releases.