@cryptotaxi247 / kubo / commits / a22b62282

CHANGELOG: 0.4.20

License: MIT Signed-off-by: Steven Allen <steven@stebalien.com>

Steven Allen committed Apr 15, 2019 at 21:45 UTC a22b6228220f6da7c89c05ecd1601afcb70232c8
1 file changed +481 -2
CHANGELOG.md
+481 -2
@@ -1,8 +1,487 @@
1 # go-ipfs changelog
2
3 -## 0.4.20-rc2 2019-04-11
3 +## 0.4.20 2019-04-16
4
5 -TODO
5 +We're happy to release go-ipfs 0.4.20. This release includes some critical
6 +performance and stability fixes so all users should upgrade ASAP.
7 +
8 +This is also the first release to use go modules instead of GX. While GX has
9 +been a great way to dogfood an IPFS-based package manager, building and
10 +maintaining a custom package manager is a _lot_ of work and we haven't been able
11 +to dedicate enough time to bring the user experience of gx to an acceptable
12 +level. You can read [#5850](https://github.com/ipfs/go-ipfs/issues/5850) for
13 +some discussion on this matter.
14 +
15 +### Docker
16 +
17 +As of this release, it's now much easier to run arbitrary IPFS commands within
18 +the docker container:
19 +
20 +```bash
21 +> docker run ipfs/go-ipfs config profile apply server # apply the server profile
22 +> docker run ipfs/go-ipfs # start the daemon
23 +```
24 +
25 +This release also [reverts](https://github.com/ipfs/go-ipfs/pull/6040) a change that
26 +caused some significant trouble in 0.4.19. If you've been running into Docker
27 +permission errors in 0.4.19, please upgrade.
28 +
29 +### WebUI
30 +
31 +This release contains a major
32 +[WebUI](https://github.com/ipfs-shipyard/ipfs-webui) release with some
33 +significant improvements to the file browser and new opt-in, privately hosted,
34 +anonymous usage analytics.
35 +
36 +### Commands
37 +
38 +As usual, we've made several changes and improvements to our commands. The most
39 +notable changes are listed in this section.
40 +
41 +#### New: `ipfs version deps`
42 +
43 +This release includes a new command, `ipfs version deps`, to list all
44 +dependencies (with versions) of the current go-ipfs build. This should make it
45 +easy to tell exactly how go-ipfs was built when tracking down issues.
46 +
47 +#### New: `ipfs add URL`
48 +
49 +The `ipfs add` command has gained support for URLs. This means you can:
50 +
51 +1. Add files with `ipfs add URL` instead of downloading the file first.
52 +2. Replace all uses of the `ipfs urlstore` command with a call to `ipfs add
53 + --nocopy`. The `ipfs urlstore` command will be deprecated in a future
54 + release.
55 +
56 +
57 +#### Changed: `ipfs swarm connect`
58 +
59 +The `ipfs swarm connect` command has a few new features:
60 +
61 +It now marks the newly created connection as "important". This should ensure
62 +that the connection manager won't come along later and close the connection if
63 +it doesn't think it's being used.
64 +
65 +It can now resolve `/dnsaddr` addresses that _don't_ end in a peer ID. For
66 +example, you can now run `ipfs swarm connect /dnsaddr/bootstrap.libp2p.io` to
67 +connect to one of the bootstrap peers at random. NOTE: This is could connect you
68 +to an _arbitrary_ peer as DNS is not secure (by default). Please do not rely on
69 +this except for testing or unless you know what you're doing.
70 +
71 +Finally, `ipfs swarm connect` now returns _all_ errors on failure. This should
72 +make it much easier to debug connectivity issues. For example, one might see an
73 +error like:
74 +
75 +```
76 +Error: connect QmYou failure: dial attempt failed: 6 errors occurred:
77 + * <peer.ID Qm*Me> --> <peer.ID Qm*You> (/ip4/127.0.0.1/tcp/4001) dial attempt failed: dial tcp4 127.0.0.1:4001: connect: connection refused
78 + * <peer.ID Qm*Me> --> <peer.ID Qm*You> (/ip6/::1/tcp/4001) dial attempt failed: dial tcp6 [::1]:4001: connect: connection refused
79 + * <peer.ID Qm*Me> --> <peer.ID Qm*You> (/ip6/2604::1/tcp/4001) dial attempt failed: dial tcp6 [2604::1]:4001: connect: network is unreachable
80 + * <peer.ID Qm*Me> --> <peer.ID Qm*You> (/ip6/2602::1/tcp/4001) dial attempt failed: dial tcp6 [2602::1]:4001: connect: network is unreachable
81 + * <peer.ID Qm*Me> --> <peer.ID Qm*You> (/ip4/150.0.1.2/tcp/4001) dial attempt failed: dial tcp4 0.0.0.0:4001->150.0.1.2:4001: i/o timeout
82 + * <peer.ID Qm*Me> --> <peer.ID Qm*You> (/ip4/200.0.1.2/tcp/4001) dial attempt failed: dial tcp4 0.0.0.0:4001->200.0.1.2:4001: i/o timeout
83 +```
84 +
85 +#### Changed: `ipfs bitswap stat`
86 +
87 +`ipfs bitswap stat` no longer lists bitswap partners unless the `-v` flag is
88 +passed. That is, it will now return:
89 +
90 +```
91 +> ipfs bitswap stat
92 +bitswap status
93 + provides buffer: 0 / 256
94 + blocks received: 0
95 + blocks sent: 79
96 + data received: 0
97 + data sent: 672706
98 + dup blocks received: 0
99 + dup data received: 0 B
100 + wantlist [0 keys]
101 + partners [197]
102 +```
103 +
104 +Instead of:
105 +
106 +```
107 +> ipfs bitswap stat -v
108 +bitswap status
109 + provides buffer: 0 / 256
110 + blocks received: 0
111 + blocks sent: 79
112 + data received: 0
113 + data sent: 672706
114 + dup blocks received: 0
115 + dup data received: 0 B
116 + wantlist [0 keys]
117 + partners [203]
118 + QmNQTTTRCDpCYCiiu6TYWCqEa7ShAUo9jrZJvWngfSu1mL
119 + QmNWaxbqERvdcgoWpqAhDMrbK2gKi3SMGk3LUEvfcqZcf4
120 + QmNgSVpgZVEd41pBX6DyCaHRof8UmUJLqQ3XH2qNL9xLvN
121 + ... omitting 200 lines ...
122 +```
123 +
124 +#### Changed: `ipfs repo stat --human`
125 +
126 +The `--human` flag in the `ipfs repo stat` command now intelligently picks a
127 +size unit instead of always using MiB.
128 +
129 +#### Changed: `ipfs resolve` (`ipfs dns`, `ipfs name resolve`)
130 +
131 +All of the resolve commands now:
132 +
133 +1. Resolve _recursively_ (up to 32 steps) by default to better match user
134 + expectations (these commands used to be non-recursive by default). To turn
135 + recursion off, pass `-r false`.
136 +2. When resolving non-recursively, these commands no longer fail when partially
137 + resolving a name. Instead, they simply return the intermediate result.
138 +
139 +#### Changed: `ipfs files flush`
140 +
141 +The `ipfs files flush` command now returns the CID of the flushed file.
142 +
143 +### Performance And Reliability
144 +
145 +This release has the usual collection of performance and reliability
146 +improvements.
147 +
148 +#### Badger Memory Usage
149 +
150 +Those of you using the badger datastore should notice reduced memory usage in
151 +this release due to some upstream changes. Badger still uses significantly more
152 +memory than the default datastore configuration but this will hopefully continue
153 +to improve.
154 +
155 +#### Bitswap
156 +
157 +We fixed some critical CPU utilization regressions in bitswap for this release.
158 +If you've been noticing CPU _regressions_ in go-ipfs 0.4.19, especially when
159 +running a public gateway, upgrading to 0.4.20 will likely fix them.
160 +
161 +#### Relays
162 +
163 +After AutoRelay was introduced in go-ipfs 0.4.19, the number of peers connecting
164 +through relays ski-rocketed to over 120K concurrent peers. This highlighted some
165 +performance issues that we've now fixed in this release. Specifically:
166 +
167 +* We've significantly reduced the amount of memory allocated per-peer.
168 +* We've fixed a bug where relays might, in rare cases, try to actively dial a
169 + peer to relay traffic. By default, relays only forward traffic between peers
170 + already connected to the relay.
171 +* We've fixed quite a number of performance issues that only show up when
172 + rapidly forming new connections. This will actually help _all_ nodes but will
173 + especially help relays.
174 +
175 +If you've enabled relays in go-ipfs 0.4.19 and it hasn't burned down your
176 +machine yet, this release should improve things significantly. However, relays
177 +are still under heavy load so running an open relay will continue to be resource
178 +intensive.
179 +
180 +We're continuing to investigate this issue and have a few more patches on the
181 +way that, unfortunately, won't make it into this release.
182 +
183 +#### Panics
184 +
185 +We've fixed two notable panics in this release:
186 +
187 +* We've fixed a frequent panic in the DHT.
188 +* We've fixed an occasional panic in the experimental QUIC transport.
189 +
190 +### Content Routing
191 +
192 +IPFS announces and finds content by sending and retrieving content routing
193 +("provider") records to and from the DHT. Unfortunately, sending out these
194 +records can be quite resource intensive.
195 +
196 +This release has two changes to alleviate this: a reduced number of initial
197 +provide workers and a persistent provider queue.
198 +
199 +We've reduced the number of parallel initial provide workers (workers that send
200 +out provider records when content is initially added to go-ipfs) from 512 to 6.
201 +Each provide request (currently, due to some issues in our DHT) tries to
202 +establish hundreds of connections, significantly impacting the performance of
203 +go-ipfs and [crashing some
204 +routers](https://github.com/ipfs/go-ipfs/issues/3320).
205 +
206 +We've introduced a new persistent provider queue for files added via `ipfs add`
207 +and `ipfs pin add`. When new directory trees are added to go-ipfs, go-ipfs will
208 +add the root/final CID to this queue. Then, in the background, go-ipfs will walk
209 +the queue, sequentially sending out provider records for each CID.
210 +
211 +This ensures that root CIDs are sent out as soon as possible and are sent even
212 +when files are added when the go-ipfs daemon isn't running.
213 +
214 +By example, let's add a directory tree to go-ipfs:
215 +
216 +```bash
217 +> # We're going to do this in "online" mode first so let's start the daemon.
218 +> ipfs daemon &
219 +...
220 +Daemon is ready
221 +> # Now, we're going to create a directory to add.
222 +> mkdir foo
223 +> for i in {0..1000}; do echo do echo $i > foo/$i; done
224 +> # finally, we're going to add it.
225 +> ipfs add -r foo
226 +added QmUQcSjQx2bg4cSe2rUZyQi6F8QtJFJb74fWL7D784UWf9 foo/0
227 +...
228 +added QmQac2chFyJ24yfG2Dfuqg1P5gipLcgUDuiuYkQ5ExwGap foo/990
229 +added QmQWwz9haeQ5T2QmQeXzqspKdowzYELShBCLzLJjVa2DuV foo/991
230 +added QmQ5D4MtHUN4LTS4n7mgyHyaUukieMMyCfvnzXQAAbgTJm foo/992
231 +added QmZq4n4KRNq3k1ovzxJ4qdQXZSrarfJjnoLYPR3ztHd7EY foo/993
232 +added QmdtrsuVf8Nf1s1MaSjLAd54iNqrn1KN9VoFNgKGnLgjbt foo/994
233 +added QmbstvU9mnW2hsE94WFmw5WbrXdLTu2Sf9kWWSozrSDscL foo/995
234 +added QmXFd7f35gAnmisjfFmfYKkjA3F3TSpvUYB9SXr6tLsdg8 foo/996
235 +added QmV5BxS1YQ9V227Np2Cq124cRrFDAyBXNMqHHa6kpJ9cr6 foo/997
236 +added QmcXsccUtwKeQ1SuYC3YgyFUeYmAR9CXwGGnT3LPeCg5Tx foo/998
237 +added Qmc4mcQcpaNzyDQxQj5SyxwFg9ZYz5XBEeEZAuH4cQirj9 foo/999
238 +added QmXpXzUhcS9edmFBuVafV5wFXKjfXkCQcjAUZsTs7qFf3G foo
239 +```
240 +
241 +In 0.4.19, we would have sent out provider records for files `foo/{0..1000}`
242 +_before_ sending out a provider record for `foo`. If you were ask a friend to
243 +download /ipfs/QmUQcSjQx2bg4cSe2rUZyQi6F8QtJFJb74fWL7D784UWf9, they would
244 +(baring other issues) be able to find it pretty quickly as this is the first CID
245 +you'll have announced to the network. However, if you ask your friend to
246 +download /ipfs/QmXpXzUhcS9edmFBuVafV5wFXKjfXkCQcjAUZsTs7qFf3G/0, they'll have to
247 +wait for you to finish telling the network about every file in `foo` first.
248 +
249 +In 0.4.20, we _immediately_ tell the network about
250 +`QmXpXzUhcS9edmFBuVafV5wFXKjfXkCQcjAUZsTs7qFf3G` (the `foo` directory) as soon
251 +as we finish adding the directory to go-ipfs _without_ waiting to finish
252 +announcing `foo/{0..1000}`. This is especially important in this release
253 +because we've drastically reduced the number of provide workers.
254 +
255 +The second benefit is that this queue is persistent. That means go-ipfs won't
256 +forget to send out this record, even if it was offline when the content was
257 +initially added. NOTE: go-ipfs _does_ continuously _re_-send provider records in
258 +the background twice a day, it just might be a while before it gets around to
259 +sending one out any specific one.
260 +
261 +### Bitswap
262 +
263 +Bitswap now periodically re-sends its wantlist to connected peers. This should
264 +help work around some race conditions we've seen in bitswap where one node wants
265 +a block but the other doesn't know for some reason.
266 +
267 +You can track this issue here: https://github.com/ipfs/go-ipfs/issues/5183.
268 +
269 +### Improved NAT Traversal
270 +
271 +While NATs are still p2p enemy #1, this release includes slightly improved
272 +support for traversing them.
273 +
274 +Specifically, this release now:
275 +
276 +1. Better detects the "gateway" NAT, even when multiple devices on the network
277 + _claim_ to be NATs.
278 +2. Better guesses the external IP address when port mapping, even when the
279 + gateway lies.
280 +
281 +### Reduced AutoRelay Boot Time
282 +
283 +The experimental AutoRelay feature can now detect NATs _much_ faster as we've
284 +reduced initial NAT detection delay to 15 seconds. There's still room for
285 +improvement but this should make nodes that have enabled this feature dialable
286 +earlier on start.
287 +
288 +### Changelogs
289 +
290 +- github.com/ipfs/go-ipfs:
291 + - gitattributes: avoid normalizing known binary files ([ipfs/go-ipfs#6209](https://github.com/ipfs/go-ipfs/pull/6209))
292 + - gitattributes: default to LF ([ipfs/go-ipfs#6198](https://github.com/ipfs/go-ipfs/pull/6198))
293 + - Fix level db panic ([ipfs/go-ipfs#6186](https://github.com/ipfs/go-ipfs/pull/6186))
294 + - Dockerfile: Remove 2 year old deprecation warning ([ipfs/go-ipfs#6188](https://github.com/ipfs/go-ipfs/pull/6188))
295 + - align output for the command ipfs object stat ([ipfs/go-ipfs#6189](https://github.com/ipfs/go-ipfs/pull/6189))
296 + - provider queue: don't repeatedly retry the same item if we fail ([ipfs/go-ipfs#6187](https://github.com/ipfs/go-ipfs/pull/6187))
297 + - test: remove version/deps from ro commands test ([ipfs/go-ipfs#6185](https://github.com/ipfs/go-ipfs/pull/6185))
298 + - feat: add version deps command [modversion] ([ipfs/go-ipfs#6115](https://github.com/ipfs/go-ipfs/pull/6115))
299 + - readme: update for go modules ([ipfs/go-ipfs#6180](https://github.com/ipfs/go-ipfs/pull/6180))
300 + - Switch to Go 1.12 ([ipfs/go-ipfs#6144](https://github.com/ipfs/go-ipfs/pull/6144))
301 + - ci: avoid interleaving output from different sharness tests ([ipfs/go-ipfs#6175](https://github.com/ipfs/go-ipfs/pull/6175))
302 + - fix two bugs where the repo may not properly be closed ([ipfs/go-ipfs#6176](https://github.com/ipfs/go-ipfs/pull/6176))
303 + - fix error check in swarm connect ([ipfs/go-ipfs#6174](https://github.com/ipfs/go-ipfs/pull/6174))
304 + - feat(coreapi): tag all explicit connect requests in the connection manager ([ipfs/go-ipfs#6171](https://github.com/ipfs/go-ipfs/pull/6171))
305 + - chore: remove CODEOWNERS ([ipfs/go-ipfs#6172](https://github.com/ipfs/go-ipfs/pull/6172))
306 + - feat: update to IPFS Web UI 2.4.4 ([ipfs/go-ipfs#6169](https://github.com/ipfs/go-ipfs/pull/6169))
307 + - fix add error handling ([ipfs/go-ipfs#6156](https://github.com/ipfs/go-ipfs/pull/6156))
308 + - chore: remove waffle ([ipfs/go-ipfs#6157](https://github.com/ipfs/go-ipfs/pull/6157))
309 + - chore: fix a bunch of issues caught by golangci-lint ([ipfs/go-ipfs#6140](https://github.com/ipfs/go-ipfs/pull/6140))
310 + - docs/experimental-features.md: link to ipfs-ds-convert ([ipfs/go-ipfs#6154](https://github.com/ipfs/go-ipfs/pull/6154))
311 + - interrupt: fix send on closed ([ipfs/go-ipfs#6147](https://github.com/ipfs/go-ipfs/pull/6147))
312 + - docs: document Gateway.Writable not Gateway.Writeable ([ipfs/go-ipfs#6151](https://github.com/ipfs/go-ipfs/pull/6151))
313 + - Fuse fixes ([ipfs/go-ipfs#6135](https://github.com/ipfs/go-ipfs/pull/6135))
314 + - Remove duplicate blockstore from the package list ([ipfs/go-ipfs#6138](https://github.com/ipfs/go-ipfs/pull/6138))
315 + - Query for provider head/tail ([ipfs/go-ipfs#6125](https://github.com/ipfs/go-ipfs/pull/6125))
316 + - Remove dead link from ISSUE_TEMPLATE.md ([ipfs/go-ipfs#6128](https://github.com/ipfs/go-ipfs/pull/6128))
317 + - coreapi: remove Unixfs.Wrap ([ipfs/go-ipfs#6123](https://github.com/ipfs/go-ipfs/pull/6123))
318 + - coreapi unixfs: change Wrap logic to make more sense ([ipfs/go-ipfs#6019](https://github.com/ipfs/go-ipfs/pull/6019))
319 + - deps: switch back to jbenet go-is-domain ([ipfs/go-ipfs#6119](https://github.com/ipfs/go-ipfs/pull/6119))
320 + - command repo stat: add human flag tests to t0080-repo.sh ([ipfs/go-ipfs#6116](https://github.com/ipfs/go-ipfs/pull/6116))
321 + - gc: fix a potential deadlock ([ipfs/go-ipfs#6112](https://github.com/ipfs/go-ipfs/pull/6112))
322 + - fix config options in osxfuse error messages ([ipfs/go-ipfs#6105](https://github.com/ipfs/go-ipfs/pull/6105))
323 + - Command repo stat: improve human flag behavior ([ipfs/go-ipfs#6106](https://github.com/ipfs/go-ipfs/pull/6106))
324 + - Provide root node immediately on add and pin add ([ipfs/go-ipfs#6068](https://github.com/ipfs/go-ipfs/pull/6068))
325 + - gomod: Update Dockerfile, remove Dockerfile.fast ([ipfs/go-ipfs#6100](https://github.com/ipfs/go-ipfs/pull/6100))
326 + - Return CID from 'ipfs files flush' ([ipfs/go-ipfs#6102](https://github.com/ipfs/go-ipfs/pull/6102))
327 + - resolve: fix recursion ([ipfs/go-ipfs#6087](https://github.com/ipfs/go-ipfs/pull/6087))
328 + - fix(swarm): add dnsaddr support in swarm connect ([ipfs/go-ipfs#5535](https://github.com/ipfs/go-ipfs/pull/5535))
329 + - make in-memory datastore thread-safe ([ipfs/go-ipfs#6085](https://github.com/ipfs/go-ipfs/pull/6085))
330 + - Update package table to remove broken jenkins links ([ipfs/go-ipfs#6084](https://github.com/ipfs/go-ipfs/pull/6084))
331 + - mk: fix maketarball to work with gomod ([ipfs/go-ipfs#6078](https://github.com/ipfs/go-ipfs/pull/6078))
332 + - fix ls command to use the new coreinterface types ([ipfs/go-ipfs#6051](https://github.com/ipfs/go-ipfs/pull/6051))
333 + - mk: remove install_unsupported, leave a note ([ipfs/go-ipfs#6063](https://github.com/ipfs/go-ipfs/pull/6063))
334 + - mk: change git-hash command to include information about modifications ([ipfs/go-ipfs#6060](https://github.com/ipfs/go-ipfs/pull/6060))
335 + - mk: fix make install by not setting GOBIN ([ipfs/go-ipfs#6059](https://github.com/ipfs/go-ipfs/pull/6059))
336 + - go: require Golang 1.11.4 ([ipfs/go-ipfs#6057](https://github.com/ipfs/go-ipfs/pull/6057))
337 + - yamux: increase yamux window size to 8MiB. ([ipfs/go-ipfs#6049](https://github.com/ipfs/go-ipfs/pull/6049))
338 + - Introduce go modules [yey] ([ipfs/go-ipfs#6038](https://github.com/ipfs/go-ipfs/pull/6038))
339 + - cleanup daemon online logic ([ipfs/go-ipfs#6050](https://github.com/ipfs/go-ipfs/pull/6050))
340 + - ci: test on 32bit os ([ipfs/go-ipfs#5429](https://github.com/ipfs/go-ipfs/pull/5429))
341 + - feat/cmds: hide peers info default in bitswap stat ([ipfs/go-ipfs#5820](https://github.com/ipfs/go-ipfs/pull/5820))
342 + - Improve CLI help pages ([ipfs/go-ipfs#6013](https://github.com/ipfs/go-ipfs/pull/6013))
343 + - Close #6044 ([ipfs/go-ipfs#6045](https://github.com/ipfs/go-ipfs/pull/6045))
344 + - commands(dht): return final error ([ipfs/go-ipfs#6034](https://github.com/ipfs/go-ipfs/pull/6034))
345 + - Revert "Really run as non-root user in docker container" ([ipfs/go-ipfs#6040](https://github.com/ipfs/go-ipfs/pull/6040))
346 +- github.com/ipfs/go-bitswap:
347 + - feat(messagequeue): rebroadcast wantlist ([ipfs/go-bitswap#106](https://github.com/ipfs/go-bitswap/pull/106))
348 + - reduce provide workers to 6 ([ipfs/go-bitswap#93](https://github.com/ipfs/go-bitswap/pull/93))
349 + - Reduce memory allocation ([ipfs/go-bitswap#103](https://github.com/ipfs/go-bitswap/pull/103))
350 + - refactor(messagequeue): remove dead code ([ipfs/go-bitswap#98](https://github.com/ipfs/go-bitswap/pull/98))
351 + - fix: limit use of custom context type ([ipfs/go-bitswap#89](https://github.com/ipfs/go-bitswap/pull/89))
352 + - fix: remove non-error log message ([ipfs/go-bitswap#91](https://github.com/ipfs/go-bitswap/pull/91))
353 + - fix(messagequeue): Remove second run loop ([ipfs/go-bitswap#94](https://github.com/ipfs/go-bitswap/pull/94))
354 +- github.com/ipfs/go-blockservice:
355 + - Revert "Remove verifcid as it is handled in go-cid" ([ipfs/go-blockservice#25](https://github.com/ipfs/go-blockservice/pull/25))
356 + - Remove verifcid as it is handled in go-cid ([ipfs/go-blockservice#23](https://github.com/ipfs/go-blockservice/pull/23))
357 +- github.com/ipfs/go-datastore:
358 + - cleanup and optimize naive query filters ([ipfs/go-datastore#125](https://github.com/ipfs/go-datastore/pull/125))
359 + - Fix – sorted limited offset mount queries ([ipfs/go-datastore#124](https://github.com/ipfs/go-datastore/pull/124))
360 + - Fix function comments based on best practices from Effective Go ([ipfs/go-datastore#122](https://github.com/ipfs/go-datastore/pull/122))
361 + - remove ThreadSafeDatastore ([ipfs/go-datastore#120](https://github.com/ipfs/go-datastore/pull/120))
362 + - Splinter TTLDatastore interface into TTL + Datastore ([ipfs/go-datastore#118](https://github.com/ipfs/go-datastore/pull/118))
363 +- github.com/ipfs/go-ds-badger:
364 + - tweak the default options ([ipfs/go-ds-badger#52](https://github.com/ipfs/go-ds-badger/pull/52))
365 + - remove thread-safe assertion ([ipfs/go-ds-badger#55](https://github.com/ipfs/go-ds-badger/pull/55))
366 + - make memory-safe against concurrent closure/operations ([ipfs/go-ds-badger#53](https://github.com/ipfs/go-ds-badger/pull/53))
367 + - make badger use our logging framework ([ipfs/go-ds-badger#50](https://github.com/ipfs/go-ds-badger/pull/50))
368 +- github.com/ipfs/go-ds-flatfs:
369 + - remove thread-safe assertion ([ipfs/go-ds-flatfs#53](https://github.com/ipfs/go-ds-flatfs/pull/53))
370 +- github.com/ipfs/go-ds-leveldb:
371 + - Fast reverse query ([ipfs/go-ds-leveldb#28](https://github.com/ipfs/go-ds-leveldb/pull/28))
372 + - remove thread-safe assertion ([ipfs/go-ds-leveldb#27](https://github.com/ipfs/go-ds-leveldb/pull/27))
373 +- github.com/ipfs/go-ipfs-cmdkit:
374 + - Extract files package ([ipfs/go-ipfs-cmdkit#31](https://github.com/ipfs/go-ipfs-cmdkit/pull/31))
375 +- github.com/ipfs/go-ipfs-cmds:
376 + - sync: add yet another sync error ([ipfs/go-ipfs-cmds#161](https://github.com/ipfs/go-ipfs-cmds/pull/161))
377 + - Removed broken link from readme ([ipfs/go-ipfs-cmds#159](https://github.com/ipfs/go-ipfs-cmds/pull/159))
378 + - Fix broken link in readme ([ipfs/go-ipfs-cmds#160](https://github.com/ipfs/go-ipfs-cmds/pull/160))
379 + - set WebFile fpath to URL base ([ipfs/go-ipfs-cmds#158](https://github.com/ipfs/go-ipfs-cmds/pull/158))
380 + - Handle stdin name in cli/parse ([ipfs/go-ipfs-cmds#157](https://github.com/ipfs/go-ipfs-cmds/pull/157))
381 + - support url paths as files.WebFile ([ipfs/go-ipfs-cmds#154](https://github.com/ipfs/go-ipfs-cmds/pull/154))
382 + - typed encoder: improve pointer reflection ([ipfs/go-ipfs-cmds#155](https://github.com/ipfs/go-ipfs-cmds/pull/155))
383 + - cli: don't sync output to NUL on Windows ([ipfs/go-ipfs-cmds#153](https://github.com/ipfs/go-ipfs-cmds/pull/153))
384 +- github.com/ipfs/go-ipfs-files:
385 + - return url as AbsPath from WebFile to implement FileInfo ([ipfs/go-ipfs-files#13](https://github.com/ipfs/go-ipfs-files/pull/13))
386 + - fix the content disposition header ([ipfs/go-ipfs-files#14](https://github.com/ipfs/go-ipfs-files/pull/14))
387 + - go format ([ipfs/go-ipfs-files#15](https://github.com/ipfs/go-ipfs-files/pull/15))
388 + - simplify content type checking ([ipfs/go-ipfs-files#9](https://github.com/ipfs/go-ipfs-files/pull/9))
389 + - remove extra webfile test code ([ipfs/go-ipfs-files#12](https://github.com/ipfs/go-ipfs-files/pull/12))
390 +- github.com/ipfs/go-merkledag:
391 + - add function to marshal raw nodes to json ([ipfs/go-merkledag#36](https://github.com/ipfs/go-merkledag/pull/36))
392 + - fix some performance regressions when reading protobuf nodes ([ipfs/go-merkledag#34](https://github.com/ipfs/go-merkledag/pull/34))
393 +- github.com/ipfs/go-metrics-interface:
394 + - update the counter interface to match prometheus ([ipfs/go-metrics-interface#2](https://github.com/ipfs/go-metrics-interface/pull/2))
395 +- github.com/ipfs/go-mfs:
396 + - Return node from FlushPath ([ipfs/go-mfs#72](https://github.com/ipfs/go-mfs/pull/72))
397 + - Wire up context to FlushPath ([ipfs/go-mfs#70](https://github.com/ipfs/go-mfs/pull/70))
398 +- github.com/ipfs/interface-go-ipfs-core:
399 + - don't close the top-level addr ([ipfs/interface-go-ipfs-core#25](https://github.com/ipfs/interface-go-ipfs-core/pull/25))
400 + - fix a bunch of small test "bugs" ([ipfs/interface-go-ipfs-core#24](https://github.com/ipfs/interface-go-ipfs-core/pull/24))
401 + - remove Wrap ([ipfs/interface-go-ipfs-core#21](https://github.com/ipfs/interface-go-ipfs-core/pull/21))
402 + - Unixfs.Wrap Fixes ([ipfs/interface-go-ipfs-core#10](https://github.com/ipfs/interface-go-ipfs-core/pull/10))
403 + - tweak the Ls interface ([ipfs/interface-go-ipfs-core#14](https://github.com/ipfs/interface-go-ipfs-core/pull/14))
404 +- github.com/libp2p/go-buffer-pool:
405 + - Enable tests ([libp2p/go-buffer-pool#6](https://github.com/libp2p/go-buffer-pool/pull/6))
406 +- github.com/libp2p/go-flow-metrics:
407 + - Just repair spelling mistake ([libp2p/go-flow-metrics#3](https://github.com/libp2p/go-flow-metrics/pull/3))
408 +- github.com/libp2p/go-libp2p:
409 + - Deprecate gx in readme & link to workspace repo ([libp2p/go-libp2p#591](https://github.com/libp2p/go-libp2p/pull/591))
410 + - Respect nodial option in routed host ([libp2p/go-libp2p#590](https://github.com/libp2p/go-libp2p/pull/590))
411 + - fix panic in observed address activation check ([libp2p/go-libp2p#586](https://github.com/libp2p/go-libp2p/pull/586))
412 + - Improve observed address handling ([libp2p/go-libp2p#585](https://github.com/libp2p/go-libp2p/pull/585))
413 + - identify: avoid parsing/printing multiaddrs ([libp2p/go-libp2p#583](https://github.com/libp2p/go-libp2p/pull/583))
414 + - move things outside of the lock in obsaddr ([libp2p/go-libp2p#582](https://github.com/libp2p/go-libp2p/pull/582))
415 + - identify: be more careful about the addresses we store ([libp2p/go-libp2p#577](https://github.com/libp2p/go-libp2p/pull/577))
416 + - relay: turn autorelay into a service and always filter out relay addresses ([libp2p/go-libp2p#578](https://github.com/libp2p/go-libp2p/pull/578))
417 + - chore: fail in the libp2p constructor if we fail to store the key ([libp2p/go-libp2p#576](https://github.com/libp2p/go-libp2p/pull/576))
418 + - Fix broken link in README.md ([libp2p/go-libp2p#580](https://github.com/libp2p/go-libp2p/pull/580))
419 + - Link to docs & discuss in readme ([libp2p/go-libp2p#571](https://github.com/libp2p/go-libp2p/pull/571))
420 + - Reduce autorelay boot delay and correctly handle private->public transition ([libp2p/go-libp2p#570](https://github.com/libp2p/go-libp2p/pull/570))
421 + - reduce nat error level ([libp2p/go-libp2p#568](https://github.com/libp2p/go-libp2p/pull/568))
422 + - relay: simplify declaration of multiaddr var ([libp2p/go-libp2p#563](https://github.com/libp2p/go-libp2p/pull/563))
423 + - Fix UDP listen on a Unspecified Address and Dial from the Unspecified Address ([libp2p/go-libp2p#561](https://github.com/libp2p/go-libp2p/pull/561))
424 + - Remove jenkins column from package table ([libp2p/go-libp2p#562](https://github.com/libp2p/go-libp2p/pull/562))
425 + - Fix typos in p2p/net/README.md ([libp2p/go-libp2p#555](https://github.com/libp2p/go-libp2p/pull/555))
426 + - better nat mapping ([libp2p/go-libp2p#549](https://github.com/libp2p/go-libp2p/pull/549))
427 +- github.com/libp2p/go-libp2p-autonat:
428 + - fully close the autonat client stream ([libp2p/go-libp2p-autonat#21](https://github.com/libp2p/go-libp2p-autonat/pull/21))
429 + - parallelize dialbacks ([libp2p/go-libp2p-autonat#20](https://github.com/libp2p/go-libp2p-autonat/pull/20))
430 + - Pacify the race detector ([libp2p/go-libp2p-autonat#17](https://github.com/libp2p/go-libp2p-autonat/pull/17))
431 +- github.com/libp2p/go-libp2p-autonat-svc:
432 + - full close the autonat stream ([libp2p/go-libp2p-autonat-svc#20](https://github.com/libp2p/go-libp2p-autonat-svc/pull/20))
433 + - reduce dialback timeout to 15s ([libp2p/go-libp2p-autonat-svc#17](https://github.com/libp2p/go-libp2p-autonat-svc/pull/17))
434 +- github.com/libp2p/go-libp2p-circuit:
435 + - use buffer pool in newDelimitedReader ([libp2p/go-libp2p-circuit#71](https://github.com/libp2p/go-libp2p-circuit/pull/71))
436 + - Use NoDial option when opening hop streams for non-active relays ([libp2p/go-libp2p-circuit#70](https://github.com/libp2p/go-libp2p-circuit/pull/70))
437 + - use io.CopyBuffer with explicitly allocated buffers ([libp2p/go-libp2p-circuit#69](https://github.com/libp2p/go-libp2p-circuit/pull/69))
438 + - docs and nits ([libp2p/go-libp2p-circuit#66](https://github.com/libp2p/go-libp2p-circuit/pull/66))
439 +- github.com/libp2p/go-libp2p-kad-dht:
440 + - dialQueue: start the control loop later ([libp2p/go-libp2p-kad-dht#312](https://github.com/libp2p/go-libp2p-kad-dht/pull/312))
441 + - make it work in wasm ([libp2p/go-libp2p-kad-dht#310](https://github.com/libp2p/go-libp2p-kad-dht/pull/310))
442 + - Revert "GoModules: Checksum mismatch:" ([libp2p/go-libp2p-kad-dht#309](https://github.com/libp2p/go-libp2p-kad-dht/pull/309))
443 + - defer dialqueue action until initial peers have been added ([libp2p/go-libp2p-kad-dht#301](https://github.com/libp2p/go-libp2p-kad-dht/pull/301))
444 +- github.com/libp2p/go-libp2p-nat:
445 + - switch to libp2p's go-nat fork ([libp2p/go-libp2p-nat#16](https://github.com/libp2p/go-libp2p-nat/pull/16))
446 + - remove all uses of multiaddrs ([libp2p/go-libp2p-nat#14](https://github.com/libp2p/go-libp2p-nat/pull/14))
447 +- github.com/libp2p/go-libp2p-net:
448 + - fix WithNoDial to return the context ([libp2p/go-libp2p-net#43](https://github.com/libp2p/go-libp2p-net/pull/43))
449 + - NoDial context option ([libp2p/go-libp2p-net#42](https://github.com/libp2p/go-libp2p-net/pull/42))
450 +- github.com/libp2p/go-libp2p-peer:
451 + - Let ID implement encoding.Binary[Un]Marshaler and encoding.Text[Un]Marshaler ([libp2p/go-libp2p-peer#44](https://github.com/libp2p/go-libp2p-peer/pull/44))
452 +- github.com/libp2p/go-libp2p-peerstore:
453 + - keep temp addresses for 2 minutes ([libp2p/go-libp2p-peerstore#67](https://github.com/libp2p/go-libp2p-peerstore/pull/67))
454 + - migrate to multiformats/go-base32 ([libp2p/go-libp2p-peerstore#61](https://github.com/libp2p/go-libp2p-peerstore/pull/61))
455 +- github.com/libp2p/go-libp2p-protocol:
456 + - update readme ([libp2p/go-libp2p-protocol#6](https://github.com/libp2p/go-libp2p-protocol/pull/6))
457 + - Enable standard Travis CI tests. ([libp2p/go-libp2p-protocol#5](https://github.com/libp2p/go-libp2p-protocol/pull/5))
458 + - Fix go get address. ([libp2p/go-libp2p-protocol#4](https://github.com/libp2p/go-libp2p-protocol/pull/4))
459 + - Add MIT license ([libp2p/go-libp2p-protocol#3](https://github.com/libp2p/go-libp2p-protocol/pull/3))
460 + - Standardized Readme ([libp2p/go-libp2p-protocol#2](https://github.com/libp2p/go-libp2p-protocol/pull/2))
461 +- github.com/libp2p/go-libp2p-pubsub-router:
462 + - gx publish 0.5.17 ([libp2p/go-libp2p-pubsub-router#26](https://github.com/libp2p/go-libp2p-pubsub-router/pull/26))
463 +- github.com/libp2p/go-libp2p-quic-transport:
464 + - update quic-go to v0.11.0 ([libp2p/go-libp2p-quic-transport#54](https://github.com/libp2p/go-libp2p-quic-transport/pull/54))
465 +- github.com/libp2p/go-libp2p-routing-helpers:
466 + - fix(put): fail if any router fails ([libp2p/go-libp2p-routing-helpers#19](https://github.com/libp2p/go-libp2p-routing-helpers/pull/19))
467 +- github.com/libp2p/go-libp2p-swarm:
468 + - Add context option to disable dialing when opening a new stream ([libp2p/go-libp2p-swarm#116](https://github.com/libp2p/go-libp2p-swarm/pull/116))
469 + - return all dial errors if dial has failed ([libp2p/go-libp2p-swarm#115](https://github.com/libp2p/go-libp2p-swarm/pull/115))
470 + - Differentiate no addresses error from no good addresses ([libp2p/go-libp2p-swarm#113](https://github.com/libp2p/go-libp2p-swarm/pull/113))
471 +- github.com/libp2p/go-libp2p-transport:
472 + - tests: constrain concurrency with race detector. ([libp2p/go-libp2p-transport#47](https://github.com/libp2p/go-libp2p-transport/pull/47))
473 + - pick test timeout from env var if available. ([libp2p/go-libp2p-transport#46](https://github.com/libp2p/go-libp2p-transport/pull/46))
474 + - increase test timeout. ([libp2p/go-libp2p-transport#45](https://github.com/libp2p/go-libp2p-transport/pull/45))
475 +- github.com/libp2p/go-msgio:
476 + - Improve test coverage ([libp2p/go-msgio#10](https://github.com/libp2p/go-msgio/pull/10))
477 +- github.com/libp2p/go-reuseport:
478 + - fix: add wasm build tag to wasm module ([libp2p/go-reuseport#70](https://github.com/libp2p/go-reuseport/pull/70))
479 +- github.com/libp2p/go-reuseport-transport:
480 + - don't set linger to 0 ([libp2p/go-reuseport-transport#14](https://github.com/libp2p/go-reuseport-transport/pull/14))
481 +- github.com/libp2p/go-tcp-transport:
482 + - set linger to 0 for both inbound and outbound connections ([libp2p/go-tcp-transport#36](https://github.com/libp2p/go-tcp-transport/pull/36))
483 +- github.com/libp2p/go-ws-transport:
484 + - modernize request handling ([libp2p/go-ws-transport#41](https://github.com/libp2p/go-ws-transport/pull/41))
485
486 ## 0.4.19 2019-03-01
487