A homelab that keeps running when the power cuts.
Your old Android phone has a battery, mobile data and a Linux kernel. Droidspaces runs full Linux distributions on that kernel as containers, with systemd or OpenRC as PID 1. No emulation, no virtual machine.
Release v6.6.0, GPLv3. 2,278 stars and 89 contributors on GitHub.


Set it up once. Forget it.
Droidspaces is an alternative to Docker and LXC, built for a phone. Your services run the way they would on a Linux server, and after the first setup nothing needs you.
Your phone boots.
After an update, a reboot or a flat battery.
Droidspaces starts your containers.
From init.rc or a boot script, before you unlock the phone, while /data is still encrypted.
The init system starts your services.
systemd or OpenRC brings up every enabled unit. No app to open, no command to type.
- Gitea
- Jellyfin
- Docmost
- Tailscale
- Trilium
- VS Code server
- Cloudflare Tunnel
- ntfy
- Uptime Kuma
- Immich
- Nextcloud
- Vaultwarden
- Pi-hole
- Home Assistant

A real Linux, not an emulation.
Each container gets its own PID, mount, UTS, IPC, cgroup and network namespace on the phone's kernel, behind NAT by default. systemd boots as PID 1 in 150 to 750 ms.
- systemd
- OpenRC
- runit
- s6
- PID namespace
- Mount namespace
- Cgroup v1 and v2
- journald
It sits on your network like a server.
Each container has its own monitor daemon, detached from the app, so closing or uninstalling the app stops nothing. Inside a container you run services the way you would on a Linux server, including nested containers: Docker, Podman and LXC itself.
- NAT networking
- Host networking
- Port forwarding
- OpenWRT as a gateway
- Docker
- Podman
- Flatpak
- bwrap




Run it from the app.
Install, start, stop and edit containers, open a terminal inside one, and watch its CPU, memory and addresses. The phone's hardware is one switch each.
- Turnip on Adreno
- VirGL
- Termux:X11
- PulseAudio
- USB
- Sensors
What each approach costs.
Linux on Android has several routes: PRoot, chroot, LXC or Docker through Termux, and Droidspaces. Each one pays for something. This is the bill.
| Droidspaces | LXC via Termux | Docker via Termux | chroot | PRoot | |
|---|---|---|---|---|---|
| Technology | Namespaces | Namespaces | Namespaces | Path redirection | Syscall hooking |
| Performance | Native | Native | Native | Native | Moderate |
| Boot time | 150 to 750 ms on systemd | 750 to 2000 ms on systemd | No init | No init | No init |
| Init support | Full | Full | None | None | None |
| Persistence | A monitor process per container | Low | Low | Low | Low |
| Hardware access | One switch | Manual setup | Manual setup | Manual setup | None |
| GPU access | One switch | Manual setup | Manual setup | Manual setup | Moderate |
| Termux:X11 | One switch | Manual setup | Manual setup | Manual setup | Moderate |
| Privileged mode | Full, configurable (nomask, nocaps, noseccomp) | Manual setup | Yes (--privileged) | Full | No |
| Run at boot | Yes, from init.rc or service.d | No | No | No | No |
| Portable rootfs.img | Yes | No | No | No | No |
| Binary size | 400 KB | 10 MB or more | 50 MB or more | None needed | 10 MB or more |
Get it running.
The APK carries the runtime and the app. Linux gets a static tarball.
Android
- Kernel 3.10 or newer
- Root through KernelSU, Magisk or APatch
- A kernel built with the documented configuration
- aarch64, armhf, x86_64 or x86
Linux
- Kernel 3.10 or newer
- Root, or a running droidspaces daemon
- No custom kernel
- aarch64, armhf, x86_64, x86 or riscv64