Files
Unlucky-Launcher/packaging/release-notes.md
T
AskaEth 5597a4cc18 feat(release,docs): M149 发布构建烘入微软登录 id(仓库 Secret),文档改为「官方构建开箱即用」
构建侧:release-build.yml 声明 on.workflow_call.secrets.ULL_MSA_CLIENT_ID(required: false),
cargo build 步以 env 注入它,option_env! 把它烘进二进制;release.yml 的 build job 按名显式透传
(与 PUBLISH_TOKEN 同一模式,不用 inherit)。真值放仓库 Secret,不进任何 git 文件;Secret 未录入
或 Actions 之外求值为空串时,client_id.rs 的 blank_env_value_counts_as_missing 保证「空白=没配」,
不会拿空 id 去联网。

文档:README 两版 / help.rs 的 accounts topic / packaging/release-notes.md /
packaging/docs/build-and-ci.md 统一成「官方构建已内置登录所需配置、开箱即用,仍可用环境变量
ULL_MSA_CLIENT_ID 覆盖;自建想自带就构建时注入」的功能性口径 —— 不出现 id 本身,也不出现归属描述。
client_id.rs 的模块注释与测试注释同步(原文写「id 不进仓库(用户定案)」,已随 Secret 方案改写),
并记下「别把 ULL_MSA_CLIENT_ID 导出到跑 cargo test 的 shell」——presenter 的 M132 入口锚会在
已烘焙 id 的构建里故意红。

实测:ULL_MSA_CLIENT_ID=<id> cargo build --bin ull 后,清空 env 跑 ull accounts add msa 打出
用户码与链接(无「未配置」提示);同二进制设一个假 env id 则 AADSTS700016 点名该假 id(env 覆盖生效)。
单测:core auth 28、unlucky-cli 全套、i18n 30、presenter 222 全绿;M132 锚在烘焙构建里按设计红、
在不带 id 的构建里绿。cargo fmt --all --check 通过。
2026-11-06 21:08:53 +08:00

7.3 KiB

Unlucky Launcher {{VERSION}}

Rust-native single-file Minecraft launcher: iced 0.14 + Material 3 Expressive UI, built-in AI agent (chat / setting edits / crash diagnosis) and an MCP server other agent tools can attach to. No WebView, no bundled runtime, no JRE download needed to start the launcher itself.

Downloads

Asset names are <name>_<version>_<platform>_<arch>, underscore separated — the rule packaging/make_artifacts.py::asset_stem() applies:

Platform Asset Notes
Windows 10/11 x64 unlucky-launcher_{{VERSION}}_windows_x64.exe single exe, double-click to run; this is also what you run on ARM64 Windows (x64 emulation)

Windows ARM64 is not part of this release. CI still builds it on a native windows-11-arm runner for evidence, but that slot's toolchain check has not gone green yet, so unlucky-launcher_{{VERSION}}_windows_arm64.exe is deliberately kept out of the download list and out of SHA256SUMS.txt instead of handing out a build nobody has verified. windows-x64 is the only published slot; ARM64 rejoins this table as soon as its build is green (one line in the workflow's PUBLISH_SLOTS).

This release ships Windows only, and CI builds Windows only. The Linux (x64 / arm64) and macOS (Apple Silicon / Intel) slots are not built by the release workflow at all — they have not been verified on real machines yet, so nothing unverified is handed out and no build minutes are spent on them. They stay out of the download list and out of SHA256SUMS.txt until that verification happens; a manual workflow run can build all six slots for that purpose, but the four extra slots are never published. The support matrix below marks those slots accordingly.

The Windows asset is a bare .exe, so LICENSE, NOTICE and README.md are attached to this release next to it: the license terms travel with every download. Slots that ship an archive (Linux / macOS, once published) unpack to one top-level directory of the same name holding the binary plus those three documents.

Command line

Each published slot also ships the command line as its own small bare asset, ull_{{VERSION}}_<platform>_<arch> (.exe on Windows):

.\ull_{{VERSION}}_windows_x64.exe instances list   # servers and CI: no graphics stack needed

ull runs instances, install, pack import, launch, accounts, sessions, logs, diag, config, java and agent, and links no graphics library at all. The GUI binary accepts the same set before it ever opens a window, so a desktop machine does not need ull.

Support matrix

Published = shipped as a download of this release, listed in SHA256SUMS.txt.

Platform Status in this release Level Runtime requirements
Windows 10/11 x64 published first class nothing beyond the OS (UCRT is part of Win10+)
Windows 11 ARM64 not published (build chasing, unverified) first class (launcher artifact) nothing extra; the launcher runs natively, the game itself runs through the OS x64 emulation layer with an x64 JDK
macOS 12+ Apple Silicon not built (unverified) first class (unverified) nothing; unsigned build, needs the Gatekeeper workaround
macOS 12+ Intel not built (unverified) first class (unverified) same as above
Linux x64, X11 not built (unverified) first class (unverified) libxkbcommon, fontconfig, libGL (or software renderer), libxcb
Linux x64, Wayland not built (unverified) supported (unverified) wayland-client, libxkbcommon, plus the X11 set for XWayland apps
Linux arm64, X11 not built (unverified) first class (unverified) glibc 2.35+, libxkbcommon, fontconfig, libGL, libxcb
Linux arm64, Wayland not built (unverified) supported (unverified) the above plus wayland-client
Windows 8.1/8/7 not built unsupported the baseline is Windows 10
Android — Termux + X11 not built (no CI slot) experimental, not promised CLI only and only when built from source; GUI unverified

windows-x64 is the only published slot this release; Windows ARM64 is kept out until its build is green (see Downloads above). Both arm64 rows are formal matrix slots, not the experimental Termux path, and Linux arm64 is not built by default — someone has to run it on real hardware (via a manual all-slots run) before it joins this list. The rows above and the matrix table in packaging/README.md §9 are the same list — change one, change the other.

Install

Windows — put the .exe anywhere and run it. _windows_x64.exe is the only Windows asset in this release, and it is also what you run on ARM64 Windows (the OS runs it through its x64 emulation layer). The first run creates .ULL/ and .minecraft/ next to the exe (portable is the default data mode); the per-user %APPDATA%\ULL plus %APPDATA%\.minecraft, or a custom root, are selectable instead.

Linux / macOS are not part of this release; their asset names are already fixed by the same rule (unlucky-launcher_{{VERSION}}_linux_x64.tar.gz, _linux_arm64, _macos_arm64, _macos_x64) so the links will not change shape when those slots open.

No GPU? Software renderer

The UI renders through wgpu (GPU) and falls back to the tiny-skia CPU rasteriser when no usable adapter is present; --software-renderer (or its equivalent --renderer=cpu) forces that path.

Verify the download

SHA256SUMS.txt lists exactly the assets attached to this release (Windows only), and sha256sum -c checks the ones you actually downloaded:

sha256sum -c SHA256SUMS.txt --ignore-missing   # Linux / WSL
shasum -a 256 -c SHA256SUMS.txt                # macOS (sha256sum is not bundled)
Get-FileHash .\unlucky-launcher_{{VERSION}}_windows_x64.exe -Algorithm SHA256   # Windows PowerShell
{{SUMS}}

Known limitations of this build

  • Microsoft (MSA) sign-in works out of the box: this build carries the Azure public client id it needs (a public client id, not a credential — it ships inside the binary), so there is nothing to configure before signing in. Setting ULL_MSA_CLIENT_ID=<id> before launching still overrides it; the variable is read at startup, so restart the launcher after changing it. A build with no id anywhere stops before any network call, and the GUI banner says so plainly: the title "Microsoft sign-in is not configured", a body naming ULL_MSA_CLIENT_ID=<id> (set it, or build with it, then restart) and Code: msa_not_configured, with no Retry button. Every other sign-in failure keeps the generic banner plus its own Code: line, with the full reason only in the launcher log. ull accounts add msa prints the same fix on the command line. Offline profiles and authlib-injector servers need no id.
  • Binaries are not code-signed / notarized yet: Windows SmartScreen and macOS Gatekeeper warn on first launch. The checksums above are the integrity reference for now.
  • When the macOS slot ships it is the bare binary (single-file promise), not a .app bundle: no Dock icon or Finder double-click — launch it from a terminal.

License

Apache-2.0, third-party notices in NOTICE. Not affiliated with Mojang or Microsoft; no game files ship.

UI framework in this build

Every asset here is built from the iced UI (crates/app-iced, iced 0.14, MIT); no other UI framework is linked into it.