Lightweight Messaging Middleware

6 Pages

Asynchronous I/O

0MQ handles I/O asynchronously in background threads. So, when you issue a zmq_send(), that operation doesn’t really send the data; it places it in a queue, which a background thread will service (perform the network I/O). These background threads communicate with application threads using lock-free data structures. This means applications need no locks, semaphores, or other wait states: You’re able to control the number of I/O threads servicing your application when you initialize a socket.

Active Open Source Community

0MQ has a large, active community with interaction available via:

  • Website
  • Mailing lists
  • Internet Relay Chat (IRC) bug tracking
  • Project laboratory.

Multiple Language Support

Language bindings exist for:

  • Ada
  • Basic
  • C
  • Chicken Scheme
  • Common Lisp
  • C# (.NET & Mono)
  • C++
  • D
  • Erlang
  • Go
  • Haskell
  • Java
  • Lua
  • node.js
  • Objective-C
  • ooc
  • Perl
  • PHP
  • Python
  • Racket
  • Ruby
  • Tcl.

0MQ is available on multiple platforms, including Linux, Windows, Solaris, and OpenVMS.


While in its basic state, 0MQ is used to construct message-switching applications; the APIs can be used to create your own brokering mechanisms.

0MQ has a concept called devices, used to extend the operation, scale, or function of the messaging system you’re constructing. They tend to be used to connect a set of front-end sockets to a set of back-end sockets. They allow an application to be stretched over as many intermediate nodes as needed, and are placed in the topology where it makes sense for the application.

6 Pages