Free · open source · no root

Your old Android phone is now a home server.

Homedroid turns the phone in your drawer into a media server, a NAS, a photo backup, a torrent box, a web host and a private AI, all run from one app and managed from a sleek web dashboard. One APK. No root. No Linux skills needed.

Android 10+~50 MB APKarm64 · armv7 · x86_64GPL-3.0
What it does

A full homelab, in your pocket.

That phone has an 8-core CPU, a hardware video encoder, gigabytes of RAM, Wi-Fi and a built-in battery backup. It deserves better than a drawer. Everything below is a real recording of Homedroid running.

Dashboard

Everything at a glance, from any browser

Live CPU, temperature, network, battery, memory and storage, plus every service with its logs and a restart button. It works offline and on your phone too.

  • Install apps with one click
  • Start on boot, auto-restart on crash
  • Updates itself from GitHub releases
LIVE · DASHBOARD
Files & NAS

Plug in a USB drive. It's a NAS now.

MicroSD cards and USB drives show up next to the phone's own storage. Stream videos in the browser, drag in whole folders, download folders as zip, or mount it all over SFTP.

  • Apps can keep their libraries on the card
  • Pull the card: apps wait, nothing gets lost
  • sshfs, rclone, WinSCP, Finder
LIVE · FILES
Media

Jellyfin, transcoded by the phone's video chip

Your movies and shows on every TV, laptop and phone. Homedroid routes Jellyfin's hardware encoding to Android's MediaCodec, so the dedicated video hardware does the heavy lifting while the CPU stays cool.

  • qBittorrent downloads straight into the library
  • Watch while it's still downloading
  • Immich for Google Photos-style backup

Shown: Sintel © Blender Foundation, CC BY 3.0.

LIVE · JELLYFIN
Linux

A real Linux shell, without root

Alpine Linux runs inside the app. Open a terminal in the browser or SSH in, install packages with apk, and grab a torrent with one command.

  • SSH & SFTP with public keys
  • Every session logged, rejected logins too
  • torrent 'magnet:?…' from anywhere
LIVE · TERMINAL
AI

A private AI that never leaves the phone

llama.cpp, built for Android, runs Qwen, Llama and Gemma models on the phone's GPU or CPU, whichever its own benchmark finds faster. Your other apps can use it through an OpenAI-compatible API.

  • Picks the best model your phone can handle
  • Optional cloud fallback when it's hot
  • Routines that brief you every morning
LIVE · AI ON DEVICE
Deploy

Push to GitHub, it's live on your phone

Point it at a repository and Homedroid detects Node.js, Python or a static site, builds it and serves it. It checks the branch every 5 minutes and keeps the old version running if a build fails.

  • Cloudflare Tunnel puts it on the internet
  • Works behind CGNAT, no port forwarding
  • Private repos with a read-only token
LIVE · DEPLOYMENTS
Cluster

Two old phones? Make them one server.

Pair phones with a 6-digit code over mutual TLS. Manage any of them from one dashboard, see every camera on one page, and move apps, with their data, to whichever phone has room.

  • Live health of every phone
  • Copy and move files between phones
  • Mix Android versions freely
LIVE · CLUSTER
Modules

Turn on what you need. Nothing else runs.

🎬
JellyfinMedia server with hardware transcoding.:8096
🖼️
ImmichPhoto & video backup from its official images.:2283
🧲
qBittorrentSequential downloads into your library.:8081
🏠
Home AssistantAutomations with network and cloud integrations.:8123
🧠
AIllama.cpp on device + an OpenAI-compatible API.:8090/v1
📷
IPCamLive view, motion clips, mic and announcements.dashboard
🔐
SSH & SFTPKey-only shell and file transfer, port forwarding.:8022
🌐
Web hostingCaddy serving your site and deployments.:8080
☁️
Cloudflare TunnelPublic HTTPS without opening a port.tunnel
🛰️
TailscalePrivate access from anywhere, no VPN slot.tailnet
📱
ClusterSeveral phones, one dashboard.:8801 mTLS
🛡️
AdGuard HomeAd blocking for your whole tailnet, even on mobile data.DNS :1053
🔎
Network toolsDiscovery, port scans, DNS, ping and speed tests.dashboard
⚡
Wake on LANTurn on your PC at home from anywhere./api/wol
🧩
Your app?Apps are just JSON. Add one.apps.json
Video tour

See the whole thing in 4½ minutes.

The phone app, the dashboard, an SD card, Linux in the browser, Jellyfin, on-phone AI, a GitHub deployment and two phones working as one. No cuts and no mock-ups, just the app running.

Can't play it here? Download the MP4 (13 MB). Made by Sudipta Goswami.

How it works

Android said no. We found a way.

Android apps can't run servers the usual way: no root, no Docker, no access to the video hardware from Linux. Here's how Homedroid gets around all three.

01 / LINUX WITHOUT ROOT

Servers disguised as libraries

Since Android 10, an app may only run programs that shipped inside its APK. So SSH, Caddy, Tailscale and FFmpeg are compiled for Android and packed in as lib*.so files, which Android happily unpacks and runs.

Everything else lives in Alpine Linux under proot, which translates system calls so Linux software believes it has a normal machine, while it's really inside the app's private folder.

# what Android sees
lib/arm64/libsshd.so
lib/arm64/libcaddy.so
# what you see
$ alpine
localhost:~# apk add htop
02 / DOCKER WITHOUT DOCKER

Container images, unpacked by hand

Docker needs kernel features no app can touch. But an image is just layers of tarballs. Homedroid pulls them from Docker Hub or ghcr.io itself, checks every layer's checksum and stacks them the way Docker would.

Hard links (forbidden in app storage) become copies; absolute symlinks get rewritten. That's how Immich and PostgreSQL run from their official images, on a phone.

# ghcr.io/immich-app/immich-server
manifest → linux/arm64
layers   → sha256 checked
rootfs   → runs under proot
03 / A VIDEO CHIP FOR JELLYFIN

A little shim with a big job

The phone's encoder is only reachable through Android's MediaCodec, which a Linux FFmpeg can't use. So Homedroid builds an Android FFmpeg with MediaCodec and quietly swaps it in.

Jellyfin asks for V4L2 hardware encoding; a tiny shim hands that job to MediaCodec and everything else to Jellyfin's own FFmpeg. Jellyfin never knows it's on a phone.

jellyfin → h264_v4l2m2m
   shim  → h264_mediacodec
# encoded by the phone's video chip

And a handful of small, documented patches to proot and FFmpeg make the rest of Linux feel at home on Android. Read the details →

Get started

Up and running in five minutes.

Install the APK

Grab it from GitHub Releases (arm64 fits almost every phone) and open it.

Start the server

One tap. The app shows the dashboard address and its password.

Let it run

Allow background running in Battery settings; the app shows you how.

Add apps

Open the dashboard from your laptop and install Jellyfin, Immich and more.

# from your computer $ open http://<phone-ip>:8800 # the dashboard $ ssh -p 8022 <phone-ip> # a shell; `alpine` for Linux $ ssh -p 8022 <phone-ip> torrent 'magnet:?…' # straight into Jellyfin
Built in the open

Help give old phones a second life.

Homedroid is free, GPL-licensed and young. The best thing you can do is try it on your phone and tell us how it went. Every phone report, bug and idea makes it better for the next person.

⭐ Star on GitHub Send feedback