Skip to content

roman-ryzenadvanced/ZCode-v3-Linux-Port

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ZCode v3.0.0 — Unofficial Linux Port

Run ZCode v3.0.0 on Ubuntu/Debian x64, even though Z.AI officially publishes v3 for macOS and Windows only. This repo ships the automation that performs the port — it downloads everything from ZCode's official CDN at install time and redistributes no proprietary binaries.

Shellcheck ZCode base ZCode target License


TL;DR

git clone https://github.com/roman-ryzenadvanced/ZCode-v3-Linux-Port.git
cd ZCode-v3-Linux-Port
chmod +x install.sh revert.sh verify.sh

sudo ./install.sh        # downloads official builds + performs the port
./verify.sh              # confirm v3 is active
/opt/ZCode/zcode &       # launch

To undo:

sudo ./revert.sh

The situation

ZCode is Z.AI's AI coding desktop app (deeply integrated with GLM models). Its v3.0.0 release (2026-06-13) brought a self-built agent core, GLM-5.2 tuning, grouped task workspaces, Git branch graphs, and more — but it shipped only for macOS (Apple Silicon) and Windows.

Platform v2.13.0 (last with Linux) v3.0.0
macOS (arm64)
Windows (x64)
Linux (x64) dropped

The Linux electron-builder update feed still serves 2.13.0, so the in-app updater on Linux will never offer 3.0:

https://cdn.zcode-ai.com/zcode/electron/releases/update/linux/x64/latest-linux.yml
→ version: 2.13.0

This repo is a community workaround for Linux users who want v3.


How the port works (concept)

ZCode is an Electron app. An Electron app is split into two layers:

  1. The shell — the Electron runtime + Chromium binaries (/opt/ZCode/zcode, libffmpeg.so, GPU libs, etc.). These are platform-specific (Linux ELF, macOS Mach-O, Windows PE).
  2. The application code — packaged in resources/app.asar, a single archive of platform-agnostic JavaScript. Plus a few helper resources (resources/glm/, resources/model-providers/).

The native Node addons (terminal emulator node-pty, SSH client ssh2) live in resources/app.asar.unpacked/ and ship prebuilt per-platform.

The key insight that makes this port possible:

v3.0.0 was built with the exact same Electron 41.0.3 / Chrome 146 and the exact same native dependency versions (node-pty ^1.0.0, ssh2 ^1.16.0) as v2.13.0. The Node native-addon ABI is therefore identical across the two versions, so v2.13's Linux prebuilds load cleanly under v3's code.

That means the port is just a surgical file swap: take v3's platform-agnostic app.asar + glm/ + model-providers/, drop them into the existing v2.13 Linux shell, and leave the Linux-native bits alone.

What gets swapped

Path Action Why
resources/app.asar Replace with v3 The v3 application code (JS)
resources/glm/ Replace with v3 v3 ships zcode.cjs (Node script) + plugin packages; v2.13 had a native zcode-acp ELF
resources/model-providers/ Add (new in v3) v3's model catalog JSON
resources/app.asar.unpacked/ KEEP v2.13 Linux node-pty + ssh2 native prebuilds (mac ones are arm64 Mach-O)
resources/tools/ripgrep/rg KEEP v2.13 Linux static binary (mac one is arm64 Mach-O)
resources/app-update.yml KEEP v2.13 Points at the Linux update feed (v3's points at mac)

install.sh automates all of this, with a full backup for one-command revert.

⚠️ v3 also dropped the bundled codex/, gemini/, opencode/, acp/ helper directories (the changelog says it no longer bundles other agents). Any leftover v2.13 copies are simply ignored by v3 — harmless.


Prerequisites

  • Ubuntu / Debian x86-64 (other distros with dpkg work; AppImage base also possible with minor edits)
  • sudo (writes to /opt/ZCode)
  • curl, unzip, strings, sha512sum (all standard)
  • Enough disk: ~300 MB for downloads + ~200 MB backup
  • A working display (it's a GUI app)

Install

sudo ./install.sh

What it does, step by step:

  1. Ensures the v2.13 Linux base is installed. If /opt/ZCode/zcode doesn't exist, it downloads the official ZCode-2.13.0-linux-x64.deb and installs it with apt/dpkg.
  2. Stops any running ZCode.
  3. Downloads ZCode-3.0.0-mac-arm64.zip from ZCode's CDN and verifies its SHA-512 against the checksum published in the official mac update feed (latest-mac.yml).
  4. Backs up your current resources/ to /opt/ZCode/resources.backup-2.13.<timestamp>/.
  5. Performs the swap (replace app.asar + glm/, add model-providers/, preserve the Linux-native parts).
  6. Verifies the new version and that the Linux node-pty prebuild survived.

Then launch from your app menu, or:

/opt/ZCode/zcode &

Verify

./verify.sh

Checks: app.asar is present, the Linux node-pty prebuild exists, ripgrep is the Linux binary, the update feed still points at Linux, and the runtime log shows version: 3.0.0.

You can also confirm directly:

grep "current version" ~/.zcode/v2/logs/$(date +%F).log | tail -1
# expect: current version: 3.0.0

Revert

sudo ./revert.sh                 # uses the recorded backup
sudo ./revert.sh /opt/ZCode/resources.backup-2.13.20260614-130112   # explicit

Restores the original v2.13 app.asar, app.asar.unpacked, glm/, tools/, and app-update.yml, and removes the v3-only model-providers/ directory.


Technical deep-dive

See docs/HOW_IT_WORKS.md for:

  • The Electron version match that makes this safe
  • The exact native-module ABI story (NODE_MODULE_VERSION)
  • Why we use the mac-arm64 zip (not Windows) as the v3 source
  • The structure of app.asar vs app.asar.unpacked
  • What happens with the (oddly aarch64) sshcrypto.node in the amd64 deb

See docs/TROUBLESHOOTING.md for common failures.


Porting a future v3.x release

Bump the three variables at the top of install.sh:

readonly V3_VERSION="3.1.0"
readonly V3_MAC_ZIP_URL="https://cdn.zcode-ai.com/zcode/electron/releases/3.1.0/ZCode-3.1.0-mac-arm64.zip"
readonly V3_MAC_ZIP_SHA512="<new sha512 from latest-mac.yml>"

Critical pre-flight check: verify the new build's Electron major matches the installed Linux shell's Electron major. If they diverge, the Linux node-pty prebuild will fail ABI (was compiled against a different Node.js version) and the terminal pane will break. In that case you must either wait for an official Linux build or rebuild node-pty for the new ABI.

# Linux shell Electron:
strings /opt/ZCode/zcode | grep -oE "Electron/[0-9.]+" | head -1
# v3 mac Electron (from the zip you're about to use):
strings "ZCode.app/Contents/Frameworks/Electron Framework.framework/Electron Framework" \
  | grep -oE "Electron/[0-9.]+" | head -1

Disclaimer & legal

  • ZCode is proprietary software owned by Z.AI (智谱). This project does not redistribute any ZCode binaries, app.asar, native modules, or artwork. Every binary is downloaded at install time from ZCode's own CDN.
  • This repo provides only automation scripts and documentation describing a personal-use file transformation on software the user has legitimately installed — for interoperability with Linux, a platform the vendor currently doesn't publish for.
  • This project is not affiliated with, endorsed by, or sponsored by Z.AI.
  • Use at your own risk. If an official Linux build is published, prefer it.
  • The LICENSE (MIT) covers this repository's scripts and documentation only, not ZCode itself.

Credits

  • Procedure discovered and validated on Ubuntu x64, 2026-06-14.
  • Thanks to Z.AI for shipping the same Electron version across platforms in v3.

License

MIT — see LICENSE (applies to scripts/docs in this repo only).

About

Unofficial Linux port of ZCode v3.0.0. Automation scripts that transform the last official Linux build (v2.13.0) into a working v3.0.0 install — no proprietary binaries redistributed.

Topics

Resources

License

Stars

2 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages