kubo/docs
Guillaume Michel d56fe3a026
Some checks are pending
CodeQL / codeql (push) Waiting to run
Docker Check / lint (push) Waiting to run
Docker Check / build (push) Waiting to run
Gateway Conformance / gateway-conformance (push) Waiting to run
Gateway Conformance / gateway-conformance-libp2p-experiment (push) Waiting to run
Go Build / go-build (push) Waiting to run
Go Check / go-check (push) Waiting to run
Go Lint / go-lint (push) Waiting to run
Go Test / go-test (push) Waiting to run
Interop / interop-prep (push) Waiting to run
Interop / helia-interop (push) Blocked by required conditions
Interop / ipfs-webui (push) Blocked by required conditions
Sharness / sharness-test (push) Waiting to run
Spell Check / spellcheck (push) Waiting to run
feat(cli/rpc/add): fast provide of root CID (#11046)
* feat: fast provide
* Check error from provideRoot
* do not provide if nil router
* fix(commands): prevent panic from typed nil DHTClient interface

Fixes panic when ipfsNode.DHTClient is a non-nil interface containing a
nil pointer value (typed nil). This happened when Routing.Type=delegated
or when using HTTP-only routing without DHT.

The panic occurred because:
- Go interfaces can be non-nil while containing nil pointer values
- Simple `if DHTClient == nil` checks pass, but calling methods panics
- Example: `(*ddht.DHT)(nil)` stored in interface passes nil check

Solution:
- Add HasActiveDHTClient() method to check both interface and concrete value
- Update all 7 call sites to use proper check before DHT operations
- Rename provideRoot → provideCIDSync for clarity
- Add structured logging with "fast-provide" prefix for easier filtering
- Add tests covering nil cases and valid DHT configurations

Fixes: https://github.com/ipfs/kubo/pull/11046#issuecomment-3525313349

* feat(add): split fast-provide into two flags for async/sync control

Renames --fast-provide to --fast-provide-root and adds --fast-provide-wait
to give users control over synchronous vs asynchronous providing behavior.

Changes:
- --fast-provide-root (default: true): enables immediate root CID providing
- --fast-provide-wait (default: false): controls whether to block until complete
- Default behavior: async provide (fast, non-blocking)
- Opt-in: --fast-provide-wait for guaranteed discoverability (slower, blocking)
- Can disable with --fast-provide-root=false to rely on background reproviding

Implementation:
- Async mode: launches goroutine with detached context for fire-and-forget
  - Added 10 second timeout to prevent hanging on network issues
  - Timeout aligns with other kubo operations (ping, DNS resolve, p2p)
  - Sufficient for DHT with sweep provider or accelerated client
- Sync mode: blocks on provideCIDSync until completion (uses req.Context)
- Improved structured logging with "fast-provide-root:" prefix
  - Removed redundant "root CID" from messages (already in prefix)
  - Clear async/sync distinction in log messages
- Added FAST PROVIDE OPTIMIZATION section to ipfs add --help explaining:
  - The problem: background queue takes time, content not immediately discoverable
  - The solution: extra immediate announcement of just the root CID
  - The benefit: peers can find content right away while queue handles rest
  - Usage: async by default, --fast-provide-wait for guaranteed completion

Changelog:
- Added highlight section for fast root CID providing feature
- Updated TOC and overview
- Included usage examples with clear comments explaining each mode
- Emphasized this is extra announcement independent of background queue

The feature works best with sweep provider and accelerated DHT client
where provide operations are significantly faster.

* fix(add): respect Provide config in fast-provide-root

fast-provide-root should honor the same config settings as the regular
provide system:
- skip when Provide.Enabled is false
- skip when Provide.DHT.Interval is 0
- respect Provide.Strategy (all/pinned/roots/mfs/combinations)

This ensures fast-provide only runs when appropriate based on user
configuration and the nature of the content being added (pinned vs
unpinned, added to MFS or not).

* Update core/commands/add.go

---------

Co-authored-by: gammazero <11790789+gammazero@users.noreply.github.com>
Co-authored-by: Marcin Rataj <lidel@lidel.org>
2025-11-14 11:08:29 -08:00
..
changelogs feat(cli/rpc/add): fast provide of root CID (#11046) 2025-11-14 11:08:29 -08:00
examples feat: enable DHT Provide Sweep by default (#10955) 2025-11-12 23:55:17 +01:00
logo docs: kubo logo sources (#10964) 2025-09-09 15:01:52 +02:00
production doc: document reverse proxy bug 2020-06-15 17:01:40 -07:00
specifications Docs fix spelling issues (#10493) 2024-08-26 11:32:07 -07:00
add-code-flow.md Minor wording fixes in docs (#10822) 2025-05-30 15:14:37 -07:00
AUTHORS Updated authors doc 2016-08-18 11:54:48 -07:00
cli-http-api-core-diagram.png docs: README refresh, add cli-http-api-core diagram 2018-08-22 16:09:51 -07:00
command-completion.md feat: add zsh completions (#10040) 2023-08-17 16:43:27 +02:00
config.md feat: enable DHT Provide Sweep by default (#10955) 2025-11-12 23:55:17 +01:00
content-blocking.md chore: fix typos and comment formatting (#10653) 2025-01-13 18:56:53 +01:00
customizing.md docs(customizing.md): add kubo binary imports description 2023-12-19 19:52:50 -05:00
datastores.md Minor wording fixes in docs (#10822) 2025-05-30 15:14:37 -07:00
debug-guide.md docs:added GOLOG_LOG_LEVEL to debug-guide for logging more info (#10894) 2025-08-05 16:28:09 +02:00
delegated-routing.md feat: opt-in http retrieval client (#10772) 2025-05-06 19:06:40 +02:00
developer-certificate-of-origin Add developer certificate of origin document 2017-06-26 15:36:35 -07:00
EARLY_TESTERS.md docs: update RELEASE_CHECKLIST.md (#10496) 2024-09-11 19:06:54 +02:00
environment-variables.md feat(config): AutoConf with "auto" placeholders (#10883) 2025-08-20 05:59:11 +02:00
experimental-features.md refactor(config): migration 17-to-18 to unify Provider/Reprovider into Provide.DHT (#10951) 2025-09-18 22:17:43 +02:00
file-transfer.md chore: fix typos and comment formatting (#10653) 2025-01-13 18:56:53 +01:00
fuse.md Update fuse docs with FreeBSD specifics (#10820) 2025-06-02 10:01:26 -07:00
gateway.md docs: updated links and refs to external resources (#10368) 2024-03-16 00:59:22 +01:00
generate-authors.sh added AUTHORS file 2015-02-11 07:42:21 -08:00
http-rpc-clients.md docs: updated links and refs to external resources (#10368) 2024-03-16 00:59:22 +01:00
implement-api-bindings.md Minor wording fixes in docs (#10822) 2025-05-30 15:14:37 -07:00
libp2p-resource-management.md Docs fix spelling issues (#10493) 2024-08-26 11:32:07 -07:00
metrics.md feat: enable DHT Provide Sweep by default (#10955) 2025-11-12 23:55:17 +01:00
plugins.md feat: telemetry plugin (#10866) 2025-08-18 20:46:05 +02:00
provide-stats.md docs: clarify provide stats metric types and calculations (#11041) 2025-11-11 18:24:43 -08:00
README.md docs: improve docs/README (#9539) 2023-01-23 12:02:37 +01:00
RELEASE_CHECKLIST.md docs: update release checklist based on v0.38.0 learnings (#11007) 2025-10-09 03:27:20 +02:00
RELEASE_ISSUE_TEMPLATE.md docs: update RELEASE_CHECKLIST.md (#10496) 2024-09-11 19:06:54 +02:00
releases_thunderdome.md docs: update RELEASE_CHECKLIST.md (#10496) 2024-09-11 19:06:54 +02:00
releases.md Minor wording fixes in docs (#10822) 2025-05-30 15:14:37 -07:00
telemetry.md feat(telemetry): collect high level provide DHT sweep settings (#11056) 2025-11-13 01:28:15 +01:00
transports.md refactor: kubo in ./docs 2022-07-06 23:45:25 +02:00
windows.md docs: updated links and refs to external resources (#10368) 2024-03-16 00:59:22 +01:00

Developer Documentation and Guides

If you are looking for User Documentation & Guides, please visit docs.ipfs.tech or check General Documentation.

If youre experiencing an issue with IPFS, please follow our issue guide when filing an issue!

Otherwise, check out the following guides to using and developing IPFS:

General Documentation

Developing kubo

Guides

Advanced User Guides

Other