I've been messing around with replacing the UIKit tvOS UI in Moonlight with SwiftUI. I didn't touch the streaming pipeline, just the UI layer. This started as something for my own Apple TV because I wanted a cleaner look and the current UI feels out of place when compared to the rest of the system, and it kind of snowballed from there.
What works right now (tvOS 26, Apple TV 4K simulator):
- Finding hosts via the network, pairing them, and having pairing actually survive across launches
- Browsing apps in a horizontal scrolling shelf
- Streaming — video, audio, controller input all work
- Settings hooked up to the tvOS Settings app
- The Siri Remote trackpad acting as a mouse
Under the hood it's a separate Xcode target that links the same static libs and ObjC sources. Nothing in the shared Limelight code changed.
What I haven't done, and why I'm asking before going further:
- Right now it's tvOS 26 only. Some of the newer SwiftUI stuff could probably work on older tvOS with availability checks, but I haven't tried. This was built for what I run at home.
- If this were to go anywhere, the idea would be to replace the tvOS UIKit UI entirely, and maybe eventually the iOS one too. But that's a much bigger conversation and I'm not going to pretend I have a roadmap for it.
- I'm not a SwiftUI dev. I'm a hobbyist who likes tinkering. There are definitely things here that a real iO developer would do differently, and I'd rather get that feedback now than after spending more weekends polishing something that doesn't fit the project's direction.
Would upstream be open to something like this, or are there architectural reasons it wouldn't make sense?

I've been messing around with replacing the UIKit tvOS UI in Moonlight with SwiftUI. I didn't touch the streaming pipeline, just the UI layer. This started as something for my own Apple TV because I wanted a cleaner look and the current UI feels out of place when compared to the rest of the system, and it kind of snowballed from there.
What works right now (tvOS 26, Apple TV 4K simulator):
Under the hood it's a separate Xcode target that links the same static libs and ObjC sources. Nothing in the shared Limelight code changed.
What I haven't done, and why I'm asking before going further:
Would upstream be open to something like this, or are there architectural reasons it wouldn't make sense?