Releases: ipfs/kubo
v0.32.0-rc2
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
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
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
- Added 3 new go metrics:
go_gc_gogc_percent
,go_gc_gomemlimit_bytes
andgo_sched_gomaxprocs_threads
as those are recommended by the Go team - Added network usage metrics:
process_network_receive_bytes_total
andprocess_network_transmit_bytes_total
- Removed
go_memstat_lookups_total
metric which was always 0
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 wet 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
- github.com/ipfs/kubo:
- fix: go 1.23(.2) (#10540) (ipfs/kubo#10540)
- chore: bump version to 0.32.0-dev
- feat(routing/http): support IPIP-484 and streaming (#10534) (ipfs/kubo#10534)
- fix(daemon): webui URL when rpc is catch-all (#10520) (ipfs/kubo#10520)
- chore: update changelog and config doc with more info about pebble (#10533) (ipfs/kubo#10533)
- feat: pebbleds profile and plugin (#10530) (ipfs/kubo#10530)
- chore: dependency updates for 0.31 (#10511) (ipfs/kubo#10511)
- feat: explicit announce-on/off profiles (#10524) (ipfs/kubo#10524)
- fix(core): look for MFS root in local repo only (#8661) (ipfs/kubo#8661)
- Fix issue in ResourceManager and nopfsPlugin about repo path (#10492) (ipfs/kubo#10492)
- feat(bitswap): allow configuring WithWantHaveReplaceSize (#10512) (ipfs/kubo#10512)
- refactor: simplify logic for MFS pinning (#10506) (ipfs/kubo#10506)
- docs: clarify Gateway.PublicGateways (#10525) (ipfs/kubo#10525)
- chore: clarify dep update in RELEASE_CHECKLIST.md (#10518) (ipfs/kubo#10518)
- feat: ipfs-webui v4.3.2 (#10523) (ipfs/kubo#10523)
- docs(config): add useful references
- docs(config): improve profile descriptions (#10517) (ipfs/kubo#10517)
- docs: update RELEASE_CHECKLIST.md (#10496) (ipfs/kubo#10496)
- chore: create next changelog (#10510) (ipfs/kubo#10510)
- Merge Release: v0.30.0 [skip changelog] (ipfs/kubo#10508)
- chore: boxo v0.23.0 and go-libp2p v0.36.3 (#10507) (ipfs/kubo#10507)
- docs: replace outdated package paths described in rpc README (#10505) (ipfs/kubo#10505)
- fix: switch back to go 1.22 (#10502) (ipfs/kubo#10502)
- fix(cli): preserve hostname specified with --api in http request headers (#10497) (ipfs/kubo#10497)
- chore: upgrade to go 1.23 (#10486) (ipfs/kubo#10486)
- fix: error during config when running benchmarks (#10495) (ipfs/kubo#10495)
- chore: update go-unixfsnode, cmds, and boxo (#10494) (ipfs/kubo#10494)
- Docs fix spelling issues (#10493) (ipfs/kubo#10493)
- chore: update version (#10491) (ipfs/kubo#10491)
- github.com/ipfs/boxo (v0.23.0 -> v0.24.0):
- Release v0.24.0 (ipfs/boxo#683)
- github.com/ipfs/go-ipld-cbor (v0.1.0 -> v0.2.0):
- v0.2.0
- deprecate DumpObject() in favor of better named Encode()
- add an EncodeWriter method, using the pooled marshallers
- fix expCid vs actualCid guard
- github.com/ipld/go-car/v2 (v2.13.1 -> v2.14.2):
- v2.14.2 bump
- fix: goreleaser v2 compat, trigger release-binaries with workflow_run
- v2.14.1 bump
- chore: update fuzz to Go 1.22
- v2.14.0 bump
- fix(cmd): properly pick up --inverse and --cid-file args (ipld/go-car#531)
- Re-factor cmd functions to library (ipld/go-car#524)
- ci: uci/copy-templates (ipld/go-car#521)
- Add a
car ls --unixfs-blocks
to render two-column output (ipld/go-car#514)
- github.com/libp2p/go-libp2p (v0.36.3 -> v0.36.5):
- chore: remove Roadmap file (#2954) (libp2p/go-libp2p#2954)
- fix: Release v0.36.5
- autonatv2: recover from panics (#2992) (libp2p/go-libp2p#2992)
- basichost: ensure no duplicates in Addrs output (#2980) (libp2p/go-libp2p#2980)
- Release v0.36.4
- peerstore: better GC in membacked peerstore (#2960) (libp2p/go-libp2p#2960)
- fix: use quic.Version instead of the deprecated quic.VersionNumber (#2955) (libp2p/go-libp2p#2955)
- tcp: fix metrics for multiple calls to Close (#2953) (libp2p/go-libp2p#2953)
- github.com/libp2p/go-libp2p-kbucket (v0.6.3 -> v0.6.4):
- release v0.6.4 (libp2p/go-libp2p-kbucket#135)
- feat: add log printing when peer added and removed table (libp2p/go-libp2p-kbucket#134)
- Upgrade to go-log v2.5.1 (libp2p/go-libp2p-kbucket#132)
- chore: update go-libp2p-asn-util
- github.com/multiformats/go-multiaddr-dns (v0.3.1 -> v0.4.0):
- Release v0.4.0 (#64) (multiformats/go-multiaddr-dns#64)
- Limit total number of resolved addresses from DNS response (#63) (multiformats/go-multiaddr-dns#63)
- fix!: Only resolve the first DNS-like component (#61) (multiformats/go-multiaddr-dns#61)
- ...
v0.31.0-rc2
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
See the related issue: #10499
And the draft changelog: docs/changelogs/v0.31.md
v0.30.0
- π¬ Discuss
- π¦ Highlights
- Improved P2P connectivity
- Refactored Bitswap and dag-pb chunker
- WebRTC-Direct Transport enabled by default
- UnixFS 1.5: Mode and Modification Time Support
- AutoNAT V2 Service Introduced Alongside V1
- Automated
ipfs version check
- Version Suffix Configuration
/unix/
socket support inAddresses.API
- Cleaned Up
ipfs daemon
Startup Log - Commands Preserve Specified Hostname
- π Changelog
- π¨βπ©βπ§βπ¦ Contributors
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
tofalse
.
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
- github.com/ipfs/kubo:
- chore: set version to 0.30.0
- chore: bump CurrentVersionNumber
- chore: boxo v0.23.0 and go-libp2p v0.36.3 (#10507) (ipfs/kubo#10507)
- fix: switch back to go 1.22 (#10502) (ipfs/kubo#10502)
- chore: update go-unixfsnode, cmds, and boxo (#10494) (ipfs/kubo#10494)
- fix(cli): preserve hostname specified with --api in http request headers (#10497) (ipfs/kubo#10497)
- chore: upgrade to go 1.23 (#10486) (ipfs/kubo#10486)
- fix: error during config when running benchmarks (#10495) ([#10495](https:...
v0.30.0-rc3
Changelog: docs/changelogs/v0.30.md
v0.30.0-rc2
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
Changelog: docs/changelogs/v0.30.md
v0.29.0
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:
- fix(cli): unify --name param in ls and add (#10439) (ipfs/kubo#10439)
- chore: set version to 0.29.0-rc2
- fix(libp2p): streams config validation in resource manager (#10435) (ipfs/kubo#10435)
- chore: update version
- chore: libp2p 0.34.1 (#10429) (ipfs/kubo#10429)
- refactor: stop using github.com/pkg/errors (#10431) (ipfs/kubo#10431)
- chore: fix --help text
- config: introduce Import section (#10421) (ipfs/kubo#10421)
- feat: enables searching pins by name (#10412) (ipfs/kubo#10412)
- fix(fuse): ipfs path parsing (#10243) (ipfs/kubo#10243)
- core/node: fix divide by zero fatal crash for reprovide rate check (#10411) (ipfs/kubo#10411)
- chore: bump to go-ipfs-cmds @ v0.11
- chore: create next changelog
- Merge Release: v0.28.0 [skip changelog] (ipfs/kubo#10402)
- docs: update release checklist (#10401) (ipfs/kubo#10401)
- chore: update version
- github.com/ipfs/boxo (v0.19.0 -> v0.20.0):
- Release v0.20.0 (ipfs/boxo#613)
- 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):
- chore: release v0.11.0 (#253) (ipfs/go-ipfs-cmds#253)
- chore: update deps (#252) (ipfs/go-ipfs-cmds#252)
- chore: release 0.10.2 (#251) (ipfs/go-ipfs-cmds#251)
- fix(http): return error in case of panic (#250) (ipfs/go-ipfs-cmds#250)
- chore: release v0.10.1
- 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):
- chore: bump version
- Deprecate types and readme (#29) (ipfs/go-ipfs-exchange-interface#29)
- docs: Add proper documenation to the interface.
- github.com/ipfs/go-verifcid (v0.0.2 -> v0.0.3):
- chore: bump version
- chore: deprecate types and readme
- Make poseidon hashes good hashes (ipfs/go-verifcid#19)
- sync: update CI config files (#18) (ipfs/go-verifcid#18)
- 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):
- release v0.34.1 (#2811) (libp2p/go-libp2p#2811)
- config: fix Insecure security constructor (#2810) (libp2p/go-libp2p#2810)
- rcmgr: Backwards compatibility if you wrap default impl (#2805) (libp2p/go-libp2p#2805)
- v0.34.0 (#2795) (libp2p/go-libp2p#2795)
- swarm: fix addr for TestBlackHoledAddrBlocked (#2803) (libp2p/go-libp2p#2803)
- Add backwards compatibility with old well-known resource (#2798) (libp2p/go-libp2p#2798)
- rcmgr: remove a connection only once from the limiter (#2800) (libp2p/go-libp2p#2800)
- Adhere to request.Context when roundtripping on a stream (#2796) (libp2p/go-libp2p#2796)
- fix: Set missing deadlines (#2794) (libp2p/go-libp2p#2794)
- rcmgr: Add conn_limiter to limit number of conns per ip cidr (#2788) (libp2p/go-libp2p#2788)
- identify: refactor observed address manager to do...