Releases: ipfs/kubo
v0.26.0
Overview
🔦 Highlights
Kubo binary imports
For users of Kubo preloaded plugins there is now a way to create a kubo instance with your plugins by depending on the cmd/ipfs/kubo
package rather than rebuilding kubo with the included plugins.
See the customization docs for more information.
Several deprecated commands have been removed
Several deprecated commands have been removed:
ipfs urlstore
deprecated in April 2019, Kubo 0.4.21, useipfs add -q --nocopy --cid-version=1 {url}
instead.ipfs repo fsck
deprecated in July 2019, Kubo 0.5.0ipfs file
(andipfs file ls
) deprecated in November 2020, Kubo 0.8.0, useipfs ls
andipfs files ls
instead.ipfs dns
deprecated in April 2022, Kubo 0.13, useipfs resolve /ipns/{name}
instead.ipfs tar
deprecated April 2022, Kubo 0.13
Support optional pin names
You can now add a name to a pin when pinning a CID. To do so, use ipfs pin add --name "Some Name" bafy...
. You can list your pins, including their names, with ipfs pin ls --names
.
jaeger
trace exporter has been removed
jaeger
exporter has been removed from upstream, you should use otlp
exporter instead.
See the boxo tracing docs for an example.
📝 Changelog
Full Changelog
- github.com/ipfs/kubo:
- chore: update version
- chore: update version
- feat(pinning): allow for overwriting pin name
- chore: update otlp
- Revert "build,docker: add support for riscv64"
- feat: support optional pin names (#10261) (ipfs/kubo#10261)
- build,docker: add support for riscv64
- feat(cmd/ipfs): Make it possible to depend on cmd/ipfs/kubo for easier preloaded plugin management (ipfs/kubo#10219)
- docs: fix broken link in HTTP RPC client doc (#10267) (ipfs/kubo#10267)
- Merge Release: v0.25.0 [skip changelog] (ipfs/kubo#10260)
- docs: add detail to NOpfs instructions in content-blocking.md
- commands: remove several deprecated commands
- fix: allow daemon to start correctly if the API is null (#10062) (ipfs/kubo#10062)
- chore: update version
- github.com/ipfs/boxo (v0.16.0 -> v0.17.0):
- Release v0.17.0 (ipfs/boxo#542)
- github.com/ipfs/go-ipld-cbor (v0.0.6 -> v0.1.0):
- v0.1.0 bump
- chore: add or force update version.json
- allow configuration of ipldStores default hash function (ipfs/go-ipld-cbor#86)
- sync: update CI config files (#85) (ipfs/go-ipld-cbor#85)
- github.com/ipfs/go-unixfsnode (v1.8.1 -> v1.9.0):
- v1.9.0 bump
- feat: expose ToDirEntryFrom to allow sub-dag representation
- feat: new UnixFS{File,Directory} with options pattern
- feat: testutil generator enhancements
- github.com/ipld/go-car/v2 (v2.10.2-0.20230622090957-499d0c909d33 -> v2.13.1):
- fix: BlockMetadata#Offset should be for section, not block data
- fix: add closed check, expose storage.ErrClosed
- fix: switch constructor args to match storage.New*, make roots plural
- feat: add DeferredCarWriter
- feat: fix BlockReader#SkipNext & add SourceOffset property
- v0.6.2 (ipld/go-car#464)
- fix: opt-in way to allow empty list of roots in CAR headers (ipld/go-car#461)
- github.com/libp2p/go-libp2p-asn-util (v0.3.0 -> v0.4.1):
- chore: release v0.4.1
- fix: add Init method on backward compat
- chore: release v0.4.0
- rewrite representation to a sorted binary list and embed it
- docs: fix incorrect markdown === in README
- ci: run go generate on CI (#27) (libp2p/go-libp2p-asn-util#27)
- github.com/multiformats/go-multiaddr (v0.12.0 -> v0.12.1):
- v0.12.1 bump
- manet: reduce allocations in resolve unspecified address
- github.com/whyrusleeping/cbor-gen (v0.0.0-20230126041949-52956bd4c9aa -> v0.0.0-20240109153615-66e95c3e8a87):
- Add a feature to preserve nil slices (#88) (whyrusleeping/cbor-gen#88)
- some cleanup for easier reading (whyrusleeping/cbor-gen#89)
- Support gen for map with value type
string
(#83) (whyrusleeping/cbor-gen#83) - feat: add support for pointers to CIDs in slices (#86) (whyrusleeping/cbor-gen#86)
- optimize anything using WriteString (whyrusleeping/cbor-gen#85)
- Implement *bool support and support omitempty for slices (whyrusleeping/cbor-gen#81)
👨👩👧👦 Contributors
Contributor | Commits | Lines ± | Files Changed |
---|---|---|---|
Henrique Dias | 11 | +493/-1184 | 48 |
Łukasz Magiera | 3 | +610/-582 | 16 |
Rod Vagg | 11 | +1030/-151 | 18 |
whyrusleeping | 6 | +553/-388 | 14 |
Jorropo | 13 | +561/-348 | 84 |
Jeromy Johnson | 1 | +771/-48 | 6 |
Steven Allen | 2 | +264/-135 | 4 |
Forrest | 1 | +214/-0 | 5 |
Marcin Rataj | 1 | +89/-24 | 2 |
sukun | 1 | +31/-11 | 5 |
Will Scott | 3 | +25/-10 | 3 |
Adin Schmahmann | 3 | +21/-5 | 3 |
web3-bot | 2 | +8/-8 | 3 |
Marten Seemann | 1 | +13/-1 | 1 |
Bumblefudge | 1 | +5/-2 | 1 |
Will | 1 | +1/-1 | 1 |
Nicholas Ericksen | 1 | +1/-1 | 1 |
0xbasar | 1 | +1/-1 | 1 |
This release was brought to you by the Shipyard team.
v0.26.0-rc1
Changelog: docs/changelogs/v0.26.md
v0.25.0
Overview
🔦 Highlights
WebUI: Updated Peers View
WebUI v4.2.0 shipped with updated ipfs-geoip dataset and ability to filter the peers table.
RPC API.Authorizations
Kubo RPC API now supports optional HTTP Authorization.
Granular control over user access to the RPC can be defined in the API.Authorizations
map in the configuration file, allowing different users or apps to have unique access secrets and allowed paths.
This feature is opt-in. By default, no authorization is set up. For configuration instructions, refer to the documentation.
MPLEX Removal
After deprecating and removing mplex support by default in v0.23.0.
We now fully removed it. If you still need mplex support to talk with other pieces of software, please try updating them, and if they don't support yamux or QUIC talk to us about it.
Mplex is unreliable by design, it will drop data and generete errors when sending data too fast, yamux and QUIC support backpressure, that means if we send data faster than the remote machine can process it, we slows down to match the remote's speed.
Graphsync Experiment Removal
Currently the Graphsync server is to our knowledge not used due to lack of compatible software. And we are left to have to maintain the go-graphsync implementation when trying to update Kubo because some dependency changed and it fails to build anymore.
For more information see #9747.
Commands ipfs key sign
and ipfs key verify
This allows the Kubo node to sign arbitrary bytes to prove ownership of a PeerID or an IPNS Name. To avoid signature reuse, the signed payload is always prefixed with libp2p-key signed message:
.
These commands are also both available through the RPC client and implemented in client/rpc
.
For more information see #10230.
📝 Changelog
Full Changelog
- github.com/ipfs/kubo:
- chore: update version
- fix: allow daemon to start correctly if the API is null (#10062) (ipfs/kubo#10062)
- chore: update version
- feat: ipfs key sign|verify (#10235) (ipfs/kubo#10235)
- docs(cli): fix spelling
- feat: webui v4.2.0 (#10241) (ipfs/kubo#10241)
- Migrate coreiface (ipfs/kubo#10237)
- docs: clarify WebRTCDirect cannot reuse the same port as QUIC
- libp2p: remove mplex
- graphsync: remove support for the server
- docs: move kubo-specific docs (#10226) (ipfs/kubo#10226)
- feat(rpc): Opt-in HTTP RPC API Authorization (#10218) (ipfs/kubo#10218)
- docs: clarify ipfs id agent version
- fix: regression in 'ipfs dns'
- docs(changelog): clarify webrtc in v0.24
- chore: create next changelog
- Merge Release: v0.24.0 (ipfs/kubo#10209)
- fix: allow event emitting to happen in parallel with getting the query channel
- fixes to routing put command (#10205) (ipfs/kubo#10205)
- docs: fix accelerated-dht-client
- docs/config: remove extra commas in PublicGateways example entries
- docs: make it clear Web RTC Direct is experimental
- feat: add WebRTC Direct support
- docs: update EARLY_TESTERS.md (#10194) (ipfs/kubo#10194)
- Update Version: v0.24 (ipfs/kubo#10191)
- github.com/ipfs/boxo (v0.15.0 -> v0.16.0):
- Release 0.16.0 (ipfs/boxo#518)
- github.com/libp2p/go-libp2p (v0.32.1 -> v0.32.2):
- release v0.32.2
👨👩👧👦 Contributors
Contributor | Commits | Lines ± | Files Changed |
---|---|---|---|
Łukasz Magiera | 149 | +7833/-2505 | 375 |
Henrique Dias | 26 | +2498/-7535 | 210 |
Steven Allen | 48 | +497/-373 | 129 |
Jorropo | 9 | +247/-604 | 49 |
Michael Muré | 6 | +306/-79 | 14 |
Adin Schmahmann | 3 | +275/-8 | 5 |
Lucas Molas | 1 | +181/-56 | 2 |
Laurent Senta | 1 | +109/-24 | 7 |
Lars Gierth | 6 | +82/-18 | 8 |
Petar Maymounkov | 1 | +66/-32 | 3 |
web3-bot | 1 | +47/-42 | 17 |
Marcin Rataj | 6 | +57/-23 | 8 |
Kevin Atkinson | 5 | +31/-31 | 17 |
Marten Seemann | 3 | +27/-28 | 16 |
Hector Sanjuan | 3 | +28/-14 | 10 |
Overbool | 2 | +36/-3 | 3 |
Raúl Kripalani | 1 | +11/-12 | 4 |
hannahhoward | 2 | +11/-7 | 6 |
Jeromy Johnson | 5 | +9/-9 | 5 |
ForrestWeston | 1 | +14/-1 | 1 |
Russell Dempsey | 1 | +10/-2 | 2 |
Will Scott | 1 | +8/-1 | 1 |
Jeromy | 2 | +4/-4 | 2 |
sukun | 1 | +2/-2 | 1 |
Steve Loeppky | 1 | +2/-2 | 1 |
Jonas Keunecke | 1 | +2/-2 | 1 |
Edgar Lee | 1 | +3/-1 | 1 |
Dreamacro | 1 | +2/-2 | 2 |
godcong | 1 | +1/-1 | 1 |
Cole Brown | 1 | +1/-1 | 1 |
v0.25.0-rc1
Changelog: docs/changelogs/v0.25.md
v0.24.0
Overview
🔦 Highlights
Support for content blocking
This Kubo release ships with built-in content-blocking subsystem announced earlier this year.
Content blocking is an opt-in decision made by the operator of ipfs daemon
.
The official build does not ship with any denylists.
Learn more at /docs/content-blocking.md
Gateway: the root of the CARs are no longer meaningful
When requesting a CAR from the gateway, the root of the CAR might no longer be
meaningful. By default, the CAR root will be the last resolvable segment of the
path. However, in situations where the path cannot be resolved, such as when
the path does not exist, a CAR will be sent with a root of bafkqaaa
(empty CID).
This CAR will contain all blocks necessary to validate that the path does not exist.
IPNS: improved publishing defaults
This release changes the default values used when publishing IPNS record
via ipfs name publish
command:
- Default
--lifetime
increased from24h
to48h
to take full advantage of
the increased expiration window of Amino DHT
(go-libp2p-kad-dht#793) - Default
--ttl
increased from1m
to1h
to improve website caching and follow
saner defaults present in similar systems like DNS
(specs#371)
This change only impacts the implicit defaults, when mentioned parameters are omitted
during publishing. Users are free to override the default if different value
makes more sense for their use case.
IPNS: record TTL is used for caching
In this release, we've made significant improvements to IPNS caching.
Previously, the TTL value in IPNS records was not utilized, and the
boxo/namesys
library maintained a static one-minute resolution cache.
With this update, IPNS publishers gain more control over how long a valid IPNS
record remains cached before checking an upstream routing system, such as Amino
DHT, for updates. The TTL value in the IPNS record now serves as a hint for:
boxo/namesys
: the internal cache, determining how long the IPNS resolution
result is cached before asking upsteam routing systems for updates.boxo/gateway
: theCache-Control
HTTP header in responses to requests made
for/ipns/name
content paths.
These changes make it easier for rarely updated IPNS-hosted websites to be
cached more efficiently and load faster in browser contexts.
Experimental Transport: WebRTC Direct
This Kubo release includes the initial work towards WebRTC Direct
introduced in go-libp2p
v0.32:
WebRTC Direct
allows browser nodes to connect to go-libp2p nodes directly,
without any configuration (e.g. TLS certificates) needed on the go-libp2p
side. This is useful for browser nodes that aren’t able to use
WebTransport.
The /webrtc-direct
transport is disabled by default in Kubo 0.24,
and not ready for production use yet, but we plan to enable it in a future release.
See Swarm.Transports.Network.WebRTCDirect
to learn how to enable it manually, and what current limitations are.
📝 Changelog
Full Changelog
- github.com/ipfs/kubo:
- chore: update version
- fix: allow event emitting to happen in parallel with getting the query channel
- fixes to routing put command (#10205) (ipfs/kubo#10205)
- docs: fix accelerated-dht-client
- docs/config: remove extra commas in PublicGateways example entries
- chore: update version
- docs: make it clear Web RTC Direct is experimental
- feat: add WebRTC Direct support
- docs: update EARLY_TESTERS.md (#10194) (ipfs/kubo#10194)
- Release: v0.24.0-1 (ipfs/kubo#10190)
- github.com/ipfs/boxo (v0.13.1 -> v0.15.0):
- Release v0.15.0 (ipfs/boxo#505)
- Release v0.14.0 (ipfs/boxo#500)
- github.com/ipfs/go-block-format (v0.1.2 -> v0.2.0):
- v0.2.0 bump
- github.com/ipfs/go-graphsync (v0.15.1 -> v0.16.0):
- chore: release 0.16.0
- chore: bump go-libp2p to 0.32.0
- github.com/ipfs/go-ipld-format (v0.5.0 -> v0.6.0):
- v0.6.0 bump
- chore: update deps
- fix: stop using the deprecated io/ioutil package
- github.com/libp2p/go-libp2p (v0.31.0 -> v0.32.1):
- release v0.32.1 (#2637) (libp2p/go-libp2p#2637)
- swarm: fix timer Leak in the dial loop (#2636) (libp2p/go-libp2p#2636)
- release v0.32.0 (#2625) (libp2p/go-libp2p#2625)
- chore: update js-libp2p examples repo (#2624) (libp2p/go-libp2p#2624)
- identify: don't filter dns addresses based on remote addr type (#2553) (libp2p/go-libp2p#2553)
- webrtc: fix race in TestRemoveConnByUfrag (#2620) (libp2p/go-libp2p#2620)
- swarm: fix recursive resolving of DNS multiaddrs (#2564) (libp2p/go-libp2p#2564)
- ci: migrate to renamed interop test action (#2617) (libp2p/go-libp2p#2617)
- quic: update quic-go to v0.39.1, set a static resumption token generator key (#2572) (libp2p/go-libp2p#2572)
- test/basichost: fix flaky test due to rcmgr (#2613) (libp2p/go-libp2p#2613)
- swarm: use typed atomics (#2612) (libp2p/go-libp2p#2612)
- swarm: cleanup stream handler goroutine (#2610) (libp2p/go-libp2p#2610)
- circuitv2: don't check ASN for private addrs (#2611) (libp2p/go-libp2p#2611)
- swarm: use happy eyeballs ranking for TCP dials (#2573) (libp2p/go-libp2p#2573)
- webrtc: fix race in TestMuxedConnection (#2607) (libp2p/go-libp2p#2607)
- tcp: fix build on riscv64 (#2590) (libp2p/go-libp2p#2590)
- Fix missing deprecation tag (#2605) (libp2p/go-libp2p#2605)
- swarm: wait for transient connections to upgrade for NewStream (#2542) (libp2p/go-libp2p#2542)
- docs: fix typos (#2604) (libp2p/go-libp2p#2604)
- webrtc: correctly report incoming packet address on muxed connection (#2586) (libp2p/go-libp2p#2586)
- swarm: add loopback to low timeout filter (#2595) (libp2p/go-libp2p#2595)
- Fix typos in comments and a test failure message (#2600) (libp2p/go-libp2p#2600)
- libp2phttp: don't strip
/
suffix when mounting handler (#2552) (libp2p/go-libp2p#2552) - interop: fix redis env var (#2585) (libp2p/go-libp2p#2585)
- quicreuse: remove QUIC metrics tracer (#2582) (libp2p/go-libp2p#2582)
- config: warn if connmgr limits conflict with rcmgr (#2527) (libp2p/go-libp2p#2527)
- update gomock to v0.3.0 (#2581) (libp2p/go-libp2p#2581)
- webrtc: fix deadlock on connection close (#2580) (libp2p/go-libp2p#2580)
- webrtc: put buffer back to pool (#2574) (libp2p/go-libp2p#2574)
- webrtc: fail Write early if deadline has exceeded before the call (#2578) (libp2p/go-libp2p#2578)
- swarm: fix DialPeer behaviour for transient connections (#2547) (libp2p/go-libp2p#2547)
- websocket: don't resolve /dnsaddr addresses (#2571) (libp2p/go-libp2p#2571)
- core/peer: remove deprecated ID.Pretty method (#2565) (libp2p/go-libp2p#2565)
- core/peer: remove deprecated Encode function (#2566) (libp2p/go-libp2p#2566)
- mock: use go.uber.org/mock (#2540) (libp2p/go-libp2p#2540)
- ...
v0.24.0-rc2
Changelog: docs/changelogs/v0.24.md
v0.24.0-rc1
Changelog: docs/changelogs/v0.24.md
v0.23.0
- 💬 Discuss
- 🔦 Highlights
- Mplex deprecation
- Gateway: meaningful CAR responses on Not Found errors
- Gateway: added
Gateway.DisableHTMLErrors
configuration option - Binary characters in file names: no longer works with old clients and new Kubo servers
- Self-hosting
/routing/v1
endpoint for delegated routing needs - Trustless Gateway Over Libp2p Experiment
- Removal of
/quic
(Draft 29) support - Better Caching of multiaddresses for providers in DHT servers
- Fixed FUSE multiblock structures
- 📝 Changelog
- 👨👩👧👦 Contributors
Overview
🔦 Highlights
Mplex deprecation
Mplex is being deprecated, this is because it is unreliable and
randomly drop streams when sending data too fast.
New pieces of code rely on backpressure, that means the stream will dynamicaly
slow down the sending rate if data is getting backed up.
Backpressure is provided by Yamux and QUIC.
In case you need compatibility with older implementations that do not ship with
Yamux (like default's JS-IPFS) you can turned it back ON in the config with:
$ ipfs config --json Swarm.Transports.Multiplexers.Mplex 200
We will completely remove Mplex in v0.24 as it makes protocols very bad to implement,
if you are in this situation you need to add yamux support to your other implementation.
Gateway: meaningful CAR responses on Not Found errors
When requesting a CAR from the gateway, the root of the CAR might no longer be
meaningful. By default, the CAR root will be the last resolvable segment of the
path. However, in situations where the path cannot be resolved, such as when
the path does not exist, a CAR will be sent with a root of bafkqaaa
(empty CID).
This CAR will contain all blocks necessary to validate that the path does not
exist without having to trust the gateway.
Gateway: added Gateway.DisableHTMLErrors
configuration option
The Gateway.DisableHTMLErrors
configuration option forces errors to be
displayed in browsers as plain text (text/plain
) rather than HTML error
pages. It's especially beneficial for whitelabel or middleware deployments that
wish to avoid IPFS branding and links on error pages in browsers.
Binary characters in file names: no longer works with old clients and new Kubo servers
In this version, we updated Kubo to support Go 1.20+. In Go 1.20, a regression
regarding multipart headers was introduced.
This only affects ipfs add
when a file name has binary characters in its name.
As a consequence, we had to update the encoding of the file name headers. This is
the compatibility table:
New Client | Old Client | |
---|---|---|
New Server | ✅ | 🟡* |
Old Server | ✅ | ✅ |
*Old clients can only send Unicode file paths to the server.
Self-hosting /routing/v1
endpoint for delegated routing needs
The Routing
system configured in Kubo can be now exposed on the gateway port as a standard
HTTP Routing V1 API endpoint. This allows
self-hosting and experimentation with custom delegated routers. This is disabled by default,
but can be enabled by setting Gateway.ExposeRoutingAPI
to true
.
Trustless Gateway Over Libp2p Experiment
In this update, we've introduced an experimental opt-in feature allowing users to
serve a subset of Trustless Gateway responses,
such as blocks and CARs, over libp2p. This enhancement leverages the ongoing
/http/1.1
specification work in libp2p
to make it easier to support HTTP semantics over libp2p streams.
This development means that if users wish to utilize the Trustless Gateway API
for data transport, they can now do so even in scenarios where standard HTTP
might be problematic, such as when the endpoint is behind a firewall or when
attempting to serve data to a browser without a CA certificate.
See HTTP Gateway over Libp2p for details about this experiment.
Removal of /quic
(Draft 29) support
Kubo no longer supports QUIC Draft 29. This means that older nodes aren't able to connect
to newer nodes using QUIC Draft 29. However, they are still able to connect through any other
transport that both nodes talk (such as QUIC RFC 9000, or TCP). QUIC Draft 29 was a preliminary implementation of QUIC before
the official RFC 9000 was published, and it has now been dropped by go-libp2p
and therefore Kubo.
In Kubo 0.18, we shipped a migration
to have listeners for both /quic
(Draft 29) and /quic-v1
(RFC 9000). Similarly, in this
version we are shipping a migration to remove the current /quic
addresses, maintaining
the /quic-v1
addresses only. For more background information, check issue #9496.
Better Caching of multiaddresses for providers in DHT servers
Thanks to probelab.io's RFM17.1 DHT servers will now cache the addresses of content hosts for the lifetime of the provider record.
This means clients who resolve content from theses servers get a responses which include both peer id and multiaddresses.
In most cases this enables skipping a second query which resolves the peer id to multiaddresses for stable enough peers.
This will improve content fetching lantency in the network overtime as servers updates.
Fixed FUSE multiblock structures
ls
ing directories and reading dag-pb files on a fuse volume have been fixed. #9044
Thx a lot @bmwiedemann for debugging this issue.
📝 Changelog
Full Changelog
- github.com/ipfs/kubo:
- fix: align systemd unit file with default IPFS installation path (#10163) (ipfs/kubo#10163)
- docs: capitalize headers for consistency
- Merge commit '695bf66674931a138862b6fa2cb0b16dc2f6ddd8' into release-v0.23.0
- chore: update version
- changelog: generalize fuse 9044's entry
- changelog: update fuse 9044's entry
- Update go-unixfsnode to 1.8.0 to fix FUSE
- docs(readme): header improvements (#10144) (ipfs/kubo#10144)
- fix(docker): allow nofuse builds for MacOS (#10135) (ipfs/kubo#10135)
- docs: fix typos
- docs: s/ipfs dht/amino dht/
- changelog: mention probelab RFM17.1 dht improvement
- tests: remove sharness ping tests
- perf: make bootstrap saves O(N)
- chore: update go-libp2p-kad-dht
- chore: webui v4.1.1 (#10120) (ipfs/kubo#10120)
- core/bootstrap: fix panic without backup bootstrap peer functions (#10029) (ipfs/kubo#10029)
- feat: add Gateway.DisableHTMLErrors option (#10137) (ipfs/kubo#10137)
- fix(migrations): use dweb.link (#10133) (ipfs/kubo#10133)
- docs: add changelog info for QUIC Draft 29 (#10132) (ipfs/kubo#10132)
- feat: add gateway to http over libp2p (ipfs/kubo#10108)
- migration: update 14-to-15 to v1.0.1
- chore: update to build with Go 1.21
- refactor: stop using go-libp2p deprecated peer.ID.Pretty
- docs(readonly): fix typo
- docs(changelog): link to relevant IPIP
- fix: hamt traversal in ipld-explorer ([email protected]) (#10025) (ipfs/kubo#10025)
- refactor: if statement (#10105) (ipfs/kubo#10105)
- chore: bump repo version to 15
- docs: remove link to deleted #accelerated-dht-client
- feat(gateway): expose /routing/v1 server (opt-in) (#9877) (ipfs/kubo#9877)
- improve error in fuse node failures
- chore: update boxo, go-libp2p, and internalize mplex (#10095) (ipfs/kubo#10095)
- dockerfile: reorder copy order for better layer caching
- refactor: using error is instead of == (#10093) (ipfs/kubo#10093)
- fix: use %-encoded headers in most compatible way
- fix: open /dev/null with read write permissions
- chore: bump to go 1.20
- docs(readme): new logo and header
- docker: change to releases that follow debian's updates
- docker: bump debian version to bookworm
- chore: restore exec perms for t0116-gateway-cache.sh and fixtures (#10085) (ipfs/kubo#10085)
- fix(gw): useful IPIP-402 CAR...
v0.23.0-rc1
Changelog: docs/changelogs/v0.23.md
v0.22.0
Release issue #9911
v0.22.0
Overview
🔦 Highlights
Gateway: support for order=
and dups=
parameters (IPIP-412)
The updated boxo/gateway
library introduces support for ordered CAR responses through the inclusion of optional CAR content type parameters: order=dfs
and dups=y|n
from IPIP-412.
Previously, Kubo already provided CARs in DFS order without duplicate blocks. With the implementation of IPIP-412, this behavior is now explicitly defined rather than implied.
In the absence of dups
or order
in Accept
request reader, the default CAR response will have the Content-Type: application/vnd.ipld.car; version=1; order=dfs; dups=n
and the same blocks as Kubo 0.21.
Kubo 0.22 still only supports DFS block ordering (order=dfs
). However, it is now possible to request a DFS CAR stream with duplicate blocks by opting in via Accept: application/vnd.ipld.car; order=dfs; dups=y
. This opt-in feature can be beneficial for memory-constrained clients and IoT devices, as it allows for streaming large DAGs without the need to store all previously encountered blocks in memory.
ipfs name publish
now supports V2 only IPNS records
When publishing an IPNS record, you are now able to create v2 only records by passing --v1compat=false
. By default, we still create V1+V2 records, such that there is the highest chance of backwards compatibility. The goal is to move to V2 only in the future.
For more details, see IPIP-428 and the updated IPNS Record Verification logic.
IPNS name resolution has been fixed
IPNS name resolution had a regression where if IPNS over PubSub was enabled, but the name was not also available via IPNS over PubSub it would take 1 minute to for the lookup to complete (if the record was not yet cached).
This has been fixed and as before will give the best record from either the DHT subsystem or IPNS over PubSub, whichever comes back first.
For details see #9927 and #10020.
go-libp2p v0.29.0 update with smart dialing
We updated from go-libp2p v0.27.7 to v0.29.0. This release includes smart dialing, which is a prioritization algorithm that will try to rank addresses and protocols rather than attempting all options in parallel. Anecdotally, we have observed Kubo nodes make 30% less dials with no to low latency impact.
This includes a breaking change to ipfs id
and some of the ipfs swarm
commands. We no longer report ProtocolVersion
. This used to be hardcoded as ipfs/0.1.0
and sent to other peers but was not providing any distinguishing value. See libp2p/go-libp2p#2294 for more information.
📝 Changelog
Full Changelog
- github.com/ipfs/kubo:
- chore: update version
- fix(relay): apply user provider options
- libp2p: stop reporting ProtocolVersion
- chore: update go-libp2p to v0.29.0
- chore: update go-libp2p to v0.28.1
- fix: mark all routers DoNotWaitForSearchValue (#10020) (ipfs/kubo#10020)
- feat(gateway): support for ipip-412 parameters
- docs(commands): explain that swarm connect can reuse existing connections or known addresses (#10015) (ipfs/kubo#10015)
- docs: add Brave to RELEASE_ISSUE_TEMPLATE.md (#10012) (ipfs/kubo#10012)
- feat: [email protected]
- (ipfs/kubo#10008)
- docs: skip check before prepare branch in RELEASE_ISSUE_TEMPLATE.md
- docs: update RELEASE_ISSUE_TEMPLATE.md with a warning about npm publish
- docs: update refs to kuboreleaser in RELEASE_ISSUE_TEMPLATE.md
- docs: Gateway.HTTPHeaders
- refactor: replace boxo/ipld/car by ipld/go-car
- chore: bump to boxo master
- fix: correctly handle migration of configs
- fix(gateway): include CORS on subdomain redirects (#9994) (ipfs/kubo#9994)
- fix: docker repository initialization race condition
- feat(ipns): records with V2-only signatures (#9932) (ipfs/kubo#9932)
- cmds/dag/import: pin roots by default (#9966) (ipfs/kubo#9966)
- docs: fix 0.21 changelog
- feat!: dag import - don't pin roots by default (#9926) (ipfs/kubo#9926)
- fix(cmd): useful errors in dag import (#9945) (ipfs/kubo#9945)
- feat: [email protected] (#9940) (ipfs/kubo#9940)
- chore(docs): typo http→https
- fix: more stable prometheus test (#9944) (ipfs/kubo#9944)
- (ipfs/kubo#9937)
- github.com/ipfs/boxo (v0.10.2-0.20230629143123-2d3edc552442 -> v0.11.0):
- Release v0.11.0 (ipfs/boxo#417)
- (ipfs/boxo#401)
- github.com/ipfs/go-merkledag (v0.10.0 -> v0.11.0):
- chore: update v0.11.0 (#106) (ipfs/go-merkledag#106)
- update merkeldag to use the explicit decoder registry (#104) (ipfs/go-merkledag#104)
- Update status in README.md and added CODEOWNERS (#101) (ipfs/go-merkledag#101)
- github.com/ipld/go-car/v2 (v2.9.1-0.20230325062757-fff0e4397a3d -> v2.10.2-0.20230622090957-499d0c909d33):
- 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)
- github.com/libp2p/go-libp2p (v0.27.7 -> v0.29.0):
- Release version v0.29.0 (#2431) (libp2p/go-libp2p#2431)
- webtransport: reject listening on a multiaddr with a certhash (#2426) (libp2p/go-libp2p#2426)
- swarm: deprecate libp2p.DialRanker option (#2430) (libp2p/go-libp2p#2430)
- quic: Update to quic-go v0.36.2 (#2424) (libp2p/go-libp2p#2424)
- autonat: fix typo in WithSchedule option comment (#2425) (libp2p/go-libp2p#2425)
- identify: filter nat64 well-known prefix ipv6 addresses (#2392) (libp2p/go-libp2p#2392)
- update go-multiaddr to v0.10.1, use Unique function from there (#2407) (libp2p/go-libp2p#2407)
- swarm: enable smart dialing by default (#2420) (libp2p/go-libp2p#2420)
- transport integration tests: make TestMoreStreamsThanOurLimits less flaky (#2410) (libp2p/go-libp2p#2410)
- holepunch: skip racy TestDirectDialWorks (#2419) (libp2p/go-libp2p#2419)
- swarm: change relay dial delay to 500ms (#2421) (libp2p/go-libp2p#2421)
- identify: disable racy TestLargeIdentifyMessage with race detector (#2401) (libp2p/go-libp2p#2401)
- swarm: make black hole detection configurable (#2403) (libp2p/go-libp2p#2403)
- net/mock: support ConnectionGater in MockNet (#2297) (libp2p/go-libp2p#2297)
- docs: Add a Github workflow for checking dead links (#2406) (libp2p/go-libp2p#2406)
- rcmgr: enable metrics by default (#2389) (#2409) (libp2p/go-libp2p#2409)
- chore: remove outdated info in README and link to libp2p-implementers slack (#2405) (libp2p/go-libp2p#2405)
- metrics: deduplicate code in examples (#2404) ([libp2p/g...