Packages

A standalone Elixir implementation of the Libp2p networking stack

Current section

Files

Jump to
libp2p_elixir lib libp2p.ex
Raw

lib/libp2p.ex

defmodule Libp2p do
@moduledoc """
An Elixir implementation of the Libp2p networking stack.
This library provides the core components required to participate in a peer-to-peer network
compatible with the standard Libp2p specifications.
## Features
- **Transport**: TCP transport implementation (`Libp2p.Transport.Tcp`).
- **Security**: Noise secure channel handshake (Noise_XX_25519_ChaChaPoly_SHA256).
See `Libp2p.Noise`.
- **Multiplexing**: Yamux v1.0.0 stream multiplexing. See `Libp2p.Yamux.Session`.
- **PubSub**: Gossipsub v1.1 protocol for efficient message propagation.
See `Libp2p.Gossipsub`.
- **Peer Identity**: ED25519 and Secp256k1 key support for peer identities.
- **Protocol Negotiation**: Multistream-select 1.0 support.
## Architecture
The library follows a process-per-connection model:
- `Libp2p.Swarm`: The central manager that handles listening sockets and outbound dialing.
It spawns a connection process for each established peer.
- `Libp2p.ConnectionV2`: Represents a single physical peer connection. It is responsible for
the full lifecycle: upgrading the raw socket to a secure channel, negotiating a multiplexer,
and managing concurrent logical streams.
- `Libp2p.InboundStream`: A behaviour for defining handlers for specific protocols (e.g.,
`/ipfs/id/1.0.0` or custom application protocols).
## Usage
To start the stack, add `Libp2p.Supervisor` to your supervision tree and configure the
identity and initial listen addresses.
"""
end