Note
This release was brought to you by the Shipyard team.
What's Changed
Added
ipns:NewRecordacceptsWithMetadata(map[string]any)option for storing custom scalar key-value pairs (string,[]byte, int64, int, bool) in the signed DAG-CBOR data of IPNS records. Metadata can be read back viaRecord.Metadata(returns typedMetadataValuewithKind()discriminator) and iterated withRecord.MetadataEntries. Reserved IPNS field names, empty keys, and unsupported value types are rejected. #1085dag/walker: new package for memory-efficient DAG traversal with deduplication.VisitedTrackerinterface withBloomTracker(scalable bloom filter chain, ~4 bytes/CID vs ~75 bytes for a map) andMapTracker(exact, for tests).WalkDAGprovides iterative DFS traversal with integrated dedup, supporting dag-pb, dag-cbor, raw, and other registered codecs. ~2x faster than the legacy go-ipld-prime selector-based traversal.WalkEntityRootsemits only entity roots (files, directories, HAMT shards) instead of every block, skipping internal file chunks. #1124pinner:NewUniquePinnedProviderandNewPinnedEntityRootsProviderlog and skip corrupted pin entries instead of aborting the provide cycle, allowing remaining pins to still be provided. #1124routing/http/client:WithProviderInfoFuncoption resolves provider addresses at provide-time instead of client construction time. This only impacts legacy HTTP-only custom routing setups that depend on IPIP-526 and were sending unresolved0.0.0.0addresses in provider records instead of actual interface addresses. #1115chunker: addedRegisterfunction to allow custom chunkers to be registered for use withFromString.mfs: addedDirectory.Mode()andDirectory.ModTime()getters to match the existingFile.Mode()andFile.ModTime()API. #1131
Changed
provider:NewPrioritizedProvidernow continues to the next stream when one fails instead of stopping all streams.NewConcatProvideradded for pre-deduplicated streams. #1124chunker:FromStringnow rejects malformedsize-strings with extra parameters (e.g.size-123-extrawas previously silently accepted).gateway: compliance with gateway-conformance v0.13- upgrade to
go-libp2pv0.48.0 - 🛠
mfs: replacedRootOptionwith a unifiedOptionfunctional options pattern (e.g.WithCidBuilder,WithChunker,WithMaxLinks).NewRoot,NewEmptyRoot,MkdirWithOpts, andNewEmptyDirectorynow accept...Option.Mkdirtakes aMkdirOptsstruct (narrowed toMkparentsandFlushflags) followed by...Optionfor directory configuration. #1125
Removed
gateway: removed dead DoH resolver for.cryptoTLD (Unstoppable Domains) #772cmd/boxo-migrate: removed code for go-ipfs migration -- no longer needed.cmd/deprecator: removed code to deprecare relocated ipfs packages -- no longer needed.
Fixed
bitswap/server: incoming identity CIDs in wantlist messages are now silently ignored instead of killing the connection to the remote peer. Some IPFS implementations naively send identity CIDs, and disconnecting them for it caused unnecessary churn. #1117bitswap/network:ExtractHTTPAddressnow infers default ports for portless HTTP multiaddrs (e.g./dns/host/httpswithout/tcp/443). #1123mfs:FileDescriptoroperations are serialized with a mutex, preventing data races on the underlyingDagModifierwhen FUSE mounts or Kubo RPC commands dispatch concurrent Read, Write, Seek, Truncate, Flush, or Close calls.FlushafterClosereturnsErrClosed. #1131 #1133mfs: preserveCidBuilderandSizeEstimationModeacrosssetNodeData(),Mkdir()andNewRoot(). #1125mfs: closing a file descriptor after its directory entry was removed (e.g. FUSE RELEASE racing with RENAME) no longer re-adds the stale entry to the parent directory. #1134mfs:SetModeandSetModTimeno longer drop file content links when updating UnixFS metadata. #1134
Full Changelog: v0.37.0...v0.38.0
