Please see here for an important message for the people of Russia.
Mangos™ is an implementation in pure Go of the SP
(Scalability Protocols) messaging system.
These are colloquially known as nanomsg.
NOTE: The import path has changed! Please change any references to
go.nanomsg.org/mangos/v3. The old v2 imports will still work for old applications, provided that a sufficiently modern version of Go is used. However, no further work will be done on earlier versions. Earlier versions will still inter-operate with this version, except that within the same process theinproctransport can only be used by consumers using the same version of mangos.
The modern C implementation of the SP protocols is available as NNG™.
The original implementation of the SP protocols is available as nanomsg™.
Generally (modulo a few caveats) all of these implementations can inter-operate.
The design is intended to make it easy to add new transports,
as well as new topologies (protocols in SP parlance.)
At present, all the Req/Rep, Pub/Sub, Pair, Bus, Push/Pull, and Surveyor/Respondent patterns are supported. This project also supports an experimental protocol called Star.
Supported transports include TCP, UDP, DTLS, inproc, UNIX domain sockets, Windows named pipes, WebSocket, WebSocket/TLS and TLS.
The DTLS transport supports NNG-compatible
dtls://, dtls4://, and dtls6:// endpoints using Pion DTLS 1.2 and 1.3.
It uses mangos.OptionDTLSConfig for certificates and authentication policy.
DTLS currently depends on Pion v4.0.0-rc.7, a prerelease whose public option
types are used by the configuration API. DTLS 1.3 requires ECDSA keys or PSK;
RSA-key endpoints must be restricted to DTLS 1.2. Ed25519-signed certificate
chains are not currently supported. See the
DTLS certificate limitations
before choosing certificates for deployment.
Use unix://PATH for AF_UNIX sockets on POSIX systems or Windows systems with
AF_UNIX support, and winpipe://NAME for Windows named pipes. The ipc://
scheme remains a platform alias: it uses UNIX domain sockets on POSIX and named
pipes on Windows. Applications using ipc:// continue to work unchanged.
Import transport/unix or transport/winpipe to enable the explicit transport,
transport/ipc to enable the platform alias, or transport/all to enable all
available transports. The options in transport/ipc remain compatible with
the corresponding options in transport/unix and transport/winpipe.
Basic interoperability with nanomsg and NNG has been verified (you can do
so yourself with nanocat and macat) for all protocols and transports
that NNG and nanomsg support, except for the ZeroTier transport and the PAIRv1
protocol, which are only supported in NNG at this time.
There are a number of projects that use these products together.
For API documentation, see https://pkg.go.dev/go.nanomsg.org/mangos/v3.
This package supports internal self tests, which can be run in the idiomatic Go way. (Note that most of the tests are in a test subdirectory.)
$ go test go.nanomsg.org/mangos/v3/...
From a checkout, run the full race suite and static checks with:
$ go test -race ./...
$ go vet ./...
There are also internal benchmarks available:
$ go test -bench=. go.nanomsg.org/mangos/v3/test
Staysail Systems, Inc. offers commercial support for mangos.
Mangos should run on any reasonable platform, but we officially follow the same support matrix as Go - meaning only the most recent release of Go, and the release preceding it are guaranteed support. Having said that, we generally will attempt not to break earlier versions of Go intentionally.
Go 1.26 or later is required by the Windows named-pipe transport dependency.
Some examples are posted in the directories under examples/ in this project.
These examples are rewrites (in Go) of Tim Dysinger's Getting Started with Nanomsg.
Running go doc in the example directories will yield information about how
to run each example program.
Enjoy!
Copyright 2026 The Mangos Authors
mangos™, Nanomsg™ and NNG™ are trademarks of Garrett D'Amore.