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.0The 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.0-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.0-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.0-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.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
libcronetcompanion library (libcronet.dll / .dylib / .so) from the core release archive intobin/— the naive outbound loads it at runtime, and without it everynaive+https://node failedsing-box checkwith a cryptic error. On cores that can't do naive at all (built withoutwith_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(from1.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 shipslibcronet.dllinside 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_hashby process / dest IP / dest port). (SPEC 088) - AnyTLS protocol in subscriptions.
anytls://nodes now parse into a sing-boxanytlsoutbound (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=xhttpnodes from subscriptions now carry the complete XHTTP-v2 field set, not just the basemode/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 theextraURL-encoded JSON blob. All fields round-trip back into the share URI. (SPEC 071)
Technical / Internal
core/core_capabilities.go: newCoreSupportsNaiveprobe — parses theTags:line ofsing-box version(with_naive_outbound; forwith_puregobuilds 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 checkstays the backstop). Wired into the generator via theconfig.NaiveSupportProbepackage hook (same pattern assubscription.LookupCachedBody); degraded count travels asOutboundGenerationResult.SkippedNaiveNodes/Reason→ Update toast, and asParsedCache.Warnings→ConfigBuiltevent on rebuild. (SPEC 044)core_downloader.go:extractZip/extractTarGznow return companion libraries (libcronet.*archive entries) alongside the binary;DownloadCoreinstalls them next toSingboxBundledPaththrough 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 releaselx.4+. (SPEC 044)platform.PickOpenFile(file_dialog_{darwin,windows,linux,stub}.go) shells out toosascript/ PowerShellOpenFileDialog -STA/zenity|kdialog— no new Go dependency, matching the existing per-OSexec.Commandpattern. ReturnsErrNativeDialogUnavailableso the UI falls back to the Fyne dialog. (SPEC 082)internal/constants.RequiredCoreVersion→1.14.0-lx.1-rc.17. The fork tag now carries a double suffix (-lx.1-rc.17), so theTestRequiredCoreVersion_SemVerShapeinvariant regex was generalized toX.Y.Z+ any dot-separated prerelease identifiers (still rejects branch names / empty / a leadingv/ dangling dashes). Runtime paths (release-tag URL, asset-suffix match,CompareVersions) already tolerate the double suffix unchanged. rc.17 also restores thewith_clash_apibuild tag that rc.16 dropped — without it, configs carryingexperimental.clash_apiare rejected at load. (SPEC 072)core/config/subscription/node_parser_transport.go:xhttpTransportFromQueryextended from the base trio to the full SPEC 002 v2 set. NewxhttpMergeSourcedecodes theextraURL-encoded JSON and merges it (extra wins over flat query); JSON numbers are stringified with the redundant.0dropped (30.0→"30").xhttpCleanPathtrims a?-tail frompath(/x?ed=2048→/x). LegacyscMaxConcurrentPostsand server-only params are accept-but-ignore (dropped).core/config/outbound_jsonbuilder.goemits the 14 new snake_case keys in deterministic order;shareuri_helpers.goround-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-boxanytlsoutbound (пароль в 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: новый probeCoreSupportsNaive— разбирает строку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-hookconfig.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/ PowerShellOpenFileDialog -STA/zenity|kdialog— без новых Go-зависимостей, по существующему per-OSexec.Commandпаттерну. ВозвращаетErrNativeDialogUnavailable→ UI откатывается на Fyne-диалог. (SPEC 082)internal/constants.RequiredCoreVersion→1.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). LegacyscMaxConcurrentPostsи серверные параметры — accept-but-ignore (дропаются).core/config/outbound_jsonbuilder.goэмитит 14 новых snake_case-ключей в детерминированном порядке;shareuri_helpers.goround-трипит их обратно в URI. Тесты:xhttp_v2_test.go(парсинг плоских/extra, приоритет extra, обрезка path, golden round-trip) +flow_transport_test.go(эмиссия в config.json). (SPEC 071)