Haply Inverse Service
The Inverse Service runs as a background process on your machine, connecting Haply haptic devices to your application in real time. It handles everything below your code: device detection, serial communication, safety monitoring, and state streaming — so you can focus on building the experience.
Requirements & Compatibility
The service runs on the major desktop platforms and can be driven from any language with a WebSocket client and a JSON parser:
- Platforms: Windows 10+ (MSVC), Linux (
.debpackage), macOS - Languages: Python, JavaScript / TypeScript, C++, C#, Rust, Go, Java, … anything that speaks WebSocket + JSON
Officially supported integrations
Haply maintains first-party integrations for the Haply Inverse Unity Package, Toia, Geomagic Freeform, and NVIDIA Isaac Lab.
Beyond those, the service is usable from any platform or runtime that ships a WebSocket client and a JSON parser — we've run it alongside Unreal Engine, TouchDesigner, and other real-time or simulation stacks. If your environment can open a WebSocket, it can drive an Inverse device.
For language-specific examples, see the public sample repositories: C++ and Python.
Communication Interfaces
The service exposes two communication channels:
| Channel | Port | Transport | Purpose |
|---|---|---|---|
| Simulation | 10001 | WebSocket | Real-time command / state loop (1 message in → 1 state out) |
| Events | 10020 | WebSocket (read-only) | System events: safety, battery, connection, rate warnings |
| HTTP | 10001 | REST | Stateless config queries, settings, session management, device inspection |
All payloads are JSON. See JSON Conventions for the standard envelope, ports, and content-type rules.
Use Cases
| Goal | Where to start |
|---|---|
| Send forces or position targets to a haptic device | Realtime Control |
| Configure basis, mount, preset, or filters | Session Configuration |
| Navigate a scene (rate-control locomotion) | Navigation Module |
| Listen to system events (safety, battery, connection) | Events & Monitoring |
| Learn by example | Tutorials |
Coordinate System
Haply's internal frame is right-handed, Z-up (+X right, +Y forward, +Z up). You can remap it to your application's frame with a single basis permutation — once set, all inputs and outputs are automatically converted.
Two transforms position the device in your scene:
- Mount — the physical offset of the device (set via a preset or explicitly)
- Workspace — a runtime drift for camera/scene navigation (set manually or via the Navigation module)
See Mount & Workspace for the full coordinate pipeline.
Running the Service
The Inverse Service can run in two modes:
- Embedded in the Haply Hub (recommended) — the Haply Hub bundles the latest service version and starts it automatically whenever the Hub is open. No manual setup; you always get the latest fixes.
- Standalone — install a specific service version as a Windows service or Unix daemon using the Inverse Installer. Useful for CI, headless deployments, or machines where the Hub isn't running.
Managing the standalone service
Windows — open the Services app: press Win+R, type services.msc, find "Haply Inverse Service", right-click → Start / Stop / Restart.
Linux (systemd):
systemctl start haply-inverse-service.service
systemctl stop haply-inverse-service.service
systemctl restart haply-inverse-service.service
systemctl enable haply-inverse-service.service # auto-start on boot
Full API Reference
For the complete machine-readable specification of every endpoint and message:
- HTTP API Reference (OpenAPI) — interactive Swagger UI
- Simulation API Reference (AsyncAPI) — interactive AsyncAPI viewer