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-prereleaseThe 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
- Download:
singbox-launcher-v0.9.9-14-g279152b-prerelease-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)
- Download:
singbox-launcher-v0.9.9-14-g279152b-prerelease-win64.zip - Extract the ZIP file to a folder, for example:
C:\Program Files\singbox-launcher\ - Run
singbox-launcher.exefrom that folder- You may need administrator rights to install to Program Files
- The launcher will automatically download
sing-boxandwintun.dllon first launch
Windows 7 (x86, legacy)
- Download:
singbox-launcher-v0.9.9-14-g279152b-prerelease-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
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:
#ifconstruct 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 toruntime.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_valuecan also be a#ifexpression — the default is computed at runtime via@runtime.*only (no user-var refs). Seedocs/TEMPLATE_REFERENCE.md§9 (semantics) + §10 (stock JSON formatting) +docs/CREATE_WIZARD_TEMPLATE.md. - Breaking template format: outer
if/if_orarrays require@-prefix on every var reference. Bareif: ["tun"]is now a loader error — must beif: ["@tun"]. The bundledbin/wizard_template.jsonis 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 theirif/if_orarrays to@-form before upgrade. Also:vars[].namevalueruntimeis now reserved (runtime-globals namespace@runtime.*) — rename if used (platform/archare 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
CleanupStaleTunAtStartUtilinmain.go. - SPEC 067 implementation:
core/template/substitute.go(+377 LOC) —#ifwalker with map-spread + array-element modes, 8-form predicate language (bare bool, equality,#notEmpty/#isEmpty,#in/#notIn,#matches,#not),@runtime.platform/@runtime.archruntime 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 nameruntime;platform/archfreed);vars[].default_valuesupports#if(runtime-only) viaVarDefaultValue.ForPlatform+validateDefaultValueIf. SubstituteVarsInJSONsignature changed: now takesgoos, goarch stringparams (previously inferred fromruntime). Internal callers updated.- Bundled template migrated: 19 elements in
if/if_orarrays prefixed with@;inbounds[proxy-in]wraps optionalusersfield in#ifkeyed 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 whenproxy_in_auth_enabledis on (vars[].ifcascade).
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"]. Bundledbin/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) —#ifwalker с 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каскад).