Kubo v0.38.2 is a patch release that delivers important improvements for retrieval, tracing, and memory management.
Key Highlights
Retrieval and Compatibility Improvements
This release updates Boxo to v0.35.1, enhancing content retrieval in several ways:
Memory Optimizations
Node operators should see reduced memory usage thanks to two key updates:
go-libp2p-kad-dht (v0.35.1) significantly optimizes memory consumption for nodes actively providing content to the DHT (those with Provide.DHT.SweepEnabled=true). This is achieved by more efficiently adding provider records and avoiding loading large data slices into memory.quic-go (v0.55.0) resolves a memory leak where stream frames were not returned to the memory pool after a stream was canceled.
Restored Observability
A bug in Bitswap that prevented trace context from being passed into sessions has been fixed. This restores full observability for monitoring tools that rely on this data to track retrieval performance and behavior.
<a href="https://ipshipyard.com/"><img align="right" src="https://github.com/user-attachments/assets/39ed3504-bb71-47f6-9bf8-cb9a1698f272" /></a> > [!NOTE] > This release was brought to you by the [Shipyard](https://ipshipyard.com/) team. [<img align="right" width="256px" src="https://github.com/user-attachments/assets/cdad8b96-3604-4145-94f6-7f907a59136a" />](https://github.com/user-attachments/assets/cdad8b96-3604-4145-94f6-7f907a59136a) ### Overview Kubo 0.38.2 is a quick patch release that improves retrieval, traces and memory usage. ### ๐ฆ Highlights - Updates [boxo v0.35.1](https://github.com/ipfs/boxo/releases/tag/v0.35.1) with bitswap and HTTP retrieval fixes: - Fixed bitswap trace context not being passed to sessions, restoring observability for monitoring tools - Kubo now fetches from HTTP gateways that return errors in legacy IPLD format, improving compatibility with older providers - Better handling of rate-limited HTTP endpoints and clearer timeout error messages - Updates [go-libp2p-kad-dht v0.35.1](https://github.com/libp2p/go-libp2p-kad-dht/releases/tag/v0.35.1) with memory optimizations for nodes using `Provide.DHT.SweepEnabled=true` - Updates [quic-go v0.55.0](https://github.com/quic-go/quic-go/releases/tag/v0.55.0) to fix memory pooling where stream frames weren't returned to the pool on cancellation For full release notes of 0.38, see [0.38.1](https://github.com/ipfs/kubo/releases/tag/v0.38.1). ### ๐ Changelog <details><summary>Full Changelog</summary> - github.com/ipfs/kubo: - chore: boxo and kad-dht updates - fix: update quic-go to v0.55.0 - github.com/ipfs/boxo (v0.35.0 -> v0.35.1): - Release v0.35.1 ([ipfs/boxo#1063](https://github.com/ipfs/boxo/pull/1063)) - bitswap/httpnet: improve "Connect"/testCid check (#1057) ([ipfs/boxo#1057](https://github.com/ipfs/boxo/pull/1057)) - fix: revert go-libp2p to v0.43.0 (#1061) ([ipfs/boxo#1061](https://github.com/ipfs/boxo/pull/1061)) - bitswap/client: propagate trace state when calling `GetBlocks` ([ipfs/boxo#1060](https://github.com/ipfs/boxo/pull/1060)) - fix(tracing): use context to pass trace and retrieval state to session ([ipfs/boxo#1059](https://github.com/ipfs/boxo/pull/1059)) - bitswap: link traces ([ipfs/boxo#1053](https://github.com/ipfs/boxo/pull/1053)) - fix(gateway): deduplicate peer IDs in retrieval diagnostics (#1058) ([ipfs/boxo#1058](https://github.com/ipfs/boxo/pull/1058)) - update go-dsqueue to v0.1.0 ([ipfs/boxo#1049](https://github.com/ipfs/boxo/pull/1049)) - Update go-libp2p to v0.44 ([ipfs/boxo#1048](https://github.com/ipfs/boxo/pull/1048)) - github.com/ipfs/go-dsqueue (v0.0.5 -> v0.1.0): - new version (#24) ([ipfs/go-dsqueue#24](https://github.com/ipfs/go-dsqueue/pull/24)) - Do not reuse datastore Batch (#23) ([ipfs/go-dsqueue#23](https://github.com/ipfs/go-dsqueue/pull/23)) - github.com/ipfs/go-log/v2 (v2.8.1 -> v2.8.2): - new version (#175) ([ipfs/go-log#175](https://github.com/ipfs/go-log/pull/175)) - fix: revert removal of LevelFromString to avoid breaking change (#174) ([ipfs/go-log#174](https://github.com/ipfs/go-log/pull/174)) - github.com/ipld/go-car/v2 (v2.15.0 -> v2.16.0): - v2.16.0 bump (#625) ([ipld/go-car#625](https://github.com/ipld/go-car/pull/625)) - github.com/ipld/go-ipld-prime/storage/bsadapter (v0.0.0-20230102063945-1a409dc236dd -> v0.0.0-20250821084354-a425e60cd714): - github.com/libp2p/go-libp2p-kad-dht (v0.35.0 -> v0.35.1): - chore: release v0.35.1 (#1165) ([libp2p/go-libp2p-kad-dht#1165](https://github.com/libp2p/go-libp2p-kad-dht/pull/1165)) - feat(provider): use Trie.AddMany (#1164) ([libp2p/go-libp2p-kad-dht#1164](https://github.com/libp2p/go-libp2p-kad-dht/pull/1164)) - fix(provider): memory usage (#1163) ([libp2p/go-libp2p-kad-dht#1163](https://github.com/libp2p/go-libp2p-kad-dht/pull/1163)) - github.com/libp2p/go-netroute (v0.2.2 -> v0.3.0): - release v0.3.0 - remove google/gopacket dependency - Query routes via routesocket ([libp2p/go-netroute#57](https://github.com/libp2p/go-netroute/pull/57)) - ci: uci/update-go (#52) ([libp2p/go-netroute#52](https://github.com/libp2p/go-netroute/pull/52)) - github.com/multiformats/go-multicodec (v0.9.2 -> v0.10.0): - chore: v0.10.0 bump - chore: update submodules and go generate - chore(deps): update stringer to v0.38.0 - ci: uci/update-go ([multiformats/go-multicodec#104](https://github.com/multiformats/go-multicodec/pull/104)) </details> ### ๐จโ๐ฉโ๐งโ๐ฆ Contributors | Contributor | Commits | Lines ยฑ | Files Changed | |-------------|---------|---------|---------------| | rvagg | 1 | +537/-481 | 3 | | Carlos Hernandez | 9 | +556/-218 | 11 | | Guillaume Michel | 3 | +139/-105 | 6 | | gammazero | 8 | +101/-97 | 14 | | Hector Sanjuan | 1 | +87/-28 | 5 | | Marcin Rataj | 4 | +57/-9 | 7 | | Marco Munizaga | 2 | +42/-14 | 7 | | Dennis Trautwein | 2 | +19/-7 | 7 | | Andrew Gillis | 3 | +3/-19 | 3 | | Rod Vagg | 4 | +12/-3 | 4 | | web3-bot | 1 | +2/-1 | 1 | | galargh | 1 | +1/-1 | 1 |