sitos
A distributed parameter store for compute pipelines, powered by Eclipse zenoh.
sitos (σῖτος — Greek for grain) delivers typed parameters and look-up tables to distributed compute processes without timing bugs and without copies on the read hot path.
When to use sitos
sitos fits a pipeline where several processes on one host or a local network share configuration and look-up tables while a job runs:
- Values are typed:
bool,int64,double,string, andbytes. NumPy arrays are stored as bytes. - Keys are hierarchical (
recon/fov) and can be listed by prefix. - A Session is one compute run. It starts from a consistent snapshot of the shared base, and later base updates do not leak into it. Changes made during the run go to the Session's overlay and reach every process attached to it.
- Readers keep an in-process cache, so a read is a local lookup with no network round trip and no copy. Byte values can be read as zero-copy NumPy arrays.
- No external daemon is required. Processes find each other through Zenoh peer discovery.
- Plain Zenoh clients can read and write the same keys through the documented wire format.
sitos is not a replicated or consensus store such as etcd, and it is not a general-purpose database. Data lives in the storage engine of the StorageNode that serves the key space. The engine can be in-memory, RocksDB, or your own.
Status
sitos 0.1.0 is the first public release. Until 1.0, fixes ship in patch releases, and new features and breaking changes to the C++ or Python API ship in minor releases. Wire compatibility is broken only in a major release. The design is described in the architecture document and the ADRs.
Install
pip install sitos
The PyPI wheel is published for Linux x86_64 and CPython 3.12. It bundles the Zenoh runtime and the in-memory engine. CPython 3.12 is the only Python version supported today. For the C++ library, RocksDB, or Windows, build from source as described below.
Quickstart (Python)
The StorageNode, the writer, and the reader run as separate processes. Save the three scripts below
and run them in three terminals, in this order. They find each other on the local host without any
configuration through Zenoh multicast scouting. Where multicast is blocked, as in some containers
and corporate networks, pass a Zenoh configuration with explicit endpoints through
zenoh_config_json.
node.py serves the key space and opens the Session run1:
import sitos
with sitos.StorageNode(sitos.InMemoryEngine(), prefix="demo") as node:
node.create_session("run1")
input("Serving session 'run1'. Press Enter to stop.\n")
writer.py writes two values into the Session with ParamStore:
import sitos
with sitos.ParamStore(prefix="demo") as store:
store.put("session/run1", "recon/fov", 240.0) # returns once the node acknowledges it
store.put("session/run1", "recon/kernel", "sharp")
print(store.get("session/run1", "recon/fov"))
reader.py attaches a ParamCache to the Session and reads locally:
import sitos
with sitos.ParamCache(prefix="demo") as cache:
cache.attach("run1") # fetches the Session once
print(cache.get("recon/fov"), cache.get("recon/kernel")) # local reads, no round trip
writer.py prints 240.0, and reader.py prints 240.0 sharp. Use a different prefix to keep
independent deployments apart on the same network.
Core components
The architecture document describes the complete component model and lifecycle:
- StorageNode connects Zenoh queryables and subscribers to a storage engine and owns session snapshots and overlays.
- ParamStore is the client for remote put, get, list, delete, and batch operations.
- ParamCache attaches to a session and provides synchronized local reads, including zero-copy byte and NumPy views.
The Python API and C++ API documents cover the full surface, including acknowledged writes, subscriptions, fences, custom engines, and error types.
Build from source
CMake 3.20 or newer and a C++20 compiler are required. The development presets configure tests and the supported optional components for each platform.
Linux
cmake --preset dev-linux
cmake --build --preset dev-linux
ctest --preset dev-linux
Windows
Run these commands from a Visual Studio developer shell with Ninja available:
cmake --preset dev-windows
cmake --build --preset dev-windows
ctest --preset dev-windows
For an installable C++ package, configure the release preset, build it, and choose an install
prefix:
cmake --preset release
cmake --build --preset release
cmake --install build/release --prefix /opt/sitos
A local Python wheel can be built from the same source tree:
python -m build --wheel python --outdir dist
See build, test, and packaging for optional Zenoh and RocksDB configuration, installed CMake consumers, and repaired-wheel validation.
Examples
- C++ quickstart opens one transport, starts an in-memory StorageNode, submits values with ParamStore, creates a session, and reads them through ParamCache.
- Python quickstart runs the public Python APIs in isolated processes with bounded startup, observation, and cleanup.
These examples are executable acceptance tutorials rather than installed library artifacts. Follow the build document's example configuration before running them.
Documentation
- Overview and document map
- Requirements
- Architecture
- Wire protocol
- C++ API
- Python API
- Build, test, and packaging
- Issue roadmap
- Public contract registry
- Dependency policy
- ADR process
- Contributing
License
Apache-2.0. See LICENSE.
Metadata
Release files for sitos 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sitos-0.1.3-cp312-cp312-manylinux_2_28_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.28+ x86-64 | Details |
Release files / sitos-0.1.3-cp312-cp312-manylinux_2_28_x86_64.whl
| Download URL | sitos-0.1.3-cp312-cp312-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 6.6 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
c02e8dbf178bb850cb73456126b92f301790a6d2517bacea9bd7971fc884625b
|
|
BLAKE2b-256 checksum How to use checksums |
686abe80db1846af7369813cd3837a7c502a3c451917805938df75bfc8cb2ab1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency log