Spud solves the problem of wanting to play games on a computer attached your TV, from a laptop on your couch. It's a cross-platform remote control application that sends local input to a remote server, and is optimised for gaming. Input is as responsive as possible, and protocol parameters are tunable for latency and reliability. As it's intended to be used in a situation where you can already see the output from the server on another device, it doesn't accept video or sound output from the server.
Why use Spud?
So you got yourself a wee gaming rig for your TV, but you don't have a controller or you prefer keyboard/mouse. Spud's got you: run the server on your gaming machine, and the client on your laptop, and voilà! You can now game on your big TV and impressive sound system from the comfort of your couch, without wires!
Spud is optimised for gaming, and is easy to set up. It's also open-source, so if something is broken or there's a feature you'd like to implement, you're very welcome to contribute.
Why not use something else?
There already exist tools that solve similar problems to Spud, so why not use them instead?
- Synergy is a great tool for remote control, but its latency makes it unsuitable for gaming.
- Parsec is fantastically optimised and easy to set up, but it's too heavyweight when you don't need video sent back to the controlling device.
- Moonlight/Sunlight are brilliant projects, but can be difficult to set up and don't support input-only mode.
- Lan Mouse is a very similar project to this, but is less optimised.
Features
- Simple UI
- Cross-platform
- Low latency input streaming
- Input capture toggling by hotkey
- Relative or absolute pointer movement
- LAN discovery
- Optional local screen blanking on input capture
- Tolerance of poor network conditions
- Optional password protection and encryption
- Tunable performance and reliability settings
Supported platforms
- Linux
- X11
- Tested on Gnome and KDE
- Wayland
- Tested on Gnome, KDE, and COSMIC
- X11
- macOS
- Tested on Tahoe (version 26)
- Windows 11
- Tested on version 25H2
Install
Linux
A .deb package is built by CI and can be downloaded from GitHub Actions artifacts or the releases page:
sudo dpkg -i spud_1.0.0_amd64.deb
Alternatively, a raw binary is available from the same sources. Put it wherever your system expects to find binaries.
On Linux, the server can inject input events via a privileged helper that
runs through pkexec. To start the server without having to enter your
password (eg if starting on boot), install the polkit rule:
sudo install -Dm644 linux/50-spud-injection.pkla \
/etc/polkit-1/localauthority/50-local.d/50-spud-injection.pklaOr run the provided install script which also builds and installs the binary and desktop entry:
./scripts/install-linux.sh
macOS
A universal .app bundle is built by CI and can be downloaded from GitHub Actions artifacts or the releases page.
On macOS, fullscreen/hotkey input capture requires Accessibility permission (and Input Monitoring permission on macOS 10.15+). The app will prompt you to enable these in System Settings when you first attempt to capture input. Server-side input injection does not require special permissions.
Windows
An .msi installer is built by CI and can be downloaded from GitHub Actions artifacts or the releases page.
Run the installer and launch Spud from the Start Menu.
Build
You can build this project using:
Then run using:
Packaging
Install cargo-bundle and build platform packages:
cargo install cargo-bundle # Linux cargo bundle --format deb --release # macOS cargo bundle --format osx --release # Windows cargo bundle --format msi --release
Troubleshooting
Spud doesn't receive input after reinstalling or building from source on macOS
There are two likely causes:
- The
com.apple.quarantinexattr is set. This triggers App Translocation, which changes Spud's code signature each time it's run, which in-turn invalidates its security grants. Remove this xattr with this terminal command:
xattr -d com.apple.quarantine /Applications/Spud.app
- The TCC code signature hash for the Accessibility permission is out of date.
Remove Spud from
Settings -> Privacy & Security -> Accessibilitythen re-add it.
Screenshots
Client
Server
Contribute
Please feel free to open issues, create PRs, and fork this project!
License
This project is distributed under the GPL-3.0 license.

