Skip to content

[Feature]: Official Linux build for the MiniMax Code desktop app #510

Open

Description

@tylerdotai

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-x64 runtime 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-driver and
    @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-url ship prebuilds/linux-x64/*.bare ELF
    binaries inside the archive, and @minimax/mcode-sandbox-runtime ships
    linux-sandbox-utils.js, linux-violation-monitor.js and a
    vendor/seccomp/x64/apply-seccomp helper.
  • The Rust/uniffi layer already has a case 'linux' branch that detects
    gnu vs musl and resolves linux-<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 linux target 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-sqlite3 has 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 is NODE_MODULE_VERSION 146). This avoids compiling
    better-sqlite3 from source on every build.
  • node-pty publishes 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-only spawn-helper
    binary.
  • The session-transfer helper is currently shipped per platform
    (session-transfer/win32-x64/, session-transfer/darwin-arm64/), so a
    linux-x64 build 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 official linux-x64 build, replaces
    the platform-specific native addons with their upstream Linux packages,
    and repacks the archive with the correct unpack layout.
  • A .deb that installs to /opt/minimax-code with 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

  1. tylerdotai commented on Oct 20, 2026

    @tylerdotai
    Author

    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/.rpm packages built from the official macOS build
    (minimax-code-linux), and they have done it well: the native-addon swap, a
    from-scratch session-transfer client, and a CI pipeline that publishes a
    release 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:

    1. 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.

    2. 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.

    3. 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
    asar packaging rather than an unpacked resources/app/ tree, there is a
    blocking 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 is
    only present as an unpacked file. Electron's ASAR-aware fs shim reports
    the archived file as present, so the library's own existsSync check passes
    and the failure only surfaces later, at dlopen time:

    library open failed: .../app.asar/node_modules/.../libcua_driver_sdk.so:
    cannot open shared object file: Not a directory
    

    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 linux target, the
    native-addon wiring and the better-sqlite3 prebuild pin if that is the
    preferred route, or to hand over the working build script instead. Please
    let me know which is useful.

  2. chesterbelle commented on Nov 1, 2026

    @chesterbelle

    please make a linux version

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions