github Leadaxe/singbox-launcher v1.2.5
release v1.2.5

3 hours ago

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.5

The 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

  1. Download: singbox-launcher-v1.2.5-macos.zip
  2. Extract the ZIP file
  3. Remove quarantine attribute (required):
    xattr -cr "singbox-launcher.app" && chmod +x "singbox-launcher.app/Contents/MacOS/singbox-launcher"
  4. Double-click singbox-launcher.app to 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)

  1. Download: singbox-launcher-v1.2.5-win64.zip
  2. Extract the ZIP file to a folder, for example: C:\Program Files\singbox-launcher\
  3. Run singbox-launcher.exe from that folder
    • You may need administrator rights to install to Program Files
    • The launcher will automatically download sing-box and wintun.dll on first launch

Windows 7 (x86, legacy)

  1. Download: singbox-launcher-v1.2.5-win7-32.zip
  2. 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 doShowAgain path, which repaints immediately while the canvas is still growing to the content's MinSize — content mutated while hidden (a subscription refresh, a status change) only lands on that first repaint. The repaint derived the GL viewport from canvas.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". A Refresh() after Show() sets the dirty flag, so the next frame renders with window and canvas agreeing on geometry. Not reproducible on macOS, where orderFront forces an honest repaint regardless. (issue #92)

Technical / Internal

  • core/uiservice/ui_service.goRefresh() after Show() 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: macOS minos stays 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, so wayland-client-core.h is required even for an X11-only build; xorg-dev alone 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: unchecked Close()/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.goRefresh() после 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 не покрыт ни одним автотестом.

Don't miss a new singbox-launcher release

NewReleases is sending notifications on new releases.