Skip to content

Releases: ipfs/kubo

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

v0.30.0-rc1

22 Aug 00:56
Compare
Choose a tag to compare
v0.30.0-rc1 Pre-release
Pre-release

v0.29.0

10 Jun 19:46
3f0947b
Compare
Choose a tag to compare

Overview

🔦 Highlights

Add search functionality for pin names

It is now possible to search for pins by name via ipfs pin ls --name "SomeName".
The search is case-sensitive and will return all pins that contain the specified substring in their name.

Tip

The ipfs pin ls -n is now a shorthand for ipfs pin ls --name, mirroring the behavior of ipfs pin add.
See ipfs pin ls --help for more information.

Customizing ipfs add defaults

This release supports overriding global data ingestion defaults used by commands like ipfs add via user-defined Import.* configuration options.
The hash function, CID version, or UnixFS raw leaves and chunker behaviors can be set once, and used as the new implicit default for ipfs add.

Tip

As a convenience, two CID profiles are provided: legacy-cid-v0 and test-cid-v1.
A test profile that defaults to modern CIDv1 can be applied via ipfs config profile apply test-cid-v1.
We encourage users to try it and report any issues in kubo#4143.

📝 Changelog

Full Changelog
  • github.com/ipfs/kubo:
  • github.com/ipfs/boxo (v0.19.0 -> v0.20.0):
  • github.com/ipfs/go-blockservice (v0.5.0 -> v0.5.2):
    • docs: remove contribution section
    • chore: bump version
    • chore: deprecate types and readme
    • chore: release v0.5.1
    • fix: remove busyloop in getBlocks by removing batching
  • github.com/ipfs/go-ipfs-blockstore (v1.3.0 -> v1.3.1):
    • docs: remove contribution section
    • chore: bump version
    • chore: deprecate types and readme
  • github.com/ipfs/go-ipfs-cmds (v0.10.0 -> v0.11.0):
  • github.com/ipfs/go-ipfs-ds-help (v1.1.0 -> v1.1.1):
    • docs: remove contribution section
    • chore: bump version
    • chore: deprecate types and readme
  • github.com/ipfs/go-ipfs-exchange-interface (v0.2.0 -> v0.2.1):
  • github.com/ipfs/go-verifcid (v0.0.2 -> v0.0.3):
  • github.com/ipld/go-car (v0.5.0 -> v0.6.2):
    • v0.6.2 (ipld/go-car#464)
    • fix: opt-in way to allow empty list of roots in CAR headers (ipld/go-car#461)
    • feat: add inverse and version to filter cmd (ipld/go-car#457)
    • v0.6.1 bump
    • chore: update usage of merkledag by go-car (#437) (ipld/go-car#437)
    • feat(cmd/car): add '--no-wrap' option to 'create' command (ipld/go-car#432)
    • fix: remove github.com/ipfs/go-ipfs-blockstore dependency
    • feat: expose index for StorageCar
    • perf: reduce NewCarReader allocations
    • fix(deps): update deps for cmd (use master go-car and go-car/v2 for now)
    • fix: new error strings from go-cid
    • fix: tests should match stderr for verbose output
    • fix: reading from stdin should broadcast EOF to block loaders
    • refactor insertion index to be publicly accessible (ipld/go-car#408)
    • chore: unmigrate from go-libipfs
    • Create CODEOWNERS
    • blockstore: give a direct access to the index for read operations
    • blockstore: only close the file on error in OpenReadWrite, not OpenReadWriteFile
    • fix: handle (and test) WholeCID vs not; fast Has() path for storage
    • ReadWrite: faster Has() by using the in-memory index instead of reading on disk
    • fix: let extract skip missing unixfs shard links
    • fix: error when no files extracted
    • fix: make -f optional, read from stdin if omitted
    • fix: update cmd/car/README with latest description
    • chore: add test cases for extract modes
    • feat: extract accepts '-' as an output path for stdout
    • feat: extract specific path, accept stdin as streaming input
    • fix: if we don't read the full block data, don't error on !EOF
    • blockstore: try to close during Finalize(), even in case of previous error
    • ReadWrite: add an alternative FinalizeReadOnly+Close flow
    • feat: add WithTrustedCar() reader option (#381) (ipld/go-car#381)
    • blockstore: fast path for AllKeysChan using the index
    • fix: switch to crypto/rand.Read
    • stop using the deprecated io/ioutil package
    • fix(doc): fix storage package doc formatting
    • fix: return errors for unsupported operations
    • chore: move insertionindex into store pkg
    • chore: add experimental note
    • fix: minor lint & windows fd test problems
    • feat: docs for StorageCar interfaces
    • feat: ReadableWritable; dedupe shared code
    • feat: add Writable functionality to StorageCar
    • feat: StorageCar as a Readable storage, separate from blockstore
    • feat(blockstore): implement a streaming read only storage
    • feat(cmd): add index create subcommand to create an external carv2 index (ipld/go-car#350)
    • chore: bump version to 0.6.0
    • fix: use goreleaser instead
    • Allow using WalkOption in WriteCar function (ipld/go-car#357)
    • fix: update go-block-format to the version that includes the stubs
    • feat: upgrade from go-block-format to go-libipfs/blocks
    • cleanup readme a bit to make the cli more discoverable (#353) (ipld/go-car#353)
    • Update install instructions in README.md
    • Add a debugging form for car files. (#341) (ipld/go-car#341)
    • (ipld/go-car#340)
    • add a SkipNext method on block reader (#338) (ipld/go-car#338)
    • feat: Has() and Get() will respect StoreIdentityCIDs option
  • github.com/libp2p/go-libp2p (v0.33.2 -> v0.34.1):
Read more

v0.29.0-rc2

04 Jun 18:20
c526f29
Compare
Choose a tag to compare
v0.29.0-rc2 Pre-release
Pre-release

v0.29.0-rc1

27 May 13:26
v0.29.0-rc1
Compare
Choose a tag to compare
v0.29.0-rc1 Pre-release
Pre-release

v0.28.0

15 Apr 08:59
v0.28.0
e7f0f34
Compare
Choose a tag to compare

Overview

RPC client: removed deprecated DHT API

The deprecated DHT API commands in the RPC client have been removed. Instead, use the Routing API.

Gateway: /api/v0 is removed

The legacy subset of the Kubo RPC that was available via the Gateway port and was deprecated is now completely removed. You can read more in #10312.

If you have a legacy software that relies on this behavior, and want to expose parts of /api/v0 next to /ipfs, use reverse-proxy in front of Kubo to mount both Gateway and RPC on the same port. NOTE: exposing RPC to the internet comes with security risk: make sure to specify access control via API.Authorizations.

Removed deprecated Object API commands

The Object API commands deprecated back in 2021 have been removed, except for object diff, object patch add-link and object patch rm-link, whose alternatives have not yet been built (see issues 4801 and 4782).

Kubo ignores loopback addresses on LAN DHT and private addresses on WAN DHT

Kubo no longer keeps track of loopback and private addresses on the LAN and WAN DHTs, respectively. This means that other nodes will not try to dial likely undialable addresses.

To support testing scenarios where multiple Kubo instances run on the same machine, Routing.LoopbackAddressesOnLanDHT is set to true when the test profile is applied.

Pin roots are now prioritized when announcing

The root CIDs of pinned content are now prioritized when announcing to the Amino DHT with Reprovider.Strategy set to all (default) or pinned, making the important CIDs accessible faster.

📝 Changelog

Security Note: CVE-2024-22189 has been addressed by upgrading to quic-go v0.42.0.

Full Changelog

👨‍👩‍👧‍👦 Contributors

Contributor Commits Lines ± Files Changed
Henrique Dias 19 +867/-2806 96
Rod Vagg 7 +921/-475 25
Marcin Rataj 8 +358/-344 18
Guillaume Michel - guissou 1 +145/-485 13
Jorropo 8 +429/-136 22
Łukasz Magiera 4 +284/-48 11
whyrusleeping 1 +90/-90 2
Michael Muré 2 +48/-73 9
Marco Munizaga 6 +86/-29 10
guillaumemichel 3 +93/-1 3
Marten Seemann 1 +31/-4 4
godeamon 3 +11/-8 3
shuangcui 1 +6/-6 5
occupyhabit 1 +3/-3 3
crazehang 1 +2/-2 1
Dennis Trautwein 1 +1/-2 1
“GheisMohammadi” 1 +1/-1 1
web3-bot 1 +2/-0 1
Daniel Norman 1 +1/-1 1

v0.28.0-rc1

11 Apr 06:20
v0.28.0-rc1
Compare
Choose a tag to compare
v0.28.0-rc1 Pre-release
Pre-release

v0.27.0

04 Mar 11:45
v0.27.0
59bcea8
Compare
Choose a tag to compare

Overview

🔦 Highlights

Gateway: support for /api/v0 is deprecated

Support for exposing the legacy subset of Kubo RPC via the Gateway port is deprecated and should not be used. It will be removed in the next version. You can read more in #10312.

If you have a legacy software that relies on this behavior, and want to expose parts of /api/v0 next to /ipfs, use reverse-proxy in front of Kubo to mount both Gateway and RPC on the same port. NOTE: exposing RPC to the internet comes with security risk: make sure to specify access control via API.Authorizations.

IPNS resolver cache's TTL can now be configured

You can now configure the upper-bound of a cached IPNS entry's Time-To-Live via Ipns.MaxCacheTTL.

RPC client: deprecated DHT API, added Routing API

The RPC client for GO (kubo/client/rpc) now includes a Routing API to match the available commands in /api/v0/routing. In addition, the DHT API has been marked as deprecated.

In the next version, all DHT deprecated methods will be removed from the Go RPC client.

Deprecated DHT commands removed from /api/v0/dht

All the DHT commands that were deprecated for over a year were finally removed from /api/v0/dht. Users should switch to modern /api/v0/routing which works with both Amino DHT and Delegated Routers.

Repository migrations are now trustless

Kubo now only uses trustless requests (e.g., CAR files) when downloading repository migrations via HTTP. This further strengthens Kubo by not delegating trust to public gateways. The migration binaries are locally verified before being executed.

📝 Changelog

Full Changelog

👨‍👩‍👧‍👦 Contributors

Contributor Commits Lines ± Files Changed
Henrique Dias 26 +1668/-1484 96
Sukun 13 +983/-618 68
Jorropo 18 +501/-222 32
Marten Seemann 2 +17/-244 5
dozyio 1 +117/-132 31
Marcin Rataj 7 +100/-20 8
Alexandr Burdiyan 2 +29/-54 2
Tyler 1 +17/-19 2
KeienWang 2 +14/-14 12
Håvard Anda Estensen 1 +14/-14 11
Halimao 2 +17/-4 2
hannahhoward 1 +14/-6 2
alex 1 +8/-8 4
shuoer86 1 +7/-7 5
John Chase 1 +0/-12 1
GoodDaisy 1 +5/-5 4
Michael Muré 1 +6/-2 1
吴小白 1 +3/-3 3
Vehorny 1 +3/-3 2
Eric 1 +1/-1 1