libp2p Documentation Portal

Welcome to the libp2p documentation portal! Whether you’re just learning how to build peer-to-peer systems with libp2p, want to dive into peer-to-peer concepts and solutions, or are looking for detailed reference information, this is the place to start.

  • Introduction
  • Welcome to the official libp2p documentation hub! Whether you’re just starting to dive into peer-to-peer concepts and solutions, learning how to build peer-to-peer systems with libp2p, or are looking for detailed reference information, this is the place to start. What is libp2p? libp2p is a modular system of protocols, specifications and libraries that enable the development of peer-to-peer network applications. A p2p networking stack Because of libp2p’s peer-to-peer and distributed architecture, most of the needs and considerations that the current web was built on no longer apply.

  • Core Components
  • libp2p covers a lot of ground, and may involve unfamiliar terminology and concepts. This section goes over the foundational concepts involved in libp2p. Transport NAT Traversal Secure Communication Circuit Relay Protocols All about Peers Content Routing Peer Routing Addressing Security Considerations Publish/Subscribe Stream Multiplexing This section is incomplete, and many of the articles are stubs.

  • Tutorials
  • Here you’ll find step-by-step tutorials for using libp2p in your favorite languages. Getting Started This tutorial covers setting up your development environment, getting familiar with some libp2p basics, and implementing a super simple node that can send and receive “ping” messages.

  • Examples
  • Here’s where to find working examples illustrating some of libp2p’s key features for each of its main implementations: For go, see the go-libp2p-examples repo. For javascript, see the /examples directory of the js-libp2p repo. For rust, see /examples directory of the rust-libp2p repo.

  • Reference
  • This section contains in-depth reference material, including a glossary with definitions of libp2p terminology. Specifications & Planning While libp2p has several implementations, it is fundamentally a set of protocols for peer identity, discover, routing, transport and more. See the specifications section for details. Implementations At the core of libp2p is a set of specifications, which together form the definition for what libp2p is in the abstract and what makes a “correct” libp2p implementation.

  • Community
  • Get in touch with other members of the libp2p community who are building tools and applications with libp2p! You can ask questions, discuss new ideas, or get support for problems at libp2p discussion forums, but you can also hop on IRC for a quick chat. See the other links in the community section for more information about meetings, events, apps people are building, and more. Information about contributing to libp2p and about other software projects in the community are also hosted here.

  • Get Involved
  • So you want to contribute to libp2p and the peer-to-peer ecosystem? Here is a quick listing of things we need help with and how you can get started. Even if what you want to do is not listed here, we probably accept contributions for it! If you’re unsure, please open a issue. Areas of contribution Areas of contribution Code Documentation Support Testing Design Issues / Triaging Community Applications Protocol Design Research Code libp2p and its sister-projects are big, with lots of code written in multiple languages.

  • Help & Discussion
  • We love talking about libp2p, and we’d be happy to have you in the mix. Visit our discussion forums to ask questions about using libp2p, discuss exciting research, and stay up to date with important announcments. We also often hang out on Discord and IRC. While Discord and IRC are great places for live chats, remember that discussions can get lost in a sea of messages. For long-lived discussion & support, the discussion forums are the way to go.

This section is incomplete, and many of the articles are stubs. To help fill in the gaps, please see the issues linked in each article to add your input and help us prioritize the outstanding work.

libp2p began as part of the IPFS project, and is still an essential component of IPFS. As such, libp2p composes well with the abstractions and tools provided by other projects in the IPFS “family”. Check their individual sites for specific information and references:

  • IPFS is the InterPlanetary File System, which uses libp2p as its networking layer.
  • Multiformats is a variety of self-describing data formats.
  • IPLD is a set of tools for describing links between content-addressed data, like IPFS files, Git commits, or Ethereum blocks.
  • The Permissive License Stack is a licensing strategy for software development that embraces open-source values.