Skip to content

release v1.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 14 Jul 20:04

Release v1.2.0

Downloads

macOS (Universal) - Supports both Apple Silicon and Intel

Option 1: Installation Script (Recommended)

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

curl -fsSL https://raw.githubusercontent.com/Leadaxe/singbox-launcher/develop/scripts/install-macos.sh | bash -s -- v1.2.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.2.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.2.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.2.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.2.0 — WARP built in, NaiveProxy out of the box, FakeIP, loadbalance, AnyTLS, anti-DPI TLS

Core pinned: sing-box-lx 1.14.0-lx.4. No config migration needed.

EN

Highlights

  • NaïveProxy nodes now install-and-work. Core Download/Reinstall extracts the libcronet companion library (libcronet.dll / .dylib / .so) from the core release archive into bin/ — the naive outbound loads it at runtime, and without it every naive+https:// node failed sing-box check with a cryptic error. On cores that can't do naive at all (built without with_naive_outbound — e.g. the Windows 7 build — or missing libcronet), naive nodes are now degraded with a warning (Update toast + rebuild warnings) instead of one node breaking the whole config. (SPEC 044 feature-probe follow-up)
  • Core bumped to sing-box-lx 1.14.0-lx.4 (from 1.13.13-lx.6). Same build tags (with_clash_api + with_xhttp + with_awg + with_quic/with_gvisor), plus the MASQUE (CONNECT-IP / WARP) outbound the fork device-verified in lx.2, plus working NaiveProxy on every desktop platform: lx.4 ships libcronet.dll inside the Windows archives and links cronet statically on macOS (CGO) and Linux (musl). Update via Core Dashboard → Download/Reinstall; no config migration is needed. (SPEC 072)
  • Cloudflare WARP built in. Sources tab gets an "Add WARP" button: the launcher registers a WARP account with Cloudflare and generates a ready-to-use AmneziaWG endpoint. A full WARP configurator (separate window) exposes every AWG field, obfuscation presets, and the MASQUE transport; endpoint pools ship as an embedded warp_endpoints.json. (SPEC 084.1 / 084.2)
  • MASQUE (CONNECT-IP) outbound. warp://-style MASQUE nodes parse and generate into the fork's MASQUE outbound — device-verified on core lx.3+. (SPEC 086)
  • Load-balancing outbound type. Edit Outbound now offers a third top-level Type — manual | auto | loadbalance: a round-robin balancer over the node pool with optional sticky sessions (sticky_hash by process / dest IP / dest port). (SPEC 088)
  • AnyTLS protocol in subscriptions. anytls:// nodes now parse into a sing-box anytls outbound (password in userinfo, mandatory TLS, session-pool tuning) and round-trip back to a share URI. (SPEC 091)
  • Anti-DPI TLS transforms. New opt-in Settings toggles split the TLS ClientHello (tls.fragment), split every TLS record (tls.record_fragment), and scramble the SNI letter case — applied to first-hop TLS proxy outbounds to defeat SNI-based DPI/TSPU blocking in RU/CIS networks. Off by default (no config change until enabled). (SPEC 092)
  • FakeIP. A new FakeIP routing preset answers proxied A/AAAA lookups from a synthetic pool (real domain recovered by sniffing) for faster connects and fewer DNS leaks; FakeIP mappings persist across restarts. (SPEC 085)
  • Native file picker for "Add from file". The Sources "Add from file" button now opens the real system file dialog instead of the in-app one — Finder on macOS, the Windows Open dialog, and zenity/kdialog on Linux (falls back to the in-app dialog if neither is installed). (SPEC 082)
  • XHTTP transport: full Xray field set parsed. type=xhttp nodes from subscriptions now carry the complete XHTTP-v2 field set, not just the base mode/path/host. The parser reads placement and key fields (session_*, seq_*, uplink_data_*, uplink_chunk_size, uplink_http_method), the X-Padding obfuscation block (x_padding_obfs_mode, x_padding_key, x_padding_header, x_padding_placement, x_padding_method), and packet-up tuning (sc_max_each_post_bytes, sc_min_posts_interval_ms) — from both flat query params and the extra URL-encoded JSON blob. All fields round-trip back into the share URI. (SPEC 071)

Technical / Internal

  • core/core_capabilities.go: new CoreSupportsNaive probe — parses the Tags: line of sing-box version (with_naive_outbound; for with_purego builds also checks libcronet presence, mirroring cronet-go's loader search order: binary dir + PATH / LD_LIBRARY_PATH / DYLD_LIBRARY_PATH + /usr/local/lib + /usr/lib). Cached by the core binary's (mtime, size) so a mid-session core reinstall re-probes. Conservative: any uncertainty → "supported" (never drops nodes on guesswork; sing-box check stays the backstop). Wired into the generator via the config.NaiveSupportProbe package hook (same pattern as subscription.LookupCachedBody); degraded count travels as OutboundGenerationResult.SkippedNaiveNodes/Reason → Update toast, and as ParsedCache.WarningsConfigBuilt event on rebuild. (SPEC 044)
  • core_downloader.go: extractZip/extractTarGz now return companion libraries (libcronet.* archive entries) alongside the binary; DownloadCore installs them next to SingboxBundledPath through the same .old-rotation path as the binary (safe against a locked DLL on Windows while the VPN is running). Requires the core release archive to actually ship libcronet — fork release lx.4+. (SPEC 044)
  • platform.PickOpenFile (file_dialog_{darwin,windows,linux,stub}.go) shells out to osascript / PowerShell OpenFileDialog -STA / zenity|kdialog — no new Go dependency, matching the existing per-OS exec.Command pattern. Returns ErrNativeDialogUnavailable so the UI falls back to the Fyne dialog. (SPEC 082)
  • internal/constants.RequiredCoreVersion1.14.0-lx.1-rc.17. The fork tag now carries a double suffix (-lx.1-rc.17), so the TestRequiredCoreVersion_SemVerShape invariant regex was generalized to X.Y.Z + any dot-separated prerelease identifiers (still rejects branch names / empty / a leading v / dangling dashes). Runtime paths (release-tag URL, asset-suffix match, CompareVersions) already tolerate the double suffix unchanged. rc.17 also restores the with_clash_api build tag that rc.16 dropped — without it, configs carrying experimental.clash_api are rejected at load. (SPEC 072)
  • core/config/subscription/node_parser_transport.go: xhttpTransportFromQuery extended from the base trio to the full SPEC 002 v2 set. New xhttpMergeSource decodes the extra URL-encoded JSON and merges it (extra wins over flat query); JSON numbers are stringified with the redundant .0 dropped (30.0"30"). xhttpCleanPath trims a ?-tail from path (/x?ed=2048/x). Legacy scMaxConcurrentPosts and server-only params are accept-but-ignore (dropped). core/config/outbound_jsonbuilder.go emits the 14 new snake_case keys in deterministic order; shareuri_helpers.go round-trips them back into the URI. Tests: xhttp_v2_test.go (flat/extra parse, extra-priority, path-trim, golden round-trip) + flow_transport_test.go (config.json emission). (SPEC 071)

RU

Основное

  • Ядро обновлено до sing-box-lx 1.14.0-lx.4. Те же build-теги плюс MASQUE (CONNECT-IP / WARP) outbound из lx.2 и рабочий NaiveProxy на всех десктопных платформах: lx.4 кладёт libcronet.dll в Windows-архивы, а на macOS (CGO) и Linux (musl) cronet вкомпилен статически. Обновить: Core Dashboard → Download/Reinstall; миграция конфигов не нужна. (SPEC 072)
  • Встроенный Cloudflare WARP. На вкладке Sources — кнопка «Add WARP»: лаунчер регистрирует WARP-аккаунт у Cloudflare и генерирует готовый AmneziaWG-endpoint. Полный WARP-конфигуратор (отдельное окно) открывает все AWG-поля, пресеты обфускации и транспорт MASQUE; пулы endpoint'ов зашиты в embedded warp_endpoints.json. (SPEC 084.1 / 084.2)
  • MASQUE (CONNECT-IP) outbound. MASQUE-ноды парсятся и генерируются в MASQUE-outbound форка — проверено на устройствах с ядром lx.3+. (SPEC 086)
  • Тип outbound «loadbalance». В Edit Outbound теперь третий top-level Type — manual | auto | loadbalance: round-robin балансировщик по пулу нод с опциональными sticky-сессиями (sticky_hash по процессу / IP назначения / порту назначения). (SPEC 088)
  • Ноды NaïveProxy теперь работают «из коробки». Download/Reinstall ядра извлекает companion-библиотеку libcronet (libcronet.dll / .dylib / .so) из релизного архива ядра в bin/ — naive outbound подгружает её в рантайме, а без неё каждая нода naive+https:// валила sing-box check невнятной ошибкой. На ядрах без naive вообще (собранных без with_naive_outbound — например, сборка для Windows 7 — или без libcronet) naive-ноды теперь деградируются с предупреждением (тост Update + warnings при rebuild), а не ломают весь конфиг одной нодой. (SPEC 044, доделан feature-probe)
  • Протокол AnyTLS в подписках. Ноды anytls:// парсятся в sing-box anytls outbound (пароль в userinfo, обязательный TLS, тюнинг session-pool) и round-трипятся обратно в share-URI. (SPEC 091)
  • Anti-DPI TLS-трансформации. Новые opt-in переключатели в Settings: разрезание TLS ClientHello (tls.fragment), разрезание каждой TLS-record (tls.record_fragment) и перемешивание регистра букв SNI — применяются к first-hop TLS-outbound'ам против SNI-based DPI/ТСПУ-блокировок в RU/CIS-сетях. По умолчанию выключены (конфиг не меняется, пока не включишь). (SPEC 092)
  • FakeIP. Новый routing-пресет FakeIP отвечает на проксируемые A/AAAA-запросы адресами из синтетического пула (реальный домен восстанавливается сниффингом) — быстрее коннекты, меньше DNS-утечек; маппинги FakeIP переживают рестарты. (SPEC 085)
  • Нативный выбор файла для «Добавить из файла». Кнопка «Добавить из файла» на вкладке Sources теперь открывает родное системное окно выбора файла вместо встроенного — Finder на macOS, окно «Открыть» на Windows, zenity/kdialog на Linux (если ни того, ни другого нет — встроенный диалог). (SPEC 082)
  • Транспорт XHTTP: парсится полный набор полей Xray. Ноды type=xhttp из подписок теперь несут полный набор XHTTP v2, а не только базовые mode/path/host. Парсер читает поля placement и ключей (session_*, seq_*, uplink_data_*, uplink_chunk_size, uplink_http_method), блок обфускации X-Padding (x_padding_obfs_mode, x_padding_key, x_padding_header, x_padding_placement, x_padding_method) и packet-up tuning (sc_max_each_post_bytes, sc_min_posts_interval_ms) — как из плоских query-параметров, так и из URL-encoded JSON-блоба extra. Все поля round-трипятся обратно в share-URI. (SPEC 071)

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

  • core/core_capabilities.go: новый probe CoreSupportsNaive — разбирает строку Tags: из sing-box version (with_naive_outbound; для with_purego-сборок дополнительно проверяет наличие libcronet, повторяя порядок поиска загрузчика cronet-go: каталог бинаря + PATH / LD_LIBRARY_PATH / DYLD_LIBRARY_PATH + /usr/local/lib + /usr/lib). Кэш по (mtime, size) бинаря ядра — переустановка ядра в той же сессии перепроверяется. Консервативен: любая неопределённость → «поддержано» (ноды не выкидываются по догадкам; страховкой остаётся sing-box check). Подключён к генератору через package-hook config.NaiveSupportProbe (тот же паттерн, что subscription.LookupCachedBody); счётчик деградации едет как OutboundGenerationResult.SkippedNaiveNodes/Reason → тост Update, и как ParsedCache.Warnings → событие ConfigBuilt при rebuild. (SPEC 044)
  • core_downloader.go: extractZip/extractTarGz теперь возвращают companion-библиотеки (записи libcronet.* в архиве) вместе с бинарём; DownloadCore ставит их рядом с SingboxBundledPath через ту же .old-ротацию, что и бинарь (безопасно при залоченной DLL на Windows, пока VPN запущен). Требует, чтобы релизный архив ядра реально содержал libcronet — релиз форка lx.4+. (SPEC 044)
  • platform.PickOpenFile (file_dialog_{darwin,windows,linux,stub}.go) вызывает osascript / PowerShell OpenFileDialog -STA / zenity|kdialog — без новых Go-зависимостей, по существующему per-OS exec.Command паттерну. Возвращает ErrNativeDialogUnavailable → UI откатывается на Fyne-диалог. (SPEC 082)
  • internal/constants.RequiredCoreVersion1.14.0-lx.1-rc.17. Форк-тег теперь с двойным суффиксом (-lx.1-rc.17), поэтому regex-инвариант TestRequiredCoreVersion_SemVerShape обобщён до X.Y.Z + любые dot-separated prerelease-идентификаторы (по-прежнему отвергает branch-имена / пустую строку / ведущий v / висячий дефис). Runtime-пути (URL релиз-тега, матч суффикса ассета, CompareVersions) переваривают двойной суффикс без изменений. rc.17 также возвращает build-тег with_clash_api, который выпал в rc.16 — без него конфиги с experimental.clash_api отклоняются на load. (SPEC 072)
  • core/config/subscription/node_parser_transport.go: xhttpTransportFromQuery расширена с базового трио до полного набора SPEC 002 v2. Новая xhttpMergeSource декодирует extra (URL-encoded JSON) и сливает его (extra важнее плоских query); JSON-числа приводятся к строке с отбросом лишнего .0 (30.0"30"). xhttpCleanPath обрезает ?-хвост у path (/x?ed=2048/x). Legacy scMaxConcurrentPosts и серверные параметры — accept-but-ignore (дропаются). core/config/outbound_jsonbuilder.go эмитит 14 новых snake_case-ключей в детерминированном порядке; shareuri_helpers.go round-трипит их обратно в URI. Тесты: xhttp_v2_test.go (парсинг плоских/extra, приоритет extra, обрезка path, golden round-trip) + flow_transport_test.go (эмиссия в config.json). (SPEC 071)