godotGem is a project designed to help you connect a controller over the network to your Windows gaming PC. It makes use of ViGEm.NET, Godot, and webSockets to bridge the gap between a wired controller and send those inputs to a virtual controller that's being run on Windows!
This program was designed with the Steam Deck in mind. It features a "blinder" button that fades the screen to black, so that your deck doesn't have burn-in while sending it's inputs over to the other machine.
- You have a wired controller that you want to effectivlye make wireless
- Valve's steam link is being rough on bandwidth - testing has shown that feeds from steam link can go up to 300kbps (because of both a video feed and controller inputs). This project at maximum only takes up a fraction of that. (100-140kbps when using joysticks!) (TODO: measure without buttons)
- You need a spare controller on hand and your only option is a steamdeck
- You need a glorified extension cable because your wired controller is too far away from your machine
- Your PC is out of USB ports
- Bluetooth bandwith stinks for some reason
If you are on Linux, godotGem
should be available as a flatpak on flathub. If you are using the Steam Deck, this is going to be your easiest option to install it.
# Install
flatpak install io.github.iSlammedMyKindle.godotGem
# run
io.github.iSlammedMyKindle.godotGem
- Please download the latest version in the releases page.
- On the computer you will be playing games on (host):
- You will need the ViGEm controller driver. Install that and move on to the next step
- download the
serverWindows.zip
. You can extract this anywhere and executeserver.exe
. Windows will ask to verify what networks this should work on. Select "Private Networks".
- On the machine you're sharing the controller with (guest), download the
client
.- If you are on Windows (
godotGemClientWindow.zip
), you are basically good, just run the exe and slect "private networks" on your first run - If you are on Linux (
godotGemClient.zip
), you should be fine as well; the binary can be launched by double clicking it on the file manager or running it via termianl.- If for some reason the binary doesn't run the first time, you will need to ensure it has
execute
permissions. In the terminal, you can do this by runningchmod +x /path/to/godotGemClient.x86_64
. - Alternatvely, Linux file managers also support changing the file to executable as well. (Right click -> properties -> permissions -> Make the file executable)
- If for some reason the binary doesn't run the first time, you will need to ensure it has
- On Linux, you can also add the program's directory directly to your
$PATH
environment varible so you can execute it without callind the path each time.
- If you are on Windows (
- On your Windows PC needing a controller, double-click
server.exe
- Launch command prompt or powershell, run
ipconfig
- Look for the connection you're using right now. under that you should see something like
IPV4 Address
, alongside a ip that may look like10.235.1.XXX
or192.168.1.XX
(these vary). Take note of this ip address
- Look for the connection you're using right now. under that you should see something like
- Open the client on the machine you're sharing the controller with. Type in the ip address you found in the command prompt. Click
Connect!
You're done! Enjoy your fancy new wired wireless controller / Steam deck controller interface!
- How to use the godotGem bridge - a way to send controller inputs outside the LAN
- How to use advanced haptics from the DualSense controller through the weird quirks of Linux
This work is licensed under a Creative Commons Attribution 4.0 International License.