Shimmer

Shimmer's light app icon: a glass prism splitting a beam of white light into a rainbow, on a purple tile.Shimmer's dark app icon.
The light and dark icons for Shimmer.

Really excited to share the 2/3 Mac apps that I've been building, Shimmer! Shimmer is a Moonlight client built on Glimmer, but with a focus on Picture in Picture mode and pairing with a PS5 DualSense controller.

Here are a few demos using Shimmer streaming Street Fighter 6 at 30 Mbps via Ethernet on a 5K resolution Apple Studio Display XDR, powered by a base M5 MacBook Pro with 16GB of RAM.

This is me attempting to use the controller while simultaneously moving my mouse, typing, and using Stage Manager. In addition to there being virtually no latency, you can see that there are no significant frame drops despite all the heavy animations and applications running.
Here's another video showing me using Apple's new native dictation while simultaneously practising combos on Juri.
And here's a video of me locking and unlocking the computer with the game virtually not dropping in frame rate and staying at low latency.

Motivation

Ever since the release of the M-series chips, I always dreamt of the day the Mac would become a serious computer for gaming. But that day never came. Some of my favourite games, like Death Stranding, were released for Mac, but a lot of popular games like Valorant and Fortnite never really made it to the Mac, which I always felt was strange since the Mac has a massive install base that's still growing.

So when I heard my brother was using Sunshine/Moonlight, and I had a headless server running Bazzite, I figured I could get triple-A games running on Mac via streaming.

I started using the official Moonlight client and was pretty satisfied! It worked beautifully with Apple's Stage Manager and it was honestly everything I ever wanted. One thing that really interested me was this option in the Moonlight client's settings, where your connected controller could process all controller inputs without the game actually being focused, with virtually no increase in latency. I had also started using Infuse to stream movies and really started to use Picture in Picture mode. With all this, and AI tools getting better at software engineering, I had to give building this a shot!

Moonlight's settings, with "Process gamepad input when Moonlight is in the background" outlined in red.
The setting in Moonlight's Mac client that keeps your controller driving the game while another window is in focus.

Glimmer, Tailscale, and design

In search of prior art for a solid Mac-native Moonlight client, I came across Glimmer. I give huge credit to the developer for laying the foundation of Shimmer, and for the architecture that I gracefully never had to look into. However, one thing that didn't feel right, in both the Glimmer and Moonlight clients, was the appearance and the settings that were presented.

I took a lot of design inspiration from the settings in Tailscale's Mac app, which I felt laid out all the different machines nicely, along with a nice use of native tabs for the different settings.

Shimmer's Servers tab with a paired PC, its apps and a latency graph.Shimmer's Stream settings tab.

Another thing that I love is high-quality menu bar icons! I pulled the icons from the Steam installation on my Linux server, and I thought they'd provide useful battery info that is hard to view otherwise.

Shimmer's menu bar icon for six controllers, side by side in a menu bar: DualSense at 70%, Xbox Wireless at 40%, Switch Pro at 100%, DualShock 4 at 20%, Steam Controller charging and 8BitDo Ultimate at 60%.

The app icon

Traditionally, it's supposed to be Moonlight and Sunshine, which has a really nice duality to it. However, since this is a minor app, I didn't think it was worthy of that same duality. So sunshine shining through a tiny prism felt symbolic and fitting. I decided to make the prism out of Liquid Glass to reference Apple's modern design language, and the rainbow as a homage to Apple's original logo.

Shimmer's purple app icon: a glass prism splitting a beam of white light into a rainbow.Apple's six-colour rainbow logo.

Apple and Sony

One thing that makes this setup better is that since the relationship between Apple and PlayStation has been good over the past few years, DualSense controllers get a little bit of special treatment. Pressing the PS button connects mine instantly, and I've never had issues with it. The native settings page in Apple's System Settings is a pleasant touch too.

The DualSense connecting: macOS shows a "DualSense Wireless Controller, Connected" notification under the menu bar.

The Game Controllers pane in System Settings, with the PS button set to open Shimmer.The DualSense settings in System Settings: battery, haptics, lightbar colour and button mapping.

What's next?

I think I'm again gonna leave this alone for a while, especially since I think I spent too much time endlessly tinkering with it. As the AI models get better, I might try setting up some agent loops to reduce CPU usage, especially at higher bitrates, and also reduce latency. And I might look into the new Pyrowave codec in Steam's Remote Play, and perhaps replace Sunshine on the server too. I was thinking of adding support for PS5 in preparation for GTA 6's launch on November 19, but I think that would lead to feature bloat.

Conclusion

I'm really happy with how this turned out! I think the app icon has a lot of charm, and every time I use it, I'm still shocked at how the computer doesn't stutter or drop in frame rate regardless of what's going on. Streaming games truly feels like a reality now. I've been incredibly lucky to have an NVIDIA GeForce NOW data center open in Barrie, Ontario, so I also get to experience triple-A games running on an RTX 5080, streamed to this beautiful Apple Studio Display XDR that I got over the summer. I expect streaming to continue to grow with the shortage of modern consoles and Xbox announcing that GTA 6 will be playable on Xbox Cloud Gaming from day one. Perhaps this will be the moment people finally give game streaming a real try.

Like Deskpilot, Shimmer is released under SlaughterHouseSoftware and licensed under the GPLv3, so it stays free and open source.

Postscript

This project was developed for fun in my free time, and was vibe coded and built for vibe coders. However, I did read Addy Osmani's recent post on critical thinking when agents do the work. I respect that Addy still holds these views despite his recent move from Google to Anthropic, a company notorious for its culture. Regardless of what the future holds, I do believe we should be wary of cognitive surrender and focus on leveraging AI to build more complex, important, and beautiful software.