Polaris-aware game streaming for Android handhelds, phones, and TVs.
Stream PC games from Polaris or any Moonlight-compatible host with a client that understands handheld controls, live session state, launch intent, and host-side tuning instead of hiding everything behind a generic game grid.
Quick Start · What's New · Install · Compatibility · Tour · Polaris · Docs · FAQ · Security · Changelog · Roadmap
Support: Issues · Discussions
Important
Nova is an Android client today. It is built and tested most heavily on handheld Android devices, Android TV, and modern phones, with the richest experience coming from Polaris.
Note
Nova still speaks the Moonlight/GameStream client path. Polaris unlocks the new launch, library, watch, tuning, and session-truth surfaces, but standard Moonlight-compatible hosts remain usable.
- Install Nova from GitHub Releases, Obtainium, or GitHub Store.
- Open Servers and add or discover a host. Polaris hosts appear automatically on the LAN when discovery is enabled.
- Pair with Trusted Pair on a trusted Polaris subnet, QR pairing from the Polaris web UI, or normal manual PIN pairing.
- Launch from the standard game grid or the Polaris-powered Library.
- During a stream, open the quick menu for tuning, overlays, controller actions, and quit/disconnect controls. Guide/Mode + Start/Menu opens the quick menu, and Guide/Mode + Y shows or cycles NovaHUD.
| Device | Start here |
|---|---|
| Android handheld or phone | Nova-Android-arm64-v8a.apk |
| NVIDIA Shield or ARM64 Android TV | Nova-Android-arm64-v8a.apk |
| Chromecast with Google TV, Google TV Streamer, or 32-bit ARM Android TV | Nova-Android-armeabi-v7a.apk |
| Android x86_64 device or emulator | Nova-Android-x86_64.apk |
If a sleeping host does not report a MAC address, open the host menu and choose Edit Wake-on-LAN MAC. Nova stores that address and reuses it for future wake requests, which helps VPN and routed setups where discovery metadata is incomplete.
Nova v1.1.0 is a stream performance and release-hardening update for Polaris-backed play.
- Lower-overhead HUD metrics: NovaHUD now consumes structured stream samples from the video renderer while preserving the legacy overlay path.
- Hot-path allocation cleanup: HUD sparkline samples use a fixed primitive buffer instead of rebuilding collection state during a stream.
- Smoother first-run surfaces: Baseline Profile generation now covers library detail, settings, and launch-adjacent Compose paths.
- Measured JNI policy: the JNI bridge now has a documented profiling gate for future
@FastNativeand@CriticalNativework. - Retroid 6 validation: the ARM64 debug APK was smoke tested over wireless ADB with Polaris library launch, HEVC stream resume, NovaHUD, Command Center disconnect, and clean crash checks.
See the changelog for the full release history.
Use the public release APK that matches your device:
| Public release asset | Use it for |
|---|---|
Nova-Android-arm64-v8a.apk |
Recommended Android install for phones, handhelds, and ARM64 Android TV devices |
Nova-Android-armeabi-v7a.apk |
Chromecast with Google TV, Google TV Streamer, and other Android TV devices that expose only 32-bit ARM app support |
Nova-Android-x86_64.apk |
Android x86_64 devices and emulators |
*.apk.sha256 |
Integrity checks for public APKs |
The Obtainium shortcut is preconfigured for the ARM64 public asset so updates resolve to one APK cleanly. Chromecast and other 32-bit ARM Android TV users should choose the armeabi-v7a asset manually or configure Obtainium to match Nova-Android-armeabi-v7a.apk.
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, https://github.com/papi-ux/nova/releases/latest/download/Nova-Android-armeabi-v7a.apk, and https://github.com/papi-ux/nova/releases/latest/download/Nova-Android-x86_64.apk.
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.sha256Tip
If you distribute Nova from a private GitHub fork, Obtainium needs a Personal Access Token with repo scope. Public release repos do not.
| Area | Status | Notes |
|---|---|---|
| Android handhelds | Primary target | Designed first for landscape handheld use |
| Android phones and tablets | Supported | Works well, with the UX tuned most heavily for handheld play |
| Android TV | Supported | Uses ARM64 or 32-bit ARM APKs with Leanback launcher support and D-pad/controller-friendly browsing |
| Polaris | Best experience | Full launch-mode, watch-mode, tuning, library, profile sync, and live-session integration |
| Other Moonlight-compatible hosts | Compatible | Standard Moonlight-compatible client flow |
| Steam Controller 2026 | Partial Android HID support | Android may expose Bluetooth mode as a Valve keyboard/mouse HID; Nova recognizes common Valve HID names for host gamepad presence and compatible D-pad/button events |
| Wake-on-LAN | Supported | Sends UDP magic packets directly from Android and supports manual MAC entry |
| High refresh devices | Supported | Nova can request 90/120 Hz when the device display and host both support it |
| Official release assets | arm64-v8a, armeabi-v7a, x86_64 |
Public GitHub Releases ship separate APKs per Android ABI |
- Advanced launch modes, watch mode, live host tuning, richer session telemetry, and Polaris Sync 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.
- Steam Controller 2026 Bluetooth support depends on the HID shape Android exposes. Nova can recognize Valve keyboard/mouse HID presentations and route compatible controller-like keys, but Android does not expose full Steam Input profiles or hidden analog controls through a standard gamepad source.
- Today, only the Android client ships.
Most Android game-streaming clients stop at pairing, a grid, and a stream. Nova is built for the newer reality: handheld Android hardware, Linux streaming hosts, multiple clients, host-side optimization, and players who need to know what will actually happen before they launch.
Nova takes a different route:
- Handheld-first streaming: controller focus, TV navigation, OLED-aware themes, quick actions, and stream controls are designed for real handheld sessions.
- Session truth in the UI: NovaHUD and the quick menu can show actual FPS, target FPS, role, launch mode, and Polaris-backed tuning state.
- Launch intent instead of guesswork: Polaris-backed Library flows can show Headless vs Virtual Display options, host recommendations, per-game guidance, and risky MangoHud warnings before launch.
- Profiles that explain themselves: Nova Settings now separates global defaults from profile overrides, shows what applies instantly or next stream, and lets overrides reset back to fallback values.
- Shared and recoverable sessions: watch an active Polaris stream without taking ownership, reconnect after interruptions, or quit with owner-aware session controls.
- Host-aware tuning: Auto Quality, cached AI tuning, recovery tuning, stream defaults, and Polaris Sync are surfaced as explicit states instead of silent background magic.
Polaris is the Linux host built alongside Nova. Together they expose a streaming contract that typical Moonlight-compatible clients do not see.
| Polaris + Nova capability | What it means |
|---|---|
| Launch contract | Polaris tells Nova which launch modes are preferred, recommended, and currently allowed |
| Headless vs Virtual Display | Nova can present both choices directly in the library instead of silently guessing |
| 10-bit SDR | Nova can explicitly request a Main10 stream even on SDR handheld panels when the host supports it |
| Watch Stream | A second device can join as a viewer without taking over the owner session |
| Tuning provenance | Nova can distinguish baseline device tuning, live AI, cached AI, recovery tuning, host-adjusted recommendations, and active target profiles |
| Polaris Sync | Push Nova stream defaults to Polaris, pull Polaris' current profile back into Nova, or keep Polaris matched to Nova defaults |
| Live tuning | Auto Quality and MangoHud can be surfaced directly in Nova's quick menu |
| Session truth | HUD and quick menu can show live server-backed mode, role, shutdown state, and tuning state |
Nova opens on a controller-friendly dashboard for servers, themes, help, and streaming entry points. Focus states are designed to stay visible on Android TV, handhelds, and phones.
The Polaris library gives Nova the context a plain app list cannot: cover art, filters, source badges, launch modes, Continue/watch states, and per-game guidance.
Library grid |
Launch detail |
During a stream, Nova shifts from browsing to operations: HUD modes, quick controls, reconnect state, tuning actions, and input helpers stay reachable without leaving the session.
Quick menu |
NovaHUD |
Theme system
Nova keeps the Moonlight-compatible stream path, then layers a Kotlin Android experience around host awareness, controller-first navigation, profile-aware settings, and Polaris session metadata.
The practical result: standard hosts still work, while Polaris hosts can tell Nova more about what is launching, who owns the session, what tuning is active, and what settings should apply next. The native streaming layer stays close to Moonlight lineage; the newer Nova behavior lives in the Android/Kotlin layer.
For the deeper source layout and build model, see Technical Overview.
| Guide | Use it for |
|---|---|
| Technical Overview | Source layout, architecture, local builds, tests, APK outputs |
| F-Droid Packaging Notes | F-Droid and IzzyOnDroid packaging status |
| Kotlin Optimization Audit | Kotlin migration and optimization notes |
| Video Baseline Evidence | Baseline profile and release-performance evidence |
| Multi-platform Study | Native client expansion notes |
| Steam Deck Native Port Study | Steam Deck client research |
Clone with submodules, then build the Android APKs:
git clone --recursive https://github.com/papi-ux/nova.git
cd nova
./gradlew assembleNonRoot_gameDebugLocal builds produce split APKs for arm64-v8a, armeabi-v7a, and x86_64 by default. Release builds, test commands, local ABI overrides, and the architecture diagram live in Technical Overview.
Does Nova work with other Moonlight-compatible hosts, not just Polaris?
Yes. Nova is a Moonlight-compatible Android client. Polaris adds the richest integration, but Nova still works with other Moonlight-compatible servers.
What makes Nova different from a normal Moonlight client?
Nova keeps compatibility with the Moonlight streaming path, then adds handheld-first navigation, a host-backed Library, launch-mode awareness, watch mode, Polaris Sync, tuning provenance, NovaHUD, profile overrides, and controller shortcuts that are designed around Android handheld and TV use.
What is Trusted Pair?
Trusted Pair is Nova's TOFU flow for Polaris. 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 can show what the host recommends, what the app prefers, and which modes are currently allowed.
What does Polaris Sync do?
Polaris Sync is a bidirectional settings flow for Polaris hosts. Nova can push its local stream profile to Polaris, pull Polaris' current stream profile back into Nova, or keep the Polaris profile matched to Nova defaults so launch settings stay predictable across devices.
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.
Does Wake-on-LAN work over WireGuard or another VPN?
It can, as long as the network path forwards the UDP wake packet to a host or subnet that can reach the sleeping PC. Nova sends Wake-on-LAN packets directly from Android. If the server did not provide a MAC address during discovery or pairing, use Edit Wake-on-LAN MAC in the host menu and enter the PC network adapter MAC address manually.
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.