{"id":13510461,"url":"https://github.com/libp2p/specs","last_synced_at":"2025-05-14T05:10:55.880Z","repository":{"id":37664946,"uuid":"68122771","full_name":"libp2p/specs","owner":"libp2p","description":"Technical specifications for the libp2p networking stack","archived":false,"fork":false,"pushed_at":"2025-05-09T20:03:20.000Z","size":1627,"stargazers_count":1668,"open_issues_count":166,"forks_count":288,"subscribers_count":112,"default_branch":"master","last_synced_at":"2025-05-09T21:21:20.798Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://libp2p.io","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/libp2p.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-09-13T15:45:30.000Z","updated_at":"2025-05-09T20:03:24.000Z","dependencies_parsed_at":"2023-10-03T18:11:10.154Z","dependency_job_id":"754dff3f-d22f-42ce-b99e-fdee78fb84e9","html_url":"https://github.com/libp2p/specs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libp2p%2Fspecs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libp2p%2Fspecs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libp2p%2Fspecs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libp2p%2Fspecs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/libp2p","download_url":"https://codeload.github.com/libp2p/specs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254076850,"owners_count":22010611,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T02:01:39.925Z","updated_at":"2025-05-14T05:10:50.857Z","avatar_url":"https://github.com/libp2p.png","language":null,"funding_links":[],"categories":["Others","others","Research Papers","Decentralized Systems"],"sub_categories":[],"readme":"# libp2p specification\n\n\n\u003ch1 align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/libp2p/libp2p/a13997787e57d40d6315b422afbe1ceb62f45511/logo/libp2p-logo.png\" alt=\"libp2p logo\"/\u003e\n\u003c/h1\u003e\n\n\u003ca href=\"http://protocol.ai\"\u003e\u003cimg src=\"https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square\" /\u003e\u003c/a\u003e\n\u003ca href=\"http://libp2p.io/\"\u003e\u003cimg src=\"https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square\" /\u003e\u003c/a\u003e\n\u003ca href=\"http://webchat.freenode.net/?channels=%23libp2p\"\u003e\u003cimg src=\"https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://discuss.libp2p.io\"\u003e\u003cimg src=\"https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg\" /\u003e\u003c/a\u003e\n\n## Overview\n\nThis repository contains the specifications for [`libp2p`](https://libp2p.io), a\nframework and suite of protocols for building peer-to-peer network applications.\nlibp2p has several [implementations][libp2p_implementations], with more in development.\n\nThe main goal of this repository is to provide accurate reference documentation\nfor the aspects of libp2p that are independent of language or implementation.\nThis includes wire protocols, addressing conventions, and other \"network level\"\nconcerns.\n\nFor user-facing documentation, please see https://docs.libp2p.io\n\nIn addition to describing the current state of libp2p, the specs repository\nserves as a coordination point and a venue to drive future developments in\nlibp2p. For the short and long term roadmap see [ROADMAP.md](./ROADMAP.md). To\nparticipate in the evolution of libp2p via the specs process, please see the\n[Contributions section](#contributions).\n\n## Status\n\nThe specifications for libp2p are currently incomplete, and we are working to\naddress this by revising existing specs to ensure correctness and writing new\nspecifications to detail currently unspecified parts of libp2p.\n\nThis document replaces an earlier RFC, which still contains much useful\ninformation and is helpful for understanding the libp2p design philosophy. It is\navaliable at [_archive/README.md](./_archive/README.md).\n\n## Specification Index\n\nThis index contains links to all the spec documents that are currently merged.\nIf documents are moved to new locations within the repository, this index will\nbe updated to reflect the new locations.\n\n### Specs Framework\n\nThese specs define processes for the specification framework itself, such as the\nexpected lifecycle and document formatting.\n\n- [Spec Lifecycle][spec_lifecycle] - The process for introducing, revising and\n  adopting specs.\n- [Document Header][spec_header] - A standard document header for libp2p specs.\n\n### Core Abstractions and Types\n\nThese specs define abstractions and data types that form the \"core\" of libp2p\nand are used throughout the system.\n\n- [Addressing][spec_addressing] - Working with addresses in libp2p.\n- [Connections and Upgrading][spec_connections] - Establishing secure,\n  multiplexed connections between peers, possibly over insecure, single stream transports.\n- [Peer Ids and Keys][spec_peerids] - Public key types \u0026 encodings, peer id calculation, and\n  message signing semantics\n\n### Protocols\n\nThese specs define wire protocols that are used by libp2p for connectivity,\nsecurity, multiplexing, and other purposes.\n\nThe protocols described below all use [protocol\nbuffers](https://developers.google.com/protocol-buffers/docs/proto?hl=en) (aka\nprotobuf) to define message schemas.\n\nExisting protocols may use `proto2`, and continue to use them. `proto3` is\nrecommended for new protocols. `proto3` is a simplification of `proto2` and\nremoves some footguns. For context and a discussion around `proto3` vs `proto2`,\nsee [#465](https://github.com/libp2p/specs/issues/465).\n\n- [ping][spec_ping] - Ping protocol\n- [autonat][spec_autonat] - NAT detection\n- [identify][spec_identify] -  Exchange keys and addresses with other peers\n- [kademlia][spec_kademlia] - The Kademlia Distributed Hash Table (DHT) subsystem\n- [mdns][spec_mdns] - Local peer discovery with zero configuration using multicast DNS\n- [mplex][spec_mplex] - The friendly stream multiplexer\n- [yamux][spec_yamux] - Yet Another Multiplexer\n- [noise][spec_noise] - The libp2p Noise handshake\n- [plaintext][spec_plaintext] - An insecure transport for non-production usage\n- [pnet][spec_pnet] - Private networking in libp2p using pre-shared keys\n- [pubsub][spec_pubsub] - PubSub interface for libp2p\n  - [gossipsub][spec_gossipsub] - An extensible baseline PubSub protocol\n    - [episub][spec_episub] - Proximity Aware Epidemic PubSub for libp2p\n- [relay][spec_relay] - Circuit Switching for libp2p (similar to TURN)\n  - [dcutr][spec_dcutr] - Direct Connection Upgrade through Relay protocol\n- [rendezvous][spec_rendezvous] - Rendezvous Protocol for generalized\n  peer discovery\n- [secio][spec_secio] - SECIO, a transport security protocol for libp2p\n- [tls][spec_tls] - The libp2p TLS Handshake (TLS 1.3+)\n- [quic][spec_quic] - The libp2p QUIC Handshake\n- [webrtc][spec_webrtc] - The libp2p WebRTC transports\n- [WebTransport][spec_webtransport] - Using WebTransport in libp2p\n\n\n## Contributions\n\nThanks for your interest in improving libp2p! We welcome contributions from all\ninterested parties. Please take a look at the [Spec Lifecycle][spec_lifecycle]\ndocument to get a feel for how the process works, and [open an\nissue](https://github.com/libp2p/specs/issues/new) if there's work you'd like to\ndiscuss.\n\nFor discussions about libp2p that aren't specific to a particular spec, or if\nyou feel an issue isn't the appropriate place for your topic, please join our\n[discussion forum](https://discuss.libp2p.io) and post a new topic in the\n[contributor's section](https://discuss.libp2p.io/c/contributors).\n\n\n[libp2p_implementations]: https://libp2p.io/implementations\n[spec_lifecycle]: 00-framework-01-spec-lifecycle.md\n[spec_header]: 00-framework-02-document-header.md\n[spec_identify]: ./identify/README.md\n[spec_kademlia]: ./kad-dht/README.md\n[spec_mplex]: ./mplex/README.md\n[spec_pnet]: ./pnet/Private-Networks-PSK-V1.md\n[spec_pubsub]: ./pubsub/README.md\n[spec_gossipsub]: ./pubsub/gossipsub/README.md\n[spec_episub]: ./pubsub/gossipsub/episub.md\n[spec_relay]: ./relay/README.md\n[spec_rendezvous]: ./rendezvous/README.md\n[spec_secio]: ./secio/README.md\n[spec_tls]: ./tls/tls.md\n[spec_quic]: ./quic/README.md\n[spec_peerids]: ./peer-ids/peer-ids.md\n[spec_connections]: ./connections/README.md\n[spec_plaintext]: ./plaintext/README.md\n[spec_addressing]: ./addressing/README.md\n[spec_noise]: ./noise/README.md\n[spec_mdns]: ./discovery/mdns.md\n[spec_autonat]: ./autonat/README.md\n[spec_dcutr]: ./relay/DCUtR.md\n[spec_webrtc]: ./webrtc/README.md\n[spec_webtransport]: ./webtransport/README.md\n[spec_ping]: ./ping/ping.md\n[spec_yamux]: ./yamux/README.md\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flibp2p%2Fspecs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flibp2p%2Fspecs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flibp2p%2Fspecs/lists"}