Skip to content
minip2p is pre-1.0 and not yet published to crates.io.Install from GitHub
minip2p
Esc
navigateopen⌘Jpreview
On this page

Introduction

A minimal, caller-driven libp2p implementation for Rust applications that want QUIC, clear control flow, and no async runtime.

minip2p establishes authenticated QUIC connections with a synchronous Endpoint. Your application drives progress with poll and next_event — there is no async runtime. Optional features layer on NAT traversal, pubsub, and peer discovery without changing the base API.

use minip2p::{Deadline, Endpoint};

fn main() -> Result<(), minip2p::Error> {
    let mut node = Endpoint::builder()
        .agent_version("my-app/0.1.0")
        .bind_quic("127.0.0.1:0")?;

    println!("listen={}", node.listen()?);

    while let Some(event) = node.next_event(Deadline::NEVER)? {
        println!("{event:?}");
    }

    Ok(())
}

Get started

learn by doing

Understand

understand this

Do next

do this specific thing

Look up

look this up

Constraints

pre-1.0 APIs may change; crates are not on crates.io yet.
QUIC only TCP, WebSocket, and WebTransport are out of scope.
Rust 1.88+ Workspace MSRV.
Caller-driven No executor or hidden async task drives the node.
Relay client Bring a Circuit Relay v2 server when a relayed path is required.

Last updated on July 24, 2026

Was this page helpful?