Compare commits
7 Commits
478973bf30
...
08a5e6d277
Author | SHA1 | Date |
---|---|---|
Max Inden | 08a5e6d277 | |
Max Inden | 014f309c54 | |
Max Inden | d6cd6e57b9 | |
Max Inden | 1f03ef60cf | |
Max Inden | 7bd620d6a9 | |
Max Inden | 6233dd0f2b | |
Max Inden | c7c59860d5 |
41
README.md
41
README.md
|
@ -5,20 +5,15 @@
|
|||
<p align="center">
|
||||
<a href="http://protocol.ai"><img src="https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square" /></a>
|
||||
<a href="http://libp2p.io/"><img src="https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square" /></a>
|
||||
<a href="http://webchat.freenode.net/?channels=%23libp2p"><img src="https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square" /></a>
|
||||
<a href="https://matrix.to/#/#libp2p:matrix.org"><img src="https://img.shields.io/badge/matrix-%23libp2p%3Amatrix.org-blue.svg?style=flat-square" /></a>
|
||||
</p>
|
||||
|
||||
> This document presents libp2p, a modularized and extensible network stack to overcome the networking challenges faced when doing peer-to-peer applications. libp2p is used by IPFS as its networking library.
|
||||
|
||||
# Description
|
||||
|
||||
libp2p is a networking stack and library modularized out of The IPFS Project, and bundled separately for other tools to use.
|
||||
|
||||
libp2p is the product of a long, and arduous quest of understanding -- a deep dive into the internet's network stack, and plentiful peer-to-peer protocols from the past. Building large scale peer-to-peer systems has been complex and difficult in the last 15 years, and libp2p is a way to fix that. It is a "network stack" -- a protocol suite -- that cleanly separates concerns, and enables sophisticated applications to only use the protocols they absolutely need, without giving up interoperability and upgradeability. libp2p grew out of IPFS, but it is built so that lots of people can use it, for lots of different projects.
|
||||
|
||||
We will be writing a set of docs, posts, tutorials, and talks to explain what p2p is, why it is tremendously useful, and how it can help your existing and new projects.
|
||||
|
||||
Meanwhile, learn more about libp2p at [**libp2p.io**](https://libp2p.io) and follow our evolving documentation efforts at [**docs.libp2p.io**](https://docs.libp2p.io)
|
||||
Learn more about libp2p at [**libp2p.io**](https://libp2p.io) and [**docs.libp2p.io**](https://docs.libp2p.io).
|
||||
|
||||
## Specification
|
||||
|
||||
|
@ -35,35 +30,3 @@ Meanwhile, learn more about libp2p at [**libp2p.io**](https://libp2p.io) and fol
|
|||
## Community Discussion
|
||||
|
||||
Please visit our discussion forums at [**discuss.libp2p.io**](https://discuss.libp2p.io) to get help, ask questions about the past, present, and future of libp2p, and more.
|
||||
|
||||
## Stub Explanation
|
||||
|
||||
> Overview of the libp2p project
|
||||
|
||||
### libp2p is the networking layer of IPFS
|
||||
|
||||
![](img/libp2p.001.jpg)
|
||||
|
||||
### a collection of p2p protocols
|
||||
|
||||
![](img/libp2p.002.jpg)
|
||||
|
||||
### modules that satisfy interfaces (roles)
|
||||
|
||||
![](img/libp2p.003.jpg)
|
||||
|
||||
### The whole of IPFS ...
|
||||
|
||||
![](img/libp2p.004.jpg)
|
||||
|
||||
### ... is made up of libp2p modules
|
||||
|
||||
![](img/libp2p.005.jpg)
|
||||
|
||||
### libp2p has two impls so far: Go and JS
|
||||
|
||||
![](img/libp2p.006.jpg)
|
||||
|
||||
### libp2p cool demo: orbit.chat (p2p chat)
|
||||
|
||||
![](img/libp2p.007.jpg)
|
||||
|
|
142
REQUIREMENTS.md
142
REQUIREMENTS.md
|
@ -1,142 +0,0 @@
|
|||
# libp2p Requirements: Roadmap to Feature Complete
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Description](#description)
|
||||
- [Cross Language Milestones](#cross-language-milestones)
|
||||
- [libp2p Modules Implementations](#libp2p-modules-implementations)
|
||||
- [Performance Milestones](#performance-milestones)
|
||||
- [Polish Level](#polish-level)
|
||||
|
||||
## Description
|
||||
|
||||
In order for libp2p to achieve its goals, the project will need to achieve the items described in this document.
|
||||
|
||||
This document is in the process of being updated. Currently known deficiencies:
|
||||
* Rust is incomplete (some tomatoes should be apples)
|
||||
* Should we divide Node.js and Browser, or just a have a single JS column?
|
||||
* Needs a proofread from implementors to make sure the fruits are correct
|
||||
* [Performance Milestones](#performance-milestones) is incomplete - need to agree on what these are
|
||||
|
||||
As you improve this document, please remove items from the list above.
|
||||
|
||||
### libp2p Modules Implementations
|
||||
|
||||
The libp2p protocols are the protocol stack for the modular libp2p protocols library. These form a p2p-first network stack, with no assumptions, self description, and modular interfaces. More at https://github.com/libp2p/specs/
|
||||
|
||||
> Legend: :green_apple: Done :lemon: In Progress :tomato: Missing :chestnut: Not planned
|
||||
|
||||
| libp2p Node | Go | JS - Node.js | JS - Browser | Rust | Python |
|
||||
| -------------------------------------------- | :-----------: | :-------------: | :-------------: | :-----------: | :-----------: |
|
||||
| **`libp2p`** | :green_apple: | :green_apple: | :green_apple: | :green_apple: | :green_apple: |
|
||||
|
||||
| Identify Protocol | Go | JS - Node.js | JS - Browser | Rust | Python |
|
||||
| -------------------------------------------- | :-----------: | :-------------: | :-------------: | :-----------: | :-----------: |
|
||||
| **`Identify`** | :green_apple: | :green_apple: | :green_apple: | :tomato: | :tomato: |
|
||||
|
||||
|
||||
| Transport Protocols | Go | JS - Node.js | JS - Browser | Rust | Python |
|
||||
| -------------------------------------------- | :-----------: | :-------------: | :-------------: | :-----------: | :-----------: |
|
||||
| **`TCP`** | :green_apple: | :green_apple: | :green_apple: | :green_apple: | :lemon: |
|
||||
| **`UTP`** | :green_apple: | :green_apple: | :green_apple: | :tomato: | :tomato: |
|
||||
| **`UDP`** | :green_apple: | :tomato: | :tomato: | :tomato: | :tomato: |
|
||||
| **`WebSockets`** | :green_apple: | :green_apple: | :green_apple: | :tomato: | :tomato: |
|
||||
| **`WebRTC`** | :tomato: | :green_apple: | :green_apple: | :tomato: | :tomato: |
|
||||
| **`SCTP`** | :tomato: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
| **`Tor`** | :tomato: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
| **`i2p`** | :tomato: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
| **`cjdns`** | :tomato: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
| **`Bluetooth LE`** | :tomato: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
| **`Audio TP`** | :tomato: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
| **`Zerotier`** | :tomato: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
| **`QUIC`** | :tomato: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
|
||||
|
||||
| Stream Muxers | Go | JS - Node.js | JS - Browser | Rust | Python |
|
||||
| -------------------------------------------- | :-----------: | :-------------: | :-------------: | :-----------: | :-----------: |
|
||||
| **`benchmarks`** | :green_apple: | :green_apple: | :green_apple: | :tomato: | :chestnut: |
|
||||
| **`muxado`** | :green_apple: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
| **`spdystream`** | :green_apple: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
| **`multiplex`** | :green_apple: | :green_apple: | :green_apple: | :tomato: | :lemon: |
|
||||
| **`spdy`** | :tomato: | :green_apple: | :green_apple: | :tomato: | :chestnut: |
|
||||
| **`http2`** | :tomato: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
| **`QUIC`** | :tomato: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
| **`yamux`** | :green_apple: | :chestnut: | :chestnut: | :chestnut: | :tomato: |
|
||||
|
||||
|
||||
| Switch | Go | JS - Node.js | JS - Browser | Rust | Python |
|
||||
| -------------------------------------------- | :-----------: | :-------------: | :-------------: | :-----------: | :-----------: |
|
||||
| **`Dialer stack`** | :green_apple: | :green_apple: | :green_apple: | :tomato: | :chestnut: |
|
||||
| **`Switch`** | :green_apple: | :green_apple: | :green_apple: | :tomato: | :lemon: |
|
||||
|
||||
|
||||
|
||||
| NAT Traversal | Go | JS - Node.js | JS - Browser | Rust | Python |
|
||||
| -------------------------------------------- | :-----------: | :-------------: | :-------------: | :-----------: | :-----------: |
|
||||
| **`nat-pmp`** | :green_apple: | :tomato: | :tomato: | :tomato: | :tomato: |
|
||||
| **`upnp`** | :green_apple: | :tomato: | :tomato: | :tomato: | :tomato: |
|
||||
| **`ext addr discovery`** | :green_apple: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
| **`STUN-like`** | :tomato: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
| **`line-switch relay`** | :green_apple: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
| **`pkt-switch relay`** | :tomato: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
|
||||
|
||||
| Peer Discovery | Go | JS - Node.js | JS - Browser | Rust | Python |
|
||||
| -------------------------------------------- | :-----------: | :-------------: | :-------------: | :-----------: | :-----------: |
|
||||
| **`mDNS`** | :green_apple: | :green_apple: | :green_apple: | :tomato: | :tomato: |
|
||||
| **`bootstrap list`** | :green_apple: | :green_apple: | :green_apple: | :tomato: | :green_apple: |
|
||||
| **`DHT query`** | :green_apple: | :green_apple: | :green_apple: | :tomato: | :tomato: |
|
||||
| **`PEX`** | :tomato: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
| **`DNS`** | :tomato: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
|
||||
|
||||
|
||||
| Content Routing | Go | JS - Node.js | JS - Browser | Rust | Python |
|
||||
| -------------------------------------------- | :-----------: | :-------------: | :-------------: | :-----------: | :-----------: |
|
||||
| **`Kademlia DHT`** | :green_apple: | :green_apple: | :green_apple: | :tomato: | :tomato: |
|
||||
| **`pub/sub`** | :tomato: | :tomato: | :tomato: | :tomato: | :tomato: |
|
||||
| **`PHT`** | :tomato: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
|
||||
|
||||
|
||||
| Peer Routing | Go | JS - Node.js | JS - Browser | Rust | Python |
|
||||
| -------------------------------------------- | :-----------: | :-------------: | :-------------: | :-----------: | :-----------: |
|
||||
| **`Kademlia DHT`** | :green_apple: | :green_apple: | :green_apple: | :tomato: | :tomato: |
|
||||
| **`pub/sub`** | :tomato: | :tomato: | :tomato: | :tomato: | :tomato: |
|
||||
| **`PHT`** | :tomato: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
|
||||
|
||||
| Exchange | Go | JS - Node.js | JS - Browser | Rust | Python |
|
||||
| -------------------------------------------- | :-----------: | :-------------: | :-------------: | :-----------: | :-----------: |
|
||||
| **`HTTP`** | :green_apple: | :green_apple: | :green_apple: | :tomato: | :chestnut: |
|
||||
| **`Bitswap`** | :green_apple: | :green_apple: | :green_apple: | :tomato: | :chestnut: |
|
||||
| **`Bittorrent`** | :green_apple: | :green_apple: | :green_apple: | :tomato: | :chestnut: |
|
||||
|
||||
|
||||
| Consensus | Go | JS - Node.js | JS - Browser | Rust | Python |
|
||||
| -------------------------------------------- | :-----------: | :-------------: | :-------------: | :-----------: | :-----------: |
|
||||
| **`Paxos`** | :chestnut: | :chestnut: | :chestnut: | :chestnut: | :chestnut: |
|
||||
| **`Raft`** | :tomato: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
| **`PBTF`** | :tomato: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
| **`Nakamoto`** | :tomato: | :tomato: | :tomato: | :tomato: | :chestnut: |
|
||||
|
||||
|
||||
### Cross Language Milestones
|
||||
|
||||
- [ ] Standardized interfaces (using a neutral IDL) to define conformance in any language implementation
|
||||
- [ ] Interoperability testing framework
|
||||
|
||||
### Performance Milestones
|
||||
|
||||
`TODO` needs performance milestones
|
||||
|
||||
### Polish level
|
||||
|
||||
The polish level achieved defined how much effort has gone into polishing all the corners of the tools, APIs, documentation, and so on. Early on, things will be much more rough as we need to focus on implementation speed over final polish. As we reach completion of the implementations, we turn our focus towards scalability, stability, and security. After that, we focus on end user polish.
|
||||
|
||||
- [ ] Polish level: alpha - individuals innovators
|
||||
- [ ] Polish level: alpha - production for early adopters
|
||||
- [ ] Polish level: beta - production for small orgs (in progress)
|
||||
- [ ] Polish level: beta - production for large orgs
|
||||
- [ ] Polish level: 1.0 - production for all
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
# libp2p Roadmap
|
||||
|
||||
> We track the development of the libp2p project through Github issues and [Waffle.io](https://waffle.io/libp2p/libp2p). See our waffle board at: [https://waffle.io/libp2p/libp2p](https://waffle.io/libp2p/libp2p)
|
||||
|
||||
For higher level planning, we use [OKRs](https://github.com/libp2p/pm/tree/master/OKRs).
|
||||
|
||||
For feature completeness, we are tracking in [REQUIREMENTS.md](https://github.com/libp2p/libp2p/blob/master/REQUIREMENTS.md).
|
Loading…
Reference in New Issue