Release v0.9.8
Downloads
macOS (Universal) - Supports both Apple Silicon and Intel
Option 1: Installation Script (Recommended)
Install with a single command (version v0.9.8):
curl -fsSL https://raw.githubusercontent.com/Leadaxe/singbox-launcher/develop/scripts/install-macos.sh | bash -s -- v0.9.8The 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.8-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.8-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.8-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.
v0.9.8 — 2026-05-26
Plumbing + quality release on top of v0.9.7: sing-box bumped to 1.13.12 on both modern and Win7-legacy builds, Win7-specific fixes (legacy build now reports correct version + template ref, Mesa3D OpenGL workaround for old hardware documented), main window usable in parallel with configurator, DNS Rules tab unified into one ordered list. Behind the scenes: README rewrite around platform-level positioning with 6 hero screenshots, three independent CI bugs found and fixed (Win7 ldflags injecting into a non-existent symbol, Windows test failures silently swallowed by set ERRORLEVEL trap, Linux/macOS test failing on a .gitignore-swallowed fixture file).
EN
Highlights
- Main window stays usable while the configurator is open. Previously a transparent click-redirect overlay on the main window forwarded every click to the wizard, which made Update / Restart / Start / Stop / tab switches silently fail until you closed the configurator. The overlay is now disabled by default — the configurator opens as a sibling top-level window and the launcher controls keep working in parallel.
- DNS Rules tab — unified ordered list (drag ↑↓). The wizard's DNS Rules section used to render preset DNS rules and user DNS rules in two fixed sections — preset rules always won sing-box first-match. The tab now shows a single ordered list where preset (🔗) and user (→) rules can be interleaved freely; use ↑↓ buttons on each row to reorder, and your custom domain can finally beat a preset's broader match. A small toggle at the top-right of the section swaps between this list and the raw-JSON editor (user rules only).
- Sing-box bumped to 1.13.12 on both modern and Win7-legacy builds (was 1.13.11 modern / 1.13.2 Win7). Win7 jump closes a 9-patch gap accumulated since the original pin — picks up sing-box bug-fixes and DNS / route schema parity with the modern build, so configs generated by the current Configurator no longer fail to load on Win7 due to schema drift.
- Win7 release build now reports correct version + template ref. The CI Win7 job was injecting ldflags into a non-existent
main.Versionsymbol (it should targetsingbox-launcher/internal/constants.AppVersion), and was missingRequiredTemplateRefentirely. Result: Win7 binaries shipped withv-local-testshown in the auto-update popup and an unpinned template ref. Fixed in.github/workflows/ci.ymlWin7 build step — now mirrors the resolution done inbuild/build_windows.bat. - Win7 32-bit: Mesa3D OpenGL workaround documented. On legacy Win7 hardware with OpenGL < 2.1 (Intel HD 1xxx-2xxx, some ATI/AMD chipsets) the launcher's tray icon appears but the main window renders as an empty frame — Fyne / GLFW requires OpenGL 2.1+. New
docs/WIN7_OPENGL.mdwalks through droppingopengl32.dll+libglapi.dllfrom mesa-dist-win (x86 build) next to the launcher exe; Windows DLL search order picks up the local copies and Fyne gets a software-rendered 3.x context. Linked from the Troubleshooting table in both READMEs. Credit: user report from the Telegram channel. - README rewrite around platform-level positioning. Both
README.md(EN) andREADME_RU.md(RU) reorganized: new hero one-liner («Desktop platform for network routing and traffic analysis. 15+ VPN protocols, configuration depth and API at enterprise level»), Features categorized by 8 capability tiers (Connectivity / Routing / DNS / Network observability / Reliability / System integration / Power tools / Distribution), 6 inline hero screenshots, Subscription provider compatibility table (Marzban / Marzneshin / Remnawave / NashVPN / V2Board / 3X-UI), Troubleshooting table, CLI flags + System tray + Share URI sections restored. Newdocs/PRODUCT_ANALYSIS.md(internal positioning artifact, not linked from READMEs).
Fixed
- CI: Windows test failures were silently swallowed by an
ERRORLEVELtrap.build/test_windows.bathad a duplicateset TEST_EXIT_CODE=%ERRORLEVEL%line; cmd'ssetitself succeeds and resetsERRORLEVEL=0, so the second capture always read 0 —exit /b %TEST_EXIT_CODE%then reported success even whengo testhad failed. Linux/macOS scripts use bash${PIPESTATUS[0]}and were never affected. Real Windows-only regression that was hidden:TestConvertRuleSetToLocalRequired_*incore/build/was embeddingt.TempDir()paths into JSON-string literals via concatenation —C:\Users\…\Temp\…contains backslashes that are invalid JSON escapes (\U,\b,\t). Test now usesjson.Marshalto escape paths properly. Both fixes restored Windows test reliability. - TestParseLogLine_KnownSamples missing fixture caused CI fail on Linux/macOS. The golden log file
internal/traffic/testdata/sing-box-logs/sample.logwas matched by the project-wide*.log.gitignorerule and never committed since SPEC 059 landed. Test usedt.Fatalfif file absent → CI failed every run. Fixture now committed via explicit!internal/traffic/testdata/sing-box-logs/*.logexception (runtime logs underbin/logs/still protected); test keepst.Skipfbranch as belt-and-suspenders. - CI: prerelease workflow was unusable due to chicken-and-egg.
run_mode=prereleasecomputes the release-notes filename slug fromgit describe's HEAD short-SHA — but any commit adding the release-notes file shifts HEAD to a new SHA, so the file you commit (named for parent's SHA) never matches what CI computes on the post-commit HEAD. The strict file-check then failedRead release notesstep, but the prerelease tag was already pushed earlier in the same job → orphan tag pollution. Fixed by falling back todocs/release_notes/upcoming.mdwhenPRERELEASE=trueand the exact slug file is absent. Stable releases (vX.Y.Ztags) keep the strict per-version-file requirement.docs/RELEASE_PROCESS.md §2.2rewritten accordingly.
Technical / Internal
ui/wizard_overlay.go::wizardOverlayEnabled(constbool) gates the legacy main-window click-redirect overlay. Defaultfalse. Flip totrueto restore the «wizard owns the foreground» UX without ripping out the implementation. The wizard's internalChildWindowsOverlay(used over wizard tabs while a child dialog is open) is independent and unchanged..gitignoreexception scoped narrowly:!internal/traffic/testdata/sing-box-logs/*.log. Surrounding*.logrule continues to protect runtime logs inbin/logs/.core/rebuild.go::validateConfigViaSingBoxandinternal/platform/device_info_windows.go::wmicValuenow route throughplatform.PrepareCommand(cmd)for consistency with every otherexec.Commandsite in the codebase. Behavior unchanged (PrepareCommandkeepsHideWindow:trueonly;CREATE_NO_WINDOWintentionally NOT enabled because it would silently breakSendCtrlBreakgraceful shutdown — comment ininternal/platform/platform_windows.godocuments the trade-off).
RU
Основное
- Главное окно работает пока открыт конфигуратор. Раньше невидимый overlay перехватывал любой клик по главному окну пока визард открыт — Update / Restart / Start / Stop / переключение вкладок молча игнорились. Теперь overlay по умолчанию выключен, конфигуратор — обычное соседнее окно, лаунчер можно использовать параллельно.
- Вкладка DNS Rules — единый упорядоченный список правил (drag ↑↓). Секция DNS rules в визарде раньше рисовала preset- и user-правила в двух фиксированных секциях — preset всегда выигрывал first-match у sing-box. Теперь это один ordered список, в котором preset (🔗) и user (→) правила можно перемешать произвольно: кнопки ↑↓ на каждой строке двигают порядок, и твой кастомный домен наконец может опередить более широкий match preset'а. Маленький toggle справа от заголовка переключает между этим списком и raw-JSON редактором (только user-правила).
- Sing-box обновлён до 1.13.12 на modern и Win7-legacy сборках (было 1.13.11 modern / 1.13.2 Win7). Win7-bump закрывает gap в 9 patch-версий, накопленный с момента изначального pin'а — подтягивает bug-фиксы sing-box и schema-паритет DNS / route с modern-сборкой, конфиги из текущего Configurator теперь грузятся на Win7 без schema-drift.
- Win7-релиз теперь правильно показывает версию + template ref. CI-job Win7-сборки инжектил ldflags в несуществующий символ
main.Version(должен бытьsingbox-launcher/internal/constants.AppVersion) и вообще не передавалRequiredTemplateRef. Результат: Win7-бинарники показывалиv-local-testв auto-update попапе и работали с unpinned template ref. Исправлено в.github/workflows/ci.ymlWin7-build step — теперь зеркалоbuild/build_windows.bat. - Win7 32-bit: задокументирован workaround OpenGL через Mesa3D. На legacy Win7-железе с OpenGL < 2.1 (Intel HD 1xxx-2xxx, некоторые ATI/AMD-чипсеты) у лаунчера появляется иконка в трее, но главное окно рендерится пустой рамкой — Fyne / GLFW требуют OpenGL 2.1+. Новый
docs/WIN7_OPENGL.mdописывает как положитьopengl32.dll+libglapi.dllиз mesa-dist-win (x86-сборка) рядом с exe лаунчера; Windows DLL search order подхватит локальные копии и Fyne получит software-рендереный 3.x контекст. Линк добавлен в таблицу Troubleshooting обоих README. Спасибо пользователю из Telegram-канала за репорт. - README переписан вокруг platform-level позиционирования. Оба
README.md(EN) иREADME_RU.md(RU) реорганизованы: новый hero one-liner («Десктоп-платформа сетевой маршрутизации и анализа трафика. 15+ VPN-протоколов, глубина настроек и API уровня Enterprise»), Возможности разбиты по 8 категориям (Connectivity / Routing / DNS / Network observability / Reliability / System integration / Power tools / Distribution), 6 hero-скриншотов inline, таблица совместимости с подписочными провайдерами (Marzban / Marzneshin / Remnawave / NashVPN / V2Board / 3X-UI), таблица Troubleshooting, секции CLI флагов + System tray + Share URI возвращены. Новыйdocs/PRODUCT_ANALYSIS.md(внутренний позиционинг-артефакт, не линкуется из README).
Исправлено
- CI: Windows test-фейлы молча проглатывались
ERRORLEVEL-trap'ом. Вbuild/test_windows.batбыла дубликат-строкаset TEST_EXIT_CODE=%ERRORLEVEL%; командаsetсама успешно выполняется и сбрасываетERRORLEVEL=0, поэтому второй capture всегда читал 0 —exit /b %TEST_EXIT_CODE%потом репортил success даже когдаgo testпадал. Linux/macOS-скрипты используют bash${PIPESTATUS[0]}и никогда не были затронуты. Реальная Windows-only регрессия, которая была скрыта:TestConvertRuleSetToLocalRequired_*вcore/build/встраивал пути изt.TempDir()в JSON-строку через конкатенацию —C:\Users\…\Temp\…содержит обратные слэши, которые невалидны как JSON-escape (\U,\b,\t). Тест теперь используетjson.Marshalдля правильного эскейпа путей. Оба фикса вернули Windows-тестам надёжность. - TestParseLogLine_KnownSamples отсутствующая фикстура валила CI на Linux/macOS. Golden log файл
internal/traffic/testdata/sing-box-logs/sample.logпопадал под общее*.log.gitignoreправило и никогда не был закоммичен с момента ландинга SPEC 059. Тест использовалt.Fatalfесли файл отсутствует → CI падал на каждом ране. Фикстура теперь закоммичена через явный exception!internal/traffic/testdata/sing-box-logs/*.log(рантайм-логи подbin/logs/по-прежнему защищены); тест сохранилt.Skipfветку как belt-and-suspenders. - CI: prerelease workflow был неюзабельный из-за chicken-and-egg.
run_mode=prereleaseвычисляет slug имени release-notes файла из short-SHA HEAD'а вgit describe— но любой commit, добавляющий release-notes файл, сдвигает HEAD к новому SHA, поэтому файл, который вы коммитите (с именем по SHA родителя), никогда не совпадает с тем, что CI вычисляет на post-commit HEAD'е. Строгий file-check падал наRead release notesstep, но prerelease-тег уже был push'нут раньше в том же job → orphan-тег. Исправлено fallback'ом наdocs/release_notes/upcoming.mdкогдаPRERELEASE=trueи точный slug-файл отсутствует. Stable-релизы (vX.Y.Zтеги) сохраняют строгое требование per-version файла.docs/RELEASE_PROCESS.md §2.2переписан соответственно.
Техническое / Внутреннее
ui/wizard_overlay.go::wizardOverlayEnabled(constbool) — фича-флаг legacy-overlay'я главного окна. Defaultfalse. Поставьtrue— вернётся прежнее поведение «wizard захватывает фокус». Внутренний wizard'овыйChildWindowsOverlay(над wizard-табами когда открыто child-окно) — независим и не тронут..gitignoreexception scoped узко:!internal/traffic/testdata/sing-box-logs/*.log. Окружающее*.logправило продолжает защищать рантайм-логи вbin/logs/.core/rebuild.go::validateConfigViaSingBoxиinternal/platform/device_info_windows.go::wmicValueтеперь проходят черезplatform.PrepareCommand(cmd)для consistency со всеми остальнымиexec.Commandсайтами в коде. Поведение не изменилось (PrepareCommandоставлен сHideWindow:trueтолько;CREATE_NO_WINDOWнамеренно НЕ включён, потому что это silent-сломало быSendCtrlBreakgraceful shutdown — комментарий вinternal/platform/platform_windows.goдокументирует trade-off).