mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-04 14:22:09 +03:00
Every .md under docs/{architecture,guides,reference,frameworks,routing,
security,compression,ops,diagrams} plus docs/README.md now opens with:
---
title: "<inferred from first H1>"
version: 3.8.0
lastUpdated: 2026-05-13
---
46 files updated (no docs were skipped — none had pre-existing
frontmatter). [slug]/page.tsx already reads frontmatter.version and
frontmatter.lastUpdated via gray-matter and renders a "v3.8.0" pill
plus a "Last updated" caption, so the UI picks these up automatically.
Helper: scripts/docs/add-frontmatter.mjs — idempotent (skips files that
already start with `---`), falls back to a humanized basename when no
leading H1 exists. Excludes docs/i18n/, docs/screenshots/,
docs/superpowers/, docs/diagrams/exported/. Re-runnable safely.
Also regenerated src/app/docs/lib/docs-auto-generated.ts: 44 docs across
8 sections (Architecture / Guides / Reference / Frameworks / Routing /
Security / Compression / Ops), which now includes the 14 docs that were
missing from the v3.7 sidebar (Cloud Agents, Guardrails, Memory, Skills,
Webhooks, Evals, Authz, Agent Protocols, Repository Map, Provider
Reference, Reasoning Replay, Stealth Guide, Tunnels Guide, Electron
Guide).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
169 lines
3.7 KiB
Markdown
169 lines
3.7 KiB
Markdown
---
|
|
title: "Termux Headless Setup"
|
|
version: 3.8.0
|
|
lastUpdated: 2026-05-13
|
|
---
|
|
|
|
# Termux Headless Setup
|
|
|
|
OmniRoute can run as a headless server on Android through Termux. The Electron desktop app is not supported in Termux, but the web dashboard and OpenAI-compatible API work from the local browser or from other devices on the same network.
|
|
|
|
## Prerequisites
|
|
|
|
Install Termux from F-Droid or GitHub releases, then update packages and install the build tools required by native dependencies such as `better-sqlite3`.
|
|
|
|
```bash
|
|
pkg update
|
|
pkg upgrade
|
|
pkg install nodejs-lts python build-essential git
|
|
```
|
|
|
|
> **Node.js version:** OmniRoute requires Node `>=20.20.2 <21 || >=22.22.2 <23 || >=24.0.0 <27` (per `engines` in `package.json`). Termux's `nodejs-lts` typically ships Node 20 LTS, which is compatible. If `node --version` reports an older line, install `pkg install nodejs` (current) and verify the major matches a supported range.
|
|
|
|
If native package compilation fails, rerun the `pkg install` command above and then retry the OmniRoute install.
|
|
|
|
## Install
|
|
|
|
Run the latest published package directly:
|
|
|
|
```bash
|
|
npx -y omniroute@latest
|
|
```
|
|
|
|
You can also install it globally:
|
|
|
|
```bash
|
|
npm install -g omniroute
|
|
omniroute
|
|
```
|
|
|
|
## Run
|
|
|
|
Start OmniRoute in headless server mode:
|
|
|
|
```bash
|
|
omniroute
|
|
```
|
|
|
|
or:
|
|
|
|
```bash
|
|
npx omniroute
|
|
```
|
|
|
|
The dashboard listens on:
|
|
|
|
```text
|
|
http://localhost:20128
|
|
```
|
|
|
|
Open that URL in the Android browser. If you run clients inside Termux, use the same host and port as the OpenAI-compatible base URL.
|
|
|
|
## Background Execution
|
|
|
|
For a simple background process:
|
|
|
|
```bash
|
|
nohup omniroute > omniroute.log 2>&1 &
|
|
```
|
|
|
|
To stop it:
|
|
|
|
```bash
|
|
pkill -f omniroute
|
|
```
|
|
|
|
For automatic startup after device boot, install the Termux:Boot add-on and create a boot script:
|
|
|
|
```bash
|
|
mkdir -p ~/.termux/boot
|
|
cat > ~/.termux/boot/omniroute.sh <<'EOF'
|
|
#!/data/data/com.termux/files/usr/bin/sh
|
|
cd "$HOME"
|
|
nohup omniroute > "$HOME/omniroute.log" 2>&1 &
|
|
EOF
|
|
chmod +x ~/.termux/boot/omniroute.sh
|
|
```
|
|
|
|
Android battery optimization can stop long-running background processes. Disable battery optimization for Termux if the server is expected to stay online.
|
|
|
|
## Access From Other Devices
|
|
|
|
Find the phone IP address on the WiFi network:
|
|
|
|
```bash
|
|
ip addr show wlan0
|
|
```
|
|
|
|
Then open the dashboard from another device:
|
|
|
|
```text
|
|
http://PHONE_IP:20128
|
|
```
|
|
|
|
For example:
|
|
|
|
```text
|
|
http://192.168.1.50:20128
|
|
```
|
|
|
|
Keep the phone and client on the same trusted network. If you expose OmniRoute outside the phone, enable API keys and dashboard authentication.
|
|
|
|
## Data Directory
|
|
|
|
By default OmniRoute stores data under the Termux home directory, following the same server-side data path behavior used on Linux. To place the database somewhere explicit:
|
|
|
|
```bash
|
|
export DATA_DIR="$HOME/.omniroute"
|
|
omniroute
|
|
```
|
|
|
|
## Limitations
|
|
|
|
- Electron does not run in Termux.
|
|
- There is no system tray or desktop integration.
|
|
- This setup is server-only: use the browser dashboard.
|
|
- Native dependencies may need local compilation.
|
|
- Low-memory Android devices may need fewer concurrent requests.
|
|
- MITM/system certificate features may require Android-level trust-store work outside Termux.
|
|
|
|
## Troubleshooting
|
|
|
|
### better-sqlite3 Build Errors
|
|
|
|
Install the Termux build toolchain:
|
|
|
|
```bash
|
|
pkg install nodejs-lts python build-essential
|
|
```
|
|
|
|
Then rerun:
|
|
|
|
```bash
|
|
npx -y omniroute@latest
|
|
```
|
|
|
|
### Port Already In Use
|
|
|
|
Check what is listening on the default port:
|
|
|
|
```bash
|
|
ss -ltnp | grep 20128
|
|
```
|
|
|
|
Stop the old process:
|
|
|
|
```bash
|
|
pkill -f omniroute
|
|
```
|
|
|
|
### Dashboard Not Reachable From Another Device
|
|
|
|
Verify both devices are on the same WiFi network, then test from Termux:
|
|
|
|
```bash
|
|
curl http://localhost:20128
|
|
```
|
|
|
|
If local access works but LAN access does not, check Android hotspot/WiFi isolation and any firewall or VPN profile on the phone.
|