Game streaming that feels native on Android.
Stream PC games to phones and handhelds over your local network. Built for Polaris, compatible with other Moonlight-compatible hosts.
Install · Quick Start · Compatibility · Known Limitations · Roadmap · Why Nova · With Polaris · Screenshots · Build · Security · Changelog · FAQ
Support: Issues · Discussions
Recommended install path
- Download the latest release from GitHub Releases, add Nova to Obtainium, or open it in GitHub Store on Android.
- Install the APK that matches your Android device.
Most phones and handhelds use
Nova-Android-arm64-v8a.apk; x86_64 Android devices and emulators useNova-Android-x86_64.apk. - Open Nova, add or discover your host, then pair it.
| Public release asset | Use it for |
|---|---|
Nova-Android-arm64-v8a.apk |
Recommended Android install for phones and handhelds |
Nova-Android-x86_64.apk |
Android x86_64 devices and emulators |
*.apk.sha256 |
Integrity checks for the public APKs |
The latest direct APKs are always available through GitHub's latest-release URLs: https://github.com/papi-ux/nova/releases/latest/download/Nova-Android-arm64-v8a.apk and https://github.com/papi-ux/nova/releases/latest/download/Nova-Android-x86_64.apk. The Obtainium link above is preconfigured for the ARM64 public asset so updates resolve to one APK cleanly. The GitHub Store link opens Nova's public release repo for users who prefer that installer; GitHub Store filters assets for the device it is running on, so its desktop app may show Nova as unavailable because Nova ships Android APKs.
F-Droid and IzzyOnDroid packaging notes are tracked in docs/fdroid.md, including current status, APK scan notes, and source-build blockers.
If you install manually, verify the download before sideloading:
sha256sum -c Nova-Android-arm64-v8a.apk.sha256Note
If you distribute Nova from a private GitHub fork, Obtainium needs a Personal Access Token with repo scope. Public release repos do not.
Note
v1.0.0 is the first public Nova release line, v1.0.1 adds the first store-packaging pass, and v1.0.2 hardens the security surfaces found during public scanner review. Nova is already usable, but this is still an early public release and you should expect bugs, regressions, and rough edges while the Android client and Polaris integration continue to harden. app/ is the only shipping client today.
Built and tested most heavily on: Retroid Pocket 6, Retroid Pocket Flip 2, Pixel 10 Pro.
- Install Nova from GitHub Store, Obtainium, or GitHub Releases.
- Add your server from the Servers screen. Polaris hosts appear automatically on the LAN when discovery is enabled.
- Pair once using one of three paths:
- Trusted Pair (TOFU) on a trusted subnet
- QR pairing from the Polaris web UI
- Manual PIN pairing for standard Moonlight servers
- Launch a game from the game grid or the Polaris library.
- Use the quick menu for stream tuning, overlays, controller actions, and quit/disconnect controls.
Nova gets the best experience when the host is Polaris:
- featured Continue surface with live/watch state, cover art, and one-tap resume
- host-recommended Headless or Virtual Display launch modes
- live ACT / TGT FPS HUD readouts
- watch active stream without stealing ownership
- owner-aware quit and resume
- clear Baseline / AI tune / Cached AI / Recovery tune labels in Polaris-backed flows
- live host tuning for Adaptive Bitrate, AI Optimizer, and MangoHud
- richer library metadata, cover art, and per-game recommendations
Nova still works as a standard Moonlight client. Pair normally, launch normally, and stream normally. Polaris-only UI simply stays out of the way.
| Area | Status | Notes |
|---|---|---|
| Android handhelds | Primary target | Designed first for landscape handheld use |
| Android phones and tablets | Supported | Works well, but the UX is tuned most heavily for handhelds |
| Polaris | Best experience | Full launch-mode, watch-mode, tuning, library, and live-session integration |
| Other Moonlight-compatible hosts | Compatible | Standard Moonlight-compatible client flow |
| High refresh devices | Supported | Nova can request 90/120 Hz when the device display and host both support it |
| Official release assets | arm64-v8a, x86_64 |
Public GitHub Releases ship separate APKs per Android ABI |
- Advanced launch modes, watch mode, live host tuning, and richer session telemetry are Polaris-specific.
- Nova is not on the Play Store; the public install paths are GitHub Releases, Obtainium, and GitHub Store.
- High refresh streaming is limited by the real display panel on the Android device, not just the selected setting in Nova.
- Public releases currently ship
arm64-v8aandx86_64APKs. Other ABIs are available from local source builds. - Today, only the Android client ships.
Nova is a Moonlight-compatible Android client built for handhelds first, not desktop assumptions squeezed onto a touch screen.
- Handheld-first UI: large game art, clear session actions, controller-friendly navigation, and OLED-aware themes
- Clear launch surfaces: host library screens keep the primary action obvious instead of burying resume/watch behind generic grids
- Practical session controls: quick menu, multi-mode HUD, reconnect overlay, and live stream state
- Deep input support: gyro aim, audio haptics, gamepads, mouse modes, and touch controls
- Polaris-aware workflow: library metadata, launch-mode choices, watch mode, session ownership, live tuning, and stream reports
| Capability | What It Does |
|---|---|
| Launch modes | Pick Headless or Virtual Display per launch when the host supports it |
| 10-bit opt-in | Enabling HDR can request a 10-bit stream even on SDR handheld displays |
| Watch Stream | Join an active session as a passive viewer instead of taking ownership |
| Session truth | HUD and quick menu show the live mode, owner/viewer role, and negotiated stream state |
| AI state | Library and quick menu can distinguish baseline device tuning, live AI, cached AI, recovery tuning, and host-adjusted recommendations |
| Stream tuning | Toggle Adaptive Bitrate, AI Optimizer, and MangoHud from the quick menu |
| Library | Cover art, genres, source badges, recommendations, and per-game launch guidance |
- Streaming and HUD: H.264, HEVC, and AV1 decode; full, banner, and FPS-only HUD modes; actual vs target FPS labels; reconnect overlay; quality presets for quick setup
- Input: gyro aim, audio haptics, broad controller support, Direct/Trackpad/Relative mouse modes, and compact handheld on-screen controls
- Polaris flow: host-backed library, Continue/watch flows, explicit Headless vs Virtual Display launches, AI source labels, live tuning, and warnings before risky MangoHud launches
Architecture
block-beta
columns 1
block:kotlin["com.papi.nova — Kotlin"]:1
columns 4
api["api/\nREST + SSE"]
manager["manager/\nResilience"]
ui["ui/\nHUD, Themes\nLibrary, Menu"]
service["service/\nQS Tile\nKeep-alive"]
end
block:java["com.papi.nova — Java (Moonlight core)"]:1
columns 5
PcView["PcView\nServers"]
AppView["AppView\nGames"]
Game["Game\nStream"]
nvstream["nvstream/\nProtocol"]
binding["binding/\nDecode"]
end
block:native["moonlight-common-c — C / NDK"]:1
columns 3
enet["enet\nTransport"]
fec["Reed-Solomon\nFEC"]
opus["Opus\nAudio"]
end
kotlin --> java --> native
style kotlin fill:#7c73ff22,stroke:#7c73ff,color:#d4dde8
style java fill:#4c526522,stroke:#687b81,color:#a8b0b8
style native fill:#1a1a2e,stroke:#4c5265,color:#687b81
All new Nova-specific behavior lives in the Kotlin layer. The Java core stays close to Moonlight and is changed surgically.
| Tool | Version |
|---|---|
| JDK | 17 |
| Android NDK | 27.0.12077973 |
| Android SDK | compileSdk 36 |
| Git | with submodule support |
git clone --recursive https://github.com/papi-ux/nova.git
cd nova| Path | Purpose |
|---|---|
app/ |
Current Android client |
Android is the only public release target today.
# Release APKs
./gradlew assembleNonRoot_gameRelease
# Debug APKs (installs alongside release as com.papi.nova.debug)
./gradlew assembleNonRoot_gameDebugBy default, local source builds produce split APKs for arm64-v8a and x86_64.
Tip
Official GitHub releases ship a signed arm64-v8a APK for real devices as Nova-Android-arm64-v8a.apk.
If you want a different ABI set locally:
./gradlew assembleNonRoot_gameDebug -PnovaAbis=arm64-v8a,armeabi-v7a,x86,x86_64
Use the ABI-specific APK that matches your device from app/build/outputs/apk/nonRoot_game/<buildType>/.
Example for a real arm64 device:
adb install -r app/build/outputs/apk/nonRoot_game/debug/app-nonRoot_game-arm64-v8a-debug.apkBuild flavors and tests
| Flavor | Package | Notes |
|---|---|---|
nonRoot_game |
com.papi.nova |
Standard release build |
nonRoot_gameDebug |
com.papi.nova.debug |
Debug build, installs alongside release |
./gradlew :app:testNonRoot_gameDebugUnitTestDoes Nova work with other Moonlight-compatible hosts, not just Polaris?
Yes. Nova is a Moonlight-compatible client. Polaris adds the richest integration, but Nova still works with other Moonlight servers.
What is Trusted Pair?
Trusted Pair is Nova’s TOFU flow. If Polaris trusts the subnet you are on, Nova can complete first pairing without the usual PIN ceremony. You can still use QR or manual PIN pairing when you want the traditional flow.
What is the difference between Headless and Virtual Display?
Headless launches against Polaris’ isolated compositor path without touching your physical desktop layout. Virtual Display asks the host for a virtual display-backed launch instead. Nova’s Polaris library now shows what the host recommends, what the app prefers, and which modes are currently allowed.
Can Nova request a 10-bit stream on an SDR display?
Yes. When you explicitly enable HDR in Nova and the server supports Main10, Nova can request a 10-bit stream even if the handheld screen itself does not advertise HDR10. This is especially useful with Polaris on handhelds such as Retroid devices.
What does Watch Stream do?
Watch Stream lets a second device join an already running Polaris session as a passive viewer. It does not take ownership, and viewer sessions are limited to the active stream profile rather than silently renegotiating their own version.
Why does Nova warn me before enabling MangoHud?
On Polaris-backed Steam Big Picture and Steam/Proton titles, MangoHud can crash helper processes early enough to leave the session black-screened. Nova flags those launches before you enable MangoHud so the safer choice is obvious.
Is there a native Steam Deck or iOS client yet?
Not today. Nova currently ships as an Android client only.
Why can't I find Nova on the Play Store?
Nova is distributed through GitHub Releases, Obtainium, and GitHub Store. The official public release path is GitHub first.
Nova is built and released by me, with assistance from tools such as OpenAI Codex, Claude, and local models.
I use those tools for documentation polish, release workflow cleanup, store-readiness checks, build/test triage, implementation review, and to compare approaches while debugging. They do not decide what Nova or Polaris are, what features ship, or what releases are published. I review, edit, build, test, and approve the changes before release, and I own the final engineering and trust-boundary decisions.
Contributions are welcome, especially focused fixes, UI polish, docs, translations, and careful feature work. Nova is still a small maintainer-led project, so the easiest pull requests to review are the ones that explain the problem clearly and keep the change scoped.
- Fork the repo and branch from
master. - Build with
./gradlew assembleNonRoot_gameDebug. - Test on a real device or emulator.
- Open a pull request that explains what changed, why it helps, and what you were able to test.
Note
The native streaming layer in app/src/main/jni/moonlight-core/ is a git submodule. Run git submodule update --init --recursive after cloning.
Nova is a fun project I build in my spare time simply because I want more people to make the switch to Linux gaming while making users safer, clearer, and easier to trust. If it becomes part of your setup, that alone makes my day, donations are appreciated but never expected. They help with my actual coffee budget, which coffee obviously keeps the project moving. Bug reports, testing notes, and thoughtful feedback help too.
Nova is licensed under the GNU General Public License v3.0. See LICENSE.txt for the full text.
Nova builds on Artemis, Moonlight Android, and moonlight-common-c under GPLv3 lineage.





