[!NOTE] This release was brought to you by the Shipyard team.
- Overview
- 🔦 Highlights
- HTTP Retrieval Client Now Enabled by Default
- Bitswap Broadcast Reduction
- Update go-log to v2
- Kubo now uses AutoNATv2 as a client
- Overwrite option for files cp command
- Gateway now supports negative HTTP Range requests
- Option for
filestore
command to remove bad blocks ConnMgr.SilencePeriod
configuration setting exposed- Fix handling of EDITOR env var
- 📦️ Important dependency updates
- 📝 Changelog
- 👨👩👧👦 Contributors
Overview
🔦 Highlights
HTTP Retrieval Client Now Enabled by Default
This release promotes the HTTP Retrieval client from an experimental feature to a standard feature that is enabled by default. When possible, Kubo will retrieve blocks over plain HTTPS (HTTP/2) without any extra user configuration.
See HTTPRetrieval
for more details.
Bitswap Broadcast Reduction
The Bitswap client now supports broadcast reduction logic, which is enabled by default. This feature significantly reduces the number of broadcast messages sent to peers, resulting in lower bandwidth usage during load spikes.
The overall logic works by sending to non-local peers only if those peers have previously replied that they want data blocks. To minimize impact on existing workloads, by default, broadcasts are still always sent to peers on the local network, or the ones defined in Peering.Peers
.
At Shipyard, we conducted A/B testing on our internal Kubo staging gateway with organic CID requests to ipfs.io
. While these results may not exactly match your specific workload, the benefits proved significant enough to make this feature default. Here are the key findings:
- Dramatic Resource Usage Reduction: Internal testing demonstrated a reduction in Bitswap broadcast messages by 80-98% and network bandwidth savings of 50-95%, with the greatest improvements occurring during high traffic and peer spikes. These efficiency gains lower operational costs of running Kubo under high load and improve the IPFS Mainnet (which is >80% Kubo-based) by reducing ambient traffic for all connected peers.
- Improved Memory Stability: Memory stays stable even during major CID request spikes that increase peer count, preventing the out-of-memory (OOM) issues found in earlier Kubo versions.
- Data Retrieval Performance Remains Strong: Our tests suggest that Kubo gateway hosts with broadcast reduction enabled achieve similar or better HTTP 200 success rates compared to version 0.35, while maintaining equivalent or higher want-have responses and unique blocks received.
For more information about our A/B tests, see kubo#10825.
To revert to the previous behavior for your own A/B testing, set Internal.Bitswap.BroadcastControl.Enable
to false
and monitor relevant metrics (ipfs_bitswap_bcast_skips_total
, ipfs_bitswap_haves_received
, ipfs_bitswap_unique_blocks_received
, ipfs_bitswap_wanthaves_broadcast
, HTTP 200 success rate).
For a description of the configuration items, see the documentation of Internal.Bitswap.BroadcastControl
.
Update go-log to v2
go-log v2 has been out for quite a while now and it's time to deprecate v1.
- Replace all use of
go-log
withgo-log/v2
- Makes
/api/v0/log/tail
useful over HTTP - Fixes
ipfs log tail
- Removes support for
ContextWithLoggable
as this is not needed for tracing-like functionality
Kubo now uses AutoNATv2 as a client
This Kubo release starts utilizing AutoNATv2 client functionality. go-libp2p v0.42 supports and depends on both AutoNATv1 and v2, and Autorelay feature continues to use v1. go-libp2p v0.43+ will discontinue internal use of AutoNATv1. We will maintain support for both v1 and v2 until then, though v1 will gradually be deprecated and ultimately removed.
Smarter AutoTLS registration
This update to libp2p and AutoTLS incorporates AutoNATv2 changes. It aims to reduce false-positive scenarios where AutoTLS certificate registration occurred before a publicly dialable multiaddr was available. This should result in fewer error logs during node start, especially when IPv6 and/or IPv4 NATs with UPnP/PCP/NAT-PMP are at play.
Overwrite option for files cp command
The ipfs files cp
command has a --force
option to allow it to overwrite existing files. Attempting to overwrite an existing directory results in an error.
Gateway now supports negative HTTP Range requests
The latest update to boxo/gateway
adds support for negative HTTP Range requests, achieving gateway-conformance@v0.8 compatibility.
This provides greater interoperability with generic HTTP-based tools. For example, WebRecorder's https://replayweb.page/ can now directly load website snapshots from Kubo-backed URLs.
Option for filestore
command to remove bad blocks
The experimental filestore
command has a new option, --remove-bad-blocks
, to verify objects in the filestore and remove those that fail verification.
ConnMgr.SilencePeriod
configuration setting exposed
This connection manager option controls how often connections are swept and potentially terminated. See the ConnMgr documentation.
Fix handling of EDITOR env var
The ipfs config edit
command did not correctly handle the EDITOR
environment variable when its value contains flags and arguments, i.e. EDITOR=emacs -nw
. The command was treating the entire value of $EDITOR
as the name of the editor command. This has been fixed to parse the value of $EDITOR
into separate args, respecting shell quoting.
📦️ Important dependency updates
- update
go-libp2p
to v0.42.0 - update
go-libp2p-kad-dht
to v0.33.0 - update
boxo
to v0.33.0 (incl. v0.32.0) - update
gateway-conformance
to v0.8 - update
p2p-forge/client
to v0.6.0 - update
github.com/cockroachdb/pebble/v2
to v2.0.6 for Go 1.25 support
📝 Changelog
Full Changelog
- github.com/ipfs/kubo: - chore: 0.36.0 - chore: update links in markdown - chore: 0.36.0-rc2 - feat(httpnet): gather metrics for allowlist - chore: changelog - test: TestEditorParsing - fix: handling of EDITOR env var (#10855) ([[ipfs/kubo#10855](https://github.com/ipfs/kubo/issues/10855)](https://github.com/ipfs/kubo/pull/10855)) - refactor: use slices.Sort where appropriate (#10858) ([[ipfs/kubo#10858](https://github.com/ipfs/kubo/issues/10858)](https://github.com/ipfs/kubo/pull/10858)) - Upgrade to Boxo v0.33.0 (#10857) ([[ipfs/kubo#10857](https://github.com/ipfs/kubo/issues/10857)](https://github.com/ipfs/kubo/pull/10857)) - chore: Upgrade github.com/cockroachdb/pebble/v2 to v2.0.6 for Go 1.25 support (#10850) ([[ipfs/kubo#10850](https://github.com/ipfs/kubo/issues/10850)](https://github.com/ipfs/kubo/pull/10850)) - core:constructor: add a log line about http retrieval - chore: p2p-forge v0.6.0 + go-libp2p 0.42.0 (#10840) ([[ipfs/kubo#10840](https://github.com/ipfs/kubo/issues/10840)](https://github.com/ipfs/kubo/pull/10840)) - docs: fix minor typos (#10849) ([[ipfs/kubo#10849](https://github.com/ipfs/kubo/issues/10849)](https://github.com/ipfs/kubo/pull/10849)) - Replace use of go-car v1 with go-car/v2 (#10845) ([[ipfs/kubo#10845](https://github.com/ipfs/kubo/issues/10845)](https://github.com/ipfs/kubo/pull/10845)) - chore: v0.36.0-rc1 - chore: deduplicate 0.36 changelog - feat(config): connmgr: expose silence period (#10827) ([[ipfs/kubo#10827](https://github.com/ipfs/kubo/issues/10827)](https://github.com/ipfs/kubo/pull/10827)) - bitswap/client: configurable broadcast reduction (#10825) ([[ipfs/kubo#10825](https://github.com/ipfs/kubo/issues/10825)](https://github.com/ipfs/kubo/pull/10825)) - Upgrade to Boxo v0.32.0 (#10839) ([[ipfs/kubo#10839](https://github.com/ipfs/kubo/issues/10839)](https://github.com/ipfs/kubo/pull/10839)) - feat: HTTP retrieval enabled by default (#10836) ([[ipfs/kubo#10836](https://github.com/ipfs/kubo/issues/10836)](https://github.com/ipfs/kubo/pull/10836)) - feat: AutoTLS with AutoNATv2 client (#10835) ([[ipfs/kubo#10835](https://github.com/ipfs/kubo/issues/10835)](https://github.com/ipfs/kubo/pull/10835)) - commands: add `--force` option to `files cp` command (#10823) ([[ipfs/kubo#10823](https://github.com/ipfs/kubo/issues/10823)](https://github.com/ipfs/kubo/pull/10823)) - docs/env variables: Document LIBP2P_SWARM_FD_LIMIT ([[ipfs/kubo#10828](https://github.com/ipfs/kubo/issues/10828)](https://github.com/ipfs/kubo/pull/10828)) - test: fix "invert" commands in sharness tests (#9652) ([[ipfs/kubo#9652](https://github.com/ipfs/kubo/issues/9652)](https://github.com/ipfs/kubo/pull/9652)) - Ivan386/filestore fix (#7474) ([[ipfs/kubo#7474](https://github.com/ipfs/kubo/issues/7474)](https://github.com/ipfs/kubo/pull/7474)) - wrap user-facing mfs.Lookup error (#10821) ([[ipfs/kubo#10821](https://github.com/ipfs/kubo/issues/10821)](https://github.com/ipfs/kubo/pull/10821)) - Update fuse docs with FreeBSD specifics (#10820) ([[ipfs/kubo#10820](https://github.com/ipfs/kubo/issues/10820)](https://github.com/ipfs/kubo/pull/10820)) - Minor wording fixes in docs (#10822) ([[ipfs/kubo#10822](https://github.com/ipfs/kubo/issues/10822)](https://github.com/ipfs/kubo/pull/10822)) - fix(gateway): gateway-conformance v0.8 (#10818) ([[ipfs/kubo#10818](https://github.com/ipfs/kubo/issues/10818)](https://github.com/ipfs/kubo/pull/10818)) - Upgrade to Boxo v0.31.0 (#10819) ([[ipfs/kubo#10819](https://github.com/ipfs/kubo/issues/10819)](https://github.com/ipfs/kubo/pull/10819)) - Merge release v0.35.0 ([[ipfs/kubo#10815](https://github.com/ipfs/kubo/issues/10815)](https://github.com/ipfs/kubo/pull/10815)) - fix: go-libp2p-kad-dht v0.33.1 (#10814) ([[ipfs/kubo#10814](https://github.com/ipfs/kubo/issues/10814)](https://github.com/ipfs/kubo/pull/10814)) - fix: p2p-forge v0.5.1 ignoring /p2p-circuit (#10813) ([[ipfs/kubo#10813](https://github.com/ipfs/kubo/issues/10813)](https://github.com/ipfs/kubo/pull/10813)) - Upgrade go-libp2p-kad-dht to v0.33.0 (#10811) ([[ipfs/kubo#10811](https://github.com/ipfs/kubo/issues/10811)](https://github.com/ipfs/kubo/pull/10811)) - chore: use go-log/v2 (#10801) ([[ipfs/kubo#10801](https://github.com/ipfs/kubo/issues/10801)](https://github.com/ipfs/kubo/pull/10801)) - fix(fuse): ipns error handling and friendly errors (#10807) ([[ipfs/kubo#10807](https://github.com/ipfs/kubo/issues/10807)](https://github.com/ipfs/kubo/pull/10807)) - fix(config): wire up `Provider.Enabled` flag (#10804) ([[ipfs/kubo#10804](https://github.com/ipfs/kubo/issues/10804)](https://github.com/ipfs/kubo/pull/10804)) - chore: bump version to 0.36.0-dev - github.com/ipfs/boxo (v0.30.0 -> v0.33.0): - Release v0.33.0 ([[ipfs/boxo#974](https://github.com/ipfs/boxo/issues/974)](https://github.com/ipfs/boxo/pull/974)) - [skip changelog] fix sending empty want from [#968] (#975) ([[ipfs/boxo#975](https://github.com/ipfs/boxo/issues/975)](https://github.com/ipfs/boxo/pull/975)) - minor typo fixes (#972) ([[ipfs/boxo#972](https://github.com/ipfs/boxo/issues/972)](https://github.com/ipfs/boxo/pull/972)) - fix: normalize delegated /routing/v1 urls (#971) ([[ipfs/boxo#971](https://github.com/ipfs/boxo/issues/971)](https://github.com/ipfs/boxo/pull/971)) - bitswap/client: Set DontHaveTimeout MinTimeout to 50ms (#965) ([[ipfs/boxo#965](https://github.com/ipfs/boxo/issues/965)](https://github.com/ipfs/boxo/pull/965)) - remove unused code (#967) ([[ipfs/boxo#967](https://github.com/ipfs/boxo/issues/967)](https://github.com/ipfs/boxo/pull/967)) - Fix sending extra wants (#968) ([[ipfs/boxo#968](https://github.com/ipfs/boxo/issues/968)](https://github.com/ipfs/boxo/pull/968)) - Handle Bitswap messages without `Wantlist` (#961) ([[ipfs/boxo#961](https://github.com/ipfs/boxo/issues/961)](https://github.com/ipfs/boxo/pull/961)) - bitswap/httpnet: limit metric cardinality ([[ipfs/boxo#957](https://github.com/ipfs/boxo/issues/957)](https://github.com/ipfs/boxo/pull/957)) - bitswap/httpnet: Sanitize allow/denylist inputs ([[ipfs/boxo#964](https://github.com/ipfs/boxo/issues/964)](https://github.com/ipfs/boxo/pull/964)) - Bitswap: Set DontHaveTimeout/MinTimeout to 200ms. ([[ipfs/boxo#959](https://github.com/ipfs/boxo/issues/959)](https://github.com/ipfs/boxo/pull/959)) - upgrade go-libp2p to v0.42.0 (#960) ([[ipfs/boxo#960](https://github.com/ipfs/boxo/issues/960)](https://github.com/ipfs/boxo/pull/960)) - refactor: use the built-in max/min to simplify the code [skip changelog] (#941) ([[ipfs/boxo#941](https://github.com/ipfs/boxo/issues/941)](https://github.com/ipfs/boxo/pull/941)) - bitswap/httpnet: adjust error logging (#958) ([[ipfs/boxo#958](https://github.com/ipfs/boxo/issues/958)](https://github.com/ipfs/boxo/pull/958)) - docs: reprovider metrics name in changelog (#953) ([[ipfs/boxo#953](https://github.com/ipfs/boxo/issues/953)](https://github.com/ipfs/boxo/pull/953)) - Release v0.32.0 (#952) ([[ipfs/boxo#952](https://github.com/ipfs/boxo/issues/952)](https://github.com/ipfs/boxo/pull/952)) - Remove redundant loop over published blocks (#950) ([[ipfs/boxo#950](https://github.com/ipfs/boxo/issues/950)](https://github.com/ipfs/boxo/pull/950)) - Fix links in README.md (#948) ([[ipfs/boxo#948](https://github.com/ipfs/boxo/issues/948)](https://github.com/ipfs/boxo/pull/948)) - chore(provider): meaningful info level log (#940) ([[ipfs/boxo#940](https://github.com/ipfs/boxo/issues/940)](https://github.com/ipfs/boxo/pull/940)) - feat(provider): reprovide metrics (#944) ([[ipfs/boxo#944](https://github.com/ipfs/boxo/issues/944)](https://github.com/ipfs/boxo/pull/944)) - ci: set up golangci lint in boxo (#943) ([[ipfs/boxo#943](https://github.com/ipfs/boxo/issues/943)](https://github.com/ipfs/boxo/pull/943)) - Do not return error from notify blocks when bitswap shutdown (#947) ([[ipfs/boxo#947](https://github.com/ipfs/boxo/issues/947)](https://github.com/ipfs/boxo/pull/947)) - bitswap/client: broadcast reduction and metrics (#937) ([[ipfs/boxo#937](https://github.com/ipfs/boxo/issues/937)](https://github.com/ipfs/boxo/pull/937)) - fix: typo in HAMT error message ([[ipfs/boxo#945](https://github.com/ipfs/boxo/issues/945)](https://github.com/ipfs/boxo/pull/945)) - bitswap/httpnet: expose the errors on connect when connection impossible ([[ipfs/boxo#939](https://github.com/ipfs/boxo/issues/939)](https://github.com/ipfs/boxo/pull/939)) - fix(unixfs): int check (#936) ([[ipfs/boxo#936](https://github.com/ipfs/boxo/issues/936)](https://github.com/ipfs/boxo/pull/936)) - Remove WithPeerLedger option and PeerLedger interface (#938) ([[ipfs/boxo#938](https://github.com/ipfs/boxo/issues/938)](https://github.com/ipfs/boxo/pull/938)) - fix(gateway): support suffix range requests (#922) ([[ipfs/boxo#922](https://github.com/ipfs/boxo/issues/922)](https://github.com/ipfs/boxo/pull/922)) - Release v0.31.0 ([[ipfs/boxo#934](https://github.com/ipfs/boxo/issues/934)](https://github.com/ipfs/boxo/pull/934)) - Revert "Remove an unused timestamp from traceability.Block" (#931) ([[ipfs/boxo#931](https://github.com/ipfs/boxo/issues/931)](https://github.com/ipfs/boxo/pull/931)) - update changelog (#930) ([[ipfs/boxo#930](https://github.com/ipfs/boxo/issues/930)](https://github.com/ipfs/boxo/pull/930)) - Deprecate WithPeerLedger option for bitswap server (#929) ([[ipfs/boxo#929](https://github.com/ipfs/boxo/issues/929)](https://github.com/ipfs/boxo/pull/929)) - refactor: use a more efficient querying method (#921) ([[ipfs/boxo#921](https://github.com/ipfs/boxo/issues/921)](https://github.com/ipfs/boxo/pull/921)) - Use go-car/v2 for reading CAR files in gateway backend (#927) ([[ipfs/boxo#927](https://github.com/ipfs/boxo/issues/927)](https://github.com/ipfs/boxo/pull/927)) - Upgrade go-libp2p-kad-dht v0.33.1 (#924) ([[ipfs/boxo#924](https://github.com/ipfs/boxo/issues/924)](https://github.com/ipfs/boxo/pull/924)) - bitswap/httpnet: Disconnect peers after client errors ([[ipfs/boxo#919](https://github.com/ipfs/boxo/issues/919)](https://github.com/ipfs/boxo/pull/919)) - Remove an unused timestamp from traceability.Block (#923) ([[ipfs/boxo#923](https://github.com/ipfs/boxo/issues/923)](https://github.com/ipfs/boxo/pull/923)) - fix(bitswap/httpnet): idempotent Stop() (#920) ([[ipfs/boxo#920](https://github.com/ipfs/boxo/issues/920)](https://github.com/ipfs/boxo/pull/920)) - Update dependencies (#916) ([[ipfs/boxo#916](https://github.com/ipfs/boxo/issues/916)](https://github.com/ipfs/boxo/pull/916)) - github.com/ipfs/go-block-format (v0.2.1 -> v0.2.2): - new version (#62) ([[ipfs/go-block-format#62](https://github.com/ipfs/go-block-format/issues/62)](https://github.com/ipfs/go-block-format/pull/62)) - Use value receivers for `BasicBlock` methods (#61) ([[ipfs/go-block-format#61](https://github.com/ipfs/go-block-format/issues/61)](https://github.com/ipfs/go-block-format/pull/61)) - github.com/ipfs/go-ds-badger4 (v0.1.5 -> v0.1.8): - new version (#7) ([[ipfs/go-ds-badger4#7](https://github.com/ipfs/go-ds-badger4/issues/7)](https://github.com/ipfs/go-ds-badger4/pull/7)) - update version (#5) ([[ipfs/go-ds-badger4#5](https://github.com/ipfs/go-ds-badger4/issues/5)](https://github.com/ipfs/go-ds-badger4/pull/5)) - update dependencies (#4) ([[ipfs/go-ds-badger4#4](https://github.com/ipfs/go-ds-badger4/issues/4)](https://github.com/ipfs/go-ds-badger4/pull/4)) - new version ([[ipfs/go-ds-badger4#3](https://github.com/ipfs/go-ds-badger4/issues/3)](https://github.com/ipfs/go-ds-badger4/pull/3)) - use go-datastore without goprocess ([[ipfs/go-ds-badger4#2](https://github.com/ipfs/go-ds-badger4/issues/2)](https://github.com/ipfs/go-ds-badger4/pull/2)) - github.com/ipfs/go-ds-pebble (v0.5.0 -> v0.5.1): - new version (#55) ([[ipfs/go-ds-pebble#55](https://github.com/ipfs/go-ds-pebble/issues/55)](https://github.com/ipfs/go-ds-pebble/pull/55)) - github.com/ipfs/go-ipfs-cmds (v0.14.1 -> v0.15.0): - new version (#287) ([[ipfs/go-ipfs-cmds#287](https://github.com/ipfs/go-ipfs-cmds/issues/287)](https://github.com/ipfs/go-ipfs-cmds/pull/287)) - minor document updates (#286) ([[ipfs/go-ipfs-cmds#286](https://github.com/ipfs/go-ipfs-cmds/issues/286)](https://github.com/ipfs/go-ipfs-cmds/pull/286)) - Update go log v2 (#285) ([[ipfs/go-ipfs-cmds#285](https://github.com/ipfs/go-ipfs-cmds/issues/285)](https://github.com/ipfs/go-ipfs-cmds/pull/285)) - ci: uci/update-go (#281) ([[ipfs/go-ipfs-cmds#281](https://github.com/ipfs/go-ipfs-cmds/issues/281)](https://github.com/ipfs/go-ipfs-cmds/pull/281)) - github.com/ipfs/go-ipld-format (v0.6.0 -> v0.6.2): - new version (#96) ([[ipfs/go-ipld-format#96](https://github.com/ipfs/go-ipld-format/issues/96)](https://github.com/ipfs/go-ipld-format/pull/96)) - bump version (#94) ([[ipfs/go-ipld-format#94](https://github.com/ipfs/go-ipld-format/issues/94)](https://github.com/ipfs/go-ipld-format/pull/94)) - github.com/ipfs/go-ipld-legacy (v0.2.1 -> v0.2.2): - new version ([[ipfs/go-ipld-legacy#25](https://github.com/ipfs/go-ipld-legacy/issues/25)](https://github.com/ipfs/go-ipld-legacy/pull/25)) - github.com/ipfs/go-test (v0.2.1 -> v0.2.2): - new version (#25) ([[ipfs/go-test#25](https://github.com/ipfs/go-test/issues/25)](https://github.com/ipfs/go-test/pull/25)) - Update README.md (#24) ([[ipfs/go-test#24](https://github.com/ipfs/go-test/issues/24)](https://github.com/ipfs/go-test/pull/24)) - github.com/ipfs/go-unixfsnode (v1.10.0 -> v1.10.1): - new version ([[ipfs/go-unixfsnode#84](https://github.com/ipfs/go-unixfsnode/issues/84)](https://github.com/ipfs/go-unixfsnode/pull/84)) - github.com/ipld/go-car/v2 (v2.14.2 -> v2.14.3): - bump version ([[ipld/go-car#579](https://github.com/ipld/go-car/issues/579)](https://github.com/ipld/go-car/pull/579)) - chore: update to boxo merkledag package - feat: car debug handles the zero length block ([[ipld/go-car#569](https://github.com/ipld/go-car/issues/569)](https://github.com/ipld/go-car/pull/569)) - chore(deps): bump github.com/rogpeppe/go-internal from 1.13.1 to 1.14.1 in /cmd ([[ipld/go-car#566](https://github.com/ipld/go-car/issues/566)](https://github.com/ipld/go-car/pull/566)) - Add a concatination cli utility ([[ipld/go-car#565](https://github.com/ipld/go-car/issues/565)](https://github.com/ipld/go-car/pull/565)) - github.com/ipld/go-codec-dagpb (v1.6.0 -> v1.7.0): - chore: v1.7.0 bump - github.com/libp2p/go-flow-metrics (v0.2.0 -> v0.3.0): - chore: release v0.3.0 ([[libp2p/go-flow-metrics#38](https://github.com/libp2p/go-flow-metrics/issues/38)](https://github.com/libp2p/go-flow-metrics/pull/38)) - go-clock migration ([[libp2p/go-flow-metrics#36](https://github.com/libp2p/go-flow-metrics/issues/36)](https://github.com/libp2p/go-flow-metrics/pull/36)) - github.com/libp2p/go-libp2p (v0.41.1 -> v0.42.0): - Release v0.42.0 (#3318) ([[libp2p/go-libp2p#3318](https://github.com/libp2p/go-libp2p/issues/3318)](https://github.com/libp2p/go-libp2p/pull/3318)) - mocknet: notify listeners on listen (#3310) ([[libp2p/go-libp2p#3310](https://github.com/libp2p/go-libp2p/issues/3310)](https://github.com/libp2p/go-libp2p/pull/3310)) - autonatv2: add metrics (#3308) ([[libp2p/go-libp2p#3308](https://github.com/libp2p/go-libp2p/issues/3308)](https://github.com/libp2p/go-libp2p/pull/3308)) - chore: fix errors reported by golangci-lint ([[libp2p/go-libp2p#3295](https://github.com/libp2p/go-libp2p/issues/3295)](https://github.com/libp2p/go-libp2p/pull/3295)) - autonatv2: add Unknown addrs to event (#3305) ([[libp2p/go-libp2p#3305](https://github.com/libp2p/go-libp2p/issues/3305)](https://github.com/libp2p/go-libp2p/pull/3305)) - transport: rate limit new connections (#3283) ([[libp2p/go-libp2p#3283](https://github.com/libp2p/go-libp2p/issues/3283)](https://github.com/libp2p/go-libp2p/pull/3283)) - basichost: use autonatv2 to verify reachability (#3231) ([[libp2p/go-libp2p#3231](https://github.com/libp2p/go-libp2p/issues/3231)](https://github.com/libp2p/go-libp2p/pull/3231)) - chore: Revert "go-clock migration" (#3303) ([[libp2p/go-libp2p#3303](https://github.com/libp2p/go-libp2p/issues/3303)](https://github.com/libp2p/go-libp2p/pull/3303)) - tcp: ensure tcpGatedMaListener wrapping happens always (#3275) ([[libp2p/go-libp2p#3275](https://github.com/libp2p/go-libp2p/issues/3275)](https://github.com/libp2p/go-libp2p/pull/3275)) - go-clock migration ([[libp2p/go-libp2p#3293](https://github.com/libp2p/go-libp2p/issues/3293)](https://github.com/libp2p/go-libp2p/pull/3293)) - swarm_test: support more transports for GenSwarm (#3130) ([[libp2p/go-libp2p#3130](https://github.com/libp2p/go-libp2p/issues/3130)](https://github.com/libp2p/go-libp2p/pull/3130)) - eventbus: change slow consumer event from error to warn (#3286) ([[libp2p/go-libp2p#3286](https://github.com/libp2p/go-libp2p/issues/3286)](https://github.com/libp2p/go-libp2p/pull/3286)) - quicreuse: add some documentation for the package (#3279) ([[libp2p/go-libp2p#3279](https://github.com/libp2p/go-libp2p/issues/3279)](https://github.com/libp2p/go-libp2p/pull/3279)) - identify: rate limit id push protocol (#3266) ([[libp2p/go-libp2p#3266](https://github.com/libp2p/go-libp2p/issues/3266)](https://github.com/libp2p/go-libp2p/pull/3266)) - fix(pstoreds): add missing log for failed GC record unmarshalling in `purgeStore()` (#3273) ([[libp2p/go-libp2p#3273](https://github.com/libp2p/go-libp2p/issues/3273)](https://github.com/libp2p/go-libp2p/pull/3273)) - nat: improve port mapping failure logging (#3261) ([[libp2p/go-libp2p#3261](https://github.com/libp2p/go-libp2p/issues/3261)](https://github.com/libp2p/go-libp2p/pull/3261)) - ci: add golangci-lint for linting (#3269) ([[libp2p/go-libp2p#3269](https://github.com/libp2p/go-libp2p/issues/3269)](https://github.com/libp2p/go-libp2p/pull/3269)) - build(test_analysis): use `modernc.org/sqlite` directly (#3227) ([[libp2p/go-libp2p#3227](https://github.com/libp2p/go-libp2p/issues/3227)](https://github.com/libp2p/go-libp2p/pull/3227)) - chore(certificate): update test vectors (#3242) ([[libp2p/go-libp2p#3242](https://github.com/libp2p/go-libp2p/issues/3242)](https://github.com/libp2p/go-libp2p/pull/3242)) - rcmgr: use netip.Prefix as map key instead of string (#3264) ([[libp2p/go-libp2p#3264](https://github.com/libp2p/go-libp2p/issues/3264)](https://github.com/libp2p/go-libp2p/pull/3264)) - webrtc: support receiving 256kB messages (#3255) ([[libp2p/go-libp2p#3255](https://github.com/libp2p/go-libp2p/issues/3255)](https://github.com/libp2p/go-libp2p/pull/3255)) - peerstore: remove leveldb tests (#3260) ([[libp2p/go-libp2p#3260](https://github.com/libp2p/go-libp2p/issues/3260)](https://github.com/libp2p/go-libp2p/pull/3260)) - identify: reduce timeout to 5 seconds (#3259) ([[libp2p/go-libp2p#3259](https://github.com/libp2p/go-libp2p/issues/3259)](https://github.com/libp2p/go-libp2p/pull/3259)) - fix(relay): fix data-race in relayFinder (#3258) ([[libp2p/go-libp2p#3258](https://github.com/libp2p/go-libp2p/issues/3258)](https://github.com/libp2p/go-libp2p/pull/3258)) - chore: update p2p-forge to v0.5.0 for autotls example (#3257) ([[libp2p/go-libp2p#3257](https://github.com/libp2p/go-libp2p/issues/3257)](https://github.com/libp2p/go-libp2p/pull/3257)) - peerstore: remove unused badger tests (#3252) ([[libp2p/go-libp2p#3252](https://github.com/libp2p/go-libp2p/issues/3252)](https://github.com/libp2p/go-libp2p/pull/3252)) - chore: using t.TempDir() instead of os.MkdirTemp (#3222) ([[libp2p/go-libp2p#3222](https://github.com/libp2p/go-libp2p/issues/3222)](https://github.com/libp2p/go-libp2p/pull/3222)) - chore(examples): p2p-forge/client v0.4.0 (#3211) ([[libp2p/go-libp2p#3211](https://github.com/libp2p/go-libp2p/issues/3211)](https://github.com/libp2p/go-libp2p/pull/3211)) - transport: add GatedMaListener type (#3186) ([[libp2p/go-libp2p#3186](https://github.com/libp2p/go-libp2p/issues/3186)](https://github.com/libp2p/go-libp2p/pull/3186)) - autonatv2: explicitly handle dns addrs (#3249) ([[libp2p/go-libp2p#3249](https://github.com/libp2p/go-libp2p/issues/3249)](https://github.com/libp2p/go-libp2p/pull/3249)) - autonatv2: fix server dial data request policy (#3247) ([[libp2p/go-libp2p#3247](https://github.com/libp2p/go-libp2p/issues/3247)](https://github.com/libp2p/go-libp2p/pull/3247)) - webtransport: wrap underlying transport error on stream resets (#3237) ([[libp2p/go-libp2p#3237](https://github.com/libp2p/go-libp2p/issues/3237)](https://github.com/libp2p/go-libp2p/pull/3237)) - connmgr: remove WithEmergencyTrim (#3217) ([[libp2p/go-libp2p#3217](https://github.com/libp2p/go-libp2p/issues/3217)](https://github.com/libp2p/go-libp2p/pull/3217)) - connmgr: fix transport association bug (#3221) ([[libp2p/go-libp2p#3221](https://github.com/libp2p/go-libp2p/issues/3221)](https://github.com/libp2p/go-libp2p/pull/3221)) - webrtc: fix memory leak with udpmux.muxedConnection context (#3243) ([[libp2p/go-libp2p#3243](https://github.com/libp2p/go-libp2p/issues/3243)](https://github.com/libp2p/go-libp2p/pull/3243)) - fix(libp2phttp): bound NewStream timeout (#3225) ([[libp2p/go-libp2p#3225](https://github.com/libp2p/go-libp2p/issues/3225)](https://github.com/libp2p/go-libp2p/pull/3225)) - conngater: fix incorrect err return value (#3219) ([[libp2p/go-libp2p#3219](https://github.com/libp2p/go-libp2p/issues/3219)](https://github.com/libp2p/go-libp2p/pull/3219)) - addrsmanager: extract out addressing logic from basichost (#3075) ([[libp2p/go-libp2p#3075](https://github.com/libp2p/go-libp2p/issues/3075)](https://github.com/libp2p/go-libp2p/pull/3075)) - github.com/libp2p/go-socket-activation (v0.1.0 -> v0.1.1): - new version (#35) ([[libp2p/go-socket-activation#35](https://github.com/libp2p/go-socket-activation/issues/35)](https://github.com/libp2p/go-socket-activation/pull/35)) - Upgrade to go-log/v2 v2.6.0 (#33) ([[libp2p/go-socket-activation#33](https://github.com/libp2p/go-socket-activation/issues/33)](https://github.com/libp2p/go-socket-activation/pull/33)) - sync: update CI config files (#20) ([[libp2p/go-socket-activation#20](https://github.com/libp2p/go-socket-activation/issues/20)](https://github.com/libp2p/go-socket-activation/pull/20)) - sync: update CI config files (#18) ([[libp2p/go-socket-activation#18](https://github.com/libp2p/go-socket-activation/issues/18)](https://github.com/libp2p/go-socket-activation/pull/18)) - sync: update CI config files (#17) ([[libp2p/go-socket-activation#17](https://github.com/libp2p/go-socket-activation/issues/17)](https://github.com/libp2p/go-socket-activation/pull/17)) - github.com/libp2p/go-yamux/v5 (v5.0.0 -> v5.0.1): - Release v5.0.1 - fix: deadlock on close (#130) ([[libp2p/go-yamux#130](https://github.com/libp2p/go-yamux/issues/130)](https://github.com/libp2p/go-yamux/pull/130)) - github.com/multiformats/go-multiaddr (v0.15.0 -> v0.16.0): - Release v0.16.0 (#279) ([[multiformats/go-multiaddr#279](https://github.com/multiformats/go-multiaddr/issues/279)](https://github.com/multiformats/go-multiaddr/pull/279)) - Rename CaptureStringVal to CaptureString (#278) ([[multiformats/go-multiaddr#278](https://github.com/multiformats/go-multiaddr/issues/278)](https://github.com/multiformats/go-multiaddr/pull/278)) - Megular Expressions (#263) ([[multiformats/go-multiaddr#263](https://github.com/multiformats/go-multiaddr/issues/263)](https://github.com/multiformats/go-multiaddr/pull/263)) - github.com/multiformats/go-multicodec (v0.9.0 -> v0.9.2): - v0.9.2 bump - chore: update submodules and go generate - chore: v0.9.1 bump - chore: update submodules and go generate - ci: uci/update-go (#97) ([[multiformats/go-multicodec#97](https://github.com/multiformats/go-multicodec/issues/97)](https://github.com/multiformats/go-multicodec/pull/97)) - chore: update submodules and go generate - chore: update submodules and go generate - chore: update submodules and go generate - chore: update submodules and go generate - github.com/multiformats/go-multistream (v0.6.0 -> v0.6.1): - Release v0.6.1 ([[multiformats/go-multistream#121](https://github.com/multiformats/go-multistream/issues/121)](https://github.com/multiformats/go-multistream/pull/121)) - refactor(lazyClientConn): Use synctest friendly once func ([[multiformats/go-multistream#120](https://github.com/multiformats/go-multistream/issues/120)](https://github.com/multiformats/go-multistream/pull/120))👨👩👧👦 Contributors
Contributor | Commits | Lines ± | Files Changed |
---|---|---|---|
sukun | 25 | +7274/-1586 | 140 |
galargh | 13 | +1714/-1680 | 115 |
rvagg | 2 | +1383/-960 | 6 |
Andrew Gillis | 46 | +1226/-564 | 140 |
Marco Munizaga | 6 | +1643/-36 | 24 |
Hector Sanjuan | 20 | +624/-202 | 40 |
Marcin Rataj | 24 | +583/-175 | 49 |
Dennis Trautwein | 1 | +134/-14 | 4 |
Piotr Galar | 1 | +73/-71 | 23 |
Guillaume Michel | 4 | +58/-44 | 23 |
Ivan | 1 | +90/-9 | 3 |
Will Scott | 1 | +97/-0 | 2 |
gammazero | 11 | +47/-30 | 13 |
guillaumemichel | 3 | +40/-35 | 21 |
Adin Schmahmann | 1 | +58/-17 | 8 |
Laurent Senta | 1 | +26/-24 | 4 |
pullmerge | 1 | +20/-16 | 5 |
vladopajic | 1 | +20/-14 | 1 |
Probot | 1 | +18/-4 | 1 |
Dmitry Markin | 1 | +13/-9 | 2 |
overallteach | 1 | +4/-12 | 3 |
web3-bot | 5 | +9/-6 | 7 |
Pavel Zbitskiy | 1 | +14/-1 | 1 |
Rod Vagg | 5 | +7/-7 | 5 |
argentpapa | 1 | +3/-10 | 1 |
GarmashAlex | 1 | +8/-3 | 1 |
huochexizhan | 1 | +3/-3 | 1 |
VolodymyrBg | 1 | +2/-3 | 1 |
levisyin | 1 | +2/-2 | 2 |
b00f | 1 | +3/-0 | 1 |
achingbrain | 1 | +1/-1 | 1 |
Ocenka | 1 | +1/-1 | 1 |
Dreamacro | 1 | +1/-1 | 1 |
Štefan Baebler | 1 | +1/-0 | 1 |