A reliable, brokerless message bus for single-machine use. Processes publish named properties and subscribe to the domains they care about. Each process maintains a local cache — no central broker, no single point of failure.
Inspired by D-Bus, built on ZeroMQ.
sudo apt-get install -y pkg-config libzmq3-dev
cmake -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build build
ctest --test-dir build --output-on-failure| Document | Description |
|---|---|
| Concepts | Properties, domains, brokerless design, late-join, wire format |
| API Reference | Full API, memory ownership, usage example |
| Getting Started | Dependencies, build options, tests, environment variables |
| Tools | oste (monitor) and vecio (property setter) |
| Architecture | Internal design: discovery, dispatch, snapshot protocol, cache |
| Edge Cases | Known gotchas, limitations, and how to work around them |
| Dependency | Version | How |
|---|---|---|
| libzmq | 4.x | System package |
| msgpack-c | cpp-6.1.1 | CMake FetchContent |
| doctest | v2.4.11 | CMake FetchContent, tests only |
- Single machine only — IPC transport (
ipc://), not TCP - Single-threaded — all calls on a
bacaro_tinstance must happen from one thread (the event-loop thread). ZMQ sockets are not safe for concurrent use, andbacaro_getreturns interior pointers invalidated by the nextset/dispatch. If you need multi-threaded access, protect the instance with an external mutex. - Linux only — uses epoll and inotify for event dispatch and peer discovery
- No authentication — all processes on the machine are trusted
- No persistence — properties exist only in process memory; a full bus restart clears all state
MIT — Copyright 2026 Matteo Brichese
