Play Minecraft Legends (Windows edition) on Linux with the copy you own.
LegendsOnLinux signs in to your Microsoft account, downloads the game from Microsoft's own servers (only if your account owns it), and runs it with a patched WineGDK engine. It also signs the game in to Xbox Live.
Status: early. The game reaches the main menu, signs in to Xbox Live and saves locally. Online multiplayer is untested. Saves stay on this PC and do not sync with your Xbox/Windows cloud saves.
The Microsoft Store build of Legends is a GDK ("Gamecore") title, not a
UWP app. It depends on Microsoft's Gaming Runtime (xgameruntime.dll) for
Xbox sign-in, the Store license check and save games, and neither Wine nor
Proton provides it. WineGDK does, and LegendsOnLinux adds the two parts
Legends needs on top of it:
| Symptom without it | Cause | Fix (engine/patches/) |
|---|---|---|
| Stuck at the first loading bar | The Store license query always fails | 0001: answer it with an active license |
| Stuck at "Loading, please wait" after sign-in | WineGDK has no XGameSave | 0002: XGameSave on local storage |
| Part | How |
|---|---|
| Ownership, licence, download | xodus-cli signs in as a Windows Store device and streams the package from the Xbox CDN. |
| Decryption | The game's executable stays encrypted on disk, as on Windows. xodus-cli run decrypts it into memory at every launch. |
| Xbox Live in the game | A Microsoft device-code sign-in. The launcher builds the Xbox Live token chain itself and hands it to WineGDK. |
| Engine | BedrockOnLinux's published WineGDK build, with xgameruntime.dll replaced by our build of the same source plus engine/patches/ (published as a release of this repository). |
| Network | The game's XCurl.dll is swapped for an OpenSSL build, because Azure drops Wine's TLS. |
All downloaded components are pinned by SHA-256 in
legends_on_linux/config.py.
- x86-64 Linux with a Vulkan GPU driver
- Python ≥ 3.10 with
cryptography, andPySide6for the launcher window libwebkit2gtk-4.1(for the Microsoft Store sign-in window)- About 13 GB of disk space for the game, plus about 3 GB for the engine and runtime
On Fedora: sudo dnf install python3-cryptography python3-pyside6 webkit2gtk4.1
On Debian/Ubuntu (from a checkout): sudo apt install python3-cryptography python3-pyside6.qtwidgets libwebkit2gtk-4.1-0
(or pip install PySide6 where the distribution has no PySide6 package)
Download the .noarch.rpm from the
latest release
and install it (dnf pulls in its dependencies):
sudo dnf install ./legends-on-linux-*.noarch.rpmThen start LegendsOnLinux from the application menu, or run legends-on-linux.
To build the package yourself: scripts/build-rpm.sh (needs rpm-build).
Download the _amd64.deb from the
latest release
and install it (apt pulls in its dependencies):
sudo apt install ./legends-on-linux_*_amd64.debIt works on Ubuntu 22.04 and newer and Debian 12 and newer. It bundles PySide6,
because Ubuntu's LTS releases do not package it. To build it yourself:
scripts/build-deb.sh (uses a Debian container through podman or docker when
dpkg-deb is not installed).
Download LegendsOnLinux-*-x86_64.AppImage from the
latest release,
make it executable and run it:
chmod +x LegendsOnLinux-*-x86_64.AppImage
./LegendsOnLinux-*-x86_64.AppImage # opens the launcher
./LegendsOnLinux-*-x86_64.AppImage desktop-entry # optional: add it to the menuIt carries its own Python and Qt. It needs glibc 2.34 or newer (Ubuntu 22.04+,
Debian 12+, Fedora 35+) and WebKitGTK 4.1 for the Microsoft Store sign-in
(Fedora: webkit2gtk4.1, Debian/Ubuntu: libwebkit2gtk-4.1-0); the launcher
tells you if it is missing. On SteamOS and other read-only systems, use the
Flatpak. To build it yourself: scripts/build-appimage.sh.
Download LegendsOnLinux-*-x86_64.flatpak from the
latest release
and install it for your user (it pulls in the GNOME 51 runtime from Flathub):
flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak install --user ./LegendsOnLinux-*-x86_64.flatpak
flatpak run io.github.mdx0111.LegendsOnLinuxThe Flatpak keeps its data in the same ~/.local/share/legends-on-linux as
the .deb and .rpm, so switching formats keeps your sign-ins, game and saves.
It can see your home folder. For a game folder outside it, allow that folder
once:
flatpak override --user --filesystem=/path/to/games io.github.mdx0111.LegendsOnLinuxTo build it yourself: scripts/build-flatpak.sh (needs org.flatpak.Builder
and the GNOME 51 SDK from Flathub; see the script).
git clone https://github.com/mdx0111/LegendsOnLinux.git
cd LegendsOnLinux
./legends-on-linux # opens the launcher
./legends-on-linux desktop-entry # optional: add it to your application menuIn the window, sign in to the Microsoft Store and Xbox Live, press Install (or Change… to pick a folder you already downloaded the game into), then PLAY. The first play downloads the engine (about 820 MB) and the Steam Linux Runtime (about 900 MB), and creates the Wine prefix. The ⋮ menu opens the game, saves and log folders, and turns on debug logging.
./legends-on-linux setup # engine, umu, xodus-cli, Wine prefix
./legends-on-linux login # Store sign-in window, then an Xbox Live code
./legends-on-linux install # download the game (~12 GB)
./legends-on-linux playIf you already downloaded the game with xodus-cli, point the launcher at that folder instead of downloading it again:
./legends-on-linux use "/path/to/Minecraft Legends"./legends-on-linux status shows what is set up.
login runs two sign-ins with the same account, as BedrockOnLinux does:
- Microsoft Store (
login --store): a sign-in window from xodus-cli. It proves ownership and decrypts the game. The first time, it registers this PC as one of the (up to ten) Store devices on your account. - Xbox Live (
login --xbox): open the link shown and enter the code. This is the account the game itself plays as.
LegendsOnLinux needs your Microsoft account, so here is exactly what it does
with it. The code is small and readable: the sign-ins are in
legends_on_linux/auth.py and
legends_on_linux/store.py.
Your password
- Xbox Live uses Microsoft's device-code sign-in, the same flow consoles and TVs use. You type your password and code into microsoft.com/link in your own browser; the launcher never sees the password, only the token Microsoft hands back.
- Microsoft Store sign-in is done by xodus-cli (GPL-3.0), the same tool BedrockOnLinux uses. It opens Microsoft's sign-in page in its own window. The first time, your system may also ask for an administrator password: xodus-cli reads the firmware's system information to register this PC as a Store device. Cancelling that prompt is fine.
What is stored, and where
Everything stays on your computer, in folders only your user can open:
| What | Where (under ~/.local/share/legends-on-linux/) |
|---|---|
| Xbox Live refresh token, a device key, short-lived Xbox tokens | account/ |
| A copy of the Xbox Live refresh token, which the game reads | the Wine prefix's registry, prefix/system.reg |
| Microsoft Store sign-in | xodus-cli's keyring in xodus-home/ |
Nothing is stored in the system keyring, in the cloud, or anywhere else.
What the launcher connects to
- Microsoft and Xbox Live:
login.live.comand*.xboxlive.comto sign in, and the Microsoft Store (through xodus-cli) to check ownership and download the game. - Downloads of its components: GitHub releases (this project, BedrockOnLinux,
umu-launcher) and
curl.sefor CA certificates. Every download is checked against a SHA-256 checksum pinned inlegends_on_linux/config.py.
The launcher has no analytics or telemetry and no server of its own. The game itself talks to Microsoft, Xbox Live and PlayFab, as it does on Windows.
Signing out and revoking access
legends-on-linux logout --xboxdeletes the Xbox Live tokens, including the copy in the Wine prefix.legends-on-linux logout --storesigns xodus-cli out; add--forget-deviceto also drop this PC's Store device registration.- To cut off access from Microsoft's side, remove the PC under account.microsoft.com/devices, or revoke app access under account.live.com/consent/Manage.
Debug logs
play --debug writes HTTP logs (xcurl.log in the game folder) that can
contain sign-in tokens. Don't post them publicly as they are: remove the
token values first, or ask in the issue for a private way to share them.
Everything lives under ~/.local/share/legends-on-linux (override with
LOL_HOME):
| Path | Contents |
|---|---|
game/ |
the game (default install location) |
prefix/pfx/ |
the Wine prefix |
prefix/pfx/drive_c/users/steamuser/AppData/Local/WineGDK/XGameSave/ |
your saves |
account/ |
Xbox Live sign-in (refresh token, device key, preauth) |
xodus-home/ |
the Microsoft Store sign-in (xodus-cli keyring) |
engine/, umu/, xodus/, xcurl/ |
runtime components |
engine-overlay/ |
the Legends xgameruntime.dll (downloaded, or a local build) |
logs/ |
logs (play --debug adds Proton and HTTP logs) |
The launcher downloads a prebuilt, SHA-256-pinned xgameruntime.dll. To
build it from source instead (for development, or to check the published
one):
# Fedora: sudo dnf install git gcc make flex bison mingw64-gcc
./legends-on-linux setup # the build takes BoL's patches from the engine
scripts/build-xgameruntime.sh # ~1 minute; writes engine-overlay/xgameruntime.dll
LOL_XGAMERUNTIME_DLL=~/.local/share/legends-on-linux/engine-overlay/xgameruntime.dll \
./legends-on-linux setup # install your build instead of the published oneA local build is also used automatically when the published one cannot be downloaded. Wine embeds a build timestamp, so a rebuild has the same code but a different hash from the release.
./legends-on-linux play --debugwriteslogs/steam-*.log(WineGDK traces) andgame/xcurl.log(every HTTP request and its status). The HTTP log can contain sign-in tokens; see Debug logs before sharing it.- "does not own Minecraft Legends": sign in with the account that bought the
Windows edition (Store ID
9N98Z825TNFW). A Steam copy cannot be downloaded this way. - "ten Store devices": remove an old device at https://account.microsoft.com/devices.
LegendsOnLinux is MIT-licensed. It builds on BedrockOnLinux (MIT), whose Xbox Live token chain, offline registry writer and launch wrapper were ported or vendored here. Its engine is built from WineGDK (LGPL-2.1), and the game is acquired with xodus-cli (GPL-3.0), which is run as a separate program and not linked. See THIRD_PARTY.md.
Minecraft and Minecraft Legends are trademarks of Microsoft. This project is not affiliated with Microsoft or Mojang. It does not distribute any game files. You need to own the game.
