1- # rust-libp2p Roadmap <!-- omit in toc -->
1+ # rust-libp2p Roadmap
22
33Below is a high level roadmap for the rust-libp2p project. Items are ordered by priority (high to
44low).
@@ -8,45 +8,17 @@ This is a living document. Input is always welcome e.g. via GitHub issues or pul
88This is the roadmap of the Rust implementation of libp2p. See also the [ general libp2p project
99roadmap] ( 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.
6537Long term we might consider a generic approach for ` NetworkBehaviours ` to exchange data. Though that
6638would 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
8655We 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
11363We 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-
11969case you want to help. Based on this data we will likely find many optimizations we can do to our
12070hole 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
13978The project supports Wasm already today, though the developer experience is cumbersome at best.
14079Properly 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
15291Once WebRTC for browser-to-server is complete, we can begin work on ** browser-to-browser** and complete the WebRTC connectivity story.
15392We 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
175101where the latter only have a self-signed TLS certificate. Compared to WebRTC, this would likely be
176102more 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