Package: zenoh
Version: 1.7.1
Architecture: armel
Maintainer: zenoh-dev@eclipse.org
Installed-Size: 34
Depends: zenoh-plugin-rest (=1.7.1), zenoh-plugin-storage-manager (=1.7.1), zenohd (=1.7.1)
Filename: 1.7.1/zenoh_1.7.1_armel.deb
Size: 12486
MD5sum: e6d8b5e5723d7e53487b823ba609c496
SHA1: 676d68db8f1c7f832066d85cdc007bd3daa17a55
SHA256: ae638836f7c71c546d3a23013352dbe6aab4ae64028d15ecd4a9beafd927afad
Section: net
Priority: optional
Homepage: http://zenoh.io
Description: Zenoh: The Zero Overhead Pub/Sub/Query Protocol.
 <img
 src="https://raw.githubusercontent.com/eclipse-zenoh/zenoh/master/zenoh-dragon.png"
 height="150">
 .
 # Eclipse Zenoh
 .
 Eclipse Zenoh: Zero Overhead Pub/Sub, Store/Query and Compute.
 .
 Zenoh (pronounce _/zeno/_) unifies data in motion, data at rest and
 computations. It carefully blends traditional pub/sub with geo-distributed
 storages, 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](http://zenoh.io) for more information and
 [installation
 instructions](https://zenoh.io/docs/getting-started/installation/)
 .
 See also the [roadmap](https://github.com/eclipse-zenoh/roadmap) for more
 detailed technical information.
 .
 # Zenoh Rust API
 .
 The crate `zenoh` provides the main implementation of the Zenoh network
 protocol in Rust and the [API](https://docs.rs/zenoh/latest/zenoh/) to use it.
 .
 The primary features of Zenoh are
 .
 * Arbitrary network topology support
 * Publish-subscribe and query-reply paradigms
 * Support for a great variety of underlying network protocols
 * Hierarchical keys with glob support (key expressions)
 * Zero-copy data buffers
 * Scouting for nodes in the network
 * Monitor data availability (liveliness)
 * Monitor the interest to published data (matching)
 * Shared memory support
 * Compact and efficient platform-independent data serialization and
 deserialization (in [zenoh-ext](../zenoh-ext))
 * Components for reliable data publishing with retransmissions
 (AdvancedSubscriber in [zenoh-ext](../zenoh-ext))
 .
 # Usage Examples
 .
 ## Publish and subscribe
 .
 Publishing data:
 .
 ```rust
 #[tokio::main]
 async fn main() {
     let session = zenoh::open(zenoh::Config::default()).await.unwrap();
     session.put("key/expression", "value").await.unwrap();
     session.close().await.unwrap();
 }
 ```
 .
 Subscribing to data:
 .
 ```rust
 use futures::prelude::*;
 #[tokio::main]
 async fn main() {
     let session = zenoh::open(zenoh::Config::default()).await.unwrap();
     let subscriber =
 session.declare_subscriber("key/expression").await.unwrap();
     while let Ok(sample) = subscriber.recv_async().await {
         println!("Received: {:?}", sample);
     };
 }
 ```
 .
 ## Query and reply
 .
 Declare a queryable:
 .
 ```rust
 #[tokio::main]
 async fn main() {
     let session = zenoh::open(zenoh::Config::default()).await.unwrap();
     let queryable = session.declare_queryable("key/expression").await.unwrap();
     while let Ok(query) = queryable.recv_async().await {
         query.reply("key/expression", "value").await.unwrap();
     }
 }
 ```
 .
 Request data:
 .
 ```rust
 use futures::prelude::*;
 #[tokio::main]
 async fn main() {
     let session = zenoh::open(zenoh::Config::default()).await.unwrap();
     let replies = session.get("key/expression").await.unwrap();
     while let Ok(reply) = replies.recv_async().await {
         println!(">> Received {:?}", reply.result());
     }
 }
 ```
 .
 # Rust 1.75 support
 .
 The crate `zenoh` can be compiled with Rust 1.75.0, but some of its
 dependencies may require higher Rust versions.
 To compile `zenoh` with Rust 1.75, add a dependency on the crate
 [zenoh-pinned-deps-1-75](http://crates.io/crates/zenoh-pinned-deps-1-75) to
 your `Cargo.toml`:
 .
 ```toml
 zenoh = "1.5.1"
 zenoh-pinned-deps-1-75 = "1.5.1"
 ```
 .
 # Documentation and examples
 .
 For more information, see its documentation: <https://docs.rs/zenoh>
 and some examples of usage in
 <https://github.com/eclipse-zenoh/zenoh/tree/main/examples>

Package: zenoh
Version: 1.7.1
Architecture: amd64
Maintainer: zenoh-dev@eclipse.org
Installed-Size: 34
Depends: zenoh-plugin-rest (=1.7.1), zenoh-plugin-storage-manager (=1.7.1), zenohd (=1.7.1)
Filename: 1.7.1/zenoh_1.7.1_amd64.deb
Size: 12490
MD5sum: d5c40969233a6760b175468f1fd304b0
SHA1: ca0ecc91a95f1dc64cc96e3796ad6248c7716c05
SHA256: d61516791490561a86cef6f4f6e2b6af295e358ce4e90ecb9c2b99d097f5820d
Section: net
Priority: optional
Homepage: http://zenoh.io
Description: Zenoh: The Zero Overhead Pub/Sub/Query Protocol.
 <img
 src="https://raw.githubusercontent.com/eclipse-zenoh/zenoh/master/zenoh-dragon.png"
 height="150">
 .
 # Eclipse Zenoh
 .
 Eclipse Zenoh: Zero Overhead Pub/Sub, Store/Query and Compute.
 .
 Zenoh (pronounce _/zeno/_) unifies data in motion, data at rest and
 computations. It carefully blends traditional pub/sub with geo-distributed
 storages, 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](http://zenoh.io) for more information and
 [installation
 instructions](https://zenoh.io/docs/getting-started/installation/)
 .
 See also the [roadmap](https://github.com/eclipse-zenoh/roadmap) for more
 detailed technical information.
 .
 # Zenoh Rust API
 .
 The crate `zenoh` provides the main implementation of the Zenoh network
 protocol in Rust and the [API](https://docs.rs/zenoh/latest/zenoh/) to use it.
 .
 The primary features of Zenoh are
 .
 * Arbitrary network topology support
 * Publish-subscribe and query-reply paradigms
 * Support for a great variety of underlying network protocols
 * Hierarchical keys with glob support (key expressions)
 * Zero-copy data buffers
 * Scouting for nodes in the network
 * Monitor data availability (liveliness)
 * Monitor the interest to published data (matching)
 * Shared memory support
 * Compact and efficient platform-independent data serialization and
 deserialization (in [zenoh-ext](../zenoh-ext))
 * Components for reliable data publishing with retransmissions
 (AdvancedSubscriber in [zenoh-ext](../zenoh-ext))
 .
 # Usage Examples
 .
 ## Publish and subscribe
 .
 Publishing data:
 .
 ```rust
 #[tokio::main]
 async fn main() {
     let session = zenoh::open(zenoh::Config::default()).await.unwrap();
     session.put("key/expression", "value").await.unwrap();
     session.close().await.unwrap();
 }
 ```
 .
 Subscribing to data:
 .
 ```rust
 use futures::prelude::*;
 #[tokio::main]
 async fn main() {
     let session = zenoh::open(zenoh::Config::default()).await.unwrap();
     let subscriber =
 session.declare_subscriber("key/expression").await.unwrap();
     while let Ok(sample) = subscriber.recv_async().await {
         println!("Received: {:?}", sample);
     };
 }
 ```
 .
 ## Query and reply
 .
 Declare a queryable:
 .
 ```rust
 #[tokio::main]
 async fn main() {
     let session = zenoh::open(zenoh::Config::default()).await.unwrap();
     let queryable = session.declare_queryable("key/expression").await.unwrap();
     while let Ok(query) = queryable.recv_async().await {
         query.reply("key/expression", "value").await.unwrap();
     }
 }
 ```
 .
 Request data:
 .
 ```rust
 use futures::prelude::*;
 #[tokio::main]
 async fn main() {
     let session = zenoh::open(zenoh::Config::default()).await.unwrap();
     let replies = session.get("key/expression").await.unwrap();
     while let Ok(reply) = replies.recv_async().await {
         println!(">> Received {:?}", reply.result());
     }
 }
 ```
 .
 # Rust 1.75 support
 .
 The crate `zenoh` can be compiled with Rust 1.75.0, but some of its
 dependencies may require higher Rust versions.
 To compile `zenoh` with Rust 1.75, add a dependency on the crate
 [zenoh-pinned-deps-1-75](http://crates.io/crates/zenoh-pinned-deps-1-75) to
 your `Cargo.toml`:
 .
 ```toml
 zenoh = "1.5.1"
 zenoh-pinned-deps-1-75 = "1.5.1"
 ```
 .
 # Documentation and examples
 .
 For more information, see its documentation: <https://docs.rs/zenoh>
 and some examples of usage in
 <https://github.com/eclipse-zenoh/zenoh/tree/main/examples>

Package: zenoh
Version: 1.7.1
Architecture: armhf
Maintainer: zenoh-dev@eclipse.org
Installed-Size: 34
Depends: zenoh-plugin-rest (=1.7.1), zenoh-plugin-storage-manager (=1.7.1), zenohd (=1.7.1)
Filename: 1.7.1/zenoh_1.7.1_armhf.deb
Size: 12486
MD5sum: 7bbee0cc43e47d77516d63eb2adb63c1
SHA1: 6e17f8d2d580ea33e5fc5a665a03cd265bac5a70
SHA256: d1c789cd5ec444596dae67f4b1ba9210d21288d749fe3d7cc5b27f07c8dd9782
Section: net
Priority: optional
Homepage: http://zenoh.io
Description: Zenoh: The Zero Overhead Pub/Sub/Query Protocol.
 <img
 src="https://raw.githubusercontent.com/eclipse-zenoh/zenoh/master/zenoh-dragon.png"
 height="150">
 .
 # Eclipse Zenoh
 .
 Eclipse Zenoh: Zero Overhead Pub/Sub, Store/Query and Compute.
 .
 Zenoh (pronounce _/zeno/_) unifies data in motion, data at rest and
 computations. It carefully blends traditional pub/sub with geo-distributed
 storages, 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](http://zenoh.io) for more information and
 [installation
 instructions](https://zenoh.io/docs/getting-started/installation/)
 .
 See also the [roadmap](https://github.com/eclipse-zenoh/roadmap) for more
 detailed technical information.
 .
 # Zenoh Rust API
 .
 The crate `zenoh` provides the main implementation of the Zenoh network
 protocol in Rust and the [API](https://docs.rs/zenoh/latest/zenoh/) to use it.
 .
 The primary features of Zenoh are
 .
 * Arbitrary network topology support
 * Publish-subscribe and query-reply paradigms
 * Support for a great variety of underlying network protocols
 * Hierarchical keys with glob support (key expressions)
 * Zero-copy data buffers
 * Scouting for nodes in the network
 * Monitor data availability (liveliness)
 * Monitor the interest to published data (matching)
 * Shared memory support
 * Compact and efficient platform-independent data serialization and
 deserialization (in [zenoh-ext](../zenoh-ext))
 * Components for reliable data publishing with retransmissions
 (AdvancedSubscriber in [zenoh-ext](../zenoh-ext))
 .
 # Usage Examples
 .
 ## Publish and subscribe
 .
 Publishing data:
 .
 ```rust
 #[tokio::main]
 async fn main() {
     let session = zenoh::open(zenoh::Config::default()).await.unwrap();
     session.put("key/expression", "value").await.unwrap();
     session.close().await.unwrap();
 }
 ```
 .
 Subscribing to data:
 .
 ```rust
 use futures::prelude::*;
 #[tokio::main]
 async fn main() {
     let session = zenoh::open(zenoh::Config::default()).await.unwrap();
     let subscriber =
 session.declare_subscriber("key/expression").await.unwrap();
     while let Ok(sample) = subscriber.recv_async().await {
         println!("Received: {:?}", sample);
     };
 }
 ```
 .
 ## Query and reply
 .
 Declare a queryable:
 .
 ```rust
 #[tokio::main]
 async fn main() {
     let session = zenoh::open(zenoh::Config::default()).await.unwrap();
     let queryable = session.declare_queryable("key/expression").await.unwrap();
     while let Ok(query) = queryable.recv_async().await {
         query.reply("key/expression", "value").await.unwrap();
     }
 }
 ```
 .
 Request data:
 .
 ```rust
 use futures::prelude::*;
 #[tokio::main]
 async fn main() {
     let session = zenoh::open(zenoh::Config::default()).await.unwrap();
     let replies = session.get("key/expression").await.unwrap();
     while let Ok(reply) = replies.recv_async().await {
         println!(">> Received {:?}", reply.result());
     }
 }
 ```
 .
 # Rust 1.75 support
 .
 The crate `zenoh` can be compiled with Rust 1.75.0, but some of its
 dependencies may require higher Rust versions.
 To compile `zenoh` with Rust 1.75, add a dependency on the crate
 [zenoh-pinned-deps-1-75](http://crates.io/crates/zenoh-pinned-deps-1-75) to
 your `Cargo.toml`:
 .
 ```toml
 zenoh = "1.5.1"
 zenoh-pinned-deps-1-75 = "1.5.1"
 ```
 .
 # Documentation and examples
 .
 For more information, see its documentation: <https://docs.rs/zenoh>
 and some examples of usage in
 <https://github.com/eclipse-zenoh/zenoh/tree/main/examples>

Package: zenoh
Version: 1.7.1
Architecture: arm64
Maintainer: zenoh-dev@eclipse.org
Installed-Size: 34
Depends: zenoh-plugin-rest (=1.7.1), zenoh-plugin-storage-manager (=1.7.1), zenohd (=1.7.1)
Filename: 1.7.1/zenoh_1.7.1_arm64.deb
Size: 12490
MD5sum: dcd70d3612f8a6029f538b5337399991
SHA1: 0744d287b3f723f4643f801cb988517e3f6402ae
SHA256: cc8865e71f084f31d97338622d83fe9e96846851f9688b92a82286c4493b131d
Section: net
Priority: optional
Homepage: http://zenoh.io
Description: Zenoh: The Zero Overhead Pub/Sub/Query Protocol.
 <img
 src="https://raw.githubusercontent.com/eclipse-zenoh/zenoh/master/zenoh-dragon.png"
 height="150">
 .
 # Eclipse Zenoh
 .
 Eclipse Zenoh: Zero Overhead Pub/Sub, Store/Query and Compute.
 .
 Zenoh (pronounce _/zeno/_) unifies data in motion, data at rest and
 computations. It carefully blends traditional pub/sub with geo-distributed
 storages, 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](http://zenoh.io) for more information and
 [installation
 instructions](https://zenoh.io/docs/getting-started/installation/)
 .
 See also the [roadmap](https://github.com/eclipse-zenoh/roadmap) for more
 detailed technical information.
 .
 # Zenoh Rust API
 .
 The crate `zenoh` provides the main implementation of the Zenoh network
 protocol in Rust and the [API](https://docs.rs/zenoh/latest/zenoh/) to use it.
 .
 The primary features of Zenoh are
 .
 * Arbitrary network topology support
 * Publish-subscribe and query-reply paradigms
 * Support for a great variety of underlying network protocols
 * Hierarchical keys with glob support (key expressions)
 * Zero-copy data buffers
 * Scouting for nodes in the network
 * Monitor data availability (liveliness)
 * Monitor the interest to published data (matching)
 * Shared memory support
 * Compact and efficient platform-independent data serialization and
 deserialization (in [zenoh-ext](../zenoh-ext))
 * Components for reliable data publishing with retransmissions
 (AdvancedSubscriber in [zenoh-ext](../zenoh-ext))
 .
 # Usage Examples
 .
 ## Publish and subscribe
 .
 Publishing data:
 .
 ```rust
 #[tokio::main]
 async fn main() {
     let session = zenoh::open(zenoh::Config::default()).await.unwrap();
     session.put("key/expression", "value").await.unwrap();
     session.close().await.unwrap();
 }
 ```
 .
 Subscribing to data:
 .
 ```rust
 use futures::prelude::*;
 #[tokio::main]
 async fn main() {
     let session = zenoh::open(zenoh::Config::default()).await.unwrap();
     let subscriber =
 session.declare_subscriber("key/expression").await.unwrap();
     while let Ok(sample) = subscriber.recv_async().await {
         println!("Received: {:?}", sample);
     };
 }
 ```
 .
 ## Query and reply
 .
 Declare a queryable:
 .
 ```rust
 #[tokio::main]
 async fn main() {
     let session = zenoh::open(zenoh::Config::default()).await.unwrap();
     let queryable = session.declare_queryable("key/expression").await.unwrap();
     while let Ok(query) = queryable.recv_async().await {
         query.reply("key/expression", "value").await.unwrap();
     }
 }
 ```
 .
 Request data:
 .
 ```rust
 use futures::prelude::*;
 #[tokio::main]
 async fn main() {
     let session = zenoh::open(zenoh::Config::default()).await.unwrap();
     let replies = session.get("key/expression").await.unwrap();
     while let Ok(reply) = replies.recv_async().await {
         println!(">> Received {:?}", reply.result());
     }
 }
 ```
 .
 # Rust 1.75 support
 .
 The crate `zenoh` can be compiled with Rust 1.75.0, but some of its
 dependencies may require higher Rust versions.
 To compile `zenoh` with Rust 1.75, add a dependency on the crate
 [zenoh-pinned-deps-1-75](http://crates.io/crates/zenoh-pinned-deps-1-75) to
 your `Cargo.toml`:
 .
 ```toml
 zenoh = "1.5.1"
 zenoh-pinned-deps-1-75 = "1.5.1"
 ```
 .
 # Documentation and examples
 .
 For more information, see its documentation: <https://docs.rs/zenoh>
 and some examples of usage in
 <https://github.com/eclipse-zenoh/zenoh/tree/main/examples>

Package: zenoh-plugin-rest
Version: 1.7.1
Architecture: armhf
Maintainer: zenoh-dev@eclipse.org
Installed-Size: 3520
Depends: zenohd (=1.7.1)
Filename: 1.7.1/zenoh-plugin-rest_1.7.1_armhf.deb
Size: 1045658
MD5sum: a1d8d85b55c58f5458701ab35d9f0545
SHA1: 663e9cbd0454276597d614dd95589e2a56b13080
SHA256: 25837ee42f6cede57ff0461ed1ebdb0cbb945f6037ca9a3717261e7b87c04e8e
Section: net
Priority: optional
Homepage: http://zenoh.io
Description: The zenoh REST plugin
 <img
 src="https://raw.githubusercontent.com/eclipse-zenoh/zenoh/master/zenoh-dragon.png"
 height="150">
 .
 [![CI](https://github.com/eclipse-zenoh/zenoh/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/eclipse-zenoh/zenoh/actions?query=workflow%3ACI+branch%3Amain++)
 [![Documentation
 Status](https://readthedocs.org/projects/zenoh-rust/badge/?version=latest)](https://zenoh-rust.readthedocs.io/en/latest/?badge=latest)
 [![codecov](https://codecov.io/github/eclipse-zenoh/zenoh/branch/main/graph/badge.svg?token=F8T4C8WPZD)](https://codecov.io/github/eclipse-zenoh/zenoh)
 [![Discussion](https://img.shields.io/badge/discussion-on%20github-blue)](https://github.com/eclipse-zenoh/roadmap/discussions)
 [![Discord](https://img.shields.io/badge/chat-on%20discord-blue)](https://discord.gg/2GJ958VuHs)
 [![License](https://img.shields.io/badge/License-EPL%202.0-blue)](https://choosealicense.com/licenses/epl-2.0/)
 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
 .
 # Eclipse Zenoh
 .
 The Eclipse Zenoh: Zero Overhead Pub/Sub, Store/Query and Compute.
 .
 Zenoh (pronounce _/zeno/_) unifies data in motion, data at rest and
 computations. It carefully blends traditional pub/sub with geo-distributed
 storages, 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](http://zenoh.io) for more information and
 [installation
 instructions](https://zenoh.io/docs/getting-started/installation/).
 .
 See also the [roadmap](https://github.com/eclipse-zenoh/roadmap) for more
 detailed technical information.
 .
 # REST Plugin for `zenohd` router
 .
 The plugin exposes a [REST API](https://zenoh.io/docs/apis/rest/) in
 [zenohd](https://crates.io/crates/zenohd).
 The `zenohd` links this plugin statically, it's not necessary to install it. To
 activate the REST plugin
 the CLI argument `--rest-http-port=<port>` should be passed to `zenohd`.
 .
 The port can also be configured in the plugin configuration in the `plugins`
 section
 of the [config.json](https://docs.rs/zenoh/latest/zenoh/struct.Config.html).
 .
 ```json
 "plugins": {
   "rest": {
     "http_port": 8000,
   }
 }
 ```
 .
 This plugin translates `PUT` and `DELETE` REST operations into the pub/sub API
 and `GET` operations to the query/reply API.
 .
 For example:
 .
 ```bash
 cargo run -- --config DEFAULT_CONFIG.json5 --rest-http-port 8000
 ```
 .
 ```bash
 cargo run --example z_sub -- -k foo/bar
 ```
 .
 ```bash
 curl -X PUT -d '"Hello World!"' http://localhost:8080/foo/bar
 ```
 .
 The subscriber in `z_sub` example prints
 .
 ```bash
 >> [Subscriber] Received PUT ('foo/bar': '"Hello World!"')
 ```
 .
 ```bash
 cargo run --example z_queryable -- -k foo/bar
 ```
 .
 ```bash
 curl http://localhost:8080/foo/bar
 ```
 .
 The queryable `z_get` prints
 .
 ```bash
 >> [Queryable ] Received Query 'foo/bar'
 >> [Queryable ] Responding ('foo/bar': 'Queryable from Rust!')
 ```
 .
 and `curl` prints
 .
 ```bash
 [{"key":"foo/bar","value":"UXVlcnlhYmxlIGZyb20gUnVzdCE=","encoding":"zenoh/bytes","timestamp":null}]
 ```
 .
 See also examples of using REST API for storages in the
 [zenoh-plugin-storage-manager](https://crates.io/crates/zenoh-plugin-storage-manager).

Package: zenoh-plugin-rest
Version: 1.7.1
Architecture: armel
Maintainer: zenoh-dev@eclipse.org
Installed-Size: 3593
Depends: zenohd (=1.7.1)
Filename: 1.7.1/zenoh-plugin-rest_1.7.1_armel.deb
Size: 1054314
MD5sum: d57aee9d7619bbd8d4e7de5671b9264a
SHA1: 3f1547de1112d73034438a12a3454a8cc028f9f8
SHA256: f3168927cfa5cdb1e477fe56226a9459383aa79cfe801018e41e036284cbd53a
Section: net
Priority: optional
Homepage: http://zenoh.io
Description: The zenoh REST plugin
 <img
 src="https://raw.githubusercontent.com/eclipse-zenoh/zenoh/master/zenoh-dragon.png"
 height="150">
 .
 [![CI](https://github.com/eclipse-zenoh/zenoh/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/eclipse-zenoh/zenoh/actions?query=workflow%3ACI+branch%3Amain++)
 [![Documentation
 Status](https://readthedocs.org/projects/zenoh-rust/badge/?version=latest)](https://zenoh-rust.readthedocs.io/en/latest/?badge=latest)
 [![codecov](https://codecov.io/github/eclipse-zenoh/zenoh/branch/main/graph/badge.svg?token=F8T4C8WPZD)](https://codecov.io/github/eclipse-zenoh/zenoh)
 [![Discussion](https://img.shields.io/badge/discussion-on%20github-blue)](https://github.com/eclipse-zenoh/roadmap/discussions)
 [![Discord](https://img.shields.io/badge/chat-on%20discord-blue)](https://discord.gg/2GJ958VuHs)
 [![License](https://img.shields.io/badge/License-EPL%202.0-blue)](https://choosealicense.com/licenses/epl-2.0/)
 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
 .
 # Eclipse Zenoh
 .
 The Eclipse Zenoh: Zero Overhead Pub/Sub, Store/Query and Compute.
 .
 Zenoh (pronounce _/zeno/_) unifies data in motion, data at rest and
 computations. It carefully blends traditional pub/sub with geo-distributed
 storages, 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](http://zenoh.io) for more information and
 [installation
 instructions](https://zenoh.io/docs/getting-started/installation/).
 .
 See also the [roadmap](https://github.com/eclipse-zenoh/roadmap) for more
 detailed technical information.
 .
 # REST Plugin for `zenohd` router
 .
 The plugin exposes a [REST API](https://zenoh.io/docs/apis/rest/) in
 [zenohd](https://crates.io/crates/zenohd).
 The `zenohd` links this plugin statically, it's not necessary to install it. To
 activate the REST plugin
 the CLI argument `--rest-http-port=<port>` should be passed to `zenohd`.
 .
 The port can also be configured in the plugin configuration in the `plugins`
 section
 of the [config.json](https://docs.rs/zenoh/latest/zenoh/struct.Config.html).
 .
 ```json
 "plugins": {
   "rest": {
     "http_port": 8000,
   }
 }
 ```
 .
 This plugin translates `PUT` and `DELETE` REST operations into the pub/sub API
 and `GET` operations to the query/reply API.
 .
 For example:
 .
 ```bash
 cargo run -- --config DEFAULT_CONFIG.json5 --rest-http-port 8000
 ```
 .
 ```bash
 cargo run --example z_sub -- -k foo/bar
 ```
 .
 ```bash
 curl -X PUT -d '"Hello World!"' http://localhost:8080/foo/bar
 ```
 .
 The subscriber in `z_sub` example prints
 .
 ```bash
 >> [Subscriber] Received PUT ('foo/bar': '"Hello World!"')
 ```
 .
 ```bash
 cargo run --example z_queryable -- -k foo/bar
 ```
 .
 ```bash
 curl http://localhost:8080/foo/bar
 ```
 .
 The queryable `z_get` prints
 .
 ```bash
 >> [Queryable ] Received Query 'foo/bar'
 >> [Queryable ] Responding ('foo/bar': 'Queryable from Rust!')
 ```
 .
 and `curl` prints
 .
 ```bash
 [{"key":"foo/bar","value":"UXVlcnlhYmxlIGZyb20gUnVzdCE=","encoding":"zenoh/bytes","timestamp":null}]
 ```
 .
 See also examples of using REST API for storages in the
 [zenoh-plugin-storage-manager](https://crates.io/crates/zenoh-plugin-storage-manager).

Package: zenoh-plugin-rest
Version: 1.7.1
Architecture: amd64
Maintainer: zenoh-dev@eclipse.org
Installed-Size: 3572
Depends: zenohd (=1.7.1)
Filename: 1.7.1/zenoh-plugin-rest_1.7.1_amd64.deb
Size: 1096742
MD5sum: 4c6f801074469db50d95dd28c96b0afc
SHA1: 1c7c9a645cbc41ed67550f7a7f2bc3a8abd7cc3b
SHA256: 815847f09abfdeb35e77d2c516718c2370901526554571bc73b46272d9581b0c
Section: net
Priority: optional
Homepage: http://zenoh.io
Description: The zenoh REST plugin
 <img
 src="https://raw.githubusercontent.com/eclipse-zenoh/zenoh/master/zenoh-dragon.png"
 height="150">
 .
 [![CI](https://github.com/eclipse-zenoh/zenoh/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/eclipse-zenoh/zenoh/actions?query=workflow%3ACI+branch%3Amain++)
 [![Documentation
 Status](https://readthedocs.org/projects/zenoh-rust/badge/?version=latest)](https://zenoh-rust.readthedocs.io/en/latest/?badge=latest)
 [![codecov](https://codecov.io/github/eclipse-zenoh/zenoh/branch/main/graph/badge.svg?token=F8T4C8WPZD)](https://codecov.io/github/eclipse-zenoh/zenoh)
 [![Discussion](https://img.shields.io/badge/discussion-on%20github-blue)](https://github.com/eclipse-zenoh/roadmap/discussions)
 [![Discord](https://img.shields.io/badge/chat-on%20discord-blue)](https://discord.gg/2GJ958VuHs)
 [![License](https://img.shields.io/badge/License-EPL%202.0-blue)](https://choosealicense.com/licenses/epl-2.0/)
 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
 .
 # Eclipse Zenoh
 .
 The Eclipse Zenoh: Zero Overhead Pub/Sub, Store/Query and Compute.
 .
 Zenoh (pronounce _/zeno/_) unifies data in motion, data at rest and
 computations. It carefully blends traditional pub/sub with geo-distributed
 storages, 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](http://zenoh.io) for more information and
 [installation
 instructions](https://zenoh.io/docs/getting-started/installation/).
 .
 See also the [roadmap](https://github.com/eclipse-zenoh/roadmap) for more
 detailed technical information.
 .
 # REST Plugin for `zenohd` router
 .
 The plugin exposes a [REST API](https://zenoh.io/docs/apis/rest/) in
 [zenohd](https://crates.io/crates/zenohd).
 The `zenohd` links this plugin statically, it's not necessary to install it. To
 activate the REST plugin
 the CLI argument `--rest-http-port=<port>` should be passed to `zenohd`.
 .
 The port can also be configured in the plugin configuration in the `plugins`
 section
 of the [config.json](https://docs.rs/zenoh/latest/zenoh/struct.Config.html).
 .
 ```json
 "plugins": {
   "rest": {
     "http_port": 8000,
   }
 }
 ```
 .
 This plugin translates `PUT` and `DELETE` REST operations into the pub/sub API
 and `GET` operations to the query/reply API.
 .
 For example:
 .
 ```bash
 cargo run -- --config DEFAULT_CONFIG.json5 --rest-http-port 8000
 ```
 .
 ```bash
 cargo run --example z_sub -- -k foo/bar
 ```
 .
 ```bash
 curl -X PUT -d '"Hello World!"' http://localhost:8080/foo/bar
 ```
 .
 The subscriber in `z_sub` example prints
 .
 ```bash
 >> [Subscriber] Received PUT ('foo/bar': '"Hello World!"')
 ```
 .
 ```bash
 cargo run --example z_queryable -- -k foo/bar
 ```
 .
 ```bash
 curl http://localhost:8080/foo/bar
 ```
 .
 The queryable `z_get` prints
 .
 ```bash
 >> [Queryable ] Received Query 'foo/bar'
 >> [Queryable ] Responding ('foo/bar': 'Queryable from Rust!')
 ```
 .
 and `curl` prints
 .
 ```bash
 [{"key":"foo/bar","value":"UXVlcnlhYmxlIGZyb20gUnVzdCE=","encoding":"zenoh/bytes","timestamp":null}]
 ```
 .
 See also examples of using REST API for storages in the
 [zenoh-plugin-storage-manager](https://crates.io/crates/zenoh-plugin-storage-manager).

Package: zenoh-plugin-rest
Version: 1.7.1
Architecture: arm64
Maintainer: zenoh-dev@eclipse.org
Installed-Size: 3598
Depends: zenohd (=1.7.1)
Filename: 1.7.1/zenoh-plugin-rest_1.7.1_arm64.deb
Size: 1006774
MD5sum: c144097b92a81f37962abde6c10dd16d
SHA1: 92d8750c08231d3c93c837c539a1b0175ae7b1dc
SHA256: cc124eada234e7dec2e79fce50e89a4b99268c08afa3a24abc1e12f72d2488bb
Section: net
Priority: optional
Homepage: http://zenoh.io
Description: The zenoh REST plugin
 <img
 src="https://raw.githubusercontent.com/eclipse-zenoh/zenoh/master/zenoh-dragon.png"
 height="150">
 .
 [![CI](https://github.com/eclipse-zenoh/zenoh/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/eclipse-zenoh/zenoh/actions?query=workflow%3ACI+branch%3Amain++)
 [![Documentation
 Status](https://readthedocs.org/projects/zenoh-rust/badge/?version=latest)](https://zenoh-rust.readthedocs.io/en/latest/?badge=latest)
 [![codecov](https://codecov.io/github/eclipse-zenoh/zenoh/branch/main/graph/badge.svg?token=F8T4C8WPZD)](https://codecov.io/github/eclipse-zenoh/zenoh)
 [![Discussion](https://img.shields.io/badge/discussion-on%20github-blue)](https://github.com/eclipse-zenoh/roadmap/discussions)
 [![Discord](https://img.shields.io/badge/chat-on%20discord-blue)](https://discord.gg/2GJ958VuHs)
 [![License](https://img.shields.io/badge/License-EPL%202.0-blue)](https://choosealicense.com/licenses/epl-2.0/)
 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
 .
 # Eclipse Zenoh
 .
 The Eclipse Zenoh: Zero Overhead Pub/Sub, Store/Query and Compute.
 .
 Zenoh (pronounce _/zeno/_) unifies data in motion, data at rest and
 computations. It carefully blends traditional pub/sub with geo-distributed
 storages, 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](http://zenoh.io) for more information and
 [installation
 instructions](https://zenoh.io/docs/getting-started/installation/).
 .
 See also the [roadmap](https://github.com/eclipse-zenoh/roadmap) for more
 detailed technical information.
 .
 # REST Plugin for `zenohd` router
 .
 The plugin exposes a [REST API](https://zenoh.io/docs/apis/rest/) in
 [zenohd](https://crates.io/crates/zenohd).
 The `zenohd` links this plugin statically, it's not necessary to install it. To
 activate the REST plugin
 the CLI argument `--rest-http-port=<port>` should be passed to `zenohd`.
 .
 The port can also be configured in the plugin configuration in the `plugins`
 section
 of the [config.json](https://docs.rs/zenoh/latest/zenoh/struct.Config.html).
 .
 ```json
 "plugins": {
   "rest": {
     "http_port": 8000,
   }
 }
 ```
 .
 This plugin translates `PUT` and `DELETE` REST operations into the pub/sub API
 and `GET` operations to the query/reply API.
 .
 For example:
 .
 ```bash
 cargo run -- --config DEFAULT_CONFIG.json5 --rest-http-port 8000
 ```
 .
 ```bash
 cargo run --example z_sub -- -k foo/bar
 ```
 .
 ```bash
 curl -X PUT -d '"Hello World!"' http://localhost:8080/foo/bar
 ```
 .
 The subscriber in `z_sub` example prints
 .
 ```bash
 >> [Subscriber] Received PUT ('foo/bar': '"Hello World!"')
 ```
 .
 ```bash
 cargo run --example z_queryable -- -k foo/bar
 ```
 .
 ```bash
 curl http://localhost:8080/foo/bar
 ```
 .
 The queryable `z_get` prints
 .
 ```bash
 >> [Queryable ] Received Query 'foo/bar'
 >> [Queryable ] Responding ('foo/bar': 'Queryable from Rust!')
 ```
 .
 and `curl` prints
 .
 ```bash
 [{"key":"foo/bar","value":"UXVlcnlhYmxlIGZyb20gUnVzdCE=","encoding":"zenoh/bytes","timestamp":null}]
 ```
 .
 See also examples of using REST API for storages in the
 [zenoh-plugin-storage-manager](https://crates.io/crates/zenoh-plugin-storage-manager).

Package: zenoh-plugin-storage-manager
Version: 1.7.1
Architecture: amd64
Maintainer: zenoh-dev@eclipse.org
Installed-Size: 3474
Depends: zenohd (=1.7.1)
Filename: 1.7.1/zenoh-plugin-storage-manager_1.7.1_amd64.deb
Size: 1055602
MD5sum: cddb06b4c906fe073ff00a806280a81a
SHA1: 96d35b05b50fb0bfa4cc2c91a5c25ef4fdc588c3
SHA256: be95580b750cd9878b491eb96fd8882dff675d7a637cbe9c3633f16c8155bde7
Section: net
Priority: optional
Homepage: http://zenoh.io
Description: The zenoh storages plugin.
 <img
 src="https://raw.githubusercontent.com/eclipse-zenoh/zenoh/master/zenoh-dragon.png"
 height="150">
 .
 [![CI](https://github.com/eclipse-zenoh/zenoh/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/eclipse-zenoh/zenoh/actions?query=workflow%3ACI+branch%3Amain++)
 [![Documentation
 Status](https://readthedocs.org/projects/zenoh-rust/badge/?version=latest)](https://zenoh-rust.readthedocs.io/en/latest/?badge=latest)
 [![codecov](https://codecov.io/github/eclipse-zenoh/zenoh/branch/main/graph/badge.svg?token=F8T4C8WPZD)](https://codecov.io/github/eclipse-zenoh/zenoh)
 [![Discussion](https://img.shields.io/badge/discussion-on%20github-blue)](https://github.com/eclipse-zenoh/roadmap/discussions)
 [![Discord](https://img.shields.io/badge/chat-on%20discord-blue)](https://discord.gg/2GJ958VuHs)
 [![License](https://img.shields.io/badge/License-EPL%202.0-blue)](https://choosealicense.com/licenses/epl-2.0/)
 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
 .
 # Eclipse Zenoh
 .
 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
 storages, 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](http://zenoh.io) for more information and
 [installation
 instructions](https://zenoh.io/docs/getting-started/installation/).
 .
 See also the [roadmap](https://github.com/eclipse-zenoh/roadmap) for more
 detailed technical information.
 .
 # Storage manager plugin for `zenohd` router
 .
 A plugin that allows connecting `zenohd` to different storages (e.g.,
 databases). This plugin is a plugin manager
 itself that loads its own plugins - `backends` - specific for the external
 storage API.
 .
 ## Backends available
 .
 - `memory` backend
 .
    Stores data in a hashmap in memory, statically linked to the storage
 manager.
 .
 -
 [zenoh-backend-filesystem](https://github.com/eclipse-zenoh/zenoh-backend-filesystem/)
 .
    This backend relies on the host's file system to implement the storages.
 .
 - [zenoh-backend-s3](https://github.com/eclipse-zenoh/zenoh-backend-s3/)
 .
   This backend relies on [Amazon S3](https://aws.amazon.com/s3/?nc1=h_ls) to
 implement the storages. It is also compatible with [MinIO](https://min.io/)
 object storage.
 .
 -
 [zenoh-backend-rocksdb](https://github.com/eclipse-zenoh/zenoh-backend-rocksdb/)
 .
   This backend relies on [RocksDB](https://rocksdb.org/) to implement the
 storages.
 .
 -
 [zenoh-backend-influxdb](https://github.com/eclipse-zenoh/zenoh-backend-influxdb/)
 .
   This backend relies on
 [InfluxDB](https://www.influxdata.com/products/influxdb/) server
 to implement the storages.
 .
 ## Configuring storages
 .
 The storages are configured in the storage manager plugin configuration in the
 `plugins` section of the
 [config.json](https://docs.rs/zenoh/latest/zenoh/struct.Config.html).
 .
 There are two concepts in the storage manager: "volumes" and "storages".
 .
 The "volume" is a specific database backend plugin (memory, s3, rocksdb, etc.)
 plus
 a concrete backend configuration (database name, username, password, etc.).
 .
 The "storage" is a mapping from a glob key expression to a volume, defining
 where data
 for each path is stored.
 .
 Here is a simple example config that sets up two storages. The `__path__`
 explicitly
 sets up paths to dynamic plugins for different platforms.
 .
 ```json
 "plugins": {
     "storage_manager": {
         "volumes": {
             "example": {
                 "__path__":
 ["target/debug/libzenoh_backend_example.so","target/debug/libzenoh_backend_example.dylib"],
             }
         },
         "storages": {
             "memory": {
                 "volume": "memory",
                 "key_expr": "demo/memory/**"
             },
             "example": {
                 "volume": "example",
                 "key_expr": "demo/example/**"
             }
         }
     }
 }
 ```
 .
 ## Usage of storages
 .
 Assume that we are in the root of the
 [zenoh](https://github.com/eclipse-zenoh/zenoh) repository.
 Uncomment the following part in the `DEFAULT_CONFIG.json5` which demonstrates
 using
 external plugin config files.
 .
 ```json
 "plugins|": {
   "rest": {
     "__config__": "./plugins/zenoh-plugin-rest/config.json5",
   },
   "storage_manager": {
     "__config__": "./plugins/zenoh-plugin-storage-manager/config.json5",
   }
 },
 ```
 .
 Also either change option `timestamping -> enabled -> peer` to `true` or change
 the `mode` to `router` to enable message
 timestamping which is required by storage manager.
 .
 Run the `zenohd` router with adminspace write permissions enabled:
 .
 ```bash
 RUST_LOG=info cargo run -- --config DEFAULT_CONFIG.json5
 --adminspace-permissions rw
 ```
 .
 The `RUST_LOG=info` is important to enable logging from
 `zenoh_plugin_storage_manager` itself. Otherwise, the logs from plugins are
 suppressed.
 .
 The adminspace write permissions allow you to manage storages dynamically at
 runtime via the admin space REST API. See the example at the end.
 .
 Verify that the plugin loaded successfully: the output should contain lines
 like:
 .
 ```sh
 2025-10-02T13:33:38.279758Z  INFO main ThreadId(01) zenoh::api::loader: Loading
  plugin "rest"
 2025-10-02T13:33:38.530621Z  INFO main ThreadId(01) zenoh::api::loader: Loading
  plugin "storage_manager"
 2025-10-02T13:33:38.787932Z  INFO main ThreadId(01) zenoh::api::loader:
 Starting  plugin "rest"
 2025-10-02T13:33:38.795413Z  INFO main ThreadId(01) zenoh::api::loader:
 Successfully started plugin rest from
 "/Users/milyin/ZS/zenoh/target/debug/libzenoh_plugin_rest.dylib"
 2025-10-02T13:33:38.795433Z  INFO main ThreadId(01) zenoh::api::loader:
 Finished loading plugins
 2025-10-02T13:33:38.795441Z  INFO main ThreadId(01) zenoh::api::loader:
 Starting  plugin "storage_manager"
 2025-10-02T13:33:38.801661Z  INFO ThreadId(01) zenoh_plugin_storage_manager:
 Spawning volume 'memory' with backend 'memory'
 2025-10-02T13:33:38.802118Z  INFO ThreadId(01) zenoh_plugin_storage_manager:
 Spawning volume 'example' with backend 'example'
 2025-10-02T13:33:38.925730Z  INFO ThreadId(01) zenoh_plugin_storage_manager:
 Spawning storage 'example' from volume 'example' with backend 'example'
 2025-10-02T13:33:38.926759Z  INFO ThreadId(01) zenoh_plugin_storage_manager:
 Spawning storage 'memory' from volume 'memory' with backend 'memory'
 2025-10-02T13:33:38.926833Z  INFO main ThreadId(01) zenoh::api::loader:
 Successfully started plugin storage_manager from
 "/Users/milyin/ZS/zenoh/target/debug/libzenoh_plugin_storage_manager.dylib"
 2025-10-02T13:33:38.926860Z  INFO main ThreadId(01) zenoh::api::loader:
 Finished loading plugins
 ```
 .
 Now we can store and retrieve data. This can be done by zenoh `put` and `get`
 operations as well as using [REST](https://crates.io/crates/zenoh-plugin-rest)
 API.
 .
 ### Store and retrieve data
 .
 #### Using zenoh operations
 .
 Store some data using put:
 .
 ```bash
 cargo run --example z_put -- -k demo/memory/test -p 'Hello from zenoh put'
 ```
 .
 Then query the stored data:
 .
 ```bash
 cargo run --example z_get -- -s "demo/memory/test"
 ```
 .
 Expected output with the stored data
 .
 ```console
 >> Received ('demo/memory/test': 'Hello from zenoh put')
 ```
 .
 Notice that this would not work without storage enabled. The `put` operation
 belongs to the publish/subscribe API, while the `get` is part of the
 query/reply API.
 It's the storage that runs a subscriber and querier for its key expression. In
 other words, storages link pub/sub and query/reply APIs together in
 the Zenoh network.
 .
 #### Using REST API
 .
 Store data via REST PUT:
 .
 ```bash
 curl -X PUT -d '"Hello from REST"' -H "Content-Type: application/json"
 http://localhost:8080/demo/memory/test
 ```
 .
 Retrieve data via REST GET:
 .
 ```bash
 curl http://localhost:8080/demo/memory/test
 ```
 .
 Expected output:
 .
 ```json
 [{"key":"demo/memory/test","value":"Hello from
 REST","encoding":"application/json","timestamp":"7556630592622444272/d3f8913b8af0c842078d30652a04bd8f"}]
 ```
 .
 **Note**: Use the `application/json` content type and quoted value in `PUT` to
 get data as a string value in `GET` json output. Otherwise, the value is
 base-64 encoded to
 ensure correctness of the json format.
 .
 Delete stored data with REST DELETE:
 .
 ```bash
 curl -X DELETE http://localhost:8080/demo/memory/test
 ```
 .
 You can verify the deletion by querying the key again:
 .
 ```bash
 curl http://localhost:8080/demo/memory/test
 ```
 .
 Expected output (empty array, indicating no data found):
 .
 ```json
 []
 ```
 .
 ### Using the admin space to manage storages
 .
 You can manage storages dynamically via the admin space - the predefined key
 expression starting with `@/`.
 .
 To view current storages:
 .
 ```bash
 curl -s 'http://localhost:8080/@/local/router/**/storages/*' | jq
 ```
 .
 Expected output (showing active storages):
 .
 ```json
 [
   {
     "key":
 "@/d3f8913b8af0c842078d30652a04bd8f/router/status/plugins/storage_manager/storages/memory",
     "value": {
       "key_expr": "demo/memory/**",
       "volume": "memory"
     },
     "encoding": "application/json",
     "timestamp": null
   },
   {
     "key":
 "@/d3f8913b8af0c842078d30652a04bd8f/router/status/plugins/storage_manager/storages/example",
     "value": null,
     "encoding": "application/json",
     "timestamp": null
   }
 ]
 ```
 .
 Add another memory storage dynamically:
 .
 ```bash
 curl -X PUT -H 'content-type:application/json' \
   -d '{"key_expr":"demo/sensors/**","volume":"memory"}' \
   http://localhost:8080/@/local/router/config/plugins/storage_manager/storages/sensors
 ```
 .
 Delete example storage dynamically:
 .
 ```bash
 curl -X DELETE
 http://localhost:8080/@/local/router/config/plugins/storage_manager/storages/example
 ```
 .
 Verify the new memory storage is created and the example storage is deleted:
 .
 ```bash
 curl -s 'http://localhost:8080/@/local/router/**/storages/*' | jq
 ```

Package: zenoh-plugin-storage-manager
Version: 1.7.1
Architecture: arm64
Maintainer: zenoh-dev@eclipse.org
Installed-Size: 3481
Depends: zenohd (=1.7.1)
Filename: 1.7.1/zenoh-plugin-storage-manager_1.7.1_arm64.deb
Size: 971022
MD5sum: 3be3609185281cba24e09a2926e8e513
SHA1: 6871b069a40783473868d06fd89b5671fef5dba9
SHA256: 88dee18a234217db0918c3eb5b11ce67c02b8d106f70ba956fd3d0d2d416fd23
Section: net
Priority: optional
Homepage: http://zenoh.io
Description: The zenoh storages plugin.
 <img
 src="https://raw.githubusercontent.com/eclipse-zenoh/zenoh/master/zenoh-dragon.png"
 height="150">
 .
 [![CI](https://github.com/eclipse-zenoh/zenoh/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/eclipse-zenoh/zenoh/actions?query=workflow%3ACI+branch%3Amain++)
 [![Documentation
 Status](https://readthedocs.org/projects/zenoh-rust/badge/?version=latest)](https://zenoh-rust.readthedocs.io/en/latest/?badge=latest)
 [![codecov](https://codecov.io/github/eclipse-zenoh/zenoh/branch/main/graph/badge.svg?token=F8T4C8WPZD)](https://codecov.io/github/eclipse-zenoh/zenoh)
 [![Discussion](https://img.shields.io/badge/discussion-on%20github-blue)](https://github.com/eclipse-zenoh/roadmap/discussions)
 [![Discord](https://img.shields.io/badge/chat-on%20discord-blue)](https://discord.gg/2GJ958VuHs)
 [![License](https://img.shields.io/badge/License-EPL%202.0-blue)](https://choosealicense.com/licenses/epl-2.0/)
 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
 .
 # Eclipse Zenoh
 .
 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
 storages, 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](http://zenoh.io) for more information and
 [installation
 instructions](https://zenoh.io/docs/getting-started/installation/).
 .
 See also the [roadmap](https://github.com/eclipse-zenoh/roadmap) for more
 detailed technical information.
 .
 # Storage manager plugin for `zenohd` router
 .
 A plugin that allows connecting `zenohd` to different storages (e.g.,
 databases). This plugin is a plugin manager
 itself that loads its own plugins - `backends` - specific for the external
 storage API.
 .
 ## Backends available
 .
 - `memory` backend
 .
    Stores data in a hashmap in memory, statically linked to the storage
 manager.
 .
 -
 [zenoh-backend-filesystem](https://github.com/eclipse-zenoh/zenoh-backend-filesystem/)
 .
    This backend relies on the host's file system to implement the storages.
 .
 - [zenoh-backend-s3](https://github.com/eclipse-zenoh/zenoh-backend-s3/)
 .
   This backend relies on [Amazon S3](https://aws.amazon.com/s3/?nc1=h_ls) to
 implement the storages. It is also compatible with [MinIO](https://min.io/)
 object storage.
 .
 -
 [zenoh-backend-rocksdb](https://github.com/eclipse-zenoh/zenoh-backend-rocksdb/)
 .
   This backend relies on [RocksDB](https://rocksdb.org/) to implement the
 storages.
 .
 -
 [zenoh-backend-influxdb](https://github.com/eclipse-zenoh/zenoh-backend-influxdb/)
 .
   This backend relies on
 [InfluxDB](https://www.influxdata.com/products/influxdb/) server
 to implement the storages.
 .
 ## Configuring storages
 .
 The storages are configured in the storage manager plugin configuration in the
 `plugins` section of the
 [config.json](https://docs.rs/zenoh/latest/zenoh/struct.Config.html).
 .
 There are two concepts in the storage manager: "volumes" and "storages".
 .
 The "volume" is a specific database backend plugin (memory, s3, rocksdb, etc.)
 plus
 a concrete backend configuration (database name, username, password, etc.).
 .
 The "storage" is a mapping from a glob key expression to a volume, defining
 where data
 for each path is stored.
 .
 Here is a simple example config that sets up two storages. The `__path__`
 explicitly
 sets up paths to dynamic plugins for different platforms.
 .
 ```json
 "plugins": {
     "storage_manager": {
         "volumes": {
             "example": {
                 "__path__":
 ["target/debug/libzenoh_backend_example.so","target/debug/libzenoh_backend_example.dylib"],
             }
         },
         "storages": {
             "memory": {
                 "volume": "memory",
                 "key_expr": "demo/memory/**"
             },
             "example": {
                 "volume": "example",
                 "key_expr": "demo/example/**"
             }
         }
     }
 }
 ```
 .
 ## Usage of storages
 .
 Assume that we are in the root of the
 [zenoh](https://github.com/eclipse-zenoh/zenoh) repository.
 Uncomment the following part in the `DEFAULT_CONFIG.json5` which demonstrates
 using
 external plugin config files.
 .
 ```json
 "plugins|": {
   "rest": {
     "__config__": "./plugins/zenoh-plugin-rest/config.json5",
   },
   "storage_manager": {
     "__config__": "./plugins/zenoh-plugin-storage-manager/config.json5",
   }
 },
 ```
 .
 Also either change option `timestamping -> enabled -> peer` to `true` or change
 the `mode` to `router` to enable message
 timestamping which is required by storage manager.
 .
 Run the `zenohd` router with adminspace write permissions enabled:
 .
 ```bash
 RUST_LOG=info cargo run -- --config DEFAULT_CONFIG.json5
 --adminspace-permissions rw
 ```
 .
 The `RUST_LOG=info` is important to enable logging from
 `zenoh_plugin_storage_manager` itself. Otherwise, the logs from plugins are
 suppressed.
 .
 The adminspace write permissions allow you to manage storages dynamically at
 runtime via the admin space REST API. See the example at the end.
 .
 Verify that the plugin loaded successfully: the output should contain lines
 like:
 .
 ```sh
 2025-10-02T13:33:38.279758Z  INFO main ThreadId(01) zenoh::api::loader: Loading
  plugin "rest"
 2025-10-02T13:33:38.530621Z  INFO main ThreadId(01) zenoh::api::loader: Loading
  plugin "storage_manager"
 2025-10-02T13:33:38.787932Z  INFO main ThreadId(01) zenoh::api::loader:
 Starting  plugin "rest"
 2025-10-02T13:33:38.795413Z  INFO main ThreadId(01) zenoh::api::loader:
 Successfully started plugin rest from
 "/Users/milyin/ZS/zenoh/target/debug/libzenoh_plugin_rest.dylib"
 2025-10-02T13:33:38.795433Z  INFO main ThreadId(01) zenoh::api::loader:
 Finished loading plugins
 2025-10-02T13:33:38.795441Z  INFO main ThreadId(01) zenoh::api::loader:
 Starting  plugin "storage_manager"
 2025-10-02T13:33:38.801661Z  INFO ThreadId(01) zenoh_plugin_storage_manager:
 Spawning volume 'memory' with backend 'memory'
 2025-10-02T13:33:38.802118Z  INFO ThreadId(01) zenoh_plugin_storage_manager:
 Spawning volume 'example' with backend 'example'
 2025-10-02T13:33:38.925730Z  INFO ThreadId(01) zenoh_plugin_storage_manager:
 Spawning storage 'example' from volume 'example' with backend 'example'
 2025-10-02T13:33:38.926759Z  INFO ThreadId(01) zenoh_plugin_storage_manager:
 Spawning storage 'memory' from volume 'memory' with backend 'memory'
 2025-10-02T13:33:38.926833Z  INFO main ThreadId(01) zenoh::api::loader:
 Successfully started plugin storage_manager from
 "/Users/milyin/ZS/zenoh/target/debug/libzenoh_plugin_storage_manager.dylib"
 2025-10-02T13:33:38.926860Z  INFO main ThreadId(01) zenoh::api::loader:
 Finished loading plugins
 ```
 .
 Now we can store and retrieve data. This can be done by zenoh `put` and `get`
 operations as well as using [REST](https://crates.io/crates/zenoh-plugin-rest)
 API.
 .
 ### Store and retrieve data
 .
 #### Using zenoh operations
 .
 Store some data using put:
 .
 ```bash
 cargo run --example z_put -- -k demo/memory/test -p 'Hello from zenoh put'
 ```
 .
 Then query the stored data:
 .
 ```bash
 cargo run --example z_get -- -s "demo/memory/test"
 ```
 .
 Expected output with the stored data
 .
 ```console
 >> Received ('demo/memory/test': 'Hello from zenoh put')
 ```
 .
 Notice that this would not work without storage enabled. The `put` operation
 belongs to the publish/subscribe API, while the `get` is part of the
 query/reply API.
 It's the storage that runs a subscriber and querier for its key expression. In
 other words, storages link pub/sub and query/reply APIs together in
 the Zenoh network.
 .
 #### Using REST API
 .
 Store data via REST PUT:
 .
 ```bash
 curl -X PUT -d '"Hello from REST"' -H "Content-Type: application/json"
 http://localhost:8080/demo/memory/test
 ```
 .
 Retrieve data via REST GET:
 .
 ```bash
 curl http://localhost:8080/demo/memory/test
 ```
 .
 Expected output:
 .
 ```json
 [{"key":"demo/memory/test","value":"Hello from
 REST","encoding":"application/json","timestamp":"7556630592622444272/d3f8913b8af0c842078d30652a04bd8f"}]
 ```
 .
 **Note**: Use the `application/json` content type and quoted value in `PUT` to
 get data as a string value in `GET` json output. Otherwise, the value is
 base-64 encoded to
 ensure correctness of the json format.
 .
 Delete stored data with REST DELETE:
 .
 ```bash
 curl -X DELETE http://localhost:8080/demo/memory/test
 ```
 .
 You can verify the deletion by querying the key again:
 .
 ```bash
 curl http://localhost:8080/demo/memory/test
 ```
 .
 Expected output (empty array, indicating no data found):
 .
 ```json
 []
 ```
 .
 ### Using the admin space to manage storages
 .
 You can manage storages dynamically via the admin space - the predefined key
 expression starting with `@/`.
 .
 To view current storages:
 .
 ```bash
 curl -s 'http://localhost:8080/@/local/router/**/storages/*' | jq
 ```
 .
 Expected output (showing active storages):
 .
 ```json
 [
   {
     "key":
 "@/d3f8913b8af0c842078d30652a04bd8f/router/status/plugins/storage_manager/storages/memory",
     "value": {
       "key_expr": "demo/memory/**",
       "volume": "memory"
     },
     "encoding": "application/json",
     "timestamp": null
   },
   {
     "key":
 "@/d3f8913b8af0c842078d30652a04bd8f/router/status/plugins/storage_manager/storages/example",
     "value": null,
     "encoding": "application/json",
     "timestamp": null
   }
 ]
 ```
 .
 Add another memory storage dynamically:
 .
 ```bash
 curl -X PUT -H 'content-type:application/json' \
   -d '{"key_expr":"demo/sensors/**","volume":"memory"}' \
   http://localhost:8080/@/local/router/config/plugins/storage_manager/storages/sensors
 ```
 .
 Delete example storage dynamically:
 .
 ```bash
 curl -X DELETE
 http://localhost:8080/@/local/router/config/plugins/storage_manager/storages/example
 ```
 .
 Verify the new memory storage is created and the example storage is deleted:
 .
 ```bash
 curl -s 'http://localhost:8080/@/local/router/**/storages/*' | jq
 ```

Package: zenoh-plugin-storage-manager
Version: 1.7.1
Architecture: armel
Maintainer: zenoh-dev@eclipse.org
Installed-Size: 3496
Depends: zenohd (=1.7.1)
Filename: 1.7.1/zenoh-plugin-storage-manager_1.7.1_armel.deb
Size: 1030770
MD5sum: 295c2e6f96abfbcbd951537e0cf4c971
SHA1: 08f93139115eb0402a27ee8bc816cf8b88f87e44
SHA256: 0544a14e8e78a2d1aa331f7df7f9d3d5d58b755b49c069fce6a959aeb252555e
Section: net
Priority: optional
Homepage: http://zenoh.io
Description: The zenoh storages plugin.
 <img
 src="https://raw.githubusercontent.com/eclipse-zenoh/zenoh/master/zenoh-dragon.png"
 height="150">
 .
 [![CI](https://github.com/eclipse-zenoh/zenoh/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/eclipse-zenoh/zenoh/actions?query=workflow%3ACI+branch%3Amain++)
 [![Documentation
 Status](https://readthedocs.org/projects/zenoh-rust/badge/?version=latest)](https://zenoh-rust.readthedocs.io/en/latest/?badge=latest)
 [![codecov](https://codecov.io/github/eclipse-zenoh/zenoh/branch/main/graph/badge.svg?token=F8T4C8WPZD)](https://codecov.io/github/eclipse-zenoh/zenoh)
 [![Discussion](https://img.shields.io/badge/discussion-on%20github-blue)](https://github.com/eclipse-zenoh/roadmap/discussions)
 [![Discord](https://img.shields.io/badge/chat-on%20discord-blue)](https://discord.gg/2GJ958VuHs)
 [![License](https://img.shields.io/badge/License-EPL%202.0-blue)](https://choosealicense.com/licenses/epl-2.0/)
 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
 .
 # Eclipse Zenoh
 .
 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
 storages, 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](http://zenoh.io) for more information and
 [installation
 instructions](https://zenoh.io/docs/getting-started/installation/).
 .
 See also the [roadmap](https://github.com/eclipse-zenoh/roadmap) for more
 detailed technical information.
 .
 # Storage manager plugin for `zenohd` router
 .
 A plugin that allows connecting `zenohd` to different storages (e.g.,
 databases). This plugin is a plugin manager
 itself that loads its own plugins - `backends` - specific for the external
 storage API.
 .
 ## Backends available
 .
 - `memory` backend
 .
    Stores data in a hashmap in memory, statically linked to the storage
 manager.
 .
 -
 [zenoh-backend-filesystem](https://github.com/eclipse-zenoh/zenoh-backend-filesystem/)
 .
    This backend relies on the host's file system to implement the storages.
 .
 - [zenoh-backend-s3](https://github.com/eclipse-zenoh/zenoh-backend-s3/)
 .
   This backend relies on [Amazon S3](https://aws.amazon.com/s3/?nc1=h_ls) to
 implement the storages. It is also compatible with [MinIO](https://min.io/)
 object storage.
 .
 -
 [zenoh-backend-rocksdb](https://github.com/eclipse-zenoh/zenoh-backend-rocksdb/)
 .
   This backend relies on [RocksDB](https://rocksdb.org/) to implement the
 storages.
 .
 -
 [zenoh-backend-influxdb](https://github.com/eclipse-zenoh/zenoh-backend-influxdb/)
 .
   This backend relies on
 [InfluxDB](https://www.influxdata.com/products/influxdb/) server
 to implement the storages.
 .
 ## Configuring storages
 .
 The storages are configured in the storage manager plugin configuration in the
 `plugins` section of the
 [config.json](https://docs.rs/zenoh/latest/zenoh/struct.Config.html).
 .
 There are two concepts in the storage manager: "volumes" and "storages".
 .
 The "volume" is a specific database backend plugin (memory, s3, rocksdb, etc.)
 plus
 a concrete backend configuration (database name, username, password, etc.).
 .
 The "storage" is a mapping from a glob key expression to a volume, defining
 where data
 for each path is stored.
 .
 Here is a simple example config that sets up two storages. The `__path__`
 explicitly
 sets up paths to dynamic plugins for different platforms.
 .
 ```json
 "plugins": {
     "storage_manager": {
         "volumes": {
             "example": {
                 "__path__":
 ["target/debug/libzenoh_backend_example.so","target/debug/libzenoh_backend_example.dylib"],
             }
         },
         "storages": {
             "memory": {
                 "volume": "memory",
                 "key_expr": "demo/memory/**"
             },
             "example": {
                 "volume": "example",
                 "key_expr": "demo/example/**"
             }
         }
     }
 }
 ```
 .
 ## Usage of storages
 .
 Assume that we are in the root of the
 [zenoh](https://github.com/eclipse-zenoh/zenoh) repository.
 Uncomment the following part in the `DEFAULT_CONFIG.json5` which demonstrates
 using
 external plugin config files.
 .
 ```json
 "plugins|": {
   "rest": {
     "__config__": "./plugins/zenoh-plugin-rest/config.json5",
   },
   "storage_manager": {
     "__config__": "./plugins/zenoh-plugin-storage-manager/config.json5",
   }
 },
 ```
 .
 Also either change option `timestamping -> enabled -> peer` to `true` or change
 the `mode` to `router` to enable message
 timestamping which is required by storage manager.
 .
 Run the `zenohd` router with adminspace write permissions enabled:
 .
 ```bash
 RUST_LOG=info cargo run -- --config DEFAULT_CONFIG.json5
 --adminspace-permissions rw
 ```
 .
 The `RUST_LOG=info` is important to enable logging from
 `zenoh_plugin_storage_manager` itself. Otherwise, the logs from plugins are
 suppressed.
 .
 The adminspace write permissions allow you to manage storages dynamically at
 runtime via the admin space REST API. See the example at the end.
 .
 Verify that the plugin loaded successfully: the output should contain lines
 like:
 .
 ```sh
 2025-10-02T13:33:38.279758Z  INFO main ThreadId(01) zenoh::api::loader: Loading
  plugin "rest"
 2025-10-02T13:33:38.530621Z  INFO main ThreadId(01) zenoh::api::loader: Loading
  plugin "storage_manager"
 2025-10-02T13:33:38.787932Z  INFO main ThreadId(01) zenoh::api::loader:
 Starting  plugin "rest"
 2025-10-02T13:33:38.795413Z  INFO main ThreadId(01) zenoh::api::loader:
 Successfully started plugin rest from
 "/Users/milyin/ZS/zenoh/target/debug/libzenoh_plugin_rest.dylib"
 2025-10-02T13:33:38.795433Z  INFO main ThreadId(01) zenoh::api::loader:
 Finished loading plugins
 2025-10-02T13:33:38.795441Z  INFO main ThreadId(01) zenoh::api::loader:
 Starting  plugin "storage_manager"
 2025-10-02T13:33:38.801661Z  INFO ThreadId(01) zenoh_plugin_storage_manager:
 Spawning volume 'memory' with backend 'memory'
 2025-10-02T13:33:38.802118Z  INFO ThreadId(01) zenoh_plugin_storage_manager:
 Spawning volume 'example' with backend 'example'
 2025-10-02T13:33:38.925730Z  INFO ThreadId(01) zenoh_plugin_storage_manager:
 Spawning storage 'example' from volume 'example' with backend 'example'
 2025-10-02T13:33:38.926759Z  INFO ThreadId(01) zenoh_plugin_storage_manager:
 Spawning storage 'memory' from volume 'memory' with backend 'memory'
 2025-10-02T13:33:38.926833Z  INFO main ThreadId(01) zenoh::api::loader:
 Successfully started plugin storage_manager from
 "/Users/milyin/ZS/zenoh/target/debug/libzenoh_plugin_storage_manager.dylib"
 2025-10-02T13:33:38.926860Z  INFO main ThreadId(01) zenoh::api::loader:
 Finished loading plugins
 ```
 .
 Now we can store and retrieve data. This can be done by zenoh `put` and `get`
 operations as well as using [REST](https://crates.io/crates/zenoh-plugin-rest)
 API.
 .
 ### Store and retrieve data
 .
 #### Using zenoh operations
 .
 Store some data using put:
 .
 ```bash
 cargo run --example z_put -- -k demo/memory/test -p 'Hello from zenoh put'
 ```
 .
 Then query the stored data:
 .
 ```bash
 cargo run --example z_get -- -s "demo/memory/test"
 ```
 .
 Expected output with the stored data
 .
 ```console
 >> Received ('demo/memory/test': 'Hello from zenoh put')
 ```
 .
 Notice that this would not work without storage enabled. The `put` operation
 belongs to the publish/subscribe API, while the `get` is part of the
 query/reply API.
 It's the storage that runs a subscriber and querier for its key expression. In
 other words, storages link pub/sub and query/reply APIs together in
 the Zenoh network.
 .
 #### Using REST API
 .
 Store data via REST PUT:
 .
 ```bash
 curl -X PUT -d '"Hello from REST"' -H "Content-Type: application/json"
 http://localhost:8080/demo/memory/test
 ```
 .
 Retrieve data via REST GET:
 .
 ```bash
 curl http://localhost:8080/demo/memory/test
 ```
 .
 Expected output:
 .
 ```json
 [{"key":"demo/memory/test","value":"Hello from
 REST","encoding":"application/json","timestamp":"7556630592622444272/d3f8913b8af0c842078d30652a04bd8f"}]
 ```
 .
 **Note**: Use the `application/json` content type and quoted value in `PUT` to
 get data as a string value in `GET` json output. Otherwise, the value is
 base-64 encoded to
 ensure correctness of the json format.
 .
 Delete stored data with REST DELETE:
 .
 ```bash
 curl -X DELETE http://localhost:8080/demo/memory/test
 ```
 .
 You can verify the deletion by querying the key again:
 .
 ```bash
 curl http://localhost:8080/demo/memory/test
 ```
 .
 Expected output (empty array, indicating no data found):
 .
 ```json
 []
 ```
 .
 ### Using the admin space to manage storages
 .
 You can manage storages dynamically via the admin space - the predefined key
 expression starting with `@/`.
 .
 To view current storages:
 .
 ```bash
 curl -s 'http://localhost:8080/@/local/router/**/storages/*' | jq
 ```
 .
 Expected output (showing active storages):
 .
 ```json
 [
   {
     "key":
 "@/d3f8913b8af0c842078d30652a04bd8f/router/status/plugins/storage_manager/storages/memory",
     "value": {
       "key_expr": "demo/memory/**",
       "volume": "memory"
     },
     "encoding": "application/json",
     "timestamp": null
   },
   {
     "key":
 "@/d3f8913b8af0c842078d30652a04bd8f/router/status/plugins/storage_manager/storages/example",
     "value": null,
     "encoding": "application/json",
     "timestamp": null
   }
 ]
 ```
 .
 Add another memory storage dynamically:
 .
 ```bash
 curl -X PUT -H 'content-type:application/json' \
   -d '{"key_expr":"demo/sensors/**","volume":"memory"}' \
   http://localhost:8080/@/local/router/config/plugins/storage_manager/storages/sensors
 ```
 .
 Delete example storage dynamically:
 .
 ```bash
 curl -X DELETE
 http://localhost:8080/@/local/router/config/plugins/storage_manager/storages/example
 ```
 .
 Verify the new memory storage is created and the example storage is deleted:
 .
 ```bash
 curl -s 'http://localhost:8080/@/local/router/**/storages/*' | jq
 ```

Package: zenoh-plugin-storage-manager
Version: 1.7.1
Architecture: armhf
Maintainer: zenoh-dev@eclipse.org
Installed-Size: 3408
Depends: zenohd (=1.7.1)
Filename: 1.7.1/zenoh-plugin-storage-manager_1.7.1_armhf.deb
Size: 1019798
MD5sum: 8a67d870abfcb2fdcdc6f33f95e6623e
SHA1: a138d4c075c0cb6e11f3f2c2fa29c7fedd7503c5
SHA256: 7d4348e77c75a4858760448e0694f86d8a7b0a3f7861aae9045479095afb10a4
Section: net
Priority: optional
Homepage: http://zenoh.io
Description: The zenoh storages plugin.
 <img
 src="https://raw.githubusercontent.com/eclipse-zenoh/zenoh/master/zenoh-dragon.png"
 height="150">
 .
 [![CI](https://github.com/eclipse-zenoh/zenoh/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/eclipse-zenoh/zenoh/actions?query=workflow%3ACI+branch%3Amain++)
 [![Documentation
 Status](https://readthedocs.org/projects/zenoh-rust/badge/?version=latest)](https://zenoh-rust.readthedocs.io/en/latest/?badge=latest)
 [![codecov](https://codecov.io/github/eclipse-zenoh/zenoh/branch/main/graph/badge.svg?token=F8T4C8WPZD)](https://codecov.io/github/eclipse-zenoh/zenoh)
 [![Discussion](https://img.shields.io/badge/discussion-on%20github-blue)](https://github.com/eclipse-zenoh/roadmap/discussions)
 [![Discord](https://img.shields.io/badge/chat-on%20discord-blue)](https://discord.gg/2GJ958VuHs)
 [![License](https://img.shields.io/badge/License-EPL%202.0-blue)](https://choosealicense.com/licenses/epl-2.0/)
 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
 .
 # Eclipse Zenoh
 .
 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
 storages, 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](http://zenoh.io) for more information and
 [installation
 instructions](https://zenoh.io/docs/getting-started/installation/).
 .
 See also the [roadmap](https://github.com/eclipse-zenoh/roadmap) for more
 detailed technical information.
 .
 # Storage manager plugin for `zenohd` router
 .
 A plugin that allows connecting `zenohd` to different storages (e.g.,
 databases). This plugin is a plugin manager
 itself that loads its own plugins - `backends` - specific for the external
 storage API.
 .
 ## Backends available
 .
 - `memory` backend
 .
    Stores data in a hashmap in memory, statically linked to the storage
 manager.
 .
 -
 [zenoh-backend-filesystem](https://github.com/eclipse-zenoh/zenoh-backend-filesystem/)
 .
    This backend relies on the host's file system to implement the storages.
 .
 - [zenoh-backend-s3](https://github.com/eclipse-zenoh/zenoh-backend-s3/)
 .
   This backend relies on [Amazon S3](https://aws.amazon.com/s3/?nc1=h_ls) to
 implement the storages. It is also compatible with [MinIO](https://min.io/)
 object storage.
 .
 -
 [zenoh-backend-rocksdb](https://github.com/eclipse-zenoh/zenoh-backend-rocksdb/)
 .
   This backend relies on [RocksDB](https://rocksdb.org/) to implement the
 storages.
 .
 -
 [zenoh-backend-influxdb](https://github.com/eclipse-zenoh/zenoh-backend-influxdb/)
 .
   This backend relies on
 [InfluxDB](https://www.influxdata.com/products/influxdb/) server
 to implement the storages.
 .
 ## Configuring storages
 .
 The storages are configured in the storage manager plugin configuration in the
 `plugins` section of the
 [config.json](https://docs.rs/zenoh/latest/zenoh/struct.Config.html).
 .
 There are two concepts in the storage manager: "volumes" and "storages".
 .
 The "volume" is a specific database backend plugin (memory, s3, rocksdb, etc.)
 plus
 a concrete backend configuration (database name, username, password, etc.).
 .
 The "storage" is a mapping from a glob key expression to a volume, defining
 where data
 for each path is stored.
 .
 Here is a simple example config that sets up two storages. The `__path__`
 explicitly
 sets up paths to dynamic plugins for different platforms.
 .
 ```json
 "plugins": {
     "storage_manager": {
         "volumes": {
             "example": {
                 "__path__":
 ["target/debug/libzenoh_backend_example.so","target/debug/libzenoh_backend_example.dylib"],
             }
         },
         "storages": {
             "memory": {
                 "volume": "memory",
                 "key_expr": "demo/memory/**"
             },
             "example": {
                 "volume": "example",
                 "key_expr": "demo/example/**"
             }
         }
     }
 }
 ```
 .
 ## Usage of storages
 .
 Assume that we are in the root of the
 [zenoh](https://github.com/eclipse-zenoh/zenoh) repository.
 Uncomment the following part in the `DEFAULT_CONFIG.json5` which demonstrates
 using
 external plugin config files.
 .
 ```json
 "plugins|": {
   "rest": {
     "__config__": "./plugins/zenoh-plugin-rest/config.json5",
   },
   "storage_manager": {
     "__config__": "./plugins/zenoh-plugin-storage-manager/config.json5",
   }
 },
 ```
 .
 Also either change option `timestamping -> enabled -> peer` to `true` or change
 the `mode` to `router` to enable message
 timestamping which is required by storage manager.
 .
 Run the `zenohd` router with adminspace write permissions enabled:
 .
 ```bash
 RUST_LOG=info cargo run -- --config DEFAULT_CONFIG.json5
 --adminspace-permissions rw
 ```
 .
 The `RUST_LOG=info` is important to enable logging from
 `zenoh_plugin_storage_manager` itself. Otherwise, the logs from plugins are
 suppressed.
 .
 The adminspace write permissions allow you to manage storages dynamically at
 runtime via the admin space REST API. See the example at the end.
 .
 Verify that the plugin loaded successfully: the output should contain lines
 like:
 .
 ```sh
 2025-10-02T13:33:38.279758Z  INFO main ThreadId(01) zenoh::api::loader: Loading
  plugin "rest"
 2025-10-02T13:33:38.530621Z  INFO main ThreadId(01) zenoh::api::loader: Loading
  plugin "storage_manager"
 2025-10-02T13:33:38.787932Z  INFO main ThreadId(01) zenoh::api::loader:
 Starting  plugin "rest"
 2025-10-02T13:33:38.795413Z  INFO main ThreadId(01) zenoh::api::loader:
 Successfully started plugin rest from
 "/Users/milyin/ZS/zenoh/target/debug/libzenoh_plugin_rest.dylib"
 2025-10-02T13:33:38.795433Z  INFO main ThreadId(01) zenoh::api::loader:
 Finished loading plugins
 2025-10-02T13:33:38.795441Z  INFO main ThreadId(01) zenoh::api::loader:
 Starting  plugin "storage_manager"
 2025-10-02T13:33:38.801661Z  INFO ThreadId(01) zenoh_plugin_storage_manager:
 Spawning volume 'memory' with backend 'memory'
 2025-10-02T13:33:38.802118Z  INFO ThreadId(01) zenoh_plugin_storage_manager:
 Spawning volume 'example' with backend 'example'
 2025-10-02T13:33:38.925730Z  INFO ThreadId(01) zenoh_plugin_storage_manager:
 Spawning storage 'example' from volume 'example' with backend 'example'
 2025-10-02T13:33:38.926759Z  INFO ThreadId(01) zenoh_plugin_storage_manager:
 Spawning storage 'memory' from volume 'memory' with backend 'memory'
 2025-10-02T13:33:38.926833Z  INFO main ThreadId(01) zenoh::api::loader:
 Successfully started plugin storage_manager from
 "/Users/milyin/ZS/zenoh/target/debug/libzenoh_plugin_storage_manager.dylib"
 2025-10-02T13:33:38.926860Z  INFO main ThreadId(01) zenoh::api::loader:
 Finished loading plugins
 ```
 .
 Now we can store and retrieve data. This can be done by zenoh `put` and `get`
 operations as well as using [REST](https://crates.io/crates/zenoh-plugin-rest)
 API.
 .
 ### Store and retrieve data
 .
 #### Using zenoh operations
 .
 Store some data using put:
 .
 ```bash
 cargo run --example z_put -- -k demo/memory/test -p 'Hello from zenoh put'
 ```
 .
 Then query the stored data:
 .
 ```bash
 cargo run --example z_get -- -s "demo/memory/test"
 ```
 .
 Expected output with the stored data
 .
 ```console
 >> Received ('demo/memory/test': 'Hello from zenoh put')
 ```
 .
 Notice that this would not work without storage enabled. The `put` operation
 belongs to the publish/subscribe API, while the `get` is part of the
 query/reply API.
 It's the storage that runs a subscriber and querier for its key expression. In
 other words, storages link pub/sub and query/reply APIs together in
 the Zenoh network.
 .
 #### Using REST API
 .
 Store data via REST PUT:
 .
 ```bash
 curl -X PUT -d '"Hello from REST"' -H "Content-Type: application/json"
 http://localhost:8080/demo/memory/test
 ```
 .
 Retrieve data via REST GET:
 .
 ```bash
 curl http://localhost:8080/demo/memory/test
 ```
 .
 Expected output:
 .
 ```json
 [{"key":"demo/memory/test","value":"Hello from
 REST","encoding":"application/json","timestamp":"7556630592622444272/d3f8913b8af0c842078d30652a04bd8f"}]
 ```
 .
 **Note**: Use the `application/json` content type and quoted value in `PUT` to
 get data as a string value in `GET` json output. Otherwise, the value is
 base-64 encoded to
 ensure correctness of the json format.
 .
 Delete stored data with REST DELETE:
 .
 ```bash
 curl -X DELETE http://localhost:8080/demo/memory/test
 ```
 .
 You can verify the deletion by querying the key again:
 .
 ```bash
 curl http://localhost:8080/demo/memory/test
 ```
 .
 Expected output (empty array, indicating no data found):
 .
 ```json
 []
 ```
 .
 ### Using the admin space to manage storages
 .
 You can manage storages dynamically via the admin space - the predefined key
 expression starting with `@/`.
 .
 To view current storages:
 .
 ```bash
 curl -s 'http://localhost:8080/@/local/router/**/storages/*' | jq
 ```
 .
 Expected output (showing active storages):
 .
 ```json
 [
   {
     "key":
 "@/d3f8913b8af0c842078d30652a04bd8f/router/status/plugins/storage_manager/storages/memory",
     "value": {
       "key_expr": "demo/memory/**",
       "volume": "memory"
     },
     "encoding": "application/json",
     "timestamp": null
   },
   {
     "key":
 "@/d3f8913b8af0c842078d30652a04bd8f/router/status/plugins/storage_manager/storages/example",
     "value": null,
     "encoding": "application/json",
     "timestamp": null
   }
 ]
 ```
 .
 Add another memory storage dynamically:
 .
 ```bash
 curl -X PUT -H 'content-type:application/json' \
   -d '{"key_expr":"demo/sensors/**","volume":"memory"}' \
   http://localhost:8080/@/local/router/config/plugins/storage_manager/storages/sensors
 ```
 .
 Delete example storage dynamically:
 .
 ```bash
 curl -X DELETE
 http://localhost:8080/@/local/router/config/plugins/storage_manager/storages/example
 ```
 .
 Verify the new memory storage is created and the example storage is deleted:
 .
 ```bash
 curl -s 'http://localhost:8080/@/local/router/**/storages/*' | jq
 ```

Package: zenohd
Version: 1.7.1
Architecture: armel
Maintainer: zenoh-dev@eclipse.org
Installed-Size: 13756
Filename: 1.7.1/zenohd_1.7.1_armel.deb
Size: 3752154
MD5sum: c2bc4d13f3df577b14e467f5620cca02
SHA1: ef33903ef26e5cdd52a813d8a317fecc836652a4
SHA256: 067a02bce61177fdd0830e54957cf178792005d71173a600fadd067d0637f41f
Section: net
Priority: optional
Homepage: http://zenoh.io
Description: Zenoh: The Zero Overhead Pub/Sub/Query Protocol.
 <img
 src="https://raw.githubusercontent.com/eclipse-zenoh/zenoh/master/zenoh-dragon.png"
 height="150">
 .
 [![CI](https://github.com/eclipse-zenoh/zenoh/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/eclipse-zenoh/zenoh/actions?query=workflow%3ACI+branch%3Amain++)
 [![Documentation
 Status](https://readthedocs.org/projects/zenoh-rust/badge/?version=latest)](https://zenoh-rust.readthedocs.io/en/latest/?badge=latest)
 [![codecov](https://codecov.io/github/eclipse-zenoh/zenoh/branch/main/graph/badge.svg?token=F8T4C8WPZD)](https://codecov.io/github/eclipse-zenoh/zenoh)
 [![Discussion](https://img.shields.io/badge/discussion-on%20github-blue)](https://github.com/eclipse-zenoh/roadmap/discussions)
 [![Discord](https://img.shields.io/badge/chat-on%20discord-blue)](https://discord.gg/2GJ958VuHs)
 [![License](https://img.shields.io/badge/License-EPL%202.0-blue)](https://choosealicense.com/licenses/epl-2.0/)
 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
 .
 # Eclipse Zenoh
 .
 Eclipse Zenoh: Zero Overhead Pub/Sub, Store/Query and Compute.
 .
 Zenoh (pronounce _/zeno/_) unifies data in motion, data at rest and
 computations. It carefully blends traditional pub/sub with geo-distributed
 storages, 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](http://zenoh.io) for more information and
 [installation
 instructions](https://zenoh.io/docs/getting-started/installation/).
 .
 See also the [roadmap](https://github.com/eclipse-zenoh/roadmap) for more
 detailed technical information.
 .
 # Zenoh router
 .
 `zenohd` is a daemon router whose purpose is to build Zenoh infrastructure.
 Technically, `zenohd` is the Zenoh runtime with a plugin manager.
 .
 ## Command Line Arguments
 .
 ### Core Options
 .
 - **`-c, --config <PATH>`**
   The configuration file. Currently, this file must be a valid JSON5 or YAML
 file.
 .
   The commented example configuration file for `zenohd` is in the
 [documentation](https://docs.rs/zenoh/latest/zenoh/config/struct.Config.html).
 .
 - **`-l, --listen <ENDPOINT>`**
   Locators on which this router will listen for incoming sessions. Repeat this
 option to open several listeners.
 .
 - **`-e, --connect <ENDPOINT>`**
   A peer locator this router will try to connect to. Repeat this option to
 connect to several peers.
 .
 - **`-i, --id <ID>`**
   The identifier (as a hexadecimal string, with an odd number of chars - e.g.:
 A0B23...) that zenohd must use. If not set, a random unsigned 128-bit integer
 will be used. WARNING: this identifier must be unique in the system and must be
 16 bytes maximum (32 chars)!
 .
 ### Plugin Management
 .
 - **`-P, --plugin <PLUGIN>`**
   A plugin that MUST be loaded. You can give just the name of the plugin;
 zenohd will search for a library named `libzenoh_plugin_<name>.so` (exact name
 depending on the OS). Alternatively, you can provide a string in this format:
 `<plugin_name>:<library_path>`. Repeat this option to load several plugins. If
 loading fails, zenohd will exit.
 .
 - **`--plugin-search-dir <PATH>`**
   Directory in which to search for plugin libraries to load. Repeat this option
 to specify several search directories.
 .
 - **`--rest-http-port <SOCKET>`**
   Enables REST API plugin and configures HTTP interface for it. Accepted
 values:
   - a port number
   - a string with format `<local_ip>:<port_number>` (to bind the HTTP server to
 a specific interface)
 .
 ### Behavioral Options
 .
 - **`--no-timestamp`**
   By default, zenohd adds a HLC-generated Timestamp to each routed Data if
 there isn't already one. This option disables this feature.
 .
 - **`--no-multicast-scouting`**
   By default, zenohd replies to multicast scouting messages to be discovered by
 peers and clients. This option disables this feature.
 .
 ### Advanced Configuration
 .
 - **`--cfg <CFG>`**
   Allows arbitrary configuration changes as colon-separated KEY:VALUE pairs,
 where the empty key is used to represent the entire configuration:
   - KEY must be a valid config path, or an empty string if the whole
 configuration is defined
   - VALUE must be a valid JSON5 string that can be deserialized to the expected
 type for the KEY field
 .
   Examples:
   - `--cfg='startup/subscribe:["demo/**"]'`
   -
 `--cfg='plugins/storage_manager/storages/demo:{key_expr:"demo/example/**",volume:"memory"}'`
   - `--cfg=':{metadata:{name:"My
 App"},adminspace:{enabled:true,permissions:{read:true,write:true}}'`
 .
 - **`--adminspace-permissions <[r|w|rw|none]>`**
   Configure the read and/or write permissions on the admin space. Default is
 read only.
 .
 ### Help & Version
 .
 - **`-h, --help`**
   Print help (see a summary with '-h').
 .
 - **`-V, --version`**
   Print version.
 .
 ## Plugins
 .
 > [!WARNING]
 > As Rust doesn't have a stable ABI, plugins should be built with the exact
 same Rust version as `zenohd`, and should use the same version (or commit
 number) of the `zenoh` dependency as `zenohd` with the same set of features. A
 plugin compiled with a different Rust version or with a different set of
 `zenoh` crate features will be rejected when `zenohd` attempts to load it.
 Otherwise, incompatibilities in memory mapping of structures shared between
 `zenohd` and the library could lead to a `"SIGSEGV"` crash.
 .
 The Zenoh router is delivered with two statically linked plugins:
 .
 - [zenoh-plugin-rest](../plugins/zenoh-plugin-rest) is the plugin exposing a
 [REST API](https://zenoh.io/docs/apis/rest/)
 .
 - [zenoh-plugin-storage-manager](../plugins/zenoh-plugin-storage-manager) is
 the plugin that manages
   [backends and
 storages](https://zenoh.io/docs/manual/plugin-storage-manager/#backends-and-volumes)
 .
 There are other plugins in independent repositories:
 .
 - [zenoh-plugin-dds](https://github.com/eclipse-zenoh/zenoh-plugin-dds/)
 .
   Bridges [DDS](https://www.dds-foundation.org/) with Zenoh.
 .
 -
 [zenoh-plugin-ros2dds](https://github.com/eclipse-zenoh/zenoh-plugin-ros2dds/)
 .
   Bridges all [ROS 2](https://ros.org/) communications using
 [DDS](https://www.dds-foundation.org/) over Zenoh.
 .
 -
 [zenoh-plugin-webserver](https://github.com/eclipse-zenoh/zenoh-plugin-webserver/)
 .
   Implements an HTTP server mapping URLs to zenoh keys.
 .
 - [zenoh-plugin-remote-api](https://github.com/eclipse-zenoh/zenoh-ts/)
 .
   The WebSocket server supporting TypeScript API

Package: zenohd
Version: 1.7.1
Architecture: arm64
Maintainer: zenoh-dev@eclipse.org
Installed-Size: 12847
Filename: 1.7.1/zenohd_1.7.1_arm64.deb
Size: 3576026
MD5sum: b85153d50dcde497f4fc3c340c98603f
SHA1: 308d88fa113cb6beec852c65d9fa373a0448ecfc
SHA256: 8bd3b14f9053e52805e6bd59950ce84c83cd355a76c6db39bced3df0b4b1f50c
Section: net
Priority: optional
Homepage: http://zenoh.io
Description: Zenoh: The Zero Overhead Pub/Sub/Query Protocol.
 <img
 src="https://raw.githubusercontent.com/eclipse-zenoh/zenoh/master/zenoh-dragon.png"
 height="150">
 .
 [![CI](https://github.com/eclipse-zenoh/zenoh/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/eclipse-zenoh/zenoh/actions?query=workflow%3ACI+branch%3Amain++)
 [![Documentation
 Status](https://readthedocs.org/projects/zenoh-rust/badge/?version=latest)](https://zenoh-rust.readthedocs.io/en/latest/?badge=latest)
 [![codecov](https://codecov.io/github/eclipse-zenoh/zenoh/branch/main/graph/badge.svg?token=F8T4C8WPZD)](https://codecov.io/github/eclipse-zenoh/zenoh)
 [![Discussion](https://img.shields.io/badge/discussion-on%20github-blue)](https://github.com/eclipse-zenoh/roadmap/discussions)
 [![Discord](https://img.shields.io/badge/chat-on%20discord-blue)](https://discord.gg/2GJ958VuHs)
 [![License](https://img.shields.io/badge/License-EPL%202.0-blue)](https://choosealicense.com/licenses/epl-2.0/)
 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
 .
 # Eclipse Zenoh
 .
 Eclipse Zenoh: Zero Overhead Pub/Sub, Store/Query and Compute.
 .
 Zenoh (pronounce _/zeno/_) unifies data in motion, data at rest and
 computations. It carefully blends traditional pub/sub with geo-distributed
 storages, 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](http://zenoh.io) for more information and
 [installation
 instructions](https://zenoh.io/docs/getting-started/installation/).
 .
 See also the [roadmap](https://github.com/eclipse-zenoh/roadmap) for more
 detailed technical information.
 .
 # Zenoh router
 .
 `zenohd` is a daemon router whose purpose is to build Zenoh infrastructure.
 Technically, `zenohd` is the Zenoh runtime with a plugin manager.
 .
 ## Command Line Arguments
 .
 ### Core Options
 .
 - **`-c, --config <PATH>`**
   The configuration file. Currently, this file must be a valid JSON5 or YAML
 file.
 .
   The commented example configuration file for `zenohd` is in the
 [documentation](https://docs.rs/zenoh/latest/zenoh/config/struct.Config.html).
 .
 - **`-l, --listen <ENDPOINT>`**
   Locators on which this router will listen for incoming sessions. Repeat this
 option to open several listeners.
 .
 - **`-e, --connect <ENDPOINT>`**
   A peer locator this router will try to connect to. Repeat this option to
 connect to several peers.
 .
 - **`-i, --id <ID>`**
   The identifier (as a hexadecimal string, with an odd number of chars - e.g.:
 A0B23...) that zenohd must use. If not set, a random unsigned 128-bit integer
 will be used. WARNING: this identifier must be unique in the system and must be
 16 bytes maximum (32 chars)!
 .
 ### Plugin Management
 .
 - **`-P, --plugin <PLUGIN>`**
   A plugin that MUST be loaded. You can give just the name of the plugin;
 zenohd will search for a library named `libzenoh_plugin_<name>.so` (exact name
 depending on the OS). Alternatively, you can provide a string in this format:
 `<plugin_name>:<library_path>`. Repeat this option to load several plugins. If
 loading fails, zenohd will exit.
 .
 - **`--plugin-search-dir <PATH>`**
   Directory in which to search for plugin libraries to load. Repeat this option
 to specify several search directories.
 .
 - **`--rest-http-port <SOCKET>`**
   Enables REST API plugin and configures HTTP interface for it. Accepted
 values:
   - a port number
   - a string with format `<local_ip>:<port_number>` (to bind the HTTP server to
 a specific interface)
 .
 ### Behavioral Options
 .
 - **`--no-timestamp`**
   By default, zenohd adds a HLC-generated Timestamp to each routed Data if
 there isn't already one. This option disables this feature.
 .
 - **`--no-multicast-scouting`**
   By default, zenohd replies to multicast scouting messages to be discovered by
 peers and clients. This option disables this feature.
 .
 ### Advanced Configuration
 .
 - **`--cfg <CFG>`**
   Allows arbitrary configuration changes as colon-separated KEY:VALUE pairs,
 where the empty key is used to represent the entire configuration:
   - KEY must be a valid config path, or an empty string if the whole
 configuration is defined
   - VALUE must be a valid JSON5 string that can be deserialized to the expected
 type for the KEY field
 .
   Examples:
   - `--cfg='startup/subscribe:["demo/**"]'`
   -
 `--cfg='plugins/storage_manager/storages/demo:{key_expr:"demo/example/**",volume:"memory"}'`
   - `--cfg=':{metadata:{name:"My
 App"},adminspace:{enabled:true,permissions:{read:true,write:true}}'`
 .
 - **`--adminspace-permissions <[r|w|rw|none]>`**
   Configure the read and/or write permissions on the admin space. Default is
 read only.
 .
 ### Help & Version
 .
 - **`-h, --help`**
   Print help (see a summary with '-h').
 .
 - **`-V, --version`**
   Print version.
 .
 ## Plugins
 .
 > [!WARNING]
 > As Rust doesn't have a stable ABI, plugins should be built with the exact
 same Rust version as `zenohd`, and should use the same version (or commit
 number) of the `zenoh` dependency as `zenohd` with the same set of features. A
 plugin compiled with a different Rust version or with a different set of
 `zenoh` crate features will be rejected when `zenohd` attempts to load it.
 Otherwise, incompatibilities in memory mapping of structures shared between
 `zenohd` and the library could lead to a `"SIGSEGV"` crash.
 .
 The Zenoh router is delivered with two statically linked plugins:
 .
 - [zenoh-plugin-rest](../plugins/zenoh-plugin-rest) is the plugin exposing a
 [REST API](https://zenoh.io/docs/apis/rest/)
 .
 - [zenoh-plugin-storage-manager](../plugins/zenoh-plugin-storage-manager) is
 the plugin that manages
   [backends and
 storages](https://zenoh.io/docs/manual/plugin-storage-manager/#backends-and-volumes)
 .
 There are other plugins in independent repositories:
 .
 - [zenoh-plugin-dds](https://github.com/eclipse-zenoh/zenoh-plugin-dds/)
 .
   Bridges [DDS](https://www.dds-foundation.org/) with Zenoh.
 .
 -
 [zenoh-plugin-ros2dds](https://github.com/eclipse-zenoh/zenoh-plugin-ros2dds/)
 .
   Bridges all [ROS 2](https://ros.org/) communications using
 [DDS](https://www.dds-foundation.org/) over Zenoh.
 .
 -
 [zenoh-plugin-webserver](https://github.com/eclipse-zenoh/zenoh-plugin-webserver/)
 .
   Implements an HTTP server mapping URLs to zenoh keys.
 .
 - [zenoh-plugin-remote-api](https://github.com/eclipse-zenoh/zenoh-ts/)
 .
   The WebSocket server supporting TypeScript API

Package: zenohd
Version: 1.7.1
Architecture: amd64
Maintainer: zenoh-dev@eclipse.org
Installed-Size: 14399
Depends: libc6 (>= 2.34)
Filename: 1.7.1/zenohd_1.7.1_amd64.deb
Size: 4017554
MD5sum: 9628a4afbc5bde5eecf07c0c3042262d
SHA1: d887c867714e034311e78340d990a33c5542b3e2
SHA256: f29ebe8092231224d2edeaae8e7cbef89f01ff1574ece0579c836f98b8f0c402
Section: net
Priority: optional
Homepage: http://zenoh.io
Description: Zenoh: The Zero Overhead Pub/Sub/Query Protocol.
 <img
 src="https://raw.githubusercontent.com/eclipse-zenoh/zenoh/master/zenoh-dragon.png"
 height="150">
 .
 [![CI](https://github.com/eclipse-zenoh/zenoh/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/eclipse-zenoh/zenoh/actions?query=workflow%3ACI+branch%3Amain++)
 [![Documentation
 Status](https://readthedocs.org/projects/zenoh-rust/badge/?version=latest)](https://zenoh-rust.readthedocs.io/en/latest/?badge=latest)
 [![codecov](https://codecov.io/github/eclipse-zenoh/zenoh/branch/main/graph/badge.svg?token=F8T4C8WPZD)](https://codecov.io/github/eclipse-zenoh/zenoh)
 [![Discussion](https://img.shields.io/badge/discussion-on%20github-blue)](https://github.com/eclipse-zenoh/roadmap/discussions)
 [![Discord](https://img.shields.io/badge/chat-on%20discord-blue)](https://discord.gg/2GJ958VuHs)
 [![License](https://img.shields.io/badge/License-EPL%202.0-blue)](https://choosealicense.com/licenses/epl-2.0/)
 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
 .
 # Eclipse Zenoh
 .
 Eclipse Zenoh: Zero Overhead Pub/Sub, Store/Query and Compute.
 .
 Zenoh (pronounce _/zeno/_) unifies data in motion, data at rest and
 computations. It carefully blends traditional pub/sub with geo-distributed
 storages, 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](http://zenoh.io) for more information and
 [installation
 instructions](https://zenoh.io/docs/getting-started/installation/).
 .
 See also the [roadmap](https://github.com/eclipse-zenoh/roadmap) for more
 detailed technical information.
 .
 # Zenoh router
 .
 `zenohd` is a daemon router whose purpose is to build Zenoh infrastructure.
 Technically, `zenohd` is the Zenoh runtime with a plugin manager.
 .
 ## Command Line Arguments
 .
 ### Core Options
 .
 - **`-c, --config <PATH>`**
   The configuration file. Currently, this file must be a valid JSON5 or YAML
 file.
 .
   The commented example configuration file for `zenohd` is in the
 [documentation](https://docs.rs/zenoh/latest/zenoh/config/struct.Config.html).
 .
 - **`-l, --listen <ENDPOINT>`**
   Locators on which this router will listen for incoming sessions. Repeat this
 option to open several listeners.
 .
 - **`-e, --connect <ENDPOINT>`**
   A peer locator this router will try to connect to. Repeat this option to
 connect to several peers.
 .
 - **`-i, --id <ID>`**
   The identifier (as a hexadecimal string, with an odd number of chars - e.g.:
 A0B23...) that zenohd must use. If not set, a random unsigned 128-bit integer
 will be used. WARNING: this identifier must be unique in the system and must be
 16 bytes maximum (32 chars)!
 .
 ### Plugin Management
 .
 - **`-P, --plugin <PLUGIN>`**
   A plugin that MUST be loaded. You can give just the name of the plugin;
 zenohd will search for a library named `libzenoh_plugin_<name>.so` (exact name
 depending on the OS). Alternatively, you can provide a string in this format:
 `<plugin_name>:<library_path>`. Repeat this option to load several plugins. If
 loading fails, zenohd will exit.
 .
 - **`--plugin-search-dir <PATH>`**
   Directory in which to search for plugin libraries to load. Repeat this option
 to specify several search directories.
 .
 - **`--rest-http-port <SOCKET>`**
   Enables REST API plugin and configures HTTP interface for it. Accepted
 values:
   - a port number
   - a string with format `<local_ip>:<port_number>` (to bind the HTTP server to
 a specific interface)
 .
 ### Behavioral Options
 .
 - **`--no-timestamp`**
   By default, zenohd adds a HLC-generated Timestamp to each routed Data if
 there isn't already one. This option disables this feature.
 .
 - **`--no-multicast-scouting`**
   By default, zenohd replies to multicast scouting messages to be discovered by
 peers and clients. This option disables this feature.
 .
 ### Advanced Configuration
 .
 - **`--cfg <CFG>`**
   Allows arbitrary configuration changes as colon-separated KEY:VALUE pairs,
 where the empty key is used to represent the entire configuration:
   - KEY must be a valid config path, or an empty string if the whole
 configuration is defined
   - VALUE must be a valid JSON5 string that can be deserialized to the expected
 type for the KEY field
 .
   Examples:
   - `--cfg='startup/subscribe:["demo/**"]'`
   -
 `--cfg='plugins/storage_manager/storages/demo:{key_expr:"demo/example/**",volume:"memory"}'`
   - `--cfg=':{metadata:{name:"My
 App"},adminspace:{enabled:true,permissions:{read:true,write:true}}'`
 .
 - **`--adminspace-permissions <[r|w|rw|none]>`**
   Configure the read and/or write permissions on the admin space. Default is
 read only.
 .
 ### Help & Version
 .
 - **`-h, --help`**
   Print help (see a summary with '-h').
 .
 - **`-V, --version`**
   Print version.
 .
 ## Plugins
 .
 > [!WARNING]
 > As Rust doesn't have a stable ABI, plugins should be built with the exact
 same Rust version as `zenohd`, and should use the same version (or commit
 number) of the `zenoh` dependency as `zenohd` with the same set of features. A
 plugin compiled with a different Rust version or with a different set of
 `zenoh` crate features will be rejected when `zenohd` attempts to load it.
 Otherwise, incompatibilities in memory mapping of structures shared between
 `zenohd` and the library could lead to a `"SIGSEGV"` crash.
 .
 The Zenoh router is delivered with two statically linked plugins:
 .
 - [zenoh-plugin-rest](../plugins/zenoh-plugin-rest) is the plugin exposing a
 [REST API](https://zenoh.io/docs/apis/rest/)
 .
 - [zenoh-plugin-storage-manager](../plugins/zenoh-plugin-storage-manager) is
 the plugin that manages
   [backends and
 storages](https://zenoh.io/docs/manual/plugin-storage-manager/#backends-and-volumes)
 .
 There are other plugins in independent repositories:
 .
 - [zenoh-plugin-dds](https://github.com/eclipse-zenoh/zenoh-plugin-dds/)
 .
   Bridges [DDS](https://www.dds-foundation.org/) with Zenoh.
 .
 -
 [zenoh-plugin-ros2dds](https://github.com/eclipse-zenoh/zenoh-plugin-ros2dds/)
 .
   Bridges all [ROS 2](https://ros.org/) communications using
 [DDS](https://www.dds-foundation.org/) over Zenoh.
 .
 -
 [zenoh-plugin-webserver](https://github.com/eclipse-zenoh/zenoh-plugin-webserver/)
 .
   Implements an HTTP server mapping URLs to zenoh keys.
 .
 - [zenoh-plugin-remote-api](https://github.com/eclipse-zenoh/zenoh-ts/)
 .
   The WebSocket server supporting TypeScript API

Package: zenohd
Version: 1.7.1
Architecture: armhf
Maintainer: zenoh-dev@eclipse.org
Installed-Size: 13472
Filename: 1.7.1/zenohd_1.7.1_armhf.deb
Size: 3766018
MD5sum: 7729cc1c42b842502e82614cd6a4db1a
SHA1: 5f8046dc640c213a5ac8872f012254ee41d3d1bd
SHA256: 14f1e305ef2491063c70151bd9defe77a986bb491ece427448e10c6652342be7
Section: net
Priority: optional
Homepage: http://zenoh.io
Description: Zenoh: The Zero Overhead Pub/Sub/Query Protocol.
 <img
 src="https://raw.githubusercontent.com/eclipse-zenoh/zenoh/master/zenoh-dragon.png"
 height="150">
 .
 [![CI](https://github.com/eclipse-zenoh/zenoh/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/eclipse-zenoh/zenoh/actions?query=workflow%3ACI+branch%3Amain++)
 [![Documentation
 Status](https://readthedocs.org/projects/zenoh-rust/badge/?version=latest)](https://zenoh-rust.readthedocs.io/en/latest/?badge=latest)
 [![codecov](https://codecov.io/github/eclipse-zenoh/zenoh/branch/main/graph/badge.svg?token=F8T4C8WPZD)](https://codecov.io/github/eclipse-zenoh/zenoh)
 [![Discussion](https://img.shields.io/badge/discussion-on%20github-blue)](https://github.com/eclipse-zenoh/roadmap/discussions)
 [![Discord](https://img.shields.io/badge/chat-on%20discord-blue)](https://discord.gg/2GJ958VuHs)
 [![License](https://img.shields.io/badge/License-EPL%202.0-blue)](https://choosealicense.com/licenses/epl-2.0/)
 [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
 .
 # Eclipse Zenoh
 .
 Eclipse Zenoh: Zero Overhead Pub/Sub, Store/Query and Compute.
 .
 Zenoh (pronounce _/zeno/_) unifies data in motion, data at rest and
 computations. It carefully blends traditional pub/sub with geo-distributed
 storages, 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](http://zenoh.io) for more information and
 [installation
 instructions](https://zenoh.io/docs/getting-started/installation/).
 .
 See also the [roadmap](https://github.com/eclipse-zenoh/roadmap) for more
 detailed technical information.
 .
 # Zenoh router
 .
 `zenohd` is a daemon router whose purpose is to build Zenoh infrastructure.
 Technically, `zenohd` is the Zenoh runtime with a plugin manager.
 .
 ## Command Line Arguments
 .
 ### Core Options
 .
 - **`-c, --config <PATH>`**
   The configuration file. Currently, this file must be a valid JSON5 or YAML
 file.
 .
   The commented example configuration file for `zenohd` is in the
 [documentation](https://docs.rs/zenoh/latest/zenoh/config/struct.Config.html).
 .
 - **`-l, --listen <ENDPOINT>`**
   Locators on which this router will listen for incoming sessions. Repeat this
 option to open several listeners.
 .
 - **`-e, --connect <ENDPOINT>`**
   A peer locator this router will try to connect to. Repeat this option to
 connect to several peers.
 .
 - **`-i, --id <ID>`**
   The identifier (as a hexadecimal string, with an odd number of chars - e.g.:
 A0B23...) that zenohd must use. If not set, a random unsigned 128-bit integer
 will be used. WARNING: this identifier must be unique in the system and must be
 16 bytes maximum (32 chars)!
 .
 ### Plugin Management
 .
 - **`-P, --plugin <PLUGIN>`**
   A plugin that MUST be loaded. You can give just the name of the plugin;
 zenohd will search for a library named `libzenoh_plugin_<name>.so` (exact name
 depending on the OS). Alternatively, you can provide a string in this format:
 `<plugin_name>:<library_path>`. Repeat this option to load several plugins. If
 loading fails, zenohd will exit.
 .
 - **`--plugin-search-dir <PATH>`**
   Directory in which to search for plugin libraries to load. Repeat this option
 to specify several search directories.
 .
 - **`--rest-http-port <SOCKET>`**
   Enables REST API plugin and configures HTTP interface for it. Accepted
 values:
   - a port number
   - a string with format `<local_ip>:<port_number>` (to bind the HTTP server to
 a specific interface)
 .
 ### Behavioral Options
 .
 - **`--no-timestamp`**
   By default, zenohd adds a HLC-generated Timestamp to each routed Data if
 there isn't already one. This option disables this feature.
 .
 - **`--no-multicast-scouting`**
   By default, zenohd replies to multicast scouting messages to be discovered by
 peers and clients. This option disables this feature.
 .
 ### Advanced Configuration
 .
 - **`--cfg <CFG>`**
   Allows arbitrary configuration changes as colon-separated KEY:VALUE pairs,
 where the empty key is used to represent the entire configuration:
   - KEY must be a valid config path, or an empty string if the whole
 configuration is defined
   - VALUE must be a valid JSON5 string that can be deserialized to the expected
 type for the KEY field
 .
   Examples:
   - `--cfg='startup/subscribe:["demo/**"]'`
   -
 `--cfg='plugins/storage_manager/storages/demo:{key_expr:"demo/example/**",volume:"memory"}'`
   - `--cfg=':{metadata:{name:"My
 App"},adminspace:{enabled:true,permissions:{read:true,write:true}}'`
 .
 - **`--adminspace-permissions <[r|w|rw|none]>`**
   Configure the read and/or write permissions on the admin space. Default is
 read only.
 .
 ### Help & Version
 .
 - **`-h, --help`**
   Print help (see a summary with '-h').
 .
 - **`-V, --version`**
   Print version.
 .
 ## Plugins
 .
 > [!WARNING]
 > As Rust doesn't have a stable ABI, plugins should be built with the exact
 same Rust version as `zenohd`, and should use the same version (or commit
 number) of the `zenoh` dependency as `zenohd` with the same set of features. A
 plugin compiled with a different Rust version or with a different set of
 `zenoh` crate features will be rejected when `zenohd` attempts to load it.
 Otherwise, incompatibilities in memory mapping of structures shared between
 `zenohd` and the library could lead to a `"SIGSEGV"` crash.
 .
 The Zenoh router is delivered with two statically linked plugins:
 .
 - [zenoh-plugin-rest](../plugins/zenoh-plugin-rest) is the plugin exposing a
 [REST API](https://zenoh.io/docs/apis/rest/)
 .
 - [zenoh-plugin-storage-manager](../plugins/zenoh-plugin-storage-manager) is
 the plugin that manages
   [backends and
 storages](https://zenoh.io/docs/manual/plugin-storage-manager/#backends-and-volumes)
 .
 There are other plugins in independent repositories:
 .
 - [zenoh-plugin-dds](https://github.com/eclipse-zenoh/zenoh-plugin-dds/)
 .
   Bridges [DDS](https://www.dds-foundation.org/) with Zenoh.
 .
 -
 [zenoh-plugin-ros2dds](https://github.com/eclipse-zenoh/zenoh-plugin-ros2dds/)
 .
   Bridges all [ROS 2](https://ros.org/) communications using
 [DDS](https://www.dds-foundation.org/) over Zenoh.
 .
 -
 [zenoh-plugin-webserver](https://github.com/eclipse-zenoh/zenoh-plugin-webserver/)
 .
   Implements an HTTP server mapping URLs to zenoh keys.
 .
 - [zenoh-plugin-remote-api](https://github.com/eclipse-zenoh/zenoh-ts/)
 .
   The WebSocket server supporting TypeScript API

