Skip to content

ResoniteIO

ResoniteIO — Resonite ⇄ Python

ResoniteIO is a bidirectional IPC bridge between Resonite and Python. A C# mod running inside the Resonite client (ResoniteIO, loaded via BepisLoader) and a Python package (resoio) talk to each other over gRPC on a Unix Domain Socket.

Linux only

ResoniteIO targets Resonite running on Linux through Steam Play (Proton). Windows is not supported. See Installation for details.

Design

Each Resonite capability is exposed as an independent, asynchronous modality stream, each carrying its own timestamps. There is no global clock or step() barrier, so any synchronization you need is done on the receiving side — and you can use any modality on its own, without the others.

  • Camera / Speaker — Resonite → Python (server-streaming): vision and audio out.
  • Microphone / Locomotion — Python → Resonite (client-streaming): voice in, movement.
  • Connection / Info / Grabber / Display / World / ContextMenu / Dash / Inventory / Cursor / Lifecycle — request/response (unary): liveness and server info, grabbing objects, reading the display, navigating worlds, driving the UI, and graceful shutdown.

Two-layer C# design

The C# side is split into two layers:

  • ResoniteIO.Core — a pure library with zero dependency on Resonite. It holds the gRPC server, the per-modality services, and the domain logic.
  • ResoniteIO — a thin BepInEx plugin that only does engine bridging (the FrooxEngine<Modality>Bridge adapters).

The dependency direction is strictly Core ← Mod. The Python client (resoio) is also Resonite-independent.

Where to go next

License

MIT.