@cryptotaxi247 / kubo / commits / f55d3e8a1

feat: release 0.5.0

Steven Allen committed Apr 28, 2020 at 07:47 UTC f55d3e8a150d905059e80892362dc48c4603705c
3 files changed +1269 -222
CHANGELOG.md
+1240 -221
@@ -1,331 +1,1350 @@
1 # go-ipfs changelog
2
3 -## 0.5.0 RC1 2020-04-06
3 +## 0.5.0 2020-04-28
4
5 -**WARNING** THIS IS A DRAFT! It highlights some of the new features, along with
6 -a bunch of important errata. But it's _definitely_ missing a _ton_ of shiny new
7 -features.
5 +We're excited to announce go-ipfs 0.5.0! This is by far the largest go-ipfs release with ~2500 commits, 98 contributors, and over 650 PRs across ipfs, libp2p, and multiformats.
6
9 -### Highlights & Errata
7 +### Highlights
8
11 -This release includes many important changes users should be aware of.
9 +#### Content Routing
10
13 -#### New DHT
11 +The primary focus of this release was on improving content routing. That is, advertising and finding content. To that end, this release heavily focuses on improving the DHT.
12
15 -This release includes an almost completely rewritten DHT implementation with a
16 -new protocol version. From a user's perspective, providing content, finding
17 -content, and resolving IPNS records should simply get faster. However, this is a
18 -_significant_ (albeit well tested) change and significant changes are always
19 -risky, so heads up.
13 +##### Improved DHT
14
21 -##### Old v. New
15 +The distributed hash table (DHT) is how IPFS nodes keep track of who has what data. The DHT implementation has been almost completely rewritten in this release. Providing, finding content, and resolving IPNS records are now all much faster. However, there are risks involved with this update due to the significant amount of changes that have gone into this feature.
16
17 The current DHT suffers from three core issues addressed in this release:
18
25 -1. Most peers in the DHT cannot be dialed (e.g., due to firewalls and NATs).
26 - Much of a DHT query time is wasted trying to connect to peers that cannot be
27 - reached.
28 -2. The DHT query logic doesn't properly terminate when it hits the end of the
29 - query and, instead, aggressively keeps on searching.
30 -3. The routing tables are poorly maintained. This can cause a search that should
31 - be logarithmic in the size of the network to be linear.
19 +- Most peers in the DHT cannot be dialed (e.g., due to firewalls and NATs). Much of a DHT query time is wasted trying to connect to peers that cannot be reached.
20 +- The DHT query logic doesn't properly terminate when it hits the end of the query and, instead, aggressively keeps on searching.
21 +- The routing tables are poorly maintained. This can cause a search that should be logarithmic in the size of the network to be linear.
22
23 ###### Reachable
24
35 -We have addressed the problem of undialable nodes by having nodes wait to join
36 -the DHT as "server" nodes until they've confirmed that they are reachable from
37 -the public internet. Additionally, we've introduced:
38 -
39 -* A new libp2p protocol to push updates to our peers when we start/stop listen
40 - on protocols.
41 -* A libp2p event bus for processing updates like these.
42 -* A new DHT protocol version. New DHT nodes will not admit old DHT nodes into
43 - their routing tables. Old DHT nodes will still be able to issue queries
44 - against the new DHT, they just won't be queried or referred by new DHT nodes.
45 - This way, old, potentially unreachable nodes with bad routing tables won't
46 - pollute the new DHT.
47 -
48 -Unfortunately, there's a significant downside to this approach: VPNs, offline
49 -LANs, etc. where _all_ nodes on the network have private IP addresses and never
50 -communicate over the public internet. In this case, none of these nodes would be
51 -"publicly reachable".
52 -
53 -To address this last point, go-ipfs 0.5.0 will run _two_ DHTs: one for private
54 -networks and one for the public internet. That is, every node will participate
55 -in a LAN DHT and a public WAN DHT.
56 -
57 -**RC1 NOTE:** Several of these features have not been enabled in RC1:
58 -
59 -1. We haven't yet switched the protocol version and will be running the DHT in
60 - "compatibility mode" with the old DHT. Once we flip the switch and enable the
61 - new protocol version, we will need to ensure that at least 20% of the
62 - publicly reachable DHT speaks the new protocol, all at once. The plan is to
63 - introduce a large number of "booster" nodes while the network transitions.
64 -2. We haven't yet introduced the split LAN/WAN DHTs. We're still testing this
65 - approach and considering alternatives.
66 -3. Because we haven't introduced the LAN/WAN DHT split, IPFS nodes running in
67 - DHT server mode will continue to run in DHT server mode _without_ waiting to
68 - confirm that they're reachable from the public internet. Otherwise, we'd
69 - break IPFS nodes running DHTs in VPNs and disconnected LANs.
25 +We have addressed the problem of undialable nodes by having nodes wait to join the DHT as _server_ nodes until they've confirmed that they are reachable from the public internet.
26 +
27 +To ensure that nodes which are not publicly reachable (ex behind VPNs, offline LANs, etc.) can still coordinate and share data, Go-IPFS 0.5 will run two DHTs: one for private networks and one for the public internet. Every node will participate in a LAN DHT and a public WAN DHT. See [Dual DHT](#dual-dht) for more details.
28 +
29 +###### Dual DHT
30 +
31 +All IPFS nodes will now run two DHTs: one for the public internet WAN, and one for their local network LAN.
32 +
33 +1. When connected to the public internet, IPFS will use both DHTs for finding peers, content, and IPNS records. Nodes only publish provider and IPNS records to the WAN DHT to avoid flooding the local network.
34 +2. When not connected to the public internet, nodes publish provider and IPNS records to the LAN DHT.
35 +
36 +The WAN DHT includes all peers with at least one public IP address. This release will only consider an IPv6 address public if it is in the [public internet range `2000::/3`](https://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xhtml).
37 +
38 +This feature should not have any noticeable impact on Go-IPFS, performance, or otherwise. Everything should continue to work in all the currently supported network configurations: VPNs, disconnected LANs, public internet, etc.
39
40 ###### Query Logic
41
73 -We've fixed the DHT query logic by correctly implementing Kademlia (with a few
74 -tweaks). This should significantly speed up:
42 +We've improved the DHT query logic to more closely follow Kademlia. This should significantly speed up:
43
76 -* Publishing IPNS & provider records. We previously continued searching for
77 - closer and closer peers to the "target" until we timed out, then we put to the
78 - closest peers we found.
79 -* Resolving IPNS addresses. We previously continued IPNS record searches until
80 - we ran out of peers to query, timed out, or found 16 records.
44 +- Publishing IPNS & provider records.
45 +- Resolving IPNS addresses.
46
82 -In both cases, we now continue till we find the closest peers then stop.
47 +Previously, nodes would continue searching till they timed out or ran out of peers before stopping (putting or returning data found). Now, nodes will now stop as soon as they find the closest peers.
48
49 ###### Routing Tables
50
51 Finally, we've addressed the poorly maintained routing tables by:
52
88 -* Reducing the likelihood that the connection manager will kill connections to
89 - peers in the routing table.
90 -* Keeping peers in the routing table, even if we get disconnected from them.
91 -* Actively and frequently querying the DHT to keep our routing table full.
53 +- Reducing the likelihood that the connection manager will kill connections to peers in the routing table.
54 +- Keeping peers in the routing table, even if we get disconnected from them.
55 +- Actively and frequently querying the DHT to keep our routing table full.
56 +- Prioritizing useful peers that respond to queries quickly.
57
58 ##### Testing
59
95 -The DHT rewrite was made possible by our new testing framework,
96 -[testground](https://github.com/ipfs/testground), which allows us to spin up
97 -multi-thousand node tests with simulated real-world network conditions. With
98 -testground and some custom analysis tools, we were able to gain confidence that
99 -the new DHT implementation behaves correctly.
60 +The DHT rewrite was made possible by [Testground](https://github.com/ipfs/testground/), our new testing framework. Testground allows us to spin up multi-thousand node tests with simulated real-world network conditions. By combining Testground and some custom analysis tools, we were able to gain confidence that the new DHT implementation behaves correctly.
61 +
62 +##### Provider Record Changes
63 +
64 +When you add content to your IPFS node, you advertise this content to the network by announcing it in the DHT. We call this "providing".
65 +
66 +However, go-ipfs has multiple ways to address the same underlying bytes. Specifically, we address content by content ID (CID) and the same underlying bytes can be addressed using (a) two different versions of CIDs (CIDv1 and CIDv2) and (b) with different "codecs" depending on how we're interpreting the data.
67 +
68 +Prior to go-ipfs 0.5.0, we used the content id (CID) in the DHT when sending out provider records for content. Unfortunately, this meant that users trying to find data announced using one CID wouldn't find nodes providing the content under a different CID.
69
101 -#### Refactored Bitswap
70 +In go-ipfs 0.5.0, we're announcing data by _multihash_, not _CID_. This way, regardless of the CID version used by the peer adding the content, the peer trying to download the content should still be able to find it.
71
103 -This release includes a _major_ [bitswap refactor][bitswap-refactor] running a
104 -new, but backwards compatible, bitswap protocol. We expect these changes to
105 -improve performance significantly.
72 +**Warning:** as part of the network, this could impact finding content added with CIDv1. Because go-ipfs 0.5.0 will announce and search for content using the bare multihash (equivalent to the v0 CID), go-ipfs 0.5.0 will be unable to find CIDv1 content published by nodes prior to go-ipfs 0.5.0 and vice-versa. As CIDv1 is _not_ enabled by default so we believe this will have minimal impact. However, users are _strongly_ encouraged to upgrade as soon as possible.
73
107 -With the refactored bitswap, we expect:
74 +#### Content Transfer
75
109 -* Few to no duplicate blocks when fetching data from other nodes speaking the
110 - _new_ protocol.
111 -* Better parallelism when fetching from multiple peers.
76 +A secondary focus in this release was improving content _transfer_, our data exchange protocols.
77
113 -Note, the new bitswap won't magically make downloading content any faster until
114 -both seeds and leaches have updated. If you're one of the first to upgrade to
115 -0.5.0 and try downloading from peers that haven't upgraded, you're unlikely to
116 -see much of a performance improvement, if any.
78 +##### Refactored Bitswap
79 +
80 +This release includes a major [Bitswap refactor](https://blog.ipfs.io/2020-02-14-improved-bitswap-for-container-distribution/), running a new and backward compatible Bitswap protocol. We expect these changes to improve performance significantly.
81 +
82 +With the refactored Bitswap, we expect:
83 +
84 +- Few to no duplicate blocks when fetching data from other nodes speaking the _new_ protocol.
85 +- Better parallelism when fetching from multiple peers.
86 +
87 +The new Bitswap won't magically make downloading content any faster until both seeds and leaches have updated. If you're one of the first to upgrade to `0.5.0` and try downloading from peers that haven't upgraded, you're unlikely to see much of a performance improvement.
88
89 [bitswap-refactor]: https://blog.ipfs.io/2020-02-14-improved-bitswap-for-container-distribution/
90
120 -#### Provider Record Changes
91 +##### Server-Side Graphsync Support (Experimental)
92 +
93 +Graphsync is a new exchange protocol that operates at the IPLD Graph layer instead of the Block layer like bitswap.
94
122 -When you add content to your IPFS node, you advertise this content to the
123 -network by announcing it in the DHT. We call this "providing".
95 +For example, to download "/ipfs/QmExample/index.html":
96
125 -However, go-ipfs has multiple ways to address the same underlying bytes.
126 -Specifically, we address content by content ID (CID) and the same underlying
127 -bytes can be addressed using (a) two different versions of CIDs (CIDv1 and
128 -CIDv2) and (b) with different "codecs" depending on how we're interpreting the
129 -data.
97 +* Bitswap would download QmFoo, lookup "index.html" in the directory named by
98 +QmFoo, resolving it to a CID QmIndex. Finally, bitswap would download QmIndex.
99 +* Graphsync would ask peers for "/ipfs/QmFoo/index.html". Specifically, it would ask for the child named "index.html" of the object named by "QmFoo".
100
131 -Prior to go-ipfs 0.5.0, we used the content id (CID) in the DHT when sending out
132 -provider records for content. Unfortunately, this meant that users trying to
133 -find data announced using one CID wouldn't find nodes providing the content
134 -under a different CID.
101 +This saves us round-trips in exchange for some extra protocol complexity. Moreover, this protocol allows specifying more powerful queries like "give me everything under QmFoo". This can be used to quickly download a large amount of data with few round-trips.
102
136 -In go-ipfs 0.5.0, we're announcing data by _multihash_, not _CID_. This way,
137 -regardless of the CID version used by the peer adding the content, the peer
138 -trying to download the content should still be able to find it.
103 +At the moment, go-ipfs cannot use this protocol to download content from other peers. However, if enabled, go-ipfs can _serve_ content to other peers over this protocol. This may be useful for pinning services that wish to quickly replicate client data.
104
140 -**Warning:** as part of the network, this could impact finding content added
141 -with CIDv1. Because go-ipfs 0.5.0 will announce and search for content using the
142 -bare multihash (equivalent to the v0 CID), go-ipfs 0.5.0 will be unable to find
143 -CIDv1 content published by nodes prior to go-ipfs 0.5.0 and vice-versa. As CIDv1
144 -is _not_ enabled by default so we believe this will have minimal impact.
145 -However, users are _strongly_ encouraged to upgrade as soon as possible.
105 +To enable, run:
106
147 -#### IPFS/Libp2p Address Format
107 +```bash
108 +> ipfs config --json Experimental.GraphsyncEnabled true
109 +```
110
149 -If you've ever run a command like `ipfs swarm peers`, you've likely seen paths
150 -that look like `/ip4/193.45.1.24/tcp/4001/ipfs/QmSomePeerID`. These paths are
151 -_not_ file paths, they're multiaddrs; addresses of peers on the network.
111 +#### Datastores
112
153 -Unfortunately, `/ipfs/Qm...` is _also_ the same path format we use for files.
154 -This release, changes the multiaddr format from
155 -<code>/ip4/193.45.1.24/tcp/4001/<b>ipfs</b>/QmSomePeerID</code> to
156 -<code>/ip4/193.45.1.24/tcp/4001/<b>p2p</b>/QmSomePeerID</code> to make the
157 -distinction clear.
113 +Continuing on with the of improving our core data handling subsystems, both of the datastores used in go-ipfs, badger and flatfs, have received important updates in this release:
114
159 -What this means for users:
115 +##### Badger
116
161 -* Old-style multiaddrs will still be accepted as inputs to IPFS.
162 -* If you were using a multiaddr library (go, js, etc.) to name _files_ because
163 - `/ipfs/QmSomePeerID` looks like `/ipfs/QmSomeFile`, your tool may break if you
164 - upgrade this library.
165 -* If you're manually parsing multiaddrs and are searching for the string
166 - `/ipfs/`..., you'll need to search for `/p2p/...`.
117 +Badger has been in Go-IPFS for over a year as an experimental feature, and we're promoting it to stable (but not default). For this release, we've switched from writing to disk synchronously to explicitly syncing where appropriate, significantly increasing write throughput.
118
119 +The current and default datastore used by Go-IPFS is [FlatFS](https://github.com/ipfs/go-ds-flatfs). FlatFS essentially stores blocks of data as individual files on your file system. However, there are lots of optimizations a specialized database can do that a standard file system can not.
120
169 -#### Minimum RSA Key Size
121 +The benefit of Badger is that adding/fetching data to/from Badger is significantly faster than adding/fetching data to/from the default datastore, FlatFS. In some tests, adding data to Badger is 32x faster than FlatFS (in this release).
122
171 -Previously, IPFS did not enforce a minimum RSA key size. In this release, we've
172 -introduced a minimum 2048 bit RSA key size. IPFS generates 2048 bit RSA keys by
173 -default so this shouldn't be an issue for anyone in practice. However, users who
174 -explicitly chose a smaller key size will not be able to communicate with new
175 -nodes.
123 +###### Enable Badger
124
177 -Unfortunately, the some of the bootstrap peers _did_ intentionally generate 1024
178 -bit RSA keys so they'd have vanity peer addresses (starting with QmSoL for
179 -"solar net"). All IPFS nodes should _also_ have peers with >= 2048 bit RSA keys
180 -in their bootstrap list, but we've introduced a migration to ensure this.
125 +In this release, we're marking the badger datastore as stable. However, we're not yet enabling it by default. You can enable it at initialization by running: `ipfs init --profile=badgerds`
126
182 -We implemented this change to follow security best practices and to remove a
183 -potential foot-gun. However, in practice, the security impact of allowing
184 -insecure RSA keys should have been next to none because IPFS doesn't trust other
185 -peers on the network anyways.
127 +###### Issues with Badger
128
187 -#### Subdomain Gateway
129 +While Badger is a great solution, there are some issues you should consider before enabling it.
130
189 -The gateway will redirect from `http://localhost:5001/ipfs/CID/...` to
190 -`http://CID.ipfs.localhost:5001/...` by default. This will:
131 +Badger is complicated. FlatFS pushes all the complexity down into the filesystem itself. That means that FlatFS is only likely to lose your data if your underlying filesystem gets corrupted while there are more opportunities for Badger itself to get corrupted.
132
192 -* Ensure that every dapp gets its own browser origin.
193 -* Make it easier to write websites that "just work" with IPFS because absolute
194 - paths will now work.
195 -
196 -Paths addressing the gateway by IP address (`http://127.0.0.1:5001/ipfs/CID`)
197 -will not be altered as IP addresses can't have subdomains.
133 +Badger can use a lot of memory. In this release, we've tuned Badger to use `~20MB` of memory by default. However, it can still produce spikes as large as [`1GiB` of data](https://github.com/dgraph-io/badger/issues/1292) in memory usage when garbage collecting.
134 +
135 +Finally, badger isn't very aggressive when it comes to garbage collection, and we're still investigating ways to get it to more aggressively clean up after itself.
136 +
137 +We suggest you use Badger if:
138 +
139 +- Performance is your main requirement.
140 +- You rarely delete anything.
141 +- You have some memory to spare.
142 +
143 +##### Flatfs
144 +
145 +In the flatfs datastore, we've fixed an issue where temporary files could be left behind in some cases. While this release will avoid leaving behind temporary files, you may want to remove any left behind by previous releases:
146 +
147 +```bash
148 +> rm ~/.ipfs/blocks/*/put-*
149 +> rm ~/.ipfs/blocks/du-*
150 +```
151 +
152 +We've also hardened several edge-cases in flatfs to reduce the impact of file descriptor limits, spurious crashes, etc.
153 +
154 +#### Libp2p
155 +
156 +Many improvements and bug fixes were made to libp2p over the course of this release. These release notes only include the most important and those most relevant to the content routing improvements.
157 +
158 +##### Improved Backoff Logic
159 +
160 +When we fail to connect to a peer, we "backoff" and refuse to re-connect to that peer for a short period of time. This prevents us from wasting resources repeatedly failing to connect to the same unreachable peer.
161 +
162 +Unfortunately, the old backoff logic was flawed: if we failed to connect to a peer and entered the "backoff" state, we wouldn't try to re-connect to that peer even if we had learned new and potentially working addresses for the peer. We've fixed this by applying backoff to each _address_ instead of to the peer as a whole. This achieves the same result as we'll stop repeatedly trying to connect to the peer at known-bad addresses, but it allows us to reach the peer if we later learn about a good address.
163 +
164 +##### AutoNAT
165 +
166 +This release uses Automatic NAT Detection (AutoNAT) - determining if the node is _reachable_ from the public internet - to make decisions about how to participate in IPFS. This subsystem is used to determine if the node should store some of the public DHT, and if it needs to use relays to be reached by others. In short:
167 +
168 +1. An AutoNAT client asks a node running an AutoNAT service if it can be reached at one of a set of guessed addresses.
169 +2. The AutoNAT service attempts to _dial back_ those addresses, with some restrictions. We won't dial back to a different IP address, for example.
170 +3. If the AutoNAT service succeeds, it reports back the address it successfully dialed, and the AutoNAT client knows that it is reachable from the public internet.
171 +
172 +All nodes act as AutoNAT clients to determine if they should switch into DHT server mode. As of this release, nodes will by default run the service side of AutoNAT - verifying connectivity - for up to 30 peers every minute. This service should have minimal overhead, and will be disabled for nodes in the `lowpower` configuration profile, and those which believe they are not publicly reachable.
173 +
174 +In addition to enabling the AutoNAT service by default, this release changes the AutoNAT config options:
175 +
176 +1. The `Swarm.EnableAutoNATService` option has been removed.
177 +2. A new AutoNAT section has been added to the config. This section is empty by default.
178
199 -Note: cURL doesn't follow redirects by default. To avoid breaking cURL and other
200 -clients that don't support redirects, go-ipfs will return the requested file
201 -along with the redirect. Browsers will follow the redirect and abort the
202 -download while cURL will ignore the redirect and finish the download.
179
204 -#### TLS By Default
180 +##### IPFS/Libp2p Address Format
181
206 -In this release, we're switching TLS to be the _default_ transport. This means
207 -we'll try to encrypt the connection with TLS before re-trying with SECIO.
182 +If you've ever run a command like `ipfs swarm peers`, you've likely seen paths that look like `/ip4/193.45.1.24/tcp/4001/ipfs/QmSomePeerID`. These paths are _not_ file paths, they're multiaddrs; addresses of peers on the network.
183
209 -Contrary to the announcement in the go-ipfs 0.4.23 release notes, this release
210 -does not remove SECIO support to maintain compatibility with js-ipfs.
184 +Unfortunately, `/ipfs/Qm...` is _also_ the same path format we use for files. This release, changes the multiaddr format from <code>/ip4/193.45.1.24/tcp/4001/<b>ipfs</b>/QmSomePeerID</code> to <code>/ip4/193.45.1.24/tcp/4001/<b>p2p</b>/QmSomePeerID</code> to make the distinction clear.
185
212 -#### SECIO Deprecation Notice
186 +What this means for users:
187 +
188 +* Old-style multiaddrs will still be accepted as inputs to IPFS.
189 +* If you were using a multiaddr library (go, js, etc.) to name _files_ because `/ipfs/QmSomePeerID` looks like `/ipfs/QmSomeFile`, your tool may break if you upgrade this library.
190 +* If you're manually parsing multiaddrs and are searching for the string `/ipfs/`..., you'll need to search for `/p2p/...`.
191 +
192 +##### Minimum RSA Key Size
193 +
194 +Previously, IPFS did not enforce a minimum RSA key size. In this release, we've introduced a minimum 2048 bit RSA key size. IPFS generates 2048 bit RSA keys by default so this shouldn't be an issue for anyone in practice. However, users who explicitly chose a smaller key size will not be able to communicate with new nodes.
195 +
196 +Unfortunately, the some of the bootstrap peers _did_ intentionally generate 1024 bit RSA keys so they'd have vanity peer addresses (starting with QmSoL for "solar net"). All IPFS nodes should _also_ have peers with >= 2048 bit RSA keys in their bootstrap list, but we've introduced a migration to ensure this.
197 +
198 +We implemented this change to follow security best practices and to remove a potential foot-gun. However, in practice, the security impact of allowing insecure RSA keys should have been next to none because IPFS doesn't trust other peers on the network anyways.
199 +
200 +##### TLS By Default
201 +
202 +In this release, we're switching TLS to be the _default_ transport. This means we'll try to encrypt the connection with TLS before re-trying with SECIO.
203 +
204 +Contrary to the announcement in the go-ipfs 0.4.23 release notes, this release does not remove SECIO support to maintain compatibility with js-ipfs.
205 +
206 +Note: The `Experimental.PreferTLS` configuration option is now ignored.
207 +
208 +##### SECIO Deprecation Notice
209
210 SECIO should be considered to be well on the way to deprecation and will be
211 completely disabled in either the next release (0.6.0, ~mid May) or the one
212 following that (0.7.0, ~end of June). Before SECIO is disabled, support will be
213 added for the NOISE transport for compatibility with other IPFS implementations.
214
219 -#### QUIC Upgrade
215 +##### QUIC Upgrade
216 +
217 +If you've been using the experimental QUIC support, this release upgrades to a new and _incompatible_ version of the QUIC protocol (draft 27). Old and new go-ipfs nodes will still interoperate, but not over the QUIC transport.
218 +
219 +We intend to standardize on this draft of the QUIC protocol and enable QUIC by default in the next release if all goes well.
220 +
221 +NOTE: QUIC does not yet support [private networks](./docs/experimental-features.md#private-networks).
222 +
223 +#### Gateway
224 +
225 +In addition to a bunch of bug fixes, we've made two improvements to the gateway.
226 +
227 +You can play with both of these features by visiting:
228 +
229 +> http://bafybeia6po64b6tfqq73lckadrhpihg2oubaxgqaoushquhcek46y3zumm.ipfs.io/
230 +
231 +##### Subdomain Gateway
232 +
233 +First up, we've changed how URLs in the IPFS gateway work for better browser
234 +security. The gateway will now redirect from
235 +`http://localhost:5001/ipfs/CID/...` to `http://CID.ipfs.localhost:5001/...` by
236 +default. This:
237 +
238 +* Ensures that every dapp gets its own browser origin.
239 +* Makes it easier to write websites that "just work" with IPFS because absolute paths will now work.
240 +
241 +Paths addressing the gateway by IP address (`http://127.0.0.1:5001/ipfs/CID`) will not be altered as IP addresses can't have subdomains.
242 +
243 +Note: cURL doesn't follow redirects by default. To avoid breaking cURL and other clients that don't support redirects, go-ipfs will return the requested file along with the redirect. Browsers will follow the redirect and abort the download while cURL will ignore the redirect and finish the download.
244 +
245 +##### Directory Listing
246 +
247 +The second feature is face-lift to the directory listing theme.
248 +
249 +> http://bafybeia6po64b6tfqq73lckadrhpihg2oubaxgqaoushquhcek46y3zumm.ipfs.io/
250 +
251 +#### IPNS
252 +
253 +This release includes several new IPNS and IPNS-related features.
254 +
255 +##### ENS
256 +
257 +IPFS now resolves [ENS](https://ens.domains/) names (e.g., [/ipns/ipfs.eth](https://ipfs.eth.dweb.link)) via DNSLink.
258 +
259 +##### IPNS over PubSub
260 +
261 +IPFS has had experimental support for resolving IPNS over pubsub for a while. However, in the past, this feature was passive. When resolving an IPNS name, one would join a pubsub topic for the IPNS name and subscribe to _future_ updates. Unfortunately, this wouldn't speed-up initial IPNS lookups.
262 +
263 +In this release, we've introduced a new "record fetch" protocol to speedup the initial lookup. Now, after subscribing to the pubsub topic for the IPNS key, nodes will use this new protocol to "fetch" the last-seen IPNS record from all peers subscribed to the topic.
264 +
265 +This feature will be enabled by default in 0.6.0.
266 +
267 +##### IPNS with base32 PIDs
268 +
269 +IPNS names can now be expressed as special multibase CIDs. E.g.,
270 +
271 +> /ipns/bafzbeibxfjp4gaxc4cdn57257cyvc7jfa4rlp4e5min6geg44m57g6nx7e
272 +
273 +Importantly, this allows IPNS names to appear in subdomains in the new [subdomain gateway](#subdomain-gateway) feature.
274 +
275 +#### PubSub
276
221 -If you've been using the experimental QUIC support, this release includes
277 +We have made two major changes to the pubsub subsystem in this release:
278
223 -**RC1 NOTE:** We've temporarily backed out of the new QUIC version because it
224 -currently requires go 1.14 and go 1.14 has some scheduler bugs that go-ipfs can
225 -reliably trigger.
279 +1. Pubsub now more aggressively finds and connects to other peers peers subscribing to the same topic.
280 +2. Go-ipfs has switched its the default pubsub router from "floodsub", an inefficient but simple "flooding" pubsub implementation, to "gossipsub".
281
227 -#### Badger Datastore
282 +PubSub will be stabilized in go-ipfs 0.6.0.
283
229 -In this release, we're calling the badger datastore (enabled at initialization
230 -with `ipfs init --profile=badgerds`) as stable. However, we're not yet enabling
231 -it by default.
284 +#### CLI & API
285
233 -The benefit of badger is that adding/fetching data to/from badger is
234 -_significantly_ faster than adding/fetching data to/from the default datastore,
235 -flatfs. In some tests, adding data to badger is 32x faster than flatfs (in this
236 -release).
286 +The IPFS CLI and API have a couple of new features and changes.
287
238 -However,
288 +##### POST Only
289
240 -1. Badger is complicated while flatfs pushes all the complexity down into the
241 - filesystem itself. That means that flatfs is only likely to lose your data
242 - if your underlying filesystem gets corrupted while there are more
243 - opportunities for badger itself to get corrupted.
244 -2. Badger can use a lot of memory. In this release, we've tuned badger to use
245 - very little (~20MiB) of memory by default. However, it can still produce
246 - large (1GiB) spikes in memory usage when garbage collecting.
247 -3. Badger isn't very aggressive when it comes to garbage collection and we're
248 - still investigating ways to get it to more aggressively clean up after
249 - itself.
290 +IPFS has two HTTP APIs:
291
251 -TL;DR: Use badger if performance is your main requirement, you rarely/never
252 -delete anything, and you have some memory to spare.
292 +* Port 5001: http://localhost:5001/api/v0/... - the API
293 +* Port 8080: http://localhost:8080/api/v0/... - a read-only subset of the API, accessible via the gateway
294
254 -#### Systemd Support
295 +As of this release, the main IPFS API (port 5001) will only accept POST requests. This change is necessary to tighten cross origin security in browsers.
296
256 -For Linux users, this release includes support for two systemd features: socket
257 -activation and startup/shutdown notifications. This makes it possible to:
297 +If you're using the go-ipfs API in your application, you may need to change GET calls to POST calls or upgrade your libraries and tools.
298 +
299 +* go - go-ipfs-api - v0.0.3
300 +* js-ipfs-http-api - v0.41.1
301 +* orbit-db - v0.24.0 (unreleased)
302 +
303 +##### RIP "Error: api not running"
304 +
305 +If you've ever seen [the error](https://github.com/ipfs/go-ipfs/issues/5784):
306 +
307 +> Error: api not running
308 +
309 +when trying to run a command without the daemon running, we have good news! You
310 +should never see this error again. The `ipfs` command now correctly detects that the daemon is not, in fact, running, and directly opens the IPFS repo.
311 +
312 +##### RIP `ipfs repo fsck`
313 +
314 +The `ipfs repo fsck` now does nothing but print an error message. Previously, it was used to cleanup some lock files: the "api" file that caused the aforementioned "api not running" error and the repo lock. However, this is no longer necessary.
315 +
316 +##### Init with config
317 +
318 +It's now possible to initialize an IPFS node with an existing IPFS config by running:
319 +
320 +```bash
321 +> ipfs init /path/to/existing/config
322 +```
323 +
324 +This will re-use the existing config's configuration in it's entirety (including the private key) and can be useful when:
325 +
326 +* Migrating a node's identity between machines without keeping the data.
327 +* Resetting the datastore.
328 +
329 +##### Ignoring Files
330 +
331 +Files can now be ignored on add by passing the `--ignore` and/or
332 +`--ignore-rules-path` flags.
333 +
334 +* `--ignore=PATTERN` will ignore all files matching the gitignore rule PATTERN.
335 +* `--ignore-rules-path=FILENAME` will apply the gitignore rules from the specified file.
336 +
337 +For example, to add a git repo while ignoring all files git would ignore, you could run:
338 +
339 +```bash
340 +> cd path/to/some/repo
341 +> ipfs add -r --hidden=false --ignore=.git --ignore-rules-path=.gitignore .
342 +```
343 +
344 +##### Named Pipes
345 +
346 +It's now possible to add data directly from a named pipe:
347 +
348 +```bash
349 +> mkfifo foo
350 +> echo -n "hello " > foo &
351 +> echo -n "world" > bar &
352 +> ipfs add foo bar
353 +```
354 +
355 +This can be useful when adding data from multiple streaming sources.
356 +
357 +NOTE: To avoid surprising users, IPFS will only add data from FIFOs _directly_ named on the command line, not FIFOs in a recursively added directory. Otherwise, `ipfs add` would halt whenever it encountered a FIFO with no data to be read leading to difficult to debug stalls.
358 +
359 +##### DAG import/export (.car)
360 +
361 +IPFS now allows rapid reading and writing of blocks in [`.car` format](https://github.com/ipld/specs/blob/master/block-layer/content-addressable-archives.md#readme). The functionality is accessible via the experimental `dag import` and `dag export` commands:
362 +
363 +```
364 +~$ ipfs dag export QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc \
365 +| xz > welcome_to_ipfs.car.xz
366 +
367 + 0s 6.73 KiB / ? [-------=-------------------------------------] 5.16 MiB/s 0s
368 +
369 +```
370 +Then on another `ipfs` instance, not even connected to the network:
371 +```
372 +~$ xz -dc welcome_to_ipfs.car.xz | ipfs dag import
373 +
374 +Pinned root QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc success
375 +
376 +```
377 +
378 +##### Pins
379 +
380 +We've made two miner changes to the pinning subsystem:
381 +
382 +1. `ipfs pin ls --stream` allows one streaming a pin listing.
383 +2. `ipfs pin update` no longer holds the global pin lock while fetching files from the network. This should hopefully make it significantly more useful.
384 +
385 +#### Daemon
386 +
387 +##### Zap Logging
388 +
389 +The go-ipfs daemon has switched to using [Uber's Zap](https://go.uber.org/zap). Unlike our previous logging system, Zap supports _structured_ logging which can make parsing, filtering, and analyzing go-ipfs logs much simpler.
390 +
391 +To enable structured logging, set the `IPFS_LOGGING_FMT` environment variable to "json".
392 +
393 +Note: while we've switched to using Zap as the logging backend, most of go-ipfs still logs strings.
394 +
395 +##### Systemd Support
396 +
397 +For Linux users, this release includes support for two systemd features: socket activation and startup/shutdown notifications. This makes it possible to:
398
399 * Start IPFS on demand on first use.
400 * Wait for IPFS to finish starting before starting services that depend on it.
401
402 You can find the new systemd units in the go-ipfs repo under misc/systemd.
403
264 -#### IPFS API Over Unix Domain Sockets
404 +##### IPFS API Over Unix Domain Sockets
405
266 -This release supports exposing the IPFS API over a unix domain socket in the
267 -filesystem. You use this feature, run:
406 +This release supports exposing the IPFS API over a unix domain socket in the filesystem. You use this feature, run:
407
408 ```bash
409 > ipfs config Addresses.API "/unix/path/to/socket/location"
410 ```
411
273 -#### Repo Migration
412 +##### Docker
413 +
414 +We've a few improvements to our docker image in this release:
415 +
416 +* It can now be cross-built for multiple architectures.
417 +* It now builds go-ipfs with OpenSSL support by default for faster libp2p handshakes.
418 +* A private-network "swarm" key can now be passed in to a docker image via either the `IPFS_SWARM_KEY=<inline key>` or `IPFS_SWARM_KEY_FILE=<path/to/key/file>` docker variables. Check out the Docker section of the README for more information.
419 +
420 +#### Plugins
421
275 -IPFS uses repo migrations to make structural changes to the "repo" (the config,
276 -data storage, etc.) on upgrade.
422 +go-ipfs plugins allow users to extend go-ipfs without modifying the original source-code. This release includes a few important changes.
423
278 -This release includes two very simple repo migrations: a config migration to
279 -ensure that the config contains working bootstrap nodes and a keystore migration
280 -to base32 encode all key filenames.
424 +See [docs/plugins.md](./docs/plugins.md) for details.
425
282 -In general, migrations should not require significant manual intervention.
283 -However, you should be aware of migrations and plan for them.
426 +##### MacOS Support
427 +
428 +Plugins are now supported on MacOS, in addition to Linux. Unfortunately, Go still doesn't [support plugins on Windows](https://github.com/golang/go/issues/19282).
429 +
430 +##### New Plugin Type: `InternalPlugin`
431 +
432 +This release introduces a new `InternalPlugin` plugin type. When started, this plugin will be passed a raw `*IpfsNode` object, giving it access to all go-ipfs internals.
433 +
434 +This plugin interface is permanently unstable as it has access to internals that can change frequently. However, it should allow power-users to develop deeply integrated extensions to go-ipfs, out-of-tree.
435 +
436 +##### Plugin Config
437 +
438 +**BREAKING**
439 +
440 +Plugins can now be configured and/or disabled via the [ipfs config file](./docs/plugins.md#configuration).
441 +
442 +To make this possible, the plugin interface has changed. Specifically, the `Init` function now takes an `*Environment` object. Specifically, the plugin signature has changed from:
443 +
444 +```go
445 +type Plugin interface {
446 + Name() string
447 + Version() string
448 + Init() error
449 +}
450 +```
451
285 -* If you update go-ipfs with `ipfs update`, `ipfs update` will run the migration
286 - for you.
287 -* If you start the ipfs daemon with `ipfs daemon --migrate`, ipfs will migrate
288 - your repo for you on start.
452 +to
453
290 -Otherwise, if you want more control over the repo migration process, you can
291 -manually install and run the [repo migration
292 -tool](http://dist.ipfs.io/#fs-repo-migrations).
454 +```go
455 +type Environment struct {
456 + // Path to the IPFS repo.
457 + Repo string
458
294 -#### Bootstrap Peer Changes
459 + // The plugin's config, if specified.
460 + Config interface{}
461 +}
462 +
463 +type Plugin interface {
464 + Name() string
465 + Version() string
466 + Init(env *Environment) error
467 +}
468 +```
469 +
470 +#### Repo Migrations
471 +
472 +IPFS uses repo migrations to make structural changes to the "repo" (the config, data storage, etc.) on upgrade.
473 +
474 +This release includes two very simple repo migrations: a config migration to ensure that the config contains working bootstrap nodes and a keystore migration to base32 encode all key filenames.
475 +
476 +In general, migrations should not require significant manual intervention. However, you should be aware of migrations and plan for them.
477 +
478 +* If you update go-ipfs with `ipfs update`, `ipfs update` will run the migration for you. Note: `ipfs update` will refuse to run the migrations while ipfs itself is running.
479 +* If you start the ipfs daemon with `ipfs daemon --migrate`, ipfs will migrate your repo for you on start.
480 +
481 +Otherwise, if you want more control over the repo migration process, you can manually install and run the [repo migration tool](http://dist.ipfs.io/#fs-repo-migrations).
482 +
483 +##### Bootstrap Peer Changes
484
485 **AUTOMATIC MIGRATION REQUIRED**
486
487 The first migration will update the bootstrap peer list to:
488
300 -1. Replace the old bootstrap nodes (ones with peer IDs starting with QmSoL),
301 - with new bootstrap nodes (ones with addresses that start with
302 - `/dnsaddr/bootstrap.libp2p.io`.
489 +1. Replace the old bootstrap nodes (ones with peer IDs starting with QmSoL), with new bootstrap nodes (ones with addresses that start with `/dnsaddr/bootstrap.libp2p.io`.
490 2. Rewrite the address format from `/ipfs/QmPeerID` to `/p2p/QmPeerID`.
491
492 We're migrating addresses for a few reasons:
493
307 -1. We're using DNS to address the new bootstrap nodes so we can change the
308 - underlying IP addresses as necessary.
309 -2. The new bootstrap nodes use 2048 bit keys while the old bootstrap nodes use
310 - 1024 bit keys.
494 +1. We're using DNS to address the new bootstrap nodes so we can change the underlying IP addresses as necessary.
495 +2. The new bootstrap nodes use 2048 bit keys while the old bootstrap nodes use 1024 bit keys.
496 3. We're normalizing the address format to `/p2p/Qm...`.
497
313 -Note: This migration won't _add_ the new bootstrap peers to your config if
314 -you've explicitly removed the old bootstrap peers. It will also leave custom
315 -entries in the list alone. In other words, if you've customized your bootstrap
316 -list, this migration won't clobber your changes.
498 +Note: This migration won't _add_ the new bootstrap peers to your config if you've explicitly removed the old bootstrap peers. It will also leave custom entries in the list alone. In other words, if you've customized your bootstrap list, this migration won't clobber your changes.
499
318 -#### Keystore Changes
500 +##### Keystore Changes
501
502 **AUTOMATIC MIGRATION REQUIRED**
503
322 -Go-IPFS stores additional keys (i.e., all keys other than the "identity" key) in
323 -the keystore. You can list these keys with `ipfs key`.
504 +Go-IPFS stores additional keys (i.e., all keys other than the "identity" key) in the keystore. You can list these keys with `ipfs key`.
505 +
506 +Currently, the keystore stores keys as regular files, named after the key itself. Unfortunately, filename restrictions and case-insensitivity are platform specific. To avoid platform specific issues, we're base32 encoding all key names and renaming all keys on-disk.
507
325 -Currently, the keystore stores keys as regular files, named after the key
326 -itself. Unfortunately, filename restrictions and case-insensitivity are platform
327 -specific. To avoid platform specific issues, we're base32 encoding all key names
328 -and renaming all keys on-disk.
508 +#### Windows
509 +
510 +As usual, this release contains several Windows specific fixes and improvements:
511 +
512 +* Double-clicking `ipfs.exe` will now the start daemon inside a console window.
513 +* `ipfs add -r` now correctly recognizes and ignores hidden files on Windows.
514 +* The default datastore, flatfs, now takes extra precautions to avoid "file in use" errors caused by both go-ipfs and external programs like anti-viruses. If you've ever seen an go-ipfs print out an "access denied" or "file in use" error on Windows, this issue was likely the cause.
515 +
516 +### Changelog
517 +
518 +- github.com/ipfs/go-ipfs:
519 + - fix: non-blocking peerlog logging ([ipfs/go-ipfs#7232](https://github.com/ipfs/go-ipfs/pull/7232))
520 + - doc: update go-ipfs docs for 0.5.0 release ([ipfs/go-ipfs#7229](https://github.com/ipfs/go-ipfs/pull/7229))
521 + - Add additional documentation links to the new issue screen ([ipfs/go-ipfs#7226](https://github.com/ipfs/go-ipfs/pull/7226))
522 + - docs: note that ShardingEnabled is a global flag ([ipfs/go-ipfs#7218](https://github.com/ipfs/go-ipfs/pull/7218))
523 + - update log helptext to match actual levels ([ipfs/go-ipfs#7199](https://github.com/ipfs/go-ipfs/pull/7199))
524 + - Chore/harden car test a bit harder ([ipfs/go-ipfs#7209](https://github.com/ipfs/go-ipfs/pull/7209))
525 + - fix: fix duplicate block issue in bitswap ([ipfs/go-ipfs#7202](https://github.com/ipfs/go-ipfs/pull/7202))
526 + - feat: update docker image ([ipfs/go-ipfs#7191](https://github.com/ipfs/go-ipfs/pull/7191))
527 + - feat: update dir index ([ipfs/go-ipfs#7192](https://github.com/ipfs/go-ipfs/pull/7192))
528 + - fix: update the dht to fix yggdrasil ([ipfs/go-ipfs#7186](https://github.com/ipfs/go-ipfs/pull/7186))
529 + - Choose architecture when download tini into docker container ([ipfs/go-ipfs#7187](https://github.com/ipfs/go-ipfs/pull/7187))
530 + - Fix typos and cleanup ([ipfs/go-ipfs#7181](https://github.com/ipfs/go-ipfs/pull/7181))
531 + - Fixtypos ([ipfs/go-ipfs#7180](https://github.com/ipfs/go-ipfs/pull/7180))
532 + - feat: webui 2.7.5 ([ipfs/go-ipfs#7176](https://github.com/ipfs/go-ipfs/pull/7176))
533 + - integration test for the dual dht ([ipfs/go-ipfs#7151](https://github.com/ipfs/go-ipfs/pull/7151))
534 + - fix: subdomain redirect for dir CIDs ([ipfs/go-ipfs#7165](https://github.com/ipfs/go-ipfs/pull/7165))
535 + - add autonat config options ([ipfs/go-ipfs#7162](https://github.com/ipfs/go-ipfs/pull/7162))
536 + - docs: fix link to version.go ([ipfs/go-ipfs#7157](https://github.com/ipfs/go-ipfs/pull/7157))
537 + - feat: webui v2.7.4 ([ipfs/go-ipfs#7159](https://github.com/ipfs/go-ipfs/pull/7159))
538 + - fix the typo in the serveHTTPApi ([ipfs/go-ipfs#7156](https://github.com/ipfs/go-ipfs/pull/7156))
539 + - test(sharness): improve CAR tests to remove some potential races ([ipfs/go-ipfs#7154](https://github.com/ipfs/go-ipfs/pull/7154))
540 + - feat: introduce the dual WAN/LAN DHT ([ipfs/go-ipfs#7127](https://github.com/ipfs/go-ipfs/pull/7127))
541 + - fix: invalidate cache on failed publish ([ipfs/go-ipfs#7152](https://github.com/ipfs/go-ipfs/pull/7152))
542 + - Temporarily disable gc-race test ([ipfs/go-ipfs#7148](https://github.com/ipfs/go-ipfs/pull/7148))
543 + - Beef up and harden import/export tests ([ipfs/go-ipfs#7140](https://github.com/ipfs/go-ipfs/pull/7140))
544 + - Filter dials to blocked subnets, even when using DNS. ([ipfs/go-ipfs#6996](https://github.com/ipfs/go-ipfs/pull/6996))
545 + - Dag export command, complete ([ipfs/go-ipfs#7036](https://github.com/ipfs/go-ipfs/pull/7036))
546 + - Adding Fission to IPFS early testers page ([ipfs/go-ipfs#7119](https://github.com/ipfs/go-ipfs/pull/7119))
547 + - feat: bump version ([ipfs/go-ipfs#7110](https://github.com/ipfs/go-ipfs/pull/7110))
548 + - feat: initial update to the changelog for 0.5.0 ([ipfs/go-ipfs#6977](https://github.com/ipfs/go-ipfs/pull/6977))
549 + - feat(dht): update to cypress DHT in backwards compatibility mode ([ipfs/go-ipfs#7103](https://github.com/ipfs/go-ipfs/pull/7103))
550 + - update bash completion for `ipfs add` ([ipfs/go-ipfs#7102](https://github.com/ipfs/go-ipfs/pull/7102))
551 + - HTTP API: Only allow POST requests (plus OPTIONS) ([ipfs/go-ipfs#7097](https://github.com/ipfs/go-ipfs/pull/7097))
552 + - Revert last change (the default is now printed twice) ([ipfs/go-ipfs#7098](https://github.com/ipfs/go-ipfs/pull/7098))
553 + - Fix #4996: Improve help text for "ipfs files cp" ([ipfs/go-ipfs#7069](https://github.com/ipfs/go-ipfs/pull/7069))
554 + - changed brew to brew cask ([ipfs/go-ipfs#7072](https://github.com/ipfs/go-ipfs/pull/7072))
555 + - fix: remove internal relay discovery ([ipfs/go-ipfs#7064](https://github.com/ipfs/go-ipfs/pull/7064))
556 + - docs/experimental-features.md: typo ([ipfs/go-ipfs#7062](https://github.com/ipfs/go-ipfs/pull/7062))
557 + - fix: get rid of shutdown errors ([ipfs/go-ipfs#7058](https://github.com/ipfs/go-ipfs/pull/7058))
558 + - feat: tls by default ([ipfs/go-ipfs#7055](https://github.com/ipfs/go-ipfs/pull/7055))
559 + - fix: downgrade to go 1.13 ([ipfs/go-ipfs#7054](https://github.com/ipfs/go-ipfs/pull/7054))
560 + - Keystore: minor maintenance ([ipfs/go-ipfs#7043](https://github.com/ipfs/go-ipfs/pull/7043))
561 + - fix(keystore): avoid racy filesystem access ([ipfs/go-ipfs#6999](https://github.com/ipfs/go-ipfs/pull/6999))
562 + - Forgotten go-fmt ([ipfs/go-ipfs#7030](https://github.com/ipfs/go-ipfs/pull/7030))
563 + - feat: update go-libp2p & go-bitswap ([ipfs/go-ipfs#7028](https://github.com/ipfs/go-ipfs/pull/7028))
564 + - Introducing EncodedFSKeystore with base32 encoding (#5947) ([ipfs/go-ipfs#6955](https://github.com/ipfs/go-ipfs/pull/6955))
565 + - feat: improve key lookup ([ipfs/go-ipfs#7023](https://github.com/ipfs/go-ipfs/pull/7023))
566 + - feat(file-ignore): add ignore opts to add cmd ([ipfs/go-ipfs#7017](https://github.com/ipfs/go-ipfs/pull/7017))
567 + - feat: gateway subdomains + http proxy mode ([ipfs/go-ipfs#6096](https://github.com/ipfs/go-ipfs/pull/6096))
568 + - Chore/sharness fixes 2019 03 16 ([ipfs/go-ipfs#6997](https://github.com/ipfs/go-ipfs/pull/6997))
569 + - Support pipes when named on the cli explicitly ([ipfs/go-ipfs#6998](https://github.com/ipfs/go-ipfs/pull/6998))
570 + - Fix a typo ([ipfs/go-ipfs#7000](https://github.com/ipfs/go-ipfs/pull/7000))
571 + - fix: revert changes to the user agent ([ipfs/go-ipfs#6993](https://github.com/ipfs/go-ipfs/pull/6993))
572 + - feat(peerlog): log protocols/versions ([ipfs/go-ipfs#6972](https://github.com/ipfs/go-ipfs/pull/6972))
573 + - feat: docker build and tag from ci ([ipfs/go-ipfs#6949](https://github.com/ipfs/go-ipfs/pull/6949))
574 + - cmd: ipfs handle GUI environment on Windows ([ipfs/go-ipfs#6646](https://github.com/ipfs/go-ipfs/pull/6646))
575 + - Chore/macos sharness fixes ([ipfs/go-ipfs#6988](https://github.com/ipfs/go-ipfs/pull/6988))
576 + - Update to go-libp2p 0.6.0 ([ipfs/go-ipfs#6914](https://github.com/ipfs/go-ipfs/pull/6914))
577 + - mount: switch over to the CoreAPI ([ipfs/go-ipfs#6602](https://github.com/ipfs/go-ipfs/pull/6602))
578 + - doc(commands): document that `dht put` takes a file ([ipfs/go-ipfs#6960](https://github.com/ipfs/go-ipfs/pull/6960))
579 + - docs: update licence info in README ([ipfs/go-ipfs#6942](https://github.com/ipfs/go-ipfs/pull/6942))
580 + - docs: fix example for files.write ([ipfs/go-ipfs#6943](https://github.com/ipfs/go-ipfs/pull/6943))
581 + - feat(graphsync): mount the graphsync libp2p protocol ([ipfs/go-ipfs#6892](https://github.com/ipfs/go-ipfs/pull/6892))
582 + - feat: update go in docker container ([ipfs/go-ipfs#6933](https://github.com/ipfs/go-ipfs/pull/6933))
583 + - remove expired GPG key from README ([ipfs/go-ipfs#6931](https://github.com/ipfs/go-ipfs/pull/6931))
584 + - test(sharness): test our tests ([ipfs/go-ipfs#6908](https://github.com/ipfs/go-ipfs/pull/6908))
585 + - fix: broken interop tests ([ipfs/go-ipfs#6899](https://github.com/ipfs/go-ipfs/pull/6899))
586 + - feat: pass IPFS_PLUGINS to docker build ([ipfs/go-ipfs#6898](https://github.com/ipfs/go-ipfs/pull/6898))
587 + - doc(add): document hash stability ([ipfs/go-ipfs#6891](https://github.com/ipfs/go-ipfs/pull/6891))
588 + - feat: add peerlog plugin ([ipfs/go-ipfs#6887](https://github.com/ipfs/go-ipfs/pull/6887))
589 + - doc(plugin): document internal plugins ([ipfs/go-ipfs#6888](https://github.com/ipfs/go-ipfs/pull/6888))
590 + - Fix #6878: Improve MFS Cli documentation ([ipfs/go-ipfs#6882](https://github.com/ipfs/go-ipfs/pull/6882))
591 + - Update the license distributed with dist builds to the dual one ([ipfs/go-ipfs#6879](https://github.com/ipfs/go-ipfs/pull/6879))
592 + - doc: add license URLs so go's doc service can detect our license ([ipfs/go-ipfs#6874](https://github.com/ipfs/go-ipfs/pull/6874))
593 + - doc: rename COPYRIGHT to LICENSE ([ipfs/go-ipfs#6873](https://github.com/ipfs/go-ipfs/pull/6873))
594 + - fix: fix id addr format ([ipfs/go-ipfs#6872](https://github.com/ipfs/go-ipfs/pull/6872))
595 + - Help text update for 'ipfs key gen' ([ipfs/go-ipfs#6867](https://github.com/ipfs/go-ipfs/pull/6867))
596 + - fix: make rsa the default key type ([ipfs/go-ipfs#6864](https://github.com/ipfs/go-ipfs/pull/6864))
597 + - doc(config): cleanup ([ipfs/go-ipfs#6855](https://github.com/ipfs/go-ipfs/pull/6855))
598 + - Allow building non-amd64 Docker images ([ipfs/go-ipfs#6854](https://github.com/ipfs/go-ipfs/pull/6854))
599 + - doc(release): add Charity Engine to the early testers programme ([ipfs/go-ipfs#6850](https://github.com/ipfs/go-ipfs/pull/6850))
600 + - fix: fix a potential out of bounds issue in fuse ([ipfs/go-ipfs#6847](https://github.com/ipfs/go-ipfs/pull/6847))
601 + - fix(build): instruct users to use GOTAGS, not GOFLAGS ([ipfs/go-ipfs#6843](https://github.com/ipfs/go-ipfs/pull/6843))
602 + - doc(release): document how RCs should be communicated ([ipfs/go-ipfs#6845](https://github.com/ipfs/go-ipfs/pull/6845))
603 + - doc(release): move WebUI from manual tests to automated tests section ([ipfs/go-ipfs#6838](https://github.com/ipfs/go-ipfs/pull/6838))
604 + - test(sharness): fix typo ([ipfs/go-ipfs#6835](https://github.com/ipfs/go-ipfs/pull/6835))
605 + - test: E2E tests against ipfs-webui HEAD ([ipfs/go-ipfs#6825](https://github.com/ipfs/go-ipfs/pull/6825))
606 + - mkreleaslog: improve edge-cases ([ipfs/go-ipfs#6833](https://github.com/ipfs/go-ipfs/pull/6833))
607 + - fix: dont fail to collect profiles if no ipfs bin ([ipfs/go-ipfs#6829](https://github.com/ipfs/go-ipfs/pull/6829))
608 + - update dockerfile and use openssl ([ipfs/go-ipfs#6828](https://github.com/ipfs/go-ipfs/pull/6828))
609 + - docs: define Gateway.PathPrefixes ([ipfs/go-ipfs#6826](https://github.com/ipfs/go-ipfs/pull/6826))
610 + - fix(badgerds): turn off sync writes by default ([ipfs/go-ipfs#6819](https://github.com/ipfs/go-ipfs/pull/6819))
611 + - gateway cleanups ([ipfs/go-ipfs#6820](https://github.com/ipfs/go-ipfs/pull/6820))
612 + - make it possible to change the codec with the `ipfs cid` subcommand ([ipfs/go-ipfs#6817](https://github.com/ipfs/go-ipfs/pull/6817))
613 + - improve gateway symlink handling ([ipfs/go-ipfs#6680](https://github.com/ipfs/go-ipfs/pull/6680))
614 + - Inclusion of the presence of the go-ipfs package in Solus ([ipfs/go-ipfs#6809](https://github.com/ipfs/go-ipfs/pull/6809))
615 + - Fix Typos ([ipfs/go-ipfs#6807](https://github.com/ipfs/go-ipfs/pull/6807))
616 + - Sharness macos no brainer fixes ([ipfs/go-ipfs#6805](https://github.com/ipfs/go-ipfs/pull/6805))
617 + - Support Asynchronous Datastores ([ipfs/go-ipfs#6785](https://github.com/ipfs/go-ipfs/pull/6785))
618 + - update documentation for /ipfs -> /p2p multiaddr switch ([ipfs/go-ipfs#6538](https://github.com/ipfs/go-ipfs/pull/6538))
619 + - IPNS over PubSub as an Independent Transport ([ipfs/go-ipfs#6758](https://github.com/ipfs/go-ipfs/pull/6758))
620 + - docs: add information on how to enable experiments ([ipfs/go-ipfs#6792](https://github.com/ipfs/go-ipfs/pull/6792))
621 + - Change Reporter to BandwidthCounter in IpfsNode ([ipfs/go-ipfs#6793](https://github.com/ipfs/go-ipfs/pull/6793))
622 + - update go-datastore ([ipfs/go-ipfs#6791](https://github.com/ipfs/go-ipfs/pull/6791))
623 + - go fmt: go-ipfs-as-a-library ([ipfs/go-ipfs#6784](https://github.com/ipfs/go-ipfs/pull/6784))
624 + - feat: web ui 2.7.2 ([ipfs/go-ipfs#6778](https://github.com/ipfs/go-ipfs/pull/6778))
625 + - extract the pinner to go-ipfs-pinner and dagutils into go-merkledag ([ipfs/go-ipfs#6771](https://github.com/ipfs/go-ipfs/pull/6771))
626 + - fix #2203: omit the charset attribute when Content-Type is text/html ([ipfs/go-ipfs#6743](https://github.com/ipfs/go-ipfs/pull/6743))
627 + - Pin ls traverses all indirect pins ([ipfs/go-ipfs#6705](https://github.com/ipfs/go-ipfs/pull/6705))
628 + - fix: ignore nonexistant when force rm ([ipfs/go-ipfs#6773](https://github.com/ipfs/go-ipfs/pull/6773))
629 + - introduce IpfsNode Plugin ([ipfs/go-ipfs#6719](https://githung b.com/ipfs/go-ipfs/pull/6719))
630 + - improve documentation and fix dht put bug ([ipfs/go-ipfs#6750](https://github.com/ipfs/go-ipfs/pull/6750))
631 + - Adding alias for `ipfs repo stat`. ([ipfs/go-ipfs#6769](https://github.com/ipfs/go-ipfs/pull/6769))
632 + - doc(gateway): document dnslink ([ipfs/go-ipfs#6767](https://github.com/ipfs/go-ipfs/pull/6767))
633 + - pin: add context and error return to most of the Pinner functions ([ipfs/go-ipfs#6715](https://github.com/ipfs/go-ipfs/pull/6715))
634 + - feat: web ui 2.7.1 ([ipfs/go-ipfs#6762](https://github.com/ipfs/go-ipfs/pull/6762))
635 + - doc(README): document requirements for cross-compiling with OpenSSL support ([ipfs/go-ipfs#6738](https://github.com/ipfs/go-ipfs/pull/6738))
636 + - feat: web ui 2.6.0 ([ipfs/go-ipfs#6740](https://github.com/ipfs/go-ipfs/pull/6740))
637 + - Add high-level go-ipfs architecture diagram ([ipfs/go-ipfs#6727](https://github.com/ipfs/go-ipfs/pull/6727))
638 + - docs: remove extra ) on the example README ([ipfs/go-ipfs#6733](https://github.com/ipfs/go-ipfs/pull/6733))
639 + - update maintainer label ([ipfs/go-ipfs#6735](https://github.com/ipfs/go-ipfs/pull/6735))
640 + - ipfs namespace is now being provided to prometheus ([ipfs/go-ipfs#6643](https://github.com/ipfs/go-ipfs/pull/6643))
641 + - feat: web ui 2.5.8 ([ipfs/go-ipfs#6718](https://github.com/ipfs/go-ipfs/pull/6718))
642 + - docs: add connmgr to config.md toc ([ipfs/go-ipfs#6712](https://github.com/ipfs/go-ipfs/pull/6712))
643 + - feat: web ui 2.5.7 ([ipfs/go-ipfs#6707](https://github.com/ipfs/go-ipfs/pull/6707))
644 + - README: improve build documentation ([ipfs/go-ipfs#6706](https://github.com/ipfs/go-ipfs/pull/6706))
645 + - Introduce buzhash chunker ([ipfs/go-ipfs#6701](https://github.com/ipfs/go-ipfs/pull/6701))
646 + - Pinning interop: Pin ls returns appropriate zero value ([ipfs/go-ipfs#6685](https://github.com/ipfs/go-ipfs/pull/6685))
647 + - fix(resolve): correctly handle .eth domains ([ipfs/go-ipfs#6700](https://github.com/ipfs/go-ipfs/pull/6700))
648 + - Update README.md ([ipfs/go-ipfs#6697](https://github.com/ipfs/go-ipfs/pull/6697))
649 + - daemon: support unix domain sockets for the API/gateway ([ipfs/go-ipfs#6678](https://github.com/ipfs/go-ipfs/pull/6678))
650 + - docs: guide users to the right locations for questions ([ipfs/go-ipfs#6691](https://github.com/ipfs/go-ipfs/pull/6691))
651 + - docs: readme improvements ([ipfs/go-ipfs#6693](https://github.com/ipfs/go-ipfs/pull/6693))
652 + - docs: link remaining docs available, guide people to the right locations ([ipfs/go-ipfs#6694](https://github.com/ipfs/go-ipfs/pull/6694))
653 + - docs: fix broken url ([ipfs/go-ipfs#6692](https://github.com/ipfs/go-ipfs/pull/6692))
654 + - add systemd support ([ipfs/go-ipfs#6675](https://github.com/ipfs/go-ipfs/pull/6675))
655 + - feat: add ipfs version info to prometheus metrics ([ipfs/go-ipfs#6688](https://github.com/ipfs/go-ipfs/pull/6688))
656 + - Fix typo ([ipfs/go-ipfs#6686](https://github.com/ipfs/go-ipfs/pull/6686))
657 + - github: migrate actions ([ipfs/go-ipfs#6681](https://github.com/ipfs/go-ipfs/pull/6681))
658 + - Add bridged chats ([ipfs/go-ipfs#6653](https://github.com/ipfs/go-ipfs/pull/6653))
659 + - doc(config): improve DisableNatPortMap documentation ([ipfs/go-ipfs#6655](https://github.com/ipfs/go-ipfs/pull/6655))
660 + - plugins: support Close() for Tracer plugins as well ([ipfs/go-ipfs#6672](https://github.com/ipfs/go-ipfs/pull/6672))
661 + - fix: make collect-profiles.sh work on mac ([ipfs/go-ipfs#6673](https://github.com/ipfs/go-ipfs/pull/6673))
662 + - namesys(test): test TTL on publish ([ipfs/go-ipfs#6671](https://github.com/ipfs/go-ipfs/pull/6671))
663 + - discovery: improve mdns warnings ([ipfs/go-ipfs#6665](https://github.com/ipfs/go-ipfs/pull/6665))
664 + - feat: web ui 2.5.4 ([ipfs/go-ipfs#6664](https://github.com/ipfs/go-ipfs/pull/6664))
665 + - cmds(help): fix swarm filter add/rm help text ([ipfs/go-ipfs#6654](https://github.com/ipfs/go-ipfs/pull/6654))
666 + - feat: webui 2.5.3 ([ipfs/go-ipfs#6638](https://github.com/ipfs/go-ipfs/pull/6638))
667 + - feat: web ui 2.5.1 ([ipfs/go-ipfs#6630](https://github.com/ipfs/go-ipfs/pull/6630))
668 + - docs: add multiple gateway and api addrs ([ipfs/go-ipfs#6631](https://github.com/ipfs/go-ipfs/pull/6631))
669 + - doc: add post-release checklist ([ipfs/go-ipfs#6625](https://github.com/ipfs/go-ipfs/pull/6625))
670 + - docs: add ship date and next release issue opening time ([ipfs/go-ipfs#6620](https://github.com/ipfs/go-ipfs/pull/6620))
671 + - docker: libdl dependency ([ipfs/go-ipfs#6624](https://github.com/ipfs/go-ipfs/pull/6624))
672 + - docs: improvements to the release doc ([ipfs/go-ipfs#6616](https://github.com/ipfs/go-ipfs/pull/6616))
673 + - plugins: add support for plugin configs ([ipfs/go-ipfs#6613](https://github.com/ipfs/go-ipfs/pull/6613))
674 + - Update README.md ([ipfs/go-ipfs#6615](https://github.com/ipfs/go-ipfs/pull/6615))
675 + - doc: remove gmake instructions ([ipfs/go-ipfs#6614](https://github.com/ipfs/go-ipfs/pull/6614))
676 + - feat: add ability to use existing config during init ([ipfs/go-ipfs#6489](https://github.com/ipfs/go-ipfs/pull/6489))
677 + - doc: expand and cleanup badger documentation ([ipfs/go-ipfs#6611](https://github.com/ipfs/go-ipfs/pull/6611))
678 + - feat: improve plugin preload logic ([ipfs/go-ipfs#6576](https://github.com/ipfs/go-ipfs/pull/6576))
679 + - version: don't print 'VERSION-' if no commit is specified ([ipfs/go-ipfs#6609](https://github.com/ipfs/go-ipfs/pull/6609))
680 + - Update go-libp2p, fix tests with weak RSA keys ([ipfs/go-ipfs#6555](https://github.com/ipfs/go-ipfs/pull/6555))
681 + - cmds/refs: fix ipfs refs for sharded directories ([ipfs/go-ipfs#6601](https://github.com/ipfs/go-ipfs/pull/6601))
682 + - fix: spammy mock when testing ([ipfs/go-ipfs#6583](https://github.com/ipfs/go-ipfs/pull/6583))
683 + - docker: update the docker image ([ipfs/go-ipfs#6582](https://github.com/ipfs/go-ipfs/pull/6582))
684 + - add release process graphic ([ipfs/go-ipfs#6568](https://github.com/ipfs/go-ipfs/pull/6568))
685 + - feat: web ui 2.5.0 ([ipfs/go-ipfs#6566](https://github.com/ipfs/go-ipfs/pull/6566))
686 + - Add swarm key variables to container daemon ([ipfs/go-ipfs#6554](https://github.com/ipfs/go-ipfs/pull/6554))
687 + - doc: update the release template ([ipfs/go-ipfs#6561](https://github.com/ipfs/go-ipfs/pull/6561))
688 + - merge changelog and bump version ([ipfs/go-ipfs#6559](https://github.com/ipfs/go-ipfs/pull/6559))
689 + - require GNU make ([ipfs/go-ipfs#6551](https://github.com/ipfs/go-ipfs/pull/6551))
690 + - tweak the release process ([ipfs/go-ipfs#6553](https://github.com/ipfs/go-ipfs/pull/6553))
691 + - Allow resolution of .eth names via .eth.link ([ipfs/go-ipfs#6448](https://github.com/ipfs/go-ipfs/pull/6448))
692 + - README: update minimum system requirements and recommend OpenSSL ([ipfs/go-ipfs#6543](https://github.com/ipfs/go-ipfs/pull/6543))
693 + - fix and improve the writable gateway ([ipfs/go-ipfs#6539](https://github.com/ipfs/go-ipfs/pull/6539))
694 + - feat: add install instructions for external commands ([ipfs/go-ipfs#6541](https://github.com/ipfs/go-ipfs/pull/6541))
695 + - fix: slightly faster gc ([ipfs/go-ipfs#6505](https://github.com/ipfs/go-ipfs/pull/6505))
696 + - fix {net,open}bsd build by disabling fuse on openbsd ([ipfs/go-ipfs#6535](https://github.com/ipfs/go-ipfs/pull/6535))
697 + - mk: handle stripping paths when GOPATH contains whitespace ([ipfs/go-ipfs#6536](https://github.com/ipfs/go-ipfs/pull/6536))
698 + - make gossipsub the default routing protocol for pubsub ([ipfs/go-ipfs#6512](https://github.com/ipfs/go-ipfs/pull/6512))
699 + - doc: align the early testers program description with its goal ([ipfs/go-ipfs#6529](https://github.com/ipfs/go-ipfs/pull/6529))
700 + - feat: add --long as alias for -l in files.ls ([ipfs/go-ipfs#6528](https://github.com/ipfs/go-ipfs/pull/6528))
701 + - switch to new merkledag walk functions ([ipfs/go-ipfs#6499](https://github.com/ipfs/go-ipfs/pull/6499))
702 + - readme: fix CI badge ([ipfs/go-ipfs#6521](https://github.com/ipfs/go-ipfs/pull/6521))
703 + - Adds Siderus in early testers ([ipfs/go-ipfs#6517](https://github.com/ipfs/go-ipfs/pull/6517))
704 + - Extract Filestore ([ipfs/go-ipfs#6511](https://github.com/ipfs/go-ipfs/pull/6511))
705 + - readme: fix scoop bucket command error ([ipfs/go-ipfs#6510](https://github.com/ipfs/go-ipfs/pull/6510))
706 + - sharness: test pin ls stream ([ipfs/go-ipfs#6504](https://github.com/ipfs/go-ipfs/pull/6504))
707 + - Improve pin/update description ([ipfs/go-ipfs#6501](https://github.com/ipfs/go-ipfs/pull/6501))
708 + - pin cmd: stream recursive pins ([ipfs/go-ipfs#6493](https://github.com/ipfs/go-ipfs/pull/6493))
709 + - Document the AddrFilters option ([ipfs/go-ipfs#6459](https://github.com/ipfs/go-ipfs/pull/6459))
710 + - feat: make it easier to load custom plugins ([ipfs/go-ipfs#6474](https://github.com/ipfs/go-ipfs/pull/6474))
711 + - document the debug script ([ipfs/go-ipfs#6486](https://github.com/ipfs/go-ipfs/pull/6486))
712 + - Extract provider module to `go-ipfs-provider` ([ipfs/go-ipfs#6421](https://github.com/ipfs/go-ipfs/pull/6421))
713 + - ignore stale API files and deprecate ipfs repo fsck ([ipfs/go-ipfs#6478](https://github.com/ipfs/go-ipfs/pull/6478))
714 + - Fix node construction queue error ([ipfs/go-ipfs#6480](https://github.com/ipfs/go-ipfs/pull/6480))
715 + - Update the required go version in the README ([ipfs/go-ipfs#6462](https://github.com/ipfs/go-ipfs/pull/6462))
716 + - gitmodules: use https so we don't need an ssh key ([ipfs/go-ipfs#6450](https://github.com/ipfs/go-ipfs/pull/6450))
717 + - doc: add another Windows package to README ([ipfs/go-ipfs#6440](https://github.com/ipfs/go-ipfs/pull/6440))
718 + - Close started plugins when one of them fails to start. ([ipfs/go-ipfs#6438](https://github.com/ipfs/go-ipfs/pull/6438))
719 + - Load plugins on darwin/macOS ([ipfs/go-ipfs#6439](https://github.com/ipfs/go-ipfs/pull/6439))
720 + - assets: move away from gx ([ipfs/go-ipfs#6414](https://github.com/ipfs/go-ipfs/pull/6414))
721 + - Fix a typo ([ipfs/go-ipfs#6432](https://github.com/ipfs/go-ipfs/pull/6432))
722 + - docs: fix install guide link ([ipfs/go-ipfs#6423](https://github.com/ipfs/go-ipfs/pull/6423))
723 + - Deps: update go-libp2p-http to its new libp2p location ([ipfs/go-ipfs#6422](https://github.com/ipfs/go-ipfs/pull/6422))
724 + - install.sh: Fix wrong destination path for ipfs binary ([ipfs/go-ipfs#6424](https://github.com/ipfs/go-ipfs/pull/6424))
725 + - build: strip GOPATH from build paths ([ipfs/go-ipfs#6412](https://github.com/ipfs/go-ipfs/pull/6412))
726 + - libp2p: moves discovery after host listen ([ipfs/go-ipfs#6415](https://github.com/ipfs/go-ipfs/pull/6415))
727 + - remove mentions of gx from windows build docs ([ipfs/go-ipfs#6413](https://github.com/ipfs/go-ipfs/pull/6413))
728 + - build: use protoc-gen-* from gomod ([ipfs/go-ipfs#6411](https://github.com/ipfs/go-ipfs/pull/6411))
729 + - add unixfs get metric ([ipfs/go-ipfs#6406](https://github.com/ipfs/go-ipfs/pull/6406))
730 + - Run JS interop in CircleCI ([ipfs/go-ipfs#6409](https://github.com/ipfs/go-ipfs/pull/6409))
731 + - Usage of context helper in Blockstore provider ([ipfs/go-ipfs#6399](https://github.com/ipfs/go-ipfs/pull/6399))
732 + - docs: default value for HashOnRead is false ([ipfs/go-ipfs#6401](https://github.com/ipfs/go-ipfs/pull/6401))
733 + - block cmd: allow adding multiple blocks at once ([ipfs/go-ipfs#6331](https://github.com/ipfs/go-ipfs/pull/6331))
734 + - Remove Repo from routing fx provider parameter ([ipfs/go-ipfs#6395](https://github.com/ipfs/go-ipfs/pull/6395))
735 + - migrate to go-libp2p-core. ([ipfs/go-ipfs#6384](https://github.com/ipfs/go-ipfs/pull/6384))
736 + - feat: update Web UI to v2.4.6 ([ipfs/go-ipfs#6392](https://github.com/ipfs/go-ipfs/pull/6392))
737 + - Introduce first strategic provider: do nothing ([ipfs/go-ipfs#6292](https://github.com/ipfs/go-ipfs/pull/6292))
738 +- github.com/ipfs/go-bitswap (v0.0.8-e37498cf10d6 -> v0.2.13):
739 + - refactor: remove WantManager ([ipfs/go-bitswap#374](https://github.com/ipfs/go-bitswap/pull/374))
740 + - Send CANCELs when session context is cancelled ([ipfs/go-bitswap#375](https://github.com/ipfs/go-bitswap/pull/375))
741 + - refactor: remove unused code ([ipfs/go-bitswap#373](https://github.com/ipfs/go-bitswap/pull/373))
742 + - Change timing for DONT_HAVE timeouts to be more conservative ([ipfs/go-bitswap#371](https://github.com/ipfs/go-bitswap/pull/371))
743 + - fix: avoid calling ctx.SetDeadline() every time we send a message ([ipfs/go-bitswap#369](https://github.com/ipfs/go-bitswap/pull/369))
744 + - feat: optimize entry sorting in MessageQueue ([ipfs/go-bitswap#356](https://github.com/ipfs/go-bitswap/pull/356))
745 + - Move connection management into networking layer ([ipfs/go-bitswap#351](https://github.com/ipfs/go-bitswap/pull/351))
746 + - refactor: simplify messageQueue onSent ([ipfs/go-bitswap#349](https://github.com/ipfs/go-bitswap/pull/349))
747 + - feat: prioritize more important wants ([ipfs/go-bitswap#346](https://github.com/ipfs/go-bitswap/pull/346))
748 + - fix: in message queue only send cancel if want was sent ([ipfs/go-bitswap#345](https://github.com/ipfs/go-bitswap/pull/345))
749 + - fix: ensure wantlist gauge gets decremented on disconnect ([ipfs/go-bitswap#332](https://github.com/ipfs/go-bitswap/pull/332))
750 + - avoid copying messages and improve logging ([ipfs/go-bitswap#326](https://github.com/ipfs/go-bitswap/pull/326))
751 + - fix: log unexpected condition in peerWantManager.prepareSendWants() ([ipfs/go-bitswap#325](https://github.com/ipfs/go-bitswap/pull/325))
752 + - wait for sessionWantSender to shutdown before completing session shutdown ([ipfs/go-bitswap#317](https://github.com/ipfs/go-bitswap/pull/317))
753 + - Perf/message queue ([ipfs/go-bitswap#307](https://github.com/ipfs/go-bitswap/pull/307))
754 + - feat: add a custom CID type ([ipfs/go-bitswap#308](https://github.com/ipfs/go-bitswap/pull/308))
755 + - feat: expose the full wantlist through GetWantlist ([ipfs/go-bitswap#300](https://github.com/ipfs/go-bitswap/pull/300))
756 + - Clean up logs ([ipfs/go-bitswap#299](https://github.com/ipfs/go-bitswap/pull/299))
757 + - Fix order of session broadcast wants ([ipfs/go-bitswap#291](https://github.com/ipfs/go-bitswap/pull/291))
758 + - fix flaky TestRateLimitingRequests ([ipfs/go-bitswap#296](https://github.com/ipfs/go-bitswap/pull/296))
759 + - fix flaky TestDontHaveTimeoutMgrTimeout ([ipfs/go-bitswap#293](https://github.com/ipfs/go-bitswap/pull/293))
760 + - fix: re-export testinstance/testnet ([ipfs/go-bitswap#289](https://github.com/ipfs/go-bitswap/pull/289))
761 + - Simulate DONT_HAVE when peer doesn't respond to want-block (new peers) ([ipfs/go-bitswap#284](https://github.com/ipfs/go-bitswap/pull/284))
762 + - Be less aggressive when pruning peers from session ([ipfs/go-bitswap#276](https://github.com/ipfs/go-bitswap/pull/276))
763 + - fix: races in tests ([ipfs/go-bitswap#279](https://github.com/ipfs/go-bitswap/pull/279))
764 + - Refactor: simplify session peer management ([ipfs/go-bitswap#275](https://github.com/ipfs/go-bitswap/pull/275))
765 + - Prune peers that send too many consecutive DONT_HAVEs ([ipfs/go-bitswap#261](https://github.com/ipfs/go-bitswap/pull/261))
766 + - feat: debounce wants manually ([ipfs/go-bitswap#255](https://github.com/ipfs/go-bitswap/pull/255))
767 + - Fix bug with signaling peer availability to sessions ([ipfs/go-bitswap#247](https://github.com/ipfs/go-bitswap/pull/247))
768 + - feat: move internals to an internal package ([ipfs/go-bitswap#242](https://github.com/ipfs/go-bitswap/pull/242))
769 + - PoC of Bitswap protocol extensions implementation ([ipfs/go-bitswap#189](https://github.com/ipfs/go-bitswap/pull/189))
770 + - fix: abort when the context is canceled while getting blocks ([ipfs/go-bitswap#240](https://github.com/ipfs/go-bitswap/pull/240))
771 + - Add bridged chats ([ipfs/go-bitswap#198](https://github.com/ipfs/go-bitswap/pull/198))
772 + - reduce session contention ([ipfs/go-bitswap#188](https://github.com/ipfs/go-bitswap/pull/188))
773 + - Fix: don't ignore received blocks for pending wants ([ipfs/go-bitswap#174](https://github.com/ipfs/go-bitswap/pull/174))
774 + - Test: fix flakey session peer manager tests ([ipfs/go-bitswap#185](https://github.com/ipfs/go-bitswap/pull/185))
775 + - Refactor: use global pubsub notifier ([ipfs/go-bitswap#177](https://github.com/ipfs/go-bitswap/pull/177))
776 + - network: Allow specifying protocol prefix ([ipfs/go-bitswap#171](https://github.com/ipfs/go-bitswap/pull/171))
777 + - fix: memory leak in latency tracker on timeout after cancel ([ipfs/go-bitswap#164](https://github.com/ipfs/go-bitswap/pull/164))
778 + - Fix typo ([ipfs/go-bitswap#158](https://github.com/ipfs/go-bitswap/pull/158))
779 + - Feat: Track Session Peer Latency More Accurately ([ipfs/go-bitswap#149](https://github.com/ipfs/go-bitswap/pull/149))
780 + - ci(circleci): add benchmark comparisons ([ipfs/go-bitswap#147](https://github.com/ipfs/go-bitswap/pull/147))
781 + - aggressively free memory ([ipfs/go-bitswap#143](https://github.com/ipfs/go-bitswap/pull/143))
782 + - Enchanced logging for bitswap ([ipfs/go-bitswap#137](https://github.com/ipfs/go-bitswap/pull/137))
783 + - fix: rand.Intn(0) panics ([ipfs/go-bitswap#144](https://github.com/ipfs/go-bitswap/pull/144))
784 + - fix some naming nits and broadcast on search ([ipfs/go-bitswap#139](https://github.com/ipfs/go-bitswap/pull/139))
785 + - feat(sessions): add rebroadcasting, search backoff ([ipfs/go-bitswap#133](https://github.com/ipfs/go-bitswap/pull/133))
786 + - testutil: fix block generator ([ipfs/go-bitswap#135](https://github.com/ipfs/go-bitswap/pull/135))
787 + - migrate to go-libp2p-core. ([ipfs/go-bitswap#132](https://github.com/ipfs/go-bitswap/pull/132))
788 +- github.com/ipfs/go-blockservice (v0.0.3 -> v0.1.3):
789 + - fix ci badge and lints ([ipfs/go-blockservice#52](https://github.com/ipfs/go-blockservice/pull/52))
790 + - demote warning to debug log ([ipfs/go-blockservice#30](https://github.com/ipfs/go-blockservice/pull/30))
791 + - nil exchange is okay ([ipfs/go-blockservice#29](https://github.com/ipfs/go-blockservice/pull/29))
792 + - set the session context ([ipfs/go-blockservice#28](https://github.com/ipfs/go-blockservice/pull/28))
793 + - make blockservice AddBlocks return more quickly ([ipfs/go-blockservice#10](https://github.com/ipfs/go-blockservice/pull/10))
794 + - feat(session): instantiated sessions lazily ([ipfs/go-blockservice#27](https://github.com/ipfs/go-blockservice/pull/27))
795 +- github.com/ipfs/go-cid (v0.0.4 -> v0.0.5):
796 + - fix: enforce minimal encoding ([ipfs/go-cid#99](https://github.com/ipfs/go-cid/pull/99))
797 +- github.com/ipfs/go-datastore (v0.0.5 -> v0.4.4):
798 + - Fix test log message about number of values put ([ipfs/go-datastore#150](https://github.com/ipfs/go-datastore/pull/150))
799 + - test suite: Add ElemCount to control how many elements are added. ([ipfs/go-datastore#151](https://github.com/ipfs/go-datastore/pull/151))
800 + - fix: avoid filtering by prefix unless necessary ([ipfs/go-datastore#147](https://github.com/ipfs/go-datastore/pull/147))
801 + - feat: add upper-case keys at a known prefix ([ipfs/go-datastore#148](https://github.com/ipfs/go-datastore/pull/148))
802 + - test(suite): add a bunch of prefix tests for the new behavior ([ipfs/go-datastore#145](https://github.com/ipfs/go-datastore/pull/145))
803 + - Only count a key as an ancestor if there is a separator ([ipfs/go-datastore#141](https://github.com/ipfs/go-datastore/pull/141))
804 + - fix go-check path to use "gopkg.in/check.v1" ([ipfs/go-datastore#144](https://github.com/ipfs/go-datastore/pull/144))
805 + - LogDatastore fulfills the Datastore interface again ([ipfs/go-datastore#142](https://github.com/ipfs/go-datastore/pull/142))
806 + - Support Asynchronous Writing Datastores ([ipfs/go-datastore#140](https://github.com/ipfs/go-datastore/pull/140))
807 + - add a Size field to Query's Result ([ipfs/go-datastore#134](https://github.com/ipfs/go-datastore/pull/134))
808 + - Add clarifying comments on Query#String() ([ipfs/go-datastore#138](https://github.com/ipfs/go-datastore/pull/138))
809 + - Add a large test suite ([ipfs/go-datastore#136](https://github.com/ipfs/go-datastore/pull/136))
810 + - doc: add a lead maintainer ([ipfs/go-datastore#135](https://github.com/ipfs/go-datastore/pull/135))
811 + - feat: make not-found errors discoverable ([ipfs/go-datastore#133](https://github.com/ipfs/go-datastore/pull/133))
812 + - feat: make delete idempotent ([ipfs/go-datastore#132](https://github.com/ipfs/go-datastore/pull/132))
813 + - Misc Typo Fixes ([ipfs/go-datastore#131](https://github.com/ipfs/go-datastore/pull/131))
814 +- github.com/ipfs/go-ds-badger (v0.0.5 -> v0.2.4):
815 + - fix: verify that the datastore is still open when querying ([ipfs/go-ds-badger#87](https://github.com/ipfs/go-ds-badger/pull/87))
816 + - feat: switch to file io and shrink tables ([ipfs/go-ds-badger#83](https://github.com/ipfs/go-ds-badger/pull/83))
817 + - fix: update go-datastore ([ipfs/go-ds-badger#80](https://github.com/ipfs/go-ds-badger/pull/80))
818 + - update datastore Interface ([ipfs/go-ds-badger#77](https://github.com/ipfs/go-ds-badger/pull/77))
819 + - query: always return the size ([ipfs/go-ds-badger#78](https://github.com/ipfs/go-ds-badger/pull/78))
820 + - feat(gc): make it possible to disable GC ([ipfs/go-ds-badger#74](https://github.com/ipfs/go-ds-badger/pull/74))
821 + - feat(gc): improve periodic GC logic ([ipfs/go-ds-badger#73](https://github.com/ipfs/go-ds-badger/pull/73))
822 + - periodic GC for badger datastore ([ipfs/go-ds-badger#72](https://github.com/ipfs/go-ds-badger/pull/72))
823 + - Fix combining query filters, offsets, and limits ([ipfs/go-ds-badger#71](https://github.com/ipfs/go-ds-badger/pull/71))
824 + - doc: add lead maintainer ([ipfs/go-ds-badger#67](https://github.com/ipfs/go-ds-badger/pull/67))
825 +- github.com/ipfs/go-ds-flatfs (v0.0.2 -> v0.4.4):
826 + - move retries lower and retry rename ops ([ipfs/go-ds-flatfs#82](https://github.com/ipfs/go-ds-flatfs/pull/82))
827 + - cleanup putMany implementation ([ipfs/go-ds-flatfs#80](https://github.com/ipfs/go-ds-flatfs/pull/80))
828 + - feat: read harder ([ipfs/go-ds-flatfs#78](https://github.com/ipfs/go-ds-flatfs/pull/78))
829 + - fix: remove temporary files when multiple write operations conflict ([ipfs/go-ds-flatfs#76](https://github.com/ipfs/go-ds-flatfs/pull/76))
830 + - Windows CI + Fixes ([ipfs/go-ds-flatfs#73](https://github.com/ipfs/go-ds-flatfs/pull/73))
831 + - fix: close query when finished moving ([ipfs/go-ds-flatfs#74](https://github.com/ipfs/go-ds-flatfs/pull/74))
832 + - fix: ensure that we close the diskusage file, even if we fail to rename it ([ipfs/go-ds-flatfs#72](https://github.com/ipfs/go-ds-flatfs/pull/72))
833 + - feat: put all temporary files in the same directory and clean them up ([ipfs/go-ds-flatfs#69](https://github.com/ipfs/go-ds-flatfs/pull/69))
834 + - fix: only log when we find a file we don't expect ([ipfs/go-ds-flatfs#68](https://github.com/ipfs/go-ds-flatfs/pull/68))
835 + - Make flatfs robust ([ipfs/go-ds-flatfs#64](https://github.com/ipfs/go-ds-flatfs/pull/64))
836 + - Update Datastore Interface ([ipfs/go-ds-flatfs#60](https://github.com/ipfs/go-ds-flatfs/pull/60))
837 + - query: deny ReturnsSizes and ReturnExpirations instead of returning wrong result ([ipfs/go-ds-flatfs#59](https://github.com/ipfs/go-ds-flatfs/pull/59))
838 + - doc: add a lead maintainer ([ipfs/go-ds-flatfs#55](https://github.com/ipfs/go-ds-flatfs/pull/55))
839 + - make delete idempotent ([ipfs/go-ds-flatfs#54](https://github.com/ipfs/go-ds-flatfs/pull/54))
840 +- github.com/ipfs/go-ds-leveldb (v0.0.2 -> v0.4.2):
841 + - prevent closing concurrently with other operations. ([ipfs/go-ds-leveldb#42](https://github.com/ipfs/go-ds-leveldb/pull/42))
842 + - feat: update go-datastore ([ipfs/go-ds-leveldb#40](https://github.com/ipfs/go-ds-leveldb/pull/40))
843 + - update datastore Interface ([ipfs/go-ds-leveldb#36](https://github.com/ipfs/go-ds-leveldb/pull/36))
844 + - query: always return the size ([ipfs/go-ds-leveldb#35](https://github.com/ipfs/go-ds-leveldb/pull/35))
845 + - doc: add a lead maintainer ([ipfs/go-ds-leveldb#31](https://github.com/ipfs/go-ds-leveldb/pull/31))
846 + - make delete idempotent ([ipfs/go-ds-leveldb#30](https://github.com/ipfs/go-ds-leveldb/pull/30))
847 +- github.com/ipfs/go-ds-measure (v0.0.1 -> v0.1.0):
848 + - update datastore Interface ([ipfs/go-ds-measure#23](https://github.com/ipfs/go-ds-measure/pull/23))
849 + - Add Datastore Tests ([ipfs/go-ds-measure#24](https://github.com/ipfs/go-ds-measure/pull/24))
850 + - fix GetSize calls reported as Has ([ipfs/go-ds-measure#20](https://github.com/ipfs/go-ds-measure/pull/20))
851 +- github.com/ipfs/go-fs-lock (v0.0.1 -> v0.0.4):
852 + - fix: revert small breaking change ([ipfs/go-fs-lock#10](https://github.com/ipfs/go-fs-lock/pull/10))
853 + - Enh/improve error handling ([ipfs/go-fs-lock#9](https://github.com/ipfs/go-fs-lock/pull/9))
854 + - Use path/filepath instead of path ([ipfs/go-fs-lock#8](https://github.com/ipfs/go-fs-lock/pull/8))
855 +- github.com/ipfs/go-ipfs-blockstore (v0.0.1 -> v0.1.4):
856 + - return the correct size when only "has" is cached ([ipfs/go-ipfs-blockstore#36](https://github.com/ipfs/go-ipfs-blockstore/pull/36))
857 + - cache: switch to 2q ([ipfs/go-ipfs-blockstore#20](https://github.com/ipfs/go-ipfs-blockstore/pull/20))
858 +- github.com/ipfs/go-ipfs-chunker (v0.0.1 -> v0.0.5):
859 + - fix: don't return an empty block at the end ([ipfs/go-ipfs-chunker#22](https://github.com/ipfs/go-ipfs-chunker/pull/22))
860 + - Rigorous sizing checks ([ipfs/go-ipfs-chunker#21](https://github.com/ipfs/go-ipfs-chunker/pull/21))
861 + - Improve performance of buzhash ([ipfs/go-ipfs-chunker#17](https://github.com/ipfs/go-ipfs-chunker/pull/17))
862 + - Implement buzhash ([ipfs/go-ipfs-chunker#16](https://github.com/ipfs/go-ipfs-chunker/pull/16))
863 + - Add benchmarks ([ipfs/go-ipfs-chunker#15](https://github.com/ipfs/go-ipfs-chunker/pull/15))
864 +- github.com/ipfs/go-ipfs-cmds (v0.0.8 -> v0.2.2):
865 + - Fix: disallow POST without Origin nor Referer from specific user agents ([ipfs/go-ipfs-cmds#193](https://github.com/ipfs/go-ipfs-cmds/pull/193))
866 + - doc: document command fields ([ipfs/go-ipfs-cmds#192](https://github.com/ipfs/go-ipfs-cmds/pull/192))
867 + - change HandledMethods to AllowGet and cleanup method handling ([ipfs/go-ipfs-cmds#191](https://github.com/ipfs/go-ipfs-cmds/pull/191))
868 + - remove deprecated log.Warning(f) ([ipfs/go-ipfs-cmds#180](https://github.com/ipfs/go-ipfs-cmds/pull/180))
869 + - http: configurable allowed request methods for the API. ([ipfs/go-ipfs-cmds#190](https://github.com/ipfs/go-ipfs-cmds/pull/190))
870 + - #183 refactored the request options conversion code per the ticket requirements ([ipfs/go-ipfs-cmds#187](https://github.com/ipfs/go-ipfs-cmds/pull/187))
871 + - fix typo ([ipfs/go-ipfs-cmds#188](https://github.com/ipfs/go-ipfs-cmds/pull/188))
872 + - ([ipfs/go-ipfs-cmds#183](https://github.com/ipfs/go-ipfs-cmds/pull/183))
873 + - fix: normalize options when parsing them ([ipfs/go-ipfs-cmds#186](https://github.com/ipfs/go-ipfs-cmds/pull/186))
874 + - feat:add strings option; re-implement file ignore ([ipfs/go-ipfs-cmds#181](https://github.com/ipfs/go-ipfs-cmds/pull/181))
875 + - Special-case accepting explicitly supplied named pipes ([ipfs/go-ipfs-cmds#184](https://github.com/ipfs/go-ipfs-cmds/pull/184))
876 + - Chore/remove gx ([ipfs/go-ipfs-cmds#182](https://github.com/ipfs/go-ipfs-cmds/pull/182))
877 + - http: allow specifying a custom http client ([ipfs/go-ipfs-cmds#175](https://github.com/ipfs/go-ipfs-cmds/pull/175))
878 + - http: cleanup http related errors ([ipfs/go-ipfs-cmds#173](https://github.com/ipfs/go-ipfs-cmds/pull/173))
879 + - fix: too many arguments error text ([ipfs/go-ipfs-cmds#172](https://github.com/ipfs/go-ipfs-cmds/pull/172))
880 + - fallback executor support ([ipfs/go-ipfs-cmds#171](https://github.com/ipfs/go-ipfs-cmds/pull/171))
881 + - make ErrorType a valid error and implement Unwrap on Error ([ipfs/go-ipfs-cmds#170](https://github.com/ipfs/go-ipfs-cmds/pull/170))
882 + - feat: improve error codes ([ipfs/go-ipfs-cmds#168](https://github.com/ipfs/go-ipfs-cmds/pull/168))
883 + - Fix a typo ([ipfs/go-ipfs-cmds#169](https://github.com/ipfs/go-ipfs-cmds/pull/169))
884 +- github.com/ipfs/go-ipfs-config (v0.0.3 -> v0.5.3):
885 + - fix: correct the default-datastore config profile ([ipfs/go-ipfs-config#80](https://github.com/ipfs/go-ipfs-config/pull/80))
886 + - feat: disable autonat service when in lowpower mode ([ipfs/go-ipfs-config#77](https://github.com/ipfs/go-ipfs-config/pull/77))
887 + - feat: add and use a duration helper type ([ipfs/go-ipfs-config#76](https://github.com/ipfs/go-ipfs-config/pull/76))
888 + - feat: add an autonat config section ([ipfs/go-ipfs-config#75](https://github.com/ipfs/go-ipfs-config/pull/75))
889 + - feat: remove Routing.PrivateType ([ipfs/go-ipfs-config#74](https://github.com/ipfs/go-ipfs-config/pull/74))
890 + - feat: add private routing config field ([ipfs/go-ipfs-config#73](https://github.com/ipfs/go-ipfs-config/pull/73))
891 + - feat: mark badger as stable ([ipfs/go-ipfs-config#70](https://github.com/ipfs/go-ipfs-config/pull/70))
892 + - feat: remove PreferTLS experiment ([ipfs/go-ipfs-config#71](https://github.com/ipfs/go-ipfs-config/pull/71))
893 + - feat: remove old bootstrap peers ([ipfs/go-ipfs-config#67](https://github.com/ipfs/go-ipfs-config/pull/67))
894 + - add config options for proxy/subdomain ([ipfs/go-ipfs-config#30](https://github.com/ipfs/go-ipfs-config/pull/30))
895 + - feat: add graphsync option ([ipfs/go-ipfs-config#62](https://github.com/ipfs/go-ipfs-config/pull/62))
896 + - profile: badger profile now defaults to asynchronous writes ([ipfs/go-ipfs-config#60](https://github.com/ipfs/go-ipfs-config/pull/60))
897 + - migrate multiaddrs from /ipfs -> /p2p ([ipfs/go-ipfs-config#39](https://github.com/ipfs/go-ipfs-config/pull/39))
898 + - use key size constraints defined in libp2p ([ipfs/go-ipfs-config#57](https://github.com/ipfs/go-ipfs-config/pull/57))
899 + - plugins: don't omit empty config values ([ipfs/go-ipfs-config#46](https://github.com/ipfs/go-ipfs-config/pull/46))
900 + - make it easier to detect an uninitialized repo ([ipfs/go-ipfs-config#45](https://github.com/ipfs/go-ipfs-config/pull/45))
901 + - nit: omit empty plugin values ([ipfs/go-ipfs-config#44](https://github.com/ipfs/go-ipfs-config/pull/44))
902 + - add plugins config section ([ipfs/go-ipfs-config#43](https://github.com/ipfs/go-ipfs-config/pull/43))
903 + - Add very basic (possibly temporary) Provider configs ([ipfs/go-ipfs-config#38](https://github.com/ipfs/go-ipfs-config/pull/38))
904 + - fix string formatting of bootstrap peers ([ipfs/go-ipfs-config#37](https://github.com/ipfs/go-ipfs-config/pull/37))
905 + - migrate to the consolidated libp2p ([ipfs/go-ipfs-config#36](https://github.com/ipfs/go-ipfs-config/pull/36))
906 + - Add strategic provider system experiment flag ([ipfs/go-ipfs-config#33](https://github.com/ipfs/go-ipfs-config/pull/33))
907 +- github.com/ipfs/go-ipfs-files (v0.0.3 -> v0.0.8):
908 + - skip ignored files when calculating size ([ipfs/go-ipfs-files#30](https://github.com/ipfs/go-ipfs-files/pull/30))
909 + - Feat/add ignore rules ([ipfs/go-ipfs-files#26](https://github.com/ipfs/go-ipfs-files/pull/26))
910 + - revert(symlink): keep stat argument ([ipfs/go-ipfs-files#23](https://github.com/ipfs/go-ipfs-files/pull/23))
911 + - feat: correctly report the size of symlinks ([ipfs/go-ipfs-files#22](https://github.com/ipfs/go-ipfs-files/pull/22))
912 + - serialfile: fix handling of hidden paths on windows ([ipfs/go-ipfs-files#21](https://github.com/ipfs/go-ipfs-files/pull/21))
913 + - feat: add WriteTo function ([ipfs/go-ipfs-files#20](https://github.com/ipfs/go-ipfs-files/pull/20))
914 + - doc: fix formdata documentation ([ipfs/go-ipfs-files#19](https://github.com/ipfs/go-ipfs-files/pull/19))
915 +- github.com/ipfs/go-ipfs-pinner (v0.0.1 -> v0.0.4):
916 + - fix: don't hold the pin lock while updating pins ([ipfs/go-ipfs-pinner#2](https://github.com/ipfs/go-ipfs-pinner/pull/2))
917 +- github.com/ipfs/go-ipfs-pq (v0.0.1 -> v0.0.2):
918 + - Remove() ([ipfs/go-ipfs-pq#5](https://github.com/ipfs/go-ipfs-pq/pull/5))
919 + - Fix Peek() test ([ipfs/go-ipfs-pq#4](https://github.com/ipfs/go-ipfs-pq/pull/4))
920 + - add Peek() method ([ipfs/go-ipfs-pq#3](https://github.com/ipfs/go-ipfs-pq/pull/3))
921 + - add gomod support // tag v0.0.1. ([ipfs/go-ipfs-pq#1](https://github.com/ipfs/go-ipfs-pq/pull/1))
922 +- github.com/ipfs/go-ipfs-routing (v0.0.1 -> v0.1.0):
923 + - migrate to go-libp2p-core ([ipfs/go-ipfs-routing#22](https://github.com/ipfs/go-ipfs-routing/pull/22))
924 +- github.com/ipfs/go-ipld-cbor (v0.0.2 -> v0.0.4):
925 + - doc: add a lead maintainer ([ipfs/go-ipld-cbor#65](https://github.com/ipfs/go-ipld-cbor/pull/65))
926 + - fastpath CBOR ([ipfs/go-ipld-cbor#64](https://github.com/ipfs/go-ipld-cbor/pull/64))
927 +- github.com/ipfs/go-ipld-format (v0.0.2 -> v0.2.0):
928 + - fix: change the batch size to avoid buffering too much ([ipfs/go-ipld-format#56](https://github.com/ipfs/go-ipld-format/pull/56))
929 + - doc: add a lead maintainer ([ipfs/go-ipld-format#54](https://github.com/ipfs/go-ipld-format/pull/54))
930 +- github.com/ipfs/go-ipld-git (v0.0.2 -> v0.0.3):
931 + - Use RFC3339 to format dates, fixes #16 ([ipfs/go-ipld-git#32](https://github.com/ipfs/go-ipld-git/pull/32))
932 + - doc: add a lead maintainer ([ipfs/go-ipld-git#41](https://github.com/ipfs/go-ipld-git/pull/41))
933 +- github.com/ipfs/go-ipns (v0.0.1 -> v0.0.2):
934 + - readme: add a lead maintainer ([ipfs/go-ipns#25](https://github.com/ipfs/go-ipns/pull/25))
935 +- github.com/ipfs/go-log (v0.0.1 -> v1.0.4):
936 + - add IPFS_* env vars back for transitionary release of go-log ([ipfs/go-log#67](https://github.com/ipfs/go-log/pull/67))
937 + - Experimental: zap backend for go-log ([ipfs/go-log#61](https://github.com/ipfs/go-log/pull/61))
938 + - Spelling fix ([ipfs/go-log#63](https://github.com/ipfs/go-log/pull/63))
939 + - Deprecate EventLogging and Warning* functions ([ipfs/go-log#62](https://github.com/ipfs/go-log/pull/62))
940 +- github.com/ipfs/go-merkledag (v0.0.3 -> v0.3.2):
941 + - fix: correctly construct sessions ([ipfs/go-merkledag#56](https://github.com/ipfs/go-merkledag/pull/56))
942 + - Migrate dagutils from go-ipfs ([ipfs/go-merkledag#50](https://github.com/ipfs/go-merkledag/pull/50))
943 + - Make getPBNode Public ([ipfs/go-merkledag#49](https://github.com/ipfs/go-merkledag/pull/49))
944 + - Pull In Upstream Changes ([ipfs/go-merkledag#1](https://github.com/ipfs/go-merkledag/pull/1))
945 + - fix: slightly reduce memory usage when walking large directory trees ([ipfs/go-merkledag#45](https://github.com/ipfs/go-merkledag/pull/45))
946 + - fix: return ErrLinkNotFound when the _link_ isn't found ([ipfs/go-merkledag#44](https://github.com/ipfs/go-merkledag/pull/44))
947 + - fix: include root in searches by default ([ipfs/go-merkledag#43](https://github.com/ipfs/go-merkledag/pull/43))
948 + - rework the graph walking functions with functional options ([ipfs/go-merkledag#42](https://github.com/ipfs/go-merkledag/pull/42))
949 + - fix inconsistent EnumerateChildrenAsync behavior ([ipfs/go-merkledag#41](https://github.com/ipfs/go-merkledag/pull/41))
950 +- github.com/ipfs/go-mfs (v0.0.7 -> v0.1.1):
951 + - migrate to go-libp2p-core ([ipfs/go-mfs#77](https://github.com/ipfs/go-mfs/pull/77))
952 +- github.com/ipfs/go-peertaskqueue (v0.0.5-f09820a0a5b6 -> v0.2.0):
953 + - Extend peer task queue to work with want-have / want-block ([ipfs/go-peertaskqueue#8](https://github.com/ipfs/go-peertaskqueue/pull/8))
954 + - migrate to go-libp2p-core ([ipfs/go-peertaskqueue#4](https://github.com/ipfs/go-peertaskqueue/pull/4))
955 +- github.com/ipfs/go-unixfs (v0.0.6 -> v0.2.4):
956 + - fix: fix a panic when deleting ([ipfs/go-unixfs#81](https://github.com/ipfs/go-unixfs/pull/81))
957 + - fix(dagreader): remove a buggy workaround for a gateway issue ([ipfs/go-unixfs#80](https://github.com/ipfs/go-unixfs/pull/80))
958 + - fix: correctly handle symlink file sizes ([ipfs/go-unixfs#78](https://github.com/ipfs/go-unixfs/pull/78))
959 + - fix: return the correct error from RemoveChild ([ipfs/go-unixfs#76](https://github.com/ipfs/go-unixfs/pull/76))
960 + - update the the last go-merkledag ([ipfs/go-unixfs#75](https://github.com/ipfs/go-unixfs/pull/75))
961 + - fix: enumerate children ([ipfs/go-unixfs#74](https://github.com/ipfs/go-unixfs/pull/74))
962 +- github.com/ipfs/interface-go-ipfs-core (v0.0.8 -> v0.2.7):
963 + - Add pin ls tests for indirect pin traversal and pin type precedence ([ipfs/interface-go-ipfs-core#47](https://github.com/ipfs/interface-go-ipfs-core/pull/47))
964 + - fix(test): fix a flaky pubsub test ([ipfs/interface-go-ipfs-core#45](https://github.com/ipfs/interface-go-ipfs-core/pull/45))
965 + - README: stub ([ipfs/interface-go-ipfs-core#44](https://github.com/ipfs/interface-go-ipfs-core/pull/44))
966 + - test: test ReadAt if implemented ([ipfs/interface-go-ipfs-core#43](https://github.com/ipfs/interface-go-ipfs-core/pull/43))
967 + - test: fix put with hash test ([ipfs/interface-go-ipfs-core#41](https://github.com/ipfs/interface-go-ipfs-core/pull/41))
968 + - Bump go-libp2p-core, up test key size to 2048 ([ipfs/interface-go-ipfs-core#39](https://github.com/ipfs/interface-go-ipfs-core/pull/39))
969 + - migrate to go-libp2p-core. ([ipfs/interface-go-ipfs-core#35](https://github.com/ipfs/interface-go-ipfs-core/pull/35))
970 + - tests: expose TestSuite ([ipfs/interface-go-ipfs-core#34](https://github.com/ipfs/interface-go-ipfs-core/pull/34))
971 +- github.com/libp2p/go-libp2p (v0.0.32 -> v0.8.2):
972 + - fix: keep observed addrs alive as long as their associated connections are alive ([libp2p/go-libp2p#899](https://github.com/libp2p/go-libp2p/pull/899))
973 + - fix: refactor logic for identifying connections ([libp2p/go-libp2p#898](https://github.com/libp2p/go-libp2p/pull/898))
974 + - fix: reduce log level of a noisy log line ([libp2p/go-libp2p#889](https://github.com/libp2p/go-libp2p/pull/889))
975 + - [discovery] missing defer .Stop on ticker ([libp2p/go-libp2p#888](https://github.com/libp2p/go-libp2p/pull/888))
976 + - deprioritize unspecified addresses in mock connections ([libp2p/go-libp2p#887](https://github.com/libp2p/go-libp2p/pull/887))
977 + - feat: support TLS by default ([libp2p/go-libp2p#884](https://github.com/libp2p/go-libp2p/pull/884))
978 + - Expose option for setting autonat throttling ([libp2p/go-libp2p#882](https://github.com/libp2p/go-libp2p/pull/882))
979 + - Clearer naming of nat override options ([libp2p/go-libp2p#878](https://github.com/libp2p/go-libp2p/pull/878))
980 + - fix: set the private key when constructing the autonat service ([libp2p/go-libp2p#853](https://github.com/libp2p/go-libp2p/pull/853))
981 + - Signal address change ([libp2p/go-libp2p#851](https://github.com/libp2p/go-libp2p/pull/851))
982 + - fix multiple issues in the mock tests ([libp2p/go-libp2p#850](https://github.com/libp2p/go-libp2p/pull/850))
983 + - fix: minimal autonat dialer ([libp2p/go-libp2p#849](https://github.com/libp2p/go-libp2p/pull/849))
984 + - Trigger Autorelay on NAT events ([libp2p/go-libp2p#807](https://github.com/libp2p/go-libp2p/pull/807))
985 + - Local addr updated event ([libp2p/go-libp2p#847](https://github.com/libp2p/go-libp2p/pull/847))
986 + - feat(mock): reliable notifications ([libp2p/go-libp2p#836](https://github.com/libp2p/go-libp2p/pull/836))
987 + - doc(options): fix autorelay documentation ([libp2p/go-libp2p#835](https://github.com/libp2p/go-libp2p/pull/835))
988 + - change PrivateNetwork to accept a PSK, update constructor magic ([libp2p/go-libp2p#796](https://github.com/libp2p/go-libp2p/pull/796))
989 + - docs: Update the README ([libp2p/go-libp2p#827](https://github.com/libp2p/go-libp2p/pull/827))
990 + - fix: remove an unnecessary goroutine ([libp2p/go-libp2p#820](https://github.com/libp2p/go-libp2p/pull/820))
991 + - EnableAutoRelay should work without ContentRouting if there are StaticRelays defined ([libp2p/go-libp2p#810](https://github.com/libp2p/go-libp2p/pull/810))
992 + - Use of mux.ErrReset in mocknet ([libp2p/go-libp2p#815](https://github.com/libp2p/go-libp2p/pull/815))
993 + - docs: uniform comment sentences ([libp2p/go-libp2p#826](https://github.com/libp2p/go-libp2p/pull/826))
994 + - enable non-public address port mapping announcement ([libp2p/go-libp2p#771](https://github.com/libp2p/go-libp2p/pull/771))
995 + - fix: demote stream deadline errors to debug logs ([libp2p/go-libp2p#768](https://github.com/libp2p/go-libp2p/pull/768))
996 + - small grammar fixes and updates to readme ([libp2p/go-libp2p#743](https://github.com/libp2p/go-libp2p/pull/743))
997 + - Identify: Make activation threshold configurable ([libp2p/go-libp2p#740](https://github.com/libp2p/go-libp2p/pull/740))
998 + - better user-agent handling ([libp2p/go-libp2p#702](https://github.com/libp2p/go-libp2p/pull/702))
999 + - Update deps, mocknet tests ([libp2p/go-libp2p#697](https://github.com/libp2p/go-libp2p/pull/697))
1000 + - autorelay: ensure candidate relays can hop ([libp2p/go-libp2p#696](https://github.com/libp2p/go-libp2p/pull/696))
1001 + - We don't use `cs` here, drop it. ([libp2p/go-libp2p#682](https://github.com/libp2p/go-libp2p/pull/682))
1002 + - Fix racy and failing test cases. ([libp2p/go-libp2p#674](https://github.com/libp2p/go-libp2p/pull/674))
1003 + - fix: use the goprocess for closing ([libp2p/go-libp2p#669](https://github.com/libp2p/go-libp2p/pull/669))
1004 + - update package table after -core refactor ([libp2p/go-libp2p#661](https://github.com/libp2p/go-libp2p/pull/661))
1005 + - basic_host: ensure we close correctly when the context is canceled ([libp2p/go-libp2p#656](https://github.com/libp2p/go-libp2p/pull/656))
1006 + - Add go-libp2p-gostream and go-libp2p-http to readme ([libp2p/go-libp2p#655](https://github.com/libp2p/go-libp2p/pull/655))
1007 +- github.com/libp2p/go-libp2p-autonat (v0.0.6 -> v0.2.2):
1008 + - Run Autonat Service while in unknown connectivity mode ([libp2p/go-libp2p-autonat#75](https://github.com/libp2p/go-libp2p-autonat/pull/75))
1009 + - Add option to force nat into a specified reachability state ([libp2p/go-libp2p-autonat#55](https://github.com/libp2p/go-libp2p-autonat/pull/55))
1010 + - Merge Autonat-svc ([libp2p/go-libp2p-autonat#54](https://github.com/libp2p/go-libp2p-autonat/pull/54))
1011 + - change autonat interface to use functional options ([libp2p/go-libp2p-autonat#53](https://github.com/libp2p/go-libp2p-autonat/pull/53))
1012 + - Limiting autonat service responses/startup ([libp2p/go-libp2p-autonat#45](https://github.com/libp2p/go-libp2p-autonat/pull/45))
1013 + - Emit events when NAT status changes ([libp2p/go-libp2p-autonat#37](https://github.com/libp2p/go-libp2p-autonat/pull/37))
1014 + - Take eventbus events to completion ([libp2p/go-libp2p-autonat#38](https://github.com/libp2p/go-libp2p-autonat/pull/38))
1015 + - Add missing syntax to autonat.proto ([libp2p/go-libp2p-autonat#26](https://github.com/libp2p/go-libp2p-autonat/pull/26))
1016 + - full close the autonat stream ([libp2p/go-libp2p-autonat#20](https://github.com/libp2p/go-libp2p-autonat/pull/20))
1017 + - reduce dialback timeout to 15s ([libp2p/go-libp2p-autonat#17](https://github.com/libp2p/go-libp2p-autonat/pull/17))
1018 + - Extract service implementation from go-libp2p-autonat ([libp2p/go-libp2p-autonat#1](https://github.com/libp2p/go-libp2p-autonat/pull/1))
1019 +- github.com/libp2p/go-libp2p-circuit (v0.0.9 -> v0.2.2):
1020 + - fix: don't abort accept when accepting a single connection fails ([libp2p/go-libp2p-circuit#107](https://github.com/libp2p/go-libp2p-circuit/pull/107))
1021 + - Revert "feat: functional options" ([libp2p/go-libp2p-circuit#103](https://github.com/libp2p/go-libp2p-circuit/pull/103))
1022 + - feat: remove relay discovery and unspecified relay dialing ([libp2p/go-libp2p-circuit#101](https://github.com/libp2p/go-libp2p-circuit/pull/101))
1023 + - move protocol definitions to go-multiaddr ([libp2p/go-libp2p-circuit#81](https://github.com/libp2p/go-libp2p-circuit/pull/81))
1024 + - return the full address from conn.RemoteMultiaddr ([libp2p/go-libp2p-circuit#80](https://github.com/libp2p/go-libp2p-circuit/pull/80))
1025 + - expose CanHop as a module function ([libp2p/go-libp2p-circuit#79](https://github.com/libp2p/go-libp2p-circuit/pull/79))
1026 +- github.com/libp2p/go-libp2p-discovery (v0.0.5 -> v0.4.0):
1027 + - Fix race with reuse of randomness ([libp2p/go-libp2p-discovery#54](https://github.com/libp2p/go-libp2p-discovery/pull/54))
1028 + - Add Backoff Cache Discovery ([libp2p/go-libp2p-discovery#26](https://github.com/libp2p/go-libp2p-discovery/pull/26))
1029 + - Discovery based Content Routing ([libp2p/go-libp2p-discovery#27](https://github.com/libp2p/go-libp2p-discovery/pull/27))
1030 +- github.com/libp2p/go-libp2p-kad-dht (v0.0.15 -> v0.7.10):
1031 + - fix: avoid blocking when bootstrapping ([libp2p/go-libp2p-kad-dht#610](https://github.com/libp2p/go-libp2p-kad-dht/pull/610))
1032 + - fix: re-validate peers whenever their state changes ([libp2p/go-libp2p-kad-dht#607](https://github.com/libp2p/go-libp2p-kad-dht/pull/607))
1033 + - intercept failing query events when finding providers ([libp2p/go-libp2p-kad-dht#603](https://github.com/libp2p/go-libp2p-kad-dht/pull/603))
1034 + - feat: set provider manager options ([libp2p/go-libp2p-kad-dht#593](https://github.com/libp2p/go-libp2p-kad-dht/pull/593))
1035 + - fix: optimize debug logging a bit ([libp2p/go-libp2p-kad-dht#598](https://github.com/libp2p/go-libp2p-kad-dht/pull/598))
1036 + - stricter definition of public for DHT ([libp2p/go-libp2p-kad-dht#596](https://github.com/libp2p/go-libp2p-kad-dht/pull/596))
1037 + - feat: reduce allocations ([libp2p/go-libp2p-kad-dht#588](https://github.com/libp2p/go-libp2p-kad-dht/pull/588))
1038 + - query.go: Remove shuffle comment ([libp2p/go-libp2p-kad-dht#586](https://github.com/libp2p/go-libp2p-kad-dht/pull/586))
1039 + - fix: optimize isRelay ([libp2p/go-libp2p-kad-dht#585](https://github.com/libp2p/go-libp2p-kad-dht/pull/585))
1040 + - feat: expose WANActive ([libp2p/go-libp2p-kad-dht#580](https://github.com/libp2p/go-libp2p-kad-dht/pull/580))
1041 + - fix: improve error handling in dual dht ([libp2p/go-libp2p-kad-dht#582](https://github.com/libp2p/go-libp2p-kad-dht/pull/582))
1042 + - fix: dedup addresses ([libp2p/go-libp2p-kad-dht#581](https://github.com/libp2p/go-libp2p-kad-dht/pull/581))
1043 + - Fix bug in periodic peer pinging ([libp2p/go-libp2p-kad-dht#579](https://github.com/libp2p/go-libp2p-kad-dht/pull/579))
1044 + - Dual DHT scaffold ([libp2p/go-libp2p-kad-dht#570](https://github.com/libp2p/go-libp2p-kad-dht/pull/570))
1045 + - fix: linting fixes ([libp2p/go-libp2p-kad-dht#578](https://github.com/libp2p/go-libp2p-kad-dht/pull/578))
1046 + - fix: remove local provider check ([libp2p/go-libp2p-kad-dht#577](https://github.com/libp2p/go-libp2p-kad-dht/pull/577))
1047 + - fix: use the routing table filter ([libp2p/go-libp2p-kad-dht#576](https://github.com/libp2p/go-libp2p-kad-dht/pull/576))
1048 + - fix: handle empty keys ([libp2p/go-libp2p-kad-dht#562](https://github.com/libp2p/go-libp2p-kad-dht/pull/562))
1049 + - Set record handlers for the default protocol prefix ([libp2p/go-libp2p-kad-dht#560](https://github.com/libp2p/go-libp2p-kad-dht/pull/560))
1050 + - fix incorrect error handling during provider record lookups ([libp2p/go-libp2p-kad-dht#554](https://github.com/libp2p/go-libp2p-kad-dht/pull/554))
1051 + - Proposed DHTv2 Changes ([libp2p/go-libp2p-kad-dht#473](https://github.com/libp2p/go-libp2p-kad-dht/pull/473))
1052 + - fix: obey the context when sending messages to peers ([libp2p/go-libp2p-kad-dht#462](https://github.com/libp2p/go-libp2p-kad-dht/pull/462))
1053 + - Close context correctly ([libp2p/go-libp2p-kad-dht#477](https://github.com/libp2p/go-libp2p-kad-dht/pull/477))
1054 + - add benchmark for handleFindPeer ([libp2p/go-libp2p-kad-dht#475](https://github.com/libp2p/go-libp2p-kad-dht/pull/475))
1055 + - give views names again ([libp2p/go-libp2p-kad-dht#474](https://github.com/libp2p/go-libp2p-kad-dht/pull/474))
1056 + - metrics: record message/request event even in case of error ([libp2p/go-libp2p-kad-dht#464](https://github.com/libp2p/go-libp2p-kad-dht/pull/464))
1057 + - fix(dialqueue): fix a timer leak ([libp2p/go-libp2p-kad-dht#466](https://github.com/libp2p/go-libp2p-kad-dht/pull/466))
1058 + - fix(query): cancel the context when the query finishes ([libp2p/go-libp2p-kad-dht#467](https://github.com/libp2p/go-libp2p-kad-dht/pull/467))
1059 + - fix(providers): upgrade warnings to errors ([libp2p/go-libp2p-kad-dht#455](https://github.com/libp2p/go-libp2p-kad-dht/pull/455))
1060 + - Make the Routing Table's latency tolerance configurable. ([libp2p/go-libp2p-kad-dht#454](https://github.com/libp2p/go-libp2p-kad-dht/pull/454))
1061 + - Adjust cluster level while encoding as well ([libp2p/go-libp2p-kad-dht#445](https://github.com/libp2p/go-libp2p-kad-dht/pull/445))
1062 + - Remove incorrect doc ([libp2p/go-libp2p-kad-dht#443](https://github.com/libp2p/go-libp2p-kad-dht/pull/443))
1063 + - feat: reduce stream idle timeout to 1m ([libp2p/go-libp2p-kad-dht#441](https://github.com/libp2p/go-libp2p-kad-dht/pull/441))
1064 + - Provider records use multihashes instead of CIDs ([libp2p/go-libp2p-kad-dht#422](https://github.com/libp2p/go-libp2p-kad-dht/pull/422))
1065 + - Fix flaky TestEmptyTableTest ([libp2p/go-libp2p-kad-dht#433](https://github.com/libp2p/go-libp2p-kad-dht/pull/433))
1066 + - Refresh cpl's in dht ([libp2p/go-libp2p-kad-dht#428](https://github.com/libp2p/go-libp2p-kad-dht/pull/428))
1067 + - fix: always send the result channel when triggering a refresh ([libp2p/go-libp2p-kad-dht#425](https://github.com/libp2p/go-libp2p-kad-dht/pull/425))
1068 + - feat: allow disabling value and provider storage/messages ([libp2p/go-libp2p-kad-dht#400](https://github.com/libp2p/go-libp2p-kad-dht/pull/400))
1069 + - fix: prioritize closer peers ([libp2p/go-libp2p-kad-dht#424](https://github.com/libp2p/go-libp2p-kad-dht/pull/424))
1070 + - fix: try to re-add existing peers when the routing table is empty ([libp2p/go-libp2p-kad-dht#420](https://github.com/libp2p/go-libp2p-kad-dht/pull/420))
1071 + - feat: refresh and wait ([libp2p/go-libp2p-kad-dht#418](https://github.com/libp2p/go-libp2p-kad-dht/pull/418))
1072 + - Make max record age configurable ([libp2p/go-libp2p-kad-dht#410](https://github.com/libp2p/go-libp2p-kad-dht/pull/410))
1073 + - fix and simplify some bootstrapping logic ([libp2p/go-libp2p-kad-dht#405](https://github.com/libp2p/go-libp2p-kad-dht/pull/405))
1074 + - feat(bootstrap): take autobootstrap to completion ([libp2p/go-libp2p-kad-dht#403](https://github.com/libp2p/go-libp2p-kad-dht/pull/403))
1075 + - Feature/correct bootstrapping ([libp2p/go-libp2p-kad-dht#384](https://github.com/libp2p/go-libp2p-kad-dht/pull/384))
1076 + - Update tests to use Ed25519 when acceptable. ([libp2p/go-libp2p-kad-dht#380](https://github.com/libp2p/go-libp2p-kad-dht/pull/380))
1077 + - Add timeout ([libp2p/go-libp2p-kad-dht#351](https://github.com/libp2p/go-libp2p-kad-dht/pull/351))
1078 + - Feat/message size ([libp2p/go-libp2p-kad-dht#353](https://github.com/libp2p/go-libp2p-kad-dht/pull/353))
1079 + - reduce background goroutines ([libp2p/go-libp2p-kad-dht#340](https://github.com/libp2p/go-libp2p-kad-dht/pull/340))
1080 +- github.com/libp2p/go-libp2p-kbucket (v0.1.1 -> v0.4.1):
1081 + - fix: use time.Duration for time, not floats ([libp2p/go-libp2p-kbucket#76](https://github.com/libp2p/go-libp2p-kbucket/pull/76))
1082 + - Add LastUsefulAt and LastSuccessfulQueryAt for each peer ([libp2p/go-libp2p-kbucket#75](https://github.com/libp2p/go-libp2p-kbucket/pull/75))
1083 + - fix: correctly track CPLs of never refreshed buckets ([libp2p/go-libp2p-kbucket#71](https://github.com/libp2p/go-libp2p-kbucket/pull/71))
1084 + - Get Peer Infos ([libp2p/go-libp2p-kbucket#69](https://github.com/libp2p/go-libp2p-kbucket/pull/69))
1085 + - fix: use accurate bucket logic ([libp2p/go-libp2p-kbucket#64](https://github.com/libp2p/go-libp2p-kbucket/pull/64))
1086 + - Replace dead peers & increase replacement cache size ([libp2p/go-libp2p-kbucket#59](https://github.com/libp2p/go-libp2p-kbucket/pull/59))
1087 + - Kbucket refactoring for Content Routing ([libp2p/go-libp2p-kbucket#54](https://github.com/libp2p/go-libp2p-kbucket/pull/54))
1088 + - Disassociate RT membership from connectivity ([libp2p/go-libp2p-kbucket#50](https://github.com/libp2p/go-libp2p-kbucket/pull/50))
1089 + - Unit Test for the util.Closer function ([libp2p/go-libp2p-kbucket#48](https://github.com/libp2p/go-libp2p-kbucket/pull/48))
1090 + - Refresh Cpl's, not buckets ([libp2p/go-libp2p-kbucket#46](https://github.com/libp2p/go-libp2p-kbucket/pull/46))
1091 + - Fix NearestPeers Doc ([libp2p/go-libp2p-kbucket#45](https://github.com/libp2p/go-libp2p-kbucket/pull/45))
1092 + - fix: when the target bucket is empty or low, pull from all other buckets ([libp2p/go-libp2p-kbucket#43](https://github.com/libp2p/go-libp2p-kbucket/pull/43))
1093 + - readme: replace IPFS contrib links with libp2p ([libp2p/go-libp2p-kbucket#34](https://github.com/libp2p/go-libp2p-kbucket/pull/34))
1094 + - k-bucket support for peoper kad bootstrapping ([libp2p/go-libp2p-kbucket#38](https://github.com/libp2p/go-libp2p-kbucket/pull/38))
1095 + - Fix bootstrapping id generation logic ([libp2p/go-libp2p-kbucket#1](https://github.com/libp2p/go-libp2p-kbucket/pull/1))
1096 + - fix: avoid hashing under a lock ([libp2p/go-libp2p-kbucket#31](https://github.com/libp2p/go-libp2p-kbucket/pull/31))
1097 + - dep: use a faster sha256 library ([libp2p/go-libp2p-kbucket#32](https://github.com/libp2p/go-libp2p-kbucket/pull/32))
1098 + - Remove a lot of allocations, and fix some ambiguous naming ([libp2p/go-libp2p-kbucket#30](https://github.com/libp2p/go-libp2p-kbucket/pull/30))
1099 +- github.com/libp2p/go-libp2p-mplex (v0.1.1 -> v0.2.3):
1100 + - Respect mux.ErrReset ([libp2p/go-libp2p-mplex#9](https://github.com/libp2p/go-libp2p-mplex/pull/9))
1101 +- github.com/libp2p/go-libp2p-nat (v0.0.4 -> v0.0.6):
1102 + - typo and changed deprecated method ([libp2p/go-libp2p-nat#26](https://github.com/libp2p/go-libp2p-nat/pull/26))
1103 + - nit: fix log format ([libp2p/go-libp2p-nat#19](https://github.com/libp2p/go-libp2p-nat/pull/19))
1104 + - fix: remove notifier ([libp2p/go-libp2p-nat#18](https://github.com/libp2p/go-libp2p-nat/pull/18))
1105 +- github.com/libp2p/go-libp2p-peerstore (v0.0.6 -> v0.2.3):
1106 + - fix: handle nil peer IDs ([libp2p/go-libp2p-peerstore#88](https://github.com/libp2p/go-libp2p-peerstore/pull/88))
1107 + - Fix memory store signed peer record bug ([libp2p/go-libp2p-peerstore#133](https://github.com/libp2p/go-libp2p-peerstore/pull/133))
1108 + - fix: make closing the in-memory peerstore actually close it ([libp2p/go-libp2p-peerstore#131](https://github.com/libp2p/go-libp2p-peerstore/pull/131))
1109 + - Correct path to peer.AddrInfo in deprecation ([libp2p/go-libp2p-peerstore#124](https://github.com/libp2p/go-libp2p-peerstore/pull/124))
1110 + - fix multiple TTL bugs ([libp2p/go-libp2p-peerstore#92](https://github.com/libp2p/go-libp2p-peerstore/pull/92))
1111 + - reduce allocations when adding addrs ([libp2p/go-libp2p-peerstore#86](https://github.com/libp2p/go-libp2p-peerstore/pull/86))
1112 + - test: add metadata test ([libp2p/go-libp2p-peerstore#82](https://github.com/libp2p/go-libp2p-peerstore/pull/82))
1113 + - set map in constructor ([libp2p/go-libp2p-peerstore#81](https://github.com/libp2p/go-libp2p-peerstore/pull/81))
1114 + - improve interning ([libp2p/go-libp2p-peerstore#79](https://github.com/libp2p/go-libp2p-peerstore/pull/79))
1115 +- github.com/libp2p/go-libp2p-pnet (v0.0.1 -> v0.2.0):
1116 + - remove key serialization, construct conn from ipnet.PSK ([libp2p/go-libp2p-pnet#32](https://github.com/libp2p/go-libp2p-pnet/pull/32))
1117 + - remove dependency on go-multicodec ([libp2p/go-libp2p-pnet#26](https://github.com/libp2p/go-libp2p-pnet/pull/26))
1118 +- github.com/libp2p/go-libp2p-pubsub (v0.0.3 -> v0.2.7):
1119 + - Replace LRU cache blacklist implementation with a time cache ([libp2p/go-libp2p-pubsub#258](https://github.com/libp2p/go-libp2p-pubsub/pull/258))
1120 + - Configurable size of validate queue ([libp2p/go-libp2p-pubsub#255](https://github.com/libp2p/go-libp2p-pubsub/pull/255))
1121 + - Rename VaidatorData to ValidatorData ([libp2p/go-libp2p-pubsub#251](https://github.com/libp2p/go-libp2p-pubsub/pull/251))
1122 + - Configurable message id function ([libp2p/go-libp2p-pubsub#248](https://github.com/libp2p/go-libp2p-pubsub/pull/248))
1123 + - tracing support ([libp2p/go-libp2p-pubsub#227](https://github.com/libp2p/go-libp2p-pubsub/pull/227))
1124 + - add ValidatorData field to Message ([libp2p/go-libp2p-pubsub#231](https://github.com/libp2p/go-libp2p-pubsub/pull/231))
1125 + - Configurable outbound peer queue sizes ([libp2p/go-libp2p-pubsub#230](https://github.com/libp2p/go-libp2p-pubsub/pull/230))
1126 + - Topic handler bug fixes ([libp2p/go-libp2p-pubsub#225](https://github.com/libp2p/go-libp2p-pubsub/pull/225))
1127 + - Add Discovery ([libp2p/go-libp2p-pubsub#184](https://github.com/libp2p/go-libp2p-pubsub/pull/184))
1128 + - Expose the peer that propagates a message to the recipient ([libp2p/go-libp2p-pubsub#218](https://github.com/libp2p/go-libp2p-pubsub/pull/218))
1129 + - gossip methods: renames and predicate adjustment ([libp2p/go-libp2p-pubsub#204](https://github.com/libp2p/go-libp2p-pubsub/pull/204))
1130 + - godocs: clarify config params of MessageCache. ([libp2p/go-libp2p-pubsub#205](https://github.com/libp2p/go-libp2p-pubsub/pull/205))
1131 + - minor bug fix: on join, source peers from gossip[topic] if insufficient peers in fanout[topic] ([libp2p/go-libp2p-pubsub#196](https://github.com/libp2p/go-libp2p-pubsub/pull/196))
1132 + - add PubSub's context to Subscription ([libp2p/go-libp2p-pubsub#201](https://github.com/libp2p/go-libp2p-pubsub/pull/201))
1133 + - Add the ability to handle newly subscribed peers ([libp2p/go-libp2p-pubsub#190](https://github.com/libp2p/go-libp2p-pubsub/pull/190))
1134 + - Fix gossipsub race condition for heartbeat ([libp2p/go-libp2p-pubsub#188](https://github.com/libp2p/go-libp2p-pubsub/pull/188))
1135 +- github.com/libp2p/go-libp2p-pubsub-router (v0.0.3 -> v0.2.1):
1136 + - fix: ignore bad peers when fetching the latest value ([libp2p/go-libp2p-pubsub-router#54](https://github.com/libp2p/go-libp2p-pubsub-router/pull/54))
1137 + - fix: rename MinimalPubsub -> Pubsub interface and improve docs ([libp2p/go-libp2p-pubsub-router#52](https://github.com/libp2p/go-libp2p-pubsub-router/pull/52))
1138 + - Use Minimal PubSub Interface Instead Of Full PubSub Router ([libp2p/go-libp2p-pubsub-router#51](https://github.com/libp2p/go-libp2p-pubsub-router/pull/51))
1139 + - Remove bootstrapping code ([libp2p/go-libp2p-pubsub-router#37](https://github.com/libp2p/go-libp2p-pubsub-router/pull/37))
1140 + - readme: replace IPFS contrib links with libp2p ([libp2p/go-libp2p-pubsub-router#34](https://github.com/libp2p/go-libp2p-pubsub-router/pull/34))
1141 + - Add Persistence Layer on top of PubSub ([libp2p/go-libp2p-pubsub-router#33](https://github.com/libp2p/go-libp2p-pubsub-router/pull/33))
1142 + - Subscribe to PubSub topic before Publishing ([libp2p/go-libp2p-pubsub-router#30](https://github.com/libp2p/go-libp2p-pubsub-router/pull/30))
1143 + - PutValue not blocked by Provide during bootstrapping ([libp2p/go-libp2p-pubsub-router#29](https://github.com/libp2p/go-libp2p-pubsub-router/pull/29))
1144 +- github.com/libp2p/go-libp2p-quic-transport (v0.0.3 -> v0.3.5):
1145 + - add command line client and server ([libp2p/go-libp2p-quic-transport#139](https://github.com/libp2p/go-libp2p-quic-transport/pull/139))
1146 + - write qlogs to a temporary file first, then rename them when done ([libp2p/go-libp2p-quic-transport#136](https://github.com/libp2p/go-libp2p-quic-transport/pull/136))
1147 + - export qlogs when the QLOGDIR env variable is set ([libp2p/go-libp2p-quic-transport#129](https://github.com/libp2p/go-libp2p-quic-transport/pull/129))
1148 + - fix: avoid dialing/listening on dns addresses ([libp2p/go-libp2p-quic-transport#131](https://github.com/libp2p/go-libp2p-quic-transport/pull/131))
1149 + - use a stateless reset key derived from the private key ([libp2p/go-libp2p-quic-transport#122](https://github.com/libp2p/go-libp2p-quic-transport/pull/122))
1150 + - add support for multiaddr filtering ([libp2p/go-libp2p-quic-transport#125](https://github.com/libp2p/go-libp2p-quic-transport/pull/125))
1151 + - use the resolved address for RemoteMultiaddr() ([libp2p/go-libp2p-quic-transport#127](https://github.com/libp2p/go-libp2p-quic-transport/pull/127))
1152 + - accept a PSK in the transport constructor (and reject it) ([libp2p/go-libp2p-quic-transport#111](https://github.com/libp2p/go-libp2p-quic-transport/pull/111))
1153 + - update quic-go to v0.15.0 ([libp2p/go-libp2p-quic-transport#114](https://github.com/libp2p/go-libp2p-quic-transport/pull/114))
1154 + - increase the stream and connection receive windows ([libp2p/go-libp2p-quic-transport#108](https://github.com/libp2p/go-libp2p-quic-transport/pull/108))
1155 + - fix key comparisons in tests ([libp2p/go-libp2p-quic-transport#110](https://github.com/libp2p/go-libp2p-quic-transport/pull/110))
1156 + - make reuse work on Windows ([libp2p/go-libp2p-quic-transport#83](https://github.com/libp2p/go-libp2p-quic-transport/pull/83))
1157 + - add a LICENSE ([libp2p/go-libp2p-quic-transport#78](https://github.com/libp2p/go-libp2p-quic-transport/pull/78))
1158 + - Use specific netlink families for android ([libp2p/go-libp2p-quic-transport#75](https://github.com/libp2p/go-libp2p-quic-transport/pull/75))
1159 + - implement a garbage-collector for unused reuse connections ([libp2p/go-libp2p-quic-transport#73](https://github.com/libp2p/go-libp2p-quic-transport/pull/73))
1160 + - implement connection reuse ([libp2p/go-libp2p-quic-transport#63](https://github.com/libp2p/go-libp2p-quic-transport/pull/63))
1161 + - update the README ([libp2p/go-libp2p-quic-transport#69](https://github.com/libp2p/go-libp2p-quic-transport/pull/69))
1162 + - use the handshake logic from go-libp2p-tls ([libp2p/go-libp2p-quic-transport#67](https://github.com/libp2p/go-libp2p-quic-transport/pull/67))
1163 + - update quic-go to v0.12.0 (supporting QUIC draft-22) ([libp2p/go-libp2p-quic-transport#68](https://github.com/libp2p/go-libp2p-quic-transport/pull/68))
1164 + - when ListenUDP fails once, try again next time ([libp2p/go-libp2p-quic-transport#59](https://github.com/libp2p/go-libp2p-quic-transport/pull/59))
1165 +- github.com/libp2p/go-libp2p-record (v0.0.1 -> v0.1.2):
1166 + - readme: replace IPFS contrib links with libp2p ([libp2p/go-libp2p-record#25](https://github.com/libp2p/go-libp2p-record/pull/25))
1167 + - Use peer ID utilities to go from pubkey to peer ID ([libp2p/go-libp2p-record#26](https://github.com/libp2p/go-libp2p-record/pull/26))
1168 +- github.com/libp2p/go-libp2p-routing-helpers (v0.0.2 -> v0.2.2):
1169 + - doc: document all types ([libp2p/go-libp2p-routing-helpers#40](https://github.com/libp2p/go-libp2p-routing-helpers/pull/40))
1170 + - fix: fetch all providers when count is 0 ([libp2p/go-libp2p-routing-helpers#39](https://github.com/libp2p/go-libp2p-routing-helpers/pull/39))
1171 + - feat: implement io.Closer ([libp2p/go-libp2p-routing-helpers#37](https://github.com/libp2p/go-libp2p-routing-helpers/pull/37))
1172 + - readme: replace IPFS contrib links with libp2p ([libp2p/go-libp2p-routing-helpers#21](https://github.com/libp2p/go-libp2p-routing-helpers/pull/21))
1173 +- github.com/libp2p/go-libp2p-secio (v0.0.3 -> v0.2.2):
1174 + - feat: remove sha1 hmac ([libp2p/go-libp2p-secio#64](https://github.com/libp2p/go-libp2p-secio/pull/64))
1175 + - readme: add context and links ([libp2p/go-libp2p-secio#55](https://github.com/libp2p/go-libp2p-secio/pull/55))
1176 + - Update to latest go-libp2p-core, update tests ([libp2p/go-libp2p-secio#54](https://github.com/libp2p/go-libp2p-secio/pull/54))
1177 + - Remove support for blowfish ([libp2p/go-libp2p-secio#52](https://github.com/libp2p/go-libp2p-secio/pull/52))
1178 + - fix: wait for handshake to complete before returning ([libp2p/go-libp2p-secio#50](https://github.com/libp2p/go-libp2p-secio/pull/50))
1179 + - avoid holding the message writer longer than necessary ([libp2p/go-libp2p-secio#49](https://github.com/libp2p/go-libp2p-secio/pull/49))
1180 +- github.com/libp2p/go-libp2p-swarm (v0.0.7 -> v0.2.3):
1181 + - don't expire backoffs until 2x backoff period ([libp2p/go-libp2p-swarm#193](https://github.com/libp2p/go-libp2p-swarm/pull/193))
1182 + - fix: slightly simplify backoff logic ([libp2p/go-libp2p-swarm#192](https://github.com/libp2p/go-libp2p-swarm/pull/192))
1183 + - change backoffs to per-address ([libp2p/go-libp2p-swarm#191](https://github.com/libp2p/go-libp2p-swarm/pull/191))
1184 + - fix: set teardown after storing the context ([libp2p/go-libp2p-swarm#190](https://github.com/libp2p/go-libp2p-swarm/pull/190))
1185 + - feat: handle no addresses ([libp2p/go-libp2p-swarm#185](https://github.com/libp2p/go-libp2p-swarm/pull/185))
1186 + - fix: make sure to include peer in dial error ([libp2p/go-libp2p-swarm#180](https://github.com/libp2p/go-libp2p-swarm/pull/180))
1187 + - Don't drop connections when simultaneous dialing occurs ([libp2p/go-libp2p-swarm#174](https://github.com/libp2p/go-libp2p-swarm/pull/174))
1188 + - fix: fire a listen close event when closing the listener ([libp2p/go-libp2p-swarm#164](https://github.com/libp2p/go-libp2p-swarm/pull/164))
1189 + - Link to godocs for Host instead of deprecated repo ([libp2p/go-libp2p-swarm#137](https://github.com/libp2p/go-libp2p-swarm/pull/137))
1190 + - improve dial errors ([libp2p/go-libp2p-swarm#145](https://github.com/libp2p/go-libp2p-swarm/pull/145))
1191 + - Minor Docstring correction ([libp2p/go-libp2p-swarm#143](https://github.com/libp2p/go-libp2p-swarm/pull/143))
1192 + - test: close peerstore when closing the test swarm ([libp2p/go-libp2p-swarm#139](https://github.com/libp2p/go-libp2p-swarm/pull/139))
1193 + - fix listen addrs race ([libp2p/go-libp2p-swarm#136](https://github.com/libp2p/go-libp2p-swarm/pull/136))
1194 + - logging: make the swarm less noisy ([libp2p/go-libp2p-swarm#131](https://github.com/libp2p/go-libp2p-swarm/pull/131))
1195 + - feat: cache interface addresses for 1 minute ([libp2p/go-libp2p-swarm#129](https://github.com/libp2p/go-libp2p-swarm/pull/129))
1196 +- github.com/libp2p/go-libp2p-tls (v0.0.2 -> v0.1.3):
1197 + - Readme: link to the libp2p-core docs ([libp2p/go-libp2p-tls#36](https://github.com/libp2p/go-libp2p-tls/pull/36))
1198 + - expose the function to derive the peer's public key from the cert chain ([libp2p/go-libp2p-tls#33](https://github.com/libp2p/go-libp2p-tls/pull/33))
1199 + - set an ALPN value in the tls.Config ([libp2p/go-libp2p-tls#32](https://github.com/libp2p/go-libp2p-tls/pull/32))
1200 +- github.com/libp2p/go-libp2p-transport-upgrader (v0.0.4 -> v0.2.0):
1201 + - use the ipnet.PSK instead of the ipnet.Protector for private networks ([libp2p/go-libp2p-transport-upgrader#45](https://github.com/libp2p/go-libp2p-transport-upgrader/pull/45))
1202 + - readme: add context & fix example code ([libp2p/go-libp2p-transport-upgrader#26](https://github.com/libp2p/go-libp2p-transport-upgrader/pull/26))
1203 + - fix an incorrect error message ([libp2p/go-libp2p-transport-upgrader#27](https://github.com/libp2p/go-libp2p-transport-upgrader/pull/27))
1204 + - Consolidate abstractions and core types into go-libp2p-core (#28) ([libp2p/go-libp2p-transport-upgrader#22](https://github.com/libp2p/go-libp2p-transport-upgrader/pull/22))
1205 +- github.com/libp2p/go-libp2p-yamux (v0.1.3 -> v0.2.7):
1206 + - Respect mux.ErrReset ([libp2p/go-libp2p-yamux#10](https://github.com/libp2p/go-libp2p-yamux/pull/10))
1207 +- github.com/libp2p/go-maddr-filter (v0.0.4 -> v0.0.5):
1208 + - fix: check for blocked addrs without allocating ([libp2p/go-maddr-filter#14](https://github.com/libp2p/go-maddr-filter/pull/14))
1209 +- github.com/libp2p/go-mplex (v0.0.4 -> v0.1.2):
1210 + - remove deprecated log.Warning(f) ([libp2p/go-mplex#65](https://github.com/libp2p/go-mplex/pull/65))
1211 + - Remove dependency on go-libp2p-core and introduce new errors. ([libp2p/go-mplex#72](https://github.com/libp2p/go-mplex/pull/72))
1212 + - Bump lodash from 4.17.5 to 4.17.15 in /interop/js ([libp2p/go-mplex#66](https://github.com/libp2p/go-mplex/pull/66))
1213 + - add test for deadlines ([libp2p/go-mplex#60](https://github.com/libp2p/go-mplex/pull/60))
1214 +- github.com/libp2p/go-msgio (v0.0.2 -> v0.0.4):
1215 + - make the maximum message size configurable ([libp2p/go-msgio#15](https://github.com/libp2p/go-msgio/pull/15))
1216 + - combine writes and avoid a few more allocations ([libp2p/go-msgio#14](https://github.com/libp2p/go-msgio/pull/14))
1217 + - avoid allocating unless we need to ([libp2p/go-msgio#13](https://github.com/libp2p/go-msgio/pull/13))
1218 +- github.com/libp2p/go-nat (v0.0.3 -> v0.0.5):
1219 + - feat: switch to go-netroute ([libp2p/go-nat#19](https://github.com/libp2p/go-nat/pull/19))
1220 + - fix: really obey the context ([libp2p/go-nat#13](https://github.com/libp2p/go-nat/pull/13))
1221 + - don't mask context ([libp2p/go-nat#10](https://github.com/libp2p/go-nat/pull/10))
1222 +- github.com/libp2p/go-reuseport-transport (v0.0.2 -> v0.0.3):
1223 + - fix: less confusing log message ([libp2p/go-reuseport-transport#22](https://github.com/libp2p/go-reuseport-transport/pull/22))
1224 + - readme: replace IPFS contrib links with libp2p ([libp2p/go-reuseport-transport#16](https://github.com/libp2p/go-reuseport-transport/pull/16))
1225 + - replace gx instructions with note about gomod ([libp2p/go-reuseport-transport#15](https://github.com/libp2p/go-reuseport-transport/pull/15))
1226 +- github.com/libp2p/go-tcp-transport (v0.0.4 -> v0.2.0):
1227 + - fix: don't allow dialing DNS addresses ([libp2p/go-tcp-transport#61](https://github.com/libp2p/go-tcp-transport/pull/61))
1228 + - Use new constructor for insecure transport in tests ([libp2p/go-tcp-transport#42](https://github.com/libp2p/go-tcp-transport/pull/42))
1229 + - readme: add install, usage & addressing info ([libp2p/go-tcp-transport#41](https://github.com/libp2p/go-tcp-transport/pull/41))
1230 +- github.com/libp2p/go-ws-transport (v0.0.6 -> v0.3.1):
1231 + - fix: add read/write locks ([libp2p/go-ws-transport#85](https://github.com/libp2p/go-ws-transport/pull/85))
1232 + - fix: restrict dials to IP + TCP ([libp2p/go-ws-transport#84](https://github.com/libp2p/go-ws-transport/pull/84))
1233 + - Revert "add mutex for write/close" ([libp2p/go-ws-transport#73](https://github.com/libp2p/go-ws-transport/pull/73))
1234 + - feat: faster copy in wasm ([libp2p/go-ws-transport#68](https://github.com/libp2p/go-ws-transport/pull/68))
1235 + - Add WebAssembly support and the ability to Dial from browsers ([libp2p/go-ws-transport#55](https://github.com/libp2p/go-ws-transport/pull/55))
1236 + - fix: close gracefully ([libp2p/go-ws-transport#54](https://github.com/libp2p/go-ws-transport/pull/54))
1237 + - move multiaddr protocol definitions to go-multiaddr ([libp2p/go-ws-transport#52](https://github.com/libp2p/go-ws-transport/pull/52))
1238 + - Add install, usage & addressing info to README ([libp2p/go-ws-transport#49](https://github.com/libp2p/go-ws-transport/pull/49))
1239 +- github.com/libp2p/go-yamux (v1.2.3 -> v1.3.5):
1240 + - fix: synchronize when resetting the keepalive timer ([libp2p/go-yamux#21](https://github.com/libp2p/go-yamux/pull/21))
1241 + - fix: don't keepalive when the connection is busy ([libp2p/go-yamux#16](https://github.com/libp2p/go-yamux/pull/16))
1242 + - Rename errors ([libp2p/go-yamux#14](https://github.com/libp2p/go-yamux/pull/14))
1243 + - fix(stream): set writeDeadline when cleanup and forceClose ([libp2p/go-yamux#12](https://github.com/libp2p/go-yamux/pull/12))
1244 + - fixes a stream deadlock multiple ways ([libp2p/go-yamux#8](https://github.com/libp2p/go-yamux/pull/8))
1245 +
1246 +### Contributors
1247 +
1248 +| Contributor | Commits | Lines ± | Files Changed |
1249 +|----------------------------|---------|---------------|---------------|
1250 +| Steven Allen | 858 | +27833/-15919 | 1906 |
1251 +| Dirk McCormick | 134 | +18058/-8347 | 282 |
1252 +| Aarsh Shah | 83 | +13458/-11883 | 241 |
1253 +| Adin Schmahmann | 144 | +11878/-6236 | 397 |
1254 +| Raúl Kripalani | 94 | +6894/-10214 | 598 |
1255 +| vyzo | 60 | +8923/-1160 | 102 |
1256 +| Will Scott | 79 | +3776/-1467 | 175 |
1257 +| Michael Muré | 29 | +1734/-3290 | 104 |
1258 +| dependabot[bot] | 365 | +3419/-361 | 728 |
1259 +| Hector Sanjuan | 64 | +2053/-1321 | 132 |
1260 +| Marten Seemann | 52 | +1922/-1268 | 147 |
1261 +| Michael Avila | 29 | +828/-1733 | 70 |
1262 +| Peter Rabbitson | 53 | +1073/-1197 | 100 |
1263 +| Yusef Napora | 36 | +1610/-378 | 57 |
1264 +| hannahhoward | 16 | +1342/-559 | 61 |
1265 +| Łukasz Magiera | 9 | +277/-1623 | 41 |
1266 +| Marcin Rataj | 9 | +1686/-99 | 32 |
1267 +| Will | 7 | +936/-709 | 34 |
1268 +| Alex Browne | 27 | +1019/-503 | 46 |
1269 +| David Dias | 30 | +987/-431 | 43 |
1270 +| Jakub Sztandera | 43 | +912/-436 | 77 |
1271 +| Cole Brown | 21 | +646/-398 | 57 |
1272 +| Oli Evans | 29 | +488/-466 | 43 |
1273 +| Cornelius Toole | 3 | +827/-60 | 20 |
1274 +| Hlib | 15 | +331/-185 | 28 |
1275 +| Adrian Lanzafame | 9 | +123/-334 | 18 |
1276 +| Petar Maymounkov | 1 | +385/-48 | 5 |
1277 +| Alan Shaw | 18 | +262/-146 | 35 |
1278 +| lnykww | 1 | +303/-52 | 6 |
1279 +| Hannah Howard | 1 | +198/-27 | 3 |
1280 +| Dominic Della Valle | 9 | +163/-52 | 14 |
1281 +| Adam Uhlir | 1 | +211/-2 | 3 |
1282 +| Dimitris Apostolou | 1 | +105/-105 | 64 |
1283 +| Frrist | 1 | +186/-18 | 5 |
1284 +| Henrique Dias | 22 | +119/-28 | 22 |
1285 +| Gergely Tabiczky | 5 | +74/-60 | 7 |
1286 +| Matt Joiner | 2 | +63/-62 | 4 |
1287 +| @RubenKelevra | 12 | +46/-55 | 12 |
1288 +| whyrusleeping | 6 | +87/-11 | 7 |
1289 +| deepakgarg | 4 | +42/-43 | 4 |
1290 +| protolambda | 2 | +49/-17 | 9 |
1291 +| hucg | 2 | +47/-11 | 3 |
1292 +| Arber Avdullahu | 3 | +31/-27 | 3 |
1293 +| Sameer Puri | 1 | +46/-4 | 2 |
1294 +| Hucg | 3 | +17/-33 | 3 |
1295 +| Guilhem Fanton | 2 | +29/-10 | 7 |
1296 +| Christian Muehlhaeuser | 6 | +20/-19 | 14 |
1297 +| Djalil Dreamski | 3 | +27/-9 | 3 |
1298 +| Caian | 2 | +36/-0 | 2 |
1299 +| Topper Bowers | 2 | +31/-4 | 4 |
1300 +| flowed | 1 | +16/-16 | 11 |
1301 +| Vibhav Pant | 4 | +21/-10 | 5 |
1302 +| frrist | 1 | +26/-4 | 1 |
1303 +| Hlib Kanunnikov | 1 | +25/-3 | 1 |
1304 +| george xie | 3 | +12/-15 | 11 |
1305 +| optman | 1 | +13/-9 | 1 |
1306 +| Roman Proskuryakov | 1 | +11/-11 | 2 |
1307 +| Vasco Santos | 1 | +10/-10 | 5 |
1308 +| Pretty Please Mark Darkly | 2 | +16/-2 | 2 |
1309 +| Piotr Dyraga | 2 | +15/-2 | 2 |
1310 +| Andrew Nesbitt | 1 | +5/-11 | 5 |
1311 +| postables | 4 | +19/-8 | 4 |
1312 +| Jim McDonald | 2 | +13/-1 | 2 |
1313 +| PoorPockets McNewHold | 1 | +12/-0 | 1 |
1314 +| Henri S | 1 | +6/-6 | 1 |
1315 +| Igor Velkov | 1 | +8/-3 | 1 |
1316 +| swedneck | 4 | +7/-3 | 4 |
1317 +| Devin | 2 | +5/-5 | 4 |
1318 +| iulianpascalau | 1 | +5/-3 | 2 |
1319 +| MollyM | 3 | +7/-1 | 3 |
1320 +| Jorropo | 2 | +5/-3 | 3 |
1321 +| lukesolo | 1 | +6/-1 | 2 |
1322 +| Wes Morgan | 1 | +3/-3 | 1 |
1323 +| Kishan Mohanbhai Sagathiya | 1 | +3/-3 | 2 |
1324 +| songjiayang | 1 | +4/-0 | 1 |
1325 +| Terry Ding | 1 | +2/-2 | 1 |
1326 +| Preston Van Loon | 2 | +3/-1 | 2 |
1327 +| Jim Pick | 2 | +2/-2 | 2 |
1328 +| Jakub Kaczmarzyk | 1 | +2/-2 | 1 |
1329 +| Simon Menke | 2 | +2/-1 | 2 |
1330 +| Jessica Schilling | 2 | +1/-2 | 2 |
1331 +| Edgar Aroutiounian | 1 | +2/-1 | 1 |
1332 +| hikerpig | 1 | +1/-1 | 1 |
1333 +| ZenGround0 | 1 | +1/-1 | 1 |
1334 +| Thomas Preindl | 1 | +1/-1 | 1 |
1335 +| Sander Pick | 1 | +1/-1 | 1 |
1336 +| Ronsor | 1 | +1/-1 | 1 |
1337 +| Roman Khafizianov | 1 | +1/-1 | 1 |
1338 +| Rod Vagg | 1 | +1/-1 | 1 |
1339 +| Max Inden | 1 | +1/-1 | 1 |
1340 +| Leo Arias | 1 | +1/-1 | 1 |
1341 +| Kuro1 | 1 | +1/-1 | 1 |
1342 +| Kirill Goncharov | 1 | +1/-1 | 1 |
1343 +| John B Nelson | 1 | +1/-1 | 1 |
1344 +| George Masgras | 1 | +1/-1 | 1 |
1345 +| Aliabbas Merchant | 1 | +1/-1 | 1 |
1346 +| Lorenzo Setale | 1 | +1/-0 | 1 |
1347 +| Boris Mann | 1 | +1/-0 | 1 |
1348
1349 ## 0.4.23 2020-01-29
1350
@@ -353,7 +1372,7 @@ This release fixes that bug, among many other issues. Users that _don't_ upgrade
1372 * Improved peer usefulness tracking in bitswap. Frequently used peers will be marked as "important" and the connection manager will avoid closing connections to these peers.
1373 * Includes a new version of the WebUI to fix some issues with the peers map.
1374
356 -## Changelog
1375 +### Changelog
1376
1377 - github.com/ipfs/go-ipfs:
1378 - feat: update the webui to fix some performance issues ([ipfs/go-ipfs#6844](https://github.com/ipfs/go-ipfs/pull/6844))
docs/plugins.md
+28
@@ -57,6 +57,34 @@ and modify all internal state. Use this plugin type to extend go-ipfs in
57 arbitrary ways. However, be aware that your plugin will likely break every time
58 go-ipfs updated.
59
60 +## Configuration
61 +
62 +Plugins can be configured in the `Plugins` section of the config file. Here,
63 +plugins can be:
64 +
65 +1. Passed an arbitrary config object via the `Config` field.
66 +2. Disabled via the `Disabled` field.
67 +
68 +Example:
69 +
70 +```js
71 +{
72 + // ...
73 + "Plugins": {
74 + "Plugins": {
75 + // plugin named "plugin-foo"
76 + "plugin-foo": {
77 + "Config": { /* arbitrary json */ }
78 + },
79 + // plugin named "plugin-bar"
80 + "plugin-bar": {
81 + "Disabled": true // "plugin-bar" will not be loaded
82 + }
83 + }
84 + }
85 +}
86 +```
87 +
88 ## Available Plugins
89
90 | Name | Type | Preloaded | Description |
version.go
+1 -1
@@ -4,7 +4,7 @@ package ipfs
4 var CurrentCommit string
5
6 // CurrentVersionNumber is the current application's version literal
7 -const CurrentVersionNumber = "0.5.0-rc4"
7 +const CurrentVersionNumber = "0.5.0"
8
9 const ApiVersion = "/go-ipfs/" + CurrentVersionNumber + "/"
10