Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Created by
brew bump
Created with
brew bump-formula-pr
.release notes
ipfs log level
commandipfs add
commandipfs name publish
Reprovider.Strategy
is now consistently respectedReprovider.Strategy=all
: improved memory efficiencyipfs cid
ipfs stats reprovide
Overview
Kubo 0.37.0 introduces embedded repository migrations, gateway resource protection, complete AutoConf control, improved reprovider strategies, and anonymous telemetry for better feature prioritization. This release significantly improves memory efficiency, network configuration flexibility, and operational reliability while maintaining full backward compatibility.
🔦 Highlights
🚀 Repository migration from v16 to v17 with embedded tooling
This release migrates the Kubo repository from version 16 to version 17. Migrations are now built directly into the binary - completing in milliseconds without internet access or external downloads.
ipfs daemon --migrate
performs migrations automatically. Manual migration:ipfs repo migrate --to=17
(or--to=16 --allow-downgrade
for compatibility). Embedded migrations apply to v17+; older versions still require external tools.Legacy migration deprecation: Support for legacy migrations that download binaries from the internet will be removed in a future version. Only embedded migrations for the last 3 releases will be supported. Users with very old repositories should update in stages rather than skipping multiple versions.
🚦 Gateway concurrent request limits and retrieval timeouts
New configurable limits protect gateway resources during high load:
Gateway.RetrievalTimeout
(default: 30s): Maximum duration for content retrieval. Returns 504 Gateway Timeout when exceeded - applies to both initial retrieval (time to first byte) and between subsequent writes.Gateway.MaxConcurrentRequests
(default: 4096): Limits concurrent HTTP requests. Returns 429 Too Many Requests when exceeded. Protects nodes from traffic spikes and resource exhaustion, especially useful behind reverse proxies without rate-limiting.New Prometheus metrics for monitoring:
ipfs_http_gw_concurrent_requests
: Current requests being processedipfs_http_gw_responses_total
: HTTP responses by status codeipfs_http_gw_retrieval_timeouts_total
: Timeouts by status code and truncation statusTuning tips:
ipfs_http_gw_concurrent_requests
for saturationipfs_http_gw_retrieval_timeouts_total
vs success rates to identify timeout patterns indicating routing or storage provider issues🔧 AutoConf: Complete control over network defaults
Configuration fields now support
["auto"]
placeholders that resolve to network defaults fromAutoConf.URL
. These defaults can be inspected, replaced with custom values, or disabled entirely. Previously, empty configuration fields likeRouting.DelegatedRouters: []
would use hardcoded defaults - this system makes those defaults explicit through"auto"
values. When upgrading to Kubo 0.37, custom configurations remain unchanged.New
--expand-auto
flag shows resolved values for any config field:Configuration can be managed via:
"auto"
with custom endpoints or set[]
to disable features--profile=autoconf-on|autoconf-off
AutoConf.Enabled
and custom manifests viaAutoConf.URL
Organizations can host custom AutoConf manifests for private networks. See AutoConf documentation and format spec at https://conf.ipfs-mainnet.org/
🗑️ Clear provide queue when reprovide strategy changes
Changing
Reprovider.Strategy
and restarting Kubo now automatically clears the provide queue. Only content matching the new strategy will be announced.Manual queue clearing is also available:
ipfs provide clear
- clear all queued content announcements🪵 Revamped
ipfs log level
commandThe
ipfs log level
command has been completely revamped to support both getting and setting log levels with a unified interface.New: Getting log levels
ipfs log level
- Shows default level onlyipfs log level all
- Shows log level for every subsystem, including default levelipfs log level foo
- Shows log level for a specific subsystem onlyPOST /api/v0/log/level?arg=<subsystem>
Enhanced: Setting log levels
ipfs log level foo debug
- Sets "foo" subsystem to "debug" levelipfs log level all info
- Sets all subsystems to "info" level (convenient, no escaping)ipfs log level '*' info
- Equivalent to above but requires shell escapingipfs log level foo default
- Sets "foo" subsystem to current default levelThe command now provides full visibility into your current logging configuration while maintaining full backward compatibility. Both
all
and*
work for specifying all subsystems, withall
being more convenient since it doesn't require shell escaping.🧷 Named pins in
ipfs add
commandAdded
--pin-name
flag toipfs add
for assigning names to pins.📝 New IPNS publishing options
Added support for controlling IPNS record publishing strategies with new command flags and configuration.
New command flags:
Delegated publishers configuration:
Ipns.DelegatedPublishers
configures HTTP endpoints for IPNS publishing. Supports"auto"
for network defaults or custom HTTP endpoints. The--allow-delegated
flag enables publishing through these endpoints without requiring DHT connectivity, useful for nodes behind restrictive networks or during testing.🔢 Custom sequence numbers in
ipfs name publish
Added
--sequence
flag toipfs name publish
for setting custom sequence numbers in IPNS records. This enables advanced use cases like manually coordinating updates across multiple nodes. Seeipfs name publish --help
for details.⚙️
Reprovider.Strategy
is now consistently respectedPrior to this version, files added, blocks received etc. were "provided" to the network (announced on the DHT) regardless of the "reproviding strategy" setting. For example:
ipfs add --pin=false
→ file was provided regardlessipfs pin add
→ all blocks (not only the root) were providedOnly the periodic "reproviding" action (runs every 22h by default) respected the strategy.
This was inefficient as content that should not be provided was getting provided once. Now all operations respect
Reprovider.Strategy
. If set to "roots", no blocks other than pin roots will be provided regardless of what is fetched, added etc.⚙️
Reprovider.Strategy=all
: improved memory efficiencyThe memory cost of
Reprovider.Strategy=all
no longer grows with the number of pins. The strategy now processes blocks directly from the datastore in undefined order, eliminating the memory pressure tied to the number of pins.As part of this improvement, the
flat
reprovider strategy has been renamed toall
(the default). This cleanup removes the workaround introduced in v0.28 for pin root prioritization. With the introduction of more granular strategies likepinned+mfs
, we can now optimize the defaultall
strategy for lower memory usage without compromising users who need pin root prioritization (rationale).🧹 Removed unnecessary dependencies
Kubo has been cleaned up by removing unnecessary dependencies and packages:
thirdparty/assert
(replaced bygithub.com/stretchr/testify/require
)thirdparty/dir
(replaced bymisc/fsutil
)thirdparty/notifier
(unused)goprocess
dependency (replaced with native Gocontext
patterns)These changes reduce the dependency footprint while improving code maintainability and following Go best practices.
🔍 Improved
ipfs cid
Certain
ipfs cid
commands can now be run without a daemon or repository, and return correct exit code 1 on error, making it easier to perform CID conversion in scripts and CI/CD pipelines.While at it, we also fixed unicode support in
ipfs cid bases --prefix
to correctly showbase256emoji
🚀 :-)⚠️ Deprecated
ipfs stats reprovide
The
ipfs stats reprovide
command has moved toipfs provide stat
. This was done to organize provider commands in one location.🔄 AutoRelay now uses all connected peers for relay discovery
AutoRelay's relay discovery now includes all connected peers as potential relay candidates, not just peers discovered through the DHT. This allows peers connected via HTTP routing and manual
ipfs swarm connect
commands to serve as relays, improving connectivity for nodes using non-DHT routing configurations.📊 Anonymous telemetry for better feature prioritization
Per a suggestion from the IPFS Foundation, Kubo now sends optional anonymized telemetry information to Shipyard maintainers.
Privacy first: The telemetry system collects only anonymous data - no personally identifiable information, file paths, or content data. A random UUID is generated on first run for anonymous identification. Users are notified before any data is sent and have time to opt-out.
Why: We want to better understand Kubo usage across the ecosystem so we can better direct funding and work efforts. For example, we have little insights into how many nodes are NAT'ed and rely on AutoNAT for reachability. Some of the information can be inferred by crawling the network or logging
/identify
details in the bootstrappers, but users have no way of opting out from that, so we believe it is more transparent to concentrate this functionality in one place.What: Currently, we send the following anonymous metrics:
Click to see telemetry metrics example
The exact data sent for your node can be inspected by setting
GOLOG_LOG_LEVEL="telemetry=debug"
. Users will see an informative message the first time they launch a telemetry-enabled daemon, with time to opt-out before any data is collected. Telemetry data is sent every 24h, with the first collection starting 15 minutes after daemon launch.User control: You can opt-out at any time:
IPFS_TELEMETRY=off
before starting the daemonipfs config Plugins.Plugins.telemetry.Config.Mode off
and restart the daemonThe telemetry plugin code lives in
plugin/plugins/telemetry
.Learn more:
/kubo/docs/telemetry.md
📦️ Important dependency updates
boxo
to v0.34.0 (incl. v0.33.1)go-libp2p
to v0.43.0go-libp2p-kad-dht
to v0.34.0go-libp2p-pubsub
to v0.14.2 (incl. v0.14.1, v0.14.0)ipfs-webui
to v4.8.0📝 Changelog
Full Changelog
ipfs add --help
(#10926) (ipfs/kubo#10926)Gateway.RetrievalTimeout|MaxConcurrentRequests
(#10905) (ipfs/kubo#10905)uber-go/multierr
witherrors.Join
(#10912) (ipfs/kubo#10912)ipfs cid
without repo (#10897) (ipfs/kubo#10897)ipfs stat provide/reprovide
toipfs provide stat
(#10896) (ipfs/kubo#10896)uber-go/multierr
witherrors.Join
(ipfs/boxo#996)uber-go/multierr
witherrors.Join
(#242) (ipfs/go-datastore#242)uber-go/multierr
witherrors.Join
(#168) (ipfs/go-log#168)👨👩👧👦 Contributors
View the full release notes at https://github.com/ipfs/kubo/releases/tag/v0.37.0.