chore: release v0.40.0
- version.go: bump from 0.40.0-rc2 to 0.40.0 - docs/changelogs/v0.40.md: finalize changelog - add overview section - add release artwork - add full changelog and contributors table - add emojis to all highlight sections - reframe titles to lead with user benefit - reorder prose to lead with "why" over "what" - note IPNS over PubSub is opt-in via Ipns.UsePubsub - unify IPIP header format (IPIP-NNN: description)
Marcin Rataj committed
Feb 25, 2026 at 22:43 UTC
4a96745722a088d99ab1c5c3fc253c9081de9e82
2 files changed
+287
-29
docs/changelogs/v0.40.md
+286
-28
@@ -8,21 +8,23 @@ This release was brought to you by the [Shipyard](https://ipshipyard.com/) team.
8
9
## v0.40.0
10
11
+[<img align="right" width="256px" src="https://github.com/user-attachments/assets/c065d5e5-2a8a-4651-8142-d7baf3106623" />](https://github.com/user-attachments/assets/c065d5e5-2a8a-4651-8142-d7baf3106623)
12
+
13
- [Overview](#overview)
14
- [🔦 Highlights](#-highlights)
13
- - [🔢 UnixFS CID Profiles (IPIP-499)](#-unixfs-cid-profiles-ipip-499)
15
+ - [🔢 IPIP-499: UnixFS CID Profiles](#-ipip-499-unixfs-cid-profiles)
16
- [🧹 Automatic cleanup of interrupted imports](#-automatic-cleanup-of-interrupted-imports)
15
- - [Routing V1 HTTP API now exposed by default](#routing-v1-http-api-now-exposed-by-default)
16
- - [Track total size when adding pins](#track-total-size-when-adding-pins)
17
- - [IPIP-523: `?format=` takes precedence over `Accept` header](#ipip-523-format-takes-precedence-over-accept-header)
18
- - [IPIP-524: Gateway codec conversion disabled by default](#ipip-524-gateway-codec-conversion-disabled-by-default)
19
- - [Improved IPNS over PubSub validation](#improved-ipns-over-pubsub-validation)
20
- - [New `ipfs diag datastore` commands](#new-ipfs-diag-datastore-commands)
17
+ - [🌍 Light clients can now use your node for delegated routing](#-light-clients-can-now-use-your-node-for-delegated-routing)
18
+ - [📊 See total size when pinning](#-see-total-size-when-pinning)
19
+ - [🔀 IPIP-523: `?format=` takes precedence over `Accept` header](#-ipip-523-format-takes-precedence-over-accept-header)
20
+ - [🚫 IPIP-524: Gateway codec conversion disabled by default](#-ipip-524-gateway-codec-conversion-disabled-by-default)
21
+ - [✅ More reliable IPNS over PubSub](#-more-reliable-ipns-over-pubsub)
22
+ - [🗄️ New `ipfs diag datastore` commands](#️-new-ipfs-diag-datastore-commands)
23
- [🔍 New `ipfs swarm addrs autonat` command](#-new-ipfs-swarm-addrs-autonat-command)
24
- [🚇 Improved `ipfs p2p` tunnels with foreground mode](#-improved-ipfs-p2p-tunnels-with-foreground-mode)
23
- - [Improved `ipfs dag stat` output](#improved-ipfs-dag-stat-output)
25
+ - [📊 Friendlier `ipfs dag stat` output](#-friendlier-ipfs-dag-stat-output)
26
- [🔑 `ipfs key` improvements](#-ipfs-key-improvements)
25
- - [Accelerated DHT Client and Provide Sweep now work together](#accelerated-dht-client-and-provide-sweep-now-work-together)
27
+ - [🤝 More reliable content providing after startup](#-more-reliable-content-providing-after-startup)
28
- [🌐 No unnecessary DNS lookups for AutoTLS addresses](#-no-unnecessary-dns-lookups-for-autotls-addresses)
29
- [⏱️ Configurable gateway request duration limit](#️-configurable-gateway-request-duration-limit)
30
- [🔧 Recovery from corrupted MFS root](#-recovery-from-corrupted-mfs-root)
@@ -40,11 +42,13 @@ This release was brought to you by the [Shipyard](https://ipshipyard.com/) team.
42
43
### Overview
44
45
+This release brings reproducible file imports (CID Profiles), automatic cleanup of interrupted operations, better connectivity diagnostics, and improved gateway behavior. It also ships with Go 1.26, lowering memory usage and GC overhead across the board.
46
+
47
### 🔦 Highlights
48
45
-#### 🔢 UnixFS CID Profiles (IPIP-499)
49
+#### 🔢 IPIP-499: UnixFS CID Profiles
50
47
-[IPIP-499](https://github.com/ipfs/specs/pull/499) CID Profiles are presets that pin down how files get split into blocks and organized into directories. Useful when you need the same CID for the same data across different software or versions.
51
+CID Profiles are presets that pin down how files get split into blocks and organized into directories, so you get the same CID for the same data across different software or versions. Defined in [IPIP-499](https://github.com/ipfs/specs/pull/499).
52
53
**New configuration [profiles](https://github.com/ipfs/kubo/blob/master/docs/config.md#profiles)**
54
@@ -87,13 +91,13 @@ Batch operations also use less memory now. Block data is written to disk immedia
91
92
Under the hood, the block storage layer (flatfs) was rewritten to use atomic batch operations via a temporary staging directory. See [go-ds-flatfs#142](https://github.com/ipfs/go-ds-flatfs/pull/142) for details.
93
90
-#### Routing V1 HTTP API now exposed by default
94
+#### 🌍 Light clients can now use your node for delegated routing
95
96
The [Routing V1 HTTP API](https://specs.ipfs.tech/routing/http-routing-v1/) is now exposed by default at `http://127.0.0.1:8080/routing/v1`. This allows light clients in browsers to use Kubo Gateway as a delegated routing backend instead of running a full DHT client. Support for [IPIP-476: Delegated Routing DHT Closest Peers API](https://github.com/ipfs/specs/pull/476) is included. Can be disabled via [`Gateway.ExposeRoutingAPI`](https://github.com/ipfs/kubo/blob/master/docs/config.md#gatewayexposeroutingapi).
97
94
-#### Track total size when adding pins
98
+#### 📊 See total size when pinning
99
96
-Adds total size progress tracking of pinned nodes during `ipfs pin add --progress`. The output now shows the total size of the pinned dag.
100
+`ipfs pin add --progress` now shows the total size of the pinned DAG as it fetches blocks.
101
102
Example output:
103
@@ -101,35 +105,31 @@ Example output:
105
Fetched/Processed 336 nodes (83 MB)
106
```
107
104
-#### IPIP-523: `?format=` takes precedence over `Accept` header
105
-
106
-[IPIP-523](https://github.com/ipfs/specs/pull/523) simplifies HTTP content negotiation by making the `?format=` URL query parameter always take priority over the `Accept` HTTP header when both are present.
108
+#### 🔀 IPIP-523: `?format=` takes precedence over `Accept` header
109
108
-This ensures deterministic HTTP caching behavior and protects against CDNs that commingle different response types under the same cache key. It also allows browsers to use `?format=` reliably even when they send `Accept` headers with specific content types.
110
+The `?format=` URL query parameter now always wins over the `Accept` header ([IPIP-523](https://github.com/ipfs/specs/pull/523)), giving you deterministic HTTP caching and protecting against CDN cache-key collisions. Browsers can also use `?format=` reliably even when they send `Accept` headers with specific content types.
111
112
The only breaking change is for edge cases where a client sends both a specific `Accept` header and a different `?format=` value for an explicitly supported format (`tar`, `raw`, `car`, `dag-json`, `dag-cbor`, etc.). Previously `Accept` would win. Now `?format=` always wins.
113
112
-#### IPIP-524: Gateway codec conversion disabled by default
114
+#### 🚫 IPIP-524: Gateway codec conversion disabled by default
115
114
-Codec conversion is now disabled by default per [IPIP-524](https://github.com/ipfs/specs/pull/524).
115
-Requests for a format that differs from the block's codec will return `406 Not Acceptable`.
116
+Gateways no longer convert between codecs by default ([IPIP-524](https://github.com/ipfs/specs/pull/524)). This removes gateways from a gatekeeping role: clients can adopt new codecs immediately without waiting for gateway operator updates. Requests for a format that differs from the block's codec now return `406 Not Acceptable`.
117
118
**Migration**: Clients should fetch raw blocks (`?format=raw` or `Accept: application/vnd.ipld.raw`)
119
and convert client-side using libraries like [@helia/verified-fetch](https://www.npmjs.com/package/@helia/verified-fetch).
120
120
-This change removes gateways from a gatekeeping role: new codecs can now be adopted by clients
121
-immediately without waiting for gateway operator updates. Set [`Gateway.AllowCodecConversion`](https://github.com/ipfs/kubo/blob/master/docs/config.md#gatewayallowcodecconversion)
121
+Set [`Gateway.AllowCodecConversion`](https://github.com/ipfs/kubo/blob/master/docs/config.md#gatewayallowcodecconversion)
122
to `true` to restore previous behavior.
123
124
-#### Improved IPNS over PubSub validation
124
+#### ✅ More reliable IPNS over PubSub
125
126
[IPNS over PubSub](https://specs.ipfs.tech/ipns/ipns-pubsub-router/) implementation in Kubo is now more reliable. Duplicate messages are rejected even in large networks where messages may cycle back after the in-memory cache expires.
127
128
Kubo now persists the maximum seen sequence number per peer to the datastore ([go-libp2p-pubsub#BasicSeqnoValidator](https://pkg.go.dev/github.com/libp2p/go-libp2p-pubsub#BasicSeqnoValidator)), providing stronger duplicate detection that survives node restarts. This addresses message flooding issues reported in [#9665](https://github.com/ipfs/kubo/issues/9665).
129
130
-Kubo's pubsub is optimized for IPNS use case. For custom pubsub applications requiring different validation logic, use [go-libp2p-pubsub](https://github.com/libp2p/go-libp2p-pubsub) directly in a dedicated binary.
130
+IPNS over PubSub is opt-in via [`Ipns.UsePubsub`](https://github.com/ipfs/kubo/blob/master/docs/config.md#ipnsusepubsub). Kubo's pubsub is optimized for IPNS use case. For custom pubsub applications requiring different validation logic, use [go-libp2p-pubsub](https://github.com/libp2p/go-libp2p-pubsub) directly in a dedicated binary.
131
132
-#### New `ipfs diag datastore` commands
132
+#### 🗄️ New `ipfs diag datastore` commands
133
134
New experimental commands for low-level datastore inspection:
135
@@ -187,7 +187,7 @@ Without `--foreground`, commands return immediately and tunnels persist until ex
187
188
See [docs/p2p-tunnels.md](https://github.com/ipfs/kubo/blob/master/docs/p2p-tunnels.md) for usage examples.
189
190
-#### Improved `ipfs dag stat` output
190
+#### 📊 Friendlier `ipfs dag stat` output
191
192
The `ipfs dag stat` command has been improved for better terminal UX:
193
@@ -217,7 +217,7 @@ Use `--progress=true` to force progress even when piped, or `--progress=false` t
217
218
Listing also became more resilient: bad keys are now skipped with an error log instead of failing the entire operation.
219
220
-#### Accelerated DHT Client and Provide Sweep now work together
220
+#### 🤝 More reliable content providing after startup
221
222
Previously, provide operations could start before the Accelerated DHT Client discovered enough peers, causing sweep mode to lose its efficiency benefits. Now, providing waits for the initial network crawl (about 10 minutes). Your content will be properly distributed across DHT regions after initial DHT map is created. Check `ipfs provide stat` to see when providing begins.
223
@@ -361,4 +361,262 @@ You should see lower memory usage and reduced GC pauses thanks to the new Green
361
362
### 📝 Changelog
363
364
+<details><summary>Full Changelog</summary>
365
+
366
+- github.com/ipfs/kubo:
367
+ - fix(metrics): disable otel exemplars to prevent rune overflow (#11211) ([ipfs/kubo#11211](https://github.com/ipfs/kubo/pull/11211))
368
+ - fix: drop high-cardinality server.address from http_server metrics (#11208) ([ipfs/kubo#11208](https://github.com/ipfs/kubo/pull/11208))
369
+ - chore: set version to 0.40.0-rc2
370
+ - fix(version): produce shorter user agent for tagged release builds
371
+ - chore: update webui to v4.11.1 (#11204) ([ipfs/kubo#11204](https://github.com/ipfs/kubo/pull/11204))
372
+ - fix: improve `ipfs name put` for IPNS record republishing (#11199) ([ipfs/kubo#11199](https://github.com/ipfs/kubo/pull/11199))
373
+ - Upgrade to Boxo v0.37.0 (#11201) ([ipfs/kubo#11201](https://github.com/ipfs/kubo/pull/11201))
374
+ - chore: set version to v0.40.0-rc1
375
+ - refactor: apply go fix modernizers from Go 1.26 (#11190) ([ipfs/kubo#11190](https://github.com/ipfs/kubo/pull/11190))
376
+ - feat: update to Go 1.26 (#11189) ([ipfs/kubo#11189](https://github.com/ipfs/kubo/pull/11189))
377
+ - docs: clarify LevelDB compaction limitations and StorageMax scope (#11188) ([ipfs/kubo#11188](https://github.com/ipfs/kubo/pull/11188))
378
+ - docs: loud deprecation of badger v1 datastore (#11187) ([ipfs/kubo#11187](https://github.com/ipfs/kubo/pull/11187))
379
+ - docs(changelog): add highlight for libp2p AllAddrs behavior change (#11183) ([ipfs/kubo#11183](https://github.com/ipfs/kubo/pull/11183))
380
+ - fix: allow dag import of 1MiB chunks wrapped in dag-pb (#11185) ([ipfs/kubo#11185](https://github.com/ipfs/kubo/pull/11185))
381
+ - feat: `swarm addrs autonat` command (#11184) ([ipfs/kubo#11184](https://github.com/ipfs/kubo/pull/11184))
382
+ - feat(gateway): IPIP-0524 Gateway.AllowCodecConversion config option (#11090) ([ipfs/kubo#11090](https://github.com/ipfs/kubo/pull/11090))
383
+ - feat: update ipfs-webui to v4.11.0 (#11182) ([ipfs/kubo#11182](https://github.com/ipfs/kubo/pull/11182))
384
+ - feat(config): add Import.* for CID Profiles from IPIP-499 (#11148) ([ipfs/kubo#11148](https://github.com/ipfs/kubo/pull/11148))
385
+ - chore: replace libp2p.io URL with Internet Archive (#11181) ([ipfs/kubo#11181](https://github.com/ipfs/kubo/pull/11181))
386
+ - test: IPIP-523 format query precedence over Accept header (#11086) ([ipfs/kubo#11086](https://github.com/ipfs/kubo/pull/11086))
387
+ - docs: update go-libp2p changelog entry to v0.47.0
388
+ - feat(rpc): Content-Type headers and IPNS record get/put (#11067) ([ipfs/kubo#11067](https://github.com/ipfs/kubo/pull/11067))
389
+ - feat(key): add 'ipfs key ls' as alias for 'ipfs key list' (#11147) ([ipfs/kubo#11147](https://github.com/ipfs/kubo/pull/11147))
390
+ - docs: cleanup broken links and outdated content (#11100) ([ipfs/kubo#11100](https://github.com/ipfs/kubo/pull/11100))
391
+ - feat(dns): skip DNS lookups for AutoTLS hostnames (#11140) ([ipfs/kubo#11140](https://github.com/ipfs/kubo/pull/11140))
392
+ - Upgrade to Boxo v0.36.0 (#11175) ([ipfs/kubo#11175](https://github.com/ipfs/kubo/pull/11175))
393
+ - chore: upgrade go-ds-pebble to v0.5.9 (#11170) ([ipfs/kubo#11170](https://github.com/ipfs/kubo/pull/11170))
394
+ - fix(commands/reprovide): update manual reprovide error message (#11151) ([ipfs/kubo#11151](https://github.com/ipfs/kubo/pull/11151))
395
+ - feat(cli): ls --long (#11103) ([ipfs/kubo#11103](https://github.com/ipfs/kubo/pull/11103))
396
+ - feat(pubsub): persistent validation and diagnostic commands (#11110) ([ipfs/kubo#11110](https://github.com/ipfs/kubo/pull/11110))
397
+ - feat(config): add Gateway.MaxRequestDuration option (#11138) ([ipfs/kubo#11138](https://github.com/ipfs/kubo/pull/11138))
398
+ - feat(provider): info log AcceleratedDHTClient crawl (#11143) ([ipfs/kubo#11143](https://github.com/ipfs/kubo/pull/11143))
399
+ - ipfswatch: fix panic on broken link (#11145) ([ipfs/kubo#11145](https://github.com/ipfs/kubo/pull/11145))
400
+ - upgrade go-libp2p-pubsub to v0.15.0 (#11144) ([ipfs/kubo#11144](https://github.com/ipfs/kubo/pull/11144))
401
+ - feat(mfs): chroot command to change the root (#8648) ([ipfs/kubo#8648](https://github.com/ipfs/kubo/pull/8648))
402
+ - feat: improved go-ds-flatfs (#11092) ([ipfs/kubo#11092](https://github.com/ipfs/kubo/pull/11092))
403
+ - test: fix flaky ipfswatch test (#11142) ([ipfs/kubo#11142](https://github.com/ipfs/kubo/pull/11142))
404
+ - docs: clarify Routing.Type=custom as experimental (#11111) ([ipfs/kubo#11111](https://github.com/ipfs/kubo/pull/11111))
405
+ - fix(routing): defensive clone of AddrInfo from provider channel (#11120) ([ipfs/kubo#11120](https://github.com/ipfs/kubo/pull/11120))
406
+ - fix(provider): wait for fullrt crawl completion before providing (#11137) ([ipfs/kubo#11137](https://github.com/ipfs/kubo/pull/11137))
407
+ - fix(provide): do not output keystore error on shutdown (#11130) ([ipfs/kubo#11130](https://github.com/ipfs/kubo/pull/11130))
408
+ - feat(p2p): add --foreground flag to listen and forward commands (#11099) ([ipfs/kubo#11099](https://github.com/ipfs/kubo/pull/11099))
409
+ - feat(cli): improve ipfs dag stat output UX (#11097) ([ipfs/kubo#11097](https://github.com/ipfs/kubo/pull/11097))
410
+ - docs: add production deployment guidance for gateway (#11117) ([ipfs/kubo#11117](https://github.com/ipfs/kubo/pull/11117))
411
+ - fix(routing): use LegacyProvider for HTTP-only custom routing (#11112) ([ipfs/kubo#11112](https://github.com/ipfs/kubo/pull/11112))
412
+ - shutdown daemon after test (#11135) ([ipfs/kubo#11135](https://github.com/ipfs/kubo/pull/11135))
413
+ - fix(ci): parallelize gotest, cleanup output, flakiness (#11113) ([ipfs/kubo#11113](https://github.com/ipfs/kubo/pull/11113))
414
+ - test: replace `go-clock` with `testing/synctest` (#11131) ([ipfs/kubo#11131](https://github.com/ipfs/kubo/pull/11131))
415
+ - docs: improve README for first-time users (#11133) ([ipfs/kubo#11133](https://github.com/ipfs/kubo/pull/11133))
416
+ - keys: skip bad keys when listing (#11115) ([ipfs/kubo#11115](https://github.com/ipfs/kubo/pull/11115))
417
+ - docs: add developer guide for local development workflow (#11128) ([ipfs/kubo#11128](https://github.com/ipfs/kubo/pull/11128))
418
+ - datastore: upgrade go-ds-pebble to v0.5.8 (#11129) ([ipfs/kubo#11129](https://github.com/ipfs/kubo/pull/11129))
419
+ - output stdout and stderr on example test failure (#11119) ([ipfs/kubo#11119](https://github.com/ipfs/kubo/pull/11119))
420
+ - chore: update go-libp2p 0.46 (#11105) ([ipfs/kubo#11105](https://github.com/ipfs/kubo/pull/11105))
421
+ - fix(ipfswatch): loading datastore plugins (#11078) ([ipfs/kubo#11078](https://github.com/ipfs/kubo/pull/11078))
422
+ - Add bytes progress tracker for ipfs pin add (#11074) ([ipfs/kubo#11074](https://github.com/ipfs/kubo/pull/11074))
423
+ - docs: link sweep blogpost in Provide.DHT.SweepEnabled
424
+ - docs: note sweep+accelerated DHT client limitation (#11084) ([ipfs/kubo#11084](https://github.com/ipfs/kubo/pull/11084))
425
+ - refactor: replace context.WithCancel with t.Context (#11083) ([ipfs/kubo#11083](https://github.com/ipfs/kubo/pull/11083))
426
+ - chore: remove deprecated go-ipfs Docker image publishing (#11081) ([ipfs/kubo#11081](https://github.com/ipfs/kubo/pull/11081))
427
+ - Merge release v0.39.0 ([ipfs/kubo#11080](https://github.com/ipfs/kubo/pull/11080))
428
+ - docs: move IPIP-476 feature to v0.40 changelog
429
+ - upgrade go-libp2p-kad-dht to v0.36.0 (#11079) ([ipfs/kubo#11079](https://github.com/ipfs/kubo/pull/11079))
430
+ - fix(docker): include symlinks in scanning for init scripts (#11077) ([ipfs/kubo#11077](https://github.com/ipfs/kubo/pull/11077))
431
+ - Update deprecation message for Reprovider fields (#11072) ([ipfs/kubo#11072](https://github.com/ipfs/kubo/pull/11072))
432
+ - fix doc string (#11068) ([ipfs/kubo#11068](https://github.com/ipfs/kubo/pull/11068))
433
+ - feat: support GetClosesPeers (IPIP-476) and ExposeRoutingAPI by default (#10954) ([ipfs/kubo#10954](https://github.com/ipfs/kubo/pull/10954))
434
+ - chore: start v0.40.0 release cycle
435
+- github.com/gammazero/chanqueue (v1.1.1 -> v1.1.2):
436
+ - require go1.24 or later (#9) ([gammazero/chanqueue#9](https://github.com/gammazero/chanqueue/pull/9))
437
+ - update workflow (#7) ([gammazero/chanqueue#7](https://github.com/gammazero/chanqueue/pull/7))
438
+ - prefer range loops (#6) ([gammazero/chanqueue#6](https://github.com/gammazero/chanqueue/pull/6))
439
+- github.com/gammazero/deque (v1.2.0 -> v1.2.1):
440
+ - fix panic after IterPopX leaves buffer exactly full (#51) ([gammazero/deque#51](https://github.com/gammazero/deque/pull/51))
441
+ - fix panic if copying in exactly the buffer size (#50) ([gammazero/deque#50](https://github.com/gammazero/deque/pull/50))
442
+ - refactor: prefer range loops (#49) ([gammazero/deque#49](https://github.com/gammazero/deque/pull/49))
443
+- github.com/ipfs/boxo (v0.35.2 -> v0.37.0):
444
+ - Release v0.37.0 ([ipfs/boxo#1109](https://github.com/ipfs/boxo/pull/1109))
445
+ - update dependencies (#1107) ([ipfs/boxo#1107](https://github.com/ipfs/boxo/pull/1107))
446
+ - refactor: modernize code (#1105) ([ipfs/boxo#1105](https://github.com/ipfs/boxo/pull/1105))
447
+ - ensure http response body is closed (#1103) ([ipfs/boxo#1103](https://github.com/ipfs/boxo/pull/1103))
448
+ - update multiaddr dns and otel (#1102) ([ipfs/boxo#1102](https://github.com/ipfs/boxo/pull/1102))
449
+ - fix: raise block size limits from 1MiB to 2MiB (#1101) ([ipfs/boxo#1101](https://github.com/ipfs/boxo/pull/1101))
450
+ - test(gateway): add dag-pb to dag-json codec conversion tests
451
+ - feat(gateway): IPIP-0524 + AllowCodecConversion config option (#1077) ([ipfs/boxo#1077](https://github.com/ipfs/boxo/pull/1077))
452
+ - feat(unixfs): configurable CID Profiles from IPIP-499 (#1088) ([ipfs/boxo#1088](https://github.com/ipfs/boxo/pull/1088))
453
+ - feat(gateway): IPIP-523 format query over Accept header (#1074) ([ipfs/boxo#1074](https://github.com/ipfs/boxo/pull/1074))
454
+ - Release v0.36.0 ([ipfs/boxo#1099](https://github.com/ipfs/boxo/pull/1099))
455
+ - upgrade go-libp2p-kad-dht to v0.37.1 (#1097) ([ipfs/boxo#1097](https://github.com/ipfs/boxo/pull/1097))
456
+ - fix(routing): defensive nil checks for multiaddr handling (#1081) ([ipfs/boxo#1081](https://github.com/ipfs/boxo/pull/1081))
457
+ - fix: flaky TestSessionBetweenPeers with shuffle enabled (#1022) ([ipfs/boxo#1022](https://github.com/ipfs/boxo/pull/1022))
458
+ - upgrade to go-libp2p v0.47.0 (#1095) ([ipfs/boxo#1095](https://github.com/ipfs/boxo/pull/1095))
459
+ - update dependencies (#1091) ([ipfs/boxo#1091](https://github.com/ipfs/boxo/pull/1091))
460
+ - refactor: rewrite some flaky tests to testing/synctest (#1087) ([ipfs/boxo#1087](https://github.com/ipfs/boxo/pull/1087))
461
+ - fix(routing): fix unknown record bytes unmarshalling (#1090) ([ipfs/boxo#1090](https://github.com/ipfs/boxo/pull/1090))
462
+ - refactor: replace `go-clock` with `synctest` (#1082) ([ipfs/boxo#1082](https://github.com/ipfs/boxo/pull/1082))
463
+ - chore: fix gofumpt formatting in dagreader.go
464
+ - cosmetic fixes (#1086) ([ipfs/boxo#1086](https://github.com/ipfs/boxo/pull/1086))
465
+ - feat(gateway): configurable fallback timeout for MaxRequestDuration (#1079) ([ipfs/boxo#1079](https://github.com/ipfs/boxo/pull/1079))
466
+ - fix(bitswap/network): `stream.Close()` blocks indefinitely on unresponsive peers (#1083) ([ipfs/boxo#1083](https://github.com/ipfs/boxo/pull/1083))
467
+ - test: cleanup goroutines at end of test (#1084) ([ipfs/boxo#1084](https://github.com/ipfs/boxo/pull/1084))
468
+ - keystore: improve error messages and include key file name (#1080) ([ipfs/boxo#1080](https://github.com/ipfs/boxo/pull/1080))
469
+ - docs: update deprecation comments to reference IPIP-526 (#1076) ([ipfs/boxo#1076](https://github.com/ipfs/boxo/pull/1076))
470
+ - feat(ipld/merkledag): add total size of visited nodes in progress tracker ([ipfs/boxo#1071](https://github.com/ipfs/boxo/pull/1071))
471
+ - upgrade to go-libp2p-kad-dht v0.36.0 ([ipfs/boxo#1072](https://github.com/ipfs/boxo/pull/1072))
472
+ - routing/http: add support for GetClosestPeers (IPIP-476) (#1021) ([ipfs/boxo#1021](https://github.com/ipfs/boxo/pull/1021))
473
+ - tar: fix name filter on windows ([ipfs/boxo#1047](https://github.com/ipfs/boxo/pull/1047))
474
+- github.com/ipfs/go-cidutil (v0.1.0 -> v0.1.1):
475
+ - new version (#55) ([ipfs/go-cidutil#55](https://github.com/ipfs/go-cidutil/pull/55))
476
+ - update dependencies (#53) ([ipfs/go-cidutil#53](https://github.com/ipfs/go-cidutil/pull/53))
477
+ - ci: uci/copy-templates ([ipfs/go-cidutil#43](https://github.com/ipfs/go-cidutil/pull/43))
478
+ - ci: uci/copy-templates ([ipfs/go-cidutil#42](https://github.com/ipfs/go-cidutil/pull/42))
479
+- github.com/ipfs/go-datastore (v0.9.0 -> v0.9.1):
480
+ - new version (#266) ([ipfs/go-datastore#266](https://github.com/ipfs/go-datastore/pull/266))
481
+ - update opentelemetry to v1.40.0 (#265) ([ipfs/go-datastore#265](https://github.com/ipfs/go-datastore/pull/265))
482
+ - refactor: modernize code (#264) ([ipfs/go-datastore#264](https://github.com/ipfs/go-datastore/pull/264))
483
+ - test suite: use a non-cancelled context to delete all keys (#259) ([ipfs/go-datastore#259](https://github.com/ipfs/go-datastore/pull/259))
484
+ - Document not to reuse batch (#258) ([ipfs/go-datastore#258](https://github.com/ipfs/go-datastore/pull/258))
485
+ - Revert "Test that a second batch commit does not error (#256)" (#257) ([ipfs/go-datastore#257](https://github.com/ipfs/go-datastore/pull/257))
486
+ - Test that a second batch commit does not error (#256) ([ipfs/go-datastore#256](https://github.com/ipfs/go-datastore/pull/256))
487
+- github.com/ipfs/go-ds-flatfs (v0.5.5 -> v0.6.0):
488
+ - new version (#144) ([ipfs/go-ds-flatfs#144](https://github.com/ipfs/go-ds-flatfs/pull/144))
489
+ - refactor: rewrite batch mode to use temp directory (#142) ([ipfs/go-ds-flatfs#142](https://github.com/ipfs/go-ds-flatfs/pull/142))
490
+ - Clarify the usage of RLock and why RUnlock is missing when applying ops (#141) ([ipfs/go-ds-flatfs#141](https://github.com/ipfs/go-ds-flatfs/pull/141))
491
+ - update dependencies (#134) ([ipfs/go-ds-flatfs#134](https://github.com/ipfs/go-ds-flatfs/pull/134))
492
+- github.com/ipfs/go-ds-pebble (v0.5.7 -> v0.5.9):
493
+ - new version (#79) ([ipfs/go-ds-pebble#79](https://github.com/ipfs/go-ds-pebble/pull/79))
494
+ - update error checks to use errors.Is (#78) ([ipfs/go-ds-pebble#78](https://github.com/ipfs/go-ds-pebble/pull/78))
495
+ - new version (#76) ([ipfs/go-ds-pebble#76](https://github.com/ipfs/go-ds-pebble/pull/76))
496
+- github.com/ipfs/go-dsqueue (v0.1.1 -> v0.2.0):
497
+ - release v0.2.0 (#33) ([ipfs/go-dsqueue#33](https://github.com/ipfs/go-dsqueue/pull/33))
498
+ - update dependencies and required go version (#32) ([ipfs/go-dsqueue#32](https://github.com/ipfs/go-dsqueue/pull/32))
499
+ - new version (#31) ([ipfs/go-dsqueue#31](https://github.com/ipfs/go-dsqueue/pull/31))
500
+ - refactor: put queued item decoding logic into function (#30) ([ipfs/go-dsqueue#30](https://github.com/ipfs/go-dsqueue/pull/30))
501
+ - use testing/synctest for artificial clock (#29) ([ipfs/go-dsqueue#29](https://github.com/ipfs/go-dsqueue/pull/29))
502
+- github.com/ipfs/go-ipfs-cmds (v0.15.0 -> v0.16.0):
503
+ - new version (#325) ([ipfs/go-ipfs-cmds#325](https://github.com/ipfs/go-ipfs-cmds/pull/325))
504
+ - update to use WaitGroup.Go (#324) ([ipfs/go-ipfs-cmds#324](https://github.com/ipfs/go-ipfs-cmds/pull/324))
505
+ - refactor: modernize code (#322) ([ipfs/go-ipfs-cmds#322](https://github.com/ipfs/go-ipfs-cmds/pull/322))
506
+ - feat: add --dereference-symlinks flag for recursive symlink resolution (#315) ([ipfs/go-ipfs-cmds#315](https://github.com/ipfs/go-ipfs-cmds/pull/315))
507
+ - fix: add remaining binary content types to MIMEEncodings
508
+ - fix: recognize content-type application/x-tar (#320) ([ipfs/go-ipfs-cmds#320](https://github.com/ipfs/go-ipfs-cmds/pull/320))
509
+ - feat(http): ability to control Content-Type of binary responses (#311) ([ipfs/go-ipfs-cmds#311](https://github.com/ipfs/go-ipfs-cmds/pull/311))
510
+ - update dependencies and fix test (#318) ([ipfs/go-ipfs-cmds#318](https://github.com/ipfs/go-ipfs-cmds/pull/318))
511
+ - update dependencies (#296) ([ipfs/go-ipfs-cmds#296](https://github.com/ipfs/go-ipfs-cmds/pull/296))
512
+- github.com/ipfs/go-ipfs-pq (v0.0.3 -> v0.0.4):
513
+ - new version (#23) ([ipfs/go-ipfs-pq#23](https://github.com/ipfs/go-ipfs-pq/pull/23))
514
+ - fix broken test (#22) ([ipfs/go-ipfs-pq#22](https://github.com/ipfs/go-ipfs-pq/pull/22))
515
+ - Update readme links (#21) ([ipfs/go-ipfs-pq#21](https://github.com/ipfs/go-ipfs-pq/pull/21))
516
+- github.com/ipfs/go-log/v2 (v2.9.0 -> v2.9.1):
517
+ - new version (#179) ([ipfs/go-log#179](https://github.com/ipfs/go-log/pull/179))
518
+- github.com/ipfs/go-peertaskqueue (v0.8.2 -> v0.8.3):
519
+ - new version ([ipfs/go-peertaskqueue#51](https://github.com/ipfs/go-peertaskqueue/pull/51))
520
+ - update dependencies ([ipfs/go-peertaskqueue#50](https://github.com/ipfs/go-peertaskqueue/pull/50))
521
+ - Add README.md ([ipfs/go-peertaskqueue#49](https://github.com/ipfs/go-peertaskqueue/pull/49))
522
+ - replace go-clock with synctest ([ipfs/go-peertaskqueue#47](https://github.com/ipfs/go-peertaskqueue/pull/47))
523
+- github.com/ipfs/go-unixfsnode (v1.10.2 -> v1.10.3):
524
+ - new version ([ipfs/go-unixfsnode#92](https://github.com/ipfs/go-unixfsnode/pull/92))
525
+ - refactor: modernize code ([ipfs/go-unixfsnode#91](https://github.com/ipfs/go-unixfsnode/pull/91))
526
+- github.com/ipld/go-ipld-prime (v0.21.0 -> v0.22.0):
527
+ failed to fetch repo
528
+- github.com/ipshipyard/p2p-forge (v0.6.1 -> v0.7.0):
529
+ - chore: release v0.7.0 (#81) ([ipshipyard/p2p-forge#81](https://github.com/ipshipyard/p2p-forge/pull/81))
530
+ - feat: add IP denylist plugin for abuse prevention (#79) ([ipshipyard/p2p-forge#79](https://github.com/ipshipyard/p2p-forge/pull/79))
531
+ - refactor/test/fix: ipparser hardening (#75) ([ipshipyard/p2p-forge#75](https://github.com/ipshipyard/p2p-forge/pull/75))
532
+- github.com/libp2p/go-libp2p (v0.45.0 -> v0.47.0):
533
+ - Release v0.47.0 (#3454) ([libp2p/go-libp2p#3454](https://github.com/libp2p/go-libp2p/pull/3454))
534
+ - rcmgr: expose resource limits to Prometheus (#3433) ([libp2p/go-libp2p#3433](https://github.com/libp2p/go-libp2p/pull/3433))
535
+ - update webtransport-go to v0.10.0 and quic-go to v0.59.0 (#3452)f
536
+ - fix: handle error from mh.Sum in IDFromPublicKey
537
+ - fix(basic_host): set read deadline before multistream Close to prevent blocking
538
+ - update simnet dependency
539
+ - rename simconlibp2p package to simlibp2p
540
+ - simlibp2p: add GetBasicHostPair helper
541
+ - run synctest with Go 1.25
542
+ - fix(autonatv2): secondary addrs inherit reachability from primary (#3435) ([libp2p/go-libp2p#3435](https://github.com/libp2p/go-libp2p/pull/3435))
543
+ - Release v0.46.0
544
+ - chore: update quic-go to v0.57.1 (#3439) ([libp2p/go-libp2p#3439](https://github.com/libp2p/go-libp2p/pull/3439))
545
+ - fix(mdns): filter addresses to reduce packet size (#3434) ([libp2p/go-libp2p#3434](https://github.com/libp2p/go-libp2p/pull/3434))
546
+ - chore: update quic-go to v0.56.0 (#3425) ([libp2p/go-libp2p#3425](https://github.com/libp2p/go-libp2p/pull/3425))
547
+ - fix(webrtc): use debug level for pion errors (#3426) ([libp2p/go-libp2p#3426](https://github.com/libp2p/go-libp2p/pull/3426))
548
+- github.com/libp2p/go-libp2p-kad-dht (v0.36.0 -> v0.38.0):
549
+ - Release v0.38.0 (#1236) ([libp2p/go-libp2p-kad-dht#1236](https://github.com/libp2p/go-libp2p-kad-dht/pull/1236))
550
+ - fix(provider/keystore): protect keystore size during reset (#1227) ([libp2p/go-libp2p-kad-dht#1227](https://github.com/libp2p/go-libp2p-kad-dht/pull/1227))
551
+ - update dependencies and minimum go version (#1230) ([libp2p/go-libp2p-kad-dht#1230](https://github.com/libp2p/go-libp2p-kad-dht/pull/1230))
552
+ - refactor: apply go fix modernizers from Go 1.26 (#1231) ([libp2p/go-libp2p-kad-dht#1231](https://github.com/libp2p/go-libp2p-kad-dht/pull/1231))
553
+ - chore: go-libdht org transfer (#1229) ([libp2p/go-libp2p-kad-dht#1229](https://github.com/libp2p/go-libp2p-kad-dht/pull/1229))
554
+ - fix(provider): close datastore results (#1226) ([libp2p/go-libp2p-kad-dht#1226](https://github.com/libp2p/go-libp2p-kad-dht/pull/1226))
555
+ - new version (#1225) ([libp2p/go-libp2p-kad-dht#1225](https://github.com/libp2p/go-libp2p-kad-dht/pull/1225))
556
+ - replace multierr with errors.Join (#1224) ([libp2p/go-libp2p-kad-dht#1224](https://github.com/libp2p/go-libp2p-kad-dht/pull/1224))
557
+ - fix(routing): add per-peer timeouts for PutValue and Provide (#1222) ([libp2p/go-libp2p-kad-dht#1222](https://github.com/libp2p/go-libp2p-kad-dht/pull/1222))
558
+ - chore: release v0.37.0 (#1221) ([libp2p/go-libp2p-kad-dht#1221](https://github.com/libp2p/go-libp2p-kad-dht/pull/1221))
559
+ - fix(provider): keyspace exploration should succeed with a single peer (#1220) ([libp2p/go-libp2p-kad-dht#1220](https://github.com/libp2p/go-libp2p-kad-dht/pull/1220))
560
+ - fix(provider): hold scheduleLk when reading schedule.Size() in test (#1219) ([libp2p/go-libp2p-kad-dht#1219](https://github.com/libp2p/go-libp2p-kad-dht/pull/1219))
561
+ - fix(provider): close worker pool before wg.Wait() (#1218) ([libp2p/go-libp2p-kad-dht#1218](https://github.com/libp2p/go-libp2p-kad-dht/pull/1218))
562
+ - chore: remove deprecated providers pkg (#1211) ([libp2p/go-libp2p-kad-dht#1211](https://github.com/libp2p/go-libp2p-kad-dht/pull/1211))
563
+ - fix(provider): don't discard peers if they all share CPL during exploration (#1216) ([libp2p/go-libp2p-kad-dht#1216](https://github.com/libp2p/go-libp2p-kad-dht/pull/1216))
564
+ - fix(records): clone addresses received from peerstore (#1210) ([libp2p/go-libp2p-kad-dht#1210](https://github.com/libp2p/go-libp2p-kad-dht/pull/1210))
565
+ - tests: fix flaky TestOptimisticProvide (#1213) ([libp2p/go-libp2p-kad-dht#1213](https://github.com/libp2p/go-libp2p-kad-dht/pull/1213))
566
+ - tests: fix flaky TestHandleRemotePeerProtocolChanges (#1212) ([libp2p/go-libp2p-kad-dht#1212](https://github.com/libp2p/go-libp2p-kad-dht/pull/1212))
567
+ - chore: bump go-libp2p to v0.46 (#1209) ([libp2p/go-libp2p-kad-dht#1209](https://github.com/libp2p/go-libp2p-kad-dht/pull/1209))
568
+- github.com/libp2p/go-libp2p-pubsub (v0.14.2 -> v0.15.0):
569
+ - release v0.15.0
570
+ - Fix data race in test
571
+ - Skip flaky floodsub test
572
+ - pubsub: remove redundant sends of hello packet
573
+ - gossipsub: implement extensions
574
+ - test: add skeleton gossipsub to drive a gossipsub peer
575
+ - gossipsub: add plumbing for Gossipsub v1.3 support
576
+ - pubsub: AddPeer now accepts reference to hello packet
577
+ - pb: add extensions protobufs
578
+ - feat: add px peer record reducer + pub addrs filter
579
+ - Migrate to `log/slog`
580
+ - chore: add params.Dscore validation
581
+ - Release v0.14.3
582
+ - Unexport Params.Validate to maintain patch release semantics
583
+ - Merge pull request #642 for GossipSub Params validation
584
+ - fix: Select ctx.Done() when preprocessing to avoid blocking on cancel (#635) ([libp2p/go-libp2p-pubsub#635](https://github.com/libp2p/go-libp2p-pubsub/pull/635))
585
+- github.com/libp2p/go-netroute (v0.3.0 -> v0.4.0):
586
+ - v0.4.0
587
+ - gofmt ([libp2p/go-netroute#65](https://github.com/libp2p/go-netroute/pull/65))
588
+ - linux: use rtnetlink directly ([libp2p/go-netroute#64](https://github.com/libp2p/go-netroute/pull/64))
589
+- github.com/multiformats/go-multiaddr-dns (v0.4.1 -> v0.5.0):
590
+ - Release v0.5.0
591
+ - refactor: remove miekg/dns dep (#72) ([multiformats/go-multiaddr-dns#72](https://github.com/multiformats/go-multiaddr-dns/pull/72))
592
+
593
+</details>
594
+
595
### 👨👩👧👦 Contributors
596
+
597
+| Contributor | Commits | Lines ± | Files Changed |
598
+|-------------|---------|---------|---------------|
599
+| [@lidel](https://github.com/lidel) | 62 | +18446/-3513 | 406 |
600
+| [@gammazero](https://github.com/gammazero) | 84 | +5719/-2815 | 374 |
601
+| [@MarcoPolo](https://github.com/MarcoPolo) | 24 | +1275/-311 | 58 |
602
+| [@guillaumemichel](https://github.com/guillaumemichel) | 14 | +392/-967 | 41 |
603
+| [@hsanjuan](https://github.com/hsanjuan) | 4 | +1093/-43 | 15 |
604
+| [@sneaxhuh](https://github.com/sneaxhuh) | 2 | +840/-19 | 7 |
605
+| [@cortze](https://github.com/cortze) | 1 | +367/-35 | 2 |
606
+| [@schomatis](https://github.com/schomatis) | 1 | +288/-17 | 5 |
607
+| [@rifeplight](https://github.com/rifeplight) | 1 | +92/-195 | 18 |
608
+| [@sukunrt](https://github.com/sukunrt) | 3 | +22/-211 | 7 |
609
+| [@2color](https://github.com/2color) | 1 | +207/-2 | 5 |
610
+| [@djdv](https://github.com/djdv) | 8 | +96/-65 | 10 |
611
+| [@vlerdman](https://github.com/vlerdman) | 4 | +90/-38 | 8 |
612
+| [@v1rtl](https://github.com/v1rtl) | 1 | +71/-3 | 2 |
613
+| [@VedantMadane](https://github.com/VedantMadane) | 1 | +23/-8 | 4 |
614
+| [@dozyio](https://github.com/dozyio) | 1 | +26/-4 | 2 |
615
+| [@infrmtcs](https://github.com/infrmtcs) | 1 | +24/-1 | 2 |
616
+| [@marten-seemann](https://github.com/marten-seemann) | 1 | +5/-1 | 2 |
617
+| [@web3-bot](https://github.com/web3-bot) | 2 | +3/-2 | 2 |
618
+| [@MozirDmitriy](https://github.com/MozirDmitriy) | 1 | +4/-1 | 1 |
619
+| [@aschmahmann](https://github.com/aschmahmann) | 1 | +2/-1 | 1 |
620
+| [@willscott](https://github.com/willscott) | 1 | +1/-1 | 1 |
621
+| [@lbarrettanderson](https://github.com/lbarrettanderson) | 1 | +1/-1 | 1 |
622
+| [@filipremb](https://github.com/filipremb) | 1 | +1/-1 | 1 |
version.go
+1
-1
@@ -17,7 +17,7 @@ var CurrentCommit string
17
var taggedRelease string
18
19
// CurrentVersionNumber is the current application's version literal.
20
-const CurrentVersionNumber = "0.40.0-rc2"
20
+const CurrentVersionNumber = "0.40.0"
21
22
const ApiVersion = "/kubo/" + CurrentVersionNumber + "/" //nolint
23