Skip to content

Commit 8937105

Browse files
authored
docs(roadmap): fix headings, update str0m, webtransport, autonatv2 & address pipeline
Pull-Request: #4292.
1 parent 6478faf commit 8937105

1 file changed

Lines changed: 72 additions & 76 deletions

File tree

ROADMAP.md

Lines changed: 72 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,96 +1,93 @@
11
# rust-libp2p Roadmap
22

3-
Below is a high level roadmap for the rust-libp2p project. Items are ordered by priority (high to
4-
low).
3+
Below is a high level roadmap for the rust-libp2p project.
4+
Items are ordered by priority (high to low).
55

6-
This is a living document. Input is always welcome e.g. via GitHub issues or pull requests.
6+
This is a living document.
7+
Input is always welcome e.g. via GitHub issues or pull requests.
78

8-
This is the roadmap of the Rust implementation of libp2p. See also the [general libp2p project
9-
roadmap](https://github.com/libp2p/specs/blob/master/ROADMAP.md).
9+
This is the roadmap of the Rust implementation of libp2p.
10+
See also the [general libp2p project roadmap](https://github.com/libp2p/specs/blob/master/ROADMAP.md).
1011

11-
## Attempt to switch from webrtc-rs to str0m
12+
## In the works
1213

13-
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
14-
|--------------|--------|-------------------|---------------------------------------------------|--------------|------------|
15-
| Connectivity | todo | | https://github.com/libp2p/rust-libp2p/issues/3659 | | |
14+
### WebTransport
1615

17-
Reduce maintenance burden and reduce dependency footprint.
18-
19-
## Address pipeline
20-
21-
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
22-
|--------------|--------|-------------------|----------|--------------|------------|
23-
| Connectivity | todo | Q4/2023 | | AutoNATv2 | AutoNATv2 |
16+
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
17+
|-----------------------------|--------|-------------------|---------------------------------------------------|------------------------------------|------------|
18+
| Connectivity / optimization | todo | | https://github.com/libp2p/rust-libp2p/issues/2993 | [QUIC](#experimental-quic-support) | |
2419

25-
Be smart on address prioritization. go-libp2p made a lot of progress here. Lots to learn. See https://github.com/libp2p/go-libp2p/issues/2229 and https://github.com/libp2p/rust-libp2p/issues/1896#issuecomment-1537774383.
20+
A WebTransport implementation in rust-libp2p will enable browsers to connect to rust-libp2p server nodes where the latter only have a self-signed TLS certificate.
21+
Compared to WebRTC, this would likely be more stable and performant.
2622

27-
## AutoNATv2
23+
### AutoNATv2
2824

2925
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
3026
|--------------|--------|-------------------|----------|------------------|------------------|
3127
| Connectivity | todo | Q4/2023 | | Address pipeline | Address pipeline |
3228

33-
Implement the new AutoNAT v2 specification. See https://github.com/libp2p/specs/pull/538.
29+
Implement the new AutoNAT v2 specification.
30+
See https://github.com/libp2p/specs/pull/538.
3431

35-
## Optimize Hole punching
32+
### Address pipeline
33+
34+
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
35+
|--------------|--------|-------------------|----------|--------------|------------|
36+
| Connectivity | todo | Q4/2023 | | AutoNATv2 | AutoNATv2 |
37+
38+
Be smart on address prioritization.
39+
go-libp2p made a lot of progress here.
40+
Lots to learn.
41+
See https://github.com/libp2p/go-libp2p/issues/2229 and https://github.com/libp2p/rust-libp2p/issues/1896#issuecomment-1537774383.
42+
43+
### Optimize Hole punching
3644

3745
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
3846
|--------------|--------|-------------------|----------|--------------|------------|
3947
| Optimization | todo | | | | |
4048

41-
We released hole punching support with [rust-libp2p
42-
`v0.43.0`](https://github.com/libp2p/rust-libp2p/releases/tag/v0.43.0), see also
43-
https://github.com/libp2p/rust-libp2p/issues/2052. We are currently collecting data via the
44-
[punchr](https://github.com/dennis-tra/punchr) project on the hole punching success rate. See also
45-
[call for
46-
action](https://discuss.libp2p.io/t/decentralized-nat-hole-punching-measurement-campaign/1616) in
47-
case you want to help. Based on this data we will likely find many optimizations we can do to our
48-
hole punching stack.
49+
We released hole punching support with [rust-libp2p `v0.43.0`](https://github.com/libp2p/rust-libp2p/releases/tag/v0.43.0), see also https://github.com/libp2p/rust-libp2p/issues/2052.
50+
We are currently collecting data via the [punchr](https://github.com/dennis-tra/punchr) project on the hole punching success rate.
51+
See also [call for action](https://discuss.libp2p.io/t/decentralized-nat-hole-punching-measurement-campaign/1616) in case you want to help.
52+
Based on this data we will likely find many optimizations we can do to our hole punching stack.
4953

50-
## Improved Wasm support
54+
### Improved Wasm support
5155

5256
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
5357
|----------------------|--------|-------------------|---------------------------------------------------|--------------|----------------------------------------------|
5458
| Developer ergonomics | todo | | https://github.com/libp2p/rust-libp2p/issues/2617 | | [WebRTC](#webrtc-support-browser-to-browser) |
5559

5660
The project supports Wasm already today, though the developer experience is cumbersome at best.
57-
Properly supporting Wasm opens rust-libp2p to a whole new set of use-cases. I would love for this to
58-
happen earlier. Though (a) I think we should prioritize improving existing functionality over new
59-
functionality and (b) we don't have high demand for this feature from the community. (One could
60-
argue that that demand follows this roadmap item and not the other way round.)
61+
Properly supporting Wasm opens rust-libp2p to a whole new set of use-cases.
62+
I would love for this to happen earlier.
63+
Though (a) I think we should prioritize improving existing functionality over new functionality and (b) we don't have high demand for this feature from the community.
64+
(One could argue that that demand follows this roadmap item and not the other way round.)
6165

62-
## WebRTC in the browser via WASM
66+
### WebRTC in the browser via WASM
6367

6468
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
6569
|--------------|--------|-------------------|--------------------------------------------|-------------------------------------------------------------------------------------------|------------|
6670
| Connectivity | todo | | https://github.com/libp2p/specs/issues/475 | [Improved WASM support](#improved-wasm-support), https://github.com/libp2p/specs/pull/497 | |
6771

68-
Use the browser's WebRTC stack to support
69-
[`/webrtc`](https://github.com/libp2p/specs/blob/master/webrtc/webrtc.md) and
70-
[`/webrtc-direct`](https://github.com/libp2p/specs/blob/master/webrtc/webrtc-direct.md) from within
71-
the browser using rust-libp2p compiled to WASM. This makes rust-libp2p a truly end-to-end solution,
72-
enabling users to use rust-libp2p on both the client (browser) and server side.
72+
Use the browser's WebRTC stack to support [`/webrtc`](https://github.com/libp2p/specs/blob/master/webrtc/webrtc.md) and [`/webrtc-direct`](https://github.com/libp2p/specs/blob/master/webrtc/webrtc-direct.md) from within the browser using rust-libp2p compiled to WASM.
73+
This makes rust-libp2p a truly end-to-end solution, enabling users to use rust-libp2p on both the client (browser) and server side.
7374

74-
## WebTransport
75+
### Attempt to switch from webrtc-rs to str0m
7576

76-
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
77-
|-----------------------------|--------|-------------------|---------------------------------------------------|------------------------------------|------------|
78-
| Connectivity / optimization | todo | | https://github.com/libp2p/rust-libp2p/issues/2993 | [QUIC](#experimental-quic-support) | |
77+
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
78+
|--------------|--------|-------------------|---------------------------------------------------|--------------|------------|
79+
| Connectivity | todo | | https://github.com/libp2p/rust-libp2p/issues/3659 | | |
7980

80-
A WebTransport implementation in rust-libp2p will enable browsers to connect to rust-libp2p nodes
81-
where the latter only have a self-signed TLS certificate. Compared to WebRTC, this would likely be
82-
more performant. It is dependent on QUIC support in rust-libp2p. Given that we will support WebRTC
83-
(browser-to-server) this is not a high priority.
81+
Reduce maintenance burden and reduce dependency footprint.
8482

85-
## Automate port-forwarding e.g. via UPnP
83+
### Automate port-forwarding e.g. via UPnP
8684

8785
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
8886
|--------------|--------|-------------------|---------------------------------------------------|--------------|------------|
8987
| Connectivity | todo | | https://github.com/libp2p/rust-libp2p/issues/3903 | | |
9088

91-
Leverage protocols like UPnP to configure port-forwarding on ones router when behind NAT and/or
92-
firewall. Another technique in addition to hole punching increasing the probability for a node to
93-
become publicly reachable when behind a firewall and/or NAT.
89+
Leverage protocols like UPnP to configure port-forwarding on ones router when behind NAT and/or firewall.
90+
Another technique in addition to hole punching increasing the probability for a node to become publicly reachable when behind a firewall and/or NAT.
9491

9592
## Done
9693

@@ -100,32 +97,32 @@ become publicly reachable when behind a firewall and/or NAT.
10097
|--------------|--------|-------------------|---------------------------------------------------|------------------------------------------------|------------|
10198
| Connectivity | Done | Q4/2022 | https://github.com/libp2p/rust-libp2p/issues/2883 | https://github.com/libp2p/test-plans/issues/53 | |
10299

103-
QUIC has been on the roadmap for a long time. It enables various performance improvements as well as
104-
higher hole punching success rates. We are close to finishing a first version with
105-
https://github.com/libp2p/rust-libp2p/pull/2289.
100+
QUIC has been on the roadmap for a long time.
101+
It enables various performance improvements as well as higher hole punching success rates.
102+
We are close to finishing a first version with https://github.com/libp2p/rust-libp2p/pull/2289.
106103

107104
### WebRTC support (browser-to-server)
108105

109106
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
110107
|--------------|--------|-------------------|------------------------------------------|-----------------------------------------------|-------------------------------------------------------------------|
111108
| 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) |
112109

113-
We are currently implementing WebRTC for **browser-to-server** connectivity in
114-
https://github.com/libp2p/rust-libp2p/pull/2622. More specifically the server side. This will enable
115-
browser nodes to connect to rust-libp2p nodes where the latter only have self-signed TLS
116-
certificates. See https://github.com/libp2p/specs/pull/412 for in-depth motivation.
110+
We are currently implementing WebRTC for **browser-to-server** connectivity in https://github.com/libp2p/rust-libp2p/pull/2622.
111+
More specifically the server side.
112+
This will enable browser nodes to connect to rust-libp2p nodes where the latter only have self-signed TLS certificates.
113+
See https://github.com/libp2p/specs/pull/412 for in-depth motivation.
117114

118-
Long term we should enable rust-libp2p running in the browser via Wasm to use the browser's WebRTC
119-
stack. Though that should only happen after improved Wasm support, see below.
115+
Long term we should enable rust-libp2p running in the browser via Wasm to use the browser's WebRTC stack.
116+
Though that should only happen after improved Wasm support, see below.
120117

121118
### Kademlia efficient querying
122119

123120
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
124121
|--------------|-------------|-------------------|-------------------------------------------------|--------------|------------|
125122
| Optimization | done | Q1/2023 | https://github.com/libp2p/rust-libp2p/pull/2712 | | |
126123

127-
Users of rust-libp2p like [iroh](https://github.com/n0-computer/iroh) need this for low latency
128-
usage of `libp2p-kad`. The rust-libp2p maintainers can pick this up unless iroh folks finish the
124+
Users of rust-libp2p like [iroh](https://github.com/n0-computer/iroh) need this for low latency usage of `libp2p-kad`.
125+
The rust-libp2p maintainers can pick this up unless iroh folks finish the
129126
work before that.
130127

131128
### Generic connection management
@@ -134,35 +131,33 @@ work before that.
134131
|----------------------|--------|-------------------|---------------------------------------------------|--------------|------------|
135132
| Developer Ergonomics | done | Q1/2023 | https://github.com/libp2p/rust-libp2p/issues/2824 | | |
136133

137-
Today connection management functionality in rust-libp2p is limited. Building abstractions on top is
138-
cumbersome and inefficient. See https://github.com/libp2p/rust-libp2p/issues/2824. Making connection
139-
management generic allows users to build advanced and efficient abstractions on top of rust-libp2p.
134+
Today connection management functionality in rust-libp2p is limited.
135+
Building abstractions on top is cumbersome and inefficient.
136+
See https://github.com/libp2p/rust-libp2p/issues/2824.
137+
Making connection management generic allows users to build advanced and efficient abstractions on top of rust-libp2p.
140138

141139
### Cross Behaviour communication
142140

143141
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
144142
|----------------------|--------|-------------------|---------------------------------------------------|---------------------------------------------------|-----------------------------------------------|
145143
| Developer ergonomics | Done | Q1/2023 | https://github.com/libp2p/rust-libp2p/issues/2680 | https://github.com/libp2p/rust-libp2p/issues/2832 | [Kademlia client mode](#kademlia-client-mode) |
146144

147-
Today `NetworkBehaviour` implementations like Kademlia, GossipSub or Circuit Relay v2 can not
148-
communicate with each other, i.e. cannot make use of information known by another
149-
`NetworkBehaviour` implementation. Users need to write the wiring code by hand to e.g. enable
150-
Kademlia to learn protocols supported by a remote peer from Identify.
145+
Today `NetworkBehaviour` implementations like Kademlia, GossipSub or Circuit Relay v2 can not communicate with each other, i.e. cannot make use of information known by another `NetworkBehaviour` implementation.
146+
Users need to write the wiring code by hand to e.g. enable Kademlia to learn protocols supported by a remote peer from Identify.
151147

152-
This roadmap item contains exchanging standard information about remote peers (e.g. supported
153-
protocols) between `NetworkBehaviour` implementations.
148+
This roadmap item contains exchanging standard information about remote peers (e.g. supported protocols) between `NetworkBehaviour` implementations.
154149

155-
Long term we might consider a generic approach for `NetworkBehaviours` to exchange data. Though that
156-
would deserve its own roadmap item.
150+
Long term we might consider a generic approach for `NetworkBehaviours` to exchange data.
151+
Though that would deserve its own roadmap item.
157152

158153
## QUIC - implement hole punching
159154

160155
| Category | Status | Target Completion | Tracking | Dependencies | Dependents |
161156
|--------------|--------|-------------------|---------------------------------------------------|--------------|------------|
162157
| Connectivity | done | Q3/2023 | https://github.com/libp2p/rust-libp2p/issues/2883 | | |
163158

164-
Add hole punching support for QUIC. See also [DCUtR specification on usage with
165-
QUIC](https://github.com/libp2p/specs/blob/master/relay/DCUtR.md#the-protocol).
159+
Add hole punching support for QUIC.
160+
See also [DCUtR specification on usage with QUIC](https://github.com/libp2p/specs/blob/master/relay/DCUtR.md#the-protocol).
166161

167162
## Kademlia client mode
168163

@@ -179,4 +174,5 @@ Kademlia operations.
179174
|--------------|--------|-------------------|---------------------------------------------------|--------------|------------|
180175
| Connectivity | done | Q3/2023 | https://github.com/libp2p/rust-libp2p/issues/2883 | | |
181176

182-
We added alpha support for QUIC in Q4/2022 wrapping `quinn-proto`. Evaluate using `quinn` directly, replacing the wrapper.
177+
We added alpha support for QUIC in Q4/2022 wrapping `quinn-proto`.
178+
Evaluate using `quinn` directly, replacing the wrapper.

0 commit comments

Comments
 (0)