Skip to main content

libp2p: The Python implementation of the libp2p networking stack

Project description

py-libp2p

py-libp2p hex logo

The Python implementation of the libp2p networking stack.

Discord PyPI version Python versions Build Status Docs build

py-libp2p has moved beyond its experimental roots and is steadily progressing toward production readiness. The core features are stable, and we’re focused on refining performance, expanding protocol support, and ensuring smooth interop with other libp2p implementations. We welcome contributions and real-world usage feedback to help us reach full production maturity.

Read more in the documentation on ReadTheDocs. View the release notes.

Maintainers

Currently maintained by @pacrob, @seetadev and @dhuseby. Please reach out to us for collaboration or active feedback. If you have questions, feel free to open a new discussion. We are also available on the libp2p Discord — join us at #py-libp2p sub-channel.

Feature Breakdown

py-libp2p aims for conformity with the standard libp2p modules. Below is a breakdown of the modules we have developed, are developing, and may develop in the future.

Legend: ✅: Done  🛠️: In Progress/Usable  🌱 Prototype/Unstable  ❌: Missing


Transports

Transport Status Source
libp2p-tcp source
libp2p-quic source
libp2p-websocket source
libp2p-webrtc-browser-to-server 🌱
libp2p-webrtc-private-to-private 🌱

NAT Traversal

NAT Traversal Status Source
libp2p-circuit-relay-v2 source
libp2p-autonat source
libp2p-hole-punching source

Secure Communication

Secure Communication Status Source
libp2p-noise source
libp2p-tls

Discovery

Discovery Status Source
bootstrap source
random-walk source
mdns-discovery source
rendezvous source

Peer Routing

Peer Routing Status Source
libp2p-kad-dht source

Publish/Subscribe

Publish/Subscribe Status Source
libp2p-floodsub source
libp2p-gossipsub source

Stream Muxers

Stream Muxers Status Source
libp2p-yamux source
libp2p-mplex source

Storage

Storage Status
libp2p-record

General Purpose Utilities & Datatypes

Utility/Datatype Status Source
libp2p-ping source
libp2p-peer source
libp2p-identify source

Explanation of Basic Two Node Communication

Core Concepts

(non-normative, useful for team notes, not a reference)

Several components of the libp2p stack take part when establishing a connection between two nodes:

  1. Host: a node in the libp2p network.
  2. Connection: the layer 3 connection between two nodes in a libp2p network.
  3. Transport: the component that creates a Connection, e.g. TCP, UDP, QUIC, etc.
  4. Streams: an abstraction on top of a Connection representing parallel conversations about different matters, each of which is identified by a protocol ID. Multiple streams are layered on top of a Connection via the Multiplexer.
  5. Multiplexer: a component that is responsible for wrapping messages sent on a stream with an envelope that identifies the stream they pertain to, normally via an ID. The multiplexer on the other unwraps the message and routes it internally based on the stream identification.
  6. Secure channel: optionally establishes a secure, encrypted, and authenticated channel over the Connection.
  7. Upgrader: a component that takes a raw layer 3 connection returned by the Transport, and performs the security and multiplexing negotiation to set up a secure, multiplexed channel on top of which Streams can be opened.

Communication between two hosts X and Y

(non-normative, useful for team notes, not a reference)

Initiate the connection: A host is simply a node in the libp2p network that is able to communicate with other nodes in the network. In order for X and Y to communicate with one another, one of the hosts must initiate the connection. Let's say that X is going to initiate the connection. X will first open a connection to Y. This connection is where all of the actual communication will take place.

Communication over one connection with multiple protocols: X and Y can communicate over the same connection using different protocols and the multiplexer will appropriately route messages for a given protocol to a particular handler function for that protocol, which allows for each host to handle different protocols with separate functions. Furthermore, we can use multiple streams for a given protocol that allow for the same protocol and same underlying connection to be used for communication about separate topics between nodes X and Y.

Why use multiple streams?: The purpose of using the same connection for multiple streams to communicate over is to avoid the overhead of having multiple connections between X and Y. In order for X and Y to differentiate between messages on different streams and different protocols, a multiplexer is used to encode the messages when a message will be sent and decode a message when a message is received. The multiplexer encodes the message by adding a header to the beginning of any message to be sent that contains the stream id (along with some other info). Then, the message is sent across the raw connection and the receiving host will use its multiplexer to decode the message, i.e. determine which stream id the message should be routed to.

Support

Support py-libp2p on drips.network

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

libp2p-0.6.0.tar.gz (1.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

libp2p-0.6.0-py3-none-any.whl (788.1 kB view details)

Uploaded Python 3

File details

Details for the file libp2p-0.6.0.tar.gz.

File metadata

  • Download URL: libp2p-0.6.0.tar.gz
  • Upload date:
  • Size: 1.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for libp2p-0.6.0.tar.gz
Algorithm Hash digest
SHA256 36c5f409e08b3b4058e0fa0d2a29da5f007eaa44bbcb8d21c96adfc554470f29
MD5 0f4bed87bad32c672df167b833d33f9c
BLAKE2b-256 98b73d6a5eb9f1788da09371ee1be08768b72fdcd956cee0f3f92a8ef1819862

See more details on using hashes here.

File details

Details for the file libp2p-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: libp2p-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 788.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for libp2p-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1f1248d8553081b636022c5b5d5453ff71cf40d5dd31f19d0c56aa1e49edc678
MD5 b4dad291937acf635cbf4e843ad103b5
BLAKE2b-256 91c23d29ee22e7f0315ef0f8e20ad8edbaf931cb33d2d2e66c0d4fd37022c681

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page