Releases: ipfs/kubo
v0.21.0-rc2
Changelog: docs/changelogs/v0.21.md
v0.21.0-rc1
Changelog: docs/changelogs/v0.21.md
v0.20.0
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.
- An up-to-date list of gateway metrics can be found in boxo/gateway/metrics.go.
- 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.
- We are working on developing a modern replacement.
--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
- github.com/ipfs/kubo:
- fix: deadlock on retrieving WebTransport addresses (#9857) (ipfs/kubo#9857)
- docs(config): remove mentions of relay v1 (#9860) (ipfs/kubo#9860)
- Merge branch 'master' into merge-release-v0.19.2
- docs: add changelog for v0.19.2
- feat: [email protected] (#9835) (ipfs/kubo#9835)
- fix: use default HTTP routers when FullRT DHT client is used (#9841) (ipfs/kubo#9841)
- chore: update version
- docs: add
ipfs pubsub
deprecation reminder to changelog (#9827) (ipfs/kubo#9827) - docs: preparing 0.20 changelog for release (#9799) (ipfs/kubo#9799)
- feat: boxo tracing and traceparent support (#9811) (ipfs/kubo#9811)
- chore: update version
- chore: update version
- update go-libp2p to v0.27.0
- docs: add optimistic provide feature description
- feat: add experimental optimistic provide
- fix(ci): speed up docker build (#9800) (ipfs/kubo#9800)
- feat(tracing): use OTEL_PROPAGATORS as per OTel spec (#9801) (ipfs/kubo#9801)
- docs: fix jaeger command (#9797) (ipfs/kubo#9797)
- Merge Release: v0.19.1 (#9794) (ipfs/kubo#9794)
- chore: upgrade OpenTelemetry dependencies (#9736) (ipfs/kubo#9736)
- test: fix flaky content routing over HTTP test (#9772) (ipfs/kubo#9772)
- feat: allow injecting custom path resolvers (#9750) (ipfs/kubo#9750)
- feat: add changelog entry for router timeouts for v0.19.1 (#9784) (ipfs/kubo#9784)
- feat(gw): new metrics and HTTP range support (#9786) (ipfs/kubo#9786)
- feat!: make --empty-repo default (#9758) (ipfs/kubo#9758)
- fix: remove timeout on default DHT operations (#9783) (ipfs/kubo#9783)
- refactor: switch gateway code to new API from go-libipfs (#9681) (ipfs/kubo#9681)
- test: port remote pinning tests to Go (#9720) (ipfs/kubo#9720)
- feat: add identify option to swarm peers command
- test: port routing DHT tests to Go (#9709) (ipfs/kubo#9709)
- test: fix autoclient flakiness (#9769) (ipfs/kubo#9769)
- test: skip flaky pubsub test (#9770) (ipfs/kubo#9770)
- chore: migrate go-libipfs to boxo
- feat: add tracing to the commands client
- feat: add client-side metrics for routing-v1 client
- test: increase max wait time for peering assertion
- feat: remove writable gateway (#9743) (ipfs/kubo#9743)
- Process Improvement: v0.18.0 (ipfs/kubo#9484)
- fix: deadlock while racing
ipfs dag import
andipfs repo gc
- feat: improve dag/import (#9721) (ipfs/kubo#9721)
- ci: remove circleci config (ipfs/kubo#9687)
- docs: use fx.Decorate instead of fx.Replace in examples (#9725) (ipfs/kubo#9725)
- Create Changelog: v0.20 (ipfs/kubo#9742)
- Merge Release: v0.19.0 (ipfs/kubo#9741)
- feat(gateway): invalid CID returns 400 Bad Request (#9726) (ipfs/kubo#9726)
- fix: remove outdated changelog part (ipfs/kubo#9739)
- docs: 0.19 changelog (ipfs/kubo#9707)
- fix: canonicalize user defined headers
- fix: apply API.HTTPHeaders to /webui redirect
- feat: add heap allocs to 'ipfs diag profile'
- fix: future proof with > rcmgr.DefaultLimit for new enum rcmgr values
- test: add test for presarvation of unlimited configs for inbound systems
- fix: pre...
v0.19.2
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
Changelog: docs/changelogs/v0.20.md
v0.20.0-rc1
Changelog: docs/changelogs/v0.20.md
v0.19.1
🔦 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):
- release v0.26.4
- autorelay: fix busy loop bug and flaky tests in relay finder (#2208) (libp2p/go-libp2p#2208)
- github.com/libp2p/go-libp2p-routing-helpers (v0.6.1 -> v0.6.2):
- Release v0.6.2 (#73) (libp2p/go-libp2p-routing-helpers#73)
- feat: zero timeout on composed routers should disable timeout (#72) (libp2p/go-libp2p-routing-helpers#72)
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 |
v0.19.0
Overview
🔦 Highlights
Improving the libp2p resource management integration
There are further followups up on libp2p resource manager improvements in Kubo 0.18.0
and 0.18.1:
ipfs swarm limits
andipfs swarm stats
have been replaced byipfs swarm resources
to provide a single/combined view for limits and their current usage in a more intuitive ordering.- Removal of
Swarm.ResourceMgr.Limits
config. Instead the power user can specify limits in a .json file that are fed directly to go-libp2p. This allows the power user to take advantage of the new resource manager types introduced in go-libp2p 0.25 including "use default", "unlimited", "block all".- Note: we don't expect most users to need these capablities, but they are there if so.
- Doc updates.
Gateways
Signed IPNS Record response format
This release implements IPIP-351 and
adds Gateway support for returning signed (verifiable) ipns-record
(0x0300)
when /ipns/{libp2p-key}
is requested with either
Accept: application/vnd.ipfs.ipns-record
HTTP header
or ?format=ipns-record
URL query parameter.
The Gateway in Kubo already supported trustless, verifiable retrieval of immutable /ipfs/
namespace.
With ?format=ipns-record
, light HTTP clients are now able to get the same level of verifiability for IPNS websites.
Tooling is limited at the moment, but we are working on go-libipfs examples that illustrate the verifiable HTTP client pattern.
Example: fetch IPNS record over HTTP and inspect it with ipfs name inspect --verify
$ FILE_CID=$(echo "Hello IPFS" | ipfs add --cid-version 1 -q)
$ IPNS_KEY=$(ipfs key gen test)
$ ipfs name publish /ipfs/$FILE_CID --key=test --ttl=30m
Published to k51q..dvf1: /ipfs/bafk..z244
$ curl "http://127.0.0.1:8080/ipns/$IPNS_KEY?format=ipns-record" > signed.ipns-record
$ ipfs name inspect --verify $IPNS_KEY < signed.ipns-record
Value: "/ipfs/bafk..."
Validity Type: "EOL"
Validity: 2023-03-09T23:13:34.032977468Z
Sequence: 0
TTL: 1800000000000
PublicKey: ""
Signature V1: "m..."
Signature V2: "m..."
Data: {...}
Validation results:
Valid: true
PublicKey: 12D3...
Addition of "autoclient" router type
A new routing type "autoclient" has been added. This mode is similar to "auto", in that it is a hybrid of content routers (including Kademlia and HTTP routers), but it does not run a DHT server. This is similar to the difference between "dhtclient" and "dht" router types.
See the Routing.Type documentation for more information.
Deprecation of the ipfs pubsub
commands and matching HTTP endpoints
We are deprecating ipfs pubsub
and all /api/v0/pubsub/
RPC endpoints and will remove them in the next release.
For more information and rational see #9717.
📝 Changelog
Full Changelog
- github.com/ipfs/kubo:
- chore: update version
- docs: 0.19 changelog (ipfs/kubo#9707)
- fix: canonicalize user defined headers
- fix: apply API.HTTPHeaders to /webui redirect
- feat: add heap allocs to 'ipfs diag profile'
- fix: future proof with > rcmgr.DefaultLimit for new enum rcmgr values
- test: add test for presarvation of unlimited configs for inbound systems
- fix: preserve Unlimited StreamsInbound in connmgr reconciliation
- test: fix flaky rcmgr test
- chore: deprecate the pubsub api
- test: port peering test from sharness to Go
- test: use
T.TempDir
to create temporary test directory - fix: --verify forgets the verified key
- test: name --verify forgets the verified key
- feat: add "autoclient" routing type
- test: parallelize more of rcmgr Go tests
- test: port legacy DHT tests to Go
- fix: t0116-gateway-cache.sh (ipfs/kubo#9696)
- docs: add bifrost to early testers (ipfs/kubo#9699)
- fix: typo in documentation for install path
- chore: update version
- feat: Reduce RM code footprint
- Doc updates/additions
- ci: replace junit html generation with gh action
- test: port rcmgr sharness tests to Go
- test(gateway): use deterministic CAR fixtures (ipfs/kubo#9657)
- feat(gateway): error handling improvements (500, 502, 504) (#9660) (ipfs/kubo#9660)
- docs: be clear about swarm.addrfilters (#9661) (ipfs/kubo#9661)
- chore: update go-libp2p to v0.26 (#9656) (ipfs/kubo#9656)
- feat(pinning): connect some missing go context (#9557) (ipfs/kubo#9557)
- fix(gateway): return HTTP 500 on ErrResolveFailed (#9589) (ipfs/kubo#9589)
- docs: bulk spelling edits (#9544) (ipfs/kubo#9544)
- docs: "remote" errors from resource manager (#9653) (ipfs/kubo#9653)
- test: remove gateway tests migrated to go-libipfs
- fix: update rcmgr for go-libp2p v0.25
- chore: update go-libp2p to v0.25.1
- docs(0.18.1): guide users to clean up limits (#9644) (ipfs/kubo#9644)
- feat: add NewOptionalInteger function
- fix: dereference int64 pointer in OptionalInteger.String() (#9640) (ipfs/kubo#9640)
- fix: restore wire format for /api/v0/routing/get|put (#9639) (ipfs/kubo#9639)
- refactor(gw): move Host (DNSLink and subdomain) handling to go-libipfs (#9624) (ipfs/kubo#9624)
- refactor: new go-libipfs/gateway API, deprecate Gateway.Writable (#9616) (ipfs/kubo#9616)
- Create Changelog: v0.19 (ipfs/kubo#9617)
- refactor: use gateway from go-libipfs (#9588) (ipfs/kubo#9588)
- Merge Release: v0.18.1 (ipfs/kubo#9613)
- Add overview section
- Adjust inbound connection limits depending on memory.
- feat: ipfs-webui 2.22.0
- chore: bump go-libipfs remove go-bitswap
- docs: DefaultResourceMgrMinInboundConns
- feat(gateway): IPNS record response format (IPIP-351) (#9399) (ipfs/kubo#9399)
- fix(ipns): honour --ttl flag in 'ipfs name publish' (#9471) (ipfs/kubo#9471)
- feat: Pubsub.SeenMessagesStrategy (#9543) (ipfs/kubo#9543)
- chore: bump go-libipfs to replace go-block-format
- Merge Kubo: v0.18 (ipfs/kubo#9581)
- fix: clarity: no user supplied rcmgr limits of 0 (#9563) (ipfs/kubo#9563)
- fix(gateway): undesired conversions to dag-json and friends (#9566) (ipfs/kubo#9566)
- fix: ensure connmgr is smaller then autoscalled ressource limits
- fix: typo in ensureConnMgrMakeSenseVsResourcesMgr
- docs: clarify browser descriptions for webtransport
- fix: update saxon download path
- fix: refuse to start if connmgr is smaller than ressource limits and not using none connmgr
- fix: User-Agent sent to HTTP routers
- test: port gateway sharness tests to Go tests
- fix: do not download saxon in parallel
- docs: improve docs/README (#9539) (ipfs/kubo#9539)
- test: port CircleCI to GH Actions and improve sharness reporting (#9355) (ipfs/kubo#9355)
- chore: migrate from go-ipfs-files to go-libipfs/files (#9535) (ipfs/kubo#9535)
- fix: stats dht command when Routing.Type=auto (#9538) (ipfs/kubo#9538)
- fix: hint people to changing from RSA peer ids
- fix(gateway): JSON when Accept is a list
- fix(test): retry flaky t0125-twonode.sh
- docs: fix Router config Godoc (#9528) (ipfs/kubo#9528)
- fix(ci): flaky sharness test
- docs(config): Provi...
v0.19.0-rc1
Changelog: docs/changelogs/v0.19.md
v0.18.1
🔦 Highlights
New default Pubsub.SeenMessagesStrategy
A new optional Pubsub.SeenMessagesStrategy
configuration option has been added.
This option allows you to choose between two different strategies for
deduplicating messages: first-seen
and last-seen
.
When unset, the default strategy is last-seen
, which calculates the
time-to-live (TTL) countdown based on the last time a message is seen. This
means that if a message is received and then seen again within the specified
TTL window based on the last time it was seen, it won't be emitted.
If you prefer the old behavior, which calculates the TTL countdown based on the
first time a message is seen, you can set Pubsub.SeenMessagesStrategy
to
first-seen
.
Improving libp2p resource management integration
This builds on the default protection nodes get against DoS (resource exhaustion) and eclipse attacks
with the go-libp2p Network Resource Manager/Accountant
that was fine-tuned in Kubo 0.18.
Adding default hard-limits from the Resource Manager/Accountant after the fact is tricky,
and some additional improvements have been made to improve the computed defaults.
As much as possible, the aim is for a user to only think about how much memory they want to bound libp2p to,
and not need to think about translating that to hard numbers for connections, streams, etc.
More updates are likely in future Kubo releases, but with this release:
System.StreamsInbound
is no longer bounded directlySystem.ConnsInbound
,Transient.Memory
,Transiet.ConnsInbound
have higher default computed values.
Changelog
Full Changelog
- github.com/ipfs/kubo:
- Add overview section
- Adjust inbound connection limits depending on memory.
- feat: Pubsub.SeenMessagesStrategy (#9543) (ipfs/kubo#9543)
- chore: update version
- github.com/libp2p/go-libp2p-pubsub (v0.8.2 -> v0.8.3):
- feat: expire messages from the cache based on last seen time (#513) (libp2p/go-libp2p-pubsub#513)
Contributors
Contributor | Commits | Lines ± | Files Changed |
---|---|---|---|
Mohsin Zaidi | 2 | +511/-55 | 12 |
Antonio Navarro Perez | 2 | +57/-57 | 5 |
galargh | 1 | +1/-1 | 1 |