[Bug]: t3 server fails to start on linux-arm64 — node-pty has no prebuild and no working source-build fallback
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 23k
- Forks
- 5.9k
- Avg merge
- 11h 14m
- Merged PRs (30d)
- 357
Description
Before submitting
- I searched existing issues and did not find a duplicate.
- I included enough detail to reproduce or investigate the problem.
Area
apps/server
Steps to reproduce
- On a linux-arm64 machine (tested: Orange Pi 5 Max, Armbian bookworm, Node v24.15.0), install and run the server with
npm i t3@latest(orbun i t3@latest+bunx t3). - Start the server:
node node_modules/t3/dist/bin.mjs(ornpx t3@latest). - Observe startup crash after migrations run successfully.
Expected behavior
Server boots and serves the web UI, building node-pty from source if no prebuilt binary exists for the platform (the repo already has this pattern: node-gyp rebuild + staging into prebuilds/linux-<arch> in the WSL/desktop flow).
Actual behavior
Server exits with code 1:
[ERROR]: NodePtyModuleLoadError: Failed to load node-pty for linux-arm64.
[cause]: Error: Failed to load native module: pty.node, checked: build/Release, build/Debug, prebuilds/linux-arm64:
Error: Cannot find module './prebuilds/linux-arm64//pty.node'
NodePtyAdapter.make ends in .pipe(orDie), so this is an unrecoverable startup crash, not a degraded-terminal warning.
Impact
Blocks work completely
Version or commit
t3@0.0.40 (npm), node-pty@1.1.0 (transitive dep)
Environment
- OS: Armbian 26.11 bookworm (Debian 12), kernel 6.1.115-vendor-rk35xx, aarch64
- Node v24.15.0 (nvm), Bun 1.3.14
- Build tools present: make, gcc, python3 — g++ absent
Logs or stack traces
[14:26:56.384] ERROR (#5): NodePtyModuleLoadError: Failed to load node-pty for linux-arm64.
at NodePtyAdapter.make (file:///home/uname/node_modules/t3/dist/NodePtyAdapter-B9l4A_UU.mjs:115:34)
[cause]: Error: Failed to load native module: pty.node, checked: build/Release, build/Debug, prebuilds/linux-arm64:
Error: Cannot find module './prebuilds/linux-arm64//pty.node'
Require stack:
- /home/uname/node_modules/node-pty/lib/utils.js
- /home/uname/node_modules/node-pty/lib/index.js
Verified on the machine:
node-pty@1.1.0npm tarball shipsprebuilds/fordarwin-arm64, darwin-x64, win32-arm64, win32-x64only — no linux prebuild of any arch.build/Release/contains only.deps, node-addon-api, obj.target— the compile never producedpty.node.node-pty's ownscripts/prebuild.jsreports:Rebuilding because .../prebuilds/linux-arm64 does not exist, then thenode-gyp rebuildfallback cannot succeed without a C++ compiler (gccfails withcannot execute 'cc1plus').- The release pipeline (
release.yml) has abuild_wsl_node_ptyjob for linux-x64 only — no linux-arm64 artifact.
Workaround
sudo apt install -y g++ and rebuild (npm rebuild node-pty or a clean npm i so the node scripts/prebuild.js || node-gyp rebuild install script can complete), then run under Node. There is no workaround without a compiler.
Suggested fix (one of)
- Add a linux-arm64
node-ptybuild to the release pipeline and bundle/stage it the way the linux-x64 WSL prebuild is handled, or - Make the npm
t3install self-healing on Linux: detect missingprebuilds/linux-<arch>/pty.nodepostinstall and runnode-gyp rebuildwith a clear error message naming the missing toolchain (g++) instead of crashing at first startup, or - At minimum, document
g++(build-essential) as a Linux prerequisite fornpx t3and fail fast with that message during install rather than at server boot.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with apps/server and NodePtyAdapter.make, then inspect node-pty’s scripts/prebuild.js and release.yml’s build_wsl_node_pty job. Reproduce the linux-arm64 install on the stated toolchain and trace whether the missing prebuild or source-build path is reached. Done means the selected install or release behavior is verified on linux-arm64 and startup no longer exits with the reported error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- node.js, typescript
- Domain
- backend, build-system, devops
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100