Skip to content
nanomsgPublic

About

mangos is a pure Golang implementation of nanomsg's "Scalablilty Protocols"

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

761 stars

Watchers

21 watching

Forks

Latest commit

 

History

579 Commits

Folders and files

mangos™ v3

Stand With Ukraine Linux Windows macOS Coverage Discord Documentation License Version

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 the inproc transport 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.

Documentation

For API documentation, see https://pkg.go.dev/go.nanomsg.org/mangos/v3.

Testing

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

Commercial Support

Staysail Systems, Inc. offers commercial support for mangos.

Compatibility

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.

Examples

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.

About

mangos is a pure Golang implementation of nanomsg's "Scalablilty Protocols"

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

761 stars

Watchers

21 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages