github / github/copilot-cli

Android/Termux support broken in v1.0.48+ (runtime.node requires glibc)

Open
#3,333 5 comments 4 reactions 0 assignees View on GitHub
area:installation area:platform-linux
Dominant language
Shell
Stars
11.2k
Forks
1.9k
Avg merge
14h 16m
Merged PRs (30d)
6

Description

## Summary

Copilot CLI v1.0.48 introduced a native Rust addon (`runtime.node`) that is compiled against glibc, making it impossible to run on Android/Termux where Node.js uses Bionic libc.

## Environment

- **Platform**: Android (Termux)
- **`process.platform`**: `"android"`
- **`process.arch`**: `"arm64"`
- **Node.js**: v24.x (Termux package)
- **Last working version**: 1.0.45

## Issues by version

### v1.0.45 (workable with patches)

Three fixable issues:
1. **ripgrep**: Looks for `ripgrep/bin/android-arm64/rg` — fixed by copying from `linux-arm64/rg` (statically linked, runs fine)
2. **pty.node**: Looks for `prebuilds/android-arm64/pty.node` — fixed by building `node-pty` from source on Termux
3. **Platform switch**: The native module loader in `app.js`/`index.js`/`sdk/index.js` doesn't handle `case "android"` — fixed by patching the JS

### v1.0.48+ (BROKEN — no workaround)

A new `runtime.node` Rust addon was introduced that handles token counting (tiktoken), MCP config parsing, shell analysis, hooks, and session filesystem. It is linked against glibc:

```
NEEDED: libgcc_s.so.1, libpthread.so.0, libm.so.6, libdl.so.2, libc.so.6
```

This **cannot** run on Android because:
- Android uses Bionic libc, not glibc
- The glibc TLS (Thread-Local Storage) model is incompatible with Android's linker
- You cannot mix glibc and Bionic libraries in the same process
- The binary is closed-source Rust, so we cannot rebuild it

## Request

1. **Ship an Android-compatible `runtime.node`** — Rust supports the `aarch64-linux-android` target natively. Cross-compiling with `cargo build --target aarch64-linux-android` would produce a Bionic-compatible binary.

2. **Add `android-arm64` to the platform matrix** — The optional dependencies (`@github/copilot-linux-arm64`, etc.) should include an `@github/copilot-android-arm64` variant.

3. **Handle `"android"` in the platform switch** — The JS code in `app.js`, `index.js`, and `sdk/index.js` should map `process.platform === "android"` to the appropriate prebuild path.

## Workaround

We are pinned to v1.0.45. Users who accidentally upgrade are stuck.

## Additional context

Termux is a widely-used terminal emulator for Android that provides a Linux-like environment. Node.js runs natively on it. Before v1.0.48, Copilot CLI worked with minor patches. The introduction of the glibc-only native addon broke this entirely.

Contributor guide

Open the contributing guide

Research direction

Inspect app.js, index.js, and sdk/index.js, along with the optional-dependency platform matrix, to trace how native modules are selected. Verify how runtime.node and the android-arm64 package would be provided for Termux, then confirm Android platform mapping and runtime loading without breaking existing targets.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, node.js, rust
Domain
build-system, cli, mobile
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.