Releases: ipfs/boxo
Releases · ipfs/boxo
v0.23.0
Added
files
,ipld/unixfs
,mfs
andtar
now support optional UnixFS 1.5 mode and modification time metadata #653gateway
deserialized responses will haveLast-Modified
set to value from optional UnixFS 1.5 modification time field (if present in DAG) and a matchingIf-Modified-Since
will return304 Not Modified
(UnixFS 1.5 files only) #659
Changed
- updated Go in
go.mod
to 1.22 #661 - updated go-libp2p to v0.36.3
chunker
refactored to reduce overall memory use by reducing heap fragmentation #649bitswap/server
minor performance improvements in concurrent operations #666- removed dependency on go-ipfs-blocksutil #656
Full Changelog: v0.22.0...v0.23.0
v0.22.0
What's Changed
Changed
go-libp2p
dependency updated to v0.36 (release notes)bitswap/server
minor memory use and performance improvements #634bitswap/server
PeerLedger.Wants
now returnsbool
(interface change fromWants(p peer.ID, e wl.Entry)
toWants(p peer.ID, e wl.Entry) bool
) #629bitswap
unify logger names to use uniform format bitswap/path/pkgname #637gateway
now always returns meaningful cache-control headers for generated HTML listings of UnixFS directories #643util
generate random test data usingipfs/go-test
instead of internal util code #638
Fixed
boxo/gateway
now correctly returns 404 Status Not Found instead of 500 when the requested content cannot be found due to offline exchange, gateway running in no-fetch (non-recursive) mode, or a similar restriction that only serves a specific set of CIDs. #630bitswap/client
fix memory leak in BlockPresenceManager due to unlimited map growth. #636bitswap/network
fixed race condition when a timeout occurred before hole punching completed while establishing a first-time stream to a peer behind a NAT #651bitswap
: wantlist overflow handling now cancels existing entries to make room for newer entries. This fix prevents the wantlist from filling up with CIDs that the server does not have. #629
New Contributors
- @stensonb made their first contribution in #635
- @omahs made their first contribution in #642
- @2color made their first contribution in #651
Full Changelog: v0.21.0...v0.22.0
v0.21.0
Changed
boxo/gateway
is now tested against gateway-conformance v0.6bitswap/client
supports additional tracing
Removed
- 🛠
routing/none
removedConstructNilRouting
, if you need this functionality, you can use theNull
Router from go-libp2p-routing-helpers.
Fixed
routing/http
: theFindPeer
now returnsrouting.ErrNotFound
when no addresses are foundrouting/http
: theFindProvidersAsync
no longer causes a goroutine buildup
Full Changelog: v0.20.0...v0.21.0
v0.20.0
Added
- ✨
gateway
has new backend possibilities:NewRemoteBlocksBackend
allows you to create a gateway backend that uses one or multiple other gateways as backend. These gateways must support RAW block requests (application/vnd.ipld.raw
), as well as IPNS Record requests (application/vnd.ipfs.ipns-record
). With this, we also introducedNewCacheBlockStore
,NewRemoteBlockstore
andNewRemoteValueStore
.NewRemoteCarBackend
allows you to create a gateway backend that uses one or multiple Trustless Gateways as backend. These gateways must support CAR requests (application/vnd.ipld.car
), as well as the extensions describe in IPIP-402. With this, we also introducedNewCarBackend
,NewRemoteCarFetcher
andNewRetryCarFetcher
.
gateway
now sets theContent-Location
header for requests with non-default content format, as a result of content negotiation. This allows generic and misconfigured HTTP caches to store Deserialized, CAR and Block responses separately, under distinct cache keys.gateway
now supportscar-dups
,car-order
andcar-version
as query parameters in addition to theapplication/vnd.ipld.car
parameters sent viaAccept
header. The parameters in theAccept
header have always priority, but including them in URL simplifies HTTP caching and allows use inContent-Location
header on CAR responses to maximize interoperability with wide array of HTTP caches.bitswap/server
now allows to override the default peer ledger withWithPeerLedger
.
Fixed
routing/http/server
now returns 404 Status Not Found when no records can be found.routing/http/server
now supports legacy RSA PeerIDs encoded as Base58 Multihash
What's Changed
- Merge release v0.18.0 by @hacdias in #582
- docs: use tag link instead of branch by @hacdias in #583
- fix(routing/http): support lookups with legacy peerid notation by @lidel in #585
- routing/http/server: add cache control by @hacdias in #584
- chore: go 1.21 by @hacdias in #588
- ci: uci/update-go by @web3-bot in #589
- ipns: fix test by using global random reader by @hacdias in #586
- ci: uci/copy-templates by @web3-bot in #590
- feat(routing/http/server): improve ux of /ipns by @lidel in #596
- bitswap: add missing client options to exchange by @hacdias in #597
- provider: prioritize roots and introduce NewPrioritizedProvider by @hacdias in #595
- Release v0.19.0 by @hacdias in #598
Full Changelog: v0.18.0...v0.20.0
v0.19.0
Added
routing/http/server
now addsCache-Control
HTTP header to GET requests: 15 seconds for empty responses, or 5 minutes for responses with providers.routing/http/server
the/ipns
endpoint is more friendly to users opening URL in web browsers: returnsContent-Disposition
header and defaults toapplication/vnd.ipfs.ipns-record
response whenAccept
is missing.provider
:- Exports a
NewPrioritizedProvider
, which can be used to prioritize certain providers while ignoring duplicates. - 🛠️
NewPinnedProvider
now prioritizes root blocks, even ifonlyRoots
is set tofalse
.
- Exports a
Changed
go
version changed to 1.21
Fixed
- 🛠️
routing/http/server
: delegated peer routing endpoint now supports both PeerID string notaitons from libp2p specs. bitswap
: add missing clientWithBlockReceivedNotifier
andWithoutDuplicatedBlockStats
options to the exchange.
Full Changelog: v0.18.0...v0.19.0
v0.18.0
Added
blockservice
now hasContextWithSession
andEmbedSessionInContext
functions, which allows to embed a session in a context. Future calls toBlockGetter.GetBlock
,BlockGetter.GetBlocks
andNewSession
will use the session in the context.blockservice.NewWritethrough
deprecated function has been removed, instead you can doblockservice.New(..., ..., WriteThrough())
like previously.gateway
: a new header configuration middleware has been added to replace the existing header configuration, which can be used more generically.namesys
now has aWithMaxCacheTTL
option, which allows you to define a maximum TTL that will be used for caching IPNS entries.
Fixed
- 🛠
boxo/gateway
: when making a trustless CAR request with the "entity-bytes" parameter, using a negative index greater than the underlying entity length could trigger reading more data than intended - 🛠
boxo/gateway
: the header configurationConfig.Headers
andAddAccessControlHeaders
has been replaced by the new middleware provided byNewHeaders
. - 🛠
routing/http/client
: the default HTTP client is no longer a global singleton. Therefore, usingWithUserAgent
won't modify the user agent of existing routing clients. This will also prevent potential race conditions. In addition, incompatible options will now return errors instead of silently failing.
What's Changed
- Merge Release v0.16.0 by @hacdias in #519
- all: run perfsprint by @Jorropo in #521
- gateway/assets: process each template and ETag hash in parallel by @Jorropo in #530
- Update tracing.md by @0xbasar in #531
- blockservice: fix panic when closing an offline blockservice by @Jorropo in #533
- feat(pinning): add support for names by @hacdias in #525
- chore: update otlp by @Jorropo in #532
- feat(pinning): pinning existing CID with different name updates pin by @hacdias in #537
- chore: update dependencies by @hacdias in #541
- Release v0.17.0 by @hacdias in #542
New Contributors
Full Changelog: v0.16.0...v0.18.0
v0.17.0
Added
- 🛠
pinning/pinner
: you can now give a custom name when pinning a CID. To reflect this, thePinner
has been adjusted. Note that callingPin
for the same CID with a different name will replace its current name by the newly given name.
Removed
- 🛠
tracing
jaeger
exporter has been removed due to it's deprecation and removal from upstream, you should useotlp
exporter instead. See the docs for an example.
What's Changed
- Merge Release v0.16.0 by @hacdias in #519
- all: run perfsprint by @Jorropo in #521
- gateway/assets: process each template and ETag hash in parallel by @Jorropo in #530
- Update tracing.md by @0xbasar in #531
- blockservice: fix panic when closing an offline blockservice by @Jorropo in #533
- feat(pinning): add support for names by @hacdias in #525
- chore: update otlp by @Jorropo in #532
- feat(pinning): pinning existing CID with different name updates pin by @hacdias in #537
- chore: update dependencies by @hacdias in #541
New Contributors
Full Changelog: v0.16.0...v0.17.0
v0.16.0
Changed
- 🛠
boxo/namesys
: now fails when multiple valid DNSLink entries are found for the same domain. This used to cause undefined behavior before. Now, we return an error, according to the specification.
Removed
- 🛠
boxo/gateway
: removed support for undocumented legacyipfs-404.html
. Use_redirects
instead. - 🛠
boxo/namesys
: removed support for legacy DNSLink entries at the root of the domain. Use_dnslink.
TXT record instead. - 🛠
boxo/coreapi
, an intrinsic part of Kubo, has been removed and moved tokubo/core/coreiface
.
Fixed
boxo/gateway
- a panic (which is recovered) could sporadically be triggered inside a CAR request, if the right conditions were met.
- no longer emits
http: superfluous response.WriteHeader
warnings when an error happens.
What's Changed
- Merge Release v0.15.0 by @hacdias in #506
- feat: remove support for legacy ipfs-404.html by @hacdias in #509
- fix: gateway panic because of overshadowed err by @hacdias in #511
- fix(namesys): handling of multiple DNSLink TXT records by @hacdias in #510
- fix: all go-log import to v2 by @Dreamacro in #513
- bitswap/client: explain what the options do by @hsanjuan in #488
- fix(gateway): do not act on template errors by @hacdias in #515
- coreiface: remove and move to Kubo by @hacdias in #517
New Contributors
- @Dreamacro made their first contribution in #513
Full Changelog: v0.15.0...v0.16.0
v0.15.0
Changed
- 🛠 Bumped to
go-libp2p
0.32.
What's Changed
- Merge Release v0.14.0 by @hacdias in #501
- chore: bump to [email protected] by @hacdias in #503
Full Changelog: v0.14.0...v0.15.0
v0.14.0
Added
boxo/gateway
:- A new
WithResolver(...)
option can be used withNewBlocksBackend(...)
allowing the user to pass their customResolver
implementation. - The gateway now sets a
Cache-Control
header for requests under the/ipns/
namespace if the TTL for the corresponding IPNS Records or DNSLink entities is known.
- A new
boxo/bitswap/client
:- A new
WithoutDuplicatedBlockStats()
option can be used withbitswap.New
andbsclient.New
. This disable accounting for duplicated blocks, which requires ablockstore.Has()
lookup for every received block and thus, can impact performance.
- A new
- ✨ Migrated repositories into Boxo
github.com/ipfs/kubo/peering
=>./peering
A service which establish, overwatch and maintain long lived connections.github.com/ipfs/kubo/core/bootstrap
=> `./bootstrap
A service that maintains connections to a number of bootstrap peers.
Changed
boxo/gateway
- 🛠 The
IPFSBackend
interface was updated to make the responses of theHead
method more explicit. It now returns aHeadResponse
instead of afiles.Node
.
- 🛠 The
boxo/routing/http/client.Client
is now exported. This means you can now pass it around functions, or add it to a struct if you want.- 🛠 The
path
package has been massively refactored. With this refactor, we have condensed the different path-related and/or Kubo-specific packages under a single generic one. Therefore, there are many breaking changes. Please consult the documentation for more details on how to use the new package.- Note: content paths created with
boxo/path
are automatically normalized:- Replace multiple slashes with a single slash.
- Eliminate each
.
path name element (the current directory). - Eliminate each inner
..
path name element (the parent directory) along with the non-..
element that precedes it. - Eliminate
..
elements that begin a rooted path: that is, replace "/..
" by "/
" at the beginning of a path.
- Note: content paths created with
- 🛠 The signature of
CoreAPI.ResolvePath
incoreiface
has changed to now return the remainder segments as a second return value, matching the signature ofresolver.ResolveToLastNode
. - 🛠
routing/http/client.FindPeers
now returnsiter.ResultIter[types.PeerRecord]
instead ofiter.ResultIter[types.Record]
. The specification indicates that records for this method will always be Peer Records. - 🛠 The
namesys
package has been refactored. The following are the largest modifications:- The options in
coreiface/options/namesys
have been moved tonamesys
and their names have been made more consistent. - Many of the exported structs and functions have been renamed in order to be consistent with the remaining packages.
namesys.Resolver.Resolve
now returns a TTL, in addition to the resolved path. If the TTL is unknown, 0 is returned.IPNSResolver
is able to resolve a TTL, whileDNSResolver
is not.namesys/resolver.ResolveIPNS
has been moved tonamesys.ResolveIPNS
and now returns a TTL
in addition to the resolved path.
- The options in
- ✨
boxo/ipns
record defaults follow recommendations from IPNS Record Specification:DefaultRecordTTL
is now set to1h
DefaultRecordLifetime
follows the increased expiration window of Amino DHT (go-libp2p-kad-dht#793) and is set to48h
- 🛠 The
gateway
'sIPFSBackend.ResolveMutable
is now expected to return a TTL in addition to the resolved path. If the TTL is unknown, 0 should be returned.
Removed
- 🛠
util.MultiErr
has been removed. Please use Go's native support for wrapping errors, orerrors.Join
instead.