Releases: ipfs/kubo
v0.19.0
Overview
🔦 Highlights
Improving the libp2p resource management integration
There are further followups up on libp2p resource manager improvements in Kubo 0.18.0
and 0.18.1:
ipfs swarm limits
andipfs swarm stats
have been replaced byipfs swarm resources
to provide a single/combined view for limits and their current usage in a more intuitive ordering.- Removal of
Swarm.ResourceMgr.Limits
config. Instead the power user can specify limits in a .json file that are fed directly to go-libp2p. This allows the power user to take advantage of the new resource manager types introduced in go-libp2p 0.25 including "use default", "unlimited", "block all".- Note: we don't expect most users to need these capablities, but they are there if so.
- Doc updates.
Gateways
Signed IPNS Record response format
This release implements IPIP-351 and
adds Gateway support for returning signed (verifiable) ipns-record
(0x0300)
when /ipns/{libp2p-key}
is requested with either
Accept: application/vnd.ipfs.ipns-record
HTTP header
or ?format=ipns-record
URL query parameter.
The Gateway in Kubo already supported trustless, verifiable retrieval of immutable /ipfs/
namespace.
With ?format=ipns-record
, light HTTP clients are now able to get the same level of verifiability for IPNS websites.
Tooling is limited at the moment, but we are working on go-libipfs examples that illustrate the verifiable HTTP client pattern.
Example: fetch IPNS record over HTTP and inspect it with ipfs name inspect --verify
$ FILE_CID=$(echo "Hello IPFS" | ipfs add --cid-version 1 -q)
$ IPNS_KEY=$(ipfs key gen test)
$ ipfs name publish /ipfs/$FILE_CID --key=test --ttl=30m
Published to k51q..dvf1: /ipfs/bafk..z244
$ curl "http://127.0.0.1:8080/ipns/$IPNS_KEY?format=ipns-record" > signed.ipns-record
$ ipfs name inspect --verify $IPNS_KEY < signed.ipns-record
Value: "/ipfs/bafk..."
Validity Type: "EOL"
Validity: 2023-03-09T23:13:34.032977468Z
Sequence: 0
TTL: 1800000000000
PublicKey: ""
Signature V1: "m..."
Signature V2: "m..."
Data: {...}
Validation results:
Valid: true
PublicKey: 12D3...
Addition of "autoclient" router type
A new routing type "autoclient" has been added. This mode is similar to "auto", in that it is a hybrid of content routers (including Kademlia and HTTP routers), but it does not run a DHT server. This is similar to the difference between "dhtclient" and "dht" router types.
See the Routing.Type documentation for more information.
Deprecation of the ipfs pubsub
commands and matching HTTP endpoints
We are deprecating ipfs pubsub
and all /api/v0/pubsub/
RPC endpoints and will remove them in the next release.
For more information and rational see #9717.
📝 Changelog
Full Changelog
- github.com/ipfs/kubo:
- chore: update version
- docs: 0.19 changelog (ipfs/kubo#9707)
- fix: canonicalize user defined headers
- fix: apply API.HTTPHeaders to /webui redirect
- feat: add heap allocs to 'ipfs diag profile'
- fix: future proof with > rcmgr.DefaultLimit for new enum rcmgr values
- test: add test for presarvation of unlimited configs for inbound systems
- fix: preserve Unlimited StreamsInbound in connmgr reconciliation
- test: fix flaky rcmgr test
- chore: deprecate the pubsub api
- test: port peering test from sharness to Go
- test: use
T.TempDir
to create temporary test directory - fix: --verify forgets the verified key
- test: name --verify forgets the verified key
- feat: add "autoclient" routing type
- test: parallelize more of rcmgr Go tests
- test: port legacy DHT tests to Go
- fix: t0116-gateway-cache.sh (ipfs/kubo#9696)
- docs: add bifrost to early testers (ipfs/kubo#9699)
- fix: typo in documentation for install path
- chore: update version
- feat: Reduce RM code footprint
- Doc updates/additions
- ci: replace junit html generation with gh action
- test: port rcmgr sharness tests to Go
- test(gateway): use deterministic CAR fixtures (ipfs/kubo#9657)
- feat(gateway): error handling improvements (500, 502, 504) (#9660) (ipfs/kubo#9660)
- docs: be clear about swarm.addrfilters (#9661) (ipfs/kubo#9661)
- chore: update go-libp2p to v0.26 (#9656) (ipfs/kubo#9656)
- feat(pinning): connect some missing go context (#9557) (ipfs/kubo#9557)
- fix(gateway): return HTTP 500 on ErrResolveFailed (#9589) (ipfs/kubo#9589)
- docs: bulk spelling edits (#9544) (ipfs/kubo#9544)
- docs: "remote" errors from resource manager (#9653) (ipfs/kubo#9653)
- test: remove gateway tests migrated to go-libipfs
- fix: update rcmgr for go-libp2p v0.25
- chore: update go-libp2p to v0.25.1
- docs(0.18.1): guide users to clean up limits (#9644) (ipfs/kubo#9644)
- feat: add NewOptionalInteger function
- fix: dereference int64 pointer in OptionalInteger.String() (#9640) (ipfs/kubo#9640)
- fix: restore wire format for /api/v0/routing/get|put (#9639) (ipfs/kubo#9639)
- refactor(gw): move Host (DNSLink and subdomain) handling to go-libipfs (#9624) (ipfs/kubo#9624)
- refactor: new go-libipfs/gateway API, deprecate Gateway.Writable (#9616) (ipfs/kubo#9616)
- Create Changelog: v0.19 (ipfs/kubo#9617)
- refactor: use gateway from go-libipfs (#9588) (ipfs/kubo#9588)
- Merge Release: v0.18.1 (ipfs/kubo#9613)
- Add overview section
- Adjust inbound connection limits depending on memory.
- feat: ipfs-webui 2.22.0
- chore: bump go-libipfs remove go-bitswap
- docs: DefaultResourceMgrMinInboundConns
- feat(gateway): IPNS record response format (IPIP-351) (#9399) (ipfs/kubo#9399)
- fix(ipns): honour --ttl flag in 'ipfs name publish' (#9471) (ipfs/kubo#9471)
- feat: Pubsub.SeenMessagesStrategy (#9543) (ipfs/kubo#9543)
- chore: bump go-libipfs to replace go-block-format
- Merge Kubo: v0.18 (ipfs/kubo#9581)
- fix: clarity: no user supplied rcmgr limits of 0 (#9563) (ipfs/kubo#9563)
- fix(gateway): undesired conversions to dag-json and friends (#9566) (ipfs/kubo#9566)
- fix: ensure connmgr is smaller then autoscalled ressource limits
- fix: typo in ensureConnMgrMakeSenseVsResourcesMgr
- docs: clarify browser descriptions for webtransport
- fix: update saxon download path
- fix: refuse to start if connmgr is smaller than ressource limits and not using none connmgr
- fix: User-Agent sent to HTTP routers
- test: port gateway sharness tests to Go tests
- fix: do not download saxon in parallel
- docs: improve docs/README (#9539) (ipfs/kubo#9539)
- test: port CircleCI to GH Actions and improve sharness reporting (#9355) (ipfs/kubo#9355)
- chore: migrate from go-ipfs-files to go-libipfs/files (#9535) (ipfs/kubo#9535)
- fix: stats dht command when Routing.Type=auto (#9538) (ipfs/kubo#9538)
- fix: hint people to changing from RSA peer ids
- fix(gateway): JSON when Accept is a list
- fix(test): retry flaky t0125-twonode.sh
- docs: fix Router config Godoc (#9528) (ipfs/kubo#9528)
- fix(ci): flaky sharness test
- docs(config): Provi...
v0.19.0-rc1
Changelog: docs/changelogs/v0.19.md
v0.18.1
🔦 Highlights
New default Pubsub.SeenMessagesStrategy
A new optional Pubsub.SeenMessagesStrategy
configuration option has been added.
This option allows you to choose between two different strategies for
deduplicating messages: first-seen
and last-seen
.
When unset, the default strategy is last-seen
, which calculates the
time-to-live (TTL) countdown based on the last time a message is seen. This
means that if a message is received and then seen again within the specified
TTL window based on the last time it was seen, it won't be emitted.
If you prefer the old behavior, which calculates the TTL countdown based on the
first time a message is seen, you can set Pubsub.SeenMessagesStrategy
to
first-seen
.
Improving libp2p resource management integration
This builds on the default protection nodes get against DoS (resource exhaustion) and eclipse attacks
with the go-libp2p Network Resource Manager/Accountant
that was fine-tuned in Kubo 0.18.
Adding default hard-limits from the Resource Manager/Accountant after the fact is tricky,
and some additional improvements have been made to improve the computed defaults.
As much as possible, the aim is for a user to only think about how much memory they want to bound libp2p to,
and not need to think about translating that to hard numbers for connections, streams, etc.
More updates are likely in future Kubo releases, but with this release:
System.StreamsInbound
is no longer bounded directlySystem.ConnsInbound
,Transient.Memory
,Transiet.ConnsInbound
have higher default computed values.
Changelog
Full Changelog
- github.com/ipfs/kubo:
- Add overview section
- Adjust inbound connection limits depending on memory.
- feat: Pubsub.SeenMessagesStrategy (#9543) (ipfs/kubo#9543)
- chore: update version
- github.com/libp2p/go-libp2p-pubsub (v0.8.2 -> v0.8.3):
- feat: expire messages from the cache based on last seen time (#513) (libp2p/go-libp2p-pubsub#513)
Contributors
Contributor | Commits | Lines ± | Files Changed |
---|---|---|---|
Mohsin Zaidi | 2 | +511/-55 | 12 |
Antonio Navarro Perez | 2 | +57/-57 | 5 |
galargh | 1 | +1/-1 | 1 |
v0.18.0
- 🎤 Discuss
- 🔦 Highlights
- 📝 Changelog
- 👨👩👧👦 Contributors
🔦 Highlights
Content routing
Default InterPlanetary Network Indexer
Content routing is the process of discovering which peers provide a piece of content. Kubo has traditionally only supported libp2p's implementation of Kademlia DHT for content routing.
Kubo can now bridge networks by including support for the delegated routing HTTP API. Users can compose content routers using the Routing.Routers
config to pick content routers with different tradeoffs than a Kademlia DHT (e.g., high-performance and high-capacity centralized endpoints, dedicated Kademlia DHT nodes, routers with unique provider records, privacy-focused content routers).
One example is InterPlanetary Network Indexers, which are HTTP endpoints that cache records from both the IPFS network and other sources such as web3.storage and Filecoin. This improves not only content availability by enabling Kubo to transparently fetch content directly from Filecoin storage providers, but also improves IPFS content routing latency by an order of magnitude and decreases resource consumption.
Note: it's possible to retrieve content stored by Filecoin Storage Providers (SPs) from Kubo if the SPs service Bitswap requests. As of this release, some SPs are advertising Bitswap. You can follow the roadmap progress for IPNIs and Bitswap in SPs here.
In this release, the default content router is changed from dht
to auto
. The auto
router includes the IPFS DHT in addition to the cid.contact IPNI instance. In future releases, we plan to expand the functionality of auto
to encompass automatic discovery of content routers, which will improve performance and content availability (for example, see IPIP-342).
Previous behavior can be restored by setting Routing.Type
to dht
.
Alternative routing rules, including alternative IPNI endpoints, can be configured in Routing.Routers
after setting Routing.Type
to custom
.
Learn more in the Routing
docs.
Increase provider record republish interval and expiration
Default Reprovider.Interval
changed from 12h to 22h to match new defaults for the Provider Record Expiration (48h) in go-libp2p-kad-dht v0.20.0.
The rationale for increasing this can be found in
RFM 17: Provider Record Livenes Report,
kubo#9326,
and the upstream DHT specifications at libp2p/specs#451.
Learn more in the Reprovider
config.
Gateways
(DAG-)JSON and (DAG-)CBOR response formats
The IPFS project has reserved the corresponding media types at IANA:
This release implements them as part of IPIP-328
and adds Gateway support for CIDs with json
(0x0200), cbor
(0x51),
dag-json
(0x0129)
and dag-cbor
(0x71) codecs.
To specify the response Content-Type
explicitly, the HTTP client can override
the codec present in the CID by using the format
parameter
or setting the Accept
HTTP header:
- Plain JSON:
?format=json
orAccept: application/json
- Plain CBOR:
?format=cbor
orAccept: application/cbor
- DAG-JSON:
?format=dag-json
orAccept: application/vnd.ipld.dag-json
- DAG-CBOR:
?format=dag-cbor
orAccept: application/vnd.ipld.dag-cbor
In addition, when DAG-JSON or DAG-CBOR is requested with the Accept
header
set to text/html
, the Gateway will return a basic HTML page with download
options, improving the user experience in web browsers.
Example 1: DAG-CBOR and DAG-JSON Conversion on Gateway
The Gateway supports conversion between DAG-CBOR and DAG-JSON for efficient
end-to-end data structure management: author in CBOR or JSON, store as binary
CBOR and retrieve as JSON via HTTP:
$ echo '{"test": "json"}' | ipfs dag put # implicit --input-codec dag-json --store-codec dag-cbor
bafyreico7mjtqtqhvawro3yud5uqn6sc33nzqb7b5j2d7pdmzer5nab4t4
$ ipfs block get bafyreico7mjtqtqhvawro3yud5uqn6sc33nzqb7b5j2d7pdmzer5nab4t4 | xxd
00000000: a164 7465 7374 646a 736f 6e .dtestdjson
$ ipfs dag get bafyreico7mjtqtqhvawro3yud5uqn6sc33nzqb7b5j2d7pdmzer5nab4t4 # implicit --output-codec dag-json
{"test":"json"}
$ curl "http://127.0.0.1:8080/ipfs/bafyreico7mjtqtqhvawro3yud5uqn6sc33nzqb7b5j2d7pdmzer5nab4t4?format=dag-json"
{"test":"json"}
Example 2: Traversing CBOR DAGs
Placing a CID in CBOR Tag 42 enables the
creation of arbitrary DAGs. The equivalent DAG-JSON notation for linking
to different blocks is represented by { "/": "cid" }
.
The Gateway supports traversing these links, enabling access to data
referenced by structures other than regular UnixFS directories:
$ echo '{"test.jpg": {"/": "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi"}}' | ipfs dag put
bafyreihspwy3zlkzgphmec5d3xb5g5njrqwotd46lyubnelbzktnmsxkq4 # dag-cbor document linking to unixfs file
$ ipfs resolve /ipfs/bafyreihspwy3zlkzgphmec5d3xb5g5njrqwotd46lyubnelbzktnmsxkq4/test.jpg
/ipfs/bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi
$ ipfs dag stat bafyreihspwy3zlkzgphmec5d3xb5g5njrqwotd46lyubnelbzktnmsxkq4
Size: 119827, NumBlocks: 2
$ curl "http://127.0.0.1:8080/ipfs/bafyreihspwy3zlkzgphmec5d3xb5g5njrqwotd46lyubnelbzktnmsxkq4/test.jpg" > test.jpg
Example 3: UnixFS directory listing as JSON
Finally, Gateway now supports the same logical format projection from
DAG-PB to DAG-JSON as the ipfs dag get
command, enabling the retrieval of directory listings as JSON instead of HTML:
$ export DIR_CID=bafybeigccimv3zqm5g4jt363faybagywkvqbrismoquogimy7kvz2sj7sq
$ curl -H "Accept: application/vnd.ipld.dag-json" "http://127.0.0.1:8080/ipfs/$DIR_CID" | jq
$ curl "http://127.0.0.1:8080/ipfs/$DIR_CID?format=dag-json" | jq
{
"Data": {
"/": {
"bytes": "CAE"
}
},
"Links": [
{
"Hash": {
"/": "Qmc3zqKcwzbbvw3MQm3hXdg8BQoFjGdZiGdAfXAyAGGdLi"
},
"Name": "1 - Barrel - Part 1 - alt.txt",
"Tsize": 21
},
{
"Hash": {
"/": "QmdMxMx29KVYhHnaCc1icWYxQqXwUNCae6t1wS2NqruiHd"
},
"Name": "1 - Barrel - Part 1 - transcript.txt",
"Tsize": 195
},
{
"Hash": {
"/": "QmawceGscqN4o8Y8Fv26UUmB454kn2bnkXV5tEQYc4jBd6"
},
"Name": "1 - Barrel - Part 1.png",
"Tsize": 24862
}
]
}
$ ipfs dag get $DIR_CID
{"Data":{"/":{"bytes":"CAE"}},"Links":[{"Hash":{"/":"Qmc3zqKcwzbbvw3MQm3hXdg8BQoFjGdZiGdAfXAyAGGdLi"},"Name":"1 - Barrel - Part 1 - alt.txt","Tsize":21},{"Hash":{"/":"QmdMxMx29KVYhHnaCc1icWYxQqXwUNCae6t1wS2NqruiHd"},"Name":"1 - Barrel - Part 1 - transcript.txt","Tsize":195},{"Hash":{"/":"QmawceGscqN4o8Y8Fv26UUmB454kn2bnkXV5tEQYc4jBd6"},"Name":"1 - Barrel - Part 1.png","Tsize":24862}]}
🐎 Fast directory listings with DAG sizes
Fast listings are now enabled for all UnixFS directories: big and small.
There is no linear slowdown caused by reading size metadata from child nodes,
and the size of DAG representing child items is always present.
As an example, the CID
bafybeiggvykl7skb2ndlmacg2k5modvudocffxjesexlod2pfvg5yhwrqm
represents a UnixFS
directory with over 10k files. Listing big directories was fast
since Kubo 0.13, but in this release it will also include the size column.
QUIC and WebTransport
WebTransport enabled by default
WebTransport is a new libp2p transport that was introduced in v0.16 that is based on top of QUIC and HTTP3.
This allows browser-based nodes to contact Kub...
v0.18.0-rc2
See the related issue: #9417
And the draft changelog: docs/changelogs/v0.18.md
v0.18.0-rc1
See the related issue: #9417
And the draft changelog: docs/changelogs/v0.18.md
v0.17.0
🗣 Discuss
If you have comments, questions, or feedback on this release, please post here.
If you experienced any bugs with the release, please post an issue.
🔦 Highlights
libp2p resource management enabled by default
To help protect nodes from DoS (resource exhaustion) and eclipse attacks,
go-libp2p released a Network Resource Manager with a host of improvements throughout 2022.
Kubo first exposed this functionality in Kubo 0.13,
but it was disabled by default.
The resource manager is now enabled by default to protect nodes.
The defaults balance providing protection from various attacks while still enabling normal usecases to work as expected.
If you want to adjust the defaults, then you can:
- bound the amount of memory and file descriptors that libp2p will use with Swarm.ResourceMgr.MaxMemory
and Swarm.ResourceMgr.MaxFileDescriptors and/or - override any specific resource scopes/limits with Swarm.ResourceMgr.Limits
See Swarm.ResourceMgr for
- what limits are set by default,
- example override configuration,
- how to access prometheus metrics and view grafana dashboards of resource usage, and
- how to set explicit "allow lists" to protect against eclipse attacks.
Implicit connection manager limits
Starting with this release, ipfs init
will no longer store the default
Connection Manager
limits in the user config under Swarm.ConnMgr
.
Users are still free to use this setting to set custom values, but for most use
cases, the defaults provided with the latest Kubo release should be sufficient.
To remove any custom limits and switch to the implicit defaults managed by Kubo:
$ ipfs config --json Swarm.ConnMgr '{}'
We will be adjusting defaults in the future releases.
TAR Response Format on Gateways
Implemented IPIP-288 which adds
support for requesting deserialized UnixFS directory as a TAR stream.
HTTP clients can request TAR response by passing the ?format=tar
URL
parameter, or setting Accept: application/x-tar
HTTP header:
$ export DIR_CID=bafybeigccimv3zqm5g4jt363faybagywkvqbrismoquogimy7kvz2sj7sq
$ curl -H "Accept: application/x-tar" "http://127.0.0.1:8080/ipfs/$DIR_CID" > dir.tar
$ curl "http://127.0.0.1:8080/ipfs/$DIR_CID?format=tar" | tar xv
bafybeigccimv3zqm5g4jt363faybagywkvqbrismoquogimy7kvz2sj7sq
bafybeigccimv3zqm5g4jt363faybagywkvqbrismoquogimy7kvz2sj7sq/1 - Barrel - Part 1 - alt.txt
bafybeigccimv3zqm5g4jt363faybagywkvqbrismoquogimy7kvz2sj7sq/1 - Barrel - Part 1 - transcript.txt
bafybeigccimv3zqm5g4jt363faybagywkvqbrismoquogimy7kvz2sj7sq/1 - Barrel - Part 1.png
Dialling /wss
peer behind a reverse proxy
This release resolves a regression introduced in Kubo 0.16, making it possible
again to connect to a peer over a WebSockets endpoint (/wss
) that is
deployed behind a reverse proxy.
More details in go-libp2p release notes.
Changelog
Full Changelog
- github.com/ipfs/kubo:
- chore: bump version to v0.17.0 (ipfs/kubo#9427)
- chore: bump version to v0.17.0-rc2 (ipfs/kubo#9414)
- Doc improvements and changelog for resource manager (#9413) (ipfs/kubo#9413)
- fix(docs): typo
- docs: document /wss fixes in 0.17
- refactor(config): remove Swarm.ConnMgr defaults
- fix(config): skip nulls in ResourceMgr
- Apply go fmt
- Update core/node/libp2p/rcmgr_defaults.go
- Remove limitation by HighWater param.
- Fix RM errors when acceleratedDHT is active
- docs: Deprecate Reframe on docs. (#9401) (ipfs/kubo#9401)
- chore: bump version to v0.17.0-rc1 (ipfs/kubo#9394)
- feat: Improve ResourceManager UX (#9338) (ipfs/kubo#9338)
- feat: ipfs-webui 2.20.0
- docs: note log tail is broken (#9383) (ipfs/kubo#9383)
- feat(gateway): TAR response format (#9029) (ipfs/kubo#9029)
- fix: error when using huge json limit file
- chore: go-multicodec v0.7.0
- fix: remove old unused buggy coredag code
- feat: Add command line completion for fish
- chore: delete snap configuration (ipfs/kubo#9352)
- docs: update scoop package
- docs: init release issue template improvement process v0.16.0 (ipfs/kubo#9283)
- feat: add delegated routing metrics (#9354) (ipfs/kubo#9354)
- chore: create v0.17.md changelog (ipfs/kubo#9353)
- docs: pin remote arg
- feat: [email protected]
- test(car): export/import of (dag-)cbor/json codecs
- add refs local alias repo ls (#9320) (ipfs/kubo#9320)
- docs(cmds): Clarify block fetching of refs endpoint.
- chore(cmds): dag import: use ipld legacy decode (ipfs/kubo#9219)
- fix ipfs swarm peering crash in offline mode (#9261) (ipfs/kubo#9261)
- feat: remove provider delay interval in bitswap (#9053) (ipfs/kubo#9053)
- feat: --reset flag on swarm limit command (#9310) (ipfs/kubo#9310)
- fix: add InlineDNSLink flag to PublicGateways config (#9328) (ipfs/kubo#9328)
- docs: Fix typo and grammar in README
- ci: add stylecheck to golangci-lint (#9334) (ipfs/kubo#9334)
- Fix:
swarm stats all
command - Merge release v0.16.0 back into master (ipfs/kubo#9324)
- fix: Set default Methods value to nil
- docs: add WebTransport docs (ipfs/kubo#9314)
- chore: bump version to 0.17.0-dev
- github.com/ipfs/go-delegated-routing (v0.6.0 -> v0.7.0):
- Release v0.7.0
- feat: add latency & count metrics for content routing client (#59) (ipfs/go-delegated-routing#59)
- docs: add basic readme (ipfs/go-delegated-routing#57)
- sync: update CI config files (ipfs/go-delegated-routing#40)
- added link to reframe blog post (#54) (ipfs/go-delegated-routing#54)
- github.com/ipfs/go-ipfs-files (v0.1.1 -> v0.2.0):
- Release v0.2.0
- fix: error when TAR has files outside of root (#56) (ipfs/go-ipfs-files#56)
- sync: update CI config files (ipfs/go-ipfs-files#55)
- chore(Directory): add DirIterator API restriction: iterate only once
- github.com/ipfs/go-unixfs (v0.4.0 -> v0.4.1):
- Update version.json
- Fix: panic when childer is nil (#127) (ipfs/go-unixfs#127)
- sync: update CI config files (#125) (ipfs/go-unixfs#125)
- github.com/ipld/go-ipld-prime (v0.18.0 -> v0.19.0):
- Prepare v0.19.0
- fix: correct json codec links & bytes handling
- test(basicnode): increase test coverage for int and map types (#454) (ipld/go-ipld-prime#454)
- fix: remove reliance on ioutil
- run gofmt -s
- bump go.mod to Go 1.18 and run go fix
- feat: add kinded union to gendemo
- github.com/libp2p/go-libp2p (v0.23.2 -> v0.23.4):
- Release v0.23.4 (#1864) (libp2p/go-libp2p#1864)
- release v0.23.3
- websocket: set the HTTP host header in WSS
- github.com/libp2p/go-netroute (v0.2.0 -> v0.2.1):
- v0.2.1 (libp2p/go-netroute#27)
- fix(phys-addr-length): fix physical address length mismatch (libp2p/go-netroute#29)
- compare priority if route rule's dst mask is same size
- compare priority if route rule's dst mask is same size
- sync: update CI config files (#24) (libp2p/go-netroute#24)
- github.com/marten-seemann/qpack (v0.2.1 -> v0.3.0):
- update to Ginkgo v2 (#30) ...
v0.17.0-rc2
See the related issue: #9319
And the draft changelog: docs/changelogs/v0.17.md
v0.17.0-rc1
See the related issue: #9319
And the draft changelog: docs/changelogs/v0.17.md
v0.16.0
🗣 Discuss
If you have comments, questions, or feedback on this release, please post here.
If you experienced any bugs with the release, please post an issue.
🔦 Highlights
🛣️ More configurable delegated routing system
Since Kubo v0.14.0 Reframe protocol has been supported as a new routing system.
Now, we allow to configure several routers working together, so you can have several reframe
and dht
routers making queries. You can use the special parallel
and sequential
routers to fill your needs.
Example configuration usage using the Filecoin Network Indexer and the DHT, making first a query to the indexer, and timing out after 3 seconds.
$ ipfs config Routing.Type --json '"custom"'
$ ipfs config Routing.Routers.CidContact --json '{
"Type": "reframe",
"Parameters": {
"Endpoint": "https://cid.contact/reframe"
}
}'
$ ipfs config Routing.Routers.WanDHT --json '{
"Type": "dht",
"Parameters": {
"Mode": "auto",
"PublicIPNetwork": true,
"AcceleratedDHTClient": false
}
}'
$ ipfs config Routing.Routers.ParallelHelper --json '{
"Type": "parallel",
"Parameters": {
"Routers": [
{
"RouterName" : "CidContact",
"IgnoreErrors" : true,
"Timeout": "3s"
},
{
"RouterName" : "WanDHT",
"IgnoreErrors" : false,
"Timeout": "5m",
"ExecuteAfter": "2s"
}
]
}
}'
$ ipfs config Routing.Methods --json '{
"find-peers": {
"RouterName": "ParallelHelper"
},
"find-providers": {
"RouterName": "ParallelHelper"
},
"get-ipns": {
"RouterName": "ParallelHelper"
},
"provide": {
"RouterName": "WanDHT"
},
"put-ipns": {
"RouterName": "ParallelHelper"
}
}'
🌍 WebTransport new experimental Transport
A new feature of go-libp2p
is WebTransport.
For now it is disabled by default and considered experimental.
If you find issues running it please report them to us.
In the future Kubo will listen on WebTransport by default for anyone already listening on QUIC addresses.
WebTransport is a new transport protocol currently under development by the IETF and the W3C, and already implemented by Chrome.
Conceptually, it’s like WebSocket run over QUIC instead of TCP. Most importantly, it allows browsers to establish (secure!) connections to WebTransport servers without the need for CA-signed certificates,
thereby enabling any js-libp2p node running in a browser to connect to any kubo node, with zero manual configuration involved.
The previous alternative is websocket secure, which require installing a reverse proxy and TLS certificates manually.
How to enable WebTransport
Thoses steps are temporary and wont be needed once we make it enabled by default.
- Enable the WebTransport transport:
ipfs config Swarm.Transports.Network.WebTransport --json true
- Add a listener address for WebTransport to your
Addresses.Swarm
key, for example:[ "/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/udp/4001/quic", "/ip4/0.0.0.0/udp/4002/quic/webtransport" ]
- Restart your daemon to apply the config changes.
🗃️ Hardened IPNS record verification
Records that do not have a valid IPNS V2 signature, or exceed the max size
limit, will no longer pass verification, and will be ignored by Kubo when
resolving /ipns/{libp2p-key}
content paths.
Kubo continues publishing backward-compatible V1+V2 records that can be
resolved by V1-only (go-ipfs <0.9.0) clients.
More details can be found in Backward Compatibility, Record Creation, and
Record Verification sections of the updated IPNS
specification.
🌉 Web Gateways now support _redirects
files
This feature enables support for redirects, single-page applications (SPA),
custom 404 pages, and moving to IPFS-backed website hosting
without breaking existing HTTP links.
It is limited to websites hosted in web contexts with unique
Origins, such as
subdomain and
DNSLink gateways.
Redirect logic is evaluated only if the requested path is not in the DAG.
See more details and usage examples see
docs.ipfs.tech: Redirects, custom 404s, and SPA support.
😻 Add files to MFS with ipfs add --to-files
Users no longer need to call ipfs files cp
after ipfs add
to create a
reference in MFS, or deal with
low level pins if they do not wish to do so. It is now possible to pass MFS
path in an optional --to-files
to add data directly to MFS, without creating
a low level pin.
Before (Kubo <0.16.0):
$ ipfs add cat.jpg
QmCID
$ ipfs files cp /ipfs/QmCID /mfs-cats/cat.jpg
$ ipfs pin rm QmCID # removing low level pin, since MFS is protecting from gc
Kubo 0.16.0 collapses the above steps into one:
$ ipfs add --pin=false cat.jpg --to-files /mfs-cats/
A recursive add to MFS works too (below line will create /lots-of-cats/
directory in MFS):
$ ipfs add -r ./lots-of-cats/ --to-files /
For more information, see ipfs add --help
and ipfs files --help
.
Changelog
Full Changelog
- github.com/ipfs/kubo:
- fix: Set default Methods value to nil
- docs: document remaining 0.16.0 features
- docs: add WebTransport docs (ipfs/kubo#9308)
- chore: bump version to 0.16.0-rc1
- fix: ensure hasher is registered when using a hashing function
- feat: add webtransport as an optin transport (ipfs/kubo#9293)
- feat(gateway): _redirects file support (#8890) (ipfs/kubo#8890)
- docs: fix typo in changelog-v0.16.0.md
- Readme: Rewrite introduction and featureset (#9211) (ipfs/kubo#9211)
- feat: Delegated routing with custom configuration. (#9274) (ipfs/kubo#9274)
- Add to
ipfs id -h
options (#9229) (ipfs/kubo#9229) - chore: bump go-libp2p v0.23.1 (ipfs/kubo#9285)
- feat(cmds/add): --to-files option automates files cp (#8927) (ipfs/kubo#8927)
- docs: fix broken ENS DoH example (#9281) (ipfs/kubo#9281)
- (ipfs/kubo#9258)
- (ipfs/kubo#9213)
- docs: small typo in Dockerfile
- feat: ipfs-webui v2.18.1
- feat: ipfs-webui v2.18.0 (#9262) (ipfs/kubo#9262)
- bump go-libp2p v0.22.0 & go1.18&go1.19 (ipfs/kubo#9244)
- docs: change windows choco install command to point to go-ipfs
- fix: pass the repo directory into the ignored_commit function
- docs(cmds): daemon: update DHTClient description
- fix(gw): send 200 for empty files
- docs(readme): official vs unofficial packages
- chore: remove Gateway.PathPrefixes
- docs(readme): update Docker section
- docs: fix markdown syntax typo in v0.15's changelog
- chore: Release v0.15.0 (ipfs/kubo#9236)
- chore: fix undiallable api and gateway files (ipfs/kubo#9233)
- chore: Bump version to 0.16.0-dev
- github.com/ipfs/go-bitswap (v0.9.0 -> v0.10.2):
- chore: release v0.10.2
- fix: create a copy of the protocol slice in network.processSettings
- chore: release v0.10.1
- fix: incorrect type in the WithTracer polyfill option
- chore: fix incorrect log message when a bad option is passed
- chore: release v0.10.0
- chore: update go-libp2p v0.22.0
- github.com/ipfs/go-cid (v0.2.0 -> v0.3.2):
- chore: release v0.3.2
- Revert "fix: bring back, but deprecate CodecToStr and Codecs"
- chore: release v0.2.1
- fix: bring back, but deprecate CodecToStr and Codecs
- run gofmt -s
- bump go.mod to Go 1.18 and run go fix
- chore: release v0.3.0
- fix: return nil Bytes() if the Cid in undef
- Add MustParse (ipfs/go-cid#139)
- github.com/ipfs/go-datastore (v0.5.1 -> v0.6.0)...