Skip to content

Releases: ipfs/kubo

v0.22.0-rc1

27 Jul 12:48
v0.22.0-rc1
Compare
Choose a tag to compare
v0.22.0-rc1 Pre-release
Pre-release

See the related issue: #9911

Changelog: docs/changelogs/v0.22.md

v0.21.0

03 Jul 10:56
v0.21.0
294db3e
Compare
Choose a tag to compare

Overview

🔦 Highlights

Saving previously seen nodes for later bootstrapping

Kubo now stores a subset of connected peers as backup bootstrap nodes (kubo#8856).
These nodes are used in addition to the explicitly defined bootstrappers in the
Bootstrap configuration.

This enhancement improves the resiliency of the system, as it eliminates the
necessity of relying solely on the default bootstrappers operated by Protocol
Labs for joining the public IPFS swarm. Previously, this level of robustness
was only available in LAN contexts with mDNS peer discovery
enabled.

With this update, the same level of robustness is applied to peers that lack
mDNS peers and solely rely on the public DHT.

Gateway: DeserializedResponses config flag

This release introduces the
Gateway.DeserializedResponses
configuration flag.

With this flag, one can explicitly configure whether the gateway responds to
deserialized requests or not. By default, this flag is enabled.

Disabling deserialized responses allows the
gateway to operate
as a Trustless Gateway
limited to three verifiable
response types:
application/vnd.ipld.raw,
application/vnd.ipld.car,
and application/vnd.ipfs.ipns-record.

With deserialized responses disabled, the Kubo gateway can serve as a block
backend for other software (like
bifrost-gateway,
IPFS in Chromium
etc) without the usual risks associated with hosting deserialized data behind
third-party CIDs.

client/rpc migration of go-ipfs-http-client

The go-ipfs-http-client RPC has
been migrated into kubo/client/rpc.

With this change the two will be kept in sync, in some previous releases we
updated the CoreAPI with new Kubo features but forgot to port thoses to the
http-client, making it impossible to use them together with the same coreapi
version.

For smooth transition v0.7.0 of go-ipfs-http-client provides updated stubs
for Kubo v0.21.

Gateway: DAG-CBOR/-JSON previews and improved error pages

In this release, we improved the HTML templates of our HTTP gateway:

  1. You can now preview the contents of a DAG-CBOR and DAG-JSON document from your browser, as well as follow any IPLD Links (CBOR Tag 42) contained within them.
  2. The HTML directory listings now contain updated, higher-definition icons.
  3. On gateway error, instead of a plain text error message, web browsers will now get a friendly HTML response with more details regarding the problem.

HTML responses are returned when request's Accept header includes text/html.

DAG-CBOR Preview Error Page
DAG-CBOR Preview Error Page

Gateway: subdomain redirects are now text/html

HTTP 301 redirects from path to subdomain
no longer include the target data in the body.
The data is returned only once, with the final HTTP 200 returned from the
target subdomain.

The HTTP 301 body now includes human-readable text/html message
for clients that do not follow redirects by default:

$ curl "https://subdomain-gw.example.net/ipfs/${cid}/"
<a href="https://${cid}.ipfs.subdomain-gw.example.net/">Moved Permanently</a>.

Rationale can be found in kubo#9913.

Gateway: support for partial CAR export parameters (IPIP-402)

The gateway now supports optional CAR export parameters
dag-scope=block|entity|all and entity-bytes=from:to as specified in
IPIP-402.

Batch block retrieval minimizes round trips, catering to the requirements of
light HTTP clients for directory enumeration, range requests, and content path
resolution.

ipfs dag stat deduping statistics

ipfs dat stat now accept multiple CIDs and will dump advanced statistics
on the number of shared blocks and size of each CID.

$ ipfs dag stat --progress=false QmfXuRxzyVy5H2LssLgtXrKCrNvDY8UBvMp2aoW8LS8AYA QmfZDyu2UFfUhL4VdHaw7Hofivmn5D4DdQj38Lwo86RsnB

CID                                           	Blocks         	Size
QmfXuRxzyVy5H2LssLgtXrKCrNvDY8UBvMp2aoW8LS8AYA	3              	2151
QmfZDyu2UFfUhL4VdHaw7Hofivmn5D4DdQj38Lwo86RsnB	4              	3223

Summary
Total Size: 3326
Unique Blocks: 5
Shared Size: 2048
Ratio: 1.615755

ipfs --enc=json dag stat's keys are a non breaking change, new keys have been added but old keys with previous sementics are still here.

Accelerated DHT Client is no longer experimental

The accelerated DHT client is now
the main recommended solution for users who are hosting lots of data.
By trading some upfront DHT caching and increased memory usage,
one gets provider throughput improvements up to 6 millions times bigger dataset.
See the docs for more info.

The Experimental.AcceleratedDHTClient flag moved to [Routing.AcceleratedDHTClient](docs/config.md#routingaccelerateddhtclient).
A config migration has been added to handle this automatically.

A new tracker estimates the providing speed and warns users if they
should be using AcceleratedDHTClient because they are falling behind.

📝 Changelog

Full Changelog
  • github.com/ipfs/kubo:
  • github.com/ipfs/boxo (v0.8.1 -> v0.10.2-0.20230629143123-2d3edc552442):
    • chore: version 0.10.2
    • fix(gateway): include CORS on subdomain redirects (#395) (ipfs/boxo#395)
    • fix(gateway): ensure 'X-Ipfs-Root' header is valid (#337) (ipfs/boxo#337)
    • docs: prepare changelog for next release [ci skip]
    • chore: version 0.10.1 (#359) (ipfs/boxo#359)
    • fix(gateway): allow CAR trustless requests with path
    • blockstore: replace go.uber.org/atomic with sync/atomic
    • fix(gateway): remove handleUnsupportedHeaders after go-ipfs 0.13 (#350) (ipfs/boxo#350)
    • docs: update RELEASE.md based on 0.9 release (#343) (ipfs/boxo#343)
    • chore: v0.10.0 (#345) (ipfs/boxo#345)
    • docs(changelog): car params from ipip-402
    • docs(changelog): add gateway deserialized responses (#341) (ipfs/boxo#341)
    • feat(gateway): implement IPIP-402 extensions for gateway CAR requests (#303) (ipfs/boxo#303)
    • chore: release v0.9.0
    • changelog: update for 0.8.1 and 0.9.0
    • provider: second round of reprovider refactor
    • feat(unixfs): change protobuf package name to unixfs.v1.pb to prevent collisions with go-unixfs. Also regenerate protobufs with latest gogo
    • feat(ipld/merkledag): remove use of go-ipld-format global registry
    • feat(ipld/merkledag): updated to use its own global go-ipld-legacy registry instead of a shared global registry
    • chore: do not rely on deprecated logger
    • changelog: add changelog for async pin listing (#336) (ipfs/boxo#336)
    • pinner: change the interface to have async pin listing
    • provider: revert through...
Read more

v0.21.0-rc3

20 Jun 13:09
v0.21.0-rc3
9f21cf5
Compare
Choose a tag to compare
v0.21.0-rc3 Pre-release
Pre-release

v0.21.0-rc2

15 Jun 13:22
v0.21.0-rc2
f7bc237
Compare
Choose a tag to compare
v0.21.0-rc2 Pre-release
Pre-release

v0.21.0-rc1

12 Jun 16:17
v0.21.0-rc1
85c53ab
Compare
Choose a tag to compare
v0.21.0-rc1 Pre-release
Pre-release

v0.20.0

09 May 11:11
v0.20.0
b8c4725
Compare
Choose a tag to compare

Overview

🔦 Highlights

Boxo under the covers

We have consolidated many IPFS repos into Boxo, and this release switches Kubo over to use Boxo instead of those repos, resulting in the removal of 27 dependencies from Kubo:

  • github.com/ipfs/go-bitswap
  • github.com/ipfs/go-ipfs-files
  • github.com/ipfs/tar-utils
  • gihtub.com/ipfs/go-block-format
  • github.com/ipfs/interface-go-ipfs-core
  • github.com/ipfs/go-unixfs
  • github.com/ipfs/go-pinning-service-http-client
  • github.com/ipfs/go-path
  • github.com/ipfs/go-namesys
  • github.com/ipfs/go-mfs
  • github.com/ipfs/go-ipfs-provider
  • github.com/ipfs/go-ipfs-pinner
  • github.com/ipfs/go-ipfs-keystore
  • github.com/ipfs/go-filestore
  • github.com/ipfs/go-ipns
  • github.com/ipfs/go-blockservice
  • github.com/ipfs/go-ipfs-chunker
  • github.com/ipfs/go-fetcher
  • github.com/ipfs/go-ipfs-blockstore
  • github.com/ipfs/go-ipfs-posinfo
  • github.com/ipfs/go-ipfs-util
  • github.com/ipfs/go-ipfs-ds-help
  • github.com/ipfs/go-verifcid
  • github.com/ipfs/go-ipfs-exchange-offline
  • github.com/ipfs/go-ipfs-routing
  • github.com/ipfs/go-ipfs-exchange-interface
  • github.com/ipfs/go-libipfs

Note: if you consume these in your own code, we recommend migrating to Boxo. To ease this process, there's a tool which will help migrate your code to Boxo.

You can learn more about the Boxo 0.8 release that Kubo now depends and the general effort to get Boxo to be a stable foundation here.

HTTP Gateway

Switch to boxo/gateway library

Gateway code was extracted and refactored into a standalone library that now
lives in boxo/gateway. This
enabled us to clean up some legacy code and remove dependency on Kubo
internals.

The GO API is still being refined, but now operates on higher level abstraction
defined by gateway.IPFSBackend interface. It is now possible to embed
gateway functionality without the rest of Kubo.

See the car
and proxy
examples, or more advanced
bifrost-gateway.

Improved testing

We are also in the progress of moving away from gateway testing being based on
Kubo sharness tests, and are working on
ipfs/gateway-conformance test
suite that is vendor agnostic and can be run against arbitrary HTTP endpoint to
test specific subset of HTTP Gateways specifications.

Trace Context support

We've introduced initial support for traceparent header from W3C's Trace
Context spec
.

If traceparent header is
present in the gateway request, one can use its trace-id part to inspect
trace spans via selected exporter such as Jaeger UI
(docs,
demo).

To learn more, see tracing docs.

Removed legacy features
  • Some Kubo-specific prometheus metrics are no longer available.
  • The legacy opt-in Gateway.Writable is no longer available as of Kubo 0.20.
    • We are working on developing a modern replacement.
      To support our efforts, please leave a comment describing your use case in
      ipfs/specs#375.

--empty-repo is now the default

When creating a repository with ipfs init, --empty-repo=true is now the default. This means
that your repository will be empty by default instead of containing the introduction files.
You can read more about the rationale behind this decision on the tracking issue.

Reminder: ipfs pubsub commands and matching HTTP endpoints are deprecated and will be removed

ipfs pubsub commands and all /api/v0/pubsub/ RPC endpoints and will be removed in the next release. For more information and rational see #9717.

📝 Changelog

Full Changelog
Read more

v0.19.2

03 May 09:48
v0.19.2
afb27ca
Compare
Choose a tag to compare

Highlights

FullRT DHT HTTP Routers

The default HTTP routers are now used when the FullRT DHT client is used. This fixes
the issue where cid.contact is not being queried by default when the accelerated
DHT client was enabled. Read more in (ipfs/kubo#9841).

Changelog

Full Changelog
  • github.com/ipfs/kubo:
    • fix: use default HTTP routers when FullRT DHT client is used (#9841) (ipfs/kubo#9841)
    • chore: update version

Contributors

Contributor Commits Lines ± Files Changed
Gus Eggert 1 +65/-53 4
Henrique Dias 1 +1/-1 1

v0.20.0-rc2

25 Apr 13:49
v0.20.0-rc2
Compare
Choose a tag to compare
v0.20.0-rc2 Pre-release
Pre-release

v0.20.0-rc1

07 Apr 10:29
v0.20.0-rc1
Compare
Choose a tag to compare
v0.20.0-rc1 Pre-release
Pre-release

v0.19.1

05 Apr 20:00
v0.19.1
958e586
Compare
Choose a tag to compare

🔦 Highlights

DHT Timeouts

In v0.16.0, Kubo added the ability to configure custom content routers and DHTs with the custom router type, and as part of this added a default 5 minute timeout to all DHT operations. In some cases with large repos (example), this can cause provide and reprovide operations to fail because the timeout is reached. This release removes these timeouts on DHT operations. If users desire these timeouts, they can be added back using the custom router type.

Changelog

Full Changelog
  • github.com/ipfs/kubo:
    • chore: update version
    • fix: remove timeout on default DHT operations (#9783) (ipfs/kubo#9783)
    • chore: update version
  • github.com/ipfs/go-blockservice (v0.5.0 -> v0.5.1):
    • chore: release v0.5.1
    • fix: remove busyloop in getBlocks by removing batching
  • github.com/libp2p/go-libp2p (v0.26.3 -> v0.26.4):
  • github.com/libp2p/go-libp2p-routing-helpers (v0.6.1 -> v0.6.2):

Contributors

Contributor Commits Lines ± Files Changed
Marco Munizaga 1 +347/-46 5
Gus Eggert 3 +119/-93 8
Jorropo 2 +20/-32 2
galargh 2 +2/-2 2
Marten Seemann 1 +2/-2 1