Note
This release was brought to you by the Shipyard team.
Important
Shipyard's IPFS work ends on September 30, 2026. Until then we ship security and bug fix releases if any are absolutely needed and still possible. After that date, no one at Shipyard maintains Boxo. If you depend on Boxo, read the announcement and bring your transition questions to the community forum.
What's Changed
Important
This is a bug fix release. It carries a minor version bump because the gateway no longer sends the deprecated X-Ipfs-Path header by default, replaced by Ipfs-Uri (IPIP-548). If you still need X-Ipfs-Path, set Config.DeprecatedXIpfsPath and call Headers.WithDeprecatedXIpfsPath before Headers.ApplyCors, and plan a migration to Ipfs-Uri.
Added
- ✨
ipld/unixfs: reads of bothPBNodefield orders are now covered by tests, and a documented low-level opt-in (UnixFSProfile.PBNodeFieldOrder, applied viamerkledag.DefaultPBNodeFieldOrder) lets writers that need streaming-friendly blocks encode theDatafield beforeLinksper IPIP-550. Off by default and selected by no named profile:UnixFS_v0_2015andUnixFS_v1_2025pin the canonical links-first order explicitly, so defaults and existing CIDs are unchanged. Enabling data-first changes the CID of every dag-pb node that has both fields (directories, HAMT shards, multi-chunk file roots), is process-wide (ApplyGlobalsaffects everymerkledag.ProtoNodeencoded in the process, not only UnixFS nodes), and re-encodes links-first directories in the new order the next time they are opened through the directory API and stored again (for example MFS directories on their next access). #1212 - ✨
gateway: responses now include theIpfs-Uriheader with a canonicalipfs://oripns://URI for the requested content path, and expose it via the defaultAccess-Control-Expose-Headers. The header carries the content root in canonical form (base32 CIDv1 for/ipfs/, base36 CIDv1 for cryptographic/ipns/names, lowercase FQDN for DNSLink) with percent-encoded path segments, so clients get a value that is safe in HTTP field context regardless of bytes in the underlying path. IPIP-548 #1209
Changed
- 🛠
gateway: the deprecatedX-Ipfs-Pathresponse header is no longer sent by default; its value cannot represent all UnixFS file names and it is superseded byIpfs-Uri. Action required: consumers that readX-Ipfs-Pathshould migrate toIpfs-Uri; to restore the legacy header meanwhile, setConfig.DeprecatedXIpfsPathand callHeaders.WithDeprecatedXIpfsPathbeforeHeaders.ApplyCorsso it is listed inAccess-Control-Expose-Headersagain. Even with the flag set, the header is omitted for content paths with bytes that cannot appear in an HTTP field value (Section 5.5 of RFC 9110), such as raw non-ASCII UnixFS file names: gateway-conformance fails a gateway that sends such values, and onlyIpfs-Uricarries those paths. IPIP-548 #1209 gateway: conformance CI runs gateway-conformance v0.14.0, the first release with the IPIP-548Ipfs-Uritests. #1209- updated Go in
go.modto 1.26.0 - upgrade to
go-libp2p-kad-dhtv0.42.2 - upgrade to
go.opentelemetry.iov1.46.0
Fixed
gateway:X-Ipfs-Pathvalues no longer carry bytes that are invalid in an HTTP field value (Section 5.5 of RFC 9110). The header used to echo raw UnixFS file names, so non-ASCII paths arrived garbled or broke strict clients; when the header is enabled, it is now omitted for such paths, which only the percent-encodedIpfs-Urican carry. #1209bootstrap: the saved backup peer list is no longer dialed when no bootstrap peers are configured. #1213
