Release v0.8.8.1
Downloads
macOS (Universal) - Supports both Apple Silicon and Intel
Option 1: Installation Script (Recommended)
Install with a single command (version v0.8.8.1):
curl -fsSL https://raw.githubusercontent.com/Leadaxe/singbox-launcher/develop/scripts/install-macos.sh | bash -s -- v0.8.8.1The 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.8.8.1-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.8.8.1-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.8.8.1-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.
What's New from 0.8.8
Version 0.8.8.1 Release Notes — Hotfix
Hotfix release for the URLTest placeholder regression that prevented sing-box from starting on fresh v0.8.8 (and v0.8.7) installs. No new features, no API changes — pure bug fix. Safe to upgrade in place.
EN
Fixed
-
@urltest_*placeholders now resolve inparser_config.outbounds[]. v0.8.7 (SPEC 040) introduced template variables@urltest_url / @urltest_interval / @urltest_tolerancein the auto-proxy-out URLTest selector, but the parser code path that copies these options into the finalconfig.jsonnever ran the substitution — sing-box then failedoutbounds[1].interval: time: invalid duration "@urltest_interval". Symptom: fresh installs (or any state.json copied from the v0.8.7+ template'sparser_config) couldn't passsing-box checkand the launcher refused to start.Fix:
core/config/SubstituteParserConfigPlaceholdersis now invoked at the entry ofGenerateOutboundsFromParserConfig. It walks everyOptionsmap underparser_config.outbounds[]andparser_config.proxies[].outbounds[], replacing string values that look like@varname. Resolution order: user override fromstate.json→wizard_template.jsondefault_value→ built-in fallback for the three known URLTest placeholders (matching v0.8.6 hard-coded values) → leave the literal in place with a loud warning.Existing broken
state.jsonfiles are healed transparently: the placeholder text remains in the wizard's editor view (so users see the template reference), but the generated outbound JSON fed to sing-box has the resolved value. No manual action required after upgrade.
Technical / Internal
- New file
core/config/varsubst.go:VarSubstitutertype,SubstituteParserConfigPlaceholders,BuildVarSubstituterFromDisk(binDir), plus the hard-coded fallback table forurltest_url / urltest_interval / urltest_tolerance. Self-contained — no new dependencies, no UI imports (avoids a cycle withui/wizard/template/). - Hook points:
core.ConfigService.GenerateOutboundsFromParserConfig(wizard preview / Save path) andcore.ConfigService.UpdateConfigFromSubscriptions(manual Update + auto-update cron) build a substituter from disk before generation. - 17 new unit tests covering: nil safety, hard-coded fallback, custom substituter, mixed string + object form options, non-string values left intact, type coercion (
intfor tolerance,boolfor tun toggles), missing-file resilience, end-to-end with on-disk template + state.
A proper architectural fix (typed event-bus + state/config decoupling) is underway as SPEC 045 / 047 for v0.9. This hotfix is the minimal targeted patch to unblock current users.
RU
Исправлено
-
Плейсхолдеры
@urltest_*теперь корректно разрешаются вparser_config.outbounds[]. В v0.8.7 (SPEC 040) у auto-proxy-out URLTest options появились шаблонные переменные@urltest_url / @urltest_interval / @urltest_tolerance, но путь генерации outbound'ов в парсере копировал их дословно — sing-box падал сoutbounds[1].interval: time: invalid duration "@urltest_interval". Симптом: на свежей установке (или на любом state.json, чейparser_configбыл скопирован из шаблона v0.8.7+)sing-box checkне проходил, и лаунчер отказывался запускаться.Фикс: на входе
GenerateOutboundsFromParserConfigвызывается новая функцияcore/config/SubstituteParserConfigPlaceholders. Она обходит всеOptionsподparser_config.outbounds[]иparser_config.proxies[].outbounds[]и подставляет строковые значения вида@varname. Порядок разрешения: пользовательский override изstate.json→default_valueизwizard_template.json→ встроенный fallback для трёх известных URLTest-плейсхолдеров (совпадает с захардкоженными значениями v0.8.6) → оставить literal с громким warning'ом в логе.Существующие сломанные
state.jsonлечатся автоматически: текст плейсхолдера остаётся в редакторе визарда (юзер видит шаблонную ссылку), но в outbound JSON, который уезжает в sing-box, попадает разрешённое значение. Никаких ручных действий после апгрейда не требуется.
Техническое / Внутреннее
- Новый файл
core/config/varsubst.go: типVarSubstituter, функцииSubstituteParserConfigPlaceholders,BuildVarSubstituterFromDisk(binDir), плюс таблица hardcoded fallback дляurltest_url / urltest_interval / urltest_tolerance. Self-contained — без новых зависимостей и без импортаui/wizard/template/(не даёт цикла). - Точки внедрения:
core.ConfigService.GenerateOutboundsFromParserConfig(визард preview / Save) иcore.ConfigService.UpdateConfigFromSubscriptions(ручной Update + auto-update cron) строят substituter с диска до генерации. - 17 новых юнит-тестов: nil-safety, hardcoded fallback, кастомный substituter, mixed string + object form, нестроковые значения не трогаем, type-coercion (
intдля tolerance,boolдля tun-флагов), устойчивость к отсутствующим файлам, end-to-end с шаблоном и state.json на диске.
Архитектурный фикс (типизированный event-bus + разведение state/config) идёт как SPEC 045 / 047 в v0.9. Этот hotfix — минимальная точечная заплатка, чтобы разблокировать текущих пользователей.