Repository navigation
Description
Summary
The published superset-linux-arm64.tar.gz (cli-v0.2.1) crashes immediately on superset start:
Error: Cannot find module '@anush008/tokenizers-linux-arm64-gnu'
Require stack:
- /opt/superset/lib/node_modules/@anush008/tokenizers/index.js
#3921 fixed this for linux-x64 by shipping the tokenizers native; the linux-arm64 target was missed.
Reproduce
On any Linux ARM64 host (Hetzner CCX-ARM/Neoverse-N1, AWS Graviton, Raspberry Pi 4/5, Oracle Ampere):
mkdir -p /opt/superset && cd /opt/superset
curl -fsSL -o /tmp/s.tar.gz https://github.com/superset-sh/superset/releases/download/cli-v0.2.1/superset-linux-arm64.tar.gz
tar xzf /tmp/s.tar.gz -C /opt/superset
SUPERSET_API_KEY=sk_live_… /opt/superset/bin/superset start→ MODULE_NOT_FOUND for @anush008/tokenizers-linux-arm64-gnu. Host service exits before binding a port.
Root cause (three layers)
- Build pipeline (
packages/cli/scripts/build-dist.ts,packages/host-service/build.ts): the linux-arm64 target doesn't list@anush008/tokenizers-linux-arm64-gnu. Same omission fix(cli): ship onnxruntime-node + tokenizers natives in linux-x64 tarball #3921 plugged for linux-x64. @anush008/tokenizers@0.0.0(the pinned version inbun.lock): itsoptionalDependencieslists onlytokenizers-darwin-universal,tokenizers-linux-x64-gnu,tokenizers-win32-x64-msvc— no arm64. So even if the build script were updated,bun installcouldn't resolve the missing package.- npm registry:
@anush008/tokenizers-linux-arm64-gnu@0.0.0does not exist on npm (only public versions0.5.0and0.6.0are published — confirmed viahttps://registry.npmjs.org/@anush008/tokenizers-linux-arm64-gnu).
So a complete fix requires all three layers.
Proposed fix
Layer 1 (this repo, ready as a diff):
diff --git a/packages/cli/scripts/build-dist.ts b/packages/cli/scripts/build-dist.ts
@@ -82,6 +82,7 @@ const TARGET_NATIVE_PACKAGES: Record<Target, string[]> = {
"linux-arm64": [
"@libsql/linux-arm64-gnu",
"@parcel/watcher-linux-arm64-glibc",
+ "@anush008/tokenizers-linux-arm64-gnu",
],
};
diff --git a/packages/host-service/build.ts b/packages/host-service/build.ts
@@ -26,6 +26,7 @@ const result = await Bun.build({
"@anush008/tokenizers",
"@anush008/tokenizers-darwin-universal",
"@anush008/tokenizers-linux-x64-gnu",
+ "@anush008/tokenizers-linux-arm64-gnu",
"@anush008/tokenizers-win32-x64-msvc",
],
});I can open a PR with this diff as soon as layers 2+3 are unblocked. Holding it back for now since CI would fail today (bun install can't resolve the missing package).
Layer 2+3 (maintainer-side): publish @anush008/tokenizers-linux-arm64-gnu@0.0.0 to npm and republish @anush008/tokenizers@0.0.0 with that variant in optionalDependencies.
If 0.0.0 is intentionally a custom-pinned fork rather than maintained alongside the public stream, an alternative is to bump the dependency to ^0.6.0 (public release where all platform variants are properly published).
Workaround for current ARM64 users
Until the upstream fix lands, native binding can be shimmed by hand:
curl -fsSL -o /tmp/t.tgz https://registry.npmjs.org/@anush008/tokenizers-linux-arm64-gnu/-/tokenizers-linux-arm64-gnu-0.6.0.tgz
mkdir -p /opt/superset/lib/node_modules/@anush008/tokenizers-linux-arm64-gnu
tar xzf /tmp/t.tgz -C /opt/superset/lib/node_modules/@anush008/tokenizers-linux-arm64-gnu --strip-components=1After this, superset start boots and the host registers with the relay. Verified on Hetzner CCX-ARM (Ubuntu 24.04, Neoverse-N1).
Impact
Anyone running the CLI on Hetzner ARM, AWS Graviton, Oracle Ampere, Raspberry Pi, or any aarch64 Linux host. Closely related to making the CLI usable for the headless/SSH workflow tracked in #1513.
Related
- fix(cli): ship onnxruntime-node + tokenizers natives in linux-x64 tarball #3921 — the analogous fix for linux-x64
- bug: superset auth login hangs silently on headless servers when xdg-open is missing #3949 — sibling headless-CLI bug (auth login URL never surfaced) with a PR (fix(cli): surface auth URL so headless logins can complete #3950) ready to merge
- [feat] use in ssh server #1513 —
use in ssh server(the broader headless story)
Activity
test: reproduce #3951 — linux-arm64 build skips tokenizers binding
saddlepaddle commentedon May 1, 2026
Opened #3960 with the fix. Used a slightly different shape than the diff in this issue: instead of waiting on upstream to republish$@anush008/tokenizers@0.0.0$ with arm64, I pinned $@anush008/tokenizers-linux-arm64-gnu@0.6.0$ as a direct $optionalDependency$ on $@superset/host-service$ . Bun's os/cpu filtering installs it only on linux-arm64; the 0.6.0 native binary is ABI-compatible with the 0.0.0 JS loader for the fastembed surface (verified in a linux/arm64 docker container). End-to-end build + boot smoke test passes.
fix(cli): ship @anush008/tokenizers-linux-arm64-gnu in linux-arm64 ta…
saddlepaddle commentedon May 2, 2026
Release is out for 0.2.3, let me know if that fixes it!
johrld commentedon May 2, 2026
Confirmed working on Hetzner ARM64 (Neoverse-N1, Ubuntu 24.04). Tarball v0.2.3 ships
@anush008/tokenizers-linux-arm64-gnu/tokenizers.linux-arm64-gnu.nodeand the binding loads withoutMODULE_NOT_FOUND. Thanks for the quick turnaround! 🎉saddlepaddle commentedon May 2, 2026
no problem! Let me know if you run into anything else 😄