Experimental field build · August 2026

A city builder
escaped the desktop.

Egregoria now boots, renders, saves, resumes, and responds to touch as a native Android app. No WebView. No streamed desktop. Just Rust, winit, wgpu, Vulkan—and a frankly unreasonable amount of lifecycle debugging.

Not a production release. Debug-signed; physical ARM64 validation and asset provenance remain open.
RUSTWINITWGPUVULKANNATIVEACTIVITY
API 35 · x86_64 evidence
Egregoria running on Android after a successful Home and resume lifecycle test
Surface recovered. Same process, fresh Android native window, live world.
mobile UI scale
120sclean emulator soak
44.1kactive stereo stream
3verified APK payloads
Evidence, not vibes

What actually works

Each card represents observed emulator behavior or inspected Android state—not a hopeful checkbox copied from a roadmap.

01

Native renderer

NativeActivity defers window and wgpu initialization until Android supplies a valid native window. Vulkan renders the generated world.

VERIFIED
02

Touch camera

One-finger pan plus real two-contact pinch and rotation are latched across slow frames instead of evaporating between events.

VERIFIED
03

Lifecycle recovery

Home and resume retain gameplay state while recreating the wgpu surface around Android's replacement native window.

VERIFIED
04

Private saves

world.zip, replay, camera, settings, and bindings live under app-private storage and survive a force-stop/cold-load cycle.

VERIFIED
05

Android audio path

AudioFlinger reports an active 44.1 kHz stereo track owned by Egregoria with zero underruns at capture.

MIXER VERIFIED
06

Conservative graphics

Android starts with shadows, fog, SSAO, and MSAA disabled to reduce pressure on less-forgiving mobile drivers.

VERIFIED
Install the test build

Three steps. One warning.

The ARM64 optimized build is for modern physical phones. It is debug-signed for testing and will not update a future production-signed release.

  1. 1

    Download ARM64

    Use the stable button. Most current Android phones—including Pixel devices—use ARM64.

  2. 2

    Allow this source

    Android may ask your browser or file manager for permission to install unknown apps. Disable it afterward if desired.

  3. 3

    Wait through first boot

    The app extracts its embedded desktop asset and base-mod trees into private storage before initializing the game.

Build ledger

Choose the right binary.

All artifacts are test builds. SHA-256 entries were verified after packaging.

ArtifactTargetSizeAction
ARM64 optimized testRecommended for phones
arm64-v8a23.65 MiBDownload ↓
ARM64 debugDiagnostics and symbols
arm64-v8a47.75 MiBDownload ↓
x86_64 optimized testAndroid emulator only
x86_6423.79 MiBDownload ↓
Matching sourceModified Android-port tree
GPL-3.014.28 MiBDownload ↓
Open source, complete source

Nothing important hidden behind the APK.

The matching snapshot includes the Android bootstrap, app-private asset extraction, touch gesture state, mobile graphics defaults, lifecycle surface recreation, and the vendored android-activity saved-state fix.

build-android.sh
# SDK 35 · NDK 27.2 · stable Rust
$ cargo apk check -p native_app \
    --target aarch64-linux-android

$ cargo apk build -p native_app --lib \
    --target aarch64-linux-android

Finished dev profile
# target/debug/apk/Egregoria-Android.apk
ARM64 optimized SHA-2565f39c5f31a492abc1526ad980bc2d3b06cca98ba9afe74c15951bc25c935194d
Source SHA-2568505162ef6b7b224ad997901201993a7db9b6ded1e44401f48344c7d21af4db8
!

Before calling it a release

Four gates still matter.

Physical ARM64

Run on a real mobile GPU, including sustained play, lifecycle recreation, Back, and soft keyboard behavior.

Audible output

The Android mixer stream is active; speaker output still needs a device with actual audio enabled.

Asset provenance

Separate rights or credits were not found for bundled font, sounds, music, and models. Public release remains blocked.

Production signing

These APKs use the standard debug certificate. A real release requires a protected production key and versioning policy.

Read the complete testing limitations →