Share USB devices across your LAN.
Plug a gamepad into a Raspberry Pi in the living room, use it from a Windows VM in the basement. Or a USB stick in the bedroom — wherever. JUP makes it a two-click operation.
Built on top of usbip, glued together with a Go agent, a Bun backend, and a tiny Vue UI.
How it works
Every machine runs the same Go agent, in one of two modes: server (exposes its USB devices) or client (can attach remote USB devices locally). A central backend coordinates which device goes where.
[RPi #1 — living room] [RPi #2 — bedroom]
agent (server mode) agent (server mode)
usbip-host usbip-host
USB devices USB devices
│ │
└──────────┐ ┌─────────────┘
│ │
[JUP backend]
(Bun + Vue UI)
│
┌──────────┼──────────┐
│ │
[agent client mode] [agent client mode]
gaming rig Windows VM
vhci-hcd usbipd-win
│ │
local USB devices local USB devices
Device detection is done via udev; when you plug something in,
the UI updates in real time. Clicking "Mount" sends a WebSocket
message to the target machine, which runs usbip attach
and the device shows up locally — as if it were plugged in there.
Install
Download the release for your platform, install it, edit the config, start the service.
Debian / Raspberry Pi OS arm64 · amd64
jup-agent_0.2.0_arm64.deb · jup-agent_0.2.0_amd64.deb
sudo apt install ./jup-agent_0.2.0_arm64.deb
sudo nano /etc/jup/config.yaml
sudo systemctl enable --now jup-agent
Fedora / RHEL amd64 · aarch64
jup-agent-0.2.0-1.x86_64.rpm · jup-agent-0.2.0-1.aarch64.rpm
sudo dnf install ./jup-agent-0.2.0-1.x86_64.rpm
sudo nano /etc/jup/config.yaml
sudo systemctl enable --now jup-agent
Windows 10 / 11 amd64
jup-agent-0.2.0-windows-amd64.zip
# Prerequisite for client mode: install usbip-win2
# (provides the Windows USB/IP driver + usbip.exe CLI).
Expand-Archive jup-agent-0.2.0-windows-amd64.zip
cd jup-agent-0.2.0-windows-amd64
# Open PowerShell as Administrator:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\install-service.ps1
notepad C:\ProgramData\jup\config.yaml
Start-Service jup-agent
Backend linux · amd64
jup-backend-linux-x64 · single binary, bundled Bun runtime
Running the backend
The backend is a single compiled binary (bundled Bun runtime). Run it in a container, a small VM, or on a Raspberry Pi — anywhere reachable by the agents on your LAN.
# one-file binary, ~100 MB, no runtime deps
JUP_PORT=3000 JUP_WEB_DIST=./web-dist ./jup-backend
Then open http://<backend>:3000/ in a browser.
No authentication in the MVP — don't expose this to the internet.
Why "janky"?
Started as a way to use a gamepad from a living-room Pi in a Windows gaming VM in the basement — which itself started as an attempt to play Subnautica in VR via ALVR on a Meta Quest 2 talking to an Intel Arc B570. As these things go.
It turns out usbip already solves the hard parts. JUP is just a coordinator that makes it nice to use.