github.com/libp2p/go-libp2p-kad-dht
v0.42.2
#2933 most downloaded on Go modules
libp2p/go-libp2p-kad-dht
What this package is like to depend on
Last release 3 days ago
21 Aug 2026
Ships on a steady schedule
a new release about every 2 weeks
Rarely documented
notes for 10 of 105 stable releases
2 versions withdrawn
withdrawn after publishing
10 years old
692 releases · first in 2016
132 releases in the last 12 months
see the full history below
Release timeline
692 releases · Aug 2016 to Aug 2026Releases
latest 60 of 692-
v0.42.3-0.20260821055240-e41dae0c794521 Aug 2026 pre-releaseNothing published for this version
-
v0.42.221 Aug 2026Release notes
Open source →Note
This release was brought to you by the Shipyard team.
Highlights
Provider record writes are batched again (#1293)
v0.42.0 (#1277) inadvertently turned every provider record write and GC delete into an individual (fsynced) datastore operation, causing excessive disk I/O on busy nodes (ipfs/kubo#11432). Provider writes and GC deletes are now batched (256 records per batch), restoring the pre-v0.42.0 fsync rate. No protocol or record-layout change.
Local provider record writes respect shutdown (#1288)
The
WithAddLocalRecordcallback now receives the sweeping provider's lifecycle context instead ofcontext.Background()(a regression from #1282), so local provider record writes are properly cancelled when the provider shuts down.What's Changed
- chore: upgrade to go-libp2p v0.49.0 by @gammazero in #1289
- fix(provider): pass lifecycle context to local record callback by @guillaumemichel in #1288
- chore(deps): bump github.com/pion/stun/v3 from 3.1.1 to 3.1.5 by @dependabot[bot] in #1290
- docs: spec guardrails by @lidel in #1292
- fix(records): batch provider datastore writes and GC deletes by @guillaumemichel in #1293
Full Changelog: v0.42.1...v0.42.2
-
v0.42.2-0.20260820235128-5a1c2420ad2e20 Aug 2026 pre-releaseNothing published for this version
-
v0.42.2-0.20260818075504-8358410d968d18 Aug 2026 pre-releaseNothing published for this version
-
v0.42.2-0.20260804071500-ab187effae9804 Aug 2026 pre-releaseNothing published for this version
-
v0.42.2-0.20260804065032-2cc8c275c7fa04 Aug 2026 pre-releaseNothing published for this version
-
v0.42.2-0.20260801200847-2a10abdf121501 Aug 2026 pre-releaseNothing published for this version
-
v0.42.2-0.20260728132953-7571fec1480b28 Jul 2026 pre-releaseNothing published for this version
-
v0.42.2-0.20260723025726-a5d383cdd31c23 Jul 2026 pre-releaseNothing published for this version
-
v0.42.120 Jul 2026Release notes
Open source →Note
This release was brought to you by the Shipyard team.
What's Changed
- fix: validate local records in SearchValue by @guillaumemichel in #1285
Full Changelog: v0.42.0...v0.42.1
-
v0.42.1-0.20260720193258-3dd16b15308520 Jul 2026 pre-releaseNothing published for this version
-
v0.42.1-0.20260720183211-2cba273e45d820 Jul 2026 pre-releaseNothing published for this version
-
v0.42.020 Jul 2026Release notes
Open source →Note
This release was brought to you by the Shipyard team.
Highlights
⚠️ Breaking changes
Constructors no longer take a
context.Context(#1282)The lifecycle context was removed from all constructors. The DHT now runs until
Close()is called; cancelling a context no longer tears it down.Before After dht.New(ctx, h, opts...)dht.New(h, opts...)dht.NewDHT(ctx, h, dstore)dht.NewDHT(h, dstore)dht.NewDHTClient(ctx, h, dstore)dht.NewDHTClient(h, dstore)dual.New(ctx, h, opts...)dual.New(h, opts...)records.NewProviderManager(ctx, ...)records.NewProviderManager(...)rtrefresh.NewRtRefreshManager(ctx, ...)rtrefresh.NewRtRefreshManager(...)Migration: drop the context argument. If you relied on cancelling the constructor context to shut the DHT down, call
Close()instead.Close()blocks until all long-lived components have stopped. Note that in-flight RPC handlers are owned by the libp2p host, so close the host before closing any datastore handed to the DHT.ProviderStoreoption removed (#1277 by @guillaumemichel)Custom
ProviderStoreimplementations can no longer be injected; the DHT always runs the built-in provider manager. Thedht.ProviderStore(...)option is replaced by datastore-level configuration:// Before: inject a custom provider store d, err := dht.New(ctx, h, dht.ProviderStore(customStore)) // After: configure the built-in provider manager d, err := dht.New(h, dht.ProviderDatastore(dstore), // dedicated datastore for provider records dht.ProviderManagerOpts( // tune the built-in manager records.ProvideValidity(48*time.Hour), records.Cache(myLRU), ), )
New options:
ValueDatastoreandProviderDatastoregive value and provider records their own physical datastores (both default to the datastore set withDatastore). Thedht.ProviderStore()getter onIpfsDHTremains available.Value records are stored under namespaced datastore keys (#1277)
Value records used to be stored at the datastore root as
/<base32(key)>; they are now namespaced by record type:/<namespace>/<base32(key)>(e.g./pk/...,/ipns/...). This keeps a shared datastore collision-free and enables per-namespace garbage collection.Migration: there is no automatic key migration. On upgrade, value records persisted by earlier versions are simply not found under the new layout — nodes will re-store them as the network republishes (records expire after
MaxRecordAge, 48h by default, anyway). If you persist the DHT datastore and want to reclaim space, you can delete leftover root-level base32 keys. Provider records are unaffected (already namespaced under/providers/).What's Changed
- fix: cap closer peers accepted per response by @lidel in #1270
- fix: correct delete-error check in provider gc by @lidel in #1271
- chore(deps): bump golang.org/x/net from 0.53.0 to 0.55.0 by @dependabot[bot] in #1272
- Update dependencies by @gammazero in #1273
- chore(deps): bump golang.org/x/crypto from 0.51.0 to 0.52.0 by @dependabot[bot] in #1274
- test: fix flaky TestOptimisticProvide timeout and peerIDs seeding by @guillaumemichel in #1276
- upgrade go-test to v0.4.0 by @gammazero in #1275
- test: fix flaky TestProvidesMany by @guillaumemichel in #1278
- chore: bump go-libp2p-kbucket by @guillaumemichel in #1279
- chore: migrate from math/rand to math/rand/v2 by @guillaumemichel in #1280
- refactor(pb): bound the serialized size of a peer record by @guillaumemichel in #1281
- update dependencies by @gammazero in #1283
- refactor(records): consolidate records persistence by @guillaumemichel in #1277
- refactor: remove lifecycle context from constructors by @guillaumemichel in #1282
Full Changelog: v0.41.0...v0.42.0
-
v0.41.1-0.20260718081114-727bea06ca8f18 Jul 2026 pre-releaseNothing published for this version
-
v0.41.1-0.20260717085953-cb9639642a8d17 Jul 2026 pre-releaseNothing published for this version
-
v0.41.1-0.20260715110209-161a21b5799c15 Jul 2026 pre-releaseNothing published for this version
-
v0.41.1-0.20260711062620-c9eb1c44537b11 Jul 2026 pre-releaseNothing published for this version
-
v0.41.1-0.20260707082949-7012d13599ed07 Jul 2026 pre-releaseNothing published for this version
-
v0.41.1-0.20260707013656-115ef033cc7607 Jul 2026 pre-releaseNothing published for this version
-
v0.41.1-0.20260703233757-7e03fc4a973603 Jul 2026 pre-releaseNothing published for this version
-
v0.41.1-0.20260703190142-e2486b7091cd03 Jul 2026 pre-releaseNothing published for this version
-
v0.41.1-0.20260703045152-254eff00cd7003 Jul 2026 pre-releaseNothing published for this version
-
v0.41.001 Jul 2026Release notes
Open source →Note
This release was brought to you by the Shipyard team.
What's Changed
- chore(deps): bump github.com/quic-go/quic-go from 0.59.0 to 0.59.1 by @dependabot[bot] in #1258
- fix(keystore): non-colliding reset slot prefixes by @lidel in #1262
- tests: fix flaky
TestBootStrapWhenRTIsEmptyby @guillaumemichel in #1264 - fix: cut reprovide peak memory with key count by @lidel in #1259
- fix(provider): reprovide all regions when resume is disabled by @guillaumemichel in #1267
- fix(provider): cover full keyspace when peers cluster under one prefix by @guillaumemichel in #1265
Full Changelog: v0.40.0...v0.41.0
-
v0.40.1-0.20260625052158-46622399825625 Jun 2026 pre-releaseNothing published for this version
-
v0.40.1-0.20260617160602-96c8548a5e2a17 Jun 2026 pre-releaseNothing published for this version
-
v0.40.1-0.20260617100038-10d5605ce79917 Jun 2026 pre-releaseNothing published for this version
-
v0.40.1-0.20260616203420-146f2cfad78616 Jun 2026 pre-releaseNothing published for this version
-
v0.40.1-0.20260616074740-75bc4749570b16 Jun 2026 pre-releaseNothing published for this version
-
v0.40.1-0.20260605061321-73bd7fd5d62e05 Jun 2026 pre-releaseNothing published for this version
-
v0.40.020 May 2026Release notes
Open source →Note
This release was brought to you by the Shipyard team.
Highlights
⚠️ Breaking change
SweepingProvider.Stats()now takes acontext.Contextand returns(stats.Stats, error). Callers must pass a ctx with a deadline — the key count is fetched through the keystore worker and can stall behind a slow datastore op. (#1251 by @guillaumemichel)
Fixes
- Per-peer timeout on
ADD_PROVIDERsends so a single slow peer can't stall a reprovide cycle. (#1252 by @guillaumemichel) batchReprovidenow holdscycleStatsLkfor the full defer, fixing a stats race. (#1255 by @guillaumemichel)ResettableKeystorereset is faster and no longer blocks the worker. (#1256 by @guillaumemichel)
Other
- Dependency updates. (#1250 by @gammazero)
Full Changelog: v0.39.2...v0.40.0
-
v0.39.3-0.20260617095234-35d8d8bb01f517 Jun 2026 pre-releaseNothing published for this version
-
v0.39.3-0.20260513140308-b73e1e814f5f13 May 2026 pre-releaseNothing published for this version
-
v0.39.207 May 2026Release notes
Open source →Note
This release was brought to you by the Shipyard team.
What's Changed
- feat(provider): allow WithReprovideInterval(0) for burst-only mode by @lidel in #1246
- test: fix flaky TestStartProvidingSingle by @guillaumemichel in #1247
- chore: bump boxo to v0.39.0 by @lidel in #1248
Full Changelog: v0.39.1...v0.39.2
-
v0.39.2-0.20260506132526-b00ec536b91806 May 2026 pre-releaseNothing published for this version
-
v0.39.2-0.20260505220436-eef1feb8bdc605 May 2026 pre-releaseNothing published for this version
-
v0.39.2-0.20260505215858-52b01552be6505 May 2026 pre-releaseNothing published for this version
-
v0.39.2-0.20260505211239-817031b787f105 May 2026 pre-releaseNothing published for this version
-
v0.39.2-0.20260505203308-b5615da3b1cc05 May 2026 pre-releaseNothing published for this version
-
v0.39.120 Apr 2026Release notes
Open source →Note
This release was brought to you by the Shipyard team.
What's Changed
- tests: fix flaky TestStartProvidingSingle by @guillaumemichel in #1242
- fix(provider): reduce provide log verbosity by @lidel in #1243
- fix: data race on AddrInfo.Addrs in queryPeer by @lidel in #1244
Full Changelog: v0.39.0...v0.39.1
-
v0.39.1-0.20260420100332-248f53b7356520 Apr 2026 pre-releaseNothing published for this version
-
v0.39.1-0.20260413044849-e8f6083c28e213 Apr 2026 pre-releaseNothing published for this version
-
v0.39.1-0.20260331093252-f9a090e67f6431 Mar 2026 pre-releaseNothing published for this version
-
v0.39.1-0.20260326020727-bcbc21e9f63326 Mar 2026 pre-releaseNothing published for this version
-
v0.39.1-0.20260326004342-88cb6d92d50026 Mar 2026 pre-releaseNothing published for this version
-
v0.39.019 Mar 2026Release notes
Open source →Note
This release was brought to you by the Shipyard team.
Breaking changes
keystore.NewResettableKeystore()now takeskeystore.ResettableKeystoreOptioninstead ofkeystore.Option. Wrap existing options withKeystoreOption()to migrate.
What's Changed
- Expose provider record TTL as options by @phillebaba in #1237
- feat(provider/keystore): alt datastore wipe by @guillaumemichel in #1233
- chore: bump deps by @guillaumemichel in #1239
New Contributors
- @phillebaba made their first contribution in #1237
Full Changelog: v0.38.0...v0.39.0
-
v0.38.1-0.20260319100246-8db4c7f4014a19 Mar 2026 pre-releaseNothing published for this version
-
v0.38.1-0.20260319095041-7ba6b28e4b2919 Mar 2026 pre-releaseNothing published for this version
-
v0.38.1-0.20260318194436-7b44139b899d18 Mar 2026 pre-releaseNothing published for this version
-
v0.38.1-0.20260318184843-1bede74b824618 Mar 2026 pre-releaseNothing published for this version
-
v0.38.1-0.20260318021441-7f11bf3a21de18 Mar 2026 pre-releaseNothing published for this version
-
v0.38.1-0.20260304084134-15f0b42671b204 Mar 2026 pre-releaseNothing published for this version
-
v0.38.1-0.20260217124839-5b45a65966fd17 Feb 2026 pre-releaseNothing published for this version
-
v0.38.1-0.20260217092601-81a726dc0c1c17 Feb 2026 pre-releaseNothing published for this version
-
v0.38.016 Feb 2026Release notes
Open source →What's Changed
- fix(provider): close datastore results by @guillaumemichel in #1226
- chore: go-libdht org transfer by @guillaumemichel in #1229
- refactor: apply go fix modernizers from Go 1.26 by @gammazero in #1231
- update dependencies and minimum go version by @gammazero in #1230
- fix(provider/keystore): protect keystore size during reset by @guillaumemichel in #1227
- chore(deps): bump github.com/pion/dtls/v3 from 3.0.6 to 3.1.0 by @dependabot[bot] in #1232
- chore(deps): bump github.com/pion/dtls/v3 from 3.1.0 to 3.1.1 by @dependabot[bot] in #1234
- update go-datastore to v0.9.1 by @gammazero in #1235
Full Changelog: v0.37.1...v0.38.0
-
v0.37.2-0.20260212142733-97ce04b37df412 Feb 2026 pre-releaseNothing published for this version
-
v0.37.2-0.20260211161343-a9412b28388311 Feb 2026 pre-releaseNothing published for this version
-
v0.37.2-0.20260130154754-e9e1b985199230 Jan 2026 pre-releaseNothing published for this version
-
v0.37.127 Jan 2026Release notes
Open source →What's Changed
- fix(routing): add per-peer timeouts for PutValue and Provide by @lidel in #1222
- Update dependencies by @gammazero in #1223
- replace multierr with errors.Join by @gammazero in #1224
Full Changelog: v0.37.0...v0.37.1
-
v0.37.014 Jan 2026Nothing published for this version
-
v0.36.1-0.20260113121646-44eddf04e3a913 Jan 2026 pre-releaseNothing published for this version