Nova is moving toward a single-repo, multi-client layout.
The goal is simple:
- keep Android shipping from this repo today
- add a native Steam Deck client here next
- add an iOS client here later
- keep Android TV inside the Android client rather than splitting it into a separate app
- publish all platform artifacts from one Nova release page when they are ready
Today, only the Android client ships. This document defines the repo direction that future client work should follow.
| Path | Purpose | Status |
|---|---|---|
app/ |
Current Android client for handhelds, phones, tablets, and future Android TV polish | Active |
clients/deck/ |
Native Steam Deck and Linux handheld client | Scaffold |
clients/ios/ |
Native iOS client | Scaffold |
shared/models/ |
Cross-client DTOs for hosts, sessions, capabilities, launch metadata, and settings concepts | Scaffold |
shared/polaris/ |
Cross-client Polaris contract and mapping layer | Scaffold |
shared/stream-core/ |
Cross-client streaming session boundary around Moonlight transport and pairing behavior | Scaffold |
Nova should share backend behavior, contracts, and data models, not force every platform into one UI stack.
That means:
- Android keeps its existing Android-first UI
- Steam Deck gets a controller-first native shell
- iOS gets a native iOS shell
- Android TV is handled as a form factor of the Android client
The first shared layers should cover:
- host discovery contracts
- pairing/session contracts
- streaming session lifecycle
- Polaris API contracts and response mapping
- shared models for hosts, sessions, recommendations, and preferences
The shared layers should not own:
- Android
ActivityorServicebehavior - Deck windowing and controller UX
- iOS view hierarchy and navigation
- platform-specific media decode, audio output, or input plumbing
The current Android app is the living product and should remain buildable and releasable while shared layers are introduced.
Extraction rule:
- move contracts and models first
- keep Android behavior stable
- do not block Android releases on unfinished Deck or iOS work
Nova should use one repo and one release page.
Release expectations:
- one version tag for Nova
- one GitHub release page per version
- multiple assets on that release page as platform clients mature
Examples:
- Android APKs
- Steam Deck Linux artifact(s)
- iOS-related distribution artifact(s) when that client is ready
Until a platform client is ready, the release page may contain only Android assets. The release model stays the same.
- keep
app/as the active Android client - create
clients/andshared/scaffolding - document repo boundaries and shared-layer intent
- add the first non-Android client in
clients/deck/ - prove the shared streaming and Polaris layers against Android plus Deck
- keep the Deck MVP focused on first-stream usability, controller input, fullscreen UX, reconnect, and Polaris essentials
- add
clients/ios/after the Android plus Deck shared boundaries stabilize - reuse shared models and Polaris contracts where they actually help
- keep iOS UI and platform behaviors native-ish
- keep Android TV inside
app/ - add TV-specific polish in the Android client rather than fragmenting the repo into a second Android app unless there is a strong product reason later
Use this document for repo shape, client boundaries, and release model.
Use Steam Deck Native Port Study for the Deck-specific client architecture and rollout details.