Projects

Three apps. Same architecture. Different superpowers.

Linxr

Linxr

Alpine Linux Shell

A full Alpine Linux environment running inside QEMU on Android. Get a real bash shell, SSH access, persistent storage — on any arm64 phone with zero root.

  • OpenSSH server — connect from any SSH client
  • Built-in terminal with auto-reconnect
  • Persistent QCOW2 overlay across reboots
  • Full outbound internet via SLIRP networking
Zyvr

Zyvr

Asterisk PBX on Android

Zero-carrier Your Voice Router. A full Asterisk 20 PBX running on your phone. Manage SIP extensions, monitor live calls, and route calls — carrier-independent.

  • Asterisk 20 with PJSIP driver
  • SIP extension management (create, delete, list)
  • Live call monitor + hangup
  • WebRTC/SIP.js support via WSS on 8089

How it works

Every app uses the same layered stack — QEMU gives the Linux VM, Alpine gives the environment, the app gives the UI.

Flutter UI (Dart)
Native Android UI — tabs, logs, terminal, settings
Kotlin VmManager
Launches libqemu.so via JNI, manages ForegroundService lifecycle
QEMU (libqemu.so)
Compiled as .so shipped inside the APK. Runs as a normal app process — no root.
Alpine Linux VM
Boots from a bundled QCOW2 asset. SLIRP networking, persistent overlay, OpenRC init.
Your workload
Docker daemon · Asterisk PBX · bash shell — whatever runs on Linux

SLIRP port mappings

PortProtocolServiceApp
7080TCPFastAPI control serverAll
2222TCPOpenSSHLinxr
5060TCP/UDPSIPZyvr
5038TCPAsterisk AMIZyvr
8088/8089TCPARI / WebSocket (WSS)Zyvr
10000–10019UDPRTP mediaZyvr

Requirements

📱
Android 8.0+
API level 26 or higher
⚙️
ARM64 only
arm64-v8a architecture required
💾
~250 MB storage
For the APK + VM image
🔓
No root needed
QEMU runs as a normal app process