OrangeFox Emulator

Last updated: October 1, 2026

Emulator — WIP / Beta

Run real OrangeFox recovery without a phone. This guide is only for fox_16.0. During beta, you need private testing access and an emulator-enabled fox_16.0 checkout, including its build dependencies.

Linux setup

Official beta host support covers openSUSE Tumbleweed, Fedora, and Debian-based distributions (including Ubuntu) on x86_64 Linux. Enable hardware virtualization and ensure your account has read/write access to
/dev/kvm
. Set up the development environment for your supplied checkout first. The guest uses a readable Linux kernel and its exact matching modules from the host.
Ubuntu / Debian:
Loading...
Ubuntu also needs the extra modules for the running kernel:
Loading...
On Debian, install the distribution kernel and modules, rather than Ubuntu's extra-module package:
Loading...
Fedora:
Loading...
openSUSE Tumbleweed:
Loading...
Use the full
kernel-default
package, not
kernel-default-base
; it supplies the emulated Wi-Fi module. Packages are available from the official Tumbleweed repository.
The extra kernel modules supply the emulated Wi-Fi radios. If you install a different kernel, reboot into it before launching. On Fedora, the launcher can also cache and extract the exact missing module package privately, without installing it or loading host Wi-Fi radios.
If
/dev/kvm
belongs to the
kvm
group and your account cannot access it:
Loading...
Log out and back in. Do not run the launcher as root.
Install the native Rust build toolchain if rustup is not already available:
Loading...
The launcher sets up its Android build target and finds an installed Android NDK r29, or downloads the official NDK into its cache when needed. The first build needs internet access and sufficient space for the Android checkout and build output.

First launch

From your checkout's
bootable/recovery
directory:
Loading...
The first launch builds recovery when no image exists, creates a private disk, and opens QEMU. Later launches reuse the disk. After source changes, rebuild with:
Loading...
The default display is 20
portrait
(720×1600). Available ratios:
16:9
,
18:9
,
19.5:9
,
20:9
,
21:9
; orientations:
portrait
,
landscape
. Changing geometry automatically builds a matching recovery image when needed, retaining userdata:
Loading...
Landscape rotates the portrait UI by 90 degrees; it is not a separate layout. Use the same geometry options on subsequent launches.

Launcher arguments

All options belong to
python3 emulator/run.py
. Paths are host paths. Relative paths use the terminal's current directory.

Argument

Default

Purpose

--buildOffRebuild and install recovery, then launch. Keep existing userdata.
--build-onlyOffBuild recovery without launching QEMU.
--aspect-ratio RATIO20:9Logical portrait ratio: 16:9, 18:9, 19.5:9, 20:9, or 21:9.
--orientation MODEportraitportrait or landscape; landscape rotates the panel by 90 degrees.
--state DIRECTORY<checkout>/out/fox-emulator-vmPrivate disk, serial log and QMP socket directory. Use another directory for a separate VM.
--headlessOffRun without a QEMU window; use ADB to control recovery.
--cpus NUMBER4Guest virtual CPUs.
--memory MIB4096Guest RAM in MiB.
--jobs NUMBER12Parallel Android build jobs.
--adb-port PORT5556Host localhost port forwarded to guest ADB. Substitute this port in ADB commands below.
--kernel PATH/boot/vmlinuz-<running release>Readable host x86_64 Linux kernel used for the guest.
--kernel-release RELEASERunning host releaseExact installed module release matching --kernel.
--hwsim-module PATHAutomatic discoveryOverride the matching Wi-Fi simulator module; supports .ko, .ko.xz, .ko.zst.
--ndk PATHAutomatic discovery/downloadSelect an installed Android NDK root for the build.
-h, --help—Show all launcher options and exit.

Stop the VM

Loading...
QEMU and the launcher exit when the guest powers off. If recovery is unresponsive, close the QEMU window or press Ctrl+C in the launcher terminal; this terminates the VM rather than performing a guest shutdown. The private disk remains for the next launch, but unflushed writes may be lost.

Wi-Fi, ADB and storage

The guest uses real mac80211_hwsim emulated radios, not your host's physical Wi-Fi. In recovery, enable Wi-Fi, scan, and connect to OrangeFox VM with password orangefox-vm. WPA2 association and DHCP have been exercised through the recovery command engine and observed in the UI. The station receives an address in
192.168.77.10
–
192.168.77.100
. This is an isolated radio test network, without an Internet gateway; QEMU
eth0
supplies a separate Internet uplink.
ADB is available on localhost port 5556:
Loading...
WLAN ADB controls may restart adbd. Reconnect the host client if an existing ADB session closes.
The private disk is
out/fox-emulator-vm/device.img
under the checkout root. Settings, userdata and files persist across launches and
--build
; wiping or formatting inside recovery still affects that virtual disk. No host phone or host block device is exposed to the guest.

Upload and download files

Use ADB from the host, after recovery has booted:
Loading...
Replace the example filenames with your own.
push
uploads host → recovery;
pull
downloads recovery → host. Both also accept directories.
/sdcard
is the VM's internal storage and persists across normal shutdowns and rebuilds;
/tmp
is temporary and disappears at reboot. Mount the required partition in recovery before accessing another guest path. ADB is available in headless mode too.
Do not mount or edit
device.img
on the host while QEMU is running. It contains several partitions, not a host-visible shared folder.