8 releases

0.3.5 Jan 15, 2024
0.3.4 Nov 1, 2023
0.3.3 Dec 27, 2021
0.3.0 Oct 29, 2021
0.1.0-pre Dec 18, 2014

#82 in Network programming

Download history 880/week @ 2023-12-23 1219/week @ 2023-12-30 1433/week @ 2024-01-06 1606/week @ 2024-01-13 1424/week @ 2024-01-20 1722/week @ 2024-01-27 1383/week @ 2024-02-03 1540/week @ 2024-02-10 1616/week @ 2024-02-17 1797/week @ 2024-02-24 1929/week @ 2024-03-02 1741/week @ 2024-03-09 1452/week @ 2024-03-16 1650/week @ 2024-03-23 2192/week @ 2024-03-30 1371/week @ 2024-04-06

6,887 downloads per month
Used in 6 crates

MIT license

3.5K SLoC

zmq.rs - A native Rust implementation of ZeroMQ

DISCLAIMER: The codebase is very much a work in progress and feature incomplete. DO NOT USE IN PRODUCTION

ZeroMQ is a high-performance asynchronous messaging library that provides many popular messaging patterns for many transport types. They look and feel like Berkeley style sockets, but are fault tolerant and easier to use. This project aims to provide a native rust alternative to the reference implementation, and leverage Rust's async ecosystem.

Current status

A basic ZMTP implementation is working, but is not yet fully compliant to the spec. Integration tests against the reference implementation are also missing. External APIs are still subject to change - there are no semver or stability guarantees at the moment.

Supported transport types:

We plan to support most of the basic ZMQ sockets. The current list is as follows:

  • TCP
  • IPC (unix only)

Supported socket patterns:

We plan to support most of the basic ZMQ messaging patterns. The current list is as follows:

  • Request/Response (REQ, REP, DEALER, ROUTER)
  • Publish/Subscribe (PUB, SUB)
  • Pipeline (PUSH, PULL)


See the examples for some ways to get up and running quickly. You can also generate the documentation by doing cargo doc --open on the source code.

Choosing your async runtime

The project currently supports both tokio and async-std, controllable via feature flags. tokio is used by default. If you want to use async-std, you would disable the default features, and then select the async-std-runtime feature. For example in your Cargo.toml, you might specify the dependency as follows:

zeromq = { version = "*", default-features = false, features = ["async-std-runtime", "all-transport"] }

See the section about feature flags for more info.

Feature Flags

Feature flags provide a way to customize the functionality provided by this library. Refer to the cargo guide for more info.


  • (default) tokio-runtime: Use tokio as your async runtime.
  • async-std-runtime: Use async-std as your async runtime.
  • (default) all-transport: Enable all the *-transport flags
  • ipc-transport: Enable IPC as a transport mechanism
  • tcp-transport: Enable TCP as a transport mechanism


Contributions are welcome! See our issue tracker for a list of the things we need help with.


You can ask quesions in our Discord channel - https://discord.gg/pFXSqWtjQT


~263K SLoC