Eclipse Zenoh: Zero Overhead Pub/Sub, Store/Query and Compute.
Zenoh (pronounced /zeno/) unifies data in motion, data at rest, and computations. It carefully blends traditional pub/sub with geo-distributed storage, queries, and computations, while retaining a level of time and space efficiency that is well beyond any of the mainstream stacks.
Check the website zenoh.io for more information and installation instructions.
See also the roadmap for more detailed technical information.
This repository contains the following elements:
-
zenoh Rust crate
This crate is the primary and reference implementation of the Zenoh protocol. The Zenoh libraries for other languages are bindings to this Rust implementation, except for the pure-C zenoh-pico (see the "Language Support" section below).
-
zenoh-ext Rust crate
This crate contains extended components of Zenoh:
AdvancedPublisher
/AdvancedSubscriber
- APIs for sending/receiving data with advanced delivery guarantees.- Data serialization support. This serialization is lightweight and universal for all
zenoh
bindings, which simplifies interoperability.
-
zenohd router binary
The Zenoh router is a standalone daemon used to support Zenoh network infrastructure.
-
The crates related to plugin support in
zenohd
. -
The internal crates used by
zenoh
. These crates are not intended to be imported directly, and their public APIs can be changed at any time. Stable APIs are provided byzenoh
andzenoh-ext
only. -
Zenoh usage examples. These examples have a double purpose: they not only demonstrate writing Zenoh applications in Rust but also serve as a set of tools for experimenting with and testing Zenoh functionality.
Install Cargo and Rust. If you already have the Rust toolchain installed, make sure it is up to date with:
rustup update
Zenoh can be successfully compiled with Rust stable (>= 1.75.0), but some of its dependencies may require
newer Rust versions. The zenoh
crate itself doesn't lock its dependencies with "=" to avoid conflicts.
Instead, we provide the zenoh-pinned-deps-1-75 crate
with zenoh
dependencies locked to Rust 1.75-compatible versions.
To build Zenoh, simply type the command below after having followed the previous instructions:
cargo build --release --all-targets
There are multiple features in zenoh
; see the full list and descriptions on docs.rs. For example, to
use shared memory, it must be explicitly enabled:
zenoh = {version = "1.5.1", features = ["shared-memory"]}
Examples can be executed with Cargo, or directly from target/release/examples
. When running with Cargo, use --
to pass command line arguments to the examples:
cargo run --example z_sub
cargo run --example z_pub
cargo run --example z_queryable
cargo run --example z_get
The zenohd router can be run with the command cargo run
or from target/release/zenohd
. When running with Cargo, use --
to pass command line arguments to zenohd
:
cargo run -- --config DEFAULT_CONFIG.json5
The router's purpose is to support Zenoh network infrastructure and provide additional services using plugins. See more details and a directory of available plugins in the zenohd readme.
- Rust - this repository
- C - there are two implementations with the same API:
- zenoh-c - Rust library binding
- zenoh-pico - pure C implementation
- C++ - zenoh-cpp - C++ wrapper over C libraries
- Python - zenoh-python
- Kotlin - zenoh-kotlin
- Java - zenoh-java
- TypeScript - zenoh-ts - WebSocket client for the plugin in zenohd
In case of trouble, please first check this page to see if the issue and its cause are already known. Otherwise, you can ask a question on the Zenoh Discord server, or create an issue.