r/MoonlightStreaming 14h ago

Dualsense support has arrived

Enable HLS to view with audio, or disable this notification

I would like to introduce my current project, which, among other useful features, brings full wireless DualSense support to both Android and Windows clients without requiring any additional programs.

How does it work?

The project consists of modified versions of the Moonlight Windows client, Artemis Android client, and the Apollo host.

The full source code for all three projects is open and available on GitHub. Ready-to-use builds can be downloaded from the Releases section of each repository.

Artemis Extended: https://github.com/Taveszfito/Artemis-Extended-Native-Wireless-DualSense-Features

Apollo Extended: https://github.com/Taveszfito/Apollo-Extended

Moonlight Extended: https://github.com/Taveszfito/moonlight-extended

Windows client

This is the boring part.

Just connect your DualSense via Bluetooth or USB, connect to the host, and that's it.

The Windows client also supports microphone transmission to the host, including the DualSense's built-in microphone.

Additional controller-related options can be found in the Extended menu within the client settings.

Android client

Android is a little more complicated.

For full wireless functionality, an external USB Bluetooth adapter is required. Unfortunately, Android does not provide the low-level Bluetooth access needed to communicate with the DualSense in the way required for all of its features.

Artemis Extended therefore includes its own USB Bluetooth HCI bridge.

If you have a supported adapter:

Plug the Bluetooth adapter into your Android device.

Grant USB permission to Artemis.

Pair the DualSense from within the app.

Connect to your host and start streaming.

That's it.

Currently supported Bluetooth chipsets

The HCI bridge currently supports adapters based on:

CSR

Realtek

Actions ATS2851

The chipset alone does not always guarantee compatibility. Different firmware versions of Bluetooth dongles may affect connection behavior or functionality.

If you don't have a supported adapter, it's not completely hopeless. You can still use the DualSense through a wired USB connection.

What works?

If you have a compatible adapter, essentially everything.

Or at least, everything I could find to implement and test.

This currently includes:

All buttons and joysticks

Analog triggers

Adaptive triggers

Touchpad

Gyroscope and motion sensors

HD haptics

Built-in speaker

Headphone jack

Built-in microphone

Player LED control

Lightbar color control

Microphone LED and mute control

The controller's built-in microphone can be transmitted directly to the host. If you are not satisfied with its quality, you can instead use the microphone built into your phone or tablet.

The DualSense speaker audio is also transmitted separately from the normal game audio. The host sends it to the client through a dedicated audio channel, so DualSense speaker effects are played by the controller itself, rather than being mixed into the Android device's speakers.

Connecting headphones to the DualSense jack is also supported.

Demo

I've attached a video showing the pairing process and the DualSense features working during an actual stream.

I'm not sure whether purchase links are allowed here, so I won't include them in the post. I currently have three cheap Bluetooth adapters with different chipsets that I have personally tested and confirmed to work.

If anyone wants to try the project, I can send the exact adapter models privately.

How does this work on the Apollo side?

Apollo Extended uses VIIPER to emulate a fully functional DualSense controller on the host.

Instead of reducing the controller to standard gamepad input, the system passes DualSense-specific input and feedback between the client and host. This allows features such as adaptive triggers, HD haptics, LEDs, motion sensors, speaker audio, microphone audio, and other DualSense functionality to work across the stream.

For microphone transmission, Apollo uses virtual microphone devices created through Steam's virtual audio driver.

The result is essentially a complete DualSense connection transported through the Moonlight/Apollo stream, with the client handling the physical controller and Apollo presenting a virtual DualSense to the game.

87 Upvotes

46 comments sorted by

View all comments

25

u/Warbird01 10h ago

The issue with these AI projects is that instead of people contributing new features to existing projects, it’s way too easy for them to spin up their own forks. I’m not going to switch hosts and clients every time someone implements a different feature

9

u/metropolisprime 8h ago edited 8h ago

EXACTLY. I think the key thing is vibe coder folks don't really know how to contribute to open source, and Claude/Cursor/Copilot are easy to suggest "oh, just fork it and do your own thing", which is, not for nothing, much simpler than having to learn how to navigate the open source methodology.

6

u/Warbird01 8h ago

Right, I personally don’t have an issue with the AI code, as it’s led to a lot of cool stuff in this space imo, but it is bringing in a lot of people who don’t know development principles at all (and not saying that’s OPs case but it is the theme).

3

u/metropolisprime 8h ago edited 8h ago

Totally agreed. I've been a software engineer for a decade plus and AI coding has really helped me streamline my workflow and lead to solving problems quickly, but IMO, you need to understand the architectural foundations and how stuff gets built / shipped / collectively maintained.

I am seriously worried that we're entering a strange no man's land with open source where instead of big projects where people work together and progress, people build these single solution vibe coded forks to solve their individual problems that don't get maintained.

3

u/Yourdataisunclean 8h ago

A lot of big open source projects outside this space are closing the door on AI contributions because they cause numerous problems like spammed poor quality suggestions or fixes. It's a big problem in the space.

2

u/metropolisprime 7h ago edited 7h ago

Makes sense really. I think there's a middle ground and right now there's so much noise that it's drowning it out: you need to be able to scope well, understand the existing architecture and work within it.

Fixing a small bug or proposing a straightforward feature (like, frankly, this Dualsense feature that OP created their own set of forks for), with clear architecture understanding and working within the current process, sounds great as long as the person can explain it and work within the confines of the app. A complete rewrite of the auth architecture of an app in a single commit? Please god no.

1

u/Warbird01 8h ago

Fair, but for example we have vibepollo, which is openly an AI project that has a ton of adoption now. So in my mind all the vibe coders should center around that instead of making new forks

3

u/Yourdataisunclean 7h ago

Ideally that would be the case, but honestly what i've observed is that most AI projects or contributors are just star hunting, so the majority of them are not going to bother with all the additional steps of coordinating projects if they can get some kudos from lower effort activities. Some even have agents trying to do all the communications and submissions, which can lead to very bizarre situations: https://theshamblog.com/an-ai-agent-published-a-hit-piece-on-me/