Skip to content

Releases: ipfs/kubo

v0.32.1

15 Nov 20:50
v0.32.1
9017453
Compare
Choose a tag to compare

This release was brought to you by the Shipyard team.

Overview

This is a bugfix release on top of v0.32.0 to include go-libp2p-kad-dht v0.28.1.
If you run with Routing.AcceleratedDHTClient=true make sure to update.

Release v0.32 issue #10547

🗣 Discuss

If you have comments, questions, or feedback on this release, please post here.

If you experienced any bugs with the release, please post an issue.

🔦 Highlights

🎯 AutoTLS: Automatic Certificates for libp2p WebSockets via libp2p.direct

This release introduces an experimental feature that significantly improves how browsers (Helia, Service Worker) can connect to Kubo node.

Opt-in configuration allows a publicly dialable Kubo nodes (public IP, port forwarding, or NAT with uPnP) to obtain CA-signed TLS certificates for libp2p Secure WebSocket (WSS) connections automatically.

Tip

To enable this feature, set AutoTLS.Enabled to true and add a listener for /tls/sni/*.libp2p.direct/ws on a separate TCP port:

{
+ "AutoTLS": { "Enabled": true },
  "Addresses": {
    "Swarm": {
      "/ip4/0.0.0.0/tcp/4001",
+     "/ip4/0.0.0.0/tcp/4002/tls/sni/*.libp2p.direct/ws",
      "/ip6/::/tcp/4001",
+     "/ip6/::/tcp/4002/tls/sni/*.libp2p.direct/ws",

After restarting your node for the first time you may need to wait 5-15 minutes to pass all checks and for the changes to take effect.
We are working on sharing the same TCP port with other transports (go-libp2p#2984).

See AutoTLS configuration for more details how to enable it and what to expect.

This is an early preview, we appreciate you testing and filling bug reports or feedback in the tracking issue at kubo#10560.

📦️ Dependency updates

  • update ipfs-webui to v4.4.0
  • update boxo to v0.24.1 + v0.24.2 + v0.24.3
    • This includes a number of fixes and bitswap improvements, and support for filtering from IPIP-484 in delegated HTTP routing and IPNI queries.
  • update go-libp2p to v0.37.0
    • This update required removal of Swarm.RelayService.MaxReservationsPerPeer configuration option from Kubo. If you had it set, remove it from your configuration file.
  • update go-libp2p-kad-dht to v0.27.0 + v0.28.0 + v0.28.1
  • update go-libp2p-pubsub to v0.12.0
  • update p2p-forge/client to v0.0.2
  • removed go-homedir
    • The github.com/mitchellh/go-homedir repo is archived, no longer needed, and no longer maintained.
    • homedir.Dir is replaced by the stdlib os.UserHomeDir
    • homedir.Expand is replaced by fsutil.ExpandHome in the github.com/ipfs/kubo/misc/fsutil package.
    • The new github.com/ipfs/kubo/misc/fsutil package contains file utility code previously located elsewhere in kubo.

📝 Changelog

Full Changelog
Read more

v0.32.0

14 Nov 01:36
v0.32.0
ad1055c
Compare
Choose a tag to compare

Warning

If you depend on Routing.AcceleratedDHTClient=true this release contains a regression where accelerated client does not crawl the network correctly and the regular one is used instead as a fallback, making announcements slower than expected.

The fix for Routing.AcceleratedDHTClient=true is in v0.32.1.

If you don't use Routing.AcceleratedDHTClient=true, this release is perfectly fine to use as-is.

This release was brought to you by the Shipyard team.

Overview

Release v0.32.0 issue #10547

🗣 Discuss

If you have comments, questions, or feedback on this release, please post here.

If you experienced any bugs with the release, please post an issue.

🔦 Highlights

🎯 AutoTLS: Automatic Certificates for libp2p WebSockets via libp2p.direct

This release introduces an experimental feature that significantly improves how browsers (Helia, Service Worker) can connect to Kubo node.

Opt-in configuration allows a publicly dialable Kubo nodes (public IP, port forwarding, or NAT with uPnP) to obtain CA-signed TLS certificates for libp2p Secure WebSocket (WSS) connections automatically.

Tip

To enable this feature, set AutoTLS.Enabled to true and add a listener for /tls/sni/*.libp2p.direct/ws on a separate TCP port:

{
+ "AutoTLS": { "Enabled": true },
  "Addresses": {
    "Swarm": {
      "/ip4/0.0.0.0/tcp/4001",
+     "/ip4/0.0.0.0/tcp/4002/tls/sni/*.libp2p.direct/ws",
      "/ip6/::/tcp/4001",
+     "/ip6/::/tcp/4002/tls/sni/*.libp2p.direct/ws",

After restarting your node for the first time you may need to wait 5-15 minutes to pass all checks and for the changes to take effect.
We are working on sharing the same TCP port with other transports (go-libp2p#2984).

See AutoTLS configuration for more details how to enable it and what to expect.

This is an early preview, we appreciate you testing and filling bug reports or feedback in the tracking issue at kubo#10560.

📦️ Dependency updates

  • update ipfs-webui to v4.4.0
  • update boxo to v0.24.1 + v0.24.2 + v0.24.3
    • This includes a number of fixes and bitswap improvements, and support for filtering from IPIP-484 in delegated HTTP routing and IPNI queries.
  • update go-libp2p to v0.37.0
    • This update required removal of Swarm.RelayService.MaxReservationsPerPeer configuration option from Kubo. If you had it set, remove it from your configuration file.
  • update go-libp2p-kad-dht to v0.27.0 + v0.28.0
  • update go-libp2p-pubsub to v0.12.0
  • update p2p-forge/client to v0.0.2
  • removed go-homedir
    • The github.com/mitchellh/go-homedir repo is archived, no longer needed, and no longer maintained.
    • homedir.Dir is replaced by the stdlib os.UserHomeDir
    • homedir.Expand is replaced by fsutil.ExpandHome in the github.com/ipfs/kubo/misc/fsutil package.
    • The new github.com/ipfs/kubo/misc/fsutil package contains file utility code previously located elsewhere in kubo.

📝 Changelog

Full Changelog
Read more

v0.32.0-rc2

08 Nov 00:42
v0.32.0-rc2
4f06b6a
Compare
Choose a tag to compare
v0.32.0-rc2 Pre-release
Pre-release

See the related issue: #10547

And the draft changelog: docs/changelogs/v0.32.md

If you are brave, consider enabling AutoTLS and provide feedback.

v0.32.0-rc1

30 Oct 18:23
v0.32.0-rc1
60fa6cd
Compare
Choose a tag to compare
v0.32.0-rc1 Pre-release
Pre-release

See the related issue: #10547

And the draft changelog: docs/changelogs/v0.32.md

If you are brave, consider enabling AutoTLS and provide feedback.

v0.31.0

16 Oct 19:23
5a32936
Compare
Choose a tag to compare

This release was brought to you by the Shipyard team.

Overview

Release v0.31.0 issue #10499

🗣 Discuss

If you have comments, questions, or feedback on this release, please post here.

If you experienced any bugs with the release, please post an issue.

🔦 Highlights

Experimental Pebble Datastore

Pebble visits Kubo

Pebble provides a high-performance alternative to leveldb as the datastore, and provides a modern replacement for legacy badgerv1.

A fresh Kubo node can be initialized with pebbleds profile via ipfs init --profile pebbleds.

There are a number of parameters available for tuning pebble's performance to your specific needs. Default values are used for any parameters that are not configured or are set to their zero-value.
For a description of the available tuning parameters, see kubo/docs/datastores.md#pebbleds.

New metrics

lowpower profile no longer breaks DHT announcements

We've notices users were applying lowpower profile, and then reporting content routing issues. This was because lowpower disabled reprovider system and locally hosted data was no longer announced on Amino DHT.

This release changes lowpower profile to not change reprovider settings, ensuring the new users are not sabotaging themselves. It also adds annouce-on and announce-off profiles for controlling announcement settings separately.

Important

If you've ever applied the lowpower profile before, there is a high chance your node is not announcing to DHT anymore.
If you have Reprovider.Interval set to 0 you may want to set it to 22h (or run ipfs config profile apply announce-on) to fix your system.

As a convenience, ipfs daemon will warn if reprovide system is disabled, creating oportinity to fix configuration if it was not intentional.

go 1.23, boxo 0.24 and go-libp2p 0.36.5

Various bugfixes. Please update.

📝 Changelog

Full Changelog
Read more

v0.31.0-rc2

08 Oct 19:09
v0.31.0-rc2
bd9e154
Compare
Choose a tag to compare
v0.31.0-rc2 Pre-release
Pre-release

This second RC includes go-libp2p v0.36.5 and go 1.23.2 bugfixes.

Changelog: docs/changelogs/v0.31.md

Provide feedback in: https://discuss.ipfs.tech/t/kubo-v0-31-0-rc2-is-out/18592/

v0.31.0-rc1

04 Oct 13:34
Compare
Choose a tag to compare
v0.31.0-rc1 Pre-release
Pre-release

See the related issue: #10499

And the draft changelog: docs/changelogs/v0.31.md

v0.30.0

11 Sep 15:48
846c5cc
Compare
Choose a tag to compare

Overview

🔦 Highlights

This release took longer and is more packed with fixes and features than usual.

Important

TLDR: update, it contains many, many fixes.

Improved P2P connectivity

This release comes with significant go-libp2p update from v0.34.1 to v0.36.3 (release notes).

It includes multiple fixes to key protocols: QUIC/Webtransport/WebRTC, Connection Upgrades through Relay (DCUtR), and Secure WebSockets.

Also, peers that are behind certain types of NAT will now be more reachable. For this alone, Kubo users are highly encouraged to upgrade.

Refactored Bitswap and dag-pb chunker

Some workloads may experience improved memory profile thanks to optimizations from Boxo SDK v0.23.0.

Important

Storage providers should upgrade to take advantage of the Bitswap server fix, which resolves the issue of greedy peers depleting available wantlist slots for their PeerID, resulting in stalled downloads.

WebRTC-Direct Transport enabled by default

Kubo now ships with WebRTC Direct listener enabled by default: /udp/4001/webrtc-direct.

WebRTC Direct complements existing /wss (Secure WebSockets) and /webtransport transports. Unlike /wss, which requires a domain name and a CA-issued TLS certificate, WebRTC Direct works with IPs and can be enabled by default on all Kubo nodes.

Learn more: Swarm.Transports.Network.WebRTCDirect

Note

Kubo 0.30 includes a migration for existing users that adds /webrtc-direct listener on the same UDP port as /udp/{port}/quic-v1. This supports the WebRTC-Direct rollout by reusing preexisting UDP firewall settings and port mappings created for QUIC.

UnixFS 1.5: Mode and Modification Time Support

Kubo now allows users to opt-in to store mode and modification time for files, directories, and symbolic links.
By default, if you do not opt-in, the old behavior remains unchanged, and the same CIDs will be generated as before.

The ipfs add CLI options --preserve-mode and --preserve-mtime can be used to store the original mode and last modified time of the file being added, and ipfs files stat /ipfs/CID can be used for inspecting these optional attributes:

$ touch ./file
$ chmod 654 ./file
$ ipfs add --preserve-mode --preserve-mtime -Q ./file
QmczQr4XS1rRnWVopyg5Chr9EQ7JKpbhgnrjpb5kTQ1DKQ

$ ipfs files stat /ipfs/QmczQr4XS1rRnWVopyg5Chr9EQ7JKpbhgnrjpb5kTQ1DKQ
QmczQr4XS1rRnWVopyg5Chr9EQ7JKpbhgnrjpb5kTQ1DKQ
Size: 0
CumulativeSize: 22
ChildBlocks: 0
Type: file
Mode: -rw-r-xr-- (0654)
Mtime: 13 Aug 2024, 21:15:31 UTC

The CLI and HTTP RPC options --mode, --mtime and --mtime-nsecs can be used to set them to arbitrary values.

Opt-in support for mode and mtime was also added to MFS (ipfs files --help). For more information see --help text of ipfs files touch|stat|chmod commands.

Modification time support was also added to the Gateway. If present, value from file's dag-pb is returned in Last-Modified HTTP header and requests made with If-Modified-Since can produce HTTP 304 not modified response.

Note

Storing mode and mtime requires root block to be dag-pb and disabled raw-leaves setting to create envelope for storing the metadata.

AutoNAT V2 Service Introduced Alongside V1

The AutoNAT service enables nodes to determine their public reachability on the internet. AutoNAT V2 enhances this protocol with improved features. In this release, Kubo will offer both V1 and V2 services to other peers, although it will continue to use only V1 when acting as a client. Future releases will phase out V1, transitioning clients to utilize V2 exclusively.

For more details, see the Deployment Plan for AutoNAT V2 and AutoNAT configuration options.

Automated ipfs version check

Kubo now performs privacy-preserving version checks using the libp2p identify protocol on peers detected by the Amino DHT client.
If more than 5% of Kubo peers seen by your node are running a newer version, you will receive a log message notification.

  • For manual checks, refer to ipfs version check --help for details.
  • To disable automated checks, set Version.SwarmCheckEnabled to false.

Version Suffix Configuration

Defining the optional agent version suffix is now simpler. The Version.AgentSuffix value from the Kubo config takes precedence over any value provided via ipfs daemon --agent-version-suffix (which is still supported).

Note

Setting a custom version suffix helps with ecosystem analysis, such as Amino DHT reports published at https://stats.ipfs.network

/unix/ socket support in Addresses.API

This release fixes a bug which blocked users from using Unix domain sockets for Kubo's RPC (instead of a local HTTP port).

$ ipfs config Addresses.API "/unix/tmp/kubo.socket"
$ ipfs daemon # start with rpc socket
...
RPC API server listening on /unix/tmp/kubo.socket

$ # cli client, in different terminal can find socket via /api file
$ cat $IPFS_PATH/api
/unix/tmp/kubo.socket

$ # or have it pased via --api
$ ipfs --api=/unix/tmp/kubo.socket id

Cleaned Up ipfs daemon Startup Log

The ipfs daemon startup output has been streamlined to enhance clarity and usability:

$ ipfs daemon
Initializing daemon...
Kubo version: 0.30.0
Repo version: 16
System version: amd64/linux
Golang version: go1.22.5
PeerID: 12D3KooWQ73s1CQsm4jWwQvdCAtc5w8LatyQt7QLQARk5xdhK9CE
Swarm listening on 127.0.0.1:4001 (TCP+UDP)
Swarm listening on 192.0.2.10:4001 (TCP+UDP)
Swarm listening on [::1]:4001 (TCP+UDP)
Swarm listening on [2001:0db8::10]:4001 (TCP+UDP)
Run 'ipfs id' to inspect announced and discovered multiaddrs of this node.
RPC API server listening on /ip4/127.0.0.1/tcp/5001
WebUI: http://127.0.0.1:5001/webui
Gateway server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready

The previous lengthy listing of all listener and announced multiaddrs has been removed due to its complexity, especially with modern libp2p nodes sharing multiple transports and long lists of /webtransport and /webrtc-direct certhashes.
The output now features a simplified list of swarm listeners, displayed in the format host:port (TCP+UDP), which provides essential information for debugging connectivity issues, particularly related to port forwarding.
Announced libp2p addresses are no longer printed on startup, because libp2p may change or augument them based on AutoNAT, relay, and UPnP state. Instead, users are prompted to run ipfs id to obtain up-to-date list of listeners and announced multiaddrs in libp2p format.

Commands Preserve Specified Hostname

When executing a CLI command over Kubo RPC API, if a hostname is specified by --api=/dns4/<domain>/ the resulting HTTP request now contains the hostname, instead of the the IP address that the hostname resolved to, as was the previous behavior. This makes it easier for those trying to run Kubo behind a reverse proxy using hostname-based rules.

📝 Changelog

Full Changelog
Read more

v0.30.0-rc3

05 Sep 23:52
2b1af8d
Compare
Choose a tag to compare
v0.30.0-rc3 Pre-release
Pre-release

v0.30.0-rc2

28 Aug 18:41
Compare
Choose a tag to compare
v0.30.0-rc2 Pre-release
Pre-release

Warning

This RC2 has to be run with GODEBUG=asynctimerchan=1 environment variable due to regression caused by go 1.23 described in #10501

Changelog: docs/changelogs/v0.30.md