How to turn any macOS device into a Nintendo Switch dock!

Hello! If you’re reading this, it’s probably because you saw my post on Reddit or in a Discord server and got at least a little interested - thank you for checking this out!

Today I’m gonna show you how to create a cool automation that streams your Nintendo Switch screen to your Mac using just a single USB-C cable. No dock or capture-card required. Though, if you do seriously want to try/use this, you should read the warning at the bottom.

You do need a CFW-enabled Switch for this to work! If you’re here, I assume you already know what that means and have one ready to go.

What You’ll Need:

This is made possible using two apps:
• SysDVR – Streams your Switch screen over USB or Wi-Fi
• Hammerspoon – A really good Lua-based macOS automation tool

SysDVR handles the streaming part, but Hammerspoon is what automates everything so that just plugging in your Switch starts everything up properly.

Setup

  1. Download Hammerspoon
    Open it at least once to give it permission to run scripts.
  2. Download and Set Up SysDVR
    Follow the setup instructions for your Switch and computer. Make sure it’s set to USB mode.
  3. Setup the Hammerspoon Script
    Open Hammerspoon, then hit Open Config from the menu bar. Replace the contents of init.lua with this:
local switchUSBName = "SysDVR"
local sdvrScript = "/Applications/SysDVR-Client/SysDVR-Client" -- your SysDVR Client path
local sdvrTask = nil

local function onSwitchConnected()
    hs.alert.show("Switch connected! Starting SysDVR...")
    sdvrTask = hs.task.new("/bin/bash", nil, {"-c", sdvrScript .. " usb --fullscreen"})

    if not sdvrTask then
        hs.alert.show("Failed to start SDVR task!")
    else
        sdvrTask:start()
    end
end

local function onSwitchDisconnected()
    hs.alert.show("Switch disconnected! Stopping SysDVR...")
    if sdvrTask and sdvrTask:isRunning() then
        sdvrTask:terminate()
        sdvrTask = nil
    else
        hs.execute("pkill -f sdvr")
    end
end

local usbWatcher = hs.usb.watcher.new(function(event)
    if event.productName == switchUSBName then
        if event.eventType == "added" then
            onSwitchConnected()
        elseif event.eventType == "removed" then
            onSwitchDisconnected()
        end
    end
end)

usbWatcher:start()

Before saving make sure that you either place the SysDVR-Client in the same path as shown in the second line of the script or change the script to match where you have the SysDVR Client downloaded.

After that just save the file, reload the Hammerspoon config in the menu bar, and you’re all done! Opening a game then plugging in your Switch should now show the game on your Mac display!

Why would you need this?

For me? I wanted to play Animal Crossing and screen share it with my girlfriend in good (enough) quality over FaceTime — and it works perfectly for that! This setup also works great with Discord screen share if you want to share some gameplay with friends.

Since this is powered by SysDVR, you’re limited to:

• Not all games are suppported
• 720p resolution
• 30 FPS limit (there are ways around this more details on the SysDVR github repo)
• The Switch screen will stay on (it’s not a real “dock” technically)

I hope this guide is useful to at least someone out there! Thank you for reading.

Edit Report
Pub: 09 Apr 2025 00:54 UTC
Edit: 11 Apr 2025 05:15 UTC
Views: 590