| 1 | # Kubo changelog v0.31 |
| 2 | |
| 3 | - [v0.31.0](#v0310) |
| 4 | |
| 5 | ## v0.31.0 |
| 6 | |
| 7 | - [Overview](#overview) |
| 8 | - [🔦 Highlights](#-highlights) |
| 9 | - [Experimental Pebble Datastore](#experimental-pebble-datastore) |
| 10 | - [New metrics](#new-metrics) |
| 11 | - [`lowpower` profile no longer breaks DHT announcements](#lowpower-profile-no-longer-breaks-dht-announcements) |
| 12 | - [go 1.23, boxo 0.24 and go-libp2p 0.36.5](#go-123-boxo-024-and-go-libp2p-0365) |
| 13 | - [📝 Changelog](#-changelog) |
| 14 | - [👨👩👧👦 Contributors](#-contributors) |
| 15 | |
| 16 | ### Overview |
| 17 | |
| 18 | ### 🔦 Highlights |
| 19 | |
| 20 | #### Experimental Pebble Datastore |
| 21 | |
| 22 | [Pebble](https://github.com/ipfs/kubo/blob/master/docs/config.md#pebbleds-profile) provides a high-performance alternative to leveldb as the datastore, and provides a modern replacement for [legacy badgerv1](https://github.com/ipfs/kubo/blob/master/docs/config.md#badgerds-profile). |
| 23 | |
| 24 | A fresh Kubo node can be initialized with [`pebbleds` profile](https://github.com/ipfs/kubo/blob/master/docs/config.md#pebbleds-profile) via `ipfs init --profile pebbleds`. |
| 25 | |
| 26 | 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. |
| 27 | For a description of the available tuning parameters, see [kubo/docs/datastores.md#pebbleds](https://github.com/ipfs/kubo/blob/master/docs/datastores.md#pebbleds). |
| 28 | |
| 29 | #### New metrics |
| 30 | |
| 31 | - Added 3 new go metrics: `go_gc_gogc_percent`, `go_gc_gomemlimit_bytes` and `go_sched_gomaxprocs_threads` as those are [recommended by the Go team](https://github.com/prometheus/client_golang/pull/1559) |
| 32 | - Added [network usage metrics](https://github.com/prometheus/client_golang/pull/1555): `process_network_receive_bytes_total` and `process_network_transmit_bytes_total` |
| 33 | - Removed `go_memstat_lookups_total` metric [which was always 0](https://github.com/prometheus/client_golang/pull/1577) |
| 34 | |
| 35 | #### `lowpower` profile no longer breaks DHT announcements |
| 36 | |
| 37 | 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. |
| 38 | |
| 39 | This release changes [`lowpower` profile](https://github.com/ipfs/kubo/blob/master/docs/config.md#lowpower-profile) to not change reprovider settings, ensuring the new users are not sabotaging themselves. It also adds [`announce-on`](https://github.com/ipfs/kubo/blob/master/docs/config.md#announce-on-profile) and [`announce-off`](https://github.com/ipfs/kubo/blob/master/docs/config.md#announce-off-profile) profiles for controlling announcement settings separately. |
| 40 | |
| 41 | > [!IMPORTANT] |
| 42 | > If you've ever applied the `lowpower` profile before, there is a high chance your node is not announcing to DHT anymore. |
| 43 | > If you have `Reprovider.Interval` set to `0` you may want to set it to `22h` (or run `ipfs config profile apply announce-on`) to fix your system. |
| 44 | > |
| 45 | > As a convenience, `ipfs daemon` will warn if reprovide system is disabled, creating oportinity to fix configuration if it was not intentional. |
| 46 | |
| 47 | #### go 1.23, boxo 0.24 and go-libp2p 0.36.5 |
| 48 | |
| 49 | Various bugfixes. Please update. |
| 50 | |
| 51 | ### 📝 Changelog |
| 52 | |
| 53 | <details><summary>Full Changelog</summary> |
| 54 | |
| 55 | - github.com/ipfs/kubo: |
| 56 | - fix: go 1.23(.2) (#10540) ([ipfs/kubo#10540](https://github.com/ipfs/kubo/pull/10540)) |
| 57 | - chore: bump version to 0.32.0-dev |
| 58 | - feat(routing/http): support IPIP-484 and streaming (#10534) ([ipfs/kubo#10534](https://github.com/ipfs/kubo/pull/10534)) |
| 59 | - fix(daemon): webui URL when rpc is catch-all (#10520) ([ipfs/kubo#10520](https://github.com/ipfs/kubo/pull/10520)) |
| 60 | - chore: update changelog and config doc with more info about pebble (#10533) ([ipfs/kubo#10533](https://github.com/ipfs/kubo/pull/10533)) |
| 61 | - feat: pebbleds profile and plugin (#10530) ([ipfs/kubo#10530](https://github.com/ipfs/kubo/pull/10530)) |
| 62 | - chore: dependency updates for 0.31 (#10511) ([ipfs/kubo#10511](https://github.com/ipfs/kubo/pull/10511)) |
| 63 | - feat: explicit announce-on/off profiles (#10524) ([ipfs/kubo#10524](https://github.com/ipfs/kubo/pull/10524)) |
| 64 | - fix(core): look for MFS root in local repo only (#8661) ([ipfs/kubo#8661](https://github.com/ipfs/kubo/pull/8661)) |
| 65 | - Fix issue in ResourceManager and nopfsPlugin about repo path (#10492) ([ipfs/kubo#10492](https://github.com/ipfs/kubo/pull/10492)) |
| 66 | - feat(bitswap): allow configuring WithWantHaveReplaceSize (#10512) ([ipfs/kubo#10512](https://github.com/ipfs/kubo/pull/10512)) |
| 67 | - refactor: simplify logic for MFS pinning (#10506) ([ipfs/kubo#10506](https://github.com/ipfs/kubo/pull/10506)) |
| 68 | - docs: clarify Gateway.PublicGateways (#10525) ([ipfs/kubo#10525](https://github.com/ipfs/kubo/pull/10525)) |
| 69 | - chore: clarify dep update in RELEASE_CHECKLIST.md (#10518) ([ipfs/kubo#10518](https://github.com/ipfs/kubo/pull/10518)) |
| 70 | - feat: ipfs-webui v4.3.2 (#10523) ([ipfs/kubo#10523](https://github.com/ipfs/kubo/pull/10523)) |
| 71 | - docs(config): add useful references |
| 72 | - docs(config): improve profile descriptions (#10517) ([ipfs/kubo#10517](https://github.com/ipfs/kubo/pull/10517)) |
| 73 | - docs: update RELEASE_CHECKLIST.md (#10496) ([ipfs/kubo#10496](https://github.com/ipfs/kubo/pull/10496)) |
| 74 | - chore: create next changelog (#10510) ([ipfs/kubo#10510](https://github.com/ipfs/kubo/pull/10510)) |
| 75 | - Merge Release: v0.30.0 [skip changelog] ([ipfs/kubo#10508](https://github.com/ipfs/kubo/pull/10508)) |
| 76 | - chore: boxo v0.23.0 and go-libp2p v0.36.3 (#10507) ([ipfs/kubo#10507](https://github.com/ipfs/kubo/pull/10507)) |
| 77 | - docs: replace outdated package paths described in rpc README (#10505) ([ipfs/kubo#10505](https://github.com/ipfs/kubo/pull/10505)) |
| 78 | - fix: switch back to go 1.22 (#10502) ([ipfs/kubo#10502](https://github.com/ipfs/kubo/pull/10502)) |
| 79 | - fix(cli): preserve hostname specified with --api in http request headers (#10497) ([ipfs/kubo#10497](https://github.com/ipfs/kubo/pull/10497)) |
| 80 | - chore: upgrade to go 1.23 (#10486) ([ipfs/kubo#10486](https://github.com/ipfs/kubo/pull/10486)) |
| 81 | - fix: error during config when running benchmarks (#10495) ([ipfs/kubo#10495](https://github.com/ipfs/kubo/pull/10495)) |
| 82 | - chore: update go-unixfsnode, cmds, and boxo (#10494) ([ipfs/kubo#10494](https://github.com/ipfs/kubo/pull/10494)) |
| 83 | - Docs fix spelling issues (#10493) ([ipfs/kubo#10493](https://github.com/ipfs/kubo/pull/10493)) |
| 84 | - chore: update version (#10491) ([ipfs/kubo#10491](https://github.com/ipfs/kubo/pull/10491)) |
| 85 | - github.com/ipfs/boxo (v0.23.0 -> v0.24.0): |
| 86 | - Release v0.24.0 ([ipfs/boxo#683](https://github.com/ipfs/boxo/pull/683)) |
| 87 | - github.com/ipfs/go-ipld-cbor (v0.1.0 -> v0.2.0): |
| 88 | - v0.2.0 |
| 89 | - deprecate DumpObject() in favor of better named Encode() |
| 90 | - add an EncodeWriter method, using the pooled marshallers |
| 91 | - fix expCid vs actualCid guard |
| 92 | - github.com/ipld/go-car/v2 (v2.13.1 -> v2.14.2): |
| 93 | - v2.14.2 bump |
| 94 | - fix: goreleaser v2 compat, trigger release-binaries with workflow_run |
| 95 | - v2.14.1 bump |
| 96 | - chore: update fuzz to Go 1.22 |
| 97 | - v2.14.0 bump |
| 98 | - fix(cmd): properly pick up --inverse and --cid-file args ([ipld/go-car#531](https://github.com/ipld/go-car/pull/531)) |
| 99 | - Re-factor cmd functions to library ([ipld/go-car#524](https://github.com/ipld/go-car/pull/524)) |
| 100 | - ci: uci/copy-templates ([ipld/go-car#521](https://github.com/ipld/go-car/pull/521)) |
| 101 | - Add a `car ls --unixfs-blocks` to render two-column output ([ipld/go-car#514](https://github.com/ipld/go-car/pull/514)) |
| 102 | - github.com/libp2p/go-libp2p (v0.36.3 -> v0.36.5): |
| 103 | - chore: remove Roadmap file (#2954) ([libp2p/go-libp2p#2954](https://github.com/libp2p/go-libp2p/pull/2954)) |
| 104 | - fix: Release v0.36.5 |
| 105 | - autonatv2: recover from panics (#2992) ([libp2p/go-libp2p#2992](https://github.com/libp2p/go-libp2p/pull/2992)) |
| 106 | - basichost: ensure no duplicates in Addrs output (#2980) ([libp2p/go-libp2p#2980](https://github.com/libp2p/go-libp2p/pull/2980)) |
| 107 | - Release v0.36.4 |
| 108 | - peerstore: better GC in membacked peerstore (#2960) ([libp2p/go-libp2p#2960](https://github.com/libp2p/go-libp2p/pull/2960)) |
| 109 | - fix: use quic.Version instead of the deprecated quic.VersionNumber (#2955) ([libp2p/go-libp2p#2955](https://github.com/libp2p/go-libp2p/pull/2955)) |
| 110 | - tcp: fix metrics for multiple calls to Close (#2953) ([libp2p/go-libp2p#2953](https://github.com/libp2p/go-libp2p/pull/2953)) |
| 111 | - github.com/libp2p/go-libp2p-kbucket (v0.6.3 -> v0.6.4): |
| 112 | - release v0.6.4 ([libp2p/go-libp2p-kbucket#135](https://github.com/libp2p/go-libp2p-kbucket/pull/135)) |
| 113 | - feat: add log printing when peer added and removed table ([libp2p/go-libp2p-kbucket#134](https://github.com/libp2p/go-libp2p-kbucket/pull/134)) |
| 114 | - Upgrade to go-log v2.5.1 ([libp2p/go-libp2p-kbucket#132](https://github.com/libp2p/go-libp2p-kbucket/pull/132)) |
| 115 | - chore: update go-libp2p-asn-util |
| 116 | - github.com/multiformats/go-multiaddr-dns (v0.3.1 -> v0.4.0): |
| 117 | - Release v0.4.0 (#64) ([multiformats/go-multiaddr-dns#64](https://github.com/multiformats/go-multiaddr-dns/pull/64)) |
| 118 | - Limit total number of resolved addresses from DNS response (#63) ([multiformats/go-multiaddr-dns#63](https://github.com/multiformats/go-multiaddr-dns/pull/63)) |
| 119 | - fix!: Only resolve the first DNS-like component (#61) ([multiformats/go-multiaddr-dns#61](https://github.com/multiformats/go-multiaddr-dns/pull/61)) |
| 120 | - sync: update CI config files (#43) ([multiformats/go-multiaddr-dns#43](https://github.com/multiformats/go-multiaddr-dns/pull/43)) |
| 121 | - remove deprecated types ([multiformats/go-multiaddr-dns#37](https://github.com/multiformats/go-multiaddr-dns/pull/37)) |
| 122 | - remove Jenkinsfile ([multiformats/go-multiaddr-dns#40](https://github.com/multiformats/go-multiaddr-dns/pull/40)) |
| 123 | - sync: update CI config files (#29) ([multiformats/go-multiaddr-dns#29](https://github.com/multiformats/go-multiaddr-dns/pull/29)) |
| 124 | - use net.IP.Equal to compare IP addresses ([multiformats/go-multiaddr-dns#30](https://github.com/multiformats/go-multiaddr-dns/pull/30)) |
| 125 | |
| 126 | </details> |
| 127 | |
| 128 | ### 👨👩👧👦 Contributors |
| 129 | |
| 130 | | Contributor | Commits | Lines ± | Files Changed | |
| 131 | |-------------|---------|---------|---------------| |
| 132 | | Will Scott | 3 | +731/-581 | 14 | |
| 133 | | Daniel N | 17 | +1034/-191 | 33 | |
| 134 | | Marco Munizaga | 5 | +721/-404 | 12 | |
| 135 | | Andrew Gillis | 9 | +765/-266 | 35 | |
| 136 | | Marcin Rataj | 17 | +568/-323 | 41 | |
| 137 | | Daniel Norman | 3 | +232/-111 | 10 | |
| 138 | | sukun | 4 | +93/-8 | 8 | |
| 139 | | Jorropo | 2 | +48/-45 | 5 | |
| 140 | | Marten Seemann | 3 | +19/-47 | 5 | |
| 141 | | fengzie | 1 | +29/-26 | 5 | |
| 142 | | Rod Vagg | 7 | +27/-11 | 9 | |
| 143 | | gopherfarm | 1 | +14/-14 | 6 | |
| 144 | | web3-bot | 3 | +13/-10 | 3 | |
| 145 | | Michael Muré | 2 | +16/-5 | 4 | |
| 146 | | i-norden | 1 | +9/-9 | 1 | |
| 147 | | Elias Rad | 1 | +7/-7 | 4 | |
| 148 | | Prithvi Shahi | 1 | +0/-11 | 2 | |
| 149 | | Lucas Molas | 1 | +5/-4 | 1 | |
| 150 | | elecbug | 1 | +6/-2 | 1 | |
| 151 | | gammazero | 2 | +2/-2 | 2 | |
| 152 | | chris erway | 1 | +2/-2 | 2 | |
| 153 | | Russell Dempsey | 1 | +2/-1 | 1 | |
| 154 | | guillaumemichel | 1 | +1/-1 | 1 | |