Installation
VIIPER comes in two distinct flavors:
- VIIPER Server
A self-contained, portable, standalone executable providing a lightweight TCP-based API for feeder application development.
All client libraries are MIT licensed. - libVIIPER
a single shared library that lets you emulate devices using USBIP directly from within your application. Requires your application to be GPL-3.0 licensed.
Regardless of the flavour you choose, VIIPER requires USBIP.
Requirements
USBIP
VIIPER relies on USBIP. You must have a USBIP-Client implementation available on your system to use VIIPER's virtual devices.
VIIPERs installation will install the necessary USBIP components/driver for you.
It is only listed here for informational purposes.
usbip-win2 is by far the most complete implementation of USBIP for Windows (comes with a SIGNED kernel mode driver).
Install and done 😉
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 do not 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
A standalone executable that exposes an API over TCP.
Installing VIIPER
VIIPER does not require system-wide installation.
The viiper executable is completely self-contained (fully portable, no dependencies except USBIP) and can be:
- Placed in any directory
- Shipped alongside your application
- Run directly without installation
- Bundled with your application's distribution
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
Disabling Auto-Update Notifications
VIIPER comes with an inbuilt auto updater.
If you decide to ship VIIPER portably, as opposed to installing it system-wide, you might want to disable auto-update notifications to avoid unexpected prompts.
To disable auto-update notifications, use the --update-notify=none flag, set the VIIPER_UPDATE_NOTIFY environment variable to none, or configure this option in VIIPER's configuration file.
Linux Permissions
On Linux, attaching devices via USBIP requires root permissions.
You can run VIIPER with sudo, or configure appropriate udev rules to allow non-root users to attach devices.
Pre-built Binaries
Download the latest release from the GitHub Releases page. Pre-built binaries are available for:
- Windows (x64, ARM64)
- Linux (x64, ARM64)
Installer
The VIIPER executable is its own installer.
Run the release binary and you will be prompted to install VIIPER or run the sever portably.
Double-click viiper-windows-x64.exe and choose Install/Update VIIPER, or run:
- Update to the latest release: checks GitHub and installs the newest release instead of the binary you ran
- Autostart: starts the server when you log in
- Start menu shortcut / Desktop shortcut
- Install USBIP: downloads and runs the usbip-win2 installer when it is missing or outdated (asks for administrator rights; usbip-win2 asks for a reboot)
- Start the server now
Installs to %LOCALAPPDATA%\VIIPER\viiper.exe by default and registers VIIPER in Apps & Features, where it can be modified or uninstalled.
Unattended install, for scripts and package managers (defaults for every choice, no output):
Installs to: %LOCALAPPDATA%\VIIPER\viiper.exe
--no-updatedisables the auto-update upon install- USBIP is installed without its wizard; a reboot may be required
Uninstall from Apps & Features or with:
- Update to the latest release: checks GitHub and installs the newest release instead of the binary you ran
- Add systemd service / Enable service
- Install USBIP: installs the distribution package (pacman, apt or dnf), loads
vhci_hcdand configures it to autoload - Start the server now
Installs to /usr/local/bin/viiper by default.
Unattended install (defaults for every choice, no output):
Uninstall with:
Manual installation
For package maintainers, or if you prefer not to use the built-in installer.
This is what the installer does:
-
Copy the binary and the bundled licenses:
-
Install USBIP and load
vhci_hcdon boot (see USBIP above): -
Create
/etc/systemd/system/viiper.service: -
Enable and start it:
To remove: stop and disable the service, delete the unit file, /etc/modules-load.d/viiper.conf, the binary and licenses.txt.
To disable VIIPERs auto-update notifications, you can use the --update-notify=none flag
or set the VIIPER_UPDATE_NOTIFY environment variable to none
or place this option in VIIPERs configuration file.
One-line install
Downloads the release binary and runs install --quiet.
libVIIPER is a shared library (libVIIPER.dll on Windows, libVIIPER.so on Linux) that you link against directly from your application, eliminating the need for a separate VIIPER server process.
License
Linking against libVIIPER requires your application to be licensed under the GPL-3.0 (or a compatible license). If you cannot comply with the GPL-3.0, use the standalone executable and the TCP API instead. All client libraries are MIT licensed.
Pre-built Binaries
Download the latest libVIIPER release artifact from the GitHub Releases page.
The archive contains:
libVIIPER.dll/libVIIPER.so: the shared librarylibVIIPER.h: the C headerlibVIIPER.def: Windows import definition (for generating.lib/.dll.aimport libraries)
Building from Source
The output will be in dist/libVIIPER/.
CGO Required
Building libVIIPER requires CGO (CGO_ENABLED=1) and a C compiler (GCC / MSVC / Clang) in PATH.
On Windows, llvm-mingw is recommended.
See libVIIPER documentation for integration guides and examples.