Skip to content

go-libp2p v0.23 #1690

@marten-seemann

Description

@marten-seemann

🗺 What's left for release

WebTransport: Tracking issue #1717

Yamux:

Misc:

go-libp2p (view)

🔦 Highlights

WebTransport

go-libp2p now has experimental support for WebTransport, powered by webtransport-go. WebTransport is a brand-new transport protocol currently under development at the IETF and w3c, and already supported by Chrome. WebTransport allows browsers to establish an encrypted, stream-multiplexed connection (running on top of QUIC) to servers.

js-libp2p is currently working on a WebTransport client implementation: https://github.com/libp2p/js-libp2p-webtransport.

How to enable

Because support is still experimental, WebTransport has be explicitly enabled. When constructing a node, pass in the WebTransport transport, and configure a WebTransport listen address:

host, err := libp2p.New(
	libp2p.DefaultTransports,
	libp2p.Transport(webtransport.New),
        libp2p.ListenAddrStrings("/ip4/0.0.0.0/udp/1234/quic/webtransport"),
)

Other

  • It's now possible to disable reuseport for the QUIC transport (quic: add DisableReuseport option #1476). Note: If disabled, QUIC cannot be use for NAT hole punching.
  • If no listen addresses are specified, a libp2p now listens on TCP and QUIC (both IPv4 and IPv6).
  • Transports can now have a say in how a multiaddr is resolved: Add Resolver interface to transport #1719. This allows transports to modify the multiaddr before the address is dialed. A transport can set the SNI field for TLS or decide to do its own domain name resolution.
  • Yamux now regularly remeasures the RTT of the underlying connection. The RTT is used to auto-tune the size of the receive buffer.
  • The QUIC and TCP transports now don't collect metrics, unless the WithMetrics option is passed to their constructor (QUIC change, TCP change).

Changelog

< changelog generated by scripts/mkreleaselog >

✅ Release Checklist

  • Stage 0 - Finishing Touches
    • Go through relevant libp2p repos looking for unreleased changes that should make it into the release. If you find any, cut releases.
    • Run go get -u ./... to see if there are any out-of-date deps that look important. If there are, bubble them. Try to avoid directly updating indirect deps in go-libp2p's go.mod when possible.
  • Stage 1 - Release
    • Publish the release through the GitHub UI, adding the release notes. Some users rely on this to receive notifications of new releases.
    • Announce the release on the discuss.libp2p.io.
  • Stage 2 - Update Upstream
  • Make required changes to the release process.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    🎉 Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions