mirror of
https://github.com/vacp2p/roadmap.git
synced 2026-01-09 13:48:09 -05:00
feat(p2p): 2026Q1 commitments (#353)
Co-authored-by: fbarbu15 <florin@status.im>
This commit is contained in:
43
content/p2p/ift/2026q1-nimlibp2p-cbindings.md
Normal file
43
content/p2p/ift/2026q1-nimlibp2p-cbindings.md
Normal file
@@ -0,0 +1,43 @@
|
||||
---
|
||||
|
||||
title: nim-libp2p c-bindings
|
||||
tags:
|
||||
- "2026q1"
|
||||
- "p2p"
|
||||
- "ift"
|
||||
draft: false
|
||||
description: Provide c-bindings for nim-libp2p
|
||||
|
||||
---
|
||||
|
||||
`vac:p2p:ift:2026q1-nimlibp2p-cbindings`
|
||||
|
||||
Continue exposing key nim-libp2p functionality via c-bindings to enables downstream projects like logoscore to embed libp2p functionality directly.
|
||||
|
||||
## Description
|
||||
Continue the work started in `vac:p2p:ift:2026q1-nimlibp2p-cbindings` by exposing nim-libp2p functionality via a c static library, enabling external projects to integrate without depending on nim toolchains. Develop a logos core module that uses these bindings
|
||||
|
||||
## Task List
|
||||
|
||||
TODO: move tasks that were not completed in 2026q1 here
|
||||
|
||||
|
||||
### mix
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2026q1-nimlibp2p-cbindings:mix`
|
||||
* owner: not assigned yet
|
||||
* status: not started
|
||||
* start-date: 2026/01/01
|
||||
* end-date: 2026/03/31
|
||||
|
||||
#### Description
|
||||
Extend c-bindings to expose Mix functionality.
|
||||
Exported functions must include:
|
||||
- Setting up nodes to be used for the Mix Path
|
||||
- Choose whether exit node is destination or not
|
||||
This task depends on `vac:p2p:ift:2026q1-nimlibp2p-cbindings:core` being implemented (interaction with streams)
|
||||
|
||||
#### Deliverables
|
||||
- Updated c header + library with mix api
|
||||
- Tests verifying mix behavior via ffi
|
||||
- Documentation
|
||||
62
content/p2p/ift/2026q1-nimlibp2p-connection-management.md
Normal file
62
content/p2p/ift/2026q1-nimlibp2p-connection-management.md
Normal file
@@ -0,0 +1,62 @@
|
||||
---
|
||||
|
||||
title: nim-libp2p Connection Management
|
||||
tags:
|
||||
- "2026q1"
|
||||
- "p2p"
|
||||
- "ift"
|
||||
draft: false
|
||||
description: Improved connection management in nim-libp2p
|
||||
|
||||
---
|
||||
|
||||
`vac:p2p:ift:2026q1-nimlibp2p-connection-management`
|
||||
|
||||
Improve nim-libp2p’s connection manager to provide hi/lo watermarks, score-driven pruning, decaying tags, and protected connections
|
||||
|
||||
## Description
|
||||
|
||||
|
||||
The current connection manager is limited to cap total connections but doesn’t maintain a healthy steady state, doesn’t distinguish valuable peers, and keeps stale or useless connections. With this commitment new behavior will be introduced by having the connection manager maintain connection counts within configurable low/high watermarks and prune excess connections based on peer scores. It's tagging and decay system will prioritize valuable peers while ensuring unused or low-value connections are gracefully trimmed.
|
||||
|
||||
## Task List
|
||||
|
||||
### Hi/Lo limits
|
||||
* fully qualified name: `vac:p2p:ift:2026q1-nimlibp2p-connection-management:limits`
|
||||
* owner: not assigned yet
|
||||
* status: not started
|
||||
* start-date: 2026/01/01
|
||||
* end-date: 2026/03/31
|
||||
|
||||
#### Description
|
||||
Implement a hi/lo watermark subsystem. When connections exceed the higher limit, trigger a pruning cycle that continues until below the lower limit. Expose configuration options and allow switching between watermark mode and simple max-limit mode.
|
||||
|
||||
#### Deliverables
|
||||
Hi-Lo watermark behavior for managing number of connections
|
||||
|
||||
### Connection score
|
||||
* fully qualified name: `vac:p2p:ift:2026q1-nimlibp2p-connection-management:score`
|
||||
* owner: not assigned yet
|
||||
* status: not started
|
||||
* start-date: 2026/01/01
|
||||
* end-date: 2026/03/31
|
||||
|
||||
#### Description
|
||||
Implement a per-connection scoring system with static and ephemeral tags. Ephemeral tags decay linearly (or by chosen function) so its importance decreases overtime. Allow marking connections as “protected” to exempt them from pruning. Outbound connections should naturally have a higher score than incoming connections
|
||||
|
||||
#### Deliverables
|
||||
- API for adding/removing tags, setting weights, toggling decay
|
||||
- Protected-peer mechanism with hard guarantees
|
||||
|
||||
### AutoPrune
|
||||
* fully qualified name: `vac:p2p:ift:2026q1-nimlibp2p-connection-management:autoprune`
|
||||
* owner: not assigned yet
|
||||
* status: not started
|
||||
* start-date: 2026/01/01
|
||||
* end-date: 2026/03/31
|
||||
|
||||
#### Description
|
||||
Implement pruning logic driven by the connection score. During pruning cycles, sort peers by score; Trim the lowest first with ties broken by heuristics such as connection age. Emit connection events once connections are pruned
|
||||
|
||||
#### Deliverables
|
||||
- Automatically prune connections
|
||||
64
content/p2p/ift/2026q1-nimlibp2p-gossipsub-extensions.md
Normal file
64
content/p2p/ift/2026q1-nimlibp2p-gossipsub-extensions.md
Normal file
@@ -0,0 +1,64 @@
|
||||
---
|
||||
|
||||
title: GossipSub Extensions and Partial Messages
|
||||
tags:
|
||||
- "2026q1"
|
||||
- "p2p"
|
||||
- "ift"
|
||||
draft: false
|
||||
description: GossipSub Extensions and Partial Messages
|
||||
|
||||
---
|
||||
|
||||
`vac:p2p:ift:2026q1-nimlibp2p-gossipsub-extensions`
|
||||
|
||||
## Description
|
||||
|
||||
This commitment focuses on implementing [Gossipsub v1.3 - Extensions control message](https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/gossipsub-v1.3.md), a set of features that would allow gossipsub peers to describe characteristics to each other without requiring a new protocol ID per extension, and creating the partial messages extension, which would allow users to transmit only a small part of a message rather than a full message.
|
||||
|
||||
## Task List
|
||||
|
||||
### Implement Gossipsub Extensions support
|
||||
* fully qualified name: `vac:p2p:ift:2026q1-nimlibp2p-gossipsub-extensions:extensions`
|
||||
* owner: not assigned yet
|
||||
* status: not started
|
||||
* start-date: 2026/01/01
|
||||
* end-date: 2026/03/31
|
||||
|
||||
#### Description
|
||||
* Modify RPC protobuffer to be aware of the existence of `ControlExtensions` control message
|
||||
* Send extensions message as the first message on a stream
|
||||
* Test interoperability by implementing [Test Extension](https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/extensions/experimental/test-extension.md)
|
||||
|
||||
#### Deliverables
|
||||
- Gossipsub extensions supported
|
||||
- Test Extension implemented (optionally enabled via compile time flag)
|
||||
|
||||
### Implement Gossipsub Partial Messages Extension
|
||||
* fully qualified name: `vac:p2p:ift:2026q1-nimlibp2p-gossipsub-extensions:partial-messages`
|
||||
* owner: not assigned yet
|
||||
* status: not started
|
||||
* start-date: 2026/01/01
|
||||
* end-date: 2026/03/31
|
||||
|
||||
#### Description
|
||||
* [Partial Messages Extensions](https://github.com/libp2p/specs/blob/marco/partial-messages/pubsub/gossipsub/partial-messages.md) allow users to transmit only a small part of a message rather than a full message.
|
||||
* This is especially useful in cases where there is a large messages and a peer is missing only a small part of the message.
|
||||
|
||||
#### Deliverables
|
||||
- Partial messages extension implemented
|
||||
- Set of unit tests to test this extension
|
||||
|
||||
|
||||
### Change Gossipsub 1.4 to an extension
|
||||
* fully qualified name: `vac:p2p:ift:2026q1-nimlibp2p-gossipsub-extensions:1-4-extension`
|
||||
* owner: not assigned yet
|
||||
* status: not started
|
||||
* start-date: 2026/01/01
|
||||
* end-date: 2026/03/31
|
||||
|
||||
#### Description
|
||||
Modify gossipsub 1.4 so it uses extensions instead of a new protocol Id. This task has low priority and should only be implemented if time allows it.
|
||||
|
||||
#### Deliverables
|
||||
- Gossipsub 1.4 implemented as a gossipsub extension
|
||||
35
content/p2p/ift/2026q1-nimlibp2p-logos-core.md
Normal file
35
content/p2p/ift/2026q1-nimlibp2p-logos-core.md
Normal file
@@ -0,0 +1,35 @@
|
||||
---
|
||||
|
||||
title: nim-libp2p logos-core
|
||||
tags:
|
||||
- "2026q1"
|
||||
- "p2p"
|
||||
- "ift"
|
||||
draft: false
|
||||
description: Logos Core module for libp2p
|
||||
|
||||
---
|
||||
|
||||
`vac:p2p:ift:2026q1-nimlibp2p-logos-core`
|
||||
|
||||
Continue exposing key nim-libp2p functionality via c-bindings to enables downstream projects like logoscore to embed libp2p functionality directly.
|
||||
|
||||
## Description
|
||||
Using nim-libp2p's c-bindings develop logos-core modules that would let libp2p features to be consumed from within Logos
|
||||
|
||||
## Task List
|
||||
|
||||
### logos module
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2026q1-nimlibp2p-logos-core:core`
|
||||
* owner: not assigned yet
|
||||
* status: not started
|
||||
* start-date: 2026/01/01
|
||||
* end-date: 2026/03/31
|
||||
|
||||
#### Description
|
||||
Using the c-bindings module from nim-libp2p, develop a logos module that would allow nim-libp2p
|
||||
to be used in logos.
|
||||
|
||||
#### Deliverables
|
||||
- Logos core module
|
||||
54
content/p2p/ift/2026q1-nimlibp2p-maintenance.md
Normal file
54
content/p2p/ift/2026q1-nimlibp2p-maintenance.md
Normal file
@@ -0,0 +1,54 @@
|
||||
---
|
||||
|
||||
title: Nim-libp2p maintenance
|
||||
tags:
|
||||
- "2026q1"
|
||||
- "p2p"
|
||||
- "ift"
|
||||
draft: false
|
||||
description: Maintain nim-libp2p through improvements, bug fixes, and user support
|
||||
|
||||
---
|
||||
|
||||
`vac:p2p:ift:2026q1-nimlibp2p-maintenance`
|
||||
|
||||
Maintain nim-libp2p through improvements, bug fixes, and user support
|
||||
|
||||
## Description
|
||||
|
||||
Continue supporting and maintaining the nim-libp2p repository through ongoing improvements, refactoring, and bug fixes.
|
||||
This includes a range of ad-hoc tasks critical to sustaining code quality, overall stability, correct functionality,
|
||||
and performance of the project.
|
||||
Additionally, it provides a platform for addressing small developer requests,
|
||||
ensuring that nim-libp2p remains functional and usable for its primary users — Nimbus and Waku — helping to meet their evolving needs."
|
||||
|
||||
## Task List
|
||||
|
||||
### Maintenance
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2026q1-nimlibp2p-maintenance:maintenance`
|
||||
* owner: rramos
|
||||
* status: not started
|
||||
* start-date: 2026/01/01
|
||||
* end-date: 2026/03/31
|
||||
|
||||
#### Description
|
||||
Maintain [nim-libp2p](https://github.com/vacp2p/nim-libp2p) repository via improvements, refactors and bug fixes.
|
||||
|
||||
#### Deliverables
|
||||
- [[Deliverable] Maintenance 2026q1]
|
||||
|
||||
### Kademlia Interop tests
|
||||
|
||||
* fully qualified name: `vac:p2p:ift:2026q1-nimlibp2p-maintenance:kademlia-interop-tests`
|
||||
* owner: rramos
|
||||
* status: not started
|
||||
* start-date: 2026/01/01
|
||||
* end-date: 2026/03/31
|
||||
|
||||
#### Description
|
||||
Integrate libp2p test plans' Kad-DHT interop tests as part of the CI tests executed on each PR.
|
||||
This task will depend whether these tests are available during Q1 or not
|
||||
|
||||
#### Deliverables
|
||||
- New github workflow: `Interoperability Tests / Run Kad-dht interoperability tests`
|
||||
@@ -0,0 +1,35 @@
|
||||
---
|
||||
|
||||
title: nim-libp2p Universal Connectivity App
|
||||
tags:
|
||||
- "2026q1"
|
||||
- "p2p"
|
||||
- "ift"
|
||||
draft: false
|
||||
description: Universal connectivity app
|
||||
|
||||
---
|
||||
|
||||
`vac:p2p:ift:2026q1-nimlibp2p-universal-connectivity-app`
|
||||
|
||||
Extend universal connectivity app features
|
||||
|
||||
## Description
|
||||
|
||||
Extend the universal connectivity app by adding quic support and kademlia dht to discover nodes
|
||||
|
||||
## Task List
|
||||
|
||||
### Kad-DHT
|
||||
* fully qualified name: `vac:p2p:ift:2026q1-nimlibp2p-universal-connectivity-app:kad-dht`
|
||||
* owner: gabe
|
||||
* status: not started
|
||||
* start-date: 2026/01/01
|
||||
* end-date: 2026/03/31
|
||||
|
||||
#### Description
|
||||
Add kademlia support to the universal connectivity app allowing the app to discover other nodes
|
||||
Add QUIC to the list of transports used by the app
|
||||
|
||||
#### Deliverables
|
||||
- Universal connectivity app can discover new nodes and use QUIC transport
|
||||
91
content/p2p/ift/2026q1-nimlibp2p-webtransport.md
Normal file
91
content/p2p/ift/2026q1-nimlibp2p-webtransport.md
Normal file
@@ -0,0 +1,91 @@
|
||||
---
|
||||
|
||||
title: nim-libp2p Webtransport
|
||||
tags:
|
||||
- "2026q1"
|
||||
- "p2p"
|
||||
- "ift"
|
||||
draft: false
|
||||
description: Add webtransport support to nim-libp2p
|
||||
|
||||
---
|
||||
|
||||
`vac:p2p:ift:2026q1-nimlibp2p-webtransport`
|
||||
|
||||
Implement WebTransport support in nim-libp2p, enabling browser/server bidirectional streams via h3+quic. built atop nim-lsquic, extending its current quic-only integration.
|
||||
|
||||
## Description
|
||||
|
||||
Extend the number of transports supported by nim-libp2p via the development of Webtransport,
|
||||
which would allow browsers to establish bidirectional stream connections to nim-libp2p servers
|
||||
This is done by using ls-quic which nim-libp2p already uses for quic transport
|
||||
|
||||
## Task List
|
||||
|
||||
### Http3 engine
|
||||
* fully qualified name: `vac:p2p:ift:2026q1-nimlibp2p-webtransport:http3-engine`
|
||||
* owner: not assigned yet
|
||||
* status: not started
|
||||
* start-date: 2026/01/01
|
||||
* end-date: 2026/03/31
|
||||
|
||||
#### Description
|
||||
Extend nim-lsquic bindings to support acting as a proper http3 engine. enable configuration flags for h3 mode vs raw-quic mode, implement the callback plumbing for headers, datagrams, and stream events required by webtransport.
|
||||
|
||||
#### Deliverables
|
||||
- New h3-capable initialization api in nim-lsquic.
|
||||
|
||||
### Client
|
||||
* fully qualified name: `vac:p2p:ift:2026q1-nimlibp2p-webtransport:client`
|
||||
* owner: not assigned yet
|
||||
* status: not started
|
||||
* start-date: 2026/01/01
|
||||
* end-date: 2026/03/31
|
||||
|
||||
#### Description
|
||||
Implement client-side webtransport session establishment
|
||||
|
||||
#### Deliverables
|
||||
Client side functionality that allows establishing a connection via webtransport
|
||||
|
||||
### Server
|
||||
* fully qualified name: `vac:p2p:ift:2026q1-nimlibp2p-webtransport:server`
|
||||
* owner: not assigned yet
|
||||
* status: not started
|
||||
* start-date: 2026/01/01
|
||||
* end-date: 2026/03/31
|
||||
|
||||
#### Description
|
||||
Server acceptance of webtransport sessions
|
||||
|
||||
#### Deliverables
|
||||
Server side functionality that allows accepting connections via webtransport
|
||||
|
||||
|
||||
### Transport
|
||||
* fully qualified name: `vac:p2p:ift:2026q1-nimlibp2p-webtransport:transport`
|
||||
* owner: not assigned yet
|
||||
* status: not started
|
||||
* start-date: 2026/01/01
|
||||
* end-date: 2026/03/31
|
||||
|
||||
#### Description
|
||||
Introduce a new libp2p transport that spins up a dedicated nim-lsquic instance with http3 enabled
|
||||
on a separate UDP port from raw quic transport. Map libp2p connection and stream abstractions to
|
||||
webtransport sessions and streams.
|
||||
|
||||
#### Deliverables
|
||||
A libp2p transport that allows web clients to communicate with nim-libp2p nodes via WebTransport
|
||||
|
||||
### Interop
|
||||
* fully qualified name: `vac:p2p:ift:2026q1-nimlibp2p-webtransport:interop`
|
||||
* owner: not assigned yet
|
||||
* status: not started
|
||||
* start-date: 2026/01/01
|
||||
* end-date: 2026/03/31
|
||||
|
||||
#### Description
|
||||
Ensure interoperability with other libp2p implementations, with focus on js-libp2p
|
||||
|
||||
#### Deliverables
|
||||
- Interop test suite runnable in CI
|
||||
@@ -14,6 +14,19 @@ Major future work items on nim-libp2p (also beyond this reporting period are cap
|
||||
|
||||
[[p2p/preview|Roadmap Preview]]
|
||||
|
||||
## 2026q1 `vac:p2p:`
|
||||
|
||||
### `ift:`
|
||||
* [[p2p/ift/2026q1-nimlibp2p-cbindings|nimlibp2p-cbindings]]
|
||||
* [[p2p/ift/2026q1-nimlibp2p-gossipsub-extensions|nimlibp2p-gossipsub-extensions]]
|
||||
* [[p2p/ift/2026q1-nimlibp2p-logos-core|nimlibp2p-logos-core]]
|
||||
* [[p2p/ift/2026q1-nimlibp2p-connection-management|nimlibp2p-connection-management]]
|
||||
* [[p2p/ift/2026q1-nimlibp2p-maintenance|nimlibp2p-maintenance]]
|
||||
* [[p2p/ift/2026q1-nimlibp2p-webtransport|nimlibp2p-webtransport]]
|
||||
* [[p2p/ift/2026q1-nimlibp2p-universal-connectivity-app|nimlibp2p-universal-connectivity-app]]
|
||||
|
||||
|
||||
|
||||
## 2025q4 `vac:p2p:`
|
||||
|
||||
### `ift:`
|
||||
|
||||
@@ -7,7 +7,7 @@ tags:
|
||||
|
||||
## Roadmap Preview
|
||||
|
||||
### 2025Q4
|
||||
### 2025Q1
|
||||
- Cross-compilation for mobile
|
||||
- Enable nim-libp2p builds for arm64/aarch64 targeting Android/iOS
|
||||
- Needed for integration into Status App.
|
||||
@@ -17,13 +17,8 @@ tags:
|
||||
Refactoring the codebase would improve clarity, allowing contributors to grasp the code more easily.
|
||||
Additionally, a more streamlined implementation would enhance maintainability,
|
||||
leading to more efficient troubleshooting and debugging.
|
||||
- Mix-core in nim-libp2p as Done state
|
||||
- core protocol logic stable;
|
||||
- no blocking issues
|
||||
- Issues (if any) are around API polish
|
||||
|
||||
|
||||
### 2026Q1 and beyond
|
||||
### 2026Q2 and beyond
|
||||
- Unix Domain Socket transport (`/unix//tmp/foo`)
|
||||
- Performance & scale
|
||||
- Profiling and memory audit: guide future optimizations by identifying bottlenecks and alloc hotspots
|
||||
@@ -33,9 +28,7 @@ tags:
|
||||
- tag connections with metadata
|
||||
- support protected connections (don’t trim them under pressure)
|
||||
- implement exponential dial backoff to avoid peer hammering
|
||||
- Modular Gossipsub
|
||||
- Pluggable GossipSub scoring
|
||||
- TODO
|
||||
|
||||
#### Uncategorized
|
||||
The following items are not part of our current roadmap. They haven't been requested by any consumer of nim-libp2p, so they do not have any prioritization status. Still, they are recorded here potential future consideration.
|
||||
|
||||
Reference in New Issue
Block a user