Release v0.9.2
Downloads
macOS (Universal) - Supports both Apple Silicon and Intel
Option 1: Installation Script (Recommended)
Install with a single command (version v0.9.2):
curl -fsSL https://raw.githubusercontent.com/Leadaxe/singbox-launcher/develop/scripts/install-macos.sh | bash -s -- v0.9.2The 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.2-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.2-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.2-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)
Hotfix release. Restores the v0.8.x SRS rule-set workflow that the v0.9.0/v0.9.1 architecture refactor accidentally broke. If you ever ran v0.9.0 or v0.9.1 with template-default rules enabled, you would have hit FATAL: start service: initialize rule-set ... v2ray-http-upgrade: unexpected status: 404 on the first start — sing-box was trying to download remote rule-sets through the VPN proxy, which the proxy refused. v0.9.2 makes config.json always emit type: local rule-sets only; existing installs heal automatically on next Save.
Fixed
- SRS rule-sets restored to local-only emit (regression fix from v0.9.0/v0.9.1, restores v0.8.x behavior).
config.jsonnow never containstype: remoterule-sets. The build pipeline (core/build/route_merge.go::convertRuleSetToLocalRequired) emitsinlineandlocalonly —remoteentries with a downloadedbin/rule-sets/<tag>.srsget rewritten on the fly to{type: local, format: binary, path: ...}; missing files raise a build error with the messageopen Configurator → Rules and re-download. Sing-box stops trying to fetch rule-sets through the VPN at startup (the v0.9.x cold-startFATAL: start service: initialize rule-set ... v2ray-http-upgrade: unexpected status: 404is gone). Tracked in SPEC 045 фаза 9. - Auto-rebuild after Save / Update. Save in Configurator (in-wizard button or close-dialog → Save) and Update on Core Dashboard now both trigger
RebuildConfigIfDirtyautomatically —config.jsonis always in sync with the just-saved state without an extra click. The oldAuto Rebuild on Changeright-click toggle is removed (the rebuild was made unconditional). The duplicateRefresh & Rebuildicon button next to the Configurator entry is removed too — the regular🔄 Updatebutton now does both passes. - Content-addressed SRS tag for user-added rules.
add_rule_dialog.go::srsTagFromURLnow produces<filename-without-srs>-<hash8(sha256(URL))>instead of the oldcustom-<filename>with order-dependent-2/-3collision suffixes. Same URL → same tag (idempotent dedup); different URLs that share a filename → different tags (collision impossible). Template-shipped tags (ru-blocked-main,ads-all,games, …) are untouched — handcrafted by template authors. - Orphan GC for
bin/rule-sets/. After everyRebuildConfigIfDirtythe directory is swept against the union of tags from allbin/wizard_states/*.json(multi-stage safety, mirrors the SPEC 052 GC forbin/subscriptions/). Anything not in the live set is removed — including non-.srsfiles and Cyrillic-named junk. The directory is treated as a launcher-managed cache, no exceptions for stray files.
Technical / Internal
convertRuleSetToLocalRequired(renamed fromconvertRuleSetToLocalIfNeeded) returns(any, error)— the previous silent fallback totype: remoteis gone. Caller paths (MergeRouteSection→BuildConfig→RebuildConfigIfDirty) propagate the error end-to-end;config.jsonis never overwritten with an invalid one.buildContextFromStateis now a method on*AppControllerand propagatesac.FileService.ExecDirintoRouteConfig.ExecDir— required by the local-path resolver in the build pipeline.- New
services.DeleteOrphanRuleSets(execDir, knownTags) ([]string, error)mirrorsstate/v5.DeleteOrphansfor subscriptions. Called fromRebuildConfigIfDirtyafteratomicWriteConfig. Multi-stage safety via newcore.collectAllStageRuleSetTagshelper. UpdateConfigFromSubscriptionsnow callsRebuildConfigIfDirtyand emitsShowSubsResultFuncitself (was: only viaRunParserwrapper). Auto-update fallback paths (RebuildConfigIfDirty→Updatebecause raw cache incomplete) no longer leave the toast hanging at 100% in-progress; if the rebuild fails, the toast surfaces it as(rebuild failed: ...).Settings.AutoRebuildOnChangefield removed frominternal/locale/settings.go. Existing settings.json files with that field are tolerated (omitempty, ignored on read). Locale keycore.update_autorebuild_labelremoved from all 11 locale files.- The
updateAndRebuildButtonUI control (icon-only refresh+rebuild combo) and its handlers are removed from Core Dashboard. Locale keycore.button_update_rebuild_tooltipis gone too.
Migration notes
- No migration required. Existing v0.9.x installs that hit the cold-start FATAL heal automatically: open Configurator → Save → auto-rebuild generates a fresh
config.jsonwith all rule-sets astype: local. SRS files already on disk underbin/rule-sets/<tag>.srs(downloaded by previous UI clicks) are reused. - If you manually deleted SRS files, the Configurator → Rules tab will show them as
🔵 srs(re-download needed); one click per row downloads, Save → rebuild emits the local config.
Основное (RU)
Hotfix-релиз. Восстановлен workflow SRS rule-sets из v0.8.x, который поломал архитектурный рефактор v0.9.0/v0.9.1. Если вы ставили v0.9.0 или v0.9.1 с включёнными rules из шаблона по умолчанию — на первом старте получали FATAL: start service: initialize rule-set ... v2ray-http-upgrade: unexpected status: 404 (sing-box пытался скачать remote rule-set через VPN-прокси, прокси отказывал). v0.9.2 гарантирует что config.json всегда эмитит rule-sets только с type: local; существующие установки лечатся автоматически на следующем Save.
Исправлено
- SRS rule-sets снова local-only при эмите в config.json (регресс v0.9.0/v0.9.1 починен, восстановлено поведение v0.8.x).
config.jsonтеперь не содержит rule-set'ов сtype: remote. Build pipeline (core/build/route_merge.go::convertRuleSetToLocalRequired) эмитит толькоinlineиlocal—remote-entries со скачаннымbin/rule-sets/<tag>.srsна лету переписываются в{type: local, format: binary, path: ...}; отсутствие файла поднимает build error с сообщениемopen Configurator → Rules and re-download. Sing-box больше не пытается скачать rule-set через VPN на старте (cold-startFATAL: start service: initialize rule-set ... v2ray-http-upgrade: unexpected status: 404v0.9.x ушёл). Отражено в SPEC 045 фаза 9. - Auto-rebuild после Save / Update. Save в конфигураторе (in-wizard кнопка или close-диалог → Save) и Update на Core Dashboard теперь оба автоматически дёргают
RebuildConfigIfDirty—config.jsonвсегда синхронен со свежим state без дополнительного клика. Старый right-click toggleAuto Rebuild on Changeубран (rebuild стал безусловным). Дублирующая icon-кнопкаRefresh & Rebuildрядом с конфигуратором тоже убрана — обычный🔄 Updateтеперь делает оба прохода. - Content-addressed SRS tag для user-added rules.
add_rule_dialog.go::srsTagFromURLтеперь выдаёт<filename-без-srs>-<hash8(sha256(URL))>вместо старогоcustom-<filename>с order-зависимыми-2/-3суффиксами. Та же URL → тот же tag (идемпотентный дедуп); разные URL с одинаковым filename → разные tags (коллизия невозможна). Template-shipped tags (ru-blocked-main,ads-all,games, …) не трогаем — они handcrafted автором шаблона. - Orphan GC для
bin/rule-sets/. После каждогоRebuildConfigIfDirtyпапка чистится по union'у тегов из всехbin/wizard_states/*.json(multi-stage safety, зеркалит SPEC 052 GC дляbin/subscriptions/). Всё что не в живом множестве — удаляется, включая не-.srsфайлы и кириллические имена. Папка — launcher-managed кэш, без исключений для левых файлов.
Техническое / Внутреннее
convertRuleSetToLocalRequired(переименовано изconvertRuleSetToLocalIfNeeded) возвращает(any, error)— прежний молчаливый fallback наtype: remoteушёл. Cаller-цепочка (MergeRouteSection→BuildConfig→RebuildConfigIfDirty) пробрасывает error end-to-end;config.jsonне перезаписывается невалидным.buildContextFromStateтеперь метод на*AppControllerи пробрасываетac.FileService.ExecDirвRouteConfig.ExecDir— нужно резолверу локальных путей в build pipeline.- Новый
services.DeleteOrphanRuleSets(execDir, knownTags) ([]string, error)зеркалитstate/v5.DeleteOrphansдля подписок. Вызывается изRebuildConfigIfDirtyпослеatomicWriteConfig. Multi-stage safety через новыйcore.collectAllStageRuleSetTags. UpdateConfigFromSubscriptionsтеперь сам вызываетRebuildConfigIfDirtyи эмититShowSubsResultFunc(было: только черезRunParserобёртку). Auto-update fallback (RebuildConfigIfDirty→Updateпри пустом raw cache) больше не оставляет toast зависшим на 100%-in-progress; при сбое rebuild'а toast показывает(rebuild failed: ...).- Поле
Settings.AutoRebuildOnChangeубрано изinternal/locale/settings.go. Существующие settings.json с этим полем толерантны (omitempty, игнорируется при чтении). Locale-ключcore.update_autorebuild_labelудалён из всех 11 локалей. - UI-контрол
updateAndRebuildButton(icon-кнопка refresh+rebuild) и его handler'ы убраны с Core Dashboard. Locale-ключcore.button_update_rebuild_tooltipтоже снесён.
Миграция
- Миграция не требуется. Существующие v0.9.x-инсталляции, поймавшие cold-start FATAL, лечатся автоматически: открыть Configurator → Save → auto-rebuild сгенерирует свежий
config.jsonсо всеми rule-sets какtype: local. SRS-файлы уже на диске подbin/rule-sets/<tag>.srs(скачанные предыдущими UI-кликами) переиспользуются. - Если вы вручную удалили SRS-файлы, на вкладке Configurator → Rules они отобразятся как
🔵 srs(нужна re-download); один клик на строку — скачка, Save → rebuild эмитит local-config.