Gossipsub is an extensible baseline pubsub protocol, based on randomized topic meshes and gossip. It is a general purpose pubsub protocol with moderate amplification factors and good scaling properties. The protocol is designed to be extensible by more specialized routers, which may add protocol messages and gossip in order to provide behaviour optimized for specific application profiles.
If you are new to Gossipsub and/or PubSub in general, we recommend you to first:
- Read the Publish/Subscribe guide at docs.libp2p.io
- Watch the Scalable PubSub with GossipSub talk by Dimitris Vyzovitis
- gossipsub-v1.0: v1.0 of the gossipsub protocol. This is a revised specification, to use a more normative language. The original v1.0 specification is here, still a good read.
- gossipsub-v1.1: v1.1 of the gossipsub protocol.
- gossipsub-v1.2: v1.2 of the gossipsub protocol. This includes the aggregation of the IDONTWANT control messages to the specs.
- (not in use) episub: a research note on a protocol building on top of gossipsub to implement epidemic broadcast trees.
Legend: ✅ = complete, 🏗 = in progress, ❕ = not started yet
Name | v1.0 | v1.1 | v1.2 |
---|---|---|---|
go-libp2p-pubsub (Golang) | ✅ | ✅ | ✅ |
js-libp2p-gossipsub (JavaScript) | ✅ | ✅ | ✅ |
rust-libp2p (Rust) | ✅ | ✅ | ❔ |
py-libp2p (Python) | ✅ | 🏗 | ❔ |
jvm-libp2p (Java/Kotlin) | ✅ | 🏗 | ✅ |
nim-libp2p (Nim) | ✅ | 🏗 | ✅ |
Additional tooling:
- Simulator developed in Gerbil: vyzo/gerbil-simsub
- Formal specification developed in ACL2s: gossipsubfm/gossipsubfm