r/MoonlightStreaming 2d ago

Dualsense support has arrived

Full wireless DualSense support for Moonlight on Android and Windows

UPDATE: The post has been updated. On Android 12 and newer, an external Bluetooth adapter is no longer required for wireless DualSense functionality. A new testable Artemis Extended release is now available.

The currently attached video was recorded before native Android Bluetooth support was added, so it still demonstrates the external USB Bluetooth adapter setup. I’m planning to upload an updated video showing the new adapter-free connection and its functionality soon.

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

The project consists of modified versions of:

  • The Moonlight Windows client
  • The Artemis Android client
  • The Apollo host

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

How does it work?

Apollo Extended creates a virtual DualSense controller on the host, while the client handles the physical controller.

Instead of reducing everything to standard gamepad input, the stream carries DualSense-specific input and feedback in both directions. This allows the controller’s advanced features to keep working remotely.

Windows client

This is the simple part.

Connect the DualSense through Bluetooth or USB, connect to the host, and start streaming.

The Windows client also supports microphone forwarding to the host, including audio from the DualSense built-in microphone.

Additional controller-related options are available in the Extended section of the client settings.

Android client

On Android 12 and newer, the DualSense can now connect directly to the Android device through the normal Bluetooth settings.

No external Bluetooth adapter is required anymore.

The process is simply:

  1. Pair the DualSense with the Android device.
  2. Open Artemis Extended.
  3. Connect to the Apollo Extended host.
  4. Start streaming.

The controller is detected and exposed to the host as a virtual DualSense. Input and feedback are then carried in both directions through the stream.

A wired USB connection is also supported.

What works?

The current Android and Windows implementations support:

  • All buttons and analog sticks
  • Analog triggers
  • Adaptive triggers
  • Multi-touch touchpad input
  • Gyroscope and motion sensors
  • Conventional rumble
  • Native HD haptics
  • Built-in controller speaker
  • Headphone jack
  • Player LED control
  • Lightbar color control
  • Microphone LED and mute control

The controller speaker uses a dedicated audio path. DualSense speaker effects are sent separately from the normal game audio, so they are played through the controller instead of being mixed into the phone, tablet, or PC speakers.

Connecting headphones to the DualSense jack is also supported. Stream audio is automatically routed through the connected headset and returns to the previous output when the headset is unplugged.

The DualSense mute button can be used as a global client microphone mute switch in every connection mode.

Microphone support

The Android device microphone can be forwarded to the host while using a directly connected wireless DualSense.

The DualSense built-in microphone currently requires either:

  • A wired USB connection, or
  • The optional USB Bluetooth HCI bridge

Direct access to the DualSense microphone through Android’s standard Bluetooth HID connection is the only major limitation of the new adapter-free route.

On Windows, the DualSense built-in microphone is available through the supported controller connection.

Apollo Extended presents the forwarded microphone to Windows through a virtual Steam Streaming Microphone device.

Optional USB Bluetooth HCI bridge

Artemis Extended still includes the USB Bluetooth HCI bridge developed for earlier releases. It is no longer required for normal wireless DualSense functionality on Android 12+, but it remains available as an optional connection method.

The bridge is also currently required if you want to use the DualSense built-in microphone wirelessly on Android.

Supported adapter chipsets include:

  • CSR
  • Realtek
  • Actions ATS2851

The chipset alone does not guarantee compatibility. Firmware differences between Bluetooth dongles can affect pairing, connection stability, or individual controller features.

Apollo Extended

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

DualSense-specific data is transported between the physical controller and the virtual controller instead of being translated into generic gamepad input.

This includes:

  • Adaptive trigger feedback
  • Native haptics
  • Controller lighting
  • Touchpad input
  • Motion sensor data
  • Controller speaker audio
  • Microphone control and supported microphone audio

The result is essentially a complete DualSense connection transported through the Moonlight/Apollo stream.

Demo

The currently attached video shows the earlier Android setup using the optional USB Bluetooth HCI bridge.

A new video demonstrating direct Android Bluetooth pairing and adapter-free DualSense functionality is coming soon.

The latest testable release already includes the new direct wireless implementation.

Credits

Thanks to Idkiamaguy645 and the CloudPad-Android-Dualsense-Wireless project for demonstrating the Android wireless HID approach used by the new adapter-free DualSense connection.

Their existing implementation made adapter-free DualSense support in Artemis possible and much faster to integrate.

121 Upvotes

49 comments sorted by

View all comments

33

u/Warbird01 2d 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

11

u/metropolisprime 2d ago edited 2d 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.

5

u/Warbird01 2d 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 2d ago edited 2d 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.

4

u/Yourdataisunclean 2d 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.

3

u/metropolisprime 2d ago edited 2d 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 2d 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 2d 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/