Skip to content

Commit 0f4930f

Browse files
authored
docs(roadmap): Update done projects and reprioritize (#3467)
1 parent 57b6605 commit 0f4930f

File tree

1 file changed

+56
-93
lines changed

1 file changed

+56
-93
lines changed

ROADMAP.md

Lines changed: 56 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# rust-libp2p Roadmap <!-- omit in toc -->
1+
# rust-libp2p Roadmap
22

33
Below is a high level roadmap for the rust-libp2p project. Items are ordered by priority (high to
44
low).
@@ -8,45 +8,17 @@ This is a living document. Input is always welcome e.g. via GitHub issues or pul
88
This is the roadmap of the Rust implementation of libp2p. See also the [general libp2p project
99
roadmap](https://github.com/libp2p/specs/blob/master/ROADMAP.md).
1010

11-
## Table of Contents <!-- omit in toc -->
12-
- [QUIC support](#quic-support)
13-
- [WebRTC support (browser-to-server)](#webrtc-support-browser-to-server)
14-
- [Cross Behaviour communication](#cross-behaviour-communication)
15-
- [Generic connection management](#generic-connection-management)
16-
- [Kademlia efficient querying](#kademlia-efficient-querying)
17-
- [Kademlia client mode](#kademlia-client-mode)
18-
- [Optimize Hole punching](#optimize-hole-punching)
19-
- [Streaming response protocol aka. the ultimate escape hatch](#streaming-response-protocol-aka-the-ultimate-escape-hatch)
20-
- [WebRTC support (browser-to-browser)](#webrtc-support-browser-to-browser)
21-
- [Improved Wasm support](#improved-wasm-support)
22-
- [Handshake optimizations](#handshake-optimizations)
23-
- [Bitswap implementation](#bitswap-implementation)
24-
- [WebTransport](#webtransport)
25-
26-
### Alpha QUIC support
27-
28-
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
29-
|--------------|--------|-------------------|---------------------------------------------------|------------------------------------------------|------------|
30-
| Connectivity | Done | Q4/2022 | https://github.com/libp2p/rust-libp2p/issues/2883 | https://github.com/libp2p/test-plans/issues/53 | |
31-
32-
QUIC has been on the roadmap for a long time. It enables various performance improvements as well as
33-
higher hole punching success rates. We are close to finishing a first version with
34-
https://github.com/libp2p/rust-libp2p/pull/2289.
35-
36-
## WebRTC support (browser-to-server)
37-
38-
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
39-
|--------------|--------|-------------------|------------------------------------------|------------------------------------------------|-------------------------------------------------------------------|
40-
| Connectivity | Done | Q4/2022 | https://github.com/libp2p/specs/pull/412 | https://github.com/libp2p/test-plans/pull/100 | [WebRTC (browser-to-browser)](#webrtc-support-browser-to-browser) |
11+
## Generic connection management
4112

13+
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
14+
|----------------------|-------------|-------------------|---------------------------------------------------|--------------|------------|
15+
| Developer Ergonomics | in progress | Q1/2023 | https://github.com/libp2p/rust-libp2p/issues/2824 | | |
4216

43-
We are currently implementing WebRTC for **browser-to-server** connectivity in
44-
https://github.com/libp2p/rust-libp2p/pull/2622. More specifically the server side. This will enable
45-
browser nodes to connect to rust-libp2p nodes where the latter only have self-signed TLS
46-
certificates. See https://github.com/libp2p/specs/pull/412 for in-depth motivation.
17+
Today connection management functionality in rust-libp2p is limited. Building abstractions on top is
18+
cumbersome and inefficient. See https://github.com/libp2p/rust-libp2p/issues/2824. Making connection
19+
management generic allows users to build advanced and efficient abstractions on top of rust-libp2p
4720

48-
Long term we should enable rust-libp2p running in the browser via Wasm to use the browser's WebRTC
49-
stack. Though that should only happen after improved Wasm support, see below.
21+
First draft is in https://github.com/libp2p/rust-libp2p/pull/2828
5022

5123
## Cross Behaviour communication
5224

@@ -65,50 +37,28 @@ protocols) between `NetworkBehaviour` implementations.
6537
Long term we might consider a generic approach for `NetworkBehaviours` to exchange data. Though that
6638
would deserve its own roadmap item.
6739

68-
## Generic connection management
69-
70-
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
71-
|----------------------|--------|-------------------|---------------------------------------------------|--------------|------------|
72-
| Developer Ergonomics | todo | Q1/2023 | https://github.com/libp2p/rust-libp2p/issues/2824 | | |
40+
## Kademlia client mode
7341

74-
Today connection management functionality in rust-libp2p is limited. Building abstractions on top is
75-
cumbersome and inefficient. See https://github.com/libp2p/rust-libp2p/issues/2824. Making connection
76-
management generic allows users to build advanced and efficient abstractions on top of rust-libp2p
42+
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
43+
|--------------|--------|-------------------|---------------------------------------------------|-----------------------------------------------------------------|------------|
44+
| Optimization | todo | Q1/2023 | https://github.com/libp2p/rust-libp2p/issues/2032 | [Cross behaviour communication](#cross-behaviour-communication) | |
7745

78-
First draft is in https://github.com/libp2p/rust-libp2p/pull/2828
46+
Kademlia client mode will enhance routing table health and thus have a positive impact on all
47+
Kademlia operations.
7948

8049
## QUIC - evaluate and move to quinn
8150

8251
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
8352
|--------------|--------|-------------------|---------------------------------------------------|--------------|------------|
84-
| Connectivity | todo | Q1/2023 | https://github.com/libp2p/rust-libp2p/issues/2883 | | |
53+
| Connectivity | todo | Q2/2023 | https://github.com/libp2p/rust-libp2p/issues/2883 | | |
8554

8655
We added alpha support for QUIC in Q4/2022 wrapping `quinn-proto`. Evaluate using `quinn` directly, replacing the wrapper.
8756

88-
## Kademlia efficient querying
89-
90-
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
91-
|--------------|-------------|-------------------|-------------------------------------------------|--------------|------------|
92-
| Optimization | done | Q1/2023 | https://github.com/libp2p/rust-libp2p/pull/2712 | | |
93-
94-
Users of rust-libp2p like [iroh](https://github.com/n0-computer/iroh) need this for low latency
95-
usage of `libp2p-kad`. The rust-libp2p maintainers can pick this up unless iroh folks finish the
96-
work before that.
97-
98-
## Kademlia client mode
99-
100-
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
101-
|--------------|--------|-------------------|---------------------------------------------------|-----------------------------------------------------------------|------------|
102-
| Optimization | todo | Q1/2023 | https://github.com/libp2p/rust-libp2p/issues/2032 | [Cross behaviour communication](#cross-behaviour-communication) | |
103-
104-
Kademlia client mode will enhance routing table health and thus have a positive impact on all
105-
Kademlia operations.
106-
10757
## Optimize Hole punching
10858

10959
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
11060
|--------------|--------|-------------------|----------|--------------|------------|
111-
| Optimization | todo | Q1/2023 | | | |
61+
| Optimization | todo | Q2/2023 | | | |
11262

11363
We released hole punching support with [rust-libp2p
11464
`v0.43.0`](https://github.com/libp2p/rust-libp2p/releases/tag/v0.43.0), see also
@@ -119,22 +69,11 @@ action](https://discuss.libp2p.io/t/decentralized-nat-hole-punching-measurement-
11969
case you want to help. Based on this data we will likely find many optimizations we can do to our
12070
hole punching stack.
12171

122-
## Streaming response protocol aka. the ultimate escape hatch
123-
124-
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
125-
|----------------------|--------|-------------------|---------------------------------------------------|--------------|------------|
126-
| Developer ergonomics | todo | Q1/2023 | https://github.com/libp2p/rust-libp2p/issues/2657 | | |
127-
128-
rust-libp2p is very opinionated on how to write peer-to-peer protocols. There are many good reasons
129-
for this, and I think we should not change directions here. That said, the ultimate escape hatch -
130-
allowing users to create a stream and do whatever they want with it - will make it easier for
131-
newcomers to get started.
132-
13372
## Improved Wasm support
13473

13574
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
13675
|----------------------|--------|-------------------|---------------------------------------------------|--------------|----------------------------------------------|
137-
| Developer ergonomics | todo | Q2/2023 | https://github.com/libp2p/rust-libp2p/issues/2617 | | [WebRTC](#webrtc-support-browser-to-browser) |
76+
| Developer ergonomics | todo | Q3/2023 | https://github.com/libp2p/rust-libp2p/issues/2617 | | [WebRTC](#webrtc-support-browser-to-browser) |
13877

13978
The project supports Wasm already today, though the developer experience is cumbersome at best.
14079
Properly supporting Wasm opens rust-libp2p to a whole new set of use-cases. I would love for this to
@@ -146,25 +85,12 @@ argue that that demand follows this roadmap item and not the other way round.)
14685

14786
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
14887
|--------------|--------|-------------------|--------------------------------------------|-------------------------------------------------------------------------------------------|------------|
149-
| Connectivity | todo | Q2/2023 | https://github.com/libp2p/specs/issues/475 | [Improved WASM support](#improved-wasm-support), https://github.com/libp2p/specs/pull/497 | |
88+
| Connectivity | todo | Q3/2023 | https://github.com/libp2p/specs/issues/475 | [Improved WASM support](#improved-wasm-support), https://github.com/libp2p/specs/pull/497 | |
15089

15190

15291
Once WebRTC for browser-to-server is complete, we can begin work on **browser-to-browser** and complete the WebRTC connectivity story.
15392
We need to improve rust-libp2p's WASM story first.
15493

155-
## Handshake optimizations
156-
157-
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
158-
|--------------|--------|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|--------------|------------|
159-
| Optimization | todo | Q2/2023 | Security protocol in multiaddr https://github.com/libp2p/specs/pull/353 and early muxer negotiation https://github.com/libp2p/rust-libp2p/issues/2994 | | |
160-
161-
Short term, investing into rust-libp2p's QUIC support will likely give us a larger performance win,
162-
thus neither of the two optimizations is planned for 2022. While great to have, it has not been
163-
requested from any rust-libp2p users.
164-
165-
Long term, given that this will give us a great performance gain, we should definitely tackle it. It
166-
also allows us to catch up and thus be consistent with go-libp2p.
167-
16894
## WebTransport
16995

17096
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
@@ -175,3 +101,40 @@ A WebTransport implementation in rust-libp2p will enable browsers to connect to
175101
where the latter only have a self-signed TLS certificate. Compared to WebRTC, this would likely be
176102
more performant. It is dependent on QUIC support in rust-libp2p. Given that we will support WebRTC
177103
(browser-to-server) this is not a high priority.
104+
105+
## Done
106+
107+
### Alpha QUIC support
108+
109+
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
110+
|--------------|--------|-------------------|---------------------------------------------------|------------------------------------------------|------------|
111+
| Connectivity | Done | Q4/2022 | https://github.com/libp2p/rust-libp2p/issues/2883 | https://github.com/libp2p/test-plans/issues/53 | |
112+
113+
QUIC has been on the roadmap for a long time. It enables various performance improvements as well as
114+
higher hole punching success rates. We are close to finishing a first version with
115+
https://github.com/libp2p/rust-libp2p/pull/2289.
116+
117+
### WebRTC support (browser-to-server)
118+
119+
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
120+
|--------------|--------|-------------------|------------------------------------------|------------------------------------------------|-------------------------------------------------------------------|
121+
| Connectivity | Done | Q4/2022 | https://github.com/libp2p/specs/pull/412 | https://github.com/libp2p/test-plans/pull/100 | [WebRTC (browser-to-browser)](#webrtc-support-browser-to-browser) |
122+
123+
124+
We are currently implementing WebRTC for **browser-to-server** connectivity in
125+
https://github.com/libp2p/rust-libp2p/pull/2622. More specifically the server side. This will enable
126+
browser nodes to connect to rust-libp2p nodes where the latter only have self-signed TLS
127+
certificates. See https://github.com/libp2p/specs/pull/412 for in-depth motivation.
128+
129+
Long term we should enable rust-libp2p running in the browser via Wasm to use the browser's WebRTC
130+
stack. Though that should only happen after improved Wasm support, see below.
131+
132+
### Kademlia efficient querying
133+
134+
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
135+
|--------------|-------------|-------------------|-------------------------------------------------|--------------|------------|
136+
| Optimization | done | Q1/2023 | https://github.com/libp2p/rust-libp2p/pull/2712 | | |
137+
138+
Users of rust-libp2p like [iroh](https://github.com/n0-computer/iroh) need this for low latency
139+
usage of `libp2p-kad`. The rust-libp2p maintainers can pick this up unless iroh folks finish the
140+
work before that.

0 commit comments

Comments
 (0)