IPFS 0.6.0 is here! QUIC, Noise, Peering and more!

IPFS 0.6.0 is here! QUIC, Noise, Peering and more!

# 🔦 Go-IPFS 0.6.0 Highlights

MIGRATION: This release contains a small config migration to enable listening on the QUIC transport in addition to the TCP transport. This migration will:

  • Normalize multiaddrs in the bootstrap list to use the /p2p/Qm... syntax for multiaddrs instead of the /ipfs/Qm... syntax.
  • Add QUIC addresses for the default bootstrappers, as necessary. If you’ve removed the default bootstrappers from your bootstrap config, the migration won’t add them back.
  • Add a QUIC listener address to mirror any TCP addresses present in your config. For example, if you’re listening on /ip4/, this migration will add a listen address for /ip4/

# 🚂 QUIC is now enabled by default

This release enables the QUIC transport (draft 28) by default for both inbound and outbound connections. When connecting to new peers, libp2p will continue to dial all advertised addresses (tcp + quic) in parallel so if the QUIC connection fails for some reason, the connection should still succeed.

If you want to learn more about the advantages of QUIC, check out the release notes (opens new window) for more information.

NOTE: The QUIC transport included in this release is backwards incompatible with the experimental QUIC transport included in previous releases. Unfortunately, the QUIC protocol underwent some significant breaking changes and supporting multiple versions wasn’t an option. In practice this degrades gracefully as go-ipfs will simply fall back on the TCP transport when dialing nodes with incompatible QUIC versions.

# 🔐 Introducing the Noise Security Transport

This go-ipfs release introduces a new security transport: libp2p Noise (opens new window) (built from the Noise Protocol Framework (opens new window)). While TLS1.3 remains the default go-ipfs security transport, Noise is simpler to implement from scratch and will be the standard cross-platform libp2p security transport going forward.

This brings us one step closer to deprecating and removing support for SECIO.

While enabled by default, TLS1.3 and SECIO will still be negotiated prior to Noise. Once the network has had time to upgrade, Noise will take priority over SECIO. If you’d like to prefer Noise over other security transports, you can change its priority in the config (opens new window) (Swarm.Transports.Security.Noise).

# 🚪 Gateway

This release brings two gateway-relevant features: custom 404 pages and base36 support.

# 🚫 Custom 404 pages

You can now customize 404 Not Found error pages by including an ipfs-404.html file somewhere in the request path. When a requested file isn’t found, go-ipfs will look for an ipfs-404.html in the same directory as the requested file, and in each parent directory. If found, this file will be returned (with a 404 status code) instead of the usual error message.

# 🗝️ Base36 Support

This release adds support for a new multibase encoding: base36. Base36 is an optimally efficient case-insensitive alphanumeric encoding. Case-insensitive alphanumeric encodings are important for the subdomain gateway as domain names are case insensitive.

While base32 (the current default encoding used in subdomains) is simpler than base36, it’s not optimally efficient and base36 Ed25519 IPNS keys are 2 characters too big to fit into the 63 character subdomain length limit. The extra efficiency from base36 brings us under this limit and allows Ed25519 IPNS keys to work with the subdomain gateway.

This release adds support for base36 but won’t use it by default. If you’d like to re-encode an Ed25519 IPNS key into base36, you can use the ipfs cid format command:

$ ipfs cid format -v 1 --codec libp2p-key -b base36 bafzaajaiaejca4syrpdu6gdx4wsdnokxkprgzxf4wrstuc34gxw5k5jrag2so5gk
# k51qzi5uqu5dj16qyiq0tajolkojyl9qdkr254920wxv7ghtuwcz593tp69z9m

# 🕸️ Gossipsub upgraded to v1.1

This release brings a new Gossipsub protocol version: 1.1. You can read about it in the blog post (opens new window).

# 🤝 Peering

This release introduces a new Peering feature. The peering subsystem configures go-ipfs to connect to, remain connected to, and reconnect to a set of nodes. Nodes should use this subsystem to create “sticky” links between frequently useful peers to improve reliability. You can read more about it and how to configure peers in the go-ipfs config readme (opens new window).

# Thank you contributors!

A huge thank you to everyone who contributed (opens new window) patches and improvements in this release, all 46 of you! We couldn’t have made this happen without your help and feedback. ❤

# Install, upgrade, and join us!

You can get started by installing go-ipfs (opens new window) or upgrading to go-ipfs 0.6 (opens new window).

There are many ways to get involved with IPFS based on your skill set, interest, and availability. Please check out our contribution page (opens new window) on GitHub for guidance and next steps.

This is an exciting time for IPFS and the web in general. Join us!