Files
Unlucky-Launcher/packaging/release-notes.md
T
AskaEth 5a9d67530a docs(packaging): M129 r1 P1-1 —— MSA 那段改成 GUI 现有行为,不再写「界面会告诉你怎么配」
复审 r1 把链路走了一遍:core 缺 id 早退(零网络)成立,但 presenter 的 fail() 只把原文
eprintln 进日志,事件只带原因码 Other;账户页据此画通用横幅「Sign-in failed」+「Code: other」,
完整原因在日志里。LaunchMsaNotConfigured 那条 i18n 目前只有定义/单测/golden,GUI 零调用点。
所以上一版「the app says "not configured" (with the command to fix it)」是把设计意图写成了现有行为。

改成分段如实描述:无 id 时在联网之前就停;GUI 显示通用横幅 + Code: other(原因在日志);
`ull accounts add msa` 会打出可照抄的修复命令(map_auth_error 的 hint,含变量名与 cargo build)。
另按 r1 P2-1 给 macOS 补 shasum 校验行(sha256sum 不是 macOS 自带)。
2026-11-05 18:00:55 +08:00

110 lines
5.8 KiB
Markdown

# 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 |
| Windows 11 ARM64 | `unlucky-launcher_{{VERSION}}_windows_arm64.exe` | single exe, runs natively on ARM64 Windows |
| Linux x64 (X11/Wayland) | `unlucky-launcher_{{VERSION}}_linux_x64.tar.gz` | single binary inside, no installer |
| Linux arm64 (X11/Wayland) | `unlucky-launcher_{{VERSION}}_linux_arm64.tar.gz` | single binary inside; needs glibc 2.35+ |
| macOS 12+ Apple Silicon | `unlucky-launcher_{{VERSION}}_macos_arm64.tar.gz` | single binary inside, no installer |
| macOS 12+ Intel | `unlucky-launcher_{{VERSION}}_macos_x64.tar.gz` | single binary inside, no installer |
Each archive unpacks to one top-level directory of the same name holding the binary plus `LICENSE`,
`NOTICE` and `README.md`; the Windows assets are bare `.exe` files, so those three documents are attached
to this release next to them — the license terms travel with every download.
Every slot also ships the command line as its own small bare asset,
`ull_{{VERSION}}_<platform>_<arch>` (`.exe` on Windows):
```bash
chmod +x ull_{{VERSION}}_linux_x64 # release assets carry no executable bit
./ull_{{VERSION}}_linux_x64 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
| Platform | Level | Runtime requirements |
| --- | --- | --- |
| Windows 10/11 x64 | first class | nothing beyond the OS (UCRT is part of Win10+) |
| Windows 11 ARM64 | 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+ (arm64 / x64) | first class | nothing; unsigned build, see the Gatekeeper note |
| Linux x64, X11 | first class | `libxkbcommon`, `fontconfig`, `libGL` (or software renderer), `libxcb` |
| Linux x64, Wayland | supported | `wayland-client`, `libxkbcommon`, plus the X11 set for XWayland apps |
| Linux arm64, X11 | first class | glibc 2.35+ (same floor as x64), `libxkbcommon`, `fontconfig`, `libGL`, `libxcb` |
| Linux arm64, Wayland | supported | the above plus `wayland-client` |
| Windows 8.1/8/7 | unsupported | the baseline is Windows 10 |
| Android — Termux + X11 | experimental, not promised | CLI only and only when built from source; GUI unverified; not part of this release matrix |
Both arm64 rows are **formally released slots** (assets ship here and in `SHA256SUMS.txt`), not the
experimental Termux path: Linux arm64 is built and smoke-tested on a native ARM64 runner, Windows ARM64 is
cross-built with the same static-CRT gate as x64.
## Install
**Windows** — put the `.exe` anywhere and run it (pick `_windows_arm64.exe` on ARM64 Windows,
`_windows_x64.exe` everywhere else). 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**
```bash
tar -xzf unlucky-launcher_{{VERSION}}_linux_x64.tar.gz # _linux_arm64 on aarch64; _macos_arm64 / _macos_x64 on macOS
cd unlucky-launcher_{{VERSION}}_linux_x64 # ditto
xattr -d com.apple.quarantine unlucky-launcher # macOS only: unsigned build, Gatekeeper
chmod +x unlucky-launcher && ./unlucky-launcher
```
## 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
```bash
sha256sum -c SHA256SUMS.txt --ignore-missing # Linux
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 needs an Azure public client id, and release binaries do not carry one: set
`ULL_MSA_CLIENT_ID=<id>` before launching, or build with that variable set. Without it sign-in stops
before any network call; in the GUI that shows up as the generic "Sign-in failed" banner with
`Code: other` (the full reason goes to the launcher log), and `ull accounts add msa` prints the exact
fix. 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.
- macOS ships 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 Slint code is linked
into it. The earlier Slint UI (`crates/app`) stays in the repository as historical source only —
excluded from the workspace, not built, in no asset and in no release slot. The Slint Royalty-Free 2.0
attribution it carried belongs to the `v0.1.0` release and remains where it was published.