Release v1.2.5
Downloads
macOS (Universal) - Supports both Apple Silicon and Intel
Option 1: Installation Script (Recommended)
Install with a single command (version v1.2.5):
curl -fsSL https://raw.githubusercontent.com/Leadaxe/singbox-launcher/develop/scripts/install-macos.sh | bash -s -- v1.2.5The 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-v1.2.5-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-v1.2.5-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-v1.2.5-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.
v1.2.5 — вкладки больше не прячутся под заголовком окна
Core pinned: sing-box-lx 1.14.0-lx.5 (unchanged from v1.2.4). No config migration needed.
A one-bug release plus dependency maintenance: restoring the window from tray on Windows could render the tab strip clipped under the title bar. Everything else is toolchain and CI upkeep — no behaviour changes.
EN
Highlights
- Restoring from tray no longer hides the tab strip under the title bar (Windows). Un-hiding took Fyne's
doShowAgainpath, which repaints immediately while the canvas is still growing to the content'sMinSize— content mutated while hidden (a subscription refresh, a status change) only lands on that first repaint. The repaint derived the GL viewport fromcanvas.Size()rather than the real framebuffer, so the frame rendered taller than the buffer; with OpenGL's origin at the bottom-left, the overflow was clipped off the top and the tabs vanished under the caption. The window then caught up in size, but that resize was a no-op that left no dirty flag, so the broken frame persisted until something else triggered a repaint — which is why it looked patternless and "cleared on its own". ARefresh()afterShow()sets the dirty flag, so the next frame renders with window and canvas agreeing on geometry. Not reproducible on macOS, whereorderFrontforces an honest repaint regardless. (issue #92)
Technical / Internal
core/uiservice/ui_service.go—Refresh()afterShow()on the un-hide path. The underlying defect is upstream (loop.go,updateGLContext) and is still present in fyne v2.8.0, so this workaround stays even though this release bumps Fyne.- fyne.io/fyne/v2 2.7.4 → 2.8.0. Pulls GLFW 3.3 → 3.4, plus new indirect deps (
FyshOS/fancyfs,anthonynsimon/bild,clipperhouse/uax29). Verified before release: macOSminosstays at 11.0 (Big Sur+) — the external-linker pin still holds — and the linked system frameworks are byte-for-byte the same set as on 2.7.4, i.e. GLFW 3.4 added no new system dependency. UI smoke-checked on macOS arm64 (main window, Config Wizard, Preview). - golang.org/x/sys 0.45.0 → 0.47.0. No API surface used by the launcher changed.
- CI: Linux builds now install
libwayland-dev+libxkbcommon-dev. GLFW 3.4 compiles its Wayland backend unconditionally, sowayland-client-core.his required even for an X11-only build;xorg-devalone stopped being enough the moment Fyne 2.8 landed. - CI: golangci-lint pinned to v2.12.2 (was
latest). A new linter release had turned CI red on untouched code and blocked every open PR since April. Pinning makes linter upgrades a deliberate step. The findings it had surfaced are fixed rather than suppressed: uncheckedClose()/Call()on cleanup paths and registry handles across the cross-platform and Windows-only code. Two Windows constants that are genuinely unused (spdrpFriendlyName,digcfPresent) are kept with//nolint:unused— both document a trap and deleting them would delete the knowledge.
Notes
- No user-facing changes beyond the tab-strip fix. The dependency bumps are maintenance; if you are not on Windows, this release is effectively a no-op for you.
- Windows and Linux were not smoke-tested by hand for the Fyne bump — both build and lint clean on CI, and the macOS UI was checked manually, but GLFW 3.4's window backend is not exercised by any automated test.
RU
Основное
- Разворачивание из трея больше не прячет вкладки под заголовком окна (Windows). Разворачивание шло по пути
doShowAgainв Fyne, который перерисовывает окно сразу, пока канва ещё растёт доMinSizeконтента — а контент, изменившийся, пока окно было скрыто (обновление подписки, смена статуса), доезжает как раз на этой первой перерисовке. Перерисовка брала GL-viewport изcanvas.Size(), а не из реального фреймбуфера, поэтому кадр рендерился выше буфера; начало координат в OpenGL — снизу слева, так что лишнее срезалось сверху и полоса вкладок уходила под заголовок. Дальше окно догоняло размер, но этот resize был пустышкой и не ставил dirty-флаг, поэтому битый кадр висел, пока что-нибудь ещё не вызовет перерисовку — отсюда «закономерности нет, проходит само».Refresh()послеShow()ставит dirty-флаг, и следующий кадр рендерится, когда окно и канва уже согласны по геометрии. На macOS не воспроизводится: тамorderFrontв любом случае форсирует честную перерисовку. (issue #92)
Техническое / Внутреннее
core/uiservice/ui_service.go—Refresh()послеShow()на пути разворачивания. Сам дефект — upstream (loop.go,updateGLContext) и в fyne v2.8.0 всё ещё не починен, поэтому обход остаётся, несмотря на бамп Fyne в этом же релизе.- fyne.io/fyne/v2 2.7.4 → 2.8.0. Тянет GLFW 3.3 → 3.4 и новые indirect-зависимости (
FyshOS/fancyfs,anthonynsimon/bild,clipperhouse/uax29). Проверено перед релизом:minosна macOS остался 11.0 (Big Sur+) — пин через external linker держится, — а набор слинкованных системных фреймворков совпадает с 2.7.4 один в один, то есть GLFW 3.4 не притащил новых системных зависимостей. UI прогнан руками на macOS arm64 (главное окно, Config Wizard, Preview). - golang.org/x/sys 0.45.0 → 0.47.0. Из используемого лаунчером API ничего не изменилось.
- CI: Linux-сборки теперь ставят
libwayland-dev+libxkbcommon-dev. GLFW 3.4 компилирует свой Wayland-бэкенд безусловно, поэтомуwayland-client-core.hнужен даже для X11-only сборки; одногоxorg-devперестало хватать ровно с приходом Fyne 2.8. - CI: golangci-lint запинен на v2.12.2 (было
latest). Новый релиз линтера покрасил CI на нетронутом коде и блокировал все открытые PR с апреля. Пин делает обновление линтера осознанным шагом. Находки при этом починены, а не заглушены: непроверенныеClose()/Call()на cleanup-путях и хендлах реестра — и в кроссплатформенном коде, и в Windows-only. Две действительно неиспользуемые Windows-константы (spdrpFriendlyName,digcfPresent) оставлены с//nolint:unused— обе документируют грабли, и удалить их значило бы удалить знание.
Примечания
- Кроме фикса вкладок, пользовательских изменений нет. Бампы зависимостей — обслуживание; если вы не на Windows, релиз для вас практически пустой.
- Windows и Linux руками под новый Fyne не проверялись — сборка и линт зелёные на CI, macOS-UI прогнан вручную, но оконный бэкенд GLFW 3.4 не покрыт ни одним автотестом.