github Leadaxe/singbox-launcher v0.9.9-14-g279152b-prerelease
prerelease v0.9.9-14-g279152b-prerelease

pre-release2 hours ago

Release v0.9.9-14-g279152b-prerelease

Downloads

macOS (Universal) - Supports both Apple Silicon and Intel

Option 1: Installation Script (Recommended)

Install with a single command (version v0.9.9-14-g279152b-prerelease):

curl -fsSL https://raw.githubusercontent.com/Leadaxe/singbox-launcher/develop/scripts/install-macos.sh | bash -s -- v0.9.9-14-g279152b-prerelease

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-v0.9.9-14-g279152b-prerelease-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-v0.9.9-14-g279152b-prerelease-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-v0.9.9-14-g279152b-prerelease-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.

⚠️ Pre-release build off v0.9.9-14-g279152b-prerelease — for testing only, not for production. Use the latest stable release on the Releases page if you are not sure.


Upcoming release — черновик

Сюда складываем пункты, которые войдут в следующий релиз. Перед релизом переносим в X-Y-Z.md и очищаем этот файл.

Не добавлять сюда мелкие правки только UI (порядок виджетов, выравнивание, стиль кнопок без смены действия и т.п.). Писать новое поведение: данные, форматы, сохранение, заметные для пользователя возможности.

EN

Highlights

  • Windows 7: stale TUN adapters cleaned automatically. On launcher startup (when sing-box is not already running), accumulated singbox-tun* WinTun ghosts from prior sessions are removed — no manual Device Manager cleanup after upgrade. Also runs after each VPN Stop/Restart (SPEC 065).
  • Proxy-in inbound supports username/password authentication. New Settings vars Proxy-in require authentication + Proxy-in username / Proxy-in password. When the toggle is off (default), the mixed inbound stays open (anonymous) as before. When on, users: [{username, password}] is emitted into the inbound — clients connecting to the local proxy must authenticate.
  • Template engine: #if construct for conditional field inclusion (SPEC 067). Templates can now declaratively include or omit individual fields based on conditions, without Go post-substitute hooks. Supports an expression language with predicates (#in, #not, #notEmpty, #isEmpty, #notIn, #matches) and a runtime-globals namespace @runtime.* (@runtime.platform / @runtime.arch, mapping to runtime.GOOS / runtime.GOARCH; extensible). Two placement modes: map-spread (key inside object → fields merged on truthy condition) and array-element (single-key wrapper → element replaced or removed). vars[].default_value can also be a #if expression — the default is computed at runtime via @runtime.* only (no user-var refs). See docs/TEMPLATE_REFERENCE.md §9 (semantics) + §10 (stock JSON formatting) + docs/CREATE_WIZARD_TEMPLATE.md.
  • Breaking template format: outer if/if_or arrays require @-prefix on every var reference. Bare if: ["tun"] is now a loader error — must be if: ["@tun"]. The bundled bin/wizard_template.json is migrated automatically; existing users will get the new template re-downloaded on the first launch via SPEC 046 invalidation (no user action needed). Custom-template authors must update their if/if_or arrays to @-form before upgrade. Also: vars[].name value runtime is now reserved (runtime-globals namespace @runtime.*) — rename if used (platform / arch are not reserved).

Technical / Internal

  • SPEC 065 follow-up: aggressive cleanup mode (prefix + Wintun only, no CM_PROB_PHANTOM gate) for taskkill stop path; startup hook CleanupStaleTunAtStartUtil in main.go.
  • SPEC 067 implementation: core/template/substitute.go (+377 LOC) — #if walker with map-spread + array-element modes, 8-form predicate language (bare bool, equality, #notEmpty/#isEmpty, #in/#notIn, #matches, #not), @runtime.platform/@runtime.arch runtime globals; template_validate.go (+343 / -16) — load-time validation including reserved-name check + strict @-only outer if/if_or; 39+ new unit tests (TestIf_* + TestOuterIf_* + TestVars_Reserved*). Runtime globals are a namespace @runtime.* (reserved var name runtime; platform/arch freed); vars[].default_value supports #if (runtime-only) via VarDefaultValue.ForPlatform + validateDefaultValueIf.
  • SubstituteVarsInJSON signature changed: now takes goos, goarch string params (previously inferred from runtime). Internal callers updated.
  • Bundled template migrated: 19 elements in if/if_or arrays prefixed with @; inbounds[proxy-in] wraps optional users field in #if keyed on @proxy_in_auth_enabled. Diff is purely additive plus the 19 prefix edits; no semantic regressions.
  • Proxy-in auth: new template vars proxy_in_auth_enabled (bool), proxy_in_username (text), proxy_in_password (text); the last two visible only when proxy_in_auth_enabled is on (vars[].if cascade).

RU

Основное

  • Windows 7: старые TUN-адаптеры чистятся сами. При запуске лаунчера (если sing-box ещё не работает) снимаются накопившиеся ghost singbox-tun* с прошлых сессий — после обновления не нужен ручной Device Manager. Плюс очистка после каждого Stop/Restart VPN (SPEC 065).
  • Proxy-in inbound поддерживает аутентификацию по логин/пароль. В Settings появились Proxy-in require authentication + Proxy-in username / Proxy-in password. Выключено по умолчанию — mixed inbound остаётся открытым (anonymous) как раньше. Включено — в inbound эмитится users: [{username, password}], клиенты должны аутентифицироваться.
  • Template engine: control-construct #if для условных полей (SPEC 067). Шаблон теперь декларативно умеет включать/исключать отдельные поля по условию, без Go-хуков. Expression language с предикатами (#in, #not, #notEmpty, #isEmpty, #notIn, #matches) и namespace runtime globals @runtime.* (@runtime.platform / @runtime.arch, соответствуют runtime.GOOS / runtime.GOARCH; расширяемый). Два режима размещения: map-spread (ключ внутри объекта → поля мерджатся в parent при true) и array-element (single-key wrapper → элемент заменяется или удаляется). vars[].default_value тоже может быть #if — дефолт вычисляется в runtime по @runtime.* (без ссылок на другие vars). См. docs/TEMPLATE_REFERENCE.md §9 (семантика) + §10 (оформление stock JSON) + docs/CREATE_WIZARD_TEMPLATE_RU.md.
  • Breaking template format: outer if/if_or массивы требуют @-префикс у каждого var-ref'а. Голое if: ["tun"] теперь loader error — только if: ["@tun"]. Bundled bin/wizard_template.json мигрирован автоматически; существующим пользователям шаблон скачается заново на первом запуске через механизм инвалидации SPEC 046 (без действий юзера). Авторам кастомных шаблонов — обновить if/if_or на @-форму до апгрейда. Также: имя runtime в vars[] теперь зарезервировано (namespace runtime-globals @runtime.*) — переименовать если использовалось (platform / arch больше не зарезервированы).

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

  • SPEC 065: aggressive cleanup (только префикс + Wintun), startup-хук CleanupStaleTunAtStartUtil в main.go.
  • SPEC 067 реализация: core/template/substitute.go (+377 LOC) — #if walker с map-spread + array-element режимами, expression language из 8 форм (bare bool, equality, #notEmpty/#isEmpty, #in/#notIn, #matches, #not), runtime globals @runtime.platform/@runtime.arch; template_validate.go (+343 / -16) — load-time валидация включая reserved-name check + strict @-only outer if/if_or; 39+ новых unit-тестов (TestIf_* + TestOuterIf_* + TestVars_Reserved*). Runtime globals — namespace @runtime.* (reserved-имя runtime; platform/arch освобождены); vars[].default_value поддерживает #if (runtime-only) через VarDefaultValue.ForPlatform + validateDefaultValueIf.
  • Signature SubstituteVarsInJSON изменился: теперь принимает goos, goarch string параметры (раньше брал из runtime). Internal callers обновлены.
  • Bundled template мигрирован: 19 элементов в if/if_or массивах получили @-prefix; inbounds[proxy-in] оборачивает опциональное users поле в #if по @proxy_in_auth_enabled. Diff чисто аддитивный плюс 19 prefix-правок; semantic regression нет.
  • Proxy-in auth: новые template vars proxy_in_auth_enabled (bool), proxy_in_username (text), proxy_in_password (text); последние два видны только когда proxy_in_auth_enabled включён (vars[].if каскад).

Don't miss a new singbox-launcher release

NewReleases is sending notifications on new releases.