Prerequisites¶
Beetroot runs Android inside a Docker container using redroid. redroid works by mapping the Android binder kernel driver onto the host kernel, so your host needs to satisfy a few requirements before anything else.
Linux only
redroid relies on host kernel features that don't exist on macOS or Windows. A Linux host — physical or VM — is required. WSL2 is not supported.
Host OS¶
Any modern Linux distribution works. Tested regularly on:
- Ubuntu 22.04 / 24.04 (easiest — kernel extras available via
apt) - Debian 12
- Arch Linux (with the
linux-headerspackage)
Kernel modules¶
redroid needs the binder_linux kernel module (Android 12+ uses memfd in place of ashmem, so no separate ashmem module is required for the default Android-14 base image).
Verify with lsmod | grep binder — it should appear.
Docker¶
Install Docker Engine (not Docker Desktop) and the Compose plugin:
Verify: docker compose version should print a version string.
Privileged containers
Beetroot's containers run with privileged: true. This is required for Android init and Magisk to function correctly. Note that privileged does not substitute for the binder kernel driver — binder is a host-kernel feature, so a host without it can't run redroid even with full privileges. beetroot doctor <name> reports a host.binder row that tells you whether the kernel is ready.
No kernel access? (CI, cloud sandboxes)
If you can't load binder_linux on your host (a locked-down PaaS container, a kernel built without CONFIG_ANDROID_BINDER_IPC, macOS/Windows), redroid can't run directly there. You have two options: run redroid locally inside a QEMU micro-VM that ships its own binder kernel (binder: vm, KVM-accelerated or TCG-emulated) — the copy-paste runbook is the Sandbox / CI quickstart — or drive a rooted device that lives elsewhere via beetroot adopt (see Running in CI / without kernel access).
uv (Python runtime)¶
The beetroot CLI is a Python package managed with uv:
uv handles the virtual environment and package installation automatically — you never need to call pip or activate a venv yourself.
ADB¶
ADB is used by beetroot shell to attach to a running instance:
Download the Android SDK Platform-Tools archive and put adb on your PATH.
Optional: Frida CLI¶
If you want to attach the host frida CLI to an instance (e.g. frida -H "$(beetroot frida-addr <name>)"), install it alongside Beetroot via the [frida] extra:
Plain installs (uv tool install ... without [frida]) omit frida-tools; you can always add it later or install separately with uv tool install frida-tools.
The Frida server binary is managed entirely by Beetroot — you don't need to install it separately.
Summary checklist¶
- Linux host (physical or VM)
-
binder_linuxkernel module loaded - Docker Engine + Compose plugin installed; current user in
dockergroup -
uvinstalled and onPATH -
adbonPATH - (Optional)
fridaCLI available if you want to attach to an instance viafrida-addr
Once all boxes are checked, move on to Installation.