| .assets | ||
| .github | ||
| cbind | ||
| docs | ||
| examples | ||
| interop | ||
| libp2p | ||
| performance | ||
| tests | ||
| tools | ||
| .dockerignore | ||
| .git-blame-ignore-revs | ||
| .gitignore | ||
| .pinned | ||
| codecov.yml | ||
| config.nims | ||
| flake.lock | ||
| flake.nix | ||
| funding.json | ||
| libp2p.nim | ||
| libp2p.nimble | ||
| LICENSE-APACHEv2 | ||
| LICENSE-MIT | ||
| mkdocs.yml | ||
| nimdoc.cfg | ||
| README.md | ||
The Nim implementation of the libp2p Networking Stack.
Background
libp2p is a Peer-to-Peer networking stack, with implementations in multiple languages derived from the same specifications.
Building large scale peer-to-peer systems has been complex and difficult in the last 15 years and libp2p is a way to fix that. It strives to be a modular stack with secure defaults and useful protocols, while remaining open and extensible. This is a native Nim implementation, using chronos for asynchronous execution. It's used in production by a few projects.
Learn more about libp2p at libp2p.io and follow libp2p's documentation docs.libp2p.io.
Contribute
nim-libp2p is a great place to contribute. Your contribution will help drive thousands of decentralized nodes across networks worldwide.
The best part is that nim-libp2p has good first issues that are especially suited for newcomers. Your contributions will be guided by core maintainers, just like an internship expiriance but decentralized.
Jump into the contributing page to get started, nim-libp2p is expecting your contribution!
Install
The currently supported Nim versions are v2.0.16 and v2.2.6.
nimble install libp2p
You'll find the nim-libp2p documentation here. See examples for simple usage patterns.
Development
Read the development guide to get started with the project and testing.
Additional resources:
- Compile time flags - all available compile-time options
- Common hurdles - frequently encountered issues and solutions
Contributors
Thanks to everyone who has contributed to nim-libp2p. Your support and efforts are greatly appreciated.
Join the Conversation
Connect with other contributors in our community channel. Ask questions, share ideas, get support, and stay informed about the latest updates from the maintainers.
Users
nim-libp2p is used by:
- Nimbus, an Ethereum client
- nwaku, a decentralized messaging application
- nim-codex, a decentralized storage application
- (open a pull request if you want to be included here)
Stability
nim-libp2p has been used in production for many years in high-stake scenarios, so its core is considered stable. Some modules are more recent and less stable.
The versioning follows semver, with some additions:
- Some of libp2p procedures are marked as
.public., they will remain compatible during eachMAJORversion - The rest of the procedures are considered internal, and can change at any
MINORversion (but remain compatible for each newPATCH)
License
Licensed and distributed under either of
- MIT license: LICENSE-MIT or http://opensource.org/licenses/MIT
or
- Apache License, Version 2.0, (LICENSE-APACHEv2 or http://www.apache.org/licenses/LICENSE-2.0)
at your option. These files may not be copied, modified, or distributed except according to those terms.
Modules
List of packages modules implemented in nim-libp2p:
| Name | Description |
|---|---|
| Libp2p | |
| libp2p | The core of the project |
| connmanager | Connection manager |
| identify / push identify | Identify protocol |
| ping | Ping protocol |
| Transports | |
| libp2p-tcp | TCP transport |
| libp2p-ws | WebSocket & WebSocket Secure transport |
| libp2p-tor | Tor Transport |
| libp2p-quic | Quic Transport |
| libp2p-memory | Memory Transport |
| Secure Channels | |
| libp2p-noise | Noise secure channel |
| libp2p-plaintext | Plain Text for development purposes |
| Stream Multiplexers | |
| libp2p-mplex | MPlex multiplexer |
| libp2p-yamux | Yamux multiplexer |
| Data Types | |
| peer-id | Cryptographic identifiers |
| peer-store | Address book of known peers |
| multiaddress | Composable network addresses |
| signed-envelope | Signed generic data container |
| routing-record | Signed peer dialing informations |
| discovery manager | Discovery Manager |
| Utilities | |
| libp2p-crypto | Cryptographic backend |
| libp2p-crypto-secp256k1 | |
| Pubsub | |
| libp2p-pubsub | Pub-Sub generic interface |
| libp2p-floodsub | FloodSub implementation |
| libp2p-gossipsub | GossipSub implementation |