No description
Find a file
2025-12-31 13:48:57 +00:00
.assets Documentation (#716) 2022-07-01 20:19:57 +02:00
.github chore(kad): interop tests (#1902) 2025-12-15 18:01:43 +00:00
cbind feat(cbind): start/stop providing (#1977) 2025-12-28 15:43:51 -04:00
docs docs: Improve Development section visibility (#1994) 2025-12-31 13:48:57 +00:00
examples feat(cbind): pubsub (#1935) 2025-12-10 23:00:52 +00:00
interop test(interop): Autonatv2 test template (#1993) 2025-12-31 10:49:20 +00:00
libp2p ci(interop): use ipv6 (#1985) 2025-12-28 11:52:35 -04:00
performance ci(interop): use ipv6 (#1985) 2025-12-28 11:52:35 -04:00
tests test(interop): Autonatv2 test template (#1993) 2025-12-31 10:49:20 +00:00
tools test: report (#1912) 2025-11-25 17:37:17 +00:00
.dockerignore chore: reduce size of docker image (#1972) 2025-12-15 17:10:23 -04:00
.git-blame-ignore-revs chore: add .git-blame-ignore-revs (#1130) 2024-06-19 15:36:56 +02:00
.gitignore chore(kad): interop tests (#1902) 2025-12-15 18:01:43 +00:00
.pinned feat(transports): lsquic (#1876) 2025-12-15 10:18:44 -04:00
codecov.yml test(coverage): ignore tests (#1922) 2025-12-02 13:08:32 +00:00
config.nims chore: nimble config tidy (#1696) 2025-09-17 18:10:07 +00:00
flake.lock chore(ci): initial flake.nix file with dev shell 2025-07-21 19:14:26 +02:00
flake.nix chore: remove libp2p_quic_support compile flag, and openssl dependency (#1782) 2025-10-22 13:37:46 +00:00
funding.json Create funding.json (#1188) 2024-09-05 18:25:50 +02:00
libp2p.nim ci: license check (#1832) 2025-11-03 13:10:53 +00:00
libp2p.nimble docs: add common hurdles (#1991) 2025-12-29 18:41:34 +00:00
LICENSE-APACHEv2 Initialize travis and licenses. 2018-11-19 04:04:47 +02:00
LICENSE-MIT Initialize travis and licenses. 2018-11-19 04:04:47 +02:00
mkdocs.yml chore(discovery): remove unused discovery interface (#1890) 2025-11-21 08:34:12 -04:00
nimdoc.cfg Documentation (#716) 2022-07-01 20:19:57 +02:00
README.md docs: Improve Development section visibility (#1994) 2025-12-31 13:48:57 +00:00

nim-libp2p logo

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:

Contributors

Thanks to everyone who has contributed to nim-libp2p. Your support and efforts are greatly appreciated.

nim-libp2p contributors

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 each MAJOR version
  • The rest of the procedures are considered internal, and can change at any MINOR version (but remain compatible for each new PATCH)

License

Licensed and distributed under either of

or

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