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

3 hours ago

Release v1.3.0

Downloads

macOS (Universal) - Supports both Apple Silicon and Intel

Option 1: Installation Script (Recommended)

Install with a single command (version v1.3.0):

curl -fsSL https://raw.githubusercontent.com/Leadaxe/singbox-launcher/develop/scripts/install-macos.sh | bash -s -- v1.3.0

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

Подписка теперь может быть целым конфигом sing-box, а не только списком ссылок:
приезжают узлы, цепочки прокси и группы. Xray-подписки перестали терять
большинство узлов. Каждая нода в списке подписана — протокол, транспорт,
защита, — и её можно выключить по отдельности.

A subscription can now be a whole sing-box config rather than a list of links:
nodes, proxy chains and groups all come across. Xray subscriptions stopped
losing most of their nodes. Every node in the list says what it is — protocol,
transport, security — and can be switched off individually.

EN

Highlights

  • Import sing-box JSON subscriptions (SPEC 094). A subscription may now return a sing-box config instead of a URI list: a single outbound, an array of outbounds, a whole config, or an array of configs. Previously any body starting with { produced zero nodes.
  • Proxy chains of any depth. detour chains from an imported config are followed up to 8 hops (previously a single hop, SOCKS/VLESS only). Chains that loop back on themselves are broken at one edge — both nodes survive instead of disappearing.
  • Groups come with the config — as ordinary nodes. selector and urltest entries arrive as regular entries in the subscription's node list, not as channels in the Outbounds tab: routing rules never reference them and their membership is not user-editable. Members are remapped onto the final node tags; a group left without resolvable members is dropped rather than emitted (an empty urltest refuses to start the core).
  • Duplicate nodes are collapsed. A server listed several times within one subscription now yields a single node; the first one wins. Nodes differing only in SNI or transport are kept apart — those are distinct ways around filtering, not duplicates. Deduplication never spans subscriptions.
  • Xray JSON subscriptions no longer lose most of their nodes. VMess, Trojan, Shadowsocks and Hysteria2 entries are parsed (previously VLESS only), and every node of an element is imported rather than just one. xhttp and httpupgrade transports are recognised, and dialerProxy chains follow up to 8 hops through any supported protocol instead of a single SOCKS/VLESS hop. Tags of existing single-node elements are unchanged.
  • Nodes with a space in the login are no longer lost. Public lists sometimes paste a promo login like user:name @host; net/url rejected the whole URI, silently dropping the node.
  • Every node now says what it is (SPEC 095). Under each tag in the server list sits a subtitle — vless·tcp·Reality+Vision, wireguard, hysteria2·TLS — so two servers a provider gives the same name are finally distinguishable. Groups show their selection mode and pool instead: ⚖️ [37] balanced, 🎯 [11] fastest. The same subtitle appears on a source's Preview tab.
  • Latency is a coloured, clickable value. The ping button became the reading itself: green under 150 ms, yellow under 300, orange above, red on failure; «Ping» when nothing has been measured yet. Clicking it runs a fresh measurement.
  • Node info window. Right-click any node — in the server list or on a source's Preview tab — for everything known about it: server, transport, TLS/REALITY details, detour chain, group membership and selection parameters, plus the exact outbound JSON on its own tab.
  • Switch individual nodes off. A checkbox on every node in a source's Preview tab. The choice is bound to a hash of the node's identity, so it survives subscription updates, restarts, and the provider renaming or reordering the node. Marks for nodes long gone from the subscription are garbage-collected.

Technical / Internal

  • Core pinned to 1.14.0-lx.22. Three fixes matter here. Connections through a silently dead path (Wi-Fi that stopped passing tunnel traffic, a node off the air) now fail in 15 seconds instead of hanging ~127 seconds with no error — the connect phase only, established downloads and streams are untouched. An auto-selecting group no longer keeps routing through a node that stopped answering: it moves to a working one on the spot rather than waiting for its next scheduled test. And REALITY nodes on freshly updated Xray servers work again.
  • Format detection is now a single function (ClassifySubscriptionBody) instead of two independent, disagreeing checks. route, dns, inbounds and experimental of an imported config are ignored by design and reported to the UI.
  • Imported outbounds are sanitized with the same rules as URI nodes — uTLS allowlist, REALITY public_key/short_id, flow, packet_encoding, hysteria2 obfs, and uTLS/REALITY stripped on QUIC transports. A malformed entry drops that node only; the rest of the subscription is unaffected.
  • Fixed a crash when saving the wizard. UpdateTemplatePreviewAsync touched Fyne widgets directly while running inside a background goroutine — a data race Fyne itself flagged as «Error in Fyne call thread». It surfaced as the app simply closing on the last step of a save, most reliably after changing language and switching a group's mode.
  • state.json no longer escapes &, < and > into &-style sequences. The values were always correct — Go escapes HTML by default — but subscription URLs and preview strings were unreadable in a file people open by hand.
  • build/build_darwin.sh with no build type now targets the host architecture instead of always building universal — the common local case, and much faster. Release builds are unaffected: CI passes universal / catalina explicitly.
  • build/build_darwin.sh -i verifies the bundle seal after installing and re-seals it if Contents/_CodeSignature went missing — macOS otherwise refuses the app with an unhelpful "cannot be opened" dialog. Re-sealing moves bin/ and logs/ aside first: they live inside the signed area and may be root-owned after the core ran elevated.

RU

Основное

  • Импорт подписок в формате sing-box JSON (SPEC 094). Подписка теперь может отдавать конфиг sing-box вместо списка ссылок: одиночный outbound, массив outbound'ов, целый конфиг или массив конфигов. Раньше любое тело, начинающееся с {, давало ноль нод.
  • Цепочки прокси любой глубины. Цепочки detour из импортированного конфига разворачиваются до 8 хопов (раньше — ровно один, только SOCKS/VLESS). Кольцевые ссылки рвутся по одному ребру: обе ноды остаются, а не исчезают.
  • Группы приезжают вместе с конфигом — обычными узлами. selector и urltest попадают в список нод подписки как рядовые записи, а не как каналы во вкладке Outbounds: правила роутинга на них не ссылаются, состав пользователем не редактируется. Члены перепривязываются на итоговые теги; группа, оставшаяся без разрешимых членов, не создаётся — пустой urltest не даёт ядру стартовать.
  • Дубли нод схлопываются. Сервер, перечисленный в одной подписке несколько раз, теперь даёт одну ноду — выживает первая. Ноды, различающиеся только SNI или транспортом, сохраняются обе: это разные способы обойти блокировку, а не дубли. Между разными подписками дедуп не применяется.
  • Xray JSON-подписки больше не теряют большинство нод. Разбираются VMess, Trojan, Shadowsocks и Hysteria2 (раньше — только VLESS), и берутся все узлы элемента, а не один. Распознаются транспорты xhttp и httpupgrade, а цепочки dialerProxy разворачиваются до 8 хопов через любой поддерживаемый протокол вместо единственного SOCKS/VLESS. Теги существующих одноузловых элементов не изменились.
  • Ноды с пробелом в логине больше не теряются. В публичных списках встречается промо-логин вида user:name @host; net/url отвергал такой URI целиком, и нода пропадала молча.
  • Каждый узел теперь подписан (SPEC 095). Под тегом в списке серверов идёт описание — vless·tcp·Reality+Vision, wireguard, hysteria2·TLS, — и два сервера, которым провайдер дал одно имя, наконец различимы. У групп вместо этого режим отбора и пул: ⚖️ [37] по кругу, 🎯 [11] быстрейший. То же описание появилось на вкладке Preview источника.
  • Задержка — цветное значение, а не кнопка. Кнопка «Ping» стала самим замером: зелёный до 150 мс, жёлтый до 300, оранжевый выше, красный при ошибке; «Ping», пока замера не было. Клик по значению запускает новый замер.
  • Окно информации об узле. Правый клик по любой ноде — в списке серверов или на вкладке Preview источника — покажет всё, что о ней известно: сервер, транспорт, подробности TLS/REALITY, цепочку detour, состав группы и параметры отбора, плюс точный JSON outbound'а отдельной вкладкой.
  • Отдельные ноды можно выключать. Чекбокс у каждого узла на вкладке Preview источника. Выбор привязан к хешу идентичности ноды, поэтому переживает обновление подписки, перезапуск и переименование или перестановку узла провайдером. Отметки для нод, давно исчезнувших из подписки, убираются автоматически.

Техническое / Внутреннее

  • Ядро перепиннуто на 1.14.0-lx.22. Здесь важны три исправления. Соединения через тихо умерший путь (Wi-Fi перестал пропускать трафик туннеля, узел ушёл из эфира) теперь отваливаются за 15 секунд вместо ~127 секунд молчания — ограничение только на установку соединения, уже идущие загрузки и потоки не затронуты. Авто-группа больше не продолжает слать трафик через переставший отвечать узел: она уходит на рабочий сразу, а не ждёт следующей плановой проверки. И снова работают REALITY-ноды на свежеобновлённых Xray-серверах.
  • Определение формата тела вынесено в одну функцию (ClassifySubscriptionBody) вместо двух независимых проверок, расходившихся в решениях. Секции route, dns, inbounds и experimental импортированного конфига намеренно не читаются и показываются в UI как проигнорированные.
  • Импортированные outbound'ы проходят те же санитайзы, что и ноды из URI: allowlist uTLS, REALITY public_key/short_id, flow, packet_encoding, obfs hysteria2, снятие uTLS/REALITY на QUIC. Битая запись гасит только свою ноду, остальная подписка не страдает.
  • Починен вылет при сохранении визарда. UpdateTemplatePreviewAsync трогал виджеты Fyne напрямую, работая внутри фоновой горутины — гонка, которую сам Fyne помечал как «Error in Fyne call thread». Проявлялась тем, что приложение просто закрывалось на последнем шаге сохранения, чаще всего после смены языка и переключения режима группы.
  • state.json больше не экранирует &, < и > в последовательности вида &. Значения всегда были корректны — Go экранирует HTML по умолчанию, — но URL подписок и строки превью выглядели нечитаемо в файле, который открывают руками.
  • build/build_darwin.sh без указания типа сборки теперь собирает под архитектуру текущей машины, а не universal — это обычный локальный случай и заметно быстрее. Релизы не затронуты: CI передаёт universal / catalina явно.
  • build/build_darwin.sh -i после установки проверяет печать бандла и переподписывает его, если Contents/_CodeSignature исчез — иначе macOS отказывается запускать приложение с бесполезным диалогом «Не удаётся открыть программу». Перед переподписью bin/ и logs/ временно выносятся: они лежат внутри подписываемой области и могут принадлежать root после работы ядра с правами администратора.

Don't miss a new singbox-launcher release

NewReleases is sending notifications on new releases.