Release v0.9.4
Downloads
macOS (Universal) - Supports both Apple Silicon and Intel
Option 1: Installation Script (Recommended)
Install with a single command (version v0.9.4):
curl -fsSL https://raw.githubusercontent.com/Leadaxe/singbox-launcher/develop/scripts/install-macos.sh | bash -s -- v0.9.4The 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.4-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.4-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.4-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.
Highlights (EN)
Two fixes addressing real user reports:
route.finalfrom Configurator now actually applies — previously the «Final outbound» dropdown selection was silently ignored, all unmatched traffic went via template default (proxy-out) regardless of user choice.- TLS root certificate store is now exposed in Configurator → Settings as a dropdown (
System/Mozilla CA bundle/Chrome Root Store), giving users a one-click escape from broken Windows cert stores that producex509: certificate signed by unknown authorityerrors.
Fixed
route.finalselection respects the user's choice. Reported by Michael M: setting Configurator → Rules → Final outbound todirect-outhad no effect — the generatedconfig.jsonstill had"final": "proxy-out", so all unmatched traffic kept going through the proxy. Two parallel half-finished mechanisms collided: presenter wrote the choice tostate.config_params["route.final"]on Save, but the build pipeline'srouteConfigForUpdatehad a TODO for reading it («template default is fine for now»), and the template hardcoded"final": "proxy-out"instead of using the@varnamesubstitution channel. Both fixed in one go: template now uses"final": "@route_final"(consistent withdns_final,auto_detect_interface, etc.), presenter persists the value intostate.vars["route_final"], build pipeline relies entirely on substitution. Existing state.json files heal silently — legacyconfig_paramsvalue is read on first load and rewritten tovarson next Save. Closes the regression in Configurator → Rules → Final outbound.
Added
- TLS root certificate store dropdown (Configurator → Settings → «TLS root certificate store»). New template var
cert_store(enum: system / mozilla / chrome, defaultsystem). Maps to sing-box'scertificate.store(docs). Use case: Windows installations where the OS root certificate pool is broken (Microsoft auto-update root pool stale, antivirus tampered with the trust store, etc.) and TLS fails everywhere withx509: certificate signed by unknown authority. Switching tomozillaorchromeuses the built-in CA bundle instead of the OS store, bypassing the issue. Defaultsystemkeeps current behavior — no migration impact.
Technical / Internal
- New template var pattern:
wizard_ui: "hidden"for vars whose UI surface lives outside Settings tab (in our case Configurator → Rules → Final outbound dropdown — values depend on dynamic outbound list, can't be a static dropdown in Settings). extractConfigParamsreduced to no-op stub. Fieldstate.config_params[]retained in schema for read-only legacy migration and possible future params.- Substitution verified for both new vars (
@cert_storex 3 values,@route_finalx 4 values) via directBuildConfigprobes.
Migration notes
- No manual action required. Existing v0.9.3 installs that had
route.finalset in Configurator (which was silently ignored anyway) will pick the value up correctly on first Save in v0.9.4 — eager-migrated fromconfig_paramstovars. After that the legacy entry inconfig_paramsis no longer written.
Основное (RU)
Два фикса по реальным репортам пользователей:
route.finalиз конфигуратора теперь действительно применяется — раньше выбор «Final outbound» молча игнорировался, весь не-матченный трафик шёл через template-default (proxy-out) независимо от выбора пользователя.- TLS root certificate store теперь доступен в Configurator → Settings как dropdown (
System/Mozilla CA bundle/Chrome Root Store) — однокликовый escape от сломанного Windows cert store, дающего ошибкиx509: certificate signed by unknown authority.
Исправлено
- Выбор
route.finalтеперь работает. Сообщил Michael M: установка Configurator → Rules → Final outbound вdirect-outне давала эффекта — сгенерированныйconfig.jsonвсё равно содержал"final": "proxy-out", весь не-матченный трафик продолжал идти через прокси. Столкнулись два параллельных полу-доделанных механизма: presenter писал выбор вstate.config_params["route.final"]при Save, но build pipeline вrouteConfigForUpdateимел TODO про чтение этого («template default fine for now»), а template хардкодил"final": "proxy-out"вместо использования канала substitution через@varname. Оба починены: template теперь"final": "@route_final"(унифицировано сdns_final,auto_detect_interfaceи др.), presenter пишет вstate.vars["route_final"], build pipeline полностью полагается на substitution. Существующие state.json лечатся автоматически — legacyconfig_paramsчитается при первой загрузке и переписывается вvarsпри следующем Save.
Добавлено
- Dropdown TLS root certificate store (Configurator → Settings → «TLS root certificate store»). Новая template var
cert_store(enum: system / mozilla / chrome, defaultsystem). Маппится на sing-boxcertificate.store(docs). Use case: Windows установки где сломан системный pool корневых сертификатов (просрочен Microsoft auto-update, антивирус подменил trust store и т.п.) — TLS везде валится сx509: certificate signed by unknown authority. Переключение наmozilla/chromeиспользует встроенный CA-bundle вместо системного, обходит проблему. Defaultsystemсохраняет текущее поведение — миграция не требуется.
Техническое / Внутреннее
- Новый template-var паттерн:
wizard_ui: "hidden"для var'ов, чей UI surface живёт вне Settings tab (в нашем случае Configurator → Rules → Final outbound dropdown — значения зависят от динамического outbound list, нельзя сделать статическим dropdown'ом в Settings). extractConfigParamsсведена к no-op stub. Полеstate.config_params[]остаётся в schema только для read-only legacy миграции и возможных будущих параметров.- Substitution проверена для обеих новых var'ов (
@cert_store× 3 значения,@route_final× 4 значения) прямымиBuildConfigпробами.
Миграция
- Ручных действий не требуется. Существующие v0.9.3 инсталляции, у которых
route.finalбыл выставлен в конфигураторе (но молча игнорировался), при первом Save в v0.9.4 подхватят значение корректно — eager-мигрировано изconfig_paramsвvars. После этого legacy запись вconfig_paramsбольше не пишется.