Repository navigation
Description
Product or interface
Desktop app
Use case and problem
MiniMax Code 3.1.4 ships only for macOS and Windows. On Linux there is no
official build, so the desktop agent is unavailable to Linux users even
though the application itself is already platform-agnostic.
I unpacked the official Windows installer (3.1.4) to check how much work a
Linux build would actually be, and built a working port to confirm it. The
result is that the desktop app is much closer to Linux-ready than the release
matrix suggests — the only things that are platform-specific are the Electron
runtime and seven native addons, and every one of them already has an
upstream Linux build.
What I found in the shipped 3.1.4 payload:
- The runtime is Electron 42.8.0 (Chromium 148) — the same Electron
version on macOS and Windows, so the official
electron-v42.8.0-linux-x64runtime is a drop-in shell. - The application code lives in a platform-agnostic
app.asar(32,000 files,
397 MB). There is no platform-specific JavaScript in the main or
preload bundles. - The only native addons are
better-sqlite3,node-pty,node-screenshots,
@mariozechner/clipboard,@vscode/ripgrep,@trycua/cua-driverand
@earendil-works/pi-tui. All of them publish Linux builds, and the app
already pins versions that exist for Linux. - Two pieces of the shipped payload are already Linux-targeted, which
suggests the build pipeline treats Linux as a first-class target:
bare-fs/bare-os/bare-urlshipprebuilds/linux-x64/*.bareELF
binaries inside the archive, and@minimax/mcode-sandbox-runtimeships
linux-sandbox-utils.js,linux-violation-monitor.jsand a
vendor/seccomp/x64/apply-seccomphelper. - The Rust/uniffi layer already has a
case 'linux'branch that detects
gnu vs musl and resolveslinux-<arch>-<libc>cargo triples.
So the remaining work for a first-party Linux build is a packaging target,
not a port.
Desired behavior
An official Linux build of the MiniMax Code desktop app, for example as a
.deb / .rpm / AppImage alongside the existing Windows and macOS
artifacts.
Concretely, on the packaging side:
- A
linuxtarget in the electron-builder configuration, using the same
Electron version as the other platforms so the runtime and the app's
native addons stay ABI-matched. - The platform-specific npm packages are already published for Linux at the
versions the app pins (@trycua/cua-driver-linux-x64-gnu@0.22.1,
@ubjs/node-linux-x64-gnu@0.31.0-3,node-screenshots-linux-x64-gnu,
@vscode/ripgrep-linux-x64,@mariozechner/clipboard-linux-x64-gnu), so
no new build artifacts are needed for them. better-sqlite3has no npm prebuild for Electron 42, but the upstream
project publishes an ABI-matched one:
better-sqlite3-v12.11.1-electron-v146-linux-x64.tar.gz
(Electron 42 isNODE_MODULE_VERSION146). This avoids compiling
better-sqlite3 from source on every build.node-ptypublishes no Linux prebuilds by design
(chore: exclude Linux prebuilds, chore: exclude Linux prebuilds microsoft/node-pty#805), so it has to be
compiled against the Electron headers. Note that on Linux node-pty uses
forkpty(3)directly and does not need the macOS-onlyspawn-helper
binary.- The
session-transferhelper is currently shipped per platform
(session-transfer/win32-x64/,session-transfer/darwin-arm64/), so a
linux-x64build would be needed for session handoff to work.
Acceptance criteria: the app launches on a current Linux distribution, the
agent can run turns, sessions persist, and the terminal/integrated-pty
feature works.
Alternatives and additional context
I have a working Linux build of 3.1.4 and can share the whole pipeline if it
is useful:
- A reproducible build script that takes the official Windows installer,
swaps the Electron runtime for the officiallinux-x64build, replaces
the platform-specific native addons with their upstream Linux packages,
and repacks the archive with the correct unpack layout. - A
.debthat installs to/opt/minimax-codewith a launcher, a desktop
entry and hicolor icons, verified on Ubuntu 24.04: 23 of 23 startup
subsystems initialise with zero failures, the local runtime and its
SQLite migrations work, and all seven native addons load and function
(including the terminal pty and the computer-use driver).
The one sharp edge worth recording for whoever builds this: Electron's
app.asar cannot hold native libraries, because dlopen does not go
through Electron's ASAR-aware fs redirection. The files have to be marked
unpacked, and electron-builder unpacks whole packages rather than just the
.node files. Getting that set wrong produces a build that packages
cleanly and then fails at runtime with
cannot open shared object file: Not a directory.
I also hit what looks like a genuine bug in the library this app uses for
its Rust bindings, @ubjs/node, and have opened a fix upstream:
jhugman/uniffi-bindgen-react-native#501 — it returns
an in-archive path for a library that is only present unpacked, and the
existence check passes anyway because Electron's fs shim reports archived
files as present.
For reference, there is already a community effort packaging the official
macOS build for Linux: https://github.com/unfallenwill/minimax-code-linux
(it is what I would start from rather than the Windows installer, since it
already solves the native-addon swap, the session-transfer client and the
packaging). I have contributed the node-pty spawn-helper correction to it
as well.
Happy to open a pull request with the packaging target and the native-addon
wiring if that is the preferred route — I understand external PRs are
restricted to collaborators, so I am happy to prepare a branch and a patch
series for a maintainer to land instead. Please let me know which you
prefer.
Activity
tylerdotai commentedon Oct 20, 2026
Adding a cross-reference so this is connected to the prior thread rather than
read as a fresh duplicate.
The prior tracking thread was #102, which was closed earlier today as part of
a backlog cleanup — "this issue was filed more than a month ago against an
older release, and the codebase has changed substantially since then. If it
still reproduces on the latest version, please open a new issue with the
current version and reproduction steps." This issue is that re-submission:
it is against 3.1.4, the current release, and the port described above
was built and run on that version.
Also linking the two related threads for the same request, so the demand
signal is in one place: #107, #122.
On the community packaging — this is not a request to redo that
@unfallenwill already ships unofficial
.deb/.rpmpackages built from the official macOS build(minimax-code-linux), and they have done it well: the native-addon swap, a
from-scratch
session-transferclient, and a CI pipeline that publishes arelease per upstream version.
I am not asking MiniMax to do that work, and I am not asking to replace
it. The question this issue asks is different, and narrower:
Does MiniMax intend to ship a Linux build of the desktop app? The
earlier answer on [Feature]: No Linux support is simply unreasonable. #102 was "桌面端 Linux 在评估中" — the desktop app's
Linux support is under evaluation. That is still the open question, and a
community package cannot answer it: it is not a supported distribution, it
is not in any channel, and it carries no compatibility commitment from
MiniMax.
If yes, what would it take? The analysis above is meant to make that
concrete rather than hypothetical — it is a packaging target, not a port,
and the pieces are enumerated.
If the answer is "the community will do it", then a pointer from the
official channels to that project would itself be the most useful thing
MiniMax could do, and it costs nothing.
One thing that is a prerequisite for an electron-builder-based build
If a first-party Linux build is produced with electron-builder's default
asarpackaging rather than an unpackedresources/app/tree, there is ablocking issue in the Rust-binding library this app uses
(
@ubjs/node/@trycua/cua-driver):resolveLibPath()returns an in-archive path for a native library that isonly present as an unpacked file. Electron's ASAR-aware
fsshim reportsthe archived file as present, so the library's own
existsSynccheck passesand the failure only surfaces later, at
dlopentime:I have a fix and tests upstream:
jhugman/uniffi-bindgen-react-native#501
It is worth flagging here because it is exactly the failure mode that makes
a packaged build look fine and then fail on the user's machine — and because
the community package avoids it only incidentally, by extracting the payload
to an unpacked directory rather than by fixing the underlying path
resolution.
Happy to prepare a branch with the electron-builder
linuxtarget, thenative-addon wiring and the
better-sqlite3prebuild pin if that is thepreferred route, or to hand over the working build script instead. Please
let me know which is useful.
chesterbelle commentedon Nov 1, 2026
please make a linux version