Release 0.4.18
This is probably one of the largest go-ipfs releases in recent history, 3 months
in the making.
Features
The headline features this release are experimental QUIC support, the gossipsub
pubsub routing algorithm, pubsub message signing, and a refactored ipfs p2p
command. However, that's just scratching the surface.
QUIC
First up, on the networking front, this release has also introduced experimental
support for the QUIC protocol. QUIC is a new UDP-based network transport that
solves many of the long standing issues with TCP.
For us, this means (eventually):
- Fewer local resources. TCP requires a file-descriptor per connection while
QUIC (and most UDP based transports) can share a single file descriptor
between all connections. This should allow us to dial faster and keep more
connections open. - Faster connection establishment. When client authentication is included,
QUIC has a three-way handshake like TCP. However, unlike TCP, this handshake
brings us from all the way from 0 to a fully encrypted, authenticated, and
multiplexed connection. In theory (not yet in practice), this should
significantly reduce the latency of DHT queries. - Behaves better on lossy networks. When multiplexing multiple requests over
a single TCP connection, a single dropped packet will bring the entire
connection to a halt while the packet is re-transmitted. However, because QUIC
handles multiplexing internally, dropping a single packets affects only the
related stream. - Better NAT traversal. TL;DR: NAT hole-punching is significantly easier
and, in many cases, more reliable with UDP than with TCP.
However, we still have a long way to go. While we encourage users to test this,
the IETF QUIC protocol is still being actively developed and will change. You
can find instructions for enabling it
here.
Pubsub
In terms of pubsub, go-ipfs now supports the gossipsub routing algorithm and
message signing.
The gossipsub routing algorithm is significantly more efficient than the
current floodsub routing algorithm. Even better, it's fully backwards compatible
so you can enable it and still talk to nodes using the floodsub algorithm. You
can find instructions to enable gossipsub in go-ipfs
here.
Messages are now signed by their authors. While signing has now been enabled by
default, strict signature verification has not been and will not be for at least
one release (probably multiple) to avoid breaking existing applications. You can
read about how to configure this feature
here.
Commands
In terms of new toys, this release introduces a new ipfs cid
subcommand for
working with CIDs, a completely refactored ipfs p2p
command, streaming name
resolution, and complete inline block support.
The new ipfs cid
command allows users to both inspect CIDs and convert them
between various formats and versions. For example:
# Print out the CID metadata (prefix)
> ipfs cid format -f %P QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
cidv0-protobuf-sha2-256-32
# Get the hex sha256 hash from the CID.
> ipfs cid format -b base16 -f '0x%D' QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
0x46d44814b9c5af141c3aaab7c05dc5e844ead5f91f12858b021eba45768b4c0e
# Convert a base58 v0 CID to a base32 v1 CID.
> ipfs cid base32 QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
bafybeicg2rebjoofv4kbyovkw7af3rpiitvnl6i7ckcywaq6xjcxnc2mby
The refactored ipfs p2p
command allows forwarding TCP streams through two IPFS
nodes from one host to another. It's ssh -L
but for IPFS. You can find
documentation
here.
It's still experimental but we don't expect too many breaking changes at this
point (it will very likely be stabilized in the next release). Quick summary of
breaking changes:
- We don't stop listening for local (forwarded) connections after accepting a
single connection. ipfs p2p stream ls
output now returns more useful output, first address is
always the initiator address.ipfs p2p listener ls
is renamed toipfs p2p ls
ipfs p2p listener close
is renamed toipfs p2p close
- Protocol names have to be prefixed with
/x/
and are now just passed to
libp2p as handler name. Previous version did this 'under the hood' and with
/p2p/
prefix. There is a--allow-custom-protocol
flag which allows you
to use any libp2p handler name. ipfs p2p listener open
andipfs p2p stream dial
got renamed:ipfs p2p listener open p2p-test /ip4/127.0.0.1/tcp/10101
new becomesipfs p2p listen /x/p2p-test /ip4/127.0.0.1/tcp/10101
ipfs p2p stream dial $NODE_A_PEERID p2p-test /ip4/127.0.0.1/tcp/10102
is nowipfs p2p forward /x/p2p-test /ip4/127.0.0.1/tcp/10102 /ipfs/$NODE_A_PEERID
There is now a new flag for ipfs name resolve
- --stream
. When the command
is invoked with the flag set, it will start returning results as soon as they
are discovered in the DHT and other routing mechanisms. This enables certain
applications to start prefetching/displaying data while the discovery is still
running. Note that this command will likely return many outdated records
before it finding and returning the latest. However, it will always return
valid records (even if a bit stale).
Finally, in the previous release, we added support for extracting blocks inlined
into CIDs. In this release, we've added support for creating these CIDs. You can
now run ipfs add
with the --inline
flag to inline blocks less than or equal
to 32 bytes in length into a CID, instead of writing an actual block. This
should significantly reduce the size of filesystem trees with many empty
directories and tiny files.
IPNS
You can now publish and resolve paths with namespaces other than /ipns
and
/ipfs
through IPNS. Critically, IPNS can now be used with IPLD paths (paths
starting with /ipld
).
WebUI
Finally, this release includes the shiny updated
webui. You can view it by
installing go-ipfs and visiting http://localhost:5001/webui.
Performance
This release includes some significant performance improvements, both in terms
of resource utilization and speed. This section will go into some technical
details so feel free to skip it if you're just looking for shiny new features.
Resource Utilization
In this release, we've (a) fixed a slow memory leak in libp2p and (b)
significantly reduced the allocation load. Together, these should improve both
memory and CPU usage.
Datastructures
We've changed two of our most frequently used datastructures, CIDs and
Multiaddrs, to reduce allocation load.
First, we now store CIDs encode as strings, instead of decoded in structs
(behind pointers). In addition to being more compact, our Cid
type is now a
valid map
key so we no longer have to encode CIDs every time we want to use
them in a map/set. Allocations when inserting CIDs into maps/sets was showing up
as a significant source of allocations under heavy load so this change should
improve memory usage.
Second, we've changed many of our multiaddr parsing/processing/formatting
functions to allocate less. Much of our DHT related-work includes processing
multiaddrs so this should reduce CPU utilization when heavily using the DHT.
Streams and Yamux
Streams have always plagued us in terms of memory utilization. This was
partially solved by introducing the connection manager, keeping our maximum
connection count to a reasonable number but they're still a major memory sink.
This release sees two improvements on this front:
- A memory leak in identify
has been fixed. This was slowly causing us to leak connections (locking up
the memory used by the connections' streams). - Yamux streams now use a buffer-pool backed, auto shrinking read buffer.
Before, this read buffer would grow to its maximum size (a few megabytes) and
never shrink but these buffers now shrink as they're emptied.
Bitswap Performance
Bitswap will now pack multiple small blocks into a single message thanks
ipfs/go-bitswap#5. While this won't
help when transferring large files (with large blocks), this should help when
transferring many tiny files.
Refactors and Endeavors
This release saw yet another commands-library refactor, work towards the
CoreAPI, and the first step towards reliable base32 CID support.
Commands Lib
We've completely refactored our commands library (again). While it still needs
quite a bit of work, it now requires significantly less boilerplate and should
be significantly more robust. The refactor immediately found two broken tests
and probably fixed quite a few bugs around properly returning and handling
errors.
CoreAPI
CoreAPI is a new way to interact with IPFS from Go. While it's still not
final, most things you can do via the CLI or HTTP interfaces, can now be done
through the new API.
Currently there is only one implementation, backed by go-ipfs node, and there are
plans to start http-api backed one soon. We are also looking into creating RPC
interface using this API, which could help performance in some use cases.
You can track progress in #4498
IPLD paths
We introduced new path type which introduces distinction between IPLD and
IPFS (unixfs) paths. From now on paths prefixed with /ipld/
will always
use IPLD link traversal and /ipfs/
will use unixfs path resolver, which
takes things like shardnig into account.
Note that this is only initial support and there likely are some bugs in
how the paths are handled internally, so consider this feature
experimental for now.
CIDv1/Base32 Migration
Currently, IPFS is usually used in browsers by browsing to
https://SOME_GATEWAY/ipfs/CID/...
. There are two significant drawbacks to this
approach:
- From a browser security standpoint, all IPFS "sites" will live under the same
origin (SOME_GATEWAY). - From a UX standpoint, this doesn't feel very "native" (even if the gateway is
a local IPFS node).
To fix the security issue, we intend to switch IPFS gateway links
https://ipfs.io/ipfs/CID
to to https://CID.ipfs.dweb.link
. This way, the CID
will be a part of the
"origin" so
each IPFS website will get a separate security origin.
To fix the UX issue, we've been working on adding support for ipfs://CID/...
to web browsers through our
ipfs-companion add-on and some new,
experimental extension APIs from Mozilla. This has the same effect of putting
the CID in the URL origin but has the added benefit of looking "native".
Unfortunately, origins must be case insensitive. Currently, most CIDs users
see are CIDv0 CIDs (those starting with Qm
) which are always base58
encoded and are therefore case-sensitive.
Fortunately, CIDv1 (the latest CID format) supports arbitrary bases using the
multibase standard. Unfortunately,
IPFS has always treated equivalent CIDv0 and CIDv1 CIDs as distinct. This means
that files added with CIDv0 CIDs (the default) can't be looked up using the
equivalent CIDv1.
This release makes some significant progress towards solving this issue by
introducing two features:
(1) The previous mentioned ipfs cid base32
command for converting CID to a
case intensive encoding required by domain names. This command converts a CID to
version 1 and encodes it using base32.
(2) A hack to allow locally looking up blocks associated with a CIDv0 CID using
the equivalent CIDv1 CID (or the reverse). This hack will eventually
be replaced with a multihash indexed blockstore, which is agnostic to both the
CID version and multicodec content type.
go-ipfs changelog
Features (i.e., users take heed):
- gossipsub (ipfs/go-ipfs#5373)
- support /ipfs/CID in
ipfs dht findprovs
(ipfs/go-ipfs#5329) - return a json object from config show (ipfs/go-ipfs#5345)
- Set filename in Content-Disposition if filename=x is passed in URI query (ipfs/go-ipfs#4177)
- Allow mfs files.write command to create parent directories (ipfs/go-ipfs#5359)
- Run DNS lookup for --api endpoint provided in CLI (ipfs/go-ipfs#5372)
- Add support for inlinling blocks into CIDs the id-hash (ipfs/go-ipfs#5281)
- depth limited refs -r (ipfs/go-ipfs#5337)
- remove bitswap unwant (ipfs/go-ipfs#5308)
- add experimental QUIC support (ipfs/go-ipfs#5350)
- add a --stdin-name flag for naming files from stdin (ipfs/go-ipfs#5399)
- Refactor
ipfs p2p
(ipfs/go-ipfs#4929) - add dns support in
ipfs p2p forward
and refactor code (ipfs/go-ipfs#5533) - feat(command): expose connection direction (ipfs/go-ipfs#5457)
- error when publishing ipns records without a running daemon (ipfs/go-ipfs#5477)
- feat(daemon): print version on start (ipfs/go-ipfs#5503)
- add quieter option to name publish (ipfs/go-ipfs#5494)
- Provide new "cid" sub-command. (ipfs/go-ipfs#5385)
- feat(command): add force flag for files rm (ipfs/go-ipfs#5555)
- Add support for datastore plugins (ipfs/go-ipfs#5187)
- files ls: append slash to directory names (ipfs/go-ipfs#5605)
- ipfs name resolve --stream (ipfs/go-ipfs#5404)
- update webui to 2.1.0 (ipfs/go-ipfs#5627)
- feat: add dry-run flag for config profile apply command (ipfs/go-ipfs#5455)
- configurable pubsub signing (ipfs/go-ipfs#5647)
Fixes (i.e., users take note):
- pin update fixes (ipfs/go-ipfs#5265)
- Fix inability to pin two things at once (ipfs/go-ipfs#5512)
- wait for all connections to close before exiting on shutdown. (ipfs/go-ipfs#5322)
- Fixed ipns address resolution in fuse unix mount (ipfs/go-ipfs#5384)
- core/commands/ls: wrap
NewDirectoryFromNode
error (ipfs/go-ipfs#5166) - fix goroutine leaks in filestore.go (ipfs/go-ipfs#5427)
- move VersionOption after GatewayOption to fix #5422 (ipfs/go-ipfs#5424)
- fix(commands): fix filestore.go goroutine leak (ipfs/go-ipfs#5439)
- fix(commands): goroutine leaks in ping.go (ipfs/go-ipfs#5444)
- fix output of object command (ipfs/go-ipfs#5459)
- add warning when no bootstrap in config (ipfs/go-ipfs#5445)
- fix behaviour of key rename to same name (ipfs/go-ipfs#5465)
- fix(object): print object diff error (ipfs/go-ipfs#5469)
- fix(pin): goroutine leaks (ipfs/go-ipfs#5453)
- fix offline id bug (ipfs/go-ipfs#5486)
- files cp: improve flush error message (ipfs/go-ipfs#5485)
- resolve: fix unixfs resolution through sharded directories (ipfs/go-ipfs#5484)
- Switch name publish/resolve to coreapi (ipfs/go-ipfs#5563)
- use CoreAPI resolver everywhere (fixes sharded directory resolution) (ipfs/go-ipfs#5492)
- add pin lock in AddallPin function (ipfs/go-ipfs#5506)
- take the pinlock when updating pins (ipfs/go-ipfs#5550)
- fix(object): add support for raw leaves in object diff (ipfs/go-ipfs#5472)
- don't use the domain name as a filename in /ipns/a.com (ipfs/go-ipfs#5564)
- refactor(command): modify int to int64 (ipfs/go-ipfs#5612)
- fix(core): ipns config RecordLifetime panic (ipfs/go-ipfs#5648)
- simplify dag put and correctly take pin lock (ipfs/go-ipfs#5667)
- fix prometheus concurrent map write bug (ipfs/go-ipfs#5706)
Regressions Fixes (fixes for bugs introduced since the last release):
- namesys: properly attach path in name.Resolve (ipfs/go-ipfs#5660)
- fix(p2p): issue #5523 (ipfs/go-ipfs#5529)
- fix infinite loop in
stats bw
(ipfs/go-ipfs#5598) - make warnings on no bootstrap peers less noisy (ipfs/go-ipfs#5466)
- fix two transport related bugs (ipfs/go-ipfs#5417)
- Fix pin ls output when hash is specified (ipfs/go-ipfs#5699)
- ping: switch to the ping service enabled in the libp2p constructor (ipfs/go-ipfs#5698)
- commands: fix a bunch of tiny commands-lib issues (ipfs/go-ipfs#5697)
- cleanup the ping command (ipfs/go-ipfs#5680)
- fix gossipsub goroutine explosion (ipfs/go-ipfs#5688)
- fix(cmd/gc): Run func does not return error when Emit func returns error (ipfs/go-ipfs#5687)
Extractions:
- Extract bitswap to go-bitswap (ipfs/go-ipfs#5294)
- Extract blockservice and verifcid (ipfs/go-ipfs#5296)
- Extract merkledag package, move dagutils to top level (ipfs/go-ipfs#5298)
- Extract path and resolver (ipfs/go-ipfs#5306)
- Extract config package (ipfs/go-ipfs#5277)
- Extract unixfs and importers to go-unixfs (ipfs/go-ipfs#5316)
- delete unixfs code... (ipfs/go-ipfs#5319)
- Extract /mfs to github.com/ipfs/go-mfs (ipfs/go-ipfs#5391)
- re-format log output as ndjson (ipfs/go-ipfs#5708)
- error on resolving non-terminal paths (ipfs/go-ipfs#5705)
Documentation:
- document the fact that we now publish releases on GitHub (ipfs/go-ipfs#5301)
- docs: add url to dev weekly sync to the README (ipfs/go-ipfs#5371)
- docs: README refresh, add cli-http-api-core diagram (ipfs/go-ipfs#5396)
- add some basic gateway documentation (ipfs/go-ipfs#5393)
- fix the default gateway port (ipfs/go-ipfs#5419)
- fix order of events in the release process (ipfs/go-ipfs#5434)
- docs: add some minimal read-only API documentation (ipfs/go-ipfs#5437)
- feat: use package-table (ipfs/go-ipfs#5395)
- link to go-{libp2p,ipld} package tables (ipfs/go-ipfs#5446)
- api: fix outdated HTTPHeaders config documentation (ipfs/go-ipfs#5451)
- add version, usage, and planning info for urlstore (ipfs/go-ipfs#5552)
- debug-guide.md added memory statistics command (ipfs/go-ipfs#5546)
- Change to point to combined go contributing guidelines (ipfs/go-ipfs#5607)
- docs: Update link format (ipfs/go-ipfs#5617)
- Fix link in readme (ipfs/go-ipfs#5632)
- docs: add a note for dns command (ipfs/go-ipfs#5629)
- Dockerfile: Specifies comments on exposed ports (ipfs/go-ipfs#5615)
- document pubsub message signing (ipfs/go-ipfs#5669)
Testing:
- Include cid-fmt binary in test/bin. (ipfs/go-ipfs#5297)
- wait for the nodes to fully stop (ipfs/go-ipfs#5315)
- apply timeout for build steps after getting node (ipfs/go-ipfs#5313)
- ci: check for gx deps dupes (ipfs/go-ipfs#5338)
- ci: call cleanWs after each step (ipfs/go-ipfs#5374)
- add correct test for GC completeness (ipfs/go-ipfs#5364)
- fix the urlstore tests (ipfs/go-ipfs#5397)
- improve gateway options test (ipfs/go-ipfs#5433)
- coreapi name: Increase test swarm size (ipfs/go-ipfs#5481)
- fix fuse unmount test (ipfs/go-ipfs#5476)
- test(add): add test for issue #5456 (ipfs/go-ipfs#5493)
- fixed tests of raised fd limits (ipfs/go-ipfs#5496)
- pprof: create HTTP endpoint for setting MutexProfileFraction (ipfs/go-ipfs#5527)
- fix(command):update
add --chunker
test (ipfs/go-ipfs#5571) - switch to go 1.11 (ipfs/go-ipfs#5483)
- fix: sharness race in directory_size if file is removed (ipfs/go-ipfs#5586)
- Bump Go versions and use '.x' to always get latest minor versions (ipfs/go-ipfs#5682)
- add rabin min error test (ipfs/go-ipfs#5449)
- Use CircleCI 2.0 (ipfs/go-ipfs#5691)
Internal:
- Add ability to retrieve blocks even if given using a different CID version (ipfs/go-ipfs#5285)
- update gogo-protobuf (ipfs/go-ipfs#5355)
- update protobuf files in go-ipfs (ipfs/go-ipfs#5356)
- string-backed CIDs (ipfs/go-ipfs#5441)
- commands: switch object to CoreAPI (ipfs/go-ipfs#4643)
- coreapi: dag: Batching interface (ipfs/go-ipfs#5340)
- key cmd: Refactor to use coreapi (ipfs/go-ipfs#5339)
- coreapi: DHT API (ipfs/go-ipfs#4804)
- block cmd: Use coreapi (ipfs/go-ipfs#5331)
- mk: embed CurrentCommit in the right place (ipfs/go-ipfs#5507)
- added binary executable files to .dockerignore (ipfs/go-ipfs#5544)
- Add sessions when fetching MerkleDAG in LS (ipfs/go-ipfs#5509)
- coreapi: Swarm API (ipfs/go-ipfs#4803)
- coreapi swarm: unify impl type with other apis (ipfs/go-ipfs#5551)
- Refactor UnixFS CoreAPI (ipfs/go-ipfs#5501)
- coreapi: PubSub API (ipfs/go-ipfs#4805)
- fix: maketarball.sh for OSX (ipfs/go-ipfs#5575)
- test the correct return value when checking directory size (ipfs/go-ipfs#5580)
- coreapi unixfs: remove Cat (ipfs/go-ipfs#5574)
- Explicitally use BufferedDAG after removing Batch from importers (ipfs/go-ipfs#5626)
Cleanup:
- Fix some weird code in core/coreunix/add.go (ipfs/go-ipfs#5354)
- name cmd: move subcommands to subdirectory (ipfs/go-ipfs#5392)
- directly parse peer IDs as peer IDs (ipfs/go-ipfs#5409)
- don't bother caching if we're using a nil repo (ipfs/go-ipfs#5414)
- object:refactor data encode error (ipfs/go-ipfs#5426)
- remove Godeps (ipfs/go-ipfs#5440)
- update for the go-ipfs-cmds refactor (ipfs/go-ipfs#5035)
- fix(unixfs): issue #5217 (Avoid use of
pb.Data
) (ipfs/go-ipfs#5505) - fix(unixfs): issue #5055 (ipfs/go-ipfs#5525)
- add offline id test #4978 and refactor command code (ipfs/go-ipfs#5562)
- refact(command): replace option name with const string (ipfs/go-ipfs#5642)
- remove p2p-circuit addr hack in ipfs swarm peers (ipfs/go-ipfs#5645)
- refactor(commands/id): use new command (ipfs/go-ipfs#5646)
- object patch rm-link: change arg from 'link' to 'name' (ipfs/go-ipfs#5638)
- refactor(cmds): use new cmds lib in version, tar and dns (ipfs/go-ipfs#5650)
- cmds/dag: use new cmds lib (ipfs/go-ipfs#5662)
- commands/ping: use new cmds lib (ipfs/go-ipfs#5675)
related changelogs
Changes to sub-packages go-ipfs depends on. This does not include libp2p or multiformats.
github.com/ipfs/go-log
- update gogo protobuf (ipfs/go-log#39)
- rename the protobuf to loggabletracer (ipfs/go-log#41)
- protect loggers with rwmutex (ipfs/go-log#44)
- make logging prettier (ipfs/go-log#45)
- add env vars for logging to file and syslog (ipfs/go-log#46)
- remove syslogger (ipfs/go-log#47)
github.com/ipfs/go-datastore
- implement DiskUsage for the rest of the datastores (ipfs/go-datastore#86)
- switch to google's uuid library (ipfs/go-datastore#89)
- return ErrNotFound from the NullDatastore instead of nil, nil (ipfs/go-datastore#92)
- Add TTL and Transactional interfaces (ipfs/go-datastore#91)
- improve testing (ipfs/go-datastore#93)
- Add support for querying entry expiration (ipfs/go-datastore#96)
- Allow ds.NewTransaction() to return an error (ipfs/go-datastore#98)
- add a GetSize method (ipfs/go-datastore#99)
github.com/ipfs/go-cid
- Add tests for Set type (ipfs/go-cid#63)
- Create new Builder interface for creating CIDs. (ipfs/go-cid#53)
- cid-fmt Enhancments (ipfs/go-cid#61)
- add String benchmark (ipfs/go-cid#44)
- add a streaming CID set (ipfs/go-cid#67)
- Extract non-core functionality from go-cid into go-cidutil (ipfs/go-cid#69)
- cid implementation research (ipfs/go-cid#70)
- cid implementation variations++ (ipfs/go-cid#72)
- Create a new Encode method that is like StringOfBase but never errors (ipfs/go-cid#60)
- add codecs for Dash blocks, tx (ipfs/go-cid#78)
github.com/ipfs/go-ds-flatfs
- check error before defer-removing disk usage file (ipfs/go-ds-flatfs#47)
- add GetSize function (ipfs/go-ds-flatfs#48)
github.com/ipfs/go-ds-measure
github.com/ipfs/go-ds-leveldb
- recover datastore on corruption (ipfs/go-ds-leveldb#15)
- Add transactional support to leveldb datastore. (ipfs/go-ds-leveldb#17)
- implement GetSize (ipfs/go-ds-leveldb#18)
github.com/ipfs/go-metrics-prometheus
- use an existing metric when it has already been registered (ipfs/go-metrics-prometheus#1)
github.com/ipfs/go-metrics-interface
- update the counter interface to match prometheus (ipfs/go-metrics-interface#2)
github.com/ipfs/go-ipld-format
- add copy dagservice function (ipfs/go-ipld-format#41)
github.com/ipfs/go-ipld-cbor
- Refactor to refmt (ipfs/go-ipld-cbor#30)
- import changes from the filecoin branch (ipfs/go-ipld-cbor#41)
- register the BitIntAtlasEntry for the tests (ipfs/go-ipld-cbor#43)
- attempt to allocate a bit less (ipfs/go-ipld-cbor#45)
github.com/ipfs/go-ipfs-cmds
- check if we can decode an error before trying (ipfs/go-ipfs-cmds#108)
- fix(option): print error message for error timeout option (ipfs/go-ipfs-cmds#118)
- Create Jenkinsfile (ipfs/go-ipfs-cmds#89)
- fix(add): refer to ipfs issue #5456 (ipfs/go-ipfs-cmds#121)
- commands refactor 2.0 (ipfs/go-ipfs-cmds#112)
- always assign keks to review new PRs (ipfs/go-ipfs-cmds#123)
- extract go-ipfs-files (ipfs/go-ipfs-cmds#125)
- split the value encoder and the error encoder (ipfs/go-ipfs-cmds#128)
github.com/ipfs/go-ipfs-cmdkit
- all: gofmt (ipfs/go-ipfs-cmdkit#22)
- add standard ci scripts (ipfs/go-ipfs-cmdkit#23)
- only count size for regular files (ipfs/go-ipfs-cmdkit#25)
- Create Jenkinsfile (ipfs/go-ipfs-cmdkit#16)
- Feat: add WebFile File implementation. (ipfs/go-ipfs-cmdkit#26)
- feat(type): fix issue #28 (ipfs/go-ipfs-cmdkit#29)
- Extract files package (ipfs/go-ipfs-cmdkit#31)
github.com/ipfs/go-ds-badger
- update protobuf (ipfs/go-ds-badger#26)
- exported type datastore => Datastore (ipfs/go-ds-badger#1)
- using exported Datastore type (ipfs/go-ds-badger#2)
- exported type datastore => Datastore (ipfs/go-ds-badger#28)
- Implement new TxDatastore and Txn interfaces (ipfs/go-ds-badger#27)
- Avoid discarding transaction too early in queries (ipfs/go-ds-badger#31)
- Ability to get entry expirations (ipfs/go-ds-badger#32)
- Update badger to 2.8.0 (ipfs/go-ds-badger#33)
- ds.NewTransaction() now returns an error parameter (ipfs/go-ds-badger#36)
- make has faster (ipfs/go-ds-badger#37)
- Implement GetSize and update badger (ipfs/go-ds-badger#38)
github.com/ipfs/go-ipfs-addr
- Remove dependency on libp2p-circuit (ipfs/go-ipfs-addr#7)
github.com/ipfs/go-ipfs-chunker
- return err when rabin min less than 16 (ipfs/go-ipfs-chunker#3)
- switch to go-buffer-pool (ipfs/go-ipfs-chunker#8)
- fix size-0 chunker bug (ipfs/go-ipfs-chunker#9)
github.com/ipfs/go-ipfs-routing
- update protobuf (ipfs/go-ipfs-routing#8)
- Implement SearchValue (ipfs/go-ipfs-routing#12)
github.com/ipfs/go-ipfs-blockstore
- blockstore: Adding Stat method to map from Cid to BlockSize (ipfs/go-ipfs-blockstore#5)
- correctly convert the datastore not found errors (ipfs/go-ipfs-blockstore#10)
- Fix typo: Change 'should not' to 'should' (ipfs/go-ipfs-blockstore#14)
- fix test race condition (ipfs/go-ipfs-blockstore#9)
- make arccache.GetSize return ErrNotFound when not found (ipfs/go-ipfs-blockstore#16)
- use datastore.GetSize (ipfs/go-ipfs-blockstore#17)
github.com/ipfs/go-ipns
- update gogo protobuf (ipfs/go-ipns#16)
- use new ExtractPublicKey signature (ipfs/go-ipns#17)
github.com/ipfs/go-bitswap
- update gogo protobuf (ipfs/go-bitswap#2)
- ci: add jenkins (ipfs/go-bitswap#9)
- bitswap: Bitswap now sends multiple blocks per message (ipfs/go-bitswap#5)
- reduce allocations (ipfs/go-bitswap#12)
- buffer writes (ipfs/go-bitswap#15)
- delay finding providers (ipfs/go-bitswap#17)
github.com/ipfs/go-blockservice - Avoid allocating a session unless we need it (ipfs/go-blockservice#6)
github.com/ipfs/go-cidutil
- add a utility method for sorting CID slices (ipfs/go-cidutil#5)
github.com/ipfs/go-ipfs-config
- Add pubsub configuration options (ipfs/go-ipfs-config#3)
- add QUIC experiment (ipfs/go-ipfs-config#4)
- Add Gateway.APICommands for /api allowlists (ipfs/go-ipfs-config#10)
- allow multiple API/Gateway addresses (ipfs/go-ipfs-config#11)
- Fix handling of null strings (ipfs/go-ipfs-config#12)
- add experiment for p2p http proxy (ipfs/go-ipfs-config#13)
- add message signing config options (ipfs/go-ipfs-config#18)
github.com/ipfs/go-merkledag
- Add FetchGraphWithDepthLimit to specify depth-limited graph fetching. (ipfs/go-merkledag#2)
- update gogo protobuf (ipfs/go-merkledag#4)
- Update to use new Builder interface for creating CIDs. (ipfs/go-merkledag#6)
- perf: avoid allocations when filtering nodes (ipfs/go-merkledag#11)
github.com/ipfs/go-mfs
- fix(unixfs): issue #6 (ipfs/go-mfs#7)
- fix(type): issue #13 (ipfs/go-mfs#14)
github.com/ipfs/go-path
- fix: don't dag.Get in ResolveToLastNode when not needed (ipfs/go-path#1)
github.com/ipfs/go-unixfs
- update gogo protobuf (ipfs/go-unixfs#6)
- Update to use new Builder interface for creating CIDs. (ipfs/go-unixfs#7)
- nit: make dagTruncate a method on DagModifier (ipfs/go-unixfs#13)
- fix(fsnode): issue #17 (ipfs/go-unixfs#18)
- Use EnumerateChildrenAsync in for enumerating HAMT links (ipfs/go-unixfs#19)