Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/kuboPublic

v0.37.0

Choose a tag to compare

@lidellidel released this 27 Aug 20:03
· 212 commits to master since this release
v0.37.0
This tag was signed with the committer’sverified signature.
lidel Marcin Rataj
GPG key ID:222B6784D5A79E42
Verified
Learn about vigilant mode.
6898472
This commit was created on GitHub.com and signed with GitHub’sverified signature.
GPG key ID:B5690EEEBB952194
Verified
Learn about vigilant mode.

Note

This release was brought to you by theShipyard team.

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 processed
  • ipfs_http_gw_responses_total: HTTP responses by status code
  • ipfs_http_gw_retrieval_timeouts_total: Timeouts by status code and truncation status

Tuning tips:

  • Monitor metrics to understand gateway behavior and adjust based on observations
  • Watchipfs_http_gw_concurrent_requests for saturation
  • Trackipfs_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:

ipfs config show --expand-auto# View all resolved endpointsipfs config Bootstrap --expand-auto# Check specific valuesipfs config Routing.DelegatedRouters --expand-autoipfs config DNS.Resolvers --expand-auto

Configuration can be managed via:

  • Replace"auto" with custom endpoints or set[] to disable features
  • Switch modes with--profile=autoconf-on|autoconf-off
  • Configure viaAutoConf.Enabled and custom manifests viaAutoConf.URL
# Enable automatic configurationipfs config profiles apply autoconf-on# Or manually set specific fieldsipfs config Bootstrap'["auto"]'ipfs config --json DNS.Resolvers'{".": ["https://dns.example.com/dns-query"], "eth.": ["auto"]}'

Organizations can host custom AutoConf manifests for private networks. SeeAutoConf documentation and format spec athttps://conf.ipfs-mainnet.org/

🗑️ Clear provide queue when reprovide strategy changes

ChangingReprovider.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

Note

Upgrading to Kubo 0.37 will automatically clear any preexisting provide queue. The next timeReprovider.Interval hits,Reprovider.Strategy will be executed on a clean slate, ensuring consistent behavior with your current configuration.

🪵 Revampedipfs log level command

Theipfs 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 only
  • ipfs log level all - Shows log level for every subsystem, including default level
  • ipfs log level foo - Shows log level for a specific subsystem only
  • Kubo RPC API:POST /api/v0/log/level?arg=<subsystem>

Enhanced: Setting log levels

  • ipfs log level foo debug - Sets "foo" subsystem to "debug" level
  • ipfs log level all info - Sets all subsystems to "info" level (convenient, no escaping)
  • ipfs log level '*' info - Equivalent to above but requires shell escaping
  • ipfs log level foo default - Sets "foo" subsystem to current default level

The command now provides full visibility into your current logging configuration while maintaining full backward compatibility. Bothall and* work for specifying all subsystems, withall being more convenient since it doesn't require shell escaping.

🧷 Named pins inipfs add command

Added--pin-name flag toipfs add for assigning names to pins.

$ipfs add --pin-name=testname cat.jpgadded bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi cat.jpg$ipfs pin ls --namesbafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi recursive testname

📝 New IPNS publishing options

Added support for controlling IPNS record publishing strategies with new command flags and configuration.

New command flags:

# Publish without network connectivity (local datastore only)ipfs name publish --allow-offline /ipfs/QmHash# Publish without DHT connectivity (uses local datastore and HTTP delegated publishers)ipfs name publish --allow-delegated /ipfs/QmHash

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 inipfs 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 respected

Prior 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:

  • Strategy set to "pinned" +ipfs add --pin=false → file was provided regardless
  • Strategy set to "roots" +ipfs pin add → all blocks (not only the root) were provided

Only 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 respectReprovider.Strategy. If set to "roots", no blocks other than pin roots will be provided regardless of what is fetched, added etc.

Note

Behavior change: The--offline flag no longer affects providing behavior. Bothipfs add andipfs --offline add now provide blocks according to the reproviding strategy when run against an online daemon (previously--offline add did not provide). Sinceipfs add has been nearly as fast as offline modesince v0.35,--offline is rarely needed. To run truly offline operations, useipfs --offline daemon.

⚙️Reprovider.Strategy=all: improved memory efficiency

The memory cost ofReprovider.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, theflat 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).

Note

Migration guidance: If you experience undesired announcement delays of root CIDs with the newall strategy, switch topinned+mfs for root prioritization.

🧹 Removed unnecessary dependencies

Kubo has been cleaned up by removing unnecessary dependencies and packages:

  • Removedthirdparty/assert (replaced bygithub.com/stretchr/testify/require)
  • Removedthirdparty/dir (replaced bymisc/fsutil)
  • Removedthirdparty/notifier (unused)
  • Removedgoprocess dependency (replaced with native Gocontext patterns)

These changes reduce the dependency footprint while improving code maintainability and following Go best practices.

🔍 Improvedipfs cid

Certainipfs 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 inipfs cid bases --prefix to correctly showbase256emoji 🚀 :-)

⚠️ Deprecatedipfs stats reprovide

Theipfs stats reprovide command has moved toipfs provide stat. This was done to organize provider commands in one location.

Note

ipfs stats reprovide still works, but is marked as deprecated and will be removed in a future release.

🔄 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 manualipfs 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 Shipyardmaintainers.

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
  "uuid": "<unique_uuid>",  "agent_version": "kubo/0.37.0-dev",  "private_network": false,  "bootstrappers_custom": false,  "repo_size_bucket": 1073741824,  "uptime_bucket": 86400000000000,  "reprovider_strategy": "pinned",  "routing_type": "auto",  "routing_accelerated_dht_client": false,  "routing_delegated_count": 0,  "autonat_service_mode": "enabled",  "autonat_reachability": "",  "autoconf": true,  "autoconf_custom": false,  "swarm_enable_hole_punching": true,  "swarm_circuit_addresses": false,  "swarm_ipv4_public_addresses": true,  "swarm_ipv6_public_addresses": true,  "auto_tls_auto_wss": true,  "auto_tls_domain_suffix_custom": false,  "discovery_mdns_enabled": true,  "platform_os": "linux",  "platform_arch": "amd64",  "platform_containerized": false,  "platform_vm": false

The exact data sent for your node can be inspected by settingGOLOG_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:

  • Set environment variableIPFS_TELEMETRY=off before starting the daemon
  • Or runipfs config Plugins.Plugins.telemetry.Config.Mode off and restart the daemon

The telemetry plugin code lives inplugin/plugins/telemetry.

Learn more:/kubo/docs/telemetry.md

📦️ Important dependency updates

📝 Changelog

Full Changelog

👨‍👩‍👧‍👦 Contributors

ContributorCommitsLines ±Files Changed
Marcin Rataj26+16033/-755176
Andrew Gillis35+2656/-1911142
Hector Sanjuan30+2638/-760114
Marco Munizaga11+1244/-36241
Russell Dempsey2+1031/-337
Guillaume Michel4+899/-6515
whyrusleeping4+448/-17715
sukun9+312/-19131
gammazero23+239/-21645
Brian Olson5+343/-1611
Steven Allen3+294/-79
Sergey Gorbunov2+247/-119
Kapil Sareen1+86/-1310
Masih H. Derkani1+72/-241
Piotr Galar1+40/-5523
Rod Vagg1+13/-113
Ankita Sahu1+2/-01
Štefan Baebler1+1/-01
Assets29
Loading
github-actions[bot], liv-io, and Omega9 reacted with thumbs up emojigithub-actions[bot] and ame0011 reacted with hooray emojilidel, github-actions[bot], and pouriya73 reacted with rocket emoji
6 people reacted

[8]ページ先頭

©2009-2026 Movatter.jp