| 1 | # Kubo changelog v0.32 |
| 2 | |
| 3 | - [v0.32.0](#v0320) |
| 4 | |
| 5 | ## v0.32.0 |
| 6 | |
| 7 | - [Overview](#overview) |
| 8 | - [🔦 Highlights](#-highlights) |
| 9 | - [🎯 AutoTLS: Automatic Certificates for libp2p WebSockets via `libp2p.direct`](#-autotls-automatic-certificates-for-libp2p-websockets-via-libp2pdirect) |
| 10 | - [📦️ Dependency updates](#-dependency-updates) |
| 11 | - [📝 Changelog](#-changelog) |
| 12 | - [👨👩👧👦 Contributors](#-contributors) |
| 13 | |
| 14 | ### Overview |
| 15 | |
| 16 | ### 🔦 Highlights |
| 17 | |
| 18 | #### 🎯 AutoTLS: Automatic Certificates for libp2p WebSockets via `libp2p.direct` |
| 19 | |
| 20 | <img src="https://github.com/user-attachments/assets/51af045b-eff7-414f-b52b-0d1f222d74a3" width="300px" /> |
| 21 | |
| 22 | This release introduces an experimental feature that significantly improves how browsers ([Helia](https://helia.io/), [Service Worker](https://inbrowser.link)) can connect to Kubo node. |
| 23 | |
| 24 | Opt-in configuration allows a publicly dialable Kubo nodes (public IP, port forwarding, or NAT with uPnP) to obtain CA-signed TLS certificates for [libp2p Secure WebSocket (WSS)](https://github.com/libp2p/specs/blob/master/websockets/README.md) connections automatically. |
| 25 | |
| 26 | > [!TIP] |
| 27 | > To enable this feature, set `AutoTLS.Enabled` to `true` and add a listener for `/tls/sni/*.libp2p.direct/ws` on a separate TCP port: |
| 28 | > ```diff |
| 29 | > { |
| 30 | > + "AutoTLS": { "Enabled": true }, |
| 31 | > "Addresses": { |
| 32 | > "Swarm": { |
| 33 | > "/ip4/0.0.0.0/tcp/4001", |
| 34 | > + "/ip4/0.0.0.0/tcp/4002/tls/sni/*.libp2p.direct/ws", |
| 35 | > "/ip6/::/tcp/4001", |
| 36 | > + "/ip6/::/tcp/4002/tls/sni/*.libp2p.direct/ws", |
| 37 | > ``` |
| 38 | > After restarting your node for the first time you may need to wait 5-15 minutes to pass all checks and for the changes to take effect. |
| 39 | > We are working on sharing the same TCP port with other transports ([go-libp2p#2984](https://github.com/libp2p/go-libp2p/pull/2984)). |
| 40 | |
| 41 | See [`AutoTLS` configuration](https://github.com/ipfs/kubo/blob/master/docs/config.md#autotls) for more details how to enable it and what to expect. |
| 42 | |
| 43 | This is an early preview, we appreciate you testing and filling bug reports or feedback in the tracking issue at [kubo#10560](https://github.com/ipfs/kubo/issues/10560). |
| 44 | |
| 45 | #### 📦️ Dependency updates |
| 46 | |
| 47 | - update `ipfs-webui` to [v4.4.0](https://github.com/ipfs/ipfs-webui/releases/tag/v4.4.0) |
| 48 | - update `boxo` to [v0.24.1](https://github.com/ipfs/boxo/releases/tag/v0.24.1) + [v0.24.2](https://github.com/ipfs/boxo/releases/tag/v0.24.2) + [v0.24.3](https://github.com/ipfs/boxo/releases/tag/v0.24.3) |
| 49 | - This includes a number of fixes and bitswap improvements, and support for filtering from [IPIP-484](https://specs.ipfs.tech/ipips/ipip-0484/) in delegated HTTP routing and IPNI queries. |
| 50 | - update `go-libp2p` to [v0.37.0](https://github.com/libp2p/go-libp2p/releases/tag/v0.37.0) |
| 51 | - This update required removal of `Swarm.RelayService.MaxReservationsPerPeer` configuration option from Kubo. If you had it set, remove it from your configuration file. |
| 52 | - update `go-libp2p-kad-dht` to [v0.27.0](https://github.com/libp2p/go-libp2p-kad-dht/releases/tag/v0.27.0) + [v0.28.0](https://github.com/libp2p/go-libp2p-kad-dht/releases/tag/v0.28.0) + [v0.28.1](https://github.com/libp2p/go-libp2p-kad-dht/releases/tag/v0.28.1) |
| 53 | - update `go-libp2p-pubsub` to [v0.12.0](https://github.com/libp2p/go-libp2p-pubsub/releases/tag/v0.12.0) |
| 54 | - update `p2p-forge/client` to [v0.0.2](https://github.com/ipshipyard/p2p-forge/releases/tag/v0.0.2) |
| 55 | - removed `go-homedir` |
| 56 | - The `github.com/mitchellh/go-homedir` repo is archived, no longer needed, and no longer maintained. |
| 57 | - `homedir.Dir` is replaced by the stdlib `os.UserHomeDir` |
| 58 | - `homedir.Expand` is replaced by `fsutil.ExpandHome` in the `github.com/ipfs/kubo/misc/fsutil` package. |
| 59 | - The new `github.com/ipfs/kubo/misc/fsutil` package contains file utility code previously located elsewhere in kubo. |
| 60 | |
| 61 | ### 📝 Changelog |
| 62 | |
| 63 | <details><summary>Full Changelog</summary> |
| 64 | |
| 65 | - github.com/ipfs/kubo: |
| 66 | - chore: 0.32.0 |
| 67 | - fix: go-libp2p-kad-dht v0.28.0 (#10578) ([ipfs/kubo#10578](https://github.com/ipfs/kubo/pull/10578)) |
| 68 | - chore: 0.32.0-rc2 |
| 69 | - feat: ipfs-webui v4.4.0 (#10574) ([ipfs/kubo#10574](https://github.com/ipfs/kubo/pull/10574)) |
| 70 | - chore: label implicit loggers |
| 71 | - chore: boxo v0.24.3 and p2p-forge v0.0.2 (#10572) ([ipfs/kubo#10572](https://github.com/ipfs/kubo/pull/10572)) |
| 72 | - chore: stop using go-homedir (#10568) ([ipfs/kubo#10568](https://github.com/ipfs/kubo/pull/10568)) |
| 73 | - fix(autotls): store certificates at the location from the repo path (#10566) ([ipfs/kubo#10566](https://github.com/ipfs/kubo/pull/10566)) |
| 74 | - chore: 0.32.0-rc1 |
| 75 | - docs(autotls): add note about separate port use (#10562) ([ipfs/kubo#10562](https://github.com/ipfs/kubo/pull/10562)) |
| 76 | - feat(AutoTLS): opt-in WSS certs from p2p-forge at libp2p.direct (#10521) ([ipfs/kubo#10521](https://github.com/ipfs/kubo/pull/10521)) |
| 77 | - chore: upgrade to boxo v0.24.2 (#10559) ([ipfs/kubo#10559](https://github.com/ipfs/kubo/pull/10559)) |
| 78 | - refactor: update to go-libp2p v0.37.0 (#10554) ([ipfs/kubo#10554](https://github.com/ipfs/kubo/pull/10554)) |
| 79 | - docs(config): explain what multiaddr is |
| 80 | - chore: update dependencies (#10548) ([ipfs/kubo#10548](https://github.com/ipfs/kubo/pull/10548)) |
| 81 | - chore: update test dependencies (#10555) ([ipfs/kubo#10555](https://github.com/ipfs/kubo/pull/10555)) |
| 82 | - chore(ci): adjust verbosity |
| 83 | - chore(ci): verbose build of test/bin deps |
| 84 | - chore(ci): build docker images for staging branch |
| 85 | - Create Changelog: v0.32 ([ipfs/kubo#10546](https://github.com/ipfs/kubo/pull/10546)) |
| 86 | - Merge release v0.31.0 ([ipfs/kubo#10545](https://github.com/ipfs/kubo/pull/10545)) |
| 87 | - chore: update RELEASE_CHECKLIST.md (#10544) ([ipfs/kubo#10544](https://github.com/ipfs/kubo/pull/10544)) |
| 88 | - feat: ipfs-webui v4.3.3 (#10543) ([ipfs/kubo#10543](https://github.com/ipfs/kubo/pull/10543)) |
| 89 | - chore: update RELEASE_CHECKLIST.md (#10542) ([ipfs/kubo#10542](https://github.com/ipfs/kubo/pull/10542)) |
| 90 | - Add full changelog to release changelog |
| 91 | - fix: go 1.23(.2) (#10540) ([ipfs/kubo#10540](https://github.com/ipfs/kubo/pull/10540)) |
| 92 | - chore: bump version to 0.32.0-dev |
| 93 | - github.com/ipfs/boxo (v0.24.0 -> v0.24.3): |
| 94 | - Release v0.24.3 ([ipfs/boxo#713](https://github.com/ipfs/boxo/pull/713)) |
| 95 | - Merge branch 'main' into release |
| 96 | - Release v0.24.2 ([ipfs/boxo#707](https://github.com/ipfs/boxo/pull/707)) |
| 97 | - Release v0.24.1 ([ipfs/boxo#706](https://github.com/ipfs/boxo/pull/706)) |
| 98 | - github.com/ipfs/go-ipfs-cmds (v0.13.0 -> v0.14.0): |
| 99 | - chore: release v0.14.0 (#269) ([ipfs/go-ipfs-cmds#269](https://github.com/ipfs/go-ipfs-cmds/pull/269)) |
| 100 | - github.com/ipfs/go-ipfs-redirects-file (v0.1.1 -> v0.1.2): |
| 101 | - chore: v0.1.2 (#29) ([ipfs/go-ipfs-redirects-file#29](https://github.com/ipfs/go-ipfs-redirects-file/pull/29)) |
| 102 | - docs(readme): refer specs and ipip |
| 103 | - chore: update dependencies (#28) ([ipfs/go-ipfs-redirects-file#28](https://github.com/ipfs/go-ipfs-redirects-file/pull/28)) |
| 104 | - github.com/ipfs/go-metrics-prometheus (v0.0.2 -> v0.0.3): |
| 105 | - chore: release v0.0.3 (#24) ([ipfs/go-metrics-prometheus#24](https://github.com/ipfs/go-metrics-prometheus/pull/24)) |
| 106 | - chore: update deps and update go-log to v2 (#23) ([ipfs/go-metrics-prometheus#23](https://github.com/ipfs/go-metrics-prometheus/pull/23)) |
| 107 | - sync: update CI config files (#9) ([ipfs/go-metrics-prometheus#9](https://github.com/ipfs/go-metrics-prometheus/pull/9)) |
| 108 | - github.com/ipfs/go-unixfsnode (v1.9.1 -> v1.9.2): |
| 109 | - New release version ([ipfs/go-unixfsnode#78](https://github.com/ipfs/go-unixfsnode/pull/78)) |
| 110 | - chore: update dependencies |
| 111 | - github.com/libp2p/go-flow-metrics (v0.1.0 -> v0.2.0): |
| 112 | - chore: release v0.2.0 (#33) ([libp2p/go-flow-metrics#33](https://github.com/libp2p/go-flow-metrics/pull/33)) |
| 113 | - chore: cleanup readme (#31) ([libp2p/go-flow-metrics#31](https://github.com/libp2p/go-flow-metrics/pull/31)) |
| 114 | - ci: uci/update-go ([libp2p/go-flow-metrics#27](https://github.com/libp2p/go-flow-metrics/pull/27)) |
| 115 | - fix(ewma): reduce the chances of fake bandwidth spikes (#8) ([libp2p/go-flow-metrics#8](https://github.com/libp2p/go-flow-metrics/pull/8)) |
| 116 | - chore: switch to typed atomics (#24) ([libp2p/go-flow-metrics#24](https://github.com/libp2p/go-flow-metrics/pull/24)) |
| 117 | - test: use mock clocks for all tests (#25) ([libp2p/go-flow-metrics#25](https://github.com/libp2p/go-flow-metrics/pull/25)) |
| 118 | - ci: uci/copy-templates ([libp2p/go-flow-metrics#21](https://github.com/libp2p/go-flow-metrics/pull/21)) |
| 119 | - github.com/libp2p/go-libp2p (v0.36.5 -> v0.37.0): |
| 120 | - Release v0.37.0 (#3013) ([libp2p/go-libp2p#3013](https://github.com/libp2p/go-libp2p/pull/3013)) |
| 121 | - feat: Add WithFxOption (#2956) ([libp2p/go-libp2p#2956](https://github.com/libp2p/go-libp2p/pull/2956)) |
| 122 | - chore: update imports to use slices package (#3007) ([libp2p/go-libp2p#3007](https://github.com/libp2p/go-libp2p/pull/3007)) |
| 123 | - Change latency metrics buckets (#3012) ([libp2p/go-libp2p#3012](https://github.com/libp2p/go-libp2p/pull/3012)) |
| 124 | - chore: bump deps in preparation for v0.37.0 (#3011) ([libp2p/go-libp2p#3011](https://github.com/libp2p/go-libp2p/pull/3011)) |
| 125 | - autonat: fix interaction with autorelay (#2967) ([libp2p/go-libp2p#2967](https://github.com/libp2p/go-libp2p/pull/2967)) |
| 126 | - swarm: add a peer dial latency metric (#2959) ([libp2p/go-libp2p#2959](https://github.com/libp2p/go-libp2p/pull/2959)) |
| 127 | - peerstore: limit number of non connected peers in addrbook (#2971) ([libp2p/go-libp2p#2971](https://github.com/libp2p/go-libp2p/pull/2971)) |
| 128 | - fix: swarm: refactor address resolution (#2990) ([libp2p/go-libp2p#2990](https://github.com/libp2p/go-libp2p/pull/2990)) |
| 129 | - Add backoff for updating local IP addresses on error (#2999) ([libp2p/go-libp2p#2999](https://github.com/libp2p/go-libp2p/pull/2999)) |
| 130 | - libp2phttp: HTTP Peer ID Authentication (#2854) ([libp2p/go-libp2p#2854](https://github.com/libp2p/go-libp2p/pull/2854)) |
| 131 | - relay: make only 1 reservation per peer (#2974) ([libp2p/go-libp2p#2974](https://github.com/libp2p/go-libp2p/pull/2974)) |
| 132 | - autonatv2: recover from panics (#2992) ([libp2p/go-libp2p#2992](https://github.com/libp2p/go-libp2p/pull/2992)) |
| 133 | - basichost: ensure no duplicates in Addrs output (#2980) ([libp2p/go-libp2p#2980](https://github.com/libp2p/go-libp2p/pull/2980)) |
| 134 | - fix(websocket): re-enable websocket transport test (#2987) ([libp2p/go-libp2p#2987](https://github.com/libp2p/go-libp2p/pull/2987)) |
| 135 | - feat(websocket): switch the underlying http server logger to use ipfs/go-log (#2985) ([libp2p/go-libp2p#2985](https://github.com/libp2p/go-libp2p/pull/2985)) |
| 136 | - peerstore: better GC in membacked peerstore (#2960) ([libp2p/go-libp2p#2960](https://github.com/libp2p/go-libp2p/pull/2960)) |
| 137 | - connmgr: reduce log level for untagging untracked peers ([libp2p/go-libp2p#2961](https://github.com/libp2p/go-libp2p/pull/2961)) |
| 138 | - fix: use quic.Version instead of the deprecated quic.VersionNumber (#2955) ([libp2p/go-libp2p#2955](https://github.com/libp2p/go-libp2p/pull/2955)) |
| 139 | - tcp: fix metrics for multiple calls to Close (#2953) ([libp2p/go-libp2p#2953](https://github.com/libp2p/go-libp2p/pull/2953)) |
| 140 | - chore: remove Roadmap file (#2954) ([libp2p/go-libp2p#2954](https://github.com/libp2p/go-libp2p/pull/2954)) |
| 141 | - chore: add a funding JSON file to apply for Optimism rPGF round 5 (#2940) ([libp2p/go-libp2p#2940](https://github.com/libp2p/go-libp2p/pull/2940)) |
| 142 | - Fix: WebSocket: Clone TLS config before creating a new listener |
| 143 | - fix: enable dctur when interface address is public (#2931) ([libp2p/go-libp2p#2931](https://github.com/libp2p/go-libp2p/pull/2931)) |
| 144 | - fix: QUIC/Webtransport Transports now will prefer their owned listeners for dialing out (#2936) ([libp2p/go-libp2p#2936](https://github.com/libp2p/go-libp2p/pull/2936)) |
| 145 | - ci: uci/update-go (#2937) ([libp2p/go-libp2p#2937](https://github.com/libp2p/go-libp2p/pull/2937)) |
| 146 | - fix: slice append value (#2938) ([libp2p/go-libp2p#2938](https://github.com/libp2p/go-libp2p/pull/2938)) |
| 147 | - webrtc: wait for listener context before dropping connection (#2932) ([libp2p/go-libp2p#2932](https://github.com/libp2p/go-libp2p/pull/2932)) |
| 148 | - ci: use go1.23, drop go1.21 (#2933) ([libp2p/go-libp2p#2933](https://github.com/libp2p/go-libp2p/pull/2933)) |
| 149 | - Fail on any test timeout (#2929) ([libp2p/go-libp2p#2929](https://github.com/libp2p/go-libp2p/pull/2929)) |
| 150 | - test: Try to fix test timeout (#2930) ([libp2p/go-libp2p#2930](https://github.com/libp2p/go-libp2p/pull/2930)) |
| 151 | - ci: Out of the tarpit (#2923) ([libp2p/go-libp2p#2923](https://github.com/libp2p/go-libp2p/pull/2923)) |
| 152 | - Make BlackHoleState type public (#2917) ([libp2p/go-libp2p#2917](https://github.com/libp2p/go-libp2p/pull/2917)) |
| 153 | - Fix proto import paths (#2920) ([libp2p/go-libp2p#2920](https://github.com/libp2p/go-libp2p/pull/2920)) |
| 154 | - github.com/libp2p/go-libp2p-kad-dht (v0.26.1 -> v0.28.0): |
| 155 | - chore: release v0.28.0 (#998) ([libp2p/go-libp2p-kad-dht#998](https://github.com/libp2p/go-libp2p-kad-dht/pull/998)) |
| 156 | - fix: set context timeout for `queryPeer` (#996) ([libp2p/go-libp2p-kad-dht#996](https://github.com/libp2p/go-libp2p-kad-dht/pull/996)) |
| 157 | - refactor: document and expose Amino DHT defaults (#990) ([libp2p/go-libp2p-kad-dht#990](https://github.com/libp2p/go-libp2p-kad-dht/pull/990)) |
| 158 | - Use timeout context for NewStream call ([libp2p/go-libp2p-kad-dht#994](https://github.com/libp2p/go-libp2p-kad-dht/pull/994)) |
| 159 | - release v0.27.0 ([libp2p/go-libp2p-kad-dht#992](https://github.com/libp2p/go-libp2p-kad-dht/pull/992)) |
| 160 | - Add new DHT option to provide custom pb.MessageSender ([libp2p/go-libp2p-kad-dht#991](https://github.com/libp2p/go-libp2p-kad-dht/pull/991)) |
| 161 | - fix: replace deprecated Boxo function ([libp2p/go-libp2p-kad-dht#987](https://github.com/libp2p/go-libp2p-kad-dht/pull/987)) |
| 162 | - fix(query): reverting changes on TestRTEvictionOnFailedQuery ([libp2p/go-libp2p-kad-dht#984](https://github.com/libp2p/go-libp2p-kad-dht/pull/984)) |
| 163 | - github.com/libp2p/go-libp2p-pubsub (v0.11.0 -> v0.12.0): |
| 164 | - chore: upgrade go-libp2p (#575) ([libp2p/go-libp2p-pubsub#575](https://github.com/libp2p/go-libp2p-pubsub/pull/575)) |
| 165 | - GossipSub v1.2: IDONTWANT control message and priority queue. (#553) ([libp2p/go-libp2p-pubsub#553](https://github.com/libp2p/go-libp2p-pubsub/pull/553)) |
| 166 | - Re-enable disabled gossipsub test (#566) ([libp2p/go-libp2p-pubsub#566](https://github.com/libp2p/go-libp2p-pubsub/pull/566)) |
| 167 | - chore: staticcheck |
| 168 | - chore: update rand usage |
| 169 | - chore: go fmt |
| 170 | - chore: add or force update version.json |
| 171 | - added missing Close call on the AddrBook member of GossipSubRouter (#568) ([libp2p/go-libp2p-pubsub#568](https://github.com/libp2p/go-libp2p-pubsub/pull/568)) |
| 172 | - test: test notify protocols updated (#567) ([libp2p/go-libp2p-pubsub#567](https://github.com/libp2p/go-libp2p-pubsub/pull/567)) |
| 173 | - Switch to the new peer notify mechanism (#564) ([libp2p/go-libp2p-pubsub#564](https://github.com/libp2p/go-libp2p-pubsub/pull/564)) |
| 174 | - test: use the regular libp2p host (#565) ([libp2p/go-libp2p-pubsub#565](https://github.com/libp2p/go-libp2p-pubsub/pull/565)) |
| 175 | - Missing flood protection check for number of message IDs when handling `Ihave` messages (#560) ([libp2p/go-libp2p-pubsub#560](https://github.com/libp2p/go-libp2p-pubsub/pull/560)) |
| 176 | |
| 177 | </details> |
| 178 | |
| 179 | ### 👨👩👧👦 Contributors |
| 180 | |
| 181 | | Contributor | Commits | Lines ± | Files Changed | |
| 182 | |-------------|---------|---------|---------------| |
| 183 | | Marco Munizaga | 16 | +4253/-545 | 81 | |
| 184 | | Pop Chunhapanya | 1 | +1423/-137 | 15 | |
| 185 | | sukun | 10 | +752/-425 | 35 | |
| 186 | | Steven Allen | 11 | +518/-541 | 35 | |
| 187 | | Andrew Gillis | 19 | +348/-194 | 50 | |
| 188 | | Marcin Rataj | 26 | +343/-132 | 47 | |
| 189 | | Adin Schmahmann | 4 | +269/-29 | 12 | |
| 190 | | gammazero | 12 | +154/-18 | 13 | |
| 191 | | Josh Klopfenstein | 1 | +90/-35 | 27 | |
| 192 | | galargh | 3 | +42/-44 | 13 | |
| 193 | | Daniel Norman | 2 | +30/-16 | 4 | |
| 194 | | Mikel Cortes | 3 | +25/-4 | 4 | |
| 195 | | gopherfarm | 1 | +14/-14 | 6 | |
| 196 | | Carlos Peliciari | 1 | +12/-12 | 4 | |
| 197 | | Prithvi Shahi | 2 | +5/-11 | 3 | |
| 198 | | web3-bot | 6 | +12/-3 | 6 | |
| 199 | | guillaumemichel | 3 | +7/-6 | 3 | |
| 200 | | Jorropo | 1 | +11/-0 | 1 | |
| 201 | | Sorin Stanculeanu | 1 | +8/-0 | 1 | |
| 202 | | Hlib Kanunnikov | 2 | +6/-2 | 4 | |
| 203 | | André Bierlein | 1 | +4/-3 | 1 | |
| 204 | | bytetigers | 1 | +1/-1 | 1 | |
| 205 | | Wondertan | 2 | +2/-0 | 2 | |
| 206 | | Alexandr Burdiyan | 1 | +1/-1 | 1 | |
| 207 | | Guillaume Michel | 1 | +0/-1 | 1 | |