Installation
VIIPER currently comes in a single flavor:
- a standalone executable that exposes an API over TCP.
- There will eventually be a shared-library version (libVIIPER) that you can link against directly from your application.
For more information, see FAQ
Requirements
VIIPER relies on USBIP.
You must have a USBIP-Client implementation available on your system to use VIIPER's virtual devices.
Windows
usbip-win2 is by far the most complete implementation of USBIP for Windows (comes with a SIGNED kernel mode driver).
Install and done 😉
USBIP-Win2 security issue
The releases of usbip-win2 currently (at the time of writing) install the publicly available test signing CA as a trusted root CA on your system.
You can safely remove this CA after installation using certmgr.msc (run as admin) and removing the "USBIP" from the "Trusted Root Certification Authorities" -> "Certificates" list.
Alternativly, you can download and istall the latest pre-release driver manually from the
OSSign repository, which has this issue fixed already.
Note that the installer does not work, only the driver .cat,.inf,.sys files.
Linux
Ubuntu/Debian
Arch Linux
Linux Kernel Module Setup
USBIP Client Requirement
USBIP requires the vhci-hcd (Virtual Host Controller Interface) kernel module on Linux for client operations. This includes VIIPER's auto-attach feature and manual device attachment.
Most Linux distributions include this module but don't load it automatically.
One-Time Setup
To load the module automatically on boot:
Manual Loading
To load the module for the current session only:
Verification
Check if the module is loaded:
Installing VIIPER
VIIPER does not require system-wide installation.
The viiper executable is completely self-contained (and fully portable without any dependencies, except USBIP) and can be:
- Placed in any directory
- Shipped alongside your application
- Run directly without installation
- Bundled with your application's distribution
This makes VIIPER ideal for embedding in applications or distributing as part of a software package.
Daemon/Service Conflicts
If VIIPER is already running as a system service or daemon on the target machine, be aware of potential port conflicts. Applications should:
- Check if VIIPER is already running before starting their own instance
- use the ping API endpoint to check for VIIPER presence and version
- Connect to the existing VIIPER instance (if accessible)
- Use a custom port via --api.addr flag to run a separate instance
Pre-built Binaries
Download the latest release from the GitHub Releases page. Pre-built binaries are available for:
- Windows (x64, ARM64)
- Linux (x64, ARM64)
Automated Install Script
Regardless of portability, it can be convenient to have VIIPER start automatically on system boot, especially if end users want to use your application through a network or you want to enable that possibility.
The following scripts will download a VIIPER release, install it to a system location, and configure it to start automatically on boot.
For Application Developers
The installation scripts are intended for end-users setting up a permanent VIIPER service on their system.
If you're developing an application that uses VIIPER, I strongly encourage you to not install a permanent VIIPER service on your users machines.
Instead, bundle the (no dependencies, portable) VIIPER binary with your application and start/stop the server directly from your application as needed.
You may need to check for existing VIIPER instances or use a custom port via --api.addr to avoid conflicts.
USBIP installed by scripts
The install scripts install and configure USBIP for you:
- Windows: installs the usbip-win2 driver (admin prompt) and prompts for a reboot when drivers were added.
- Linux: installs USBIP via the distro package manager (when available), loads
vhci_hcd, and configures it to autoload.
If the automated USBIP setup fails, follow the USBIP guide to finish manually.
Linux:
Installs to: /usr/local/bin/viiper
Windows (PowerShell):
Installs to: %LOCALAPPDATA%\VIIPER\viiper.exe
The scripts will:
- Download the specified VIIPER binary version
- Install it to the system location
- Install and configure USBIP (driver on Windows; packages/modules on Linux)
- Configure automatic startup (Registry RunKey on Windows, systemd service on Linux)
- Start/restart the VIIPER service
Version-Specific Installation:
The install scripts are version-aware based on where you download them from:
-
Latest stable release:
curl -fsSL https://alia5.github.io/VIIPER/stable/install.sh | sh -
Specific version (e.g., v0.2.2):
curl -fsSL https://alia5.github.io/VIIPER/0.2.2/install.sh | sh -
Latest pre-release (development snapshot):
curl -fsSL https://alia5.github.io/VIIPER/main/install.sh | sh
System Startup Configuration
The install and uninstall commands configure automatic startup for the VIIPER binary.
What These Commands Do
These commands do not copy or move the VIIPER binary. They configure your system to automatically run the binary from its current location when the system boots.
Make sure the binary is in a permanent location before running viiper install!
viiper install
Configures VIIPER to start automatically on system boot:
- Windows:
- Adds entry to Registry RunKey:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\VIIPER - Value:
"<current-exe-path>" server - Kills any previous autorun instances
-
Starts the server
-
Linux:
- Creates systemd service:
/etc/systemd/system/viiper.service - Service ExecStart points to current binary path
- Enables and starts the service
viiper uninstall
Removes VIIPER from system startup and stops any running instance:
- Windows:
- Removes Registry RunKey entry
-
Kills any running autorun instances
-
Linux:
- Stops and disables the systemd service
- Removes
/etc/systemd/system/viiper.service
Building from Source
Building from source is only necessary if you need to modify VIIPER or target an unsupported platform.
Prerequisites
- Go 1.25 or newer
- USBIP installed
- (Optional) Make
- Linux/macOS: Usually pre-installed
- Windows:
winget install ezwinports.make
Build Steps
The compiled binary will be in dist/viiper (or dist/viiper.exe on Windows).
Additional build targets: