| 1 | # Kubo changelog v0.24 |
| 2 | |
| 3 | - [v0.24.0](#v0240) |
| 4 | |
| 5 | ## v0.24.0 |
| 6 | |
| 7 | - [Overview](#overview) |
| 8 | - [🔦 Highlights](#-highlights) |
| 9 | - [Support for content blocking](#support-for-content-blocking) |
| 10 | - [Gateway: the root of the CARs are no longer meaningful](#gateway-the-root-of-the-cars-are-no-longer-meaningful) |
| 11 | - [IPNS: improved publishing defaults](#ipns-improved-publishing-defaults) |
| 12 | - [IPNS: record TTL is used for caching](#ipns-record-ttl-is-used-for-caching) |
| 13 | - [Experimental Transport: WebRTC Direct](#experimental-transport-webrtc-direct) |
| 14 | - [📝 Changelog](#-changelog) |
| 15 | - [👨👩👧👦 Contributors](#-contributors) |
| 16 | |
| 17 | ### Overview |
| 18 | |
| 19 | ### 🔦 Highlights |
| 20 | |
| 21 | #### Support for content blocking |
| 22 | |
| 23 | This Kubo release ships with built-in content-blocking subsystem [announced earlier this year](https://blog.ipfs.tech/2023-content-blocking-for-the-ipfs-stack/). |
| 24 | Content blocking is an opt-in decision made by the operator of `ipfs daemon`. |
| 25 | The official build does not ship with any denylists. |
| 26 | |
| 27 | Learn more at [`/docs/content-blocking.md`](https://github.com/ipfs/kubo/blob/master/docs/content-blocking.md) |
| 28 | |
| 29 | #### Gateway: the root of the CARs are no longer meaningful |
| 30 | |
| 31 | When requesting a CAR from the gateway, the root of the CAR might no longer be |
| 32 | meaningful. By default, the CAR root will be the last resolvable segment of the |
| 33 | path. However, in situations where the path cannot be resolved, such as when |
| 34 | the path does not exist, a CAR will be sent with a root of `bafkqaaa` (empty CID). |
| 35 | This CAR will contain all blocks necessary to validate that the path does not exist. |
| 36 | |
| 37 | #### IPNS: improved publishing defaults |
| 38 | |
| 39 | This release changes the default values used when publishing IPNS record |
| 40 | via `ipfs name publish` command: |
| 41 | |
| 42 | - Default `--lifetime` increased from `24h` to `48h` to take full advantage of |
| 43 | the increased expiration window of Amino DHT |
| 44 | ([go-libp2p-kad-dht#793](https://github.com/libp2p/go-libp2p-kad-dht/pull/793)) |
| 45 | - Default `--ttl` increased from `1m` to `1h` to improve website caching and follow |
| 46 | saner defaults present in similar systems like DNS |
| 47 | ([specs#371](https://github.com/ipfs/specs/pull/371)) |
| 48 | |
| 49 | This change only impacts the implicit defaults, when mentioned parameters are omitted |
| 50 | during publishing. Users are free to override the default if different value |
| 51 | makes more sense for their use case. |
| 52 | |
| 53 | #### IPNS: record TTL is used for caching |
| 54 | |
| 55 | In this release, we've made significant improvements to IPNS caching. |
| 56 | |
| 57 | Previously, the TTL value in IPNS records was not utilized, and the |
| 58 | `boxo/namesys` library maintained a static one-minute resolution cache. |
| 59 | |
| 60 | With this update, IPNS publishers gain more control over how long a valid IPNS |
| 61 | record remains cached before checking an upstream routing system, such as Amino |
| 62 | DHT, for updates. The TTL value in the IPNS record now serves as a hint for: |
| 63 | |
| 64 | - `boxo/namesys`: the internal cache, determining how long the IPNS resolution |
| 65 | result is cached before asking upstream routing systems for updates. |
| 66 | - `boxo/gateway`: the `Cache-Control` HTTP header in responses to requests made |
| 67 | for `/ipns/name` content paths. |
| 68 | |
| 69 | These changes make it easier for rarely updated IPNS-hosted websites to be |
| 70 | cached more efficiently and load faster in browser contexts. |
| 71 | |
| 72 | #### Experimental Transport: WebRTC Direct |
| 73 | |
| 74 | This Kubo release includes the initial work towards WebRTC Direct |
| 75 | introduced in [`go-libp2p`](https://github.com/libp2p/go-libp2p/releases/tag/v0.32.0) v0.32: |
| 76 | |
| 77 | > [WebRTC Direct](https://github.com/libp2p/specs/blob/master/webrtc/webrtc-direct.md) |
| 78 | > allows browser nodes to connect to go-libp2p nodes directly, |
| 79 | > without any configuration (e.g. TLS certificates) needed on the go-libp2p |
| 80 | > side. This is useful for browser nodes that aren’t able to use |
| 81 | > [WebTransport](https://web.archive.org/web/20260107053250/https://blog.libp2p.io/2022-12-19-libp2p-webtransport/). |
| 82 | |
| 83 | The `/webrtc-direct` transport is disabled by default in Kubo 0.24, |
| 84 | and not ready for production use yet, but we plan to enable it in a future release. |
| 85 | |
| 86 | See [`Swarm.Transports.Network.WebRTCDirect`](https://github.com/ipfs/kubo/blob/master/docs/config.md#swarmtransportsnetworkwebrtcdirect) |
| 87 | to learn how to enable it manually, and what current limitations are. |
| 88 | |
| 89 | ### 📝 Changelog |
| 90 | |
| 91 | <details><summary>Full Changelog</summary> |
| 92 | |
| 93 | - github.com/ipfs/kubo: |
| 94 | - chore: update version |
| 95 | - fix: allow event emitting to happen in parallel with getting the query channel |
| 96 | - fixes to routing put command (#10205) ([ipfs/kubo#10205](https://github.com/ipfs/kubo/pull/10205)) |
| 97 | - docs: fix accelerated-dht-client |
| 98 | - docs/config: remove extra commas in PublicGateways example entries |
| 99 | - chore: update version |
| 100 | - docs: make it clear Web RTC Direct is experimental |
| 101 | - feat: add WebRTC Direct support |
| 102 | - docs: update EARLY_TESTERS.md (#10194) ([ipfs/kubo#10194](https://github.com/ipfs/kubo/pull/10194)) |
| 103 | - Release: v0.24.0-1 ([ipfs/kubo#10190](https://github.com/ipfs/kubo/pull/10190)) |
| 104 | - github.com/ipfs/boxo (v0.13.1 -> v0.15.0): |
| 105 | - Release v0.15.0 ([ipfs/boxo#505](https://github.com/ipfs/boxo/pull/505)) |
| 106 | - Release v0.14.0 ([ipfs/boxo#500](https://github.com/ipfs/boxo/pull/500)) |
| 107 | - github.com/ipfs/go-block-format (v0.1.2 -> v0.2.0): |
| 108 | - v0.2.0 bump |
| 109 | - github.com/ipfs/go-graphsync (v0.15.1 -> v0.16.0): |
| 110 | - chore: release 0.16.0 |
| 111 | - chore: bump go-libp2p to 0.32.0 |
| 112 | - github.com/ipfs/go-ipld-format (v0.5.0 -> v0.6.0): |
| 113 | - v0.6.0 bump |
| 114 | - chore: update deps |
| 115 | - fix: stop using the deprecated io/ioutil package |
| 116 | - github.com/libp2p/go-libp2p (v0.31.0 -> v0.32.1): |
| 117 | - release v0.32.1 (#2637) ([libp2p/go-libp2p#2637](https://github.com/libp2p/go-libp2p/pull/2637)) |
| 118 | - swarm: fix timer Leak in the dial loop (#2636) ([libp2p/go-libp2p#2636](https://github.com/libp2p/go-libp2p/pull/2636)) |
| 119 | - release v0.32.0 (#2625) ([libp2p/go-libp2p#2625](https://github.com/libp2p/go-libp2p/pull/2625)) |
| 120 | - chore: update js-libp2p examples repo (#2624) ([libp2p/go-libp2p#2624](https://github.com/libp2p/go-libp2p/pull/2624)) |
| 121 | - identify: don't filter dns addresses based on remote addr type (#2553) ([libp2p/go-libp2p#2553](https://github.com/libp2p/go-libp2p/pull/2553)) |
| 122 | - webrtc: fix race in TestRemoveConnByUfrag (#2620) ([libp2p/go-libp2p#2620](https://github.com/libp2p/go-libp2p/pull/2620)) |
| 123 | - swarm: fix recursive resolving of DNS multiaddrs (#2564) ([libp2p/go-libp2p#2564](https://github.com/libp2p/go-libp2p/pull/2564)) |
| 124 | - ci: migrate to renamed interop test action (#2617) ([libp2p/go-libp2p#2617](https://github.com/libp2p/go-libp2p/pull/2617)) |
| 125 | - quic: update quic-go to v0.39.1, set a static resumption token generator key (#2572) ([libp2p/go-libp2p#2572](https://github.com/libp2p/go-libp2p/pull/2572)) |
| 126 | - test/basichost: fix flaky test due to rcmgr (#2613) ([libp2p/go-libp2p#2613](https://github.com/libp2p/go-libp2p/pull/2613)) |
| 127 | - swarm: use typed atomics (#2612) ([libp2p/go-libp2p#2612](https://github.com/libp2p/go-libp2p/pull/2612)) |
| 128 | - swarm: cleanup stream handler goroutine (#2610) ([libp2p/go-libp2p#2610](https://github.com/libp2p/go-libp2p/pull/2610)) |
| 129 | - circuitv2: don't check ASN for private addrs (#2611) ([libp2p/go-libp2p#2611](https://github.com/libp2p/go-libp2p/pull/2611)) |
| 130 | - swarm: use happy eyeballs ranking for TCP dials (#2573) ([libp2p/go-libp2p#2573](https://github.com/libp2p/go-libp2p/pull/2573)) |
| 131 | - webrtc: fix race in TestMuxedConnection (#2607) ([libp2p/go-libp2p#2607](https://github.com/libp2p/go-libp2p/pull/2607)) |
| 132 | - tcp: fix build on riscv64 (#2590) ([libp2p/go-libp2p#2590](https://github.com/libp2p/go-libp2p/pull/2590)) |
| 133 | - Fix missing deprecation tag (#2605) ([libp2p/go-libp2p#2605](https://github.com/libp2p/go-libp2p/pull/2605)) |
| 134 | - swarm: wait for transient connections to upgrade for NewStream (#2542) ([libp2p/go-libp2p#2542](https://github.com/libp2p/go-libp2p/pull/2542)) |
| 135 | - docs: fix typos (#2604) ([libp2p/go-libp2p#2604](https://github.com/libp2p/go-libp2p/pull/2604)) |
| 136 | - webrtc: correctly report incoming packet address on muxed connection (#2586) ([libp2p/go-libp2p#2586](https://github.com/libp2p/go-libp2p/pull/2586)) |
| 137 | - swarm: add loopback to low timeout filter (#2595) ([libp2p/go-libp2p#2595](https://github.com/libp2p/go-libp2p/pull/2595)) |
| 138 | - Fix typos in comments and a test failure message (#2600) ([libp2p/go-libp2p#2600](https://github.com/libp2p/go-libp2p/pull/2600)) |
| 139 | - libp2phttp: don't strip `/` suffix when mounting handler (#2552) ([libp2p/go-libp2p#2552](https://github.com/libp2p/go-libp2p/pull/2552)) |
| 140 | - interop: fix redis env var (#2585) ([libp2p/go-libp2p#2585](https://github.com/libp2p/go-libp2p/pull/2585)) |
| 141 | - quicreuse: remove QUIC metrics tracer (#2582) ([libp2p/go-libp2p#2582](https://github.com/libp2p/go-libp2p/pull/2582)) |
| 142 | - config: warn if connmgr limits conflict with rcmgr (#2527) ([libp2p/go-libp2p#2527](https://github.com/libp2p/go-libp2p/pull/2527)) |
| 143 | - update gomock to v0.3.0 (#2581) ([libp2p/go-libp2p#2581](https://github.com/libp2p/go-libp2p/pull/2581)) |
| 144 | - webrtc: fix deadlock on connection close (#2580) ([libp2p/go-libp2p#2580](https://github.com/libp2p/go-libp2p/pull/2580)) |
| 145 | - webrtc: put buffer back to pool (#2574) ([libp2p/go-libp2p#2574](https://github.com/libp2p/go-libp2p/pull/2574)) |
| 146 | - webrtc: fail Write early if deadline has exceeded before the call (#2578) ([libp2p/go-libp2p#2578](https://github.com/libp2p/go-libp2p/pull/2578)) |
| 147 | - swarm: fix DialPeer behaviour for transient connections (#2547) ([libp2p/go-libp2p#2547](https://github.com/libp2p/go-libp2p/pull/2547)) |
| 148 | - websocket: don't resolve /dnsaddr addresses (#2571) ([libp2p/go-libp2p#2571](https://github.com/libp2p/go-libp2p/pull/2571)) |
| 149 | - core/peer: remove deprecated ID.Pretty method (#2565) ([libp2p/go-libp2p#2565](https://github.com/libp2p/go-libp2p/pull/2565)) |
| 150 | - core/peer: remove deprecated Encode function (#2566) ([libp2p/go-libp2p#2566](https://github.com/libp2p/go-libp2p/pull/2566)) |
| 151 | - mock: use go.uber.org/mock (#2540) ([libp2p/go-libp2p#2540](https://github.com/libp2p/go-libp2p/pull/2540)) |
| 152 | - add WebRTC Direct transport implementation (#2337) ([libp2p/go-libp2p#2337](https://github.com/libp2p/go-libp2p/pull/2337)) |
| 153 | - upgrader: drop support for multistream simultaneous open (#2557) ([libp2p/go-libp2p#2557](https://github.com/libp2p/go-libp2p/pull/2557)) |
| 154 | - examples: stop using deprecated peer.ID.Pretty (#2563) ([libp2p/go-libp2p#2563](https://github.com/libp2p/go-libp2p/pull/2563)) |
| 155 | - swarm: don't dial unspecified addresses (#2560) ([libp2p/go-libp2p#2560](https://github.com/libp2p/go-libp2p/pull/2560)) |
| 156 | - basichost: handle the SetProtocol error in NewStream (#2555) ([libp2p/go-libp2p#2555](https://github.com/libp2p/go-libp2p/pull/2555)) |
| 157 | - libp2phttp: don't initialise ServeMux if not nil (#2548) ([libp2p/go-libp2p#2548](https://github.com/libp2p/go-libp2p/pull/2548)) |
| 158 | - github.com/libp2p/go-libp2p-pubsub (v0.9.3 -> v0.10.0): |
| 159 | - chore: update go-libp2p to v0.32 (#548) ([libp2p/go-libp2p-pubsub#548](https://github.com/libp2p/go-libp2p-pubsub/pull/548)) |
| 160 | - remove usage of deprecated peerid.Pretty method (#542) ([libp2p/go-libp2p-pubsub#542](https://github.com/libp2p/go-libp2p-pubsub/pull/542)) |
| 161 | - Revert "fix: topicscore params can't be set for dynamically subscribed topic (#540)" (#541) ([libp2p/go-libp2p-pubsub#541](https://github.com/libp2p/go-libp2p-pubsub/pull/541)) |
| 162 | - fix: topicscore params can't be set for dynamically subscribed topic (#540) ([libp2p/go-libp2p-pubsub#540](https://github.com/libp2p/go-libp2p-pubsub/pull/540)) |
| 163 | - github.com/multiformats/go-multiaddr (v0.11.0 -> v0.12.0): |
| 164 | - release v0.12.0 (#223) ([multiformats/go-multiaddr#223](https://github.com/multiformats/go-multiaddr/pull/223)) |
| 165 | - net: consider /dns/localhost as private address (#221) ([multiformats/go-multiaddr#221](https://github.com/multiformats/go-multiaddr/pull/221)) |
| 166 | - net: consider dns addresses as public (#220) ([multiformats/go-multiaddr#220](https://github.com/multiformats/go-multiaddr/pull/220)) |
| 167 | - github.com/multiformats/go-multistream (v0.4.1 -> v0.5.0): |
| 168 | - remove support for the simultaneous open extension (#107) ([multiformats/go-multistream#107](https://github.com/multiformats/go-multistream/pull/107)) |
| 169 | |
| 170 | </details> |
| 171 | |
| 172 | ### 👨👩👧👦 Contributors |
| 173 | |
| 174 | | Contributor | Commits | Lines ± | Files Changed | |
| 175 | |-------------|---------|---------|---------------| |
| 176 | | Henrique Dias | 27 | +4505/-3853 | 244 | |
| 177 | | Marten Seemann | 18 | +4260/-1173 | 101 | |
| 178 | | Sukun | 24 | +1499/-340 | 79 | |
| 179 | | Andrew Gillis | 4 | +169/-1025 | 16 | |
| 180 | | Adin Schmahmann | 4 | +788/-184 | 19 | |
| 181 | | Hector Sanjuan | 6 | +619/-72 | 19 | |
| 182 | | Steven Allen | 11 | +489/-101 | 14 | |
| 183 | | Jorropo | 10 | +221/-192 | 28 | |
| 184 | | Łukasz Magiera | 2 | +306/-9 | 3 | |
| 185 | | Lucas Molas | 1 | +183/-52 | 2 | |
| 186 | | Marcin Rataj | 5 | +160/-25 | 6 | |
| 187 | | piersy | 1 | +57/-0 | 6 | |
| 188 | | Raúl Kripalani | 1 | +25/-25 | 2 | |
| 189 | | Alvin Reyes | 1 | +34/-14 | 1 | |
| 190 | | Dennis Trautwein | 1 | +1/-40 | 2 | |
| 191 | | Icarus9913 | 1 | +14/-14 | 10 | |
| 192 | | Takashi Matsuda | 2 | +18/-1 | 3 | |
| 193 | | gammazero | 4 | +8/-5 | 7 | |
| 194 | | xiaolou86 | 1 | +6/-6 | 5 | |
| 195 | | Daniel Martí | 1 | +9/-2 | 1 | |
| 196 | | Rod Vagg | 3 | +5/-5 | 4 | |
| 197 | | Andrej Manduch | 1 | +5/-5 | 3 | |
| 198 | | vuittont60 | 1 | +4/-4 | 3 | |
| 199 | | vyzo | 1 | +5/-1 | 1 | |
| 200 | | tkzktk | 1 | +3/-3 | 3 | |
| 201 | | tk | 1 | +3/-3 | 2 | |
| 202 | | Prem Chaitanya Prathi | 1 | +1/-5 | 1 | |
| 203 | | Kay | 2 | +2/-3 | 2 | |
| 204 | | Thomas Eizinger | 1 | +2/-2 | 1 | |
| 205 | | Steve Loeppky | 1 | +2/-2 | 1 | |
| 206 | | Jonas Keunecke | 1 | +2/-2 | 1 | |
| 207 | | Alejandro Criado-Pérez | 1 | +1/-1 | 1 | |
| 208 | | web3-bot | 1 | +1/-0 | 1 | |
| 209 | | Eric | 1 | +1/-0 | 1 | |