We're happy to announce go 0.4.19. This release contains a bunch of important fixes and a slew of new and improved features. Get pumped and upgrade ASAP to benefit from all the new goodies! 🎁
Features
🔌 Initializing With Random Ports
Go-ipfs can now be configured to listen on a random but stable port (across restarts) using the new randomports
configuration profile. This should be helpful when testing and/or running multiple go-ipfs instances on a single machine.
To initialize a go-ipfs instance with a randomly chosen port, run:
> ipfs init --profile=randomports
👂 Gateway Directory Listing
IPNS (and/or DNSLink) directory listings on the gateway, e.g. https://ipfs.io/ipns/dist.ipfs.io/go-ipfs/, will now display the ipfs hash of the current directory. This way users can more easily create permanent links to otherwise mutable data.
📡 AutoRelay and AutoNAT
This release introduces two new experimental features (courtesy of libp2p): AutoRelay and AutoNAT.
AutoRelay is a new service that automatically chooses a public relay when it detects that the go-ipfs node is behind a NAT. While relaying connections through a third-party node isn't the most efficient way to route around NATs, it's a reliable fallback.
To enable AutoRelay, set the Swarm.EnableAutoRelay
option in the config.
AutoNAT is the service AutoRelay uses to detect if the node is behind a NAT. You don't have to set any special config flags to enable it.
In this same config section, you may also notice options like EnableRelayHop
, EnableAutoNATService
, etc. You do not need to enable these:
EnableRelayHop
-- Allow other nodes to use your node as a relay (disabled by default).EnableAutoNATService
-- Help other nodes detect if they're behind a NAT (disabled by default).
📵 Offline Operation
There are two new "offline" features in this release: a global --offline
flag and an option to configure the gateway to not fetch files.
Most go-ipfs commands now support the --offline
flag. This causes IPFS to avoid network operations when performing the requested operation. If you've ever used the --local
flag, the --offline
flag is the (almost) universally supported replacement.
For example:
- If the daemon is started with
ipfs daemon --offline
, it won't even connect to the network. (note: this feature isn't new, just an example). ipfs add --offline some_file
won't send out provider records.ipfs cat --offline Qm...
won't fetch any blocks from the network.ipfs block stat --offline Qm...
is a great way to tell if a block is locally available.
Note: It doesn't yet work with the refs
, urlstore
, or tar
commands (#6002).
On to the gateway, there's a new Gateway.NoFetch
option to configure the gateway to only serve locally present files. This makes it possible to run an IPFS node as a gateway to serve content of your choosing without acting like a public proxy. 🤫
📍 Adding And Pinning Content
There's a new --pin
flag for both ipfs block put
and ipfs urlstore add
to match the --pin
flag in ipfs add
. This allows one to atomically add and pin content with these APIs.
NOTE 1: For ipfs urlstore add
, --pin
has been enabled by default to match the behavior in ipfs add
. However, ipfs block put
does not pin by default to match the current behavior.
NOTE 2: If you had previously used the urlstore and weren't explicitly pinning content after adding it, it isn't pinned and running the garbage collector will delete it. While technically documented in the ipfs urlstore add
helptext, this behavior was non-obvious and bears mentioning.
🗂 File Listing
The ipfs ls
command has two significant changes this release: it reports file sizes instead of dag sizes and has gained a new --stream
flag.
First up, ipfs ls
now reports file sizes instead of dag sizes. Previously, for historical reasons, ipfs ls
would report the size of a file/directory as seen by IPFS including all the filesystem datastructures and metadata. However, this meant that ls -l
and ipfs ls
would print different sizes:
> ipfs ls /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv
QmZTR5bcpQD7cFgTorqxZDYaew1Wqgfbd2ud9QqGPAkK2V 1688 about
QmYCvbfNbCwFR45HiNP45rwJgvatpiW38D961L5qAhUM5Y 200 contact
QmY5heUM5qgRubMDD1og9fhCPA6QdkMp3QCwd4s7gJsyE7 322 help
QmejvEPop4D7YUadeGqYWmZxHhLc4JBUCzJJHWMzdcMe2y 12 ping
QmXgqKTbzdh83pQtKFb19SpMCpDDcKR2ujqk3pKph9aCNF 1692 quick-start
QmPZ9gcCEpqKTo6aq61g2nXGUhM4iCL3ewB6LDXZCtioEB 1102 readme
QmQ5vhrL7uv6tuoN9KeVBwd4PwfQkXdVVmDLUZuTNxqgvm 1173 security-notes
> ipfs get /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv
Saving file(s) to QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv
6.39 KiB / 6.39 KiB [================================] 100.00% 0s
> ls -l QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv
total 28
-rw------- 1 user group 1677 Feb 14 17:03 about
-rw------- 1 user group 189 Feb 14 17:03 contact
-rw------- 1 user group 311 Feb 14 17:03 help
-rw------- 1 user group 4 Feb 14 17:03 ping
-rw------- 1 user group 1681 Feb 14 17:03 quick-start
-rw------- 1 user group 1091 Feb 14 17:03 readme
-rw------- 1 user group 1162 Feb 14 17:03 security-notes
This is now no longer the case. ipfs ls
and ls -l
now return the same sizes. 🙌
Second up, ipfs ls
now has a new --stream
flag. In IPFS, very large directories (e.g., Wikipedia) are split up into multiple chunks (shards) as there are too many entries to fit in a single block. Unfortunately, ipfs ls
buffers the entire file list in memory and then sorts it. This means that ipfs ls /ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki
(wikipedia) will take a very long time to return anything (it'll also use quite a bit of memory).
However, the new --stream
flag makes it possible to stream a directory listing as new chunks are fetched from the network. To test this, you can run ipfs ls --stream --size=false --resolve-type=false /ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki
. You probably won't want to wait for that command to finish, Wikipedia has a lot of entries. 😉
🔁 HTTP Proxy
This release sees a new (experimental) feature contributed by our friends at Peergos: HTTP proxy over libp2p. When enabled, the local gateway can act as an HTTP proxy and forward HTTP requests to libp2p peers. When combined with the ipfs p2p
command, users can use this to expose HTTP services to other go-ipfs nodes via their gateways. For details, check out the documentation.
Performance And Reliability
This release introduces quite a few performance/reliability improvements and, as usual, fixes several memory leaks. Below is a non-exhaustive list of noticeable changes.
📞 DHT
This release includes an important DHT fix that should significantly:
- Reduce dialing.
- Speed up DHT queries.
- Improve performance of the gateways.
Basically, in the worst case, a DHT query would turn into a random walk of the entire IPFS network. Yikes!
Relevant PR: libp2p/go-libp2p-kad-dht#237
🕸 Bitswap
Bitswap sessions have improved and are now used for all requests. Sessions allow us to group related content and ask peers most likely to have the content instead of broadcasting the request to all connected peers. This gives us two significant benefits:
- Less wasted upload bandwidth. Instead of broadcasting which blocks we want to everyone, we can ask fewer peers thus reducing the number of requests we send out.
- Less wasted download bandwidth. Because we know which peers likely have content, we can ask an individual peer for a block and expect to get an answer. In the past, we'd ask every peer at the same time to optimize for latency at the expense of bandwidth (getting the same block from multiple peers). We had to do this because we had to assume that most peers didn't have the requested block.
‼️ Pubsub
This release includes some significant reliability improvements in pubsub subscription handling. If you've previously had issues with connected pubsub peers not seeing each-other's messages, please upgrade ASAP.
♻️ Reuseport
In this release, we've rewritten our previously error-prone go-reuseport
library to not duplicate a significant portion of Go's low-level networking code. This was made possible by Go's new Control
net.Dialer
option.
In the past, our first suggestion to anyone experiencing weird resource or connectivity issues was to disable REUSEPORT
(set IPFS_REUSEPORT
to false). This should no longer be necessary.
🐺 Badger Datastore
Badger has reached 1.0. This release brings an audit and numerous reliability fixes. We are now reasonably confident that badger will become the default datastore in a future release. 👍
This release also adds a new Truncate
configuration option for the badger datastore (enabled by default for new IPFS nodes). When enabled, badger will delete any un-synced data on start instead of simply refusing to start. This should be safe on all filesystems where the sync
operation is safe and removes the need for manual intervention when restarting an IPFS node after a crash.
Assuming you initialized your badger repo with ipfs init --profile=badgerds
, you can enable truncate on an existing repo by running: ipfs config --json "Datastore.Spec.child.truncate" true
.
Refactors and Endeavors
🕹 Commands Library
The legacy commands library shim has now been completely removed. This won't mean much for many users but the go-ipfs team is happy to have this behind them.
🌐 Base32 CIDs
This release can now encode CIDs in responses in bases other than base58. This is primarily useful for web-browser integration as it allows us to (a) encode CIDs in a lower-case base (e.g., base32) and then use them in the origin part of URLs. The take away is: this release brings us a step closer to better browser integration.
Specifically, this release adds two flags:
--cid-base
: When specified, the IPFS CLI will encode all CIDv1 CIDs using the requested base.--upgrade-cidv0-in-output
: When specified, the IPFS CLI will upgrade CIDv0 CIDs to CIDv1 CIDs when returning them to the user. This upgrade is necessary because CIDv0 doesn't support multibase however, it's off by default as it changes the binary representation of the CIDs (which could have unintended consequences).
🎛 CoreAPI
The work on the CoreAPI refactor (ipfs/go-ipfs#4498) has progressed leaps and bounds this release. The CoreAPI is a comprehensive programmatic interface designed to allow go-ipfs be used as a daemon or a library interchangeably.
As of this release, go-ipfs now has:
- External interface definitions in ipfs/interface-go-ipfs-core.
- A work-in-progress implementation (ipfs/go-ipfs-http-client) of these interfaces that uses the IPFS HTTP API. This will replace the (ipfs/go-ipfs-api) library.
- A new plugin type "Daemon". Daemon plugins are started and stopped along with the go-ipfs daemon and are instantiated with a copy of the CoreAPI. This allows them to control and extend the go-ipfs daemon from within the daemon itself.
The next steps are:
- Finishing the remaining API surface area. At the moment, the two key missing parts are:
- Config manipulation.
- The
ipfs files
API. - Finalizing the ipfs/go-ipfs-http-client implementation.
- Creating a simple way to construct and initialize a go-ipfs node when using go-ipfs as a library.
Changelogs
- github.com/ipfs/go-ipfs:
- fix: show interactive output from install.sh (ipfs/go-ipfs#6024)
- fix: return the shortest, completely resolved path in the resolve command (ipfs/go-ipfs#5704)
- fix a few interop test issues (ipfs/go-ipfs#6004)
- fix HAMT bookmark ln (ipfs/go-ipfs#6005)
- docs: document Gateway.NoFetch (ipfs/go-ipfs#5999)
- Improve "name publish" ttl option documentation (ipfs/go-ipfs#5979)
- fix(cmd/mv): dst filename error (ipfs/go-ipfs#5964)
- coreapi: extract interface (ipfs/go-ipfs#5978)
- coreapi: cleanup non-gx references (ipfs/go-ipfs#5976)
- coreapi: fix seek test on http impl (ipfs/go-ipfs#5971)
- block put --pin (ipfs/go-ipfs#5969)
- Port
ipfs ls
to CoreAPI (ipfs/go-ipfs#5962) - docs: duplicate default helptext in
name publish
(ipfs/go-ipfs#5960) - plugin: add a daemon plugin with access to the CoreAPI (ipfs/go-ipfs#5955)
- coreapi: add some seeker tests (ipfs/go-ipfs#5934)
- Refactor ipfs get to use CoreAPI (ipfs/go-ipfs#5943)
- refact(cmd/init): change string option to const (ipfs/go-ipfs#5949)
- cmds/pin: use coreapi/pin (ipfs/go-ipfs#5843)
- Only perform DNSLink lookups on fully qualified domain names (FQDN) (ipfs/go-ipfs#5950)
- Fix DontCheckOSXFUSE config command example (ipfs/go-ipfs#5951)
- refact(cmd/config): change string option to const (ipfs/go-ipfs#5948)
- clarification the document of --resolve flag in name.publish (ipfs/go-ipfs#5651)
- Drop some coreunix code (ipfs/go-ipfs#5938)
- commands: fix verbose flag (ipfs/go-ipfs#5940)
- Fixes #4558 (ipfs/go-ipfs#5937)
- Port dag commansds to CoreAPI (ipfs/go-ipfs#5939)
- mfs: make sure to flush after mv and chcid (ipfs/go-ipfs#5936)
- docs/code-flow : Add code flow documentation for add cmd. (ipfs/go-ipfs#5864)
- coreapi: few more error check fixes (ipfs/go-ipfs#5935)
- Fixed and cleaned up TestIpfsStressRead (ipfs/go-ipfs#5920)
- Clarify that chunker sizes are in bytes (ipfs/go-ipfs#5923)
- refact(cmd/patch): change string to const (ipfs/go-ipfs#5931)
- refact(cmd/object): change option string to const (ipfs/go-ipfs#5932)
- coreapi: replace coreiface.DagAPI with ipld.DAGService (ipfs/go-ipfs#5922)
- Add global option to specify the multibase encoding (server side) (ipfs/go-ipfs#5789)
- coreapi: Adjust some tests for go-ipfs-http-api (ipfs/go-ipfs#5926)
- chore: update to Web UI v2.3.3 (ipfs/go-ipfs#5928)
- ls: Report real file size (ipfs/go-ipfs#5906)
- Improve the Filestore document (ipfs/go-ipfs#5927)
- [CORS] Bubble go-ipfs-cmds 2.0.10 - Updates CORS library (ipfs/go-ipfs#5919)
- reduce verbosity of daemon start (ipfs/go-ipfs#5904)
- feat: update to Web UI v2.3.2 (ipfs/go-ipfs#5899)
- CoreAPI: Don't panic when testing incomplete implementions (ipfs/go-ipfs#5900)
- gateway: fix CORs headers (ipfs/go-ipfs#5893)
- Local Gateway option (ipfs/go-ipfs#5649)
- Show hash on gateway (ipfs/go-ipfs#5830)
- fix: ulimit docs mistake (ipfs/go-ipfs#5894)
- Move coreapi tests to the interface (ipfs/go-ipfs#5865)
- Move checkHelptextRecursive forward a bit (ipfs/go-ipfs#5889)
- coreapi/unixfs: Use path instead of raw hash in AddEvent (ipfs/go-ipfs#5854)
- Fix name resolve --offline (ipfs/go-ipfs#5885)
- testing: slow down republisher sharness test (ipfs/go-ipfs#5856)
- docs: flesh out plugin documentation (ipfs/go-ipfs#5876)
- main: move InterruptHandler to util (ipfs/go-ipfs#5872)
- make: fix building source tarball on macos (ipfs/go-ipfs#5860)
- fix config data race (ipfs/go-ipfs#5634)
- CoreAPI: Global offline option (ipfs/go-ipfs#5825)
- Update for go-ipfs-files refactor (ipfs/go-ipfs#5661)
- feat: update Web UI to v2.3.0 (ipfs/go-ipfs#5855)
- Stateful plugin loading (ipfs/go-ipfs#4806)
- startup: always load the private key (ipfs/go-ipfs#5844)
- add --dereference-args parameter (ipfs/go-ipfs#5801)
- config: document the connection manager (ipfs/go-ipfs#5839)
- add pinning support to the urlstore (ipfs/go-ipfs#5834)
- refact(cmd/cat): remove useless code (ipfs/go-ipfs#5836)
- Really run as non-root user in docker container (ipfs/go-ipfs#5048)
- README: document guix package (ipfs/go-ipfs#5832)
- docs: Improve config documentation (ipfs/go-ipfs#5829)
- block: rm extra output (ipfs/go-ipfs#5751)
- merge github-issue-guide with the issue template (ipfs/go-ipfs#4636)
- docs: fix inconsistent capitalization of "API". (ipfs/go-ipfs#5824)
- Update README.md (ipfs/go-ipfs#5818)
- CONTRIBUTING.md link (ipfs/go-ipfs#5811)
- README: Update required Go version (ipfs/go-ipfs#5813)
- p2p: report-peer-id option for listen (ipfs/go-ipfs#5771)
- really fix netcat race (ipfs/go-ipfs#5803)
- [http_proxy_over_p2p] (ipfs/go-ipfs#5526)
- coreapi/pin: Use CID's directly in maps instead of converting to string (ipfs/go-ipfs#5809)
- Gx update go-merkledag and related deps. (ipfs/go-ipfs#5802)
- cmds: rm old lib (ipfs/go-ipfs#5786)
- badger: add truncate flag (ipfs/go-ipfs#5625)
- docker: allow IPFS_PROFILE to choose the profile for
ipfs init
(ipfs/go-ipfs#5473) - Add --stream option to
ls
command (ipfs/go-ipfs#5611) - Switch to using request.Context() (ipfs/go-ipfs#5782)
- Update go-ipfs-delay and assoc deps (ipfs/go-ipfs#5762)
- Suppress bootstrap error (ipfs/go-ipfs#5769)
- ISSUE_TEMPLATE: move the support question comment to the very top (ipfs/go-ipfs#5770)
- cmds: use MakeTypedEncoder (ipfs/go-ipfs#5760)
- cmds/bitswap: sort wantlist (ipfs/go-ipfs#5759)
- cmds/update: use new cmds lib (ipfs/go-ipfs#5730)
- cmds/file: use new cmds lib (ipfs/go-ipfs#5756)
- cmds: remove reduntant func (ipfs/go-ipfs#5750)
- commands/refs: use new cmds (ipfs/go-ipfs#5679)
- commands/pin: use new cmds lib (ipfs/go-ipfs#5674)
- commands/boostrap: use new cmds (ipfs/go-ipfs#5678)
- fix(cmd/add): progressbar output error when input is read from stdin (ipfs/go-ipfs#5743)
- unexport GOFLAGS (ipfs/go-ipfs#5747)
- refactor(cmds): use new cmds (ipfs/go-ipfs#5659)
- commands/filestore: use new cmds lib (ipfs/go-ipfs#5673)
- Fix broken links (ipfs/go-ipfs#5721)
- fix
ipfs help
bug #5557 (ipfs/go-ipfs#5573) - commands/bitswap: use new cmds lib (ipfs/go-ipfs#5676)
- refact(cmd/repo): repo's sub cmds uses new cmd lib (ipfs/go-ipfs#5677)
- fix the maketarball script (ipfs/go-ipfs#5718)
- output link to WebUI on daemon startup (ipfs/go-ipfs#5729)
- Move persistent datastores to plugins (ipfs/go-ipfs#5695)
- Update IPTB test (ipfs/go-ipfs#5636)
- enhance(cmd/verify): add goroutine count to improve verify speed (ipfs/go-ipfs#5710)
- Update go-mfs and go-unixfs (ipfs/go-ipfs#5714)
- fix(flag/version): flag
all
should have a higher priority (ipfs/go-ipfs#5719) - commands/p2p: use new cmds lib (ipfs/go-ipfs#5672)
- commands/dht: use new cmds lib (ipfs/go-ipfs#5671)
- commands/object: use new cmds (ipfs/go-ipfs#5666)
- commands/files: use new cmds (ipfs/go-ipfs#5665)
- cmds/env: add a config path helper (ipfs/go-ipfs#5712)
- github.com/ipfs/dir-index-html:
- show hash if given (ipfs/dir-index-html#21)
- Add "jpeg" as an alias to "jpg". (ipfs/dir-index-html#16)
- github.com/libp2p/go-addr-util:
- Improve test coverage (libp2p/go-addr-util#14)
- github.com/ipfs/go-bitswap:
- fix(prq): fix a bunch of goroutine leaks and deadlocks (ipfs/go-bitswap#87)
- remove allocations round two (ipfs/go-bitswap#84)
- fix(bitswap): remove CancelWants function (ipfs/go-bitswap#80)
- Avoid allocating for wantlist entries (ipfs/go-bitswap#79)
- ci(Jenkins): remove Jenkinsfile (ipfs/go-bitswap#83)
- More specific wantlists (ipfs/go-bitswap#74)
- fix(wantlist): remove races on setup (ipfs/go-bitswap#72)
- fix multiple data races (ipfs/go-bitswap#76)
- ci: add travis (ipfs/go-bitswap#75)
- providers: don't add every connected node as a provider (ipfs/go-bitswap#59)
- refactor(GetBlocks): Merge session/non-session (ipfs/go-bitswap#64)
- Feat: A more robust provider finder for sessions (for now) and soon for all bitswap (ipfs/go-bitswap#60)
- fix(tests): stabilize session tests (ipfs/go-bitswap#63)
- contexts: make sure to abort when a context is canceled (ipfs/go-bitswap#58)
- fix(sessions): explicitly connect found peers (ipfs/go-bitswap#56)
- Speed up sessions Round #1 (ipfs/go-bitswap#27)
- Fix debug log formatting issues (ipfs/go-bitswap#37)
- Feat/bandwidth limited tests (ipfs/go-bitswap#42)
- fix(tests): stabilize unreliable session tests (ipfs/go-bitswap#44)
- Bitswap Refactor #4: Extract session peer manager from sessions (ipfs/go-bitswap#26)
- Bitswap Refactor #3: Extract sessions to package (ipfs/go-bitswap#30)
- docs(comments): end comment sentences to have full-stop (ipfs/go-bitswap#33)
- Bitswap Refactor #2: Extract PeerManager From Want Manager + Unit Test (ipfs/go-bitswap#29)
- Bitswap Refactor #1: Session Manager & Extract Want Manager (ipfs/go-bitswap#28)
- fix(Receiver): Ignore unwanted blocks (ipfs/go-bitswap#24)
- feat(Benchmarks): Add real world dup blocks test (ipfs/go-bitswap#25)
- Feat/bitswap pr improvements (ipfs/go-bitswap#19)
- github.com/ipfs/go-blockservice:
- Don't return errors on closed exchange (ipfs/go-blockservice#15)
- github.com/ipfs/go-cid:
- fix inline CIDs generated by Prefix.Sum (ipfs/go-cid#84)
- Let Cid implement Binary[Un]Marshaler and Text[Un]Marshaler interfaces. (ipfs/go-cid#81)
- fix typo in comment (ipfs/go-cid#80)
- add codecs for Dash blocks, tx (ipfs/go-cid#78)
- github.com/ipfs/go-cidutil:
- Fix Travis CI to run all tests. (ipfs/go-cidutil#11)
- Changes needed for
--cid-base
option in go-ipfs (simplified vesion) (ipfs/go-cidutil#10) - add a utility method for sorting CID slices (ipfs/go-cidutil#5)
- github.com/libp2p/go-conn-security:
- fix link to usage example in README (libp2p/go-conn-security#4)
- github.com/ipfs/go-datastore:
- interfaces: make GetBacked* take a Read instead of a Datastore (ipfs/go-datastore#115)
- remove closer type assertions (ipfs/go-datastore#112)
- remove io.Closer from the transaction interface (ipfs/go-datastore#113)
- feat(datastore): expose datastore Close() (ipfs/go-datastore#111)
- query: make datastore ordering act like a user would expect (ipfs/go-datastore#110)
- delayed: implement io.Closer and export datastore type. (ipfs/go-datastore#108)
- split the datastore into a read and a write interface (ipfs/go-datastore#107)
- Describe behavior of Batching datastores (ipfs/go-datastore#105)
- handle concurrent puts/deletes in BasicBatch (ipfs/go-datastore#103)
- add a GetSize method (ipfs/go-datastore#99)
- github.com/ipfs/go-ds-badger:
- removed additional/wasteful Prefix conversion (ipfs/go-ds-badger#45)
- Enable Jenkins (ipfs/go-ds-badger#35)
- fix application or ordering for interface change (ipfs/go-ds-badger#44)
- Update badger (ipfs/go-ds-badger#40)
- github.com/ipfs/go-ds-flatfs:
- fix a goroutine leak killing the gateways (ipfs/go-ds-flatfs#51)
- github.com/ipfs/go-ds-leveldb:
- Expose Datastore type (ipfs/go-ds-leveldb#20)
- fix application or ordering for interface change (ipfs/go-ds-leveldb#23)
- github.com/ipfs/go-ipfs-cmds:
- fix sync error with go1.12 on darwin (ipfs/go-ipfs-cmds#147)
- cli: fix ignoring std{out,err} sync errors on windows (ipfs/go-ipfs-cmds#146)
- roundup of cleanup fixes (ipfs/go-ipfs-cmds#144)
- Update cors library (ipfs/go-ipfs-cmds#139)
- expand on the api error (ipfs/go-ipfs-cmds#138)
- set the connection close header if we have a body to read (ipfs/go-ipfs-cmds#116)
- print a nicer error on timeout/cancel (ipfs/go-ipfs-cmds#137)
- Add link traversal option (ipfs/go-ipfs-cmds#96)
- Don't skip stdin test on Windows (ipfs/go-ipfs-cmds#136)
- MakeTypedEncoder: accept results by pointer or value (ipfs/go-ipfs-cmds#134)
- github.com/ipfs/go-ipfs-config:
- Gateway.NoFetch (ipfs/go-ipfs-config#19)
- add a Clone function (ipfs/go-ipfs-config#16)
- randomports: give user ability to init ipfs using random port for swarm. (ipfs/go-ipfs-config#17)
- Allow the use of the User-Agent header (ipfs/go-ipfs-config#15)
- autorelay options (ipfs/go-ipfs-config#21)
- profile: add badger truncate option (ipfs/go-ipfs-config#20)
- github.com/ipfs/go-ipfs-delay:
- Feat/refactor wait time (ipfs/go-ipfs-delay#1)
- github.com/ipfs/go-ipfs-files:
- multipart: fix handling of common prefixes (ipfs/go-ipfs-files#7)
- create implicit directories from multipart requests (ipfs/go-ipfs-files#6)
- TarWriter (ipfs/go-ipfs-files#4)
- Refactor filename - file relation (ipfs/go-ipfs-files#2)
- github.com/ipfs/go-ipld-cbor:
- cbor: decode undefined as null (ipfs/go-ipld-cbor#54)
- error when trying to encode an empty link (ipfs/go-ipld-cbor#52)
- test for struct with both a cid and a bigint (ipfs/go-ipld-cbor#51)
- github.com/ipfs/go-ipld-format:
- Add a DAG walker with support for IPLD
Node
s (ipfs/go-ipld-format#39) - Add BufferedDAG wrapping Batch as a DAGService. (ipfs/go-ipld-format#48)
- Add a DAG walker with support for IPLD
- github.com/ipfs/go-ipld-git:
- Fix blob marshalling (ipfs/go-ipld-git#37)
- Re-enable assertion on commit size -- it is correct after #31 (ipfs/go-ipld-git#33)
- Use OS path separator in testing, fixes #30 (ipfs/go-ipld-git#34)
- Use rawdata length for size, fixes #7 (ipfs/go-ipld-git#31)
- Cache RawData for Commit, Tag, & Tree, fixes #6 (ipfs/go-ipld-git#28)
- Precompute Blob CID, fixes #21 (ipfs/go-ipld-git#27)
- Enable Jenkins (ipfs/go-ipld-git#29)
- github.com/ipfs/go-ipns:
- fix community/CONTRIBUTING.md link in README.md (ipfs/go-ipns#20)
- fix typo in README.md (ipfs/go-ipns#21)
- testing: disable inline peer ID test (ipfs/go-ipns#19)
- github.com/libp2p/go-libp2p:
- Fixed race conditions in mock package mock_stream and mock_conn (libp2p/go-libp2p#535)
- increase initial relay advertisement delay to 30s (libp2p/go-libp2p#534)
- Use PeerRouting in autorelay to find relay peer addresses (libp2p/go-libp2p#531)
- docs: update broken links in NEWS.md (libp2p/go-libp2p#517)
- don't advertise the raw public address in autorelay (libp2p/go-libp2p#511)
- mock: export ratelimiter as RateLimiter (libp2p/go-libp2p#507)
- readme: remove duplicate repo entries in README and package-list.json (libp2p/go-libp2p#506)
- explicit option to enable autorelay (libp2p/go-libp2p#500)
- Add delay in initial relay advertisement to allow the dht time to bootstrap (libp2p/go-libp2p#495)
- suppressing error msg for NoSecurity option (libp2p/go-libp2p#498)
- pulling updates (libp2p/go-libp2p#4)
- fix contributing link in README (libp2p/go-libp2p#494)
- Fix badges and links on README.md (libp2p/go-libp2p#485)
- mocknet: fix NewStream and self dials (libp2p/go-libp2p#480)
- deflake identify test (libp2p/go-libp2p#479)
- mocknet: use peer ID in peer address (libp2p/go-libp2p#476)
- autorelay (libp2p/go-libp2p#454)
- Getting updates (libp2p/go-libp2p#3)
- github.com/libp2p/go-libp2p-autonat:
- track autonat peer addresses (libp2p/go-libp2p-autonat#7)
- github.com/libp2p/go-libp2p-circuit:
- Don't log raw binary (libp2p/go-libp2p-circuit#53)
- github.com/libp2p/go-libp2p-connmgr:
- Fix concurrency and silence period not being honoured (libp2p/go-libp2p-connmgr#26)
- github.com/libp2p/go-libp2p-crypto:
- Fix: Remove redundant Ed25519 public key (#36). (libp2p/go-libp2p-crypto#54)
- libp2p badges, remove IPFS (libp2p/go-libp2p-crypto#52)
- Fix broken contribute link in README (libp2p/go-libp2p-crypto#46)
- forbid RSA keys smaller than 512 bits (libp2p/go-libp2p-crypto#43)
- Added ECDSA; Added RSA tests; Fixed linting errors; Handling all un-handled errors (libp2p/go-libp2p-crypto#35)
- switch to the go-crypto ed25519 implementation (libp2p/go-libp2p-crypto#38)
- update gogo protobuf (libp2p/go-libp2p-crypto#37)
- github.com/libp2p/go-libp2p-discovery:
- add a timeout to Provide in routing.Advertise (libp2p/go-libp2p-discovery#12)
- correctly encode ns to CID (libp2p/go-libp2p-discovery#11)
- use 6hrs as ttl for routing based advertisements (libp2p/go-libp2p-discovery#8)
- github.com/libp2p/go-libp2p-host:
- Helper to get PeerInfo from Host (libp2p/go-libp2p-host#20)
- github.com/libp2p/go-libp2p-kad-dht:
- fix(dialQueue): account for failed dials (libp2p/go-libp2p-kad-dht#277)
- Fix Bootstrap sub-queries (libp2p/go-libp2p-kad-dht#264)
- dial queue: fix possible goroutine leak (libp2p/go-libp2p-kad-dht#262)
- Alter some logging (libp2p/go-libp2p-kad-dht#269)
- Revert #236: Test go mod in travis and use major versioning in import paths (libp2p/go-libp2p-kad-dht#259)
- fix tests on freebsd (libp2p/go-libp2p-kad-dht#255)
- Fix "no protocol with name dnsaddr" error (libp2p/go-libp2p-kad-dht#247)
- Fix a race in dial queue (libp2p/go-libp2p-kad-dht#248)
- Fix races with DialQueue variables (libp2p/go-libp2p-kad-dht#241)
- Fix CircleCI (libp2p/go-libp2p-kad-dht#238)
- Adaptive queue for staging dials (libp2p/go-libp2p-kad-dht#237)
- Add the full libp2p default bootstrap peer list (libp2p/go-libp2p-kad-dht#226)
- Revert "Tidy up bootstrapping" (libp2p/go-libp2p-kad-dht#232)
- Tidy up bootstrapping (libp2p/go-libp2p-kad-dht#225)
- Revert "Remove signal bootstrapping" (libp2p/go-libp2p-kad-dht#227)
- Remove signal bootstrapping (libp2p/go-libp2p-kad-dht#224)
- fix a potential DHT query hang (libp2p/go-libp2p-kad-dht#219)
- docs: duplicate pkg documentation (libp2p/go-libp2p-kad-dht#218)
- tests: skip key inlining test (libp2p/go-libp2p-kad-dht#212)
- Rephrase "betterPeersToQuery" method comment to be less cryptic (libp2p/go-libp2p-kad-dht#206)
- github.com/libp2p/go-libp2p-loggables:
- test: add unit tests (libp2p/go-libp2p-loggables#21)
- github.com/libp2p/go-libp2p-netutil:
- Add tests (libp2p/go-libp2p-netutil#28)
- github.com/libp2p/go-libp2p-peer:
- fix: re-enable peer ID inlining but make it configurable (libp2p/go-libp2p-peer#42)
- Protobuf and JSON (un-)marshalling methods for peer.ID (libp2p/go-libp2p-peer#41)
- disable key inlining (libp2p/go-libp2p-peer#40)
- github.com/libp2p/go-libp2p-peerstore:
- Add unit test to verify AddAddr doesn't shorten TTL (libp2p/go-libp2p-peerstore#52)
- disable inline-peer id test (libp2p/go-libp2p-peerstore#49)
- README: Update contributing guideline linkrot. (libp2p/go-libp2p-peerstore#48)
- Deterministic benchmark order; Keybook interface benchmarks (libp2p/go-libp2p-peerstore#43)
- PeerInfo UnMarshal Error #393 (libp2p/go-libp2p-peerstore#45)
- fix the inline key test (libp2p/go-libp2p-peerstore#44)
- github.com/libp2p/go-libp2p-pubsub:
- move timecache check/update after validation (libp2p/go-libp2p-pubsub#156)
- fix nonsensical check (libp2p/go-libp2p-pubsub#154)
- Extend validator interface to include message source (libp2p/go-libp2p-pubsub#151)
- Implement peer blacklist (libp2p/go-libp2p-pubsub#149)
- make timecache duration configurable (libp2p/go-libp2p-pubsub#148)
- godoc is not html either (libp2p/go-libp2p-pubsub#147)
- godoc documentation is not markdown (libp2p/go-libp2p-pubsub#146)
- Add documentation for subscribe's non-instanteneous semantics (libp2p/go-libp2p-pubsub#145)
- Some documentation (libp2p/go-libp2p-pubsub#140)
- rework peer tracking logic to handle multiple connections (libp2p/go-libp2p-pubsub#132)
- github.com/libp2p/go-libp2p-pubsub-router:
- encode record-store keys in pubsub (libp2p/go-libp2p-pubsub-router#17)
- github.com/libp2p/go-libp2p-quic-transport:
- fix badges in README (libp2p/go-libp2p-quic-transport#39)
- Fix missing transport parameter in dialed connection (libp2p/go-libp2p-quic-transport#38)
- github.com/libp2p/go-libp2p-routing:
- Update the comment on IpfsRouting.Bootstrap (libp2p/go-libp2p-routing#36)
- github.com/libp2p/go-libp2p-swarm:
- Make FD limits configurable by environment property (libp2p/go-libp2p-swarm#102)
- Fix logging race (libp2p/go-libp2p-swarm#100)
- Add CircleCI config (libp2p/go-libp2p-swarm#99)
- Enhance debug logging in dial limiter (libp2p/go-libp2p-swarm#98)
- dialer: handle dial cancel and/or completion before trying new addresses (libp2p/go-libp2p-swarm#96)
- avoid spawning goroutines for canceled dials (libp2p/go-libp2p-swarm#95)
- warn when we encounter a useless transport (libp2p/go-libp2p-swarm#90)
- github.com/libp2p/go-libp2p-transport:
- fix transport tests for quic (libp2p/go-libp2p-transport#39)
- fix: fully close streams before returning (libp2p/go-libp2p-transport#37)
- fix typo in README (libp2p/go-libp2p-transport#36)
- github.com/libp2p/go-libp2p-transport-upgrader:
- annotate errors (libp2p/go-libp2p-transport-upgrader#11)
- github.com/ipfs/go-log:
- uglify the (event) logs (ipfs/go-log#53)
- add environment variable for writing tracing information to a file (ipfs/go-log#52)
- correctly display the line number when FinishWithErr fails (ipfs/go-log#51)
- github.com/libp2p/go-maddr-filter:
- test: extend test to improve coverage (libp2p/go-maddr-filter#7)
- github.com/ipfs/go-merkledag:
- Increase FetchGraphConcurrency to 32 (ipfs/go-merkledag#29)
- Enable CI (ipfs/go-merkledag#9)
- fix a fetch deadlock on error (ipfs/go-merkledag#21)
- Wait for all go routines to finish before function returns (ipfs/go-merkledag#19)
- github.com/ipfs/go-metrics-prometheus:
- use prometheus instead of gxed (ipfs/go-metrics-prometheus#3)
- github.com/ipfs/go-mfs:
- fix(mv): dst filename error (ipfs/go-mfs#62)
- fix over-wait in WaitPub (ipfs/go-mfs#53)
- Fix/32/pr ports from go-ipfs to go-mfs (ipfs/go-mfs#49)
- remove the
fullSync
option fromupdateChildEntry
(ipfs/go-mfs#45) - Various refactorings (ipfs/go-mfs#36)
- use RW lock for the
File
's lock (ipfs/go-mfs#43) - add documentation links in README (ipfs/go-mfs#41)
- [WIP] documentation notes (ipfs/go-mfs#27)
- feat(inode): add inode struct (ipfs/go-mfs#12)
- github.com/libp2p/go-mplex:
- fix deadlock (libp2p/go-mplex#39)
- When a stream is closed, cancel pending writes (libp2p/go-mplex#35)
- make sure to but the buffer back in the pool (libp2p/go-mplex#34)
- reduce the packet count (libp2p/go-mplex#29)
- github.com/ipfs/go-path:
- fix: no components error (ipfs/go-path#18)
- nit: validate CIDs in IPLD paths (ipfs/go-path#16)
- github.com/libp2p/go-reuseport:
- Fix build on wasm (libp2p/go-reuseport#59)
- Use Go Control API (libp2p/go-reuseport#56)
- Support WASM (libp2p/go-reuseport#54)
- github.com/libp2p/go-reuseport-transport:
- Update to go-reuseport 0.2.0 (libp2p/go-reuseport-transport#6)
- github.com/libp2p/go-stream-muxer:
- add standard reset error (libp2p/go-stream-muxer#23)
- ci: fix (libp2p/go-stream-muxer#24)
- Document Reset versus Close (libp2p/go-stream-muxer#18)
- WIP document Conn.Close (libp2p/go-stream-muxer#19)
- github.com/libp2p/go-tcp-transport:
- Deprecate IPFS_REUSEPORT, use LIBP2P_TCP_REUSEPORT (libp2p/go-tcp-transport#27)
- github.com/ipfs/go-unixfs:
- unixfile: precalc dir size (ipfs/go-unixfs#61)
- Archive refactor (ipfs/go-unixfs#59)
- decouple the DAG traversal logic from the DAG reader (local branch) (ipfs/go-unixfs#60)
- Unixfs: enforce refs on files when using nocopy (ipfs/go-unixfs#56)
- Fix/handle overflow (ipfs/go-unixfs#53)
- feat(Directory): Add EnumLinksAsync method (ipfs/go-unixfs#39)