master
md 4,057 lines 284 KB
Rendered Raw
1 # go-ipfs changelog v0.4
2
3 ## v0.4.23 2020-01-29
4
5 Given the large number of fixes merged since 0.4.22, we've decided to cut another patch release.
6
7 This release contains critical fixes. Please upgrade ASAP. Importantly, we're strongly considering switching to TLS by default in go-ipfs 0.5.0 and dropping SECIO support. However, the current TLS transport in go-ipfs 0.4.22 has a bug that can cause connections to spontaneously disconnect during the handshake.
8
9 This release fixes that bug, among many other issues. Users that _don't_ upgrade may experience connectivity issues when the network upgrades to go-ipfs 0.5.0.
10
11 ### Highlights
12
13 * Fixes build on go 1.13
14 * Fixes an issue where we may not connect to providers in bitswap.
15 * Fixes an issue on the TLS transport where we may abort a handshake unintentionally.
16 * Fixes a common panic in the websocket transport.
17 * Adds support for recursively resolving dnsaddrs (makes go-ipfs compatible with the new bootstrappers).
18 * Fixes several potential panics/crashes.
19 * Switches to using pre-defined autorelays instead of trying to find them in the DHT:
20 * Avoids selecting random, potentially poor, relays.
21 * Avoids spamming the DHT with requests trying to find relays.
22 * Reduces the impact of accidentally enabling AutoRelay + RelayHop. I.e., the network won't try to DoS you.
23 * Modifies the connection manager to not count connections in the grace period towards the connection limit.
24 * Pro: New connections don't cause us to close useful, existing connections.
25 * Con: Libp2p will keep more connections. Consider reducing your HighWater after applying this patch.
26 * 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.
27 * Includes a new version of the WebUI to fix some issues with the peers map.
28
29 ### Changelog
30
31 - github.com/ipfs/go-ipfs:
32 - feat: update the webui to fix some performance issues ([ipfs/go-ipfs#6844](https://github.com/ipfs/go-ipfs/pull/6844))
33 - fix: limit SW registration to content root ([ipfs/go-ipfs#6801](https://github.com/ipfs/go-ipfs/pull/6801))
34 - fix issue 6760, adding with hash-only, high CPU usage. ([ipfs/go-ipfs#6764](https://github.com/ipfs/go-ipfs/pull/6764))
35 - fix(coreapi/add): close the fake repo used when adding with hash-only ([ipfs/go-ipfs#6747](https://github.com/ipfs/go-ipfs/pull/6747))
36 - fix bug 6748 ([ipfs/go-ipfs#6754](https://github.com/ipfs/go-ipfs/pull/6754))
37 - fix(pin): wait till after fetching to remove direct pin ([ipfs/go-ipfs#6708](https://github.com/ipfs/go-ipfs/pull/6708))
38 - pin: fix pin update X Y where X==Y ([ipfs/go-ipfs#6669](https://github.com/ipfs/go-ipfs/pull/6669))
39 - namesys: set the correct cache TTL on publish ([ipfs/go-ipfs#6667](https://github.com/ipfs/go-ipfs/pull/6667))
40 - build: fix golangci again ([ipfs/go-ipfs#6641](https://github.com/ipfs/go-ipfs/pull/6641))
41 - make: move all test deps to a separate module ([ipfs/go-ipfs#6637](https://github.com/ipfs/go-ipfs/pull/6637))
42 - fix: close peerstore on stop ([ipfs/go-ipfs#6629](https://github.com/ipfs/go-ipfs/pull/6629))
43 - build: fix build when we don't have a full git tree ([ipfs/go-ipfs#6626](https://github.com/ipfs/go-ipfs/pull/6626))
44 - github.com/ipfs/go-bitswap (v0.0.8-cbb485998356 -> v0.0.8-e37498cf10d6):
45 - fix: wait until we finish connecting before we cancel the context ([ipfs/go-bitswap#226](https://github.com/ipfs/go-bitswap/pull/226))
46 - engine: tag peers based on usefulness ([ipfs/go-bitswap#191](https://github.com/ipfs/go-bitswap/pull/191))
47 - github.com/ipfs/go-cid (v0.0.2 -> v0.0.4):
48 - fix parsing issues and nits ([ipfs/go-cid#97](https://github.com/ipfs/go-cid/pull/97))
49 - Verify that prefix is correct v0 prefix ([ipfs/go-cid#96](https://github.com/ipfs/go-cid/pull/96))
50 - github.com/multiformats/go-multihash (v0.0.5 -> v0.0.10):
51 - Ensure that length of multihash is properly handled ([multiformats/go-multihash#119](https://github.com/multiformats/go-multihash/pull/119))
52 - fix murmur3 name ([multiformats/go-multihash#115](https://github.com/multiformats/go-multihash/pull/115))
53 - rename ID to IDENTITY ([multiformats/go-multihash#113](https://github.com/multiformats/go-multihash/pull/113))
54 ([multiformats/go-multihash#119](https://github.com/multiformats/go-multihash/pull/119))
55 - github.com/libp2p/go-flow-metrics (v0.0.1 -> v0.0.3):
56 - fix bug in meter traversal logic ([libp2p/go-flow-metrics#11](https://github.com/libp2p/go-flow-metrics/pull/11))
57 - github.com/libp2p/go-libp2p (v0.0.28 -> v0.0.32):
58 - options to configure known relays for autorelay ([libp2p/go-libp2p#705](https://github.com/libp2p/go-libp2p/pull/705))
59 - feat(host): recursively resolve addresses ([libp2p/go-libp2p#764](https://github.com/libp2p/go-libp2p/pull/764))
60 - mdns: always use interface addresses ([libp2p/go-libp2p#667](https://github.com/libp2p/go-libp2p/pull/667))
61 - github.com/libp2p/go-libp2p-connmgr (v0.0.6 -> v0.2.1):
62 - don't count connections in the grace period against the limit ([libp2p/go-libp2p-connmgr#50](https://github.com/libp2p/go-libp2p-connmgr/pull/50))
63 - github.com/libp2p/go-libp2p-kad-dht (v0.0.13 -> v0.0.15):
64 - metrics: fix memory leak ([libp2p/go-libp2p-kad-dht#390](https://github.com/libp2p/go-libp2p-kad-dht/pull/390))
65 - github.com/libp2p/go-libp2p-tls (v0.0.1 -> v0.0.2):
66 - close the underlying connection when the handshake fails ([libp2p/go-libp2p-tls#39](https://github.com/libp2p/go-libp2p-tls/pull/39))
67 - make the error check for not receiving a public key more explicit ([libp2p/go-libp2p-tls#34](https://github.com/libp2p/go-libp2p-tls/pull/34))
68 - Fix: Connection Closed after handshake ([libp2p/go-libp2p-tls#37](https://github.com/libp2p/go-libp2p-tls/pull/37))
69 - github.com/libp2p/go-libp2p-swarm (v0.0.6 -> v0.0.7):
70 - fix: don't assume that transports implement stringer ([libp2p/go-libp2p-swarm#134](https://github.com/libp2p/go-libp2p-swarm/pull/134))
71 - github.com/libp2p/go-ws-transport (v0.0.4 -> v0.0.6):
72 - Add mutex for write/close ([libp2p/go-ws-transport#65](https://github.com/libp2p/go-ws-transport/pull/65))
73
74 Other:
75
76 Update bloom filter libraries to remove unsound usage of the `unsafe` package.
77
78 ### Contributors
79
80 | Contributor | Commits | Lines ± | Files Changed |
81 |-------------|---------|---------|---------------|
82 | Steven Allen | 52 | +1866/-578 | 102 |
83 | vyzo | 12 | +167/-90 | 22 |
84 | whyrusleeping | 5 | +136/-52 | 7 |
85 | Roman Proskuryakov | 7 | +94/-7 | 10 |
86 | Jakub Sztandera | 3 | +58/-13 | 7 |
87 | hcg1314 | 2 | +31/-11 | 2 |
88 | Raúl Kripalani | 2 | +7/-33 | 6 |
89 | Marten Seemann | 3 | +27/-10 | 5 |
90 | Marcin Rataj | 2 | +26/-0 | 5 |
91 | b5 | 1 | +2/-22 | 1 |
92 | Hector Sanjuan | 1 | +11/-0 | 1 |
93 | Yusef Napora | 1 | +4/-0 | 1 |
94
95 ## v0.4.22 2019-08-06
96
97 We're releasing a PATCH release of go-ipfs based on 0.4.21 containing some critical fixes.
98
99 The IPFS network has scaled to the point where small changes can have a
100 wide-reaching impact on the entire network. To keep this situation from
101 escalating, we've put a hold on releasing new features until we can improve our
102 [release process](https://github.com/ipfs/go-ipfs/blob/master/docs/releases.md)
103 (which we've trialed in this release) and [testing
104 procedures](https://github.com/ipfs/go-ipfs/issues/6483).
105
106 This release includes fixes for the following regressions:
107
108 1. A major bitswap throughput regression introduced in 0.4.21
109 ([ipfs/go-ipfs#6442](https://github.com/ipfs/go-ipfs/issues/6442)).
110 2. High bitswap CPU usage when connected to many (e.g. 10,000) peers. See
111 [ipfs/go-bitswap#154](https://github.com/ipfs/go-bitswap/issues/154).
112 2. The local network discovery service sometimes initializes before the
113 networking module, causing it to announce the wrong addresses and sometimes
114 complain about not being able to determine the IP address
115 ([ipfs/go-ipfs#6415](https://github.com/ipfs/go-ipfs/pull/6415)).
116
117 It also includes fixes for:
118
119 1. Pins not being persisted after `ipfs block add --pin`
120 ([ipfs/go-ipfs#6441](https://github.com/ipfs/go-ipfs/pull/6441)).
121 2. Panic due to concurrent map access when adding and listing pins at the same
122 time ([ipfs/go-ipfs#6419](https://github.com/ipfs/go-ipfs/pull/6419)).
123 3. Potential pin-set corruption given a concurrent `ipfs repo gc` and `ipfs pin
124 rm` ([ipfs/go-ipfs#6444](https://github.com/ipfs/go-ipfs/pull/6444)).
125 4. Build failure due to a deleted git tag in one of our dependencies
126 ([ipfs/go-ds-badger#64](https://github.com/ipfs/go-ds-badger/pull/65)).
127
128 Thanks to:
129
130 * [@hannahhoward](https://github.com/hannahhoward) for fixing both bitswap issues.
131 * [@sanderpick](https://github.com/sanderpick) for catching and fixing the local
132 discovery bug.
133 * [@campoy](https://github.com/campoy) for fixing the build issue.
134
135 ## v0.4.21 2019-05-30
136
137 We're happy to announce go-ipfs 0.4.21. This release has some critical bug fixes
138 and a handful of new features so every user should upgrade.
139
140 Key bug fixes:
141
142 * Too many open file descriptors/too many peers
143 ([#6237](https://github.com/ipfs/go-ipfs/issues/6237)).
144 * Adding multiple files at the same time doesn't work
145 ([#6254](https://github.com/ipfs/go-ipfs/pull/6255)).
146 * CPU utilization spikes and then holds at 100%
147 ([#5613](https://github.com/ipfs/go-ipfs/issues/5613)).
148
149 Key features:
150
151 * Experimental TLS1.3 support (to eventually replace secio).
152 * OpenSSL support for SECIO handshakes (performance improvement).
153
154 **IMPORTANT:** This release fixes a bug in our security transport that could
155 potentially drop data from the channel. Note: This issue affects neither the
156 privacy nor the integrity of the data with respect to a third-party attacker.
157 Only the peer sending us data could trigger this bug.
158
159 **ALL USERS MUST UPGRADE.** We intended to introduce a feature this release that,
160 unfortunately, [reliably triggered this bug][secio-bug]. To avoid partitioning
161 the network, we've decided to postpone this feature for a release or two.
162
163 Specifically, we're going to provide a minimum _one month_ upgrade period. After
164 that, we'll start testing the impact of deploying the proposed changes.
165
166 If you're running the mainline go-ipfs, please upgrade ASAP. If you're building
167 a separate app or working on a forked go-ipfs, make sure to upgrade
168 github.com/libp2p/go-libp2p-secio to _at least_ v0.0.3.
169
170 [secio-bug]: https://github.com/libp2p/go-libp2p/issues/644
171
172 ### Contributors
173
174 First off, we'd like to give a shout-out to all contributors that participated
175 in this release (including contributions to ipld, libp2p, and multiformats):
176
177 | Contributor | Commits | Lines ± | Files Changed |
178 |----------------------------|---------|-------------|---------------|
179 | Steven Allen | 220 | +6078/-4211 | 520 |
180 | Łukasz Magiera | 53 | +5039/-4557 | 274 |
181 | vyzo | 179 | +2929/-1704 | 238 |
182 | Raúl Kripalani | 44 | +757/-1895 | 134 |
183 | hannahhoward | 11 | +755/-1005 | 49 |
184 | Marten Seemann | 16 | +862/-203 | 44 |
185 | keks | 10 | +359/-110 | 12 |
186 | Jan Winkelmann | 8 | +368/-26 | 16 |
187 | Jakub Sztandera | 4 | +361/-8 | 7 |
188 | Adrian Lanzafame | 1 | +287/-18 | 5 |
189 | Erik Ingenito | 4 | +247/-28 | 8 |
190 | Reid 'arrdem' McKenzie | 1 | +220/-20 | 3 |
191 | Yusef Napora | 26 | +98/-130 | 26 |
192 | Michael Avila | 3 | +116/-59 | 8 |
193 | Raghav Gulati | 13 | +145/-26 | 13 |
194 | tg | 1 | +41/-33 | 1 |
195 | Matt Joiner | 6 | +41/-30 | 7 |
196 | Cole Brown | 1 | +37/-25 | 1 |
197 | Dominic Della Valle | 2 | +12/-40 | 4 |
198 | Overbool | 1 | +50/-0 | 2 |
199 | Christopher Buesser | 3 | +29/-16 | 10 |
200 | myself659 | 1 | +38/-5 | 2 |
201 | Alex Browne | 3 | +30/-8 | 3 |
202 | jmank88 | 1 | +27/-4 | 2 |
203 | Vikram | 1 | +25/-1 | 2 |
204 | MollyM | 7 | +17/-9 | 7 |
205 | Marcin Rataj | 1 | +17/-1 | 1 |
206 | requilence | 1 | +11/-4 | 1 |
207 | Teran McKinney | 1 | +8/-2 | 1 |
208 | Oli Evans | 1 | +5/-5 | 1 |
209 | Masashi Salvador Mitsuzawa | 1 | +5/-1 | 1 |
210 | chenminjian | 1 | +4/-0 | 1 |
211 | Edgar Lee | 1 | +3/-1 | 1 |
212 | Dirk McCormick | 1 | +2/-2 | 2 |
213 | ia | 1 | +1/-1 | 1 |
214 | Alan Shaw | 1 | +1/-1 | 1 |
215
216 ### Bug Fixes And Enhancements
217
218 This release includes quite a number of critical bug fixes and
219 performance/reliability enhancements.
220
221 #### Error when adding multiple files
222
223 The last release broke the simple command `ipfs add file1 file2`. It turns out
224 we simply lacked a test case for this. Both of these issues (the bug and the
225 lack of a test case) have now been fixed.
226
227 #### SECIO
228
229 As noted above, we've fixed a bug that could cause data to be dropped from a
230 SECIO connection on read. Specifically, this happens when:
231
232 1. The capacity of the read buffer is greater than the length.
233 2. The remote peer sent more than the length but less than the capacity in a
234 single secio "frame".
235
236 In this case, we'd fill the read buffer to it's capacity instead of its length.
237
238 #### Too many open files, too many peers, etc.
239
240 Go-ipfs automatically closes the least useful connections when it accumulates
241 too many connections. Unfortunately, some relayed connections were blocking in
242 `Close()`, halting the entire process.
243
244 #### Out of control CPU usage
245
246 Many users noted out of control CPU usage this release. This turned out to be a
247 long-standing issue with how the DHT handled provider records (records recording
248 which peers have what content):
249
250 1. It wasn't removing provider records for content until the set of providers
251 completely emptied.
252 2. It was loading every provider record into memory whenever we updated the set
253 of providers.
254
255 Combined, these two issues were trashing the provider record cache, forcing the
256 DHT to repeatedly load and discard provider records.
257
258 #### More Reliable Connection Management
259
260 Go-ipfs has a subsystem called the "connection manager" to close the
261 least-useful connections when go-ipfs runs low on resources.
262
263 Unfortunately, other IPFS subsystems may learn about connections _before_ the
264 connection manager. Previously, if some IPFS subsystem tried to mark a
265 connection as useful before the connection manager learned about it, the
266 connection manager would discard this information. We believe this was causing
267 [#6271](https://github.com/ipfs/go-ipfs/issues/6271). [It no longer does
268 that](https://github.com/libp2p/go-libp2p-connmgr/pull/39).
269
270 #### Improved Bitswap Connection Management
271
272 Bitswap now uses the connection manager to mark all peers downloading blocks as
273 important (while downloading). Previously, it only marked peers from which _it_
274 was downloading blocks.
275
276 #### Reduced Memory Usage
277
278 The most noticeable memory reduction in this release comes from fixing connection
279 closing. However, we've made a few additional improvements:
280
281 * Bitswap's "work queue" no longer remembers every peer it has seen
282 indefinitely.
283 * The peerstore now interns protocol names.
284 * The per-peer goroutine count has been reduced.
285 * The DHT now wastes less memory on idle peers by pooling buffered writers and
286 returning them to the pool when not actively using them.
287
288 #### Increased File Descriptor Limit
289
290 The default file descriptor limit has been raised to 8192 (from 2048).
291 Unfortunately, go-ipfs behaves poorly when it runs out of file descriptors and
292 it uses a _lot_ of file descriptors.
293
294 Luckily, most modern kernels can handle thousands of file descriptors without
295 any difficulty.
296
297 #### Decreased Connection Handshake Latency
298
299 Libp2p now shaves off a couple of round trips when initiating connections by
300 beginning the protocol negotiation before the remote peer responds to the
301 initial handshake message.
302
303 In the optimal case (when the target peer speaks our preferred protocol), this
304 reduces the number of handshake round-trips from 6 to 4 (including the TCP
305 handshake).
306
307 ### Commands
308
309 This release brings no new commands but does introduce a few changes, bug fixes,
310 and enhancements. This section is hardly complete but it lists the most
311 noticeable changes.
312
313 Take note: this release also introduces a few breaking changes.
314
315 #### [DEPRECATION] The URLStore Command Deprecated
316
317 The experimental `ipfs urlstore` command is now deprecated. Please use `ipfs add
318 --nocopy URL` instead.
319
320 #### [BREAKING] The DHT Command Base64 Encodes Values
321
322 When responding to an `ipfs dht get` command, the daemon now encodes the
323 returned value using base64. The `ipfs` command will automatically decode this
324 value before returning it to the user so this change should only affect those
325 using the HTTP API directly.
326
327 Unfortunately, this change was necessary as DHT records are arbitrary binary
328 blobs which can't be directly stored in JSON strings.
329
330 #### [BREAKING] Base32 Encoded v1 CIDs By Default
331
332 Both js-ipfs and go-ipfs now encode CIDv1 CIDs using base32 by default, instead
333 of base58. Unfortunately, base58 is case-sensitive and doesn't play well with
334 browsers (see [#4143](https://github.com/ipfs/go-ipfs/issues/4143).
335
336 #### Human Readable Numbers
337
338 The `ipfs bitswap stat` and `ipfs object stat` commands now support a
339 `--humanize` flag that formats numbers with human-readable units (GiB, MiB,
340 etc.).
341
342 #### Improved Errors
343
344 This release improves two types of errors:
345
346 1. Commands that take paths/multiaddrs now include the path/multiaddr in the
347 error message when it fails to parse.
348 2. `ipfs swarm connect` now returns a detailed error describing which addresses
349 were tried and why the dial failed.
350
351 #### Ping Improvements
352
353 The ping command has received some small improvements and fixes:
354
355 1. It now exits with a non-zero exit status on failure.
356 2. It no longer succeeds with zero successful pings if we have a zombie but
357 non-functional connection to the peer being pinged
358 ([#6298](https://github.com/ipfs/go-ipfs/issues/6298)).
359 3. It now prints out the average latency when canceled with `^C` (like the unix
360 `ping` command).
361
362 #### Improved Help Text
363
364 Go-ipfs now intelligently wraps help text for easier reading. On an 80 character
365 wide terminal,
366
367 **Before**
368
369 ```
370 USAGE
371 ipfs add <path>... - Add a file or directory to ipfs.
372
373 SYNOPSIS
374 ipfs add [--recursive | -r] [--dereference-args] [--stdin-name=<stdin-name>] [
375 --hidden | -H] [--quiet | -q] [--quieter | -Q] [--silent] [--progress | -p] [--t
376 rickle | -t] [--only-hash | -n] [--wrap-with-directory | -w] [--chunker=<chunker
377 > | -s] [--pin=false] [--raw-leaves] [--nocopy] [--fscache] [--cid-version=<cid-
378 version>] [--hash=<hash>] [--inline] [--inline-limit=<inline-limit>] [--] <path>
379 ...
380
381 ARGUMENTS
382
383 <path>... - The path to a file to be added to ipfs.
384
385 OPTIONS
386
387 -r, --recursive bool - Add directory paths recursive
388 ly.
389 --dereference-args bool - Symlinks supplied in argument
390 s are dereferenced.
391 --stdin-name string - Assign a name if the file sou
392 rce is stdin.
393 -H, --hidden bool - Include files that are hidden
394 . Only takes effect on recursive add.
395 -q, --quiet bool - Write minimal output.
396 -Q, --quieter bool - Write only final hash.
397 --silent bool - Write no output.
398 -p, --progress bool - Stream progress data.
399 -t, --trickle bool - Use trickle-dag format for da
400 g generation.
401 -n, --only-hash bool - Only chunk and hash - do not
402 write to disk.
403 -w, --wrap-with-directory bool - Wrap files with a directory o
404 object.
405 -s, --chunker string - Chunking algorithm, size-[byt
406 es] or rabin-[min]-[avg]-[max]. Default: size-262144.
407 --pin bool - Pin this object when adding.
408 Default: true.
409 --raw-leaves bool - Use raw blocks for leaf nodes
410 . (experimental).
411 --nocopy bool - Add the file using filestore.
412 Implies raw-leaves. (experimental).
413 --fscache bool - Check the filestore for pre-e
414 xisting blocks. (experimental).
415 --cid-version int - CID version. Defaults to 0 un
416 less an option that depends on CIDv1 is passed. (experimental).
417 --hash string - Hash function to use. Implies
418 CIDv1 if not sha2-256. (experimental). Default: sha2-256.
419 --inline bool - Inline small blocks into CIDs
420 . (experimental).
421 --inline-limit int - Maximum block size to inline.
422 (experimental). Default: 32.
423
424 ```
425
426
427 **After**
428
429 ```
430 USAGE
431 ipfs add <path>... - Add a file or directory to ipfs.
432
433 SYNOPSIS
434 ipfs add [--recursive | -r] [--dereference-args] [--stdin-name=<stdin-name>]
435 [--hidden | -H] [--quiet | -q] [--quieter | -Q] [--silent]
436 [--progress | -p] [--trickle | -t] [--only-hash | -n]
437 [--wrap-with-directory | -w] [--chunker=<chunker> | -s] [--pin=false]
438 [--raw-leaves] [--nocopy] [--fscache] [--cid-version=<cid-version>]
439 [--hash=<hash>] [--inline] [--inline-limit=<inline-limit>] [--]
440 <path>...
441
442 ARGUMENTS
443
444 <path>... - The path to a file to be added to ipfs.
445
446 OPTIONS
447
448 -r, --recursive bool - Add directory paths recursively.
449 --dereference-args bool - Symlinks supplied in arguments are
450 dereferenced.
451 --stdin-name string - Assign a name if the file source is stdin.
452 -H, --hidden bool - Include files that are hidden. Only takes
453 effect on recursive add.
454 -q, --quiet bool - Write minimal output.
455 -Q, --quieter bool - Write only final hash.
456 --silent bool - Write no output.
457 -p, --progress bool - Stream progress data.
458 -t, --trickle bool - Use trickle-dag format for dag generation.
459 -n, --only-hash bool - Only chunk and hash - do not write to
460 disk.
461 -w, --wrap-with-directory bool - Wrap files with a directory object.
462 -s, --chunker string - Chunking algorithm, size-[bytes] or
463 rabin-[min]-[avg]-[max]. Default:
464 size-262144.
465 --pin bool - Pin this object when adding. Default:
466 true.
467 --raw-leaves bool - Use raw blocks for leaf nodes.
468 (experimental).
469 --nocopy bool - Add the file using filestore. Implies
470 raw-leaves. (experimental).
471 --fscache bool - Check the filestore for pre-existing
472 blocks. (experimental).
473 --cid-version int - CID version. Defaults to 0 unless an
474 option that depends on CIDv1 is passed.
475 (experimental).
476 --hash string - Hash function to use. Implies CIDv1 if
477 not sha2-256. (experimental). Default:
478 sha2-256.
479 --inline bool - Inline small blocks into CIDs.
480 (experimental).
481 --inline-limit int - Maximum block size to inline.
482 (experimental). Default: 32.
483 ```
484
485 ### Features
486
487 This release is primarily a bug fix release but it still includes two nice
488 features from libp2p.
489
490 #### Experimental TLS1.3 support
491
492 Go-ipfs now has experimental TLS1.3 support. Currently, libp2p (IPFS's
493 networking library) uses a custom TLS-like protocol we call SECIO. However, the
494 conventional wisdom concerning custom security transports is "just don't" so we
495 are working on replacing it with TLS1.3
496
497 To choose this protocol by default, set the `Experimental.PreferTLS` config
498 variable:
499
500 ```bash
501 > ipfs config --bool Experimental.PreferTLS true
502 ```
503
504 Why TLS1.3 and not X (noise, etc.)?
505
506 1. Libp2p allows negotiating transports so there's no reason not to add noise
507 support to libp2p as well.
508 2. TLS has wide language support which should make implementing libp2p for new
509 languages significantly simpler.
510
511 #### OpenSSL Support
512
513 Go-ipfs can now (optionally) be built with OpenSSL support for improved
514 performance when establishing connections. This is primarily useful for nodes
515 receiving multiple inbound connections per second.
516
517 To enable openssl support, rebuild go-ipfs with:
518
519 ```bash
520 > make build GOTAGS=openssl
521 ```
522
523 ### CoreAPI
524
525 The CoreAPI refactor is still underway and we've made significant progress
526 towards a usable ipfs-as-a-library constructor. Specifically, we've integrated
527 the [fx](https://go.uber.org/fx) dependency injection system and are
528 now working on cleaning up our initialization logic. This should make it easier
529 to inject new services into a go-ipfs process without messing with the core
530 internals.
531
532 ### Build: `GOCC` Environment Variable
533
534 Build system now uses `GOCC` environment variable allowing for use of specific
535 go versions during builds.
536
537 ### Changelog
538
539 - github.com/ipfs/go-ipfs:
540 - fix: use http.Error for sending errors ([ipfs/go-ipfs#6379](https://github.com/ipfs/go-ipfs/pull/6379))
541 - core: call app.Stop once ([ipfs/go-ipfs#6380](https://github.com/ipfs/go-ipfs/pull/6380))
542 - explain what dhtclient does ([ipfs/go-ipfs#6375](https://github.com/ipfs/go-ipfs/pull/6375))
543 - ci: actually enable golangci-lint ([ipfs/go-ipfs#6362](https://github.com/ipfs/go-ipfs/pull/6362))
544 - commands/swarm(fix): handle empty multiaddrs ([ipfs/go-ipfs#6355](https://github.com/ipfs/go-ipfs/pull/6355))
545 - feat: improve errors when a path fails to parse ([ipfs/go-ipfs#6346](https://github.com/ipfs/go-ipfs/pull/6346))
546 - fix vendoring dependencies when building the source tarball ([ipfs/go-ipfs#6349](https://github.com/ipfs/go-ipfs/pull/6349))
547 - core: Use correct default for connmgr lowWater ([ipfs/go-ipfs#6352](https://github.com/ipfs/go-ipfs/pull/6352))
548 - doc: remove out of date documentation ([ipfs/go-ipfs#6345](https://github.com/ipfs/go-ipfs/pull/6345))
549 - Add generation of dependency changes to mkreleaselog ([ipfs/go-ipfs#6348](https://github.com/ipfs/go-ipfs/pull/6348))
550 - readme: remove mention of DCO ([ipfs/go-ipfs#6344](https://github.com/ipfs/go-ipfs/pull/6344))
551 - Add golangci-lint ([ipfs/go-ipfs#6321](https://github.com/ipfs/go-ipfs/pull/6321))
552 - docs+mk: update guidance for unsupported platforms ([ipfs/go-ipfs#6338](https://github.com/ipfs/go-ipfs/pull/6338))
553 - fix formatting in object get ([ipfs/go-ipfs#6340](https://github.com/ipfs/go-ipfs/pull/6340))
554 - fail start when loading a plugin fails ([ipfs/go-ipfs#6339](https://github.com/ipfs/go-ipfs/pull/6339))
555 - fix a typo in the issue template ([ipfs/go-ipfs#6335](https://github.com/ipfs/go-ipfs/pull/6335))
556 - github: turn issue template into a multiple-choice question ([ipfs/go-ipfs#6333](https://github.com/ipfs/go-ipfs/pull/6333))
557 - object put: Allow empty objects ([ipfs/go-ipfs#6330](https://github.com/ipfs/go-ipfs/pull/6330))
558 - Update fuse.md ([ipfs/go-ipfs#6332](https://github.com/ipfs/go-ipfs/pull/6332))
559 - work towards fixing dht commands ([ipfs/go-ipfs#6277](https://github.com/ipfs/go-ipfs/pull/6277))
560 - fix setting ulimit ([ipfs/go-ipfs#6319](https://github.com/ipfs/go-ipfs/pull/6319))
561 - switch to base32 by default for CIDv1 ([ipfs/go-ipfs#6300](https://github.com/ipfs/go-ipfs/pull/6300))
562 - cmdkit -> cmds ([ipfs/go-ipfs#6318](https://github.com/ipfs/go-ipfs/pull/6318))
563 - raise default fd limit to 8192 ([ipfs/go-ipfs#6266](https://github.com/ipfs/go-ipfs/pull/6266))
564 - pin: don't walk all pinned blocks when removing a non-existent pin ([ipfs/go-ipfs#6311](https://github.com/ipfs/go-ipfs/pull/6311))
565 - ping: fix a bunch of issues ([ipfs/go-ipfs#6312](https://github.com/ipfs/go-ipfs/pull/6312))
566 - test(coreapi): use a thread-safe datastore everywhere ([ipfs/go-ipfs#6222](https://github.com/ipfs/go-ipfs/pull/6222))
567 - fix(Dockerfile): Allow ipfs mount in Docker container ([ipfs/go-ipfs#5560](https://github.com/ipfs/go-ipfs/pull/5560))
568 - docs: fix Routing section ([ipfs/go-ipfs#6309](https://github.com/ipfs/go-ipfs/pull/6309))
569 - License update to dual MIT and Apache 2 ([ipfs/go-ipfs#6301](https://github.com/ipfs/go-ipfs/pull/6301))
570 - Go test fix ([ipfs/go-ipfs#6293](https://github.com/ipfs/go-ipfs/pull/6293))
571 - commands(pin update): return resolved CIDs instead of paths ([ipfs/go-ipfs#6275](https://github.com/ipfs/go-ipfs/pull/6275))
572 - core: fix autonat construction ([ipfs/go-ipfs#6289](https://github.com/ipfs/go-ipfs/pull/6289))
573 - Test and fix GC/pin bug ([ipfs/go-ipfs#6288](https://github.com/ipfs/go-ipfs/pull/6288))
574 - GOCC implementation & fix in make & build scripts ([ipfs/go-ipfs#6282](https://github.com/ipfs/go-ipfs/pull/6282))
575 - gc: cancel context ([ipfs/go-ipfs#6281](https://github.com/ipfs/go-ipfs/pull/6281))
576 - fix: windows friendly daemon help ([ipfs/go-ipfs#6278](https://github.com/ipfs/go-ipfs/pull/6278))
577 - Invert constructor config handling ([ipfs/go-ipfs#6276](https://github.com/ipfs/go-ipfs/pull/6276))
578 - docs: document environment variables ([ipfs/go-ipfs#6268](https://github.com/ipfs/go-ipfs/pull/6268))
579 - add: Return error from iterator ([ipfs/go-ipfs#6272](https://github.com/ipfs/go-ipfs/pull/6272))
580 - commands(feat): use the coreapi in the urlstore command ([ipfs/go-ipfs#6259](https://github.com/ipfs/go-ipfs/pull/6259))
581 - humanize for ipfs bitswap stat ([ipfs/go-ipfs#6258](https://github.com/ipfs/go-ipfs/pull/6258))
582 - Revert "raise default fd limit to 8192" ([ipfs/go-ipfs#6265](https://github.com/ipfs/go-ipfs/pull/6265))
583 - raise default fd limit to 8192 ([ipfs/go-ipfs#6261](https://github.com/ipfs/go-ipfs/pull/6261))
584 - Fix AutoNAT service for private network ([ipfs/go-ipfs#6251](https://github.com/ipfs/go-ipfs/pull/6251))
585 - add: Fix adding multiple files ([ipfs/go-ipfs#6255](https://github.com/ipfs/go-ipfs/pull/6255))
586 - reprovider: Use goprocess ([ipfs/go-ipfs#6248](https://github.com/ipfs/go-ipfs/pull/6248))
587 - core/corehttp/gateway_handler: pass a request ctx instead of the node ([ipfs/go-ipfs#6244](https://github.com/ipfs/go-ipfs/pull/6244))
588 - constructor: cleanup some things ([ipfs/go-ipfs#6246](https://github.com/ipfs/go-ipfs/pull/6246))
589 - Support --human flag in cmd/object-stat ([ipfs/go-ipfs#6241](https://github.com/ipfs/go-ipfs/pull/6241))
590 - build: fix macos build with fuse ([ipfs/go-ipfs#6235](https://github.com/ipfs/go-ipfs/pull/6235))
591 - add an experiment to prefer TLS 1.3 over secio ([ipfs/go-ipfs#6229](https://github.com/ipfs/go-ipfs/pull/6229))
592 - fix two small nits in the go-ipfs constructor ([ipfs/go-ipfs#6234](https://github.com/ipfs/go-ipfs/pull/6234))
593 - DI-based core.NewNode ([ipfs/go-ipfs#6162](https://github.com/ipfs/go-ipfs/pull/6162))
594 - coreapi: Drop error from ParsePath ([ipfs/go-ipfs#6122](https://github.com/ipfs/go-ipfs/pull/6122))
595 - fix the wrong path configuration in root redirection ([ipfs/go-ipfs#6215](https://github.com/ipfs/go-ipfs/pull/6215))
596 - github.com/ipfs/go-bitswap (v0.0.4 -> v0.0.7):
597 - feat(engine): tag peers with requests ([ipfs/go-bitswap#128](https://github.com/ipfs/go-bitswap/pull/128))
598 - fix(network): add mutex to avoid data race ([ipfs/go-bitswap#127](https://github.com/ipfs/go-bitswap/pull/127))
599 - Change bitswap provide toggle to not be static ([ipfs/go-bitswap#124](https://github.com/ipfs/go-bitswap/pull/124))
600 - Use shared peer task queue with Graphsync ([ipfs/go-bitswap#119](https://github.com/ipfs/go-bitswap/pull/119))
601 - Add missing godoc comments, refactor to avoid confusion ([ipfs/go-bitswap#117](https://github.com/ipfs/go-bitswap/pull/117))
602 - fix(decision): cleanup request queues ([ipfs/go-bitswap#116](https://github.com/ipfs/go-bitswap/pull/116))
603 - Control provider workers with experiment flag ([ipfs/go-bitswap#110](https://github.com/ipfs/go-bitswap/pull/110))
604 - connmgr: give peers more weight when actively participating in a session ([ipfs/go-bitswap#111](https://github.com/ipfs/go-bitswap/pull/111))
605 - make the WantlistManager own the PeerHandler ([ipfs/go-bitswap#78](https://github.com/ipfs/go-bitswap/pull/78))
606 - remove IPFS_LOW_MEM flag support ([ipfs/go-bitswap#115](https://github.com/ipfs/go-bitswap/pull/115))
607 - github.com/ipfs/go-cid (v0.0.1 -> v0.0.2):
608 - default cidv1 to base32 ([ipfs/go-cid#85](https://github.com/ipfs/go-cid/pull/85))
609 - github.com/ipfs/go-cidutil (v0.0.1 -> v0.0.2):
610 - default cidv1 to base32 ([ipfs/go-cidutil#13](https://github.com/ipfs/go-cidutil/pull/13))
611 - github.com/ipfs/go-datastore (v0.0.3 -> v0.0.5):
612 - MapDatastore: obey KeysOnly ([ipfs/go-datastore#130](https://github.com/ipfs/go-datastore/pull/130))
613 - fix the keytransform datastore's query implementation ([ipfs/go-datastore#127](https://github.com/ipfs/go-datastore/pull/127))
614 - sync: apply entire query while locked ([ipfs/go-datastore#129](https://github.com/ipfs/go-datastore/pull/129))
615 - filter: values are now always bytes ([ipfs/go-datastore#126](https://github.com/ipfs/go-datastore/pull/126))
616 - autobatch: batch deletes ([ipfs/go-datastore#128](https://github.com/ipfs/go-datastore/pull/128))
617 - github.com/ipfs/go-ipfs-cmds (v0.0.5 -> v0.0.8):
618 - fix: use golang's http.Error to send errors ([ipfs/go-ipfs-cmds#167](https://github.com/ipfs/go-ipfs-cmds/pull/167))
619 - improve help text on narrow terminals ([ipfs/go-ipfs-cmds#140](https://github.com/ipfs/go-ipfs-cmds/pull/140))
620 - chore: remove an old hack ([ipfs/go-ipfs-cmds#165](https://github.com/ipfs/go-ipfs-cmds/pull/165))
621 - http: use the request context ([ipfs/go-ipfs-cmds#163](https://github.com/ipfs/go-ipfs-cmds/pull/163))
622 - merge in go-ipfs-cmdkit ([ipfs/go-ipfs-cmds#164](https://github.com/ipfs/go-ipfs-cmds/pull/164))
623 - fix: return the correct error ([ipfs/go-ipfs-cmds#162](https://github.com/ipfs/go-ipfs-cmds/pull/162))
624 - github.com/ipfs/go-ipfs-config (v0.0.1 -> v0.0.3):
625 - Closes: #6284 Add appropriate IPv6 ranges to defaultServerFilters ([ipfs/go-ipfs-config#34](https://github.com/ipfs/go-ipfs-config/pull/34))
626 - add an experiment to prefer TLS 1.3 over secio ([ipfs/go-ipfs-config#32](https://github.com/ipfs/go-ipfs-config/pull/32))
627 - github.com/ipfs/go-ipfs-files (v0.0.2 -> v0.0.3):
628 - webfile: make Size() work before Read ([ipfs/go-ipfs-files#18](https://github.com/ipfs/go-ipfs-files/pull/18))
629 - check http status code during WebFile reads and return error for non-2XX ([ipfs/go-ipfs-files#17](https://github.com/ipfs/go-ipfs-files/pull/17))
630 - github.com/ipfs/go-ipld-cbor (v0.0.1 -> v0.0.2):
631 - switch to base32 by default ([ipfs/go-ipld-cbor#62](https://github.com/ipfs/go-ipld-cbor/pull/62))
632 - github.com/ipfs/go-ipld-git (v0.0.1 -> v0.0.2):
633 - switch to base32 by default ([ipfs/go-ipld-git#40](https://github.com/ipfs/go-ipld-git/pull/40))
634 - github.com/ipfs/go-mfs (v0.0.4 -> v0.0.7):
635 - Fix directory mv and add tests ([ipfs/go-mfs#76](https://github.com/ipfs/go-mfs/pull/76))
636 - fix: not remove file by mistakes ([ipfs/go-mfs#73](https://github.com/ipfs/go-mfs/pull/73))
637 - github.com/ipfs/go-path (v0.0.3 -> v0.0.4):
638 - include the path in path errors ([ipfs/go-path#28](https://github.com/ipfs/go-path/pull/28))
639 - github.com/ipfs/go-unixfs (v0.0.4 -> v0.0.6):
640 - chore: remove URL field ([ipfs/go-unixfs#72](https://github.com/ipfs/go-unixfs/pull/72))
641 - github.com/ipfs/interface-go-ipfs-core (v0.0.6 -> v0.0.8):
642 - switch to base32 cidv1 by default ([ipfs/interface-go-ipfs-core#29](https://github.com/ipfs/interface-go-ipfs-core/pull/29))
643 - path: drop error from ParsePath ([ipfs/interface-go-ipfs-core#22](https://github.com/ipfs/interface-go-ipfs-core/pull/22))
644 - tests: fix a bunch of small test lints/issues ([ipfs/interface-go-ipfs-core#28](https://github.com/ipfs/interface-go-ipfs-core/pull/28))
645 - Update Pin.RmRecursive docs to clarify shared indirect pins are not removed ([ipfs/interface-go-ipfs-core#26](https://github.com/ipfs/interface-go-ipfs-core/pull/26))
646 - github.com/libp2p/go-buffer-pool (v0.0.1 -> v0.0.2):
647 - feat: add buffered writer ([libp2p/go-buffer-pool#9](https://github.com/libp2p/go-buffer-pool/pull/9))
648 - github.com/libp2p/go-conn-security-multistream (v0.0.1 -> v0.0.2):
649 - block while writing ([libp2p/go-conn-security-multistream#10](https://github.com/libp2p/go-conn-security-multistream/pull/10))
650 - github.com/libp2p/go-libp2p (v0.0.12 -> v0.0.28):
651 - Close the connection manager ([libp2p/go-libp2p#639](https://github.com/libp2p/go-libp2p/pull/639))
652 - Frequent Relay Advertisements ([libp2p/go-libp2p#637](https://github.com/libp2p/go-libp2p/pull/637))
653 - ping: return a stream of results ([libp2p/go-libp2p#626](https://github.com/libp2p/go-libp2p/pull/626))
654 - Use cancelable background context in identify ([libp2p/go-libp2p#624](https://github.com/libp2p/go-libp2p/pull/624))
655 - avoid intermediate allocation in relayAddrs ([libp2p/go-libp2p#609](https://github.com/libp2p/go-libp2p/pull/609))
656 - cache relayAddrs for a short period of time ([libp2p/go-libp2p#608](https://github.com/libp2p/go-libp2p/pull/608))
657 - autorelay: break findRelays into multiple functions and avoid the goto ([libp2p/go-libp2p#606](https://github.com/libp2p/go-libp2p/pull/606))
658 - autorelay: curtail addrsplosion ([libp2p/go-libp2p#598](https://github.com/libp2p/go-libp2p/pull/598))
659 - Periodically schedule identify push if the address set has changed ([libp2p/go-libp2p#597](https://github.com/libp2p/go-libp2p/pull/597))
660 - Replace peer addresses in identify ([libp2p/go-libp2p#599](https://github.com/libp2p/go-libp2p/pull/599))
661 - github.com/libp2p/go-libp2p-circuit (v0.0.4 -> v0.0.8):
662 - call Stream.Reset instead of Stream.Close ([libp2p/go-libp2p-circuit#76](https://github.com/libp2p/go-libp2p-circuit/pull/76))
663 - Tag the hop relay when creating stop streams ([libp2p/go-libp2p-circuit#77](https://github.com/libp2p/go-libp2p-circuit/pull/77))
664 - Tag peers with live hop streams ([libp2p/go-libp2p-circuit#75](https://github.com/libp2p/go-libp2p-circuit/pull/75))
665 - Hard Limit the number of hop stream goroutines ([libp2p/go-libp2p-circuit#74](https://github.com/libp2p/go-libp2p-circuit/pull/74))
666 - set deadline for stop handshake ([libp2p/go-libp2p-circuit#73](https://github.com/libp2p/go-libp2p-circuit/pull/73))
667 - github.com/libp2p/go-libp2p-connmgr (v0.0.1 -> v0.0.6):
668 - Background trimming ([libp2p/go-libp2p-connmgr#43](https://github.com/libp2p/go-libp2p-connmgr/pull/43))
669 - Implement UpsertTag ([libp2p/go-libp2p-connmgr#38](https://github.com/libp2p/go-libp2p-connmgr/pull/38))
670 - Add peer protection capability (implementation) ([libp2p/go-libp2p-connmgr#36](https://github.com/libp2p/go-libp2p-connmgr/pull/36))
671 - github.com/libp2p/go-libp2p-crypto (v0.0.1 -> v0.0.2):
672 - add openssl support ([libp2p/go-libp2p-crypto#61](https://github.com/libp2p/go-libp2p-crypto/pull/61))
673 - github.com/libp2p/go-libp2p-discovery (v0.0.1 -> v0.0.4):
674 - More consistent use of options ([libp2p/go-libp2p-discovery#25](https://github.com/libp2p/go-libp2p-discovery/pull/25))
675 - Use 3hrs as routing advertisement ttl ([libp2p/go-libp2p-discovery#23](https://github.com/libp2p/go-libp2p-discovery/pull/23))
676 - github.com/libp2p/go-libp2p-interface-connmgr (v0.0.1 -> v0.0.5):
677 - Add Close method to the ConnManager interface ([libp2p/go-libp2p-interface-connmgr#18](https://github.com/libp2p/go-libp2p-interface-connmgr/pull/18))
678 - Add UpsertTag to the interface ([libp2p/go-libp2p-interface-connmgr#17](https://github.com/libp2p/go-libp2p-interface-connmgr/pull/17))
679 - Fix NullConnMgr to respect ConnManager interface ([libp2p/go-libp2p-interface-connmgr#15](https://github.com/libp2p/go-libp2p-interface-connmgr/pull/15))
680 - Add peer protection capability ([libp2p/go-libp2p-interface-connmgr#14](https://github.com/libp2p/go-libp2p-interface-connmgr/pull/14))
681 - github.com/libp2p/go-libp2p-kad-dht (v0.0.7 -> v0.0.13):
682 - fix: reduce memory used by buffered writers ([libp2p/go-libp2p-kad-dht#332](https://github.com/libp2p/go-libp2p-kad-dht/pull/332))
683 - query: fix a goroutine leak when the routing table is empty ([libp2p/go-libp2p-kad-dht#329](https://github.com/libp2p/go-libp2p-kad-dht/pull/329))
684 - query: fix error "leak" ([libp2p/go-libp2p-kad-dht#328](https://github.com/libp2p/go-libp2p-kad-dht/pull/328))
685 - providers: run datastore GC concurrently ([libp2p/go-libp2p-kad-dht#326](https://github.com/libp2p/go-libp2p-kad-dht/pull/326))
686 - fix(providers): gc ([libp2p/go-libp2p-kad-dht#325](https://github.com/libp2p/go-libp2p-kad-dht/pull/325))
687 - Remove the old protocol from the defaults ([libp2p/go-libp2p-kad-dht#320](https://github.com/libp2p/go-libp2p-kad-dht/pull/320))
688 - Fix some provider subsystem performance issues ([libp2p/go-libp2p-kad-dht#319](https://github.com/libp2p/go-libp2p-kad-dht/pull/319))
689 - github.com/libp2p/go-libp2p-peerstore (v0.0.2 -> v0.0.6):
690 - segment the memory peerstore + granular locks ([libp2p/go-libp2p-peerstore#78](https://github.com/libp2p/go-libp2p-peerstore/pull/78))
691 - don't delete under the read lock ([libp2p/go-libp2p-peerstore#76](https://github.com/libp2p/go-libp2p-peerstore/pull/76))
692 - Read/Write locking ([libp2p/go-libp2p-peerstore#74](https://github.com/libp2p/go-libp2p-peerstore/pull/74))
693 - optimize peerstore memory ([libp2p/go-libp2p-peerstore#71](https://github.com/libp2p/go-libp2p-peerstore/pull/71))
694 - fix unmarshalling of peer IDs ([libp2p/go-libp2p-peerstore#72](https://github.com/libp2p/go-libp2p-peerstore/pull/72))
695 - fix error handling in UpdateAddrs: return on error ([libp2p/go-libp2p-peerstore#70](https://github.com/libp2p/go-libp2p-peerstore/pull/70))
696 - github.com/libp2p/go-libp2p-pubsub (v0.0.1 -> v0.0.3):
697 - rework validator pipeline ([libp2p/go-libp2p-pubsub#176](https://github.com/libp2p/go-libp2p-pubsub/pull/176))
698 - Test adversarial signing ([libp2p/go-libp2p-pubsub#181](https://github.com/libp2p/go-libp2p-pubsub/pull/181))
699 - Strict message signing by default ([libp2p/go-libp2p-pubsub#180](https://github.com/libp2p/go-libp2p-pubsub/pull/180))
700 - github.com/libp2p/go-libp2p-secio (v0.0.1 -> v0.0.3):
701 - fix buffer size check ([libp2p/go-libp2p-secio#44](https://github.com/libp2p/go-libp2p-secio/pull/44))
702 - github.com/libp2p/go-libp2p-swarm (v0.0.2 -> v0.0.6):
703 - dial: return a nice custom dial error ([libp2p/go-libp2p-swarm#121](https://github.com/libp2p/go-libp2p-swarm/pull/121))
704 - github.com/libp2p/go-libp2p-tls (null -> v0.0.1):
705 - implement the new handshake ([libp2p/go-libp2p-tls#20](https://github.com/libp2p/go-libp2p-tls/pull/20))
706 - use a prefix when signing the public key ([libp2p/go-libp2p-tls#26](https://github.com/libp2p/go-libp2p-tls/pull/26))
707 - use ChaCha if one of the peers doesn't have AES hardware support ([libp2p/go-libp2p-tls#23](https://github.com/libp2p/go-libp2p-tls/pull/23))
708 - improve peer verification ([libp2p/go-libp2p-tls#17](https://github.com/libp2p/go-libp2p-tls/pull/17))
709 - add an example (mainly for development) ([libp2p/go-libp2p-tls#14](https://github.com/libp2p/go-libp2p-tls/pull/14))
710 - github.com/libp2p/go-libp2p-transport-upgrader (v0.0.1 -> v0.0.4):
711 - improve correctness of closing connections on failure ([libp2p/go-libp2p-transport-upgrader#19](https://github.com/libp2p/go-libp2p-transport-upgrader/pull/19))
712 - github.com/libp2p/go-maddr-filter (v0.0.1 -> v0.0.4):
713 - fix filter listing ([libp2p/go-maddr-filter#13](https://github.com/libp2p/go-maddr-filter/pull/13))
714 - Reinstate deprecated Remove() method to reverse breakage ([libp2p/go-maddr-filter#12](https://github.com/libp2p/go-maddr-filter/pull/12))
715 - Implement support for whitelists, default-deny/allow ([libp2p/go-maddr-filter#8](https://github.com/libp2p/go-maddr-filter/pull/8))
716 - github.com/libp2p/go-mplex (v0.0.1 -> v0.0.4):
717 - disable write coalescing ([libp2p/go-mplex#61](https://github.com/libp2p/go-mplex/pull/61))
718 - fix SetDeadline error conditions ([libp2p/go-mplex#59](https://github.com/libp2p/go-mplex/pull/59))
719 - don't use contexts for deadlines ([libp2p/go-mplex#58](https://github.com/libp2p/go-mplex/pull/58))
720 - don't reset on pathologies, just ignore the data ([libp2p/go-mplex#57](https://github.com/libp2p/go-mplex/pull/57))
721 - coalesce writes ([libp2p/go-mplex#54](https://github.com/libp2p/go-mplex/pull/54))
722 - read as much as we can in one go ([libp2p/go-mplex#53](https://github.com/libp2p/go-mplex/pull/53))
723 - use timeouts when sending messages for stream open, close, and reset. ([libp2p/go-mplex#52](https://github.com/libp2p/go-mplex/pull/52))
724 - fix: reset a stream even if closed remotely ([libp2p/go-mplex#50](https://github.com/libp2p/go-mplex/pull/50))
725 - downgrade Error log to Warning ([libp2p/go-mplex#46](https://github.com/libp2p/go-mplex/pull/46))
726 - Fix race condition by adding a mutex for deadline access ([libp2p/go-mplex#41](https://github.com/libp2p/go-mplex/pull/41))
727 - github.com/libp2p/go-msgio (v0.0.1 -> v0.0.2):
728 - fix: never claim to read more than read ([libp2p/go-msgio#12](https://github.com/libp2p/go-msgio/pull/12))
729 - github.com/libp2p/go-ws-transport (v0.0.2 -> v0.0.4):
730 - dep: import go-smux-* into the libp2p org ([libp2p/go-ws-transport#43](https://github.com/libp2p/go-ws-transport/pull/43))
731 - replace gx instructions with note about gomod ([libp2p/go-ws-transport#42](https://github.com/libp2p/go-ws-transport/pull/42))
732
733
734 ## v0.4.20 2019-04-16
735
736 We're happy to release go-ipfs 0.4.20. This release includes some critical
737 performance and stability fixes so all users should upgrade ASAP.
738
739 This is also the first release to use go modules instead of GX. While GX has
740 been a great way to dogfood an IPFS-based package manager, building and
741 maintaining a custom package manager is a _lot_ of work and we haven't been able
742 to dedicate enough time to bring the user experience of gx to an acceptable
743 level. You can read [#5850](https://github.com/ipfs/go-ipfs/issues/5850) for
744 some discussion on this matter.
745
746 ### Docker
747
748 As of this release, it's now much easier to run arbitrary IPFS commands within
749 the docker container:
750
751 ```bash
752 > docker run --name my-ipfs ipfs/go-ipfs:v0.4.20 config profile apply server # apply the server profile
753 > docker start my-ipfs # start the daemon
754 ```
755
756 This release also [reverts](https://github.com/ipfs/go-ipfs/pull/6040) a change that
757 caused some significant trouble in 0.4.19. If you've been running into Docker
758 permission errors in 0.4.19, please upgrade.
759
760 ### WebUI
761
762 This release contains a major
763 [WebUI](https://github.com/ipfs-shipyard/ipfs-webui) release with some
764 significant improvements to the file browser and new opt-in, privately hosted,
765 anonymous usage analytics.
766
767 ### Commands
768
769 As usual, we've made several changes and improvements to our commands. The most
770 notable changes are listed in this section.
771
772 #### New: `ipfs version deps`
773
774 This release includes a new command, `ipfs version deps`, to list all
775 dependencies (with versions) of the current go-ipfs build. This should make it
776 easy to tell exactly how go-ipfs was built when tracking down issues.
777
778 #### New: `ipfs add URL`
779
780 The `ipfs add` command has gained support for URLs. This means you can:
781
782 1. Add files with `ipfs add URL` instead of downloading the file first.
783 2. Replace all uses of the `ipfs urlstore` command with a call to `ipfs add
784 --nocopy`. The `ipfs urlstore` command will be deprecated in a future
785 release.
786
787
788 #### Changed: `ipfs swarm connect`
789
790 The `ipfs swarm connect` command has a few new features:
791
792 It now marks the newly created connection as "important". This should ensure
793 that the connection manager won't come along later and close the connection if
794 it doesn't think it's being used.
795
796 It can now resolve `/dnsaddr` addresses that _don't_ end in a peer ID. For
797 example, you can now run `ipfs swarm connect /dnsaddr/bootstrap.libp2p.io` to
798 connect to one of the bootstrap peers at random. NOTE: This could connect you to
799 an _arbitrary_ peer as DNS is not secure (by default). Please do not rely on
800 this except for testing or unless you know what you're doing.
801
802 Finally, `ipfs swarm connect` now returns _all_ errors on failure. This should
803 make it much easier to debug connectivity issues. For example, one might see an
804 error like:
805
806 ```
807 Error: connect QmYou failure: dial attempt failed: 6 errors occurred:
808 * <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
809 * <peer.ID Qm*Me> --> <peer.ID Qm*You> (/ip6/::1/tcp/4001) dial attempt failed: dial tcp6 [::1]:4001: connect: connection refused
810 * <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
811 * <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
812 * <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
813 * <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
814 ```
815
816 #### Changed: `ipfs bitswap stat`
817
818 `ipfs bitswap stat` no longer lists bitswap partners unless the `-v` flag is
819 passed. That is, it will now return:
820
821 ```
822 > ipfs bitswap stat
823 bitswap status
824 provides buffer: 0 / 256
825 blocks received: 0
826 blocks sent: 79
827 data received: 0
828 data sent: 672706
829 dup blocks received: 0
830 dup data received: 0 B
831 wantlist [0 keys]
832 partners [197]
833 ```
834
835 Instead of:
836
837 ```
838 > ipfs bitswap stat -v
839 bitswap status
840 provides buffer: 0 / 256
841 blocks received: 0
842 blocks sent: 79
843 data received: 0
844 data sent: 672706
845 dup blocks received: 0
846 dup data received: 0 B
847 wantlist [0 keys]
848 partners [203]
849 QmNQTTTRCDpCYCiiu6TYWCqEa7ShAUo9jrZJvWngfSu1mL
850 QmNWaxbqERvdcgoWpqAhDMrbK2gKi3SMGk3LUEvfcqZcf4
851 QmNgSVpgZVEd41pBX6DyCaHRof8UmUJLqQ3XH2qNL9xLvN
852 ... omitting 200 lines ...
853 ```
854
855 #### Changed: `ipfs repo stat --human`
856
857 The `--human` flag in the `ipfs repo stat` command now intelligently picks a
858 size unit instead of always using MiB.
859
860 #### Changed: `ipfs resolve` (`ipfs dns`, `ipfs name resolve`)
861
862 All of the resolve commands now:
863
864 1. Resolve _recursively_ (up to 32 steps) by default to better match user
865 expectations (these commands used to be non-recursive by default). To turn
866 recursion off, pass `-r false`.
867 2. When resolving non-recursively, these commands no longer fail when partially
868 resolving a name. Instead, they simply return the intermediate result.
869
870 #### Changed: `ipfs files flush`
871
872 The `ipfs files flush` command now returns the CID of the flushed file.
873
874 ### Performance And Reliability
875
876 This release has the usual collection of performance and reliability
877 improvements.
878
879 #### Badger Memory Usage
880
881 Those of you using the badger datastore should notice reduced memory usage in
882 this release due to some upstream changes. Badger still uses significantly more
883 memory than the default datastore configuration but this will hopefully continue
884 to improve.
885
886 #### Bitswap
887
888 We fixed some critical CPU utilization regressions in bitswap for this release.
889 If you've been noticing CPU _regressions_ in go-ipfs 0.4.19, especially when
890 running a public gateway, upgrading to 0.4.20 will likely fix them.
891
892 #### Relays
893
894 After AutoRelay was introduced in go-ipfs 0.4.19, the number of peers connecting
895 through relays skyrocketed to over 120K concurrent peers. This highlighted some
896 performance issues that we've now fixed in this release. Specifically:
897
898 * We've significantly reduced the amount of memory allocated per-peer.
899 * We've fixed a bug where relays might, in rare cases, try to actively dial a
900 peer to relay traffic. By default, relays only forward traffic between peers
901 already connected to the relay.
902 * We've fixed quite a number of performance issues that only show up when
903 rapidly forming new connections. This will actually help _all_ nodes but will
904 especially help relays.
905
906 If you've enabled relay _hop_ (`Swarm.EnableRelayHop`) in go-ipfs 0.4.19 and it
907 hasn't burned down your machine yet, this release should improve things
908 significantly. However, relays are still under heavy load so running an open
909 relay will continue to be resource intensive.
910
911 We're continuing to investigate this issue and have a few more patches on the
912 way that, unfortunately, won't make it into this release.
913
914 #### Panics
915
916 We've fixed two notable panics in this release:
917
918 * We've fixed a frequent panic in the DHT.
919 * We've fixed an occasional panic in the experimental QUIC transport.
920
921 ### Content Routing
922
923 IPFS announces and finds content by sending and retrieving content routing
924 ("provider") records to and from the DHT. Unfortunately, sending out these
925 records can be quite resource intensive.
926
927 This release has two changes to alleviate this: a reduced number of initial
928 provide workers and a persistent provider queue.
929
930 We've reduced the number of parallel initial provide workers (workers that send
931 out provider records when content is initially added to go-ipfs) from 512 to 6.
932 Each provide request (currently, due to some issues in our DHT) tries to
933 establish hundreds of connections, significantly impacting the performance of
934 go-ipfs and [crashing some
935 routers](https://github.com/ipfs/go-ipfs/issues/3320).
936
937 We've introduced a new persistent provider queue for files added via `ipfs add`
938 and `ipfs pin add`. When new directory trees are added to go-ipfs, go-ipfs will
939 add the root/final CID to this queue. Then, in the background, go-ipfs will walk
940 the queue, sequentially sending out provider records for each CID.
941
942 This ensures that root CIDs are sent out as soon as possible and are sent even
943 when files are added when the go-ipfs daemon isn't running.
944
945 By example, let's add a directory tree to go-ipfs:
946
947 ```bash
948 > # We're going to do this in "online" mode first so let's start the daemon.
949 > ipfs daemon &
950 ...
951 Daemon is ready
952 > # Now, we're going to create a directory to add.
953 > mkdir foo
954 > for i in {0..1000}; do echo do echo $i > foo/$i; done
955 > # finally, we're going to add it.
956 > ipfs add -r foo
957 added QmUQcSjQx2bg4cSe2rUZyQi6F8QtJFJb74fWL7D784UWf9 foo/0
958 ...
959 added QmQac2chFyJ24yfG2Dfuqg1P5gipLcgUDuiuYkQ5ExwGap foo/990
960 added QmQWwz9haeQ5T2QmQeXzqspKdowzYELShBCLzLJjVa2DuV foo/991
961 added QmQ5D4MtHUN4LTS4n7mgyHyaUukieMMyCfvnzXQAAbgTJm foo/992
962 added QmZq4n4KRNq3k1ovzxJ4qdQXZSrarfJjnoLYPR3ztHd7EY foo/993
963 added QmdtrsuVf8Nf1s1MaSjLAd54iNqrn1KN9VoFNgKGnLgjbt foo/994
964 added QmbstvU9mnW2hsE94WFmw5WbrXdLTu2Sf9kWWSozrSDscL foo/995
965 added QmXFd7f35gAnmisjfFmfYKkjA3F3TSpvUYB9SXr6tLsdg8 foo/996
966 added QmV5BxS1YQ9V227Np2Cq124cRrFDAyBXNMqHHa6kpJ9cr6 foo/997
967 added QmcXsccUtwKeQ1SuYC3YgyFUeYmAR9CXwGGnT3LPeCg5Tx foo/998
968 added Qmc4mcQcpaNzyDQxQj5SyxwFg9ZYz5XBEeEZAuH4cQirj9 foo/999
969 added QmXpXzUhcS9edmFBuVafV5wFXKjfXkCQcjAUZsTs7qFf3G foo
970 ```
971
972 In 0.4.19, we would have sent out provider records for files `foo/{0..1000}`
973 _before_ sending out a provider record for `foo`. If you were ask a friend to
974 download /ipfs/QmUQcSjQx2bg4cSe2rUZyQi6F8QtJFJb74fWL7D784UWf9, they would
975 (baring other issues) be able to find it pretty quickly as this is the first CID
976 you'll have announced to the network. However, if you ask your friend to
977 download /ipfs/QmXpXzUhcS9edmFBuVafV5wFXKjfXkCQcjAUZsTs7qFf3G/0, they'll have to
978 wait for you to finish telling the network about every file in `foo` first.
979
980 In 0.4.20, we _immediately_ tell the network about
981 `QmXpXzUhcS9edmFBuVafV5wFXKjfXkCQcjAUZsTs7qFf3G` (the `foo` directory) as soon
982 as we finish adding the directory to go-ipfs _without_ waiting to finish
983 announcing `foo/{0..1000}`. This is especially important in this release
984 because we've drastically reduced the number of provide workers.
985
986 The second benefit is that this queue is persistent. That means go-ipfs won't
987 forget to send out this record, even if it was offline when the content was
988 initially added. NOTE: go-ipfs _does_ continuously _re_-send provider records in
989 the background twice a day, it just might be a while before it gets around to
990 sending one out any specific one.
991
992 ### Bitswap
993
994 Bitswap now periodically re-sends its wantlist to connected peers. This should
995 help work around some race conditions we've seen in bitswap where one node wants
996 a block but the other doesn't know for some reason.
997
998 You can track this issue here: https://github.com/ipfs/go-ipfs/issues/5183.
999
1000 ### Improved NAT Traversal
1001
1002 While NATs are still p2p enemy #1, this release includes slightly improved
1003 support for traversing them.
1004
1005 Specifically, this release now:
1006
1007 1. Better detects the "gateway" NAT, even when multiple devices on the network
1008 _claim_ to be NATs.
1009 2. Better guesses the external IP address when port mapping, even when the
1010 gateway lies.
1011
1012 ### Reduced AutoRelay Boot Time
1013
1014 The experimental AutoRelay feature can now detect NATs _much_ faster as we've
1015 reduced initial NAT detection delay to 15 seconds. There's still room for
1016 improvement but this should make nodes that have enabled this feature dialable
1017 earlier on start.
1018
1019 ### Changelogs
1020
1021 - github.com/ipfs/go-ipfs:
1022 - gitattributes: avoid normalizing known binary files ([ipfs/go-ipfs#6209](https://github.com/ipfs/go-ipfs/pull/6209))
1023 - gitattributes: default to LF ([ipfs/go-ipfs#6198](https://github.com/ipfs/go-ipfs/pull/6198))
1024 - Fix level db panic ([ipfs/go-ipfs#6186](https://github.com/ipfs/go-ipfs/pull/6186))
1025 - Dockerfile: Remove 2 year old deprecation warning ([ipfs/go-ipfs#6188](https://github.com/ipfs/go-ipfs/pull/6188))
1026 - align output for the command ipfs object stat ([ipfs/go-ipfs#6189](https://github.com/ipfs/go-ipfs/pull/6189))
1027 - provider queue: don't repeatedly retry the same item if we fail ([ipfs/go-ipfs#6187](https://github.com/ipfs/go-ipfs/pull/6187))
1028 - test: remove version/deps from ro commands test ([ipfs/go-ipfs#6185](https://github.com/ipfs/go-ipfs/pull/6185))
1029 - feat: add version deps command [modversion] ([ipfs/go-ipfs#6115](https://github.com/ipfs/go-ipfs/pull/6115))
1030 - readme: update for go modules ([ipfs/go-ipfs#6180](https://github.com/ipfs/go-ipfs/pull/6180))
1031 - Switch to Go 1.12 ([ipfs/go-ipfs#6144](https://github.com/ipfs/go-ipfs/pull/6144))
1032 - ci: avoid interleaving output from different sharness tests ([ipfs/go-ipfs#6175](https://github.com/ipfs/go-ipfs/pull/6175))
1033 - fix two bugs where the repo may not properly be closed ([ipfs/go-ipfs#6176](https://github.com/ipfs/go-ipfs/pull/6176))
1034 - fix error check in swarm connect ([ipfs/go-ipfs#6174](https://github.com/ipfs/go-ipfs/pull/6174))
1035 - feat(coreapi): tag all explicit connect requests in the connection manager ([ipfs/go-ipfs#6171](https://github.com/ipfs/go-ipfs/pull/6171))
1036 - chore: remove CODEOWNERS ([ipfs/go-ipfs#6172](https://github.com/ipfs/go-ipfs/pull/6172))
1037 - feat: update to IPFS Web UI 2.4.4 ([ipfs/go-ipfs#6169](https://github.com/ipfs/go-ipfs/pull/6169))
1038 - fix add error handling ([ipfs/go-ipfs#6156](https://github.com/ipfs/go-ipfs/pull/6156))
1039 - chore: remove waffle ([ipfs/go-ipfs#6157](https://github.com/ipfs/go-ipfs/pull/6157))
1040 - chore: fix a bunch of issues caught by golangci-lint ([ipfs/go-ipfs#6140](https://github.com/ipfs/go-ipfs/pull/6140))
1041 - docs/experimental-features.md: link to ipfs-ds-convert ([ipfs/go-ipfs#6154](https://github.com/ipfs/go-ipfs/pull/6154))
1042 - interrupt: fix send on closed ([ipfs/go-ipfs#6147](https://github.com/ipfs/go-ipfs/pull/6147))
1043 - docs: document Gateway.Writable not Gateway.Writeable ([ipfs/go-ipfs#6151](https://github.com/ipfs/go-ipfs/pull/6151))
1044 - Fuse fixes ([ipfs/go-ipfs#6135](https://github.com/ipfs/go-ipfs/pull/6135))
1045 - Remove duplicate blockstore from the package list ([ipfs/go-ipfs#6138](https://github.com/ipfs/go-ipfs/pull/6138))
1046 - Query for provider head/tail ([ipfs/go-ipfs#6125](https://github.com/ipfs/go-ipfs/pull/6125))
1047 - Remove dead link from ISSUE_TEMPLATE.md ([ipfs/go-ipfs#6128](https://github.com/ipfs/go-ipfs/pull/6128))
1048 - coreapi: remove Unixfs.Wrap ([ipfs/go-ipfs#6123](https://github.com/ipfs/go-ipfs/pull/6123))
1049 - coreapi unixfs: change Wrap logic to make more sense ([ipfs/go-ipfs#6019](https://github.com/ipfs/go-ipfs/pull/6019))
1050 - deps: switch back to jbenet go-is-domain ([ipfs/go-ipfs#6119](https://github.com/ipfs/go-ipfs/pull/6119))
1051 - command repo stat: add human flag tests to t0080-repo.sh ([ipfs/go-ipfs#6116](https://github.com/ipfs/go-ipfs/pull/6116))
1052 - gc: fix a potential deadlock ([ipfs/go-ipfs#6112](https://github.com/ipfs/go-ipfs/pull/6112))
1053 - fix config options in osxfuse error messages ([ipfs/go-ipfs#6105](https://github.com/ipfs/go-ipfs/pull/6105))
1054 - Command repo stat: improve human flag behavior ([ipfs/go-ipfs#6106](https://github.com/ipfs/go-ipfs/pull/6106))
1055 - Provide root node immediately on add and pin add ([ipfs/go-ipfs#6068](https://github.com/ipfs/go-ipfs/pull/6068))
1056 - gomod: Update Dockerfile, remove Dockerfile.fast ([ipfs/go-ipfs#6100](https://github.com/ipfs/go-ipfs/pull/6100))
1057 - Return CID from 'ipfs files flush' ([ipfs/go-ipfs#6102](https://github.com/ipfs/go-ipfs/pull/6102))
1058 - resolve: fix recursion ([ipfs/go-ipfs#6087](https://github.com/ipfs/go-ipfs/pull/6087))
1059 - fix(swarm): add dnsaddr support in swarm connect ([ipfs/go-ipfs#5535](https://github.com/ipfs/go-ipfs/pull/5535))
1060 - make in-memory datastore thread-safe ([ipfs/go-ipfs#6085](https://github.com/ipfs/go-ipfs/pull/6085))
1061 - Update package table to remove broken jenkins links ([ipfs/go-ipfs#6084](https://github.com/ipfs/go-ipfs/pull/6084))
1062 - mk: fix maketarball to work with gomod ([ipfs/go-ipfs#6078](https://github.com/ipfs/go-ipfs/pull/6078))
1063 - fix ls command to use the new coreinterface types ([ipfs/go-ipfs#6051](https://github.com/ipfs/go-ipfs/pull/6051))
1064 - mk: remove install_unsupported, leave a note ([ipfs/go-ipfs#6063](https://github.com/ipfs/go-ipfs/pull/6063))
1065 - mk: change git-hash command to include information about modifications ([ipfs/go-ipfs#6060](https://github.com/ipfs/go-ipfs/pull/6060))
1066 - mk: fix make install by not setting GOBIN ([ipfs/go-ipfs#6059](https://github.com/ipfs/go-ipfs/pull/6059))
1067 - go: require Golang 1.11.4 ([ipfs/go-ipfs#6057](https://github.com/ipfs/go-ipfs/pull/6057))
1068 - yamux: increase yamux window size to 8MiB. ([ipfs/go-ipfs#6049](https://github.com/ipfs/go-ipfs/pull/6049))
1069 - Introduce go modules [yey] ([ipfs/go-ipfs#6038](https://github.com/ipfs/go-ipfs/pull/6038))
1070 - cleanup daemon online logic ([ipfs/go-ipfs#6050](https://github.com/ipfs/go-ipfs/pull/6050))
1071 - ci: test on 32bit os ([ipfs/go-ipfs#5429](https://github.com/ipfs/go-ipfs/pull/5429))
1072 - feat/cmds: hide peers info default in bitswap stat ([ipfs/go-ipfs#5820](https://github.com/ipfs/go-ipfs/pull/5820))
1073 - Improve CLI help pages ([ipfs/go-ipfs#6013](https://github.com/ipfs/go-ipfs/pull/6013))
1074 - Close #6044 ([ipfs/go-ipfs#6045](https://github.com/ipfs/go-ipfs/pull/6045))
1075 - commands(dht): return final error ([ipfs/go-ipfs#6034](https://github.com/ipfs/go-ipfs/pull/6034))
1076 - Revert "Really run as non-root user in docker container" ([ipfs/go-ipfs#6040](https://github.com/ipfs/go-ipfs/pull/6040))
1077 - github.com/ipfs/go-bitswap:
1078 - feat(messagequeue): rebroadcast wantlist ([ipfs/go-bitswap#106](https://github.com/ipfs/go-bitswap/pull/106))
1079 - reduce provide workers to 6 ([ipfs/go-bitswap#93](https://github.com/ipfs/go-bitswap/pull/93))
1080 - Reduce memory allocation ([ipfs/go-bitswap#103](https://github.com/ipfs/go-bitswap/pull/103))
1081 - refactor(messagequeue): remove dead code ([ipfs/go-bitswap#98](https://github.com/ipfs/go-bitswap/pull/98))
1082 - fix: limit use of custom context type ([ipfs/go-bitswap#89](https://github.com/ipfs/go-bitswap/pull/89))
1083 - fix: remove non-error log message ([ipfs/go-bitswap#91](https://github.com/ipfs/go-bitswap/pull/91))
1084 - fix(messagequeue): Remove second run loop ([ipfs/go-bitswap#94](https://github.com/ipfs/go-bitswap/pull/94))
1085 - github.com/ipfs/go-blockservice:
1086 - Revert "Remove verifcid as it is handled in go-cid" ([ipfs/go-blockservice#25](https://github.com/ipfs/go-blockservice/pull/25))
1087 - Remove verifcid as it is handled in go-cid ([ipfs/go-blockservice#23](https://github.com/ipfs/go-blockservice/pull/23))
1088 - github.com/ipfs/go-datastore:
1089 - cleanup and optimize naive query filters ([ipfs/go-datastore#125](https://github.com/ipfs/go-datastore/pull/125))
1090 - Fix – sorted limited offset mount queries ([ipfs/go-datastore#124](https://github.com/ipfs/go-datastore/pull/124))
1091 - Fix function comments based on best practices from Effective Go ([ipfs/go-datastore#122](https://github.com/ipfs/go-datastore/pull/122))
1092 - remove ThreadSafeDatastore ([ipfs/go-datastore#120](https://github.com/ipfs/go-datastore/pull/120))
1093 - Splinter TTLDatastore interface into TTL + Datastore ([ipfs/go-datastore#118](https://github.com/ipfs/go-datastore/pull/118))
1094 - github.com/ipfs/go-ds-badger:
1095 - tweak the default options ([ipfs/go-ds-badger#52](https://github.com/ipfs/go-ds-badger/pull/52))
1096 - remove thread-safe assertion ([ipfs/go-ds-badger#55](https://github.com/ipfs/go-ds-badger/pull/55))
1097 - make memory-safe against concurrent closure/operations ([ipfs/go-ds-badger#53](https://github.com/ipfs/go-ds-badger/pull/53))
1098 - make badger use our logging framework ([ipfs/go-ds-badger#50](https://github.com/ipfs/go-ds-badger/pull/50))
1099 - github.com/ipfs/go-ds-flatfs:
1100 - remove thread-safe assertion ([ipfs/go-ds-flatfs#53](https://github.com/ipfs/go-ds-flatfs/pull/53))
1101 - github.com/ipfs/go-ds-leveldb:
1102 - Fast reverse query ([ipfs/go-ds-leveldb#28](https://github.com/ipfs/go-ds-leveldb/pull/28))
1103 - remove thread-safe assertion ([ipfs/go-ds-leveldb#27](https://github.com/ipfs/go-ds-leveldb/pull/27))
1104 - github.com/ipfs/go-ipfs-cmdkit:
1105 - Extract files package ([ipfs/go-ipfs-cmdkit#31](https://github.com/ipfs/go-ipfs-cmdkit/pull/31))
1106 - github.com/ipfs/go-ipfs-cmds:
1107 - sync: add yet another sync error ([ipfs/go-ipfs-cmds#161](https://github.com/ipfs/go-ipfs-cmds/pull/161))
1108 - Removed broken link from readme ([ipfs/go-ipfs-cmds#159](https://github.com/ipfs/go-ipfs-cmds/pull/159))
1109 - Fix broken link in readme ([ipfs/go-ipfs-cmds#160](https://github.com/ipfs/go-ipfs-cmds/pull/160))
1110 - set WebFile fpath to URL base ([ipfs/go-ipfs-cmds#158](https://github.com/ipfs/go-ipfs-cmds/pull/158))
1111 - Handle stdin name in cli/parse ([ipfs/go-ipfs-cmds#157](https://github.com/ipfs/go-ipfs-cmds/pull/157))
1112 - support url paths as files.WebFile ([ipfs/go-ipfs-cmds#154](https://github.com/ipfs/go-ipfs-cmds/pull/154))
1113 - typed encoder: improve pointer reflection ([ipfs/go-ipfs-cmds#155](https://github.com/ipfs/go-ipfs-cmds/pull/155))
1114 - cli: don't sync output to NUL on Windows ([ipfs/go-ipfs-cmds#153](https://github.com/ipfs/go-ipfs-cmds/pull/153))
1115 - github.com/ipfs/go-ipfs-files:
1116 - return url as AbsPath from WebFile to implement FileInfo ([ipfs/go-ipfs-files#13](https://github.com/ipfs/go-ipfs-files/pull/13))
1117 - fix the content disposition header ([ipfs/go-ipfs-files#14](https://github.com/ipfs/go-ipfs-files/pull/14))
1118 - go format ([ipfs/go-ipfs-files#15](https://github.com/ipfs/go-ipfs-files/pull/15))
1119 - simplify content type checking ([ipfs/go-ipfs-files#9](https://github.com/ipfs/go-ipfs-files/pull/9))
1120 - remove extra webfile test code ([ipfs/go-ipfs-files#12](https://github.com/ipfs/go-ipfs-files/pull/12))
1121 - github.com/ipfs/go-merkledag:
1122 - add function to marshal raw nodes to json ([ipfs/go-merkledag#36](https://github.com/ipfs/go-merkledag/pull/36))
1123 - fix some performance regressions when reading protobuf nodes ([ipfs/go-merkledag#34](https://github.com/ipfs/go-merkledag/pull/34))
1124 - github.com/ipfs/go-metrics-interface:
1125 - update the counter interface to match Prometheus ([ipfs/go-metrics-interface#2](https://github.com/ipfs/go-metrics-interface/pull/2))
1126 - github.com/ipfs/go-mfs:
1127 - Return node from FlushPath ([ipfs/go-mfs#72](https://github.com/ipfs/go-mfs/pull/72))
1128 - Wire up context to FlushPath ([ipfs/go-mfs#70](https://github.com/ipfs/go-mfs/pull/70))
1129 - github.com/ipfs/interface-go-ipfs-core:
1130 - don't close the top-level addr ([ipfs/interface-go-ipfs-core#25](https://github.com/ipfs/interface-go-ipfs-core/pull/25))
1131 - fix a bunch of small test "bugs" ([ipfs/interface-go-ipfs-core#24](https://github.com/ipfs/interface-go-ipfs-core/pull/24))
1132 - remove Wrap ([ipfs/interface-go-ipfs-core#21](https://github.com/ipfs/interface-go-ipfs-core/pull/21))
1133 - Unixfs.Wrap Fixes ([ipfs/interface-go-ipfs-core#10](https://github.com/ipfs/interface-go-ipfs-core/pull/10))
1134 - tweak the Ls interface ([ipfs/interface-go-ipfs-core#14](https://github.com/ipfs/interface-go-ipfs-core/pull/14))
1135 - github.com/libp2p/go-buffer-pool:
1136 - Enable tests ([libp2p/go-buffer-pool#6](https://github.com/libp2p/go-buffer-pool/pull/6))
1137 - github.com/libp2p/go-flow-metrics:
1138 - Just repair spelling mistake ([libp2p/go-flow-metrics#3](https://github.com/libp2p/go-flow-metrics/pull/3))
1139 - github.com/libp2p/go-libp2p:
1140 - Deprecate gx in readme & link to workspace repo ([libp2p/go-libp2p#591](https://github.com/libp2p/go-libp2p/pull/591))
1141 - Respect nodial option in routed host ([libp2p/go-libp2p#590](https://github.com/libp2p/go-libp2p/pull/590))
1142 - fix panic in observed address activation check ([libp2p/go-libp2p#586](https://github.com/libp2p/go-libp2p/pull/586))
1143 - Improve observed address handling ([libp2p/go-libp2p#585](https://github.com/libp2p/go-libp2p/pull/585))
1144 - identify: avoid parsing/printing multiaddrs ([libp2p/go-libp2p#583](https://github.com/libp2p/go-libp2p/pull/583))
1145 - move things outside of the lock in obsaddr ([libp2p/go-libp2p#582](https://github.com/libp2p/go-libp2p/pull/582))
1146 - identify: be more careful about the addresses we store ([libp2p/go-libp2p#577](https://github.com/libp2p/go-libp2p/pull/577))
1147 - relay: turn autorelay into a service and always filter out relay addresses ([libp2p/go-libp2p#578](https://github.com/libp2p/go-libp2p/pull/578))
1148 - 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))
1149 - Fix broken link in README.md ([libp2p/go-libp2p#580](https://github.com/libp2p/go-libp2p/pull/580))
1150 - Link to docs & discuss in readme ([libp2p/go-libp2p#571](https://github.com/libp2p/go-libp2p/pull/571))
1151 - Reduce autorelay boot delay and correctly handle private->public transition ([libp2p/go-libp2p#570](https://github.com/libp2p/go-libp2p/pull/570))
1152 - reduce nat error level ([libp2p/go-libp2p#568](https://github.com/libp2p/go-libp2p/pull/568))
1153 - relay: simplify declaration of multiaddr var ([libp2p/go-libp2p#563](https://github.com/libp2p/go-libp2p/pull/563))
1154 - 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))
1155 - Remove jenkins column from package table ([libp2p/go-libp2p#562](https://github.com/libp2p/go-libp2p/pull/562))
1156 - Fix typos in p2p/net/README.md ([libp2p/go-libp2p#555](https://github.com/libp2p/go-libp2p/pull/555))
1157 - better nat mapping ([libp2p/go-libp2p#549](https://github.com/libp2p/go-libp2p/pull/549))
1158 - github.com/libp2p/go-libp2p-autonat:
1159 - fully close the autonat client stream ([libp2p/go-libp2p-autonat#21](https://github.com/libp2p/go-libp2p-autonat/pull/21))
1160 - parallelize dialbacks ([libp2p/go-libp2p-autonat#20](https://github.com/libp2p/go-libp2p-autonat/pull/20))
1161 - Pacify the race detector ([libp2p/go-libp2p-autonat#17](https://github.com/libp2p/go-libp2p-autonat/pull/17))
1162 - github.com/libp2p/go-libp2p-autonat-svc:
1163 - full close the autonat stream ([libp2p/go-libp2p-autonat-svc#20](https://github.com/libp2p/go-libp2p-autonat-svc/pull/20))
1164 - reduce dialback timeout to 15s ([libp2p/go-libp2p-autonat-svc#17](https://github.com/libp2p/go-libp2p-autonat-svc/pull/17))
1165 - github.com/libp2p/go-libp2p-circuit:
1166 - use buffer pool in newDelimitedReader ([libp2p/go-libp2p-circuit#71](https://github.com/libp2p/go-libp2p-circuit/pull/71))
1167 - 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))
1168 - use io.CopyBuffer with explicitly allocated buffers ([libp2p/go-libp2p-circuit#69](https://github.com/libp2p/go-libp2p-circuit/pull/69))
1169 - docs and nits ([libp2p/go-libp2p-circuit#66](https://github.com/libp2p/go-libp2p-circuit/pull/66))
1170 - github.com/libp2p/go-libp2p-kad-dht:
1171 - dialQueue: start the control loop later ([libp2p/go-libp2p-kad-dht#312](https://github.com/libp2p/go-libp2p-kad-dht/pull/312))
1172 - make it work in wasm ([libp2p/go-libp2p-kad-dht#310](https://github.com/libp2p/go-libp2p-kad-dht/pull/310))
1173 - Revert "GoModules: Checksum mismatch:" ([libp2p/go-libp2p-kad-dht#309](https://github.com/libp2p/go-libp2p-kad-dht/pull/309))
1174 - 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))
1175 - github.com/libp2p/go-libp2p-nat:
1176 - switch to libp2p's go-nat fork ([libp2p/go-libp2p-nat#16](https://github.com/libp2p/go-libp2p-nat/pull/16))
1177 - remove all uses of multiaddrs ([libp2p/go-libp2p-nat#14](https://github.com/libp2p/go-libp2p-nat/pull/14))
1178 - github.com/libp2p/go-libp2p-net:
1179 - fix WithNoDial to return the context ([libp2p/go-libp2p-net#43](https://github.com/libp2p/go-libp2p-net/pull/43))
1180 - NoDial context option ([libp2p/go-libp2p-net#42](https://github.com/libp2p/go-libp2p-net/pull/42))
1181 - github.com/libp2p/go-libp2p-peer:
1182 - 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))
1183 - github.com/libp2p/go-libp2p-peerstore:
1184 - keep temp addresses for 2 minutes ([libp2p/go-libp2p-peerstore#67](https://github.com/libp2p/go-libp2p-peerstore/pull/67))
1185 - migrate to multiformats/go-base32 ([libp2p/go-libp2p-peerstore#61](https://github.com/libp2p/go-libp2p-peerstore/pull/61))
1186 - github.com/libp2p/go-libp2p-protocol:
1187 - update readme ([libp2p/go-libp2p-protocol#6](https://github.com/libp2p/go-libp2p-protocol/pull/6))
1188 - Enable standard Travis CI tests. ([libp2p/go-libp2p-protocol#5](https://github.com/libp2p/go-libp2p-protocol/pull/5))
1189 - Fix go get address. ([libp2p/go-libp2p-protocol#4](https://github.com/libp2p/go-libp2p-protocol/pull/4))
1190 - Add MIT license ([libp2p/go-libp2p-protocol#3](https://github.com/libp2p/go-libp2p-protocol/pull/3))
1191 - Standardized Readme ([libp2p/go-libp2p-protocol#2](https://github.com/libp2p/go-libp2p-protocol/pull/2))
1192 - github.com/libp2p/go-libp2p-pubsub-router:
1193 - gx publish 0.5.17 ([libp2p/go-libp2p-pubsub-router#26](https://github.com/libp2p/go-libp2p-pubsub-router/pull/26))
1194 - github.com/libp2p/go-libp2p-quic-transport:
1195 - update quic-go to v0.11.0 ([libp2p/go-libp2p-quic-transport#54](https://github.com/libp2p/go-libp2p-quic-transport/pull/54))
1196 - github.com/libp2p/go-libp2p-routing-helpers:
1197 - fix(put): fail if any router fails ([libp2p/go-libp2p-routing-helpers#19](https://github.com/libp2p/go-libp2p-routing-helpers/pull/19))
1198 - github.com/libp2p/go-libp2p-swarm:
1199 - 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))
1200 - return all dial errors if dial has failed ([libp2p/go-libp2p-swarm#115](https://github.com/libp2p/go-libp2p-swarm/pull/115))
1201 - Differentiate no addresses error from no good addresses ([libp2p/go-libp2p-swarm#113](https://github.com/libp2p/go-libp2p-swarm/pull/113))
1202 - github.com/libp2p/go-libp2p-transport:
1203 - tests: constrain concurrency with race detector. ([libp2p/go-libp2p-transport#47](https://github.com/libp2p/go-libp2p-transport/pull/47))
1204 - pick test timeout from env var if available. ([libp2p/go-libp2p-transport#46](https://github.com/libp2p/go-libp2p-transport/pull/46))
1205 - increase test timeout. ([libp2p/go-libp2p-transport#45](https://github.com/libp2p/go-libp2p-transport/pull/45))
1206 - github.com/libp2p/go-msgio:
1207 - Improve test coverage ([libp2p/go-msgio#10](https://github.com/libp2p/go-msgio/pull/10))
1208 - github.com/libp2p/go-reuseport:
1209 - fix: add wasm build tag to wasm module ([libp2p/go-reuseport#70](https://github.com/libp2p/go-reuseport/pull/70))
1210 - github.com/libp2p/go-reuseport-transport:
1211 - don't set linger to 0 ([libp2p/go-reuseport-transport#14](https://github.com/libp2p/go-reuseport-transport/pull/14))
1212 - github.com/libp2p/go-tcp-transport:
1213 - set linger to 0 for both inbound and outbound connections ([libp2p/go-tcp-transport#36](https://github.com/libp2p/go-tcp-transport/pull/36))
1214 - github.com/libp2p/go-ws-transport:
1215 - modernize request handling ([libp2p/go-ws-transport#41](https://github.com/libp2p/go-ws-transport/pull/41))
1216
1217 ## v0.4.19 2019-03-01
1218
1219 We're happy to announce go 0.4.19. This release contains a bunch of important
1220 fixes and a slew of new and improved features. Get pumped and upgrade ASAP to benefit from all the new goodies! 🎁
1221
1222 ### Features
1223
1224 #### 🔌 Initializing With Random Ports
1225
1226 Go-ipfs can now be configured to listen on a random but _stable_ port (across
1227 restarts) using the new `randomports` configuration profile. This should be
1228 helpful when testing and/or running multiple go-ipfs instances on a single
1229 machine.
1230
1231 To initialize a go-ipfs instance with a randomly chosen port, run:
1232
1233 ```bash
1234 > ipfs init --profile=randomports
1235 ```
1236
1237 #### 👂 Gateway Directory Listing
1238
1239 IPNS (and/or DNSLink) directory listings on the gateway, e.g.
1240 https://ipfs.io/ipns/dist.ipfs.tech/go-ipfs/, will now display the _ipfs_ hash of
1241 the current directory. This way users can more easily create permanent links to
1242 otherwise mutable data.
1243
1244 #### 📡 AutoRelay and AutoNAT
1245
1246 This release introduces two new experimental features (courtesy of libp2p):
1247 AutoRelay and AutoNAT.
1248
1249 AutoRelay is a new service that automatically chooses a public relay when it
1250 detects that the go-ipfs node is behind a NAT. While relaying connections
1251 through a third-party node isn't the most efficient way to route around NATs,
1252 it's a reliable fallback.
1253
1254 To enable AutoRelay, set the `Swarm.EnableAutoRelay` option in the config.
1255
1256 AutoNAT is the service AutoRelay uses to detect if the node is behind a NAT. You
1257 don't have to set any special config flags to enable it.
1258
1259 In this same config section, you may also notice options like `EnableRelayHop`,
1260 `EnableAutoNATService`, etc. You _do not_ need to enable these:
1261
1262 * `EnableRelayHop` -- Allow _other_ nodes to use _your_ node as a relay
1263 (disabled by default).
1264 * `EnableAutoNATService` -- Help _other_ nodes detect if they're behind a NAT
1265 (disabled by default).
1266
1267 #### 📵 Offline Operation
1268
1269 There are two new "offline" features in this release: a global `--offline` flag
1270 and an option to configure the gateway to not fetch files.
1271
1272 Most go-ipfs commands now support the `--offline` flag. This causes IPFS to avoid
1273 network operations when performing the requested operation. If you've ever used
1274 the `--local` flag, the `--offline` flag is the (almost) universally supported
1275 replacement.
1276
1277 For example:
1278
1279 * If the daemon is started with `ipfs daemon --offline`, it won't even _connect_
1280 to the network. (note: this feature isn't new, just an example).
1281 * `ipfs add --offline some_file` won't send out provider records.
1282 * `ipfs cat --offline Qm...` won't fetch any blocks from the network.
1283 * `ipfs block stat --offline Qm...` is a great way to tell if a block is locally
1284 available.
1285
1286 Note: It doesn't _yet_ work with the `refs`, `urlstore`, or `tar` commands
1287 ([#6002](https://github.com/ipfs/go-ipfs/issues/6002)).
1288
1289 On to the gateway, there's a new `Gateway.NoFetch` option to configure the
1290 gateway to only serve locally present files. This makes it possible to run an
1291 IPFS node as a gateway to serve content of _your_ choosing without acting like a
1292 public proxy. 🤫
1293
1294 #### 📍 Adding And Pinning Content
1295
1296 There's a new `--pin` flag for both `ipfs block put` and `ipfs urlstore add` to
1297 match the `--pin` flag in `ipfs add`. This allows one to atomically add and pin
1298 content with these APIs.
1299
1300 **NOTE 1:** For `ipfs urlstore add`, `--pin` has been enabled _by default_ to
1301 match the behavior in `ipfs add`. However, `ipfs block put` _does not_ pin by
1302 default to match the _current_ behavior.
1303
1304 **NOTE 2:** If you had previously used the urlstore and _weren't_ explicitly
1305 pinning content after adding it, it isn't pinned and running the garbage
1306 collector will delete it. While technically documented in the `ipfs urlstore
1307 add` helptext, this behavior was non-obvious and bears mentioning.
1308
1309 #### 🗂 File Listing
1310
1311 The `ipfs ls` command has two significant changes this release: it reports
1312 _file_ sizes instead of _dag_ sizes and has gained a new `--stream` flag.
1313
1314 First up, `ipfs ls` now reports _file_ sizes instead of _dag_ sizes. Previously,
1315 for historical reasons, `ipfs ls` would report the size of a file/directory as
1316 seen by IPFS _including_ all the filesystem datastructures and metadata.
1317 However, this meant that `ls -l` and `ipfs ls` would print _different_ sizes:
1318
1319 ```bash
1320 > ipfs ls /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv
1321
1322 QmZTR5bcpQD7cFgTorqxZDYaew1Wqgfbd2ud9QqGPAkK2V 1688 about
1323 QmYCvbfNbCwFR45HiNP45rwJgvatpiW38D961L5qAhUM5Y 200 contact
1324 QmY5heUM5qgRubMDD1og9fhCPA6QdkMp3QCwd4s7gJsyE7 322 help
1325 QmejvEPop4D7YUadeGqYWmZxHhLc4JBUCzJJHWMzdcMe2y 12 ping
1326 QmXgqKTbzdh83pQtKFb19SpMCpDDcKR2ujqk3pKph9aCNF 1692 quick-start
1327 QmPZ9gcCEpqKTo6aq61g2nXGUhM4iCL3ewB6LDXZCtioEB 1102 readme
1328 QmQ5vhrL7uv6tuoN9KeVBwd4PwfQkXdVVmDLUZuTNxqgvm 1173 security-notes
1329
1330 > ipfs get /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv
1331 Saving file(s) to QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv
1332 6.39 KiB / 6.39 KiB [================================] 100.00% 0s
1333
1334 > ls -l QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv
1335 total 28
1336 -rw------- 1 user group 1677 Feb 14 17:03 about
1337 -rw------- 1 user group 189 Feb 14 17:03 contact
1338 -rw------- 1 user group 311 Feb 14 17:03 help
1339 -rw------- 1 user group 4 Feb 14 17:03 ping
1340 -rw------- 1 user group 1681 Feb 14 17:03 quick-start
1341 -rw------- 1 user group 1091 Feb 14 17:03 readme
1342 -rw------- 1 user group 1162 Feb 14 17:03 security-notes
1343 ```
1344
1345 This is now no longer the case. `ipfs ls` and `ls -l` now return the _same_
1346 sizes. 🙌
1347
1348 Second up, `ipfs ls` now has a new `--stream` flag. In IPFS, very large
1349 directories (e.g., Wikipedia) are split up into multiple chunks (shards) as
1350 there are too many entries to fit in a single block. Unfortunately, `ipfs ls`
1351 buffers the _entire_ file list in memory and then sorts it. This means that
1352 `ipfs ls /ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki` (Wikipedia)
1353 will take a _very_ long time to return anything (it'll also use quite a bit of
1354 memory).
1355
1356 However, the new `--stream` flag makes it possible to stream a directory listing
1357 as new chunks are fetched from the network. To test this, you can run `ipfs ls
1358 --stream --size=false --resolve-type=false
1359 /ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki`. You probably won't
1360 want to wait for that command to finish, Wikipedia has a _lot_ of entries. 😉
1361
1362 #### 🔁 HTTP Proxy
1363
1364 This release sees a new (experimental) feature contributed by our friends at
1365 [Peergos](https://peergos.org): HTTP proxy over libp2p. When enabled, the local
1366 gateway can act as an HTTP proxy and forward HTTP requests to libp2p peers. When
1367 combined with the `ipfs p2p` command, users can use this to expose HTTP services
1368 to other go-ipfs nodes via their gateways. For details, check out the
1369 [documentation](https://github.com/ipfs/go-ipfs/blob/master/docs/experimental-features.md#p2p-http-proxy).
1370
1371 ### Performance And Reliability
1372
1373 This release introduces quite a few performance/reliability improvements and, as
1374 usual, fixes several memory leaks. Below is a non-exhaustive list of noticeable changes.
1375
1376 #### 📞 DHT
1377
1378 This release includes an important DHT fix that should significantly:
1379
1380 1. Reduce dialing.
1381 2. Speed up DHT queries.
1382 3. Improve performance of the gateways.
1383
1384 Basically, in the worst case, a DHT query would turn into a random walk of the
1385 entire IPFS network. Yikes!
1386
1387 Relevant PR: https://github.com/libp2p/go-libp2p-kad-dht/pull/237
1388
1389 #### 🕸 Bitswap
1390
1391 Bitswap sessions have improved and are now used for _all_ requests. Sessions
1392 allow us to group related content and ask peers most likely to _have_ the
1393 content instead of broadcasting the request to all connected peers. This gives
1394 us two significant benefits:
1395
1396 1. Less wasted upload bandwidth. Instead of broadcasting which blocks we want to
1397 everyone, we can ask fewer peers thus reducing the number of requests we send
1398 out.
1399 2. Less wasted download bandwidth. Because we _know_ which peers likely have
1400 content, we can ask an individual peer for a block and expect to get an
1401 answer. In the past, we'd ask every peer at the same time to optimize for
1402 latency at the expense of bandwidth (getting the same block from multiple
1403 peers). We had to do this because we had to assume that _most_ peers didn't
1404 have the requested block.
1405
1406 #### ‼️ Pubsub
1407
1408 This release includes some significant reliability improvements in pubsub
1409 subscription handling. If you've previously had issues with connected pubsub
1410 peers _not_ seeing each-other's messages, please upgrade ASAP.
1411
1412 #### ♻️ Reuseport
1413
1414 In this release, we've rewritten our previously error-prone `go-reuseport`
1415 library to _not_ duplicate a significant portion of Go's low-level networking
1416 code. This was made possible by Go's new `Control`
1417 [`net.Dialer`](https://golang.org/pkg/net/#Dialer) option.
1418
1419 In the past, our first suggestion to anyone experiencing weird resource or
1420 connectivity issues was to disable `REUSEPORT` (set `IPFS_REUSEPORT` to false).
1421 This should no longer be necessary.
1422
1423 #### 🐺 Badger Datastore
1424
1425 [Badger has reached 1.0][badger-release]. This release brings an audit and
1426 numerous reliability fixes. We are now reasonably confident that badger will
1427 become the default datastore in a future release. 👍
1428
1429 [badger-release]: https://blog.dgraph.io/post/releasing-v1.0/
1430
1431 This release also adds a new `Truncate` configuration option for the badger
1432 datastore (enabled by default for new IPFS nodes). When enabled, badger will
1433 _delete_ any un-synced data on start instead of simply refusing to start. This
1434 should be safe on all filesystems where the `sync` operation is safe and removes
1435 the need for manual intervention when restarting an IPFS node after a crash.
1436
1437 Assuming you initialized your badger repo with `ipfs init --profile=badgerds`,
1438 you can enable truncate on an existing repo by running: `ipfs config --json
1439 "Datastore.Spec.child.truncate" true`.
1440
1441 ### Refactors and Endeavors
1442
1443 #### 🕹 Commands Library
1444
1445 The legacy commands library shim has now been completely removed. This won't
1446 mean much for many users but the go-ipfs team is happy to have this behind them.
1447
1448 #### 🌐 Base32 CIDs
1449
1450 This release can now encode CIDs in responses in bases other than base58. This
1451 is primarily useful for web-browser integration as it allows us to (a) encode
1452 CIDs in a lower-case base (e.g., base32) and then use them in the _origin_ part
1453 of URLs. The take away is: this release brings us a step closer to better
1454 browser integration.
1455
1456 Specifically, this release adds two flags:
1457
1458 1. `--cid-base`: When specified, the IPFS CLI will encode all CIDv1 CIDs using the
1459 requested base.
1460 2. `--upgrade-cidv0-in-output`: When specified, the IPFS CLI will _upgrade_ CIDv0
1461 CIDs to CIDv1 CIDs when returning them to the user. This upgrade is necessary
1462 because CIDv0 doesn't support multibase however, it's off by default as it
1463 changes the _binary_ representation of the CIDs (which could have unintended
1464 consequences).
1465
1466 #### 🎛 CoreAPI
1467
1468 The work on the CoreAPI refactor ([ipfs/go-ipfs#4498][]) has progressed leaps and
1469 bounds this release. The CoreAPI is a comprehensive programmatic interface
1470 designed to allow go-ipfs be used as a daemon or a library interchangeably.
1471
1472 As of this release, go-ipfs now has:
1473
1474 * External interface definitions in [ipfs/interface-go-ipfs-core][].
1475 * A work-in-progress implementation ([ipfs/go-ipfs-http-client][]) of these
1476 interfaces that uses the IPFS HTTP API. This will replace the
1477 ([ipfs/go-ipfs-api][]) library.
1478 * A new plugin type ["Daemon"][daemon-plugin]. Daemon plugins are started and
1479 stopped along with the go-ipfs daemon and are instantiated with a copy of the
1480 CoreAPI. This allows them to control and extend the go-ipfs daemon from within
1481 the daemon itself.
1482
1483 The next steps are:
1484
1485 1. Finishing the remaining API surface area. At the moment, the two key missing
1486 parts are:
1487 1. Config manipulation.
1488 2. The `ipfs files` API.
1489 1. Finalizing the [ipfs/go-ipfs-http-client][] implementation.
1490 2. Creating a simple way to construct and initialize a go-ipfs node when using
1491 go-ipfs as a library.
1492
1493 [ipfs/go-ipfs#4498]: https://github.com/ipfs/go-ipfs/issues/4498
1494 [ipfs/interface-go-ipfs-core]: https://github.com/ipfs/interface-go-ipfs-core
1495 [ipfs/go-ipfs-http-client]: https://github.com/ipfs/go-ipfs-http-client
1496 [ipfs/go-ipfs-api]: https://github.com/ipfs/go-ipfs-http-client
1497 [daemon-plugin]: https://github.com/ipfs/go-ipfs/blob/master/docs/plugins.md#daemon
1498
1499 ### Changelogs
1500
1501 - github.com/ipfs/go-ipfs:
1502 - fix: show interactive output from install.sh ([ipfs/go-ipfs#6024](https://github.com/ipfs/go-ipfs/pull/6024))
1503 - fix: return the shortest, completely resolved path in the resolve command ([ipfs/go-ipfs#5704](https://github.com/ipfs/go-ipfs/pull/5704))
1504 - fix a few interop test issues ([ipfs/go-ipfs#6004](https://github.com/ipfs/go-ipfs/pull/6004))
1505 - fix HAMT bookmark ln ([ipfs/go-ipfs#6005](https://github.com/ipfs/go-ipfs/pull/6005))
1506 - docs: document Gateway.NoFetch ([ipfs/go-ipfs#5999](https://github.com/ipfs/go-ipfs/pull/5999))
1507 - Improve "name publish" ttl option documentation ([ipfs/go-ipfs#5979](https://github.com/ipfs/go-ipfs/pull/5979))
1508 - fix(cmd/mv): dst filename error ([ipfs/go-ipfs#5964](https://github.com/ipfs/go-ipfs/pull/5964))
1509 - coreapi: extract interface ([ipfs/go-ipfs#5978](https://github.com/ipfs/go-ipfs/pull/5978))
1510 - coreapi: cleanup non-gx references ([ipfs/go-ipfs#5976](https://github.com/ipfs/go-ipfs/pull/5976))
1511 - coreapi: fix seek test on http impl ([ipfs/go-ipfs#5971](https://github.com/ipfs/go-ipfs/pull/5971))
1512 - block put --pin ([ipfs/go-ipfs#5969](https://github.com/ipfs/go-ipfs/pull/5969))
1513 - Port `ipfs ls` to CoreAPI ([ipfs/go-ipfs#5962](https://github.com/ipfs/go-ipfs/pull/5962))
1514 - docs: duplicate default helptext in `name publish` ([ipfs/go-ipfs#5960](https://github.com/ipfs/go-ipfs/pull/5960))
1515 - plugin: add a daemon plugin with access to the CoreAPI ([ipfs/go-ipfs#5955](https://github.com/ipfs/go-ipfs/pull/5955))
1516 - coreapi: add some seeker tests ([ipfs/go-ipfs#5934](https://github.com/ipfs/go-ipfs/pull/5934))
1517 - Refactor ipfs get to use CoreAPI ([ipfs/go-ipfs#5943](https://github.com/ipfs/go-ipfs/pull/5943))
1518 - refact(cmd/init): change string option to const ([ipfs/go-ipfs#5949](https://github.com/ipfs/go-ipfs/pull/5949))
1519 - cmds/pin: use coreapi/pin ([ipfs/go-ipfs#5843](https://github.com/ipfs/go-ipfs/pull/5843))
1520 - Only perform DNSLink lookups on fully qualified domain names (FQDN) ([ipfs/go-ipfs#5950](https://github.com/ipfs/go-ipfs/pull/5950))
1521 - Fix DontCheckOSXFUSE config command example ([ipfs/go-ipfs#5951](https://github.com/ipfs/go-ipfs/pull/5951))
1522 - refact(cmd/config): change string option to const ([ipfs/go-ipfs#5948](https://github.com/ipfs/go-ipfs/pull/5948))
1523 - clarification the document of --resolve flag in name.publish ([ipfs/go-ipfs#5651](https://github.com/ipfs/go-ipfs/pull/5651))
1524 - Drop some coreunix code ([ipfs/go-ipfs#5938](https://github.com/ipfs/go-ipfs/pull/5938))
1525 - commands: fix verbose flag ([ipfs/go-ipfs#5940](https://github.com/ipfs/go-ipfs/pull/5940))
1526 - Fixes #4558 ([ipfs/go-ipfs#5937](https://github.com/ipfs/go-ipfs/pull/5937))
1527 - Port dag commansds to CoreAPI ([ipfs/go-ipfs#5939](https://github.com/ipfs/go-ipfs/pull/5939))
1528 - mfs: make sure to flush after mv and chcid ([ipfs/go-ipfs#5936](https://github.com/ipfs/go-ipfs/pull/5936))
1529 - docs/code-flow : Add code flow documentation for add cmd. ([ipfs/go-ipfs#5864](https://github.com/ipfs/go-ipfs/pull/5864))
1530 - coreapi: few more error check fixes ([ipfs/go-ipfs#5935](https://github.com/ipfs/go-ipfs/pull/5935))
1531 - Fixed and cleaned up TestIpfsStressRead ([ipfs/go-ipfs#5920](https://github.com/ipfs/go-ipfs/pull/5920))
1532 - Clarify that chunker sizes are in bytes ([ipfs/go-ipfs#5923](https://github.com/ipfs/go-ipfs/pull/5923))
1533 - refact(cmd/patch): change string to const ([ipfs/go-ipfs#5931](https://github.com/ipfs/go-ipfs/pull/5931))
1534 - refact(cmd/object): change option string to const ([ipfs/go-ipfs#5932](https://github.com/ipfs/go-ipfs/pull/5932))
1535 - coreapi: replace coreiface.DagAPI with ipld.DAGService ([ipfs/go-ipfs#5922](https://github.com/ipfs/go-ipfs/pull/5922))
1536 - Add global option to specify the multibase encoding (server side) ([ipfs/go-ipfs#5789](https://github.com/ipfs/go-ipfs/pull/5789))
1537 - coreapi: Adjust some tests for go-ipfs-http-api ([ipfs/go-ipfs#5926](https://github.com/ipfs/go-ipfs/pull/5926))
1538 - chore: update to Web UI v2.3.3 ([ipfs/go-ipfs#5928](https://github.com/ipfs/go-ipfs/pull/5928))
1539 - ls: Report real file size ([ipfs/go-ipfs#5906](https://github.com/ipfs/go-ipfs/pull/5906))
1540 - Improve the Filestore document ([ipfs/go-ipfs#5927](https://github.com/ipfs/go-ipfs/pull/5927))
1541 - [CORS] Bubble go-ipfs-cmds 2.0.10 - Updates CORS library ([ipfs/go-ipfs#5919](https://github.com/ipfs/go-ipfs/pull/5919))
1542 - reduce verbosity of daemon start ([ipfs/go-ipfs#5904](https://github.com/ipfs/go-ipfs/pull/5904))
1543 - feat: update to Web UI v2.3.2 ([ipfs/go-ipfs#5899](https://github.com/ipfs/go-ipfs/pull/5899))
1544 - CoreAPI: Don't panic when testing incomplete implementations ([ipfs/go-ipfs#5900](https://github.com/ipfs/go-ipfs/pull/5900))
1545 - gateway: fix CORs headers ([ipfs/go-ipfs#5893](https://github.com/ipfs/go-ipfs/pull/5893))
1546 - Local Gateway option ([ipfs/go-ipfs#5649](https://github.com/ipfs/go-ipfs/pull/5649))
1547 - Show hash on gateway ([ipfs/go-ipfs#5830](https://github.com/ipfs/go-ipfs/pull/5830))
1548 - fix: ulimit docs mistake ([ipfs/go-ipfs#5894](https://github.com/ipfs/go-ipfs/pull/5894))
1549 - Move coreapi tests to the interface ([ipfs/go-ipfs#5865](https://github.com/ipfs/go-ipfs/pull/5865))
1550 - Move checkHelptextRecursive forward a bit ([ipfs/go-ipfs#5889](https://github.com/ipfs/go-ipfs/pull/5889))
1551 - coreapi/unixfs: Use path instead of raw hash in AddEvent ([ipfs/go-ipfs#5854](https://github.com/ipfs/go-ipfs/pull/5854))
1552 - Fix name resolve --offline ([ipfs/go-ipfs#5885](https://github.com/ipfs/go-ipfs/pull/5885))
1553 - testing: slow down republisher sharness test ([ipfs/go-ipfs#5856](https://github.com/ipfs/go-ipfs/pull/5856))
1554 - docs: flesh out plugin documentation ([ipfs/go-ipfs#5876](https://github.com/ipfs/go-ipfs/pull/5876))
1555 - main: move InterruptHandler to util ([ipfs/go-ipfs#5872](https://github.com/ipfs/go-ipfs/pull/5872))
1556 - make: fix building source tarball on macos ([ipfs/go-ipfs#5860](https://github.com/ipfs/go-ipfs/pull/5860))
1557 - fix config data race ([ipfs/go-ipfs#5634](https://github.com/ipfs/go-ipfs/pull/5634))
1558 - CoreAPI: Global offline option ([ipfs/go-ipfs#5825](https://github.com/ipfs/go-ipfs/pull/5825))
1559 - Update for go-ipfs-files refactor ([ipfs/go-ipfs#5661](https://github.com/ipfs/go-ipfs/pull/5661))
1560 - feat: update Web UI to v2.3.0 ([ipfs/go-ipfs#5855](https://github.com/ipfs/go-ipfs/pull/5855))
1561 - Stateful plugin loading ([ipfs/go-ipfs#4806](https://github.com/ipfs/go-ipfs/pull/4806))
1562 - startup: always load the private key ([ipfs/go-ipfs#5844](https://github.com/ipfs/go-ipfs/pull/5844))
1563 - add --dereference-args parameter ([ipfs/go-ipfs#5801](https://github.com/ipfs/go-ipfs/pull/5801))
1564 - config: document the connection manager ([ipfs/go-ipfs#5839](https://github.com/ipfs/go-ipfs/pull/5839))
1565 - add pinning support to the urlstore ([ipfs/go-ipfs#5834](https://github.com/ipfs/go-ipfs/pull/5834))
1566 - refact(cmd/cat): remove useless code ([ipfs/go-ipfs#5836](https://github.com/ipfs/go-ipfs/pull/5836))
1567 - Really run as non-root user in docker container ([ipfs/go-ipfs#5048](https://github.com/ipfs/go-ipfs/pull/5048))
1568 - README: document guix package ([ipfs/go-ipfs#5832](https://github.com/ipfs/go-ipfs/pull/5832))
1569 - docs: Improve config documentation ([ipfs/go-ipfs#5829](https://github.com/ipfs/go-ipfs/pull/5829))
1570 - block: rm extra output ([ipfs/go-ipfs#5751](https://github.com/ipfs/go-ipfs/pull/5751))
1571 - merge github-issue-guide with the issue template ([ipfs/go-ipfs#4636](https://github.com/ipfs/go-ipfs/pull/4636))
1572 - docs: fix inconsistent capitalization of "API". ([ipfs/go-ipfs#5824](https://github.com/ipfs/go-ipfs/pull/5824))
1573 - Update README.md ([ipfs/go-ipfs#5818](https://github.com/ipfs/go-ipfs/pull/5818))
1574 - CONTRIBUTING.md link ([ipfs/go-ipfs#5811](https://github.com/ipfs/go-ipfs/pull/5811))
1575 - README: Update required Go version ([ipfs/go-ipfs#5813](https://github.com/ipfs/go-ipfs/pull/5813))
1576 - p2p: report-peer-id option for listen ([ipfs/go-ipfs#5771](https://github.com/ipfs/go-ipfs/pull/5771))
1577 - really fix netcat race ([ipfs/go-ipfs#5803](https://github.com/ipfs/go-ipfs/pull/5803))
1578 - [http_proxy_over_p2p] ([ipfs/go-ipfs#5526](https://github.com/ipfs/go-ipfs/pull/5526))
1579 - coreapi/pin: Use CID's directly in maps instead of converting to string ([ipfs/go-ipfs#5809](https://github.com/ipfs/go-ipfs/pull/5809))
1580 - Gx update go-merkledag and related deps. ([ipfs/go-ipfs#5802](https://github.com/ipfs/go-ipfs/pull/5802))
1581 - cmds: rm old lib ([ipfs/go-ipfs#5786](https://github.com/ipfs/go-ipfs/pull/5786))
1582 - badger: add truncate flag ([ipfs/go-ipfs#5625](https://github.com/ipfs/go-ipfs/pull/5625))
1583 - docker: allow IPFS_PROFILE to choose the profile for `ipfs init` ([ipfs/go-ipfs#5473](https://github.com/ipfs/go-ipfs/pull/5473))
1584 - Add --stream option to `ls` command ([ipfs/go-ipfs#5611](https://github.com/ipfs/go-ipfs/pull/5611))
1585 - Switch to using request.Context() ([ipfs/go-ipfs#5782](https://github.com/ipfs/go-ipfs/pull/5782))
1586 - Update go-ipfs-delay and assoc deps ([ipfs/go-ipfs#5762](https://github.com/ipfs/go-ipfs/pull/5762))
1587 - Suppress bootstrap error ([ipfs/go-ipfs#5769](https://github.com/ipfs/go-ipfs/pull/5769))
1588 - ISSUE_TEMPLATE: move the support question comment to the very top ([ipfs/go-ipfs#5770](https://github.com/ipfs/go-ipfs/pull/5770))
1589 - cmds: use MakeTypedEncoder ([ipfs/go-ipfs#5760](https://github.com/ipfs/go-ipfs/pull/5760))
1590 - cmds/bitswap: sort wantlist ([ipfs/go-ipfs#5759](https://github.com/ipfs/go-ipfs/pull/5759))
1591 - cmds/update: use new cmds lib ([ipfs/go-ipfs#5730](https://github.com/ipfs/go-ipfs/pull/5730))
1592 - cmds/file: use new cmds lib ([ipfs/go-ipfs#5756](https://github.com/ipfs/go-ipfs/pull/5756))
1593 - cmds: remove redundant func ([ipfs/go-ipfs#5750](https://github.com/ipfs/go-ipfs/pull/5750))
1594 - commands/refs: use new cmds ([ipfs/go-ipfs#5679](https://github.com/ipfs/go-ipfs/pull/5679))
1595 - commands/pin: use new cmds lib ([ipfs/go-ipfs#5674](https://github.com/ipfs/go-ipfs/pull/5674))
1596 - commands/bootstrap: use new cmds ([ipfs/go-ipfs#5678](https://github.com/ipfs/go-ipfs/pull/5678))
1597 - fix(cmd/add): progressbar output error when input is read from stdin ([ipfs/go-ipfs#5743](https://github.com/ipfs/go-ipfs/pull/5743))
1598 - unexport GOFLAGS ([ipfs/go-ipfs#5747](https://github.com/ipfs/go-ipfs/pull/5747))
1599 - refactor(cmds): use new cmds ([ipfs/go-ipfs#5659](https://github.com/ipfs/go-ipfs/pull/5659))
1600 - commands/filestore: use new cmds lib ([ipfs/go-ipfs#5673](https://github.com/ipfs/go-ipfs/pull/5673))
1601 - Fix broken links ([ipfs/go-ipfs#5721](https://github.com/ipfs/go-ipfs/pull/5721))
1602 - fix `ipfs help` bug #5557 ([ipfs/go-ipfs#5573](https://github.com/ipfs/go-ipfs/pull/5573))
1603 - commands/bitswap: use new cmds lib ([ipfs/go-ipfs#5676](https://github.com/ipfs/go-ipfs/pull/5676))
1604 - refact(cmd/repo): repo's sub cmds uses new cmd lib ([ipfs/go-ipfs#5677](https://github.com/ipfs/go-ipfs/pull/5677))
1605 - fix the maketarball script ([ipfs/go-ipfs#5718](https://github.com/ipfs/go-ipfs/pull/5718))
1606 - output link to WebUI on daemon startup ([ipfs/go-ipfs#5729](https://github.com/ipfs/go-ipfs/pull/5729))
1607 - Move persistent datastores to plugins ([ipfs/go-ipfs#5695](https://github.com/ipfs/go-ipfs/pull/5695))
1608 - Update IPTB test ([ipfs/go-ipfs#5636](https://github.com/ipfs/go-ipfs/pull/5636))
1609 - enhance(cmd/verify): add goroutine count to improve verify speed ([ipfs/go-ipfs#5710](https://github.com/ipfs/go-ipfs/pull/5710))
1610 - Update go-mfs and go-unixfs ([ipfs/go-ipfs#5714](https://github.com/ipfs/go-ipfs/pull/5714))
1611 - fix(flag/version): flag `all` should have a higher priority ([ipfs/go-ipfs#5719](https://github.com/ipfs/go-ipfs/pull/5719))
1612 - commands/p2p: use new cmds lib ([ipfs/go-ipfs#5672](https://github.com/ipfs/go-ipfs/pull/5672))
1613 - commands/dht: use new cmds lib ([ipfs/go-ipfs#5671](https://github.com/ipfs/go-ipfs/pull/5671))
1614 - commands/object: use new cmds ([ipfs/go-ipfs#5666](https://github.com/ipfs/go-ipfs/pull/5666))
1615 - commands/files: use new cmds ([ipfs/go-ipfs#5665](https://github.com/ipfs/go-ipfs/pull/5665))
1616 - cmds/env: add a config path helper ([ipfs/go-ipfs#5712](https://github.com/ipfs/go-ipfs/pull/5712))
1617 - github.com/ipfs/dir-index-html:
1618 - show hash if given ([ipfs/dir-index-html#21](https://github.com/ipfs/dir-index-html/pull/21))
1619 - Add "jpeg" as an alias to "jpg". ([ipfs/dir-index-html#16](https://github.com/ipfs/dir-index-html/pull/16))
1620 - github.com/libp2p/go-addr-util:
1621 - Improve test coverage ([libp2p/go-addr-util#14](https://github.com/libp2p/go-addr-util/pull/14))
1622 - github.com/ipfs/go-bitswap:
1623 - fix(prq): fix a bunch of goroutine leaks and deadlocks ([ipfs/go-bitswap#87](https://github.com/ipfs/go-bitswap/pull/87))
1624 - remove allocations round two ([ipfs/go-bitswap#84](https://github.com/ipfs/go-bitswap/pull/84))
1625 - fix(bitswap): remove CancelWants function ([ipfs/go-bitswap#80](https://github.com/ipfs/go-bitswap/pull/80))
1626 - Avoid allocating for wantlist entries ([ipfs/go-bitswap#79](https://github.com/ipfs/go-bitswap/pull/79))
1627 - ci(Jenkins): remove Jenkinsfile ([ipfs/go-bitswap#83](https://github.com/ipfs/go-bitswap/pull/83))
1628 - More specific wantlists ([ipfs/go-bitswap#74](https://github.com/ipfs/go-bitswap/pull/74))
1629 - fix(wantlist): remove races on setup ([ipfs/go-bitswap#72](https://github.com/ipfs/go-bitswap/pull/72))
1630 - fix multiple data races ([ipfs/go-bitswap#76](https://github.com/ipfs/go-bitswap/pull/76))
1631 - ci: add travis ([ipfs/go-bitswap#75](https://github.com/ipfs/go-bitswap/pull/75))
1632 - providers: don't add every connected node as a provider ([ipfs/go-bitswap#59](https://github.com/ipfs/go-bitswap/pull/59))
1633 - refactor(GetBlocks): Merge session/non-session ([ipfs/go-bitswap#64](https://github.com/ipfs/go-bitswap/pull/64))
1634 - Feat: A more robust provider finder for sessions (for now) and soon for all bitswap ([ipfs/go-bitswap#60](https://github.com/ipfs/go-bitswap/pull/60))
1635 - fix(tests): stabilize session tests ([ipfs/go-bitswap#63](https://github.com/ipfs/go-bitswap/pull/63))
1636 - contexts: make sure to abort when a context is canceled ([ipfs/go-bitswap#58](https://github.com/ipfs/go-bitswap/pull/58))
1637 - fix(sessions): explicitly connect found peers ([ipfs/go-bitswap#56](https://github.com/ipfs/go-bitswap/pull/56))
1638 - Speed up sessions Round #1 ([ipfs/go-bitswap#27](https://github.com/ipfs/go-bitswap/pull/27))
1639 - Fix debug log formatting issues ([ipfs/go-bitswap#37](https://github.com/ipfs/go-bitswap/pull/37))
1640 - Feat/bandwidth limited tests ([ipfs/go-bitswap#42](https://github.com/ipfs/go-bitswap/pull/42))
1641 - fix(tests): stabilize unreliable session tests ([ipfs/go-bitswap#44](https://github.com/ipfs/go-bitswap/pull/44))
1642 - Bitswap Refactor #4: Extract session peer manager from sessions ([ipfs/go-bitswap#26](https://github.com/ipfs/go-bitswap/pull/26))
1643 - Bitswap Refactor #3: Extract sessions to package ([ipfs/go-bitswap#30](https://github.com/ipfs/go-bitswap/pull/30))
1644 - docs(comments): end comment sentences to have full-stop ([ipfs/go-bitswap#33](https://github.com/ipfs/go-bitswap/pull/33))
1645 - Bitswap Refactor #2: Extract PeerManager From Want Manager + Unit Test ([ipfs/go-bitswap#29](https://github.com/ipfs/go-bitswap/pull/29))
1646 - Bitswap Refactor #1: Session Manager & Extract Want Manager ([ipfs/go-bitswap#28](https://github.com/ipfs/go-bitswap/pull/28))
1647 - fix(Receiver): Ignore unwanted blocks ([ipfs/go-bitswap#24](https://github.com/ipfs/go-bitswap/pull/24))
1648 - feat(Benchmarks): Add real world dup blocks test ([ipfs/go-bitswap#25](https://github.com/ipfs/go-bitswap/pull/25))
1649 - Feat/bitswap pr improvements ([ipfs/go-bitswap#19](https://github.com/ipfs/go-bitswap/pull/19))
1650 - github.com/ipfs/go-blockservice:
1651 - Don't return errors on closed exchange ([ipfs/go-blockservice#15](https://github.com/ipfs/go-blockservice/pull/15))
1652 - github.com/ipfs/go-cid:
1653 - fix inline CIDs generated by Prefix.Sum ([ipfs/go-cid#84](https://github.com/ipfs/go-cid/pull/84))
1654 - Let Cid implement Binary[Un]Marshaler and Text[Un]Marshaler interfaces. ([ipfs/go-cid#81](https://github.com/ipfs/go-cid/pull/81))
1655 - fix typo in comment ([ipfs/go-cid#80](https://github.com/ipfs/go-cid/pull/80))
1656 - add codecs for Dash blocks, tx ([ipfs/go-cid#78](https://github.com/ipfs/go-cid/pull/78))
1657 - github.com/ipfs/go-cidutil:
1658 - Fix Travis CI to run all tests. ([ipfs/go-cidutil#11](https://github.com/ipfs/go-cidutil/pull/11))
1659 - Changes needed for `--cid-base` option in go-ipfs (simplified version) ([ipfs/go-cidutil#10](https://github.com/ipfs/go-cidutil/pull/10))
1660 - add a utility method for sorting CID slices ([ipfs/go-cidutil#5](https://github.com/ipfs/go-cidutil/pull/5))
1661 - github.com/libp2p/go-conn-security:
1662 - fix link to usage example in README ([libp2p/go-conn-security#4](https://github.com/libp2p/go-conn-security/pull/4))
1663 - github.com/ipfs/go-datastore:
1664 - interfaces: make GetBacked* take a Read instead of a Datastore ([ipfs/go-datastore#115](https://github.com/ipfs/go-datastore/pull/115))
1665 - remove closer type assertions ([ipfs/go-datastore#112](https://github.com/ipfs/go-datastore/pull/112))
1666 - remove io.Closer from the transaction interface ([ipfs/go-datastore#113](https://github.com/ipfs/go-datastore/pull/113))
1667 - feat(datastore): expose datastore Close() ([ipfs/go-datastore#111](https://github.com/ipfs/go-datastore/pull/111))
1668 - query: make datastore ordering act like a user would expect ([ipfs/go-datastore#110](https://github.com/ipfs/go-datastore/pull/110))
1669 - delayed: implement io.Closer and export datastore type. ([ipfs/go-datastore#108](https://github.com/ipfs/go-datastore/pull/108))
1670 - split the datastore into a read and a write interface ([ipfs/go-datastore#107](https://github.com/ipfs/go-datastore/pull/107))
1671 - Describe behavior of Batching datastores ([ipfs/go-datastore#105](https://github.com/ipfs/go-datastore/pull/105))
1672 - handle concurrent puts/deletes in BasicBatch ([ipfs/go-datastore#103](https://github.com/ipfs/go-datastore/pull/103))
1673 - add a GetSize method ([ipfs/go-datastore#99](https://github.com/ipfs/go-datastore/pull/99))
1674 - github.com/ipfs/go-ds-badger:
1675 - removed additional/wasteful Prefix conversion ([ipfs/go-ds-badger#45](https://github.com/ipfs/go-ds-badger/pull/45))
1676 - Enable Jenkins ([ipfs/go-ds-badger#35](https://github.com/ipfs/go-ds-badger/pull/35))
1677 - fix application or ordering for interface change ([ipfs/go-ds-badger#44](https://github.com/ipfs/go-ds-badger/pull/44))
1678 - Update badger ([ipfs/go-ds-badger#40](https://github.com/ipfs/go-ds-badger/pull/40))
1679 - github.com/ipfs/go-ds-flatfs:
1680 - fix a goroutine leak killing the gateways ([ipfs/go-ds-flatfs#51](https://github.com/ipfs/go-ds-flatfs/pull/51))
1681 - github.com/ipfs/go-ds-leveldb:
1682 - Expose Datastore type ([ipfs/go-ds-leveldb#20](https://github.com/ipfs/go-ds-leveldb/pull/20))
1683 - fix application or ordering for interface change ([ipfs/go-ds-leveldb#23](https://github.com/ipfs/go-ds-leveldb/pull/23))
1684 - github.com/ipfs/go-ipfs-cmds:
1685 - fix sync error with go1.12 on darwin ([ipfs/go-ipfs-cmds#147](https://github.com/ipfs/go-ipfs-cmds/pull/147))
1686 - cli: fix ignoring std{out,err} sync errors on windows ([ipfs/go-ipfs-cmds#146](https://github.com/ipfs/go-ipfs-cmds/pull/146))
1687 - roundup of cleanup fixes ([ipfs/go-ipfs-cmds#144](https://github.com/ipfs/go-ipfs-cmds/pull/144))
1688 - Update cors library ([ipfs/go-ipfs-cmds#139](https://github.com/ipfs/go-ipfs-cmds/pull/139))
1689 - expand on the api error ([ipfs/go-ipfs-cmds#138](https://github.com/ipfs/go-ipfs-cmds/pull/138))
1690 - set the connection close header if we have a body to read ([ipfs/go-ipfs-cmds#116](https://github.com/ipfs/go-ipfs-cmds/pull/116))
1691 - print a nicer error on timeout/cancel ([ipfs/go-ipfs-cmds#137](https://github.com/ipfs/go-ipfs-cmds/pull/137))
1692 - Add link traversal option ([ipfs/go-ipfs-cmds#96](https://github.com/ipfs/go-ipfs-cmds/pull/96))
1693 - Don't skip stdin test on Windows ([ipfs/go-ipfs-cmds#136](https://github.com/ipfs/go-ipfs-cmds/pull/136))
1694 - MakeTypedEncoder: accept results by pointer or value ([ipfs/go-ipfs-cmds#134](https://github.com/ipfs/go-ipfs-cmds/pull/134))
1695 - github.com/ipfs/go-ipfs-config:
1696 - Gateway.NoFetch ([ipfs/go-ipfs-config#19](https://github.com/ipfs/go-ipfs-config/pull/19))
1697 - add a Clone function ([ipfs/go-ipfs-config#16](https://github.com/ipfs/go-ipfs-config/pull/16))
1698 - randomports: give user ability to init ipfs using random port for swarm. ([ipfs/go-ipfs-config#17](https://github.com/ipfs/go-ipfs-config/pull/17))
1699 - Allow the use of the User-Agent header ([ipfs/go-ipfs-config#15](https://github.com/ipfs/go-ipfs-config/pull/15))
1700 - autorelay options ([ipfs/go-ipfs-config#21](https://github.com/ipfs/go-ipfs-config/pull/21))
1701 - profile: add badger truncate option ([ipfs/go-ipfs-config#20](https://github.com/ipfs/go-ipfs-config/pull/20))
1702 - github.com/ipfs/go-ipfs-delay:
1703 - Feat/refactor wait time ([ipfs/go-ipfs-delay#1](https://github.com/ipfs/go-ipfs-delay/pull/1))
1704 - github.com/ipfs/go-ipfs-files:
1705 - multipart: fix handling of common prefixes ([ipfs/go-ipfs-files#7](https://github.com/ipfs/go-ipfs-files/pull/7))
1706 - create implicit directories from multipart requests ([ipfs/go-ipfs-files#6](https://github.com/ipfs/go-ipfs-files/pull/6))
1707 - TarWriter ([ipfs/go-ipfs-files#4](https://github.com/ipfs/go-ipfs-files/pull/4))
1708 - Refactor filename - file relation ([ipfs/go-ipfs-files#2](https://github.com/ipfs/go-ipfs-files/pull/2))
1709 - github.com/ipfs/go-ipld-cbor:
1710 - cbor: decode undefined as null ([ipfs/go-ipld-cbor#54](https://github.com/ipfs/go-ipld-cbor/pull/54))
1711 - error when trying to encode an empty link ([ipfs/go-ipld-cbor#52](https://github.com/ipfs/go-ipld-cbor/pull/52))
1712 - test for struct with both a cid and a bigint ([ipfs/go-ipld-cbor#51](https://github.com/ipfs/go-ipld-cbor/pull/51))
1713 - github.com/ipfs/go-ipld-format:
1714 - Add a DAG walker with support for IPLD `Node`s ([ipfs/go-ipld-format#39](https://github.com/ipfs/go-ipld-format/pull/39))
1715 - Add BufferedDAG wrapping Batch as a DAGService. ([ipfs/go-ipld-format#48](https://github.com/ipfs/go-ipld-format/pull/48))
1716 - github.com/ipfs/go-ipld-git:
1717 - Fix blob marshalling ([ipfs/go-ipld-git#37](https://github.com/ipfs/go-ipld-git/pull/37))
1718 - Re-enable assertion on commit size -- it is correct after #31 ([ipfs/go-ipld-git#33](https://github.com/ipfs/go-ipld-git/pull/33))
1719 - Use OS path separator in testing, fixes #30 ([ipfs/go-ipld-git#34](https://github.com/ipfs/go-ipld-git/pull/34))
1720 - Use rawdata length for size, fixes #7 ([ipfs/go-ipld-git#31](https://github.com/ipfs/go-ipld-git/pull/31))
1721 - Cache RawData for Commit, Tag, & Tree, fixes #6 ([ipfs/go-ipld-git#28](https://github.com/ipfs/go-ipld-git/pull/28))
1722 - Precompute Blob CID, fixes #21 ([ipfs/go-ipld-git#27](https://github.com/ipfs/go-ipld-git/pull/27))
1723 - Enable Jenkins ([ipfs/go-ipld-git#29](https://github.com/ipfs/go-ipld-git/pull/29))
1724 - github.com/ipfs/go-ipns:
1725 - fix community/CONTRIBUTING.md link in README.md ([ipfs/go-ipns#20](https://github.com/ipfs/go-ipns/pull/20))
1726 - fix typo in README.md ([ipfs/go-ipns#21](https://github.com/ipfs/go-ipns/pull/21))
1727 - testing: disable inline peer ID test ([ipfs/go-ipns#19](https://github.com/ipfs/go-ipns/pull/19))
1728 - github.com/libp2p/go-libp2p:
1729 - Fixed race conditions in mock package mock_stream and mock_conn ([libp2p/go-libp2p#535](https://github.com/libp2p/go-libp2p/pull/535))
1730 - increase initial relay advertisement delay to 30s ([libp2p/go-libp2p#534](https://github.com/libp2p/go-libp2p/pull/534))
1731 - Use PeerRouting in autorelay to find relay peer addresses ([libp2p/go-libp2p#531](https://github.com/libp2p/go-libp2p/pull/531))
1732 - docs: update broken links in NEWS.md ([libp2p/go-libp2p#517](https://github.com/libp2p/go-libp2p/pull/517))
1733 - don't advertise the raw public address in autorelay ([libp2p/go-libp2p#511](https://github.com/libp2p/go-libp2p/pull/511))
1734 - mock: export ratelimiter as RateLimiter ([libp2p/go-libp2p#507](https://github.com/libp2p/go-libp2p/pull/507))
1735 - readme: remove duplicate repo entries in README and package-list.json ([libp2p/go-libp2p#506](https://github.com/libp2p/go-libp2p/pull/506))
1736 - explicit option to enable autorelay ([libp2p/go-libp2p#500](https://github.com/libp2p/go-libp2p/pull/500))
1737 - Add delay in initial relay advertisement to allow the dht time to bootstrap ([libp2p/go-libp2p#495](https://github.com/libp2p/go-libp2p/pull/495))
1738 - suppressing error msg for NoSecurity option ([libp2p/go-libp2p#498](https://github.com/libp2p/go-libp2p/pull/498))
1739 - pulling updates ([libp2p/go-libp2p#4](https://github.com/libp2p/go-libp2p/pull/4))
1740 - fix contributing link in README ([libp2p/go-libp2p#494](https://github.com/libp2p/go-libp2p/pull/494))
1741 - Fix badges and links on README.md ([libp2p/go-libp2p#485](https://github.com/libp2p/go-libp2p/pull/485))
1742 - mocknet: fix NewStream and self dials ([libp2p/go-libp2p#480](https://github.com/libp2p/go-libp2p/pull/480))
1743 - deflake identify test ([libp2p/go-libp2p#479](https://github.com/libp2p/go-libp2p/pull/479))
1744 - mocknet: use peer ID in peer address ([libp2p/go-libp2p#476](https://github.com/libp2p/go-libp2p/pull/476))
1745 - autorelay ([libp2p/go-libp2p#454](https://github.com/libp2p/go-libp2p/pull/454))
1746 - Getting updates ([libp2p/go-libp2p#3](https://github.com/libp2p/go-libp2p/pull/3))
1747 - github.com/libp2p/go-libp2p-autonat:
1748 - track autonat peer addresses ([libp2p/go-libp2p-autonat#7](https://github.com/libp2p/go-libp2p-autonat/pull/7))
1749 - github.com/libp2p/go-libp2p-circuit:
1750 - Don't log raw binary ([libp2p/go-libp2p-circuit#53](https://github.com/libp2p/go-libp2p-circuit/pull/53))
1751 - github.com/libp2p/go-libp2p-connmgr:
1752 - Fix concurrency and silence period not being honoured ([libp2p/go-libp2p-connmgr#26](https://github.com/libp2p/go-libp2p-connmgr/pull/26))
1753 - github.com/libp2p/go-libp2p-crypto:
1754 - Fix: Remove redundant Ed25519 public key (#36). ([libp2p/go-libp2p-crypto#54](https://github.com/libp2p/go-libp2p-crypto/pull/54))
1755 - libp2p badges, remove IPFS ([libp2p/go-libp2p-crypto#52](https://github.com/libp2p/go-libp2p-crypto/pull/52))
1756 - Fix broken contribute link in README ([libp2p/go-libp2p-crypto#46](https://github.com/libp2p/go-libp2p-crypto/pull/46))
1757 - forbid RSA keys smaller than 512 bits ([libp2p/go-libp2p-crypto#43](https://github.com/libp2p/go-libp2p-crypto/pull/43))
1758 - Added ECDSA; Added RSA tests; Fixed linting errors; Handling all un-handled errors ([libp2p/go-libp2p-crypto#35](https://github.com/libp2p/go-libp2p-crypto/pull/35))
1759 - switch to the go-crypto ed25519 implementation ([libp2p/go-libp2p-crypto#38](https://github.com/libp2p/go-libp2p-crypto/pull/38))
1760 - update gogo protobuf ([libp2p/go-libp2p-crypto#37](https://github.com/libp2p/go-libp2p-crypto/pull/37))
1761 - github.com/libp2p/go-libp2p-discovery:
1762 - add a timeout to Provide in routing.Advertise ([libp2p/go-libp2p-discovery#12](https://github.com/libp2p/go-libp2p-discovery/pull/12))
1763 - correctly encode ns to CID ([libp2p/go-libp2p-discovery#11](https://github.com/libp2p/go-libp2p-discovery/pull/11))
1764 - use 6hrs as ttl for routing based advertisements ([libp2p/go-libp2p-discovery#8](https://github.com/libp2p/go-libp2p-discovery/pull/8))
1765 - github.com/libp2p/go-libp2p-host:
1766 - Helper to get PeerInfo from Host ([libp2p/go-libp2p-host#20](https://github.com/libp2p/go-libp2p-host/pull/20))
1767 - github.com/libp2p/go-libp2p-kad-dht:
1768 - fix(dialQueue): account for failed dials ([libp2p/go-libp2p-kad-dht#277](https://github.com/libp2p/go-libp2p-kad-dht/pull/277))
1769 - Fix Bootstrap sub-queries ([libp2p/go-libp2p-kad-dht#264](https://github.com/libp2p/go-libp2p-kad-dht/pull/264))
1770 - dial queue: fix possible goroutine leak ([libp2p/go-libp2p-kad-dht#262](https://github.com/libp2p/go-libp2p-kad-dht/pull/262))
1771 - Alter some logging ([libp2p/go-libp2p-kad-dht#269](https://github.com/libp2p/go-libp2p-kad-dht/pull/269))
1772 - Revert #236: Test go mod in travis and use major versioning in import paths ([libp2p/go-libp2p-kad-dht#259](https://github.com/libp2p/go-libp2p-kad-dht/pull/259))
1773 - fix tests on freebsd ([libp2p/go-libp2p-kad-dht#255](https://github.com/libp2p/go-libp2p-kad-dht/pull/255))
1774 - Fix "no protocol with name dnsaddr" error ([libp2p/go-libp2p-kad-dht#247](https://github.com/libp2p/go-libp2p-kad-dht/pull/247))
1775 - Fix a race in dial queue ([libp2p/go-libp2p-kad-dht#248](https://github.com/libp2p/go-libp2p-kad-dht/pull/248))
1776 - Fix races with DialQueue variables ([libp2p/go-libp2p-kad-dht#241](https://github.com/libp2p/go-libp2p-kad-dht/pull/241))
1777 - Fix CircleCI ([libp2p/go-libp2p-kad-dht#238](https://github.com/libp2p/go-libp2p-kad-dht/pull/238))
1778 - Adaptive queue for staging dials ([libp2p/go-libp2p-kad-dht#237](https://github.com/libp2p/go-libp2p-kad-dht/pull/237))
1779 - Add the full libp2p default bootstrap peer list ([libp2p/go-libp2p-kad-dht#226](https://github.com/libp2p/go-libp2p-kad-dht/pull/226))
1780 - Revert "Tidy up bootstrapping" ([libp2p/go-libp2p-kad-dht#232](https://github.com/libp2p/go-libp2p-kad-dht/pull/232))
1781 - Tidy up bootstrapping ([libp2p/go-libp2p-kad-dht#225](https://github.com/libp2p/go-libp2p-kad-dht/pull/225))
1782 - Revert "Remove signal bootstrapping" ([libp2p/go-libp2p-kad-dht#227](https://github.com/libp2p/go-libp2p-kad-dht/pull/227))
1783 - Remove signal bootstrapping ([libp2p/go-libp2p-kad-dht#224](https://github.com/libp2p/go-libp2p-kad-dht/pull/224))
1784 - fix a potential DHT query hang ([libp2p/go-libp2p-kad-dht#219](https://github.com/libp2p/go-libp2p-kad-dht/pull/219))
1785 - docs: duplicate pkg documentation ([libp2p/go-libp2p-kad-dht#218](https://github.com/libp2p/go-libp2p-kad-dht/pull/218))
1786 - tests: skip key inlining test ([libp2p/go-libp2p-kad-dht#212](https://github.com/libp2p/go-libp2p-kad-dht/pull/212))
1787 - Rephrase "betterPeersToQuery" method comment to be less cryptic ([libp2p/go-libp2p-kad-dht#206](https://github.com/libp2p/go-libp2p-kad-dht/pull/206))
1788 - github.com/libp2p/go-libp2p-loggables:
1789 - test: add unit tests ([libp2p/go-libp2p-loggables#21](https://github.com/libp2p/go-libp2p-loggables/pull/21))
1790 - github.com/libp2p/go-libp2p-netutil:
1791 - Add tests ([libp2p/go-libp2p-netutil#28](https://github.com/libp2p/go-libp2p-netutil/pull/28))
1792 - github.com/libp2p/go-libp2p-peer:
1793 - fix: re-enable peer ID inlining but make it configurable ([libp2p/go-libp2p-peer#42](https://github.com/libp2p/go-libp2p-peer/pull/42))
1794 - Protobuf and JSON (un-)marshalling methods for peer.ID ([libp2p/go-libp2p-peer#41](https://github.com/libp2p/go-libp2p-peer/pull/41))
1795 - disable key inlining ([libp2p/go-libp2p-peer#40](https://github.com/libp2p/go-libp2p-peer/pull/40))
1796 - github.com/libp2p/go-libp2p-peerstore:
1797 - Add unit test to verify AddAddr doesn't shorten TTL ([libp2p/go-libp2p-peerstore#52](https://github.com/libp2p/go-libp2p-peerstore/pull/52))
1798 - disable inline-peer id test ([libp2p/go-libp2p-peerstore#49](https://github.com/libp2p/go-libp2p-peerstore/pull/49))
1799 - README: Update contributing guideline linkrot. ([libp2p/go-libp2p-peerstore#48](https://github.com/libp2p/go-libp2p-peerstore/pull/48))
1800 - Deterministic benchmark order; Keybook interface benchmarks ([libp2p/go-libp2p-peerstore#43](https://github.com/libp2p/go-libp2p-peerstore/pull/43))
1801 - PeerInfo UnMarshal Error #393 ([libp2p/go-libp2p-peerstore#45](https://github.com/libp2p/go-libp2p-peerstore/pull/45))
1802 - fix the inline key test ([libp2p/go-libp2p-peerstore#44](https://github.com/libp2p/go-libp2p-peerstore/pull/44))
1803 - github.com/libp2p/go-libp2p-pubsub:
1804 - move timecache check/update after validation ([libp2p/go-libp2p-pubsub#156](https://github.com/libp2p/go-libp2p-pubsub/pull/156))
1805 - fix nonsensical check ([libp2p/go-libp2p-pubsub#154](https://github.com/libp2p/go-libp2p-pubsub/pull/154))
1806 - Extend validator interface to include message source ([libp2p/go-libp2p-pubsub#151](https://github.com/libp2p/go-libp2p-pubsub/pull/151))
1807 - Implement peer blacklist ([libp2p/go-libp2p-pubsub#149](https://github.com/libp2p/go-libp2p-pubsub/pull/149))
1808 - make timecache duration configurable ([libp2p/go-libp2p-pubsub#148](https://github.com/libp2p/go-libp2p-pubsub/pull/148))
1809 - godoc is not html either ([libp2p/go-libp2p-pubsub#147](https://github.com/libp2p/go-libp2p-pubsub/pull/147))
1810 - godoc documentation is not markdown ([libp2p/go-libp2p-pubsub#146](https://github.com/libp2p/go-libp2p-pubsub/pull/146))
1811 - Add documentation for subscribe's non-instantaneous semantics ([libp2p/go-libp2p-pubsub#145](https://github.com/libp2p/go-libp2p-pubsub/pull/145))
1812 - Some documentation ([libp2p/go-libp2p-pubsub#140](https://github.com/libp2p/go-libp2p-pubsub/pull/140))
1813 - rework peer tracking logic to handle multiple connections ([libp2p/go-libp2p-pubsub#132](https://github.com/libp2p/go-libp2p-pubsub/pull/132))
1814 - github.com/libp2p/go-libp2p-pubsub-router:
1815 - encode record-store keys in pubsub ([libp2p/go-libp2p-pubsub-router#17](https://github.com/libp2p/go-libp2p-pubsub-router/pull/17))
1816 - github.com/libp2p/go-libp2p-quic-transport:
1817 - fix badges in README ([libp2p/go-libp2p-quic-transport#39](https://github.com/libp2p/go-libp2p-quic-transport/pull/39))
1818 - Fix missing transport parameter in dialed connection ([libp2p/go-libp2p-quic-transport#38](https://github.com/libp2p/go-libp2p-quic-transport/pull/38))
1819 - github.com/libp2p/go-libp2p-routing:
1820 - Update the comment on IpfsRouting.Bootstrap ([libp2p/go-libp2p-routing#36](https://github.com/libp2p/go-libp2p-routing/pull/36))
1821 - github.com/libp2p/go-libp2p-swarm:
1822 - Make FD limits configurable by environment property ([libp2p/go-libp2p-swarm#102](https://github.com/libp2p/go-libp2p-swarm/pull/102))
1823 - Fix logging race ([libp2p/go-libp2p-swarm#100](https://github.com/libp2p/go-libp2p-swarm/pull/100))
1824 - Add CircleCI config ([libp2p/go-libp2p-swarm#99](https://github.com/libp2p/go-libp2p-swarm/pull/99))
1825 - Enhance debug logging in dial limiter ([libp2p/go-libp2p-swarm#98](https://github.com/libp2p/go-libp2p-swarm/pull/98))
1826 - dialer: handle dial cancel and/or completion before trying new addresses ([libp2p/go-libp2p-swarm#96](https://github.com/libp2p/go-libp2p-swarm/pull/96))
1827 - avoid spawning goroutines for canceled dials ([libp2p/go-libp2p-swarm#95](https://github.com/libp2p/go-libp2p-swarm/pull/95))
1828 - warn when we encounter a useless transport ([libp2p/go-libp2p-swarm#90](https://github.com/libp2p/go-libp2p-swarm/pull/90))
1829 - github.com/libp2p/go-libp2p-transport:
1830 - fix transport tests for quic ([libp2p/go-libp2p-transport#39](https://github.com/libp2p/go-libp2p-transport/pull/39))
1831 - fix: fully close streams before returning ([libp2p/go-libp2p-transport#37](https://github.com/libp2p/go-libp2p-transport/pull/37))
1832 - fix typo in README ([libp2p/go-libp2p-transport#36](https://github.com/libp2p/go-libp2p-transport/pull/36))
1833 - github.com/libp2p/go-libp2p-transport-upgrader:
1834 - annotate errors ([libp2p/go-libp2p-transport-upgrader#11](https://github.com/libp2p/go-libp2p-transport-upgrader/pull/11))
1835 - github.com/ipfs/go-log:
1836 - uglify the (event) logs ([ipfs/go-log#53](https://github.com/ipfs/go-log/pull/53))
1837 - add environment variable for writing tracing information to a file ([ipfs/go-log#52](https://github.com/ipfs/go-log/pull/52))
1838 - correctly display the line number when FinishWithErr fails ([ipfs/go-log#51](https://github.com/ipfs/go-log/pull/51))
1839 - github.com/libp2p/go-maddr-filter:
1840 - test: extend test to improve coverage ([libp2p/go-maddr-filter#7](https://github.com/libp2p/go-maddr-filter/pull/7))
1841 - github.com/ipfs/go-merkledag:
1842 - Increase FetchGraphConcurrency to 32 ([ipfs/go-merkledag#29](https://github.com/ipfs/go-merkledag/pull/29))
1843 - Enable CI ([ipfs/go-merkledag#9](https://github.com/ipfs/go-merkledag/pull/9))
1844 - fix a fetch deadlock on error ([ipfs/go-merkledag#21](https://github.com/ipfs/go-merkledag/pull/21))
1845 - Wait for all go routines to finish before function returns ([ipfs/go-merkledag#19](https://github.com/ipfs/go-merkledag/pull/19))
1846 - github.com/ipfs/go-metrics-prometheus:
1847 - use Prometheus instead of gxed ([ipfs/go-metrics-prometheus#3](https://github.com/ipfs/go-metrics-prometheus/pull/3))
1848 - github.com/ipfs/go-mfs:
1849 - fix(mv): dst filename error ([ipfs/go-mfs#62](https://github.com/ipfs/go-mfs/pull/62))
1850 - fix over-wait in WaitPub ([ipfs/go-mfs#53](https://github.com/ipfs/go-mfs/pull/53))
1851 - Fix/32/pr ports from go-ipfs to go-mfs ([ipfs/go-mfs#49](https://github.com/ipfs/go-mfs/pull/49))
1852 - remove the `fullSync` option from `updateChildEntry` ([ipfs/go-mfs#45](https://github.com/ipfs/go-mfs/pull/45))
1853 - Various refactorings ([ipfs/go-mfs#36](https://github.com/ipfs/go-mfs/pull/36))
1854 - use RW lock for the `File`'s lock ([ipfs/go-mfs#43](https://github.com/ipfs/go-mfs/pull/43))
1855 - add documentation links in README ([ipfs/go-mfs#41](https://github.com/ipfs/go-mfs/pull/41))
1856 - [WIP] documentation notes ([ipfs/go-mfs#27](https://github.com/ipfs/go-mfs/pull/27))
1857 - feat(inode): add inode struct ([ipfs/go-mfs#12](https://github.com/ipfs/go-mfs/pull/12))
1858 - github.com/libp2p/go-mplex:
1859 - fix deadlock ([libp2p/go-mplex#39](https://github.com/libp2p/go-mplex/pull/39))
1860 - When a stream is closed, cancel pending writes ([libp2p/go-mplex#35](https://github.com/libp2p/go-mplex/pull/35))
1861 - make sure to but the buffer back in the pool ([libp2p/go-mplex#34](https://github.com/libp2p/go-mplex/pull/34))
1862 - reduce the packet count ([libp2p/go-mplex#29](https://github.com/libp2p/go-mplex/pull/29))
1863 - github.com/ipfs/go-path:
1864 - fix: no components error ([ipfs/go-path#18](https://github.com/ipfs/go-path/pull/18))
1865 - nit: validate CIDs in IPLD paths ([ipfs/go-path#16](https://github.com/ipfs/go-path/pull/16))
1866 - github.com/libp2p/go-reuseport:
1867 - Fix build on wasm ([libp2p/go-reuseport#59](https://github.com/libp2p/go-reuseport/pull/59))
1868 - Use Go Control API ([libp2p/go-reuseport#56](https://github.com/libp2p/go-reuseport/pull/56))
1869 - Support WASM ([libp2p/go-reuseport#54](https://github.com/libp2p/go-reuseport/pull/54))
1870 - github.com/libp2p/go-reuseport-transport:
1871 - Update to go-reuseport 0.2.0 ([libp2p/go-reuseport-transport#6](https://github.com/libp2p/go-reuseport-transport/pull/6))
1872 - github.com/libp2p/go-stream-muxer:
1873 - add standard reset error ([libp2p/go-stream-muxer#23](https://github.com/libp2p/go-stream-muxer/pull/23))
1874 - ci: fix ([libp2p/go-stream-muxer#24](https://github.com/libp2p/go-stream-muxer/pull/24))
1875 - Document Reset versus Close ([libp2p/go-stream-muxer#18](https://github.com/libp2p/go-stream-muxer/pull/18))
1876 - WIP document Conn.Close ([libp2p/go-stream-muxer#19](https://github.com/libp2p/go-stream-muxer/pull/19))
1877 - github.com/libp2p/go-tcp-transport:
1878 - Deprecate IPFS_REUSEPORT, use LIBP2P_TCP_REUSEPORT ([libp2p/go-tcp-transport#27](https://github.com/libp2p/go-tcp-transport/pull/27))
1879 - github.com/ipfs/go-unixfs:
1880 - unixfile: precalc dir size ([ipfs/go-unixfs#61](https://github.com/ipfs/go-unixfs/pull/61))
1881 - Archive refactor ([ipfs/go-unixfs#59](https://github.com/ipfs/go-unixfs/pull/59))
1882 - decouple the DAG traversal logic from the DAG reader (local branch) ([ipfs/go-unixfs#60](https://github.com/ipfs/go-unixfs/pull/60))
1883 - Unixfs: enforce refs on files when using nocopy ([ipfs/go-unixfs#56](https://github.com/ipfs/go-unixfs/pull/56))
1884 - Fix/handle overflow ([ipfs/go-unixfs#53](https://github.com/ipfs/go-unixfs/pull/53))
1885 - feat(Directory): Add EnumLinksAsync method ([ipfs/go-unixfs#39](https://github.com/ipfs/go-unixfs/pull/39))
1886
1887 ## v0.4.18 2018-10-26
1888
1889 This is probably one of the largest go-ipfs releases in recent history, 3 months
1890 in the making.
1891
1892 ### Features
1893
1894 The headline features this release are experimental QUIC support, the gossipsub
1895 pubsub routing algorithm, pubsub message signing, and a refactored `ipfs p2p`
1896 command. However, that's just scratching the surface.
1897
1898 #### QUIC
1899
1900 First up, on the networking front, this release has also introduced experimental
1901 support for the QUIC protocol. QUIC is a new UDP-based network transport that
1902 solves many of the long standing issues with TCP.
1903
1904 For us, this means (eventually):
1905
1906 * **Fewer local resources.** TCP requires a file-descriptor per connection while
1907 QUIC (and most UDP based transports) can share a single file descriptor
1908 between all connections. This should allow us to dial faster and keep more
1909 connections open.
1910 * **Faster connection establishment.** When client authentication is included,
1911 QUIC has a three-way handshake like TCP. However, unlike TCP, this handshake
1912 brings us from all the way from 0 to a fully encrypted, authenticated, and
1913 multiplexed connection. In theory (not yet in practice), this should
1914 significantly reduce the latency of DHT queries.
1915 * **Behaves better on lossy networks.** When multiplexing multiple requests over
1916 a single TCP connection, a single dropped packet will bring the entire
1917 connection to a halt while the packet is re-transmitted. However, because QUIC
1918 handles multiplexing internally, dropping a single packets affects only the
1919 related stream.
1920 * **Better NAT traversal.** TL;DR: NAT hole-punching is significantly easier
1921 and, in many cases, more reliable with UDP than with TCP.
1922
1923 However, we still have a long way to go. While we encourage users to test this,
1924 the IETF QUIC protocol is still being actively developed and *will* change. You
1925 can find instructions for enabling it
1926 [here](https://github.com/ipfs/go-ipfs/blob/master/docs/experimental-features.md#QUIC).
1927
1928 #### Pubsub
1929
1930 In terms of pubsub, go-ipfs now supports the gossipsub routing algorithm and
1931 message signing.
1932
1933 The gossipsub routing algorithm is *significantly* more efficient than the
1934 current floodsub routing algorithm. Even better, it's fully backwards compatible
1935 so you can enable it and still talk to nodes using the floodsub algorithm. You
1936 can find instructions to enable gossipsub in go-ipfs
1937 [here](https://github.com/ipfs/go-ipfs/blob/master/docs/experimental-features.md#gossipsub).
1938
1939 Messages are now signed by their authors. While signing has now been enabled by
1940 default, strict signature verification has not been and will not be for at least
1941 one release (probably multiple) to avoid breaking existing applications. You can
1942 read about how to configure this feature
1943 [here](https://github.com/ipfs/go-ipfs/blob/master/docs/experimental-features.md#message-signing).
1944
1945 #### Commands
1946
1947 In terms of new toys, this release introduces a new `ipfs cid` subcommand for
1948 working with CIDs, a completely refactored `ipfs p2p` command, streaming name
1949 resolution, and complete inline block support.
1950
1951 The new `ipfs cid` command allows users to both inspect CIDs and convert them
1952 between various formats and versions. For example:
1953
1954 ```sh
1955 # Print out the CID metadata (prefix)
1956 > ipfs cid format -f %P QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
1957 cidv0-protobuf-sha2-256-32
1958
1959 # Get the hex sha256 hash from the CID.
1960 > ipfs cid format -b base16 -f '0x%D' QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
1961 0x46d44814b9c5af141c3aaab7c05dc5e844ead5f91f12858b021eba45768b4c0e
1962
1963 # Convert a base58 v0 CID to a base32 v1 CID.
1964 > ipfs cid base32 QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
1965 bafybeicg2rebjoofv4kbyovkw7af3rpiitvnl6i7ckcywaq6xjcxnc2mby
1966 ```
1967
1968 The refactored `ipfs p2p` command allows forwarding TCP streams through two IPFS
1969 nodes from one host to another. It's `ssh -L` but for IPFS. You can find
1970 documentation
1971 [here](https://github.com/ipfs/go-ipfs/blob/master/docs/experimental-features.md#ipfs-p2p).
1972 It's still experimental but we don't expect too many breaking changes at this
1973 point (it will very likely be stabilized in the next release). Quick summary of
1974 breaking changes:
1975
1976 * We don't stop listening for local (forwarded) connections after accepting a
1977 single connection.
1978 * `ipfs p2p stream ls` output now returns more useful output, first address is
1979 always the initiator address.
1980 * `ipfs p2p listener ls` is renamed to `ipfs p2p ls`
1981 * `ipfs p2p listener close` is renamed to `ipfs p2p close`
1982 * Protocol names have to be prefixed with `/x/` and are now just passed to
1983 libp2p as handler name. Previous version did this 'under the hood' and with
1984 `/p2p/` prefix. There is a `--allow-custom-protocol` flag which allows you
1985 to use any libp2p handler name.
1986 * `ipfs p2p listener open` and `ipfs p2p stream dial` got renamed:
1987 * `ipfs p2p listener open p2p-test /ip4/127.0.0.1/tcp/10101`
1988 new becomes `ipfs p2p listen /x/p2p-test /ip4/127.0.0.1/tcp/10101`
1989 * `ipfs p2p stream dial $NODE_A_PEERID p2p-test /ip4/127.0.0.1/tcp/10102`
1990 is now `ipfs p2p forward /x/p2p-test /ip4/127.0.0.1/tcp/10102 /ipfs/$NODE_A_PEERID`
1991
1992 There is now a new flag for `ipfs name resolve` - `--stream`. When the command
1993 is invoked with the flag set, it will start returning results as soon as they
1994 are discovered in the DHT and other routing mechanisms. This enables certain
1995 applications to start prefetching/displaying data while the discovery is still
1996 running. Note that this command will likely return many outdated records
1997 before it finding and returning the latest. However, it will always return
1998 *valid* records (even if a bit stale).
1999
2000 Finally, in the previous release, we added support for extracting blocks inlined
2001 into CIDs. In this release, we've added support for creating these CIDs. You can
2002 now run `ipfs add` with the `--inline` flag to inline blocks less than or equal
2003 to 32 bytes in length into a CID, instead of writing an actual block. This
2004 should significantly reduce the size of filesystem trees with many empty
2005 directories and tiny files.
2006
2007 #### IPNS
2008
2009 You can now publish and resolve paths with namespaces *other* than `/ipns` and
2010 `/ipfs` through IPNS. Critically, IPNS can now be used with IPLD paths (paths
2011 starting with `/ipld`).
2012
2013 #### WebUI
2014
2015 Finally, this release includes the shiny [updated
2016 webui](https://github.com/ipfs-shipyard/ipfs-webui). You can view it by
2017 installing go-ipfs and visiting http://localhost:5001/webui.
2018
2019 ### Performance
2020
2021 This release includes some significant performance improvements, both in terms
2022 of resource utilization and speed. This section will go into some technical
2023 details so feel free to skip it if you're just looking for shiny new features.
2024
2025 #### Resource Utilization
2026
2027 In this release, we've (a) fixed a slow memory leak in libp2p and (b)
2028 significantly reduced the allocation load. Together, these should improve both
2029 memory and CPU usage.
2030
2031 ##### Datastructures
2032
2033 We've changed two of our most frequently used datastructures, CIDs and
2034 Multiaddrs, to reduce allocation load.
2035
2036 First, we now store CIDs *encode* as strings, instead of decoded in structs
2037 (behind pointers). In addition to being more compact, our `Cid` type is now a
2038 valid `map` key so we no longer have to encode CIDs every time we want to use
2039 them in a map/set. Allocations when inserting CIDs into maps/sets was showing up
2040 as a significant source of allocations under heavy load so this change should
2041 improve memory usage.
2042
2043 Second, we've changed many of our multiaddr parsing/processing/formatting
2044 functions to allocate less. Much of our DHT related-work includes processing
2045 multiaddrs so this should reduce CPU utilization when heavily using the DHT.
2046
2047 ##### Streams and Yamux
2048
2049 Streams have always plagued us in terms of memory utilization. This was
2050 partially solved by introducing the connection manager, keeping our maximum
2051 connection count to a reasonable number but they're still a major memory sink.
2052
2053 This release sees two improvements on this front:
2054
2055 1. A memory [leak in identify](https://github.com/libp2p/go-libp2p/issues/419)
2056 has been fixed. This was slowly causing us to leak connections (locking up
2057 the memory used by the connections' streams).
2058 2. Yamux streams now use a buffer-pool backed, auto shrinking read buffer.
2059 Before, this read buffer would grow to its maximum size (a few megabytes) and
2060 never shrink but these buffers now shrink as they're emptied.
2061
2062 #### Bitswap Performance
2063
2064 Bitswap will now pack *multiple* small blocks into a single message thanks
2065 [ipfs/go-bitswap#5](https://github.com/ipfs/go-bitswap/pull/5). While this won't
2066 help when transferring large files (with large blocks), this should help when
2067 transferring many tiny files.
2068
2069 ### Refactors and Endeavors
2070
2071 This release saw yet another commands-library refactor, work towards the
2072 CoreAPI, and the first step towards reliable base32 CID support.
2073
2074 #### Commands Lib
2075
2076 We've completely refactored our commands library (again). While it still needs
2077 quite a bit of work, it now requires significantly less boilerplate and should
2078 be significantly more robust. The refactor immediately found two broken tests
2079 and probably fixed quite a few bugs around properly returning and handling
2080 errors.
2081
2082 #### CoreAPI
2083
2084 CoreAPI is a new way to interact with IPFS from Go. While it's still not
2085 final, most things you can do via the CLI or HTTP interfaces, can now be done
2086 through the new API.
2087
2088 Currently there is only one implementation, backed by go-ipfs node, and there are
2089 plans to start http-api backed one soon. We are also looking into creating RPC
2090 interface using this API, which could help performance in some use cases.
2091
2092 You can track progress in https://github.com/ipfs/go-ipfs/issues/4498
2093
2094 #### IPLD paths
2095
2096 We introduced new path type which introduces distinction between IPLD and
2097 IPFS (unixfs) paths. From now on paths prefixed with `/ipld/` will always
2098 use IPLD link traversal and `/ipfs/` will use unixfs path resolver, which
2099 takes things like sharding into account.
2100
2101 Note that this is only initial support and there likely are some bugs in
2102 how the paths are handled internally, so consider this feature
2103 experimental for now.
2104
2105 #### CIDv1/Base32 Migration
2106
2107 Currently, IPFS is usually used in browsers by browsing to
2108 `https://SOME_GATEWAY/ipfs/CID/...`. There are two significant drawbacks to this
2109 approach:
2110
2111 1. From a browser security standpoint, all IPFS "sites" will live under the same
2112 origin (SOME_GATEWAY).
2113 2. From a UX standpoint, this doesn't feel very "native" (even if the gateway is
2114 a local IPFS node).
2115
2116 To fix the security issue, we intend to switch IPFS gateway links
2117 `https://ipfs.io/ipfs/CID` to `https://CID.ipfs.dweb.link`. This way, the CID
2118 will be a part of the
2119 ["origin"](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin) so
2120 each IPFS website will get a separate security origin.
2121
2122 To fix the UX issue, we've been working on adding support for `ipfs://CID/...`
2123 to web browsers through our
2124 [ipfs-companion](https://github.com/ipfs/ipfs-companion/) add-on and some new,
2125 experimental extension APIs from Mozilla. This has the same effect of putting
2126 the CID in the URL origin but has the added benefit of looking "native".
2127
2128 Unfortunately, origins must be *case insensitive*. Currently, most CIDs users
2129 see are *CIDv0* CIDs (those starting with `Qm`) which are *always* base58
2130 encoded and are therefore case-sensitive.
2131
2132 Fortunately, CIDv1 (the latest CID format) supports arbitrary bases using the
2133 [multibase](https://github.com/multiformats/multibase/) standard. Unfortunately,
2134 IPFS has always treated equivalent CIDv0 and CIDv1 CIDs as distinct. This means
2135 that files added with CIDv0 CIDs (the default) can't be looked up using the
2136 equivalent CIDv1.
2137
2138 This release makes some significant progress towards solving this issue by
2139 introducing two features:
2140
2141 (1) The previous mentioned `ipfs cid base32` command for converting CID to a
2142 case intensive encoding required by domain names. This command converts a CID to
2143 version 1 and encodes it using base32.
2144
2145 (2) A hack to allow locally looking up blocks associated with a CIDv0 CID using
2146 the equivalent CIDv1 CID (or the reverse). This hack will eventually
2147 be replaced with a multihash indexed blockstore, which is agnostic to both the
2148 CID version and multicodec content type.
2149
2150 ### go-ipfs changelog
2151
2152 Features (i.e., users take heed):
2153 - gossipsub ([ipfs/go-ipfs#5373](https://github.com/ipfs/go-ipfs/pull/5373))
2154 - support /ipfs/CID in `ipfs dht findprovs` ([ipfs/go-ipfs#5329](https://github.com/ipfs/go-ipfs/pull/5329))
2155 - return a json object from config show ([ipfs/go-ipfs#5345](https://github.com/ipfs/go-ipfs/pull/5345))
2156 - Set filename in Content-Disposition if filename=x is passed in URI query ([ipfs/go-ipfs#4177](https://github.com/ipfs/go-ipfs/pull/4177))
2157 - Allow mfs files.write command to create parent directories ([ipfs/go-ipfs#5359](https://github.com/ipfs/go-ipfs/pull/5359))
2158 - Run DNS lookup for --api endpoint provided in CLI ([ipfs/go-ipfs#5372](https://github.com/ipfs/go-ipfs/pull/5372))
2159 - Add support for inlinling blocks into CIDs the id-hash ([ipfs/go-ipfs#5281](https://github.com/ipfs/go-ipfs/pull/5281))
2160 - depth limited refs -r ([ipfs/go-ipfs#5337](https://github.com/ipfs/go-ipfs/pull/5337))
2161 - remove bitswap unwant ([ipfs/go-ipfs#5308](https://github.com/ipfs/go-ipfs/pull/5308))
2162 - add experimental QUIC support ([ipfs/go-ipfs#5350](https://github.com/ipfs/go-ipfs/pull/5350))
2163 - add a --stdin-name flag for naming files from stdin ([ipfs/go-ipfs#5399](https://github.com/ipfs/go-ipfs/pull/5399))
2164 - Refactor `ipfs p2p` ([ipfs/go-ipfs#4929](https://github.com/ipfs/go-ipfs/pull/4929))
2165 - add dns support in`ipfs p2p forward` and refactor code ([ipfs/go-ipfs#5533](https://github.com/ipfs/go-ipfs/pull/5533))
2166 - feat(command): expose connection direction ([ipfs/go-ipfs#5457](https://github.com/ipfs/go-ipfs/pull/5457))
2167 - error when publishing ipns records without a running daemon ([ipfs/go-ipfs#5477](https://github.com/ipfs/go-ipfs/pull/5477))
2168 - feat(daemon): print version on start ([ipfs/go-ipfs#5503](https://github.com/ipfs/go-ipfs/pull/5503))
2169 - add quieter option to name publish ([ipfs/go-ipfs#5494](https://github.com/ipfs/go-ipfs/pull/5494))
2170 - Provide new "cid" sub-command. ([ipfs/go-ipfs#5385](https://github.com/ipfs/go-ipfs/pull/5385))
2171 - feat(command): add force flag for files rm ([ipfs/go-ipfs#5555](https://github.com/ipfs/go-ipfs/pull/5555))
2172 - Add support for datastore plugins ([ipfs/go-ipfs#5187](https://github.com/ipfs/go-ipfs/pull/5187))
2173 - files ls: append slash to directory names ([ipfs/go-ipfs#5605](https://github.com/ipfs/go-ipfs/pull/5605))
2174 - ipfs name resolve --stream ([ipfs/go-ipfs#5404](https://github.com/ipfs/go-ipfs/pull/5404))
2175 - update webui to 2.1.0 ([ipfs/go-ipfs#5627](https://github.com/ipfs/go-ipfs/pull/5627))
2176 - feat: add dry-run flag for config profile apply command ([ipfs/go-ipfs#5455](https://github.com/ipfs/go-ipfs/pull/5455))
2177 - configurable pubsub signing ([ipfs/go-ipfs#5647](https://github.com/ipfs/go-ipfs/pull/5647))
2178
2179 Fixes (i.e., users take note):
2180 - pin update fixes ([ipfs/go-ipfs#5265](https://github.com/ipfs/go-ipfs/pull/5265))
2181 - Fix inability to pin two things at once ([ipfs/go-ipfs#5512](https://github.com/ipfs/go-ipfs/pull/5512))
2182 - wait for all connections to close before exiting on shutdown. ([ipfs/go-ipfs#5322](https://github.com/ipfs/go-ipfs/pull/5322))
2183 - Fixed ipns address resolution in fuse unix mount ([ipfs/go-ipfs#5384](https://github.com/ipfs/go-ipfs/pull/5384))
2184 - core/commands/ls: wrap `NewDirectoryFromNode` error ([ipfs/go-ipfs#5166](https://github.com/ipfs/go-ipfs/pull/5166))
2185 - fix goroutine leaks in filestore.go ([ipfs/go-ipfs#5427](https://github.com/ipfs/go-ipfs/pull/5427))
2186 - move VersionOption after GatewayOption to fix #5422 ([ipfs/go-ipfs#5424](https://github.com/ipfs/go-ipfs/pull/5424))
2187 - fix(commands): fix filestore.go goroutine leak ([ipfs/go-ipfs#5439](https://github.com/ipfs/go-ipfs/pull/5439))
2188 - fix(commands): goroutine leaks in ping.go ([ipfs/go-ipfs#5444](https://github.com/ipfs/go-ipfs/pull/5444))
2189 - fix output of object command ([ipfs/go-ipfs#5459](https://github.com/ipfs/go-ipfs/pull/5459))
2190 - add warning when no bootstrap in config ([ipfs/go-ipfs#5445](https://github.com/ipfs/go-ipfs/pull/5445))
2191 - fix behaviour of key rename to same name ([ipfs/go-ipfs#5465](https://github.com/ipfs/go-ipfs/pull/5465))
2192 - fix(object): print object diff error ([ipfs/go-ipfs#5469](https://github.com/ipfs/go-ipfs/pull/5469))
2193 - fix(pin): goroutine leaks ([ipfs/go-ipfs#5453](https://github.com/ipfs/go-ipfs/pull/5453))
2194 - fix offline id bug ([ipfs/go-ipfs#5486](https://github.com/ipfs/go-ipfs/pull/5486))
2195 - files cp: improve flush error message ([ipfs/go-ipfs#5485](https://github.com/ipfs/go-ipfs/pull/5485))
2196 - resolve: fix unixfs resolution through sharded directories ([ipfs/go-ipfs#5484](https://github.com/ipfs/go-ipfs/pull/5484))
2197 - Switch name publish/resolve to coreapi ([ipfs/go-ipfs#5563](https://github.com/ipfs/go-ipfs/pull/5563))
2198 - use CoreAPI resolver everywhere (fixes sharded directory resolution) ([ipfs/go-ipfs#5492](https://github.com/ipfs/go-ipfs/pull/5492))
2199 - add pin lock in AddallPin function ([ipfs/go-ipfs#5506](https://github.com/ipfs/go-ipfs/pull/5506))
2200 - take the pinlock when updating pins ([ipfs/go-ipfs#5550](https://github.com/ipfs/go-ipfs/pull/5550))
2201 - fix(object): add support for raw leaves in object diff ([ipfs/go-ipfs#5472](https://github.com/ipfs/go-ipfs/pull/5472))
2202 - don't use the domain name as a filename in /ipns/a.com ([ipfs/go-ipfs#5564](https://github.com/ipfs/go-ipfs/pull/5564))
2203 - refactor(command): modify int to int64 ([ipfs/go-ipfs#5612](https://github.com/ipfs/go-ipfs/pull/5612))
2204 - fix(core): ipns config RecordLifetime panic ([ipfs/go-ipfs#5648](https://github.com/ipfs/go-ipfs/pull/5648))
2205 - simplify dag put and correctly take pin lock ([ipfs/go-ipfs#5667](https://github.com/ipfs/go-ipfs/pull/5667))
2206 - fix Prometheus concurrent map write bug ([ipfs/go-ipfs#5706](https://github.com/ipfs/go-ipfs/pull/5706))
2207
2208 Regressions Fixes (fixes for bugs introduced since the last release):
2209 - namesys: properly attach path in name.Resolve ([ipfs/go-ipfs#5660](https://github.com/ipfs/go-ipfs/pull/5660))
2210 - fix(p2p): issue #5523 ([ipfs/go-ipfs#5529](https://github.com/ipfs/go-ipfs/pull/5529))
2211 - fix infinite loop in `stats bw` ([ipfs/go-ipfs#5598](https://github.com/ipfs/go-ipfs/pull/5598))
2212 - make warnings on no bootstrap peers less noisy ([ipfs/go-ipfs#5466](https://github.com/ipfs/go-ipfs/pull/5466))
2213 - fix two transport related bugs ([ipfs/go-ipfs#5417](https://github.com/ipfs/go-ipfs/pull/5417))
2214 - Fix pin ls output when hash is specified ([ipfs/go-ipfs#5699](https://github.com/ipfs/go-ipfs/pull/5699))
2215 - ping: switch to the ping service enabled in the libp2p constructor ([ipfs/go-ipfs#5698](https://github.com/ipfs/go-ipfs/pull/5698))
2216 - commands: fix a bunch of tiny commands-lib issues ([ipfs/go-ipfs#5697](https://github.com/ipfs/go-ipfs/pull/5697))
2217 - cleanup the ping command ([ipfs/go-ipfs#5680](https://github.com/ipfs/go-ipfs/pull/5680))
2218 - fix gossipsub goroutine explosion ([ipfs/go-ipfs#5688](https://github.com/ipfs/go-ipfs/pull/5688))
2219 - fix(cmd/gc): Run func does not return error when Emit func returns error ([ipfs/go-ipfs#5687](https://github.com/ipfs/go-ipfs/pull/5687))
2220
2221 Extractions:
2222 - Extract bitswap to go-bitswap ([ipfs/go-ipfs#5294](https://github.com/ipfs/go-ipfs/pull/5294))
2223 - Extract blockservice and verifcid ([ipfs/go-ipfs#5296](https://github.com/ipfs/go-ipfs/pull/5296))
2224 - Extract merkledag package, move dagutils to top level ([ipfs/go-ipfs#5298](https://github.com/ipfs/go-ipfs/pull/5298))
2225 - Extract path and resolver ([ipfs/go-ipfs#5306](https://github.com/ipfs/go-ipfs/pull/5306))
2226 - Extract config package ([ipfs/go-ipfs#5277](https://github.com/ipfs/go-ipfs/pull/5277))
2227 - Extract unixfs and importers to go-unixfs ([ipfs/go-ipfs#5316](https://github.com/ipfs/go-ipfs/pull/5316))
2228 - delete unixfs code... ([ipfs/go-ipfs#5319](https://github.com/ipfs/go-ipfs/pull/5319))
2229 - Extract /mfs to github.com/ipfs/go-mfs ([ipfs/go-ipfs#5391](https://github.com/ipfs/go-ipfs/pull/5391))
2230 - re-format log output as ndjson ([ipfs/go-ipfs#5708](https://github.com/ipfs/go-ipfs/pull/5708))
2231 - error on resolving non-terminal paths ([ipfs/go-ipfs#5705](https://github.com/ipfs/go-ipfs/pull/5705))
2232
2233 Documentation:
2234 - document the fact that we now publish releases on GitHub ([ipfs/go-ipfs#5301](https://github.com/ipfs/go-ipfs/pull/5301))
2235 - docs: add url to dev weekly sync to the README ([ipfs/go-ipfs#5371](https://github.com/ipfs/go-ipfs/pull/5371))
2236 - docs: README refresh, add cli-http-api-core diagram ([ipfs/go-ipfs#5396](https://github.com/ipfs/go-ipfs/pull/5396))
2237 - add some basic gateway documentation ([ipfs/go-ipfs#5393](https://github.com/ipfs/go-ipfs/pull/5393))
2238 - fix the default gateway port ([ipfs/go-ipfs#5419](https://github.com/ipfs/go-ipfs/pull/5419))
2239 - fix order of events in the release process ([ipfs/go-ipfs#5434](https://github.com/ipfs/go-ipfs/pull/5434))
2240 - docs: add some minimal read-only API documentation ([ipfs/go-ipfs#5437](https://github.com/ipfs/go-ipfs/pull/5437))
2241 - feat: use package-table ([ipfs/go-ipfs#5395](https://github.com/ipfs/go-ipfs/pull/5395))
2242 - link to go-{libp2p,ipld} package tables ([ipfs/go-ipfs#5446](https://github.com/ipfs/go-ipfs/pull/5446))
2243 - api: fix outdated HTTPHeaders config documentation ([ipfs/go-ipfs#5451](https://github.com/ipfs/go-ipfs/pull/5451))
2244 - add version, usage, and planning info for urlstore ([ipfs/go-ipfs#5552](https://github.com/ipfs/go-ipfs/pull/5552))
2245 - debug-guide.md added memory statistics command ([ipfs/go-ipfs#5546](https://github.com/ipfs/go-ipfs/pull/5546))
2246 - Change to point to combined go contributing guidelines ([ipfs/go-ipfs#5607](https://github.com/ipfs/go-ipfs/pull/5607))
2247 - docs: Update link format ([ipfs/go-ipfs#5617](https://github.com/ipfs/go-ipfs/pull/5617))
2248 - Fix link in readme ([ipfs/go-ipfs#5632](https://github.com/ipfs/go-ipfs/pull/5632))
2249 - docs: add a note for dns command ([ipfs/go-ipfs#5629](https://github.com/ipfs/go-ipfs/pull/5629))
2250 - Dockerfile: Specifies comments on exposed ports ([ipfs/go-ipfs#5615](https://github.com/ipfs/go-ipfs/pull/5615))
2251 - document pubsub message signing ([ipfs/go-ipfs#5669](https://github.com/ipfs/go-ipfs/pull/5669))
2252
2253 Testing:
2254 - Include cid-fmt binary in test/bin. ([ipfs/go-ipfs#5297](https://github.com/ipfs/go-ipfs/pull/5297))
2255 - wait for the nodes to fully stop ([ipfs/go-ipfs#5315](https://github.com/ipfs/go-ipfs/pull/5315))
2256 - apply timeout for build steps after getting node ([ipfs/go-ipfs#5313](https://github.com/ipfs/go-ipfs/pull/5313))
2257 - ci: check for gx deps dupes ([ipfs/go-ipfs#5338](https://github.com/ipfs/go-ipfs/pull/5338))
2258 - ci: call cleanWs after each step ([ipfs/go-ipfs#5374](https://github.com/ipfs/go-ipfs/pull/5374))
2259 - add correct test for GC completeness ([ipfs/go-ipfs#5364](https://github.com/ipfs/go-ipfs/pull/5364))
2260 - fix the urlstore tests ([ipfs/go-ipfs#5397](https://github.com/ipfs/go-ipfs/pull/5397))
2261 - improve gateway options test ([ipfs/go-ipfs#5433](https://github.com/ipfs/go-ipfs/pull/5433))
2262 - coreapi name: Increase test swarm size ([ipfs/go-ipfs#5481](https://github.com/ipfs/go-ipfs/pull/5481))
2263 - fix fuse unmount test ([ipfs/go-ipfs#5476](https://github.com/ipfs/go-ipfs/pull/5476))
2264 - test(add): add test for issue \#5456 ([ipfs/go-ipfs#5493](https://github.com/ipfs/go-ipfs/pull/5493))
2265 - fixed tests of raised fd limits ([ipfs/go-ipfs#5496](https://github.com/ipfs/go-ipfs/pull/5496))
2266 - pprof: create HTTP endpoint for setting MutexProfileFraction ([ipfs/go-ipfs#5527](https://github.com/ipfs/go-ipfs/pull/5527))
2267 - fix(command):update `add --chunker` test ([ipfs/go-ipfs#5571](https://github.com/ipfs/go-ipfs/pull/5571))
2268 - switch to go 1.11 ([ipfs/go-ipfs#5483](https://github.com/ipfs/go-ipfs/pull/5483))
2269 - fix: sharness race in directory_size if file is removed ([ipfs/go-ipfs#5586](https://github.com/ipfs/go-ipfs/pull/5586))
2270 - Bump Go versions and use '.x' to always get latest minor versions ([ipfs/go-ipfs#5682](https://github.com/ipfs/go-ipfs/pull/5682))
2271 - add rabin min error test ([ipfs/go-ipfs#5449](https://github.com/ipfs/go-ipfs/pull/5449))
2272 - Use CircleCI 2.0 ([ipfs/go-ipfs#5691](https://github.com/ipfs/go-ipfs/pull/5691))
2273
2274 Internal:
2275 - Add ability to retrieve blocks even if given using a different CID version ([ipfs/go-ipfs#5285](https://github.com/ipfs/go-ipfs/pull/5285))
2276 - update gogo-protobuf ([ipfs/go-ipfs#5355](https://github.com/ipfs/go-ipfs/pull/5355))
2277 - update protobuf files in go-ipfs ([ipfs/go-ipfs#5356](https://github.com/ipfs/go-ipfs/pull/5356))
2278 - string-backed CIDs ([ipfs/go-ipfs#5441](https://github.com/ipfs/go-ipfs/pull/5441))
2279 - commands: switch object to CoreAPI ([ipfs/go-ipfs#4643](https://github.com/ipfs/go-ipfs/pull/4643))
2280 - coreapi: dag: Batching interface ([ipfs/go-ipfs#5340](https://github.com/ipfs/go-ipfs/pull/5340))
2281 - key cmd: Refactor to use coreapi ([ipfs/go-ipfs#5339](https://github.com/ipfs/go-ipfs/pull/5339))
2282 - coreapi: DHT API ([ipfs/go-ipfs#4804](https://github.com/ipfs/go-ipfs/pull/4804))
2283 - block cmd: Use coreapi ([ipfs/go-ipfs#5331](https://github.com/ipfs/go-ipfs/pull/5331))
2284 - mk: embed CurrentCommit in the right place ([ipfs/go-ipfs#5507](https://github.com/ipfs/go-ipfs/pull/5507))
2285 - added binary executable files to .dockerignore ([ipfs/go-ipfs#5544](https://github.com/ipfs/go-ipfs/pull/5544))
2286 - Add sessions when fetching MerkleDAG in LS ([ipfs/go-ipfs#5509](https://github.com/ipfs/go-ipfs/pull/5509))
2287 - coreapi: Swarm API ([ipfs/go-ipfs#4803](https://github.com/ipfs/go-ipfs/pull/4803))
2288 - coreapi swarm: unify impl type with other apis ([ipfs/go-ipfs#5551](https://github.com/ipfs/go-ipfs/pull/5551))
2289 - Refactor UnixFS CoreAPI ([ipfs/go-ipfs#5501](https://github.com/ipfs/go-ipfs/pull/5501))
2290 - coreapi: PubSub API ([ipfs/go-ipfs#4805](https://github.com/ipfs/go-ipfs/pull/4805))
2291 - fix: maketarball.sh for OSX ([ipfs/go-ipfs#5575](https://github.com/ipfs/go-ipfs/pull/5575))
2292 - test the correct return value when checking directory size ([ipfs/go-ipfs#5580](https://github.com/ipfs/go-ipfs/pull/5580))
2293 - coreapi unixfs: remove Cat ([ipfs/go-ipfs#5574](https://github.com/ipfs/go-ipfs/pull/5574))
2294 - Explicitly use BufferedDAG after removing Batch from importers ([ipfs/go-ipfs#5626](https://github.com/ipfs/go-ipfs/pull/5626))
2295
2296 Cleanup:
2297 - Fix some weird code in core/coreunix/add.go ([ipfs/go-ipfs#5354](https://github.com/ipfs/go-ipfs/pull/5354))
2298 - name cmd: move subcommands to subdirectory ([ipfs/go-ipfs#5392](https://github.com/ipfs/go-ipfs/pull/5392))
2299 - directly parse peer IDs as peer IDs ([ipfs/go-ipfs#5409](https://github.com/ipfs/go-ipfs/pull/5409))
2300 - don't bother caching if we're using a nil repo ([ipfs/go-ipfs#5414](https://github.com/ipfs/go-ipfs/pull/5414))
2301 - object:refactor data encode error ([ipfs/go-ipfs#5426](https://github.com/ipfs/go-ipfs/pull/5426))
2302 - remove Godeps ([ipfs/go-ipfs#5440](https://github.com/ipfs/go-ipfs/pull/5440))
2303 - update for the go-ipfs-cmds refactor ([ipfs/go-ipfs#5035](https://github.com/ipfs/go-ipfs/pull/5035))
2304 - fix(unixfs): issue #5217 (Avoid use of `pb.Data`) ([ipfs/go-ipfs#5505](https://github.com/ipfs/go-ipfs/pull/5505))
2305 - fix(unixfs): issue #5055 ([ipfs/go-ipfs#5525](https://github.com/ipfs/go-ipfs/pull/5525))
2306 - add offline id test #4978 and refactor command code ([ipfs/go-ipfs#5562](https://github.com/ipfs/go-ipfs/pull/5562))
2307 - refact(command): replace option name with const string ([ipfs/go-ipfs#5642](https://github.com/ipfs/go-ipfs/pull/5642))
2308 - remove p2p-circuit addr hack in ipfs swarm peers ([ipfs/go-ipfs#5645](https://github.com/ipfs/go-ipfs/pull/5645))
2309 - refactor(commands/id): use new command ([ipfs/go-ipfs#5646](https://github.com/ipfs/go-ipfs/pull/5646))
2310 - object patch rm-link: change arg from 'link' to 'name' ([ipfs/go-ipfs#5638](https://github.com/ipfs/go-ipfs/pull/5638))
2311 - refactor(cmds): use new cmds lib in version, tar and dns ([ipfs/go-ipfs#5650](https://github.com/ipfs/go-ipfs/pull/5650))
2312 - cmds/dag: use new cmds lib ([ipfs/go-ipfs#5662](https://github.com/ipfs/go-ipfs/pull/5662))
2313 - commands/ping: use new cmds lib ([ipfs/go-ipfs#5675](https://github.com/ipfs/go-ipfs/pull/5675))
2314
2315 ### related changelogs
2316
2317 Changes to sub-packages go-ipfs depends on. This *does not* include libp2p or multiformats.
2318
2319 github.com/ipfs/go-log
2320 - update gogo protobuf ([ipfs/go-log#39](https://github.com/ipfs/go-log/pull/39))
2321 - rename the protobuf to loggabletracer ([ipfs/go-log#41](https://github.com/ipfs/go-log/pull/41))
2322 - protect loggers with rwmutex ([ipfs/go-log#44](https://github.com/ipfs/go-log/pull/44))
2323 - make logging prettier ([ipfs/go-log#45](https://github.com/ipfs/go-log/pull/45))
2324 - add env vars for logging to file and syslog ([ipfs/go-log#46](https://github.com/ipfs/go-log/pull/46))
2325 - remove syslogger ([ipfs/go-log#47](https://github.com/ipfs/go-log/pull/47))
2326
2327 github.com/ipfs/go-datastore
2328 - implement DiskUsage for the rest of the datastores ([ipfs/go-datastore#86](https://github.com/ipfs/go-datastore/pull/86))
2329 - switch to google's uuid library ([ipfs/go-datastore#89](https://github.com/ipfs/go-datastore/pull/89))
2330 - return ErrNotFound from the NullDatastore instead of nil, nil ([ipfs/go-datastore#92](https://github.com/ipfs/go-datastore/pull/92))
2331 - Add TTL and Transactional interfaces ([ipfs/go-datastore#91](https://github.com/ipfs/go-datastore/pull/91))
2332 - improve testing ([ipfs/go-datastore#93](https://github.com/ipfs/go-datastore/pull/93))
2333 - Add support for querying entry expiration ([ipfs/go-datastore#96](https://github.com/ipfs/go-datastore/pull/96))
2334 - Allow ds.NewTransaction() to return an error ([ipfs/go-datastore#98](https://github.com/ipfs/go-datastore/pull/98))
2335 - add a GetSize method ([ipfs/go-datastore#99](https://github.com/ipfs/go-datastore/pull/99))
2336
2337 github.com/ipfs/go-cid
2338 - Add tests for Set type ([ipfs/go-cid#63](https://github.com/ipfs/go-cid/pull/63))
2339 - Create new Builder interface for creating CIDs. ([ipfs/go-cid#53](https://github.com/ipfs/go-cid/pull/53))
2340 - cid-fmt enhancements ([ipfs/go-cid#61](https://github.com/ipfs/go-cid/pull/61))
2341 - add String benchmark ([ipfs/go-cid#44](https://github.com/ipfs/go-cid/pull/44))
2342 - add a streaming CID set ([ipfs/go-cid#67](https://github.com/ipfs/go-cid/pull/67))
2343 - Extract non-core functionality from go-cid into go-cidutil ([ipfs/go-cid#69](https://github.com/ipfs/go-cid/pull/69))
2344 - cid implementation research ([ipfs/go-cid#70](https://github.com/ipfs/go-cid/pull/70))
2345 - cid implementation variations++ ([ipfs/go-cid#72](https://github.com/ipfs/go-cid/pull/72))
2346 - Create a new Encode method that is like StringOfBase but never errors ([ipfs/go-cid#60](https://github.com/ipfs/go-cid/pull/60))
2347 - add codecs for Dash blocks, tx ([ipfs/go-cid#78](https://github.com/ipfs/go-cid/pull/78))
2348
2349 github.com/ipfs/go-ds-flatfs
2350 - check error before defer-removing disk usage file ([ipfs/go-ds-flatfs#47](https://github.com/ipfs/go-ds-flatfs/pull/47))
2351 - add GetSize function ([ipfs/go-ds-flatfs#48](https://github.com/ipfs/go-ds-flatfs/pull/48))
2352
2353 github.com/ipfs/go-ds-measure
2354 - ([ipfs/go-ds-measure#](https://github.com/ipfs/go-ds-measure/pull/))
2355
2356 github.com/ipfs/go-ds-leveldb
2357 - recover datastore on corruption ([ipfs/go-ds-leveldb#15](https://github.com/ipfs/go-ds-leveldb/pull/15))
2358 - Add transactional support to leveldb datastore. ([ipfs/go-ds-leveldb#17](https://github.com/ipfs/go-ds-leveldb/pull/17))
2359 - implement GetSize ([ipfs/go-ds-leveldb#18](https://github.com/ipfs/go-ds-leveldb/pull/18))
2360
2361 github.com/ipfs/go-metrics-prometheus
2362 - use an existing metric when it has already been registered ([ipfs/go-metrics-prometheus#1](https://github.com/ipfs/go-metrics-prometheus/pull/1))
2363
2364 github.com/ipfs/go-metrics-interface
2365 - update the counter interface to match Prometheus ([ipfs/go-metrics-interface#2](https://github.com/ipfs/go-metrics-interface/pull/2))
2366
2367 github.com/ipfs/go-ipld-format
2368 - add copy dagservice function ([ipfs/go-ipld-format#41](https://github.com/ipfs/go-ipld-format/pull/41))
2369
2370 github.com/ipfs/go-ipld-cbor
2371 - Refactor to refmt ([ipfs/go-ipld-cbor#30](https://github.com/ipfs/go-ipld-cbor/pull/30))
2372 - import changes from the filecoin branch ([ipfs/go-ipld-cbor#41](https://github.com/ipfs/go-ipld-cbor/pull/41))
2373 - register the BitIntAtlasEntry for the tests ([ipfs/go-ipld-cbor#43](https://github.com/ipfs/go-ipld-cbor/pull/43))
2374 - attempt to allocate a bit less ([ipfs/go-ipld-cbor#45](https://github.com/ipfs/go-ipld-cbor/pull/45))
2375
2376 github.com/ipfs/go-ipfs-cmds
2377 - check if we can decode an error before trying ([ipfs/go-ipfs-cmds#108](https://github.com/ipfs/go-ipfs-cmds/pull/108))
2378 - fix(option): print error message for error timeout option ([ipfs/go-ipfs-cmds#118](https://github.com/ipfs/go-ipfs-cmds/pull/118))
2379 - Create Jenkinsfile ([ipfs/go-ipfs-cmds#89](https://github.com/ipfs/go-ipfs-cmds/pull/89))
2380 - fix(add): refer to ipfs issue #5456 ([ipfs/go-ipfs-cmds#121](https://github.com/ipfs/go-ipfs-cmds/pull/121))
2381 - commands refactor 2.0 ([ipfs/go-ipfs-cmds#112](https://github.com/ipfs/go-ipfs-cmds/pull/112))
2382 - always assign keks to review new PRs ([ipfs/go-ipfs-cmds#123](https://github.com/ipfs/go-ipfs-cmds/pull/123))
2383 - extract go-ipfs-files ([ipfs/go-ipfs-cmds#125](https://github.com/ipfs/go-ipfs-cmds/pull/125))
2384 - split the value encoder and the error encoder ([ipfs/go-ipfs-cmds#128](https://github.com/ipfs/go-ipfs-cmds/pull/128))
2385
2386 github.com/ipfs/go-ipfs-cmdkit
2387 - all: gofmt ([ipfs/go-ipfs-cmdkit#22](https://github.com/ipfs/go-ipfs-cmdkit/pull/22))
2388 - add standard ci scripts ([ipfs/go-ipfs-cmdkit#23](https://github.com/ipfs/go-ipfs-cmdkit/pull/23))
2389 - only count size for regular files ([ipfs/go-ipfs-cmdkit#25](https://github.com/ipfs/go-ipfs-cmdkit/pull/25))
2390 - Create Jenkinsfile ([ipfs/go-ipfs-cmdkit#16](https://github.com/ipfs/go-ipfs-cmdkit/pull/16))
2391 - Feat: add WebFile File implementation. ([ipfs/go-ipfs-cmdkit#26](https://github.com/ipfs/go-ipfs-cmdkit/pull/26))
2392 - feat(type): fix issue #28 ([ipfs/go-ipfs-cmdkit#29](https://github.com/ipfs/go-ipfs-cmdkit/pull/29))
2393 - Extract files package ([ipfs/go-ipfs-cmdkit#31](https://github.com/ipfs/go-ipfs-cmdkit/pull/31))
2394
2395 github.com/ipfs/go-ds-badger
2396 - update protobuf ([ipfs/go-ds-badger#26](https://github.com/ipfs/go-ds-badger/pull/26))
2397 - exported type datastore => Datastore ([ipfs/go-ds-badger#1](https://github.com/ipfs/go-ds-badger/pull/1))
2398 - using exported Datastore type ([ipfs/go-ds-badger#2](https://github.com/ipfs/go-ds-badger/pull/2))
2399 - exported type datastore => Datastore ([ipfs/go-ds-badger#28](https://github.com/ipfs/go-ds-badger/pull/28))
2400 - Implement new TxDatastore and Txn interfaces ([ipfs/go-ds-badger#27](https://github.com/ipfs/go-ds-badger/pull/27))
2401 - Avoid discarding transaction too early in queries ([ipfs/go-ds-badger#31](https://github.com/ipfs/go-ds-badger/pull/31))
2402 - Ability to get entry expirations ([ipfs/go-ds-badger#32](https://github.com/ipfs/go-ds-badger/pull/32))
2403 - Update badger to 2.8.0 ([ipfs/go-ds-badger#33](https://github.com/ipfs/go-ds-badger/pull/33))
2404 - ds.NewTransaction() now returns an error parameter ([ipfs/go-ds-badger#36](https://github.com/ipfs/go-ds-badger/pull/36))
2405 - make has faster ([ipfs/go-ds-badger#37](https://github.com/ipfs/go-ds-badger/pull/37))
2406 - Implement GetSize and update badger ([ipfs/go-ds-badger#38](https://github.com/ipfs/go-ds-badger/pull/38))
2407
2408 github.com/ipfs/go-ipfs-addr
2409 - Remove dependency on libp2p-circuit ([ipfs/go-ipfs-addr#7](https://github.com/ipfs/go-ipfs-addr/pull/7))
2410
2411 github.com/ipfs/go-ipfs-chunker
2412 - return err when rabin min less than 16 ([ipfs/go-ipfs-chunker#3](https://github.com/ipfs/go-ipfs-chunker/pull/3))
2413 - switch to go-buffer-pool ([ipfs/go-ipfs-chunker#8](https://github.com/ipfs/go-ipfs-chunker/pull/8))
2414 - fix size-0 chunker bug ([ipfs/go-ipfs-chunker#9](https://github.com/ipfs/go-ipfs-chunker/pull/9))
2415
2416 github.com/ipfs/go-ipfs-routing
2417 - update protobuf ([ipfs/go-ipfs-routing#8](https://github.com/ipfs/go-ipfs-routing/pull/8))
2418 - Implement SearchValue ([ipfs/go-ipfs-routing#12](https://github.com/ipfs/go-ipfs-routing/pull/12))
2419
2420 github.com/ipfs/go-ipfs-blockstore
2421 - blockstore: Adding Stat method to map from Cid to BlockSize ([ipfs/go-ipfs-blockstore#5](https://github.com/ipfs/go-ipfs-blockstore/pull/5))
2422 - correctly convert the datastore not found errors ([ipfs/go-ipfs-blockstore#10](https://github.com/ipfs/go-ipfs-blockstore/pull/10))
2423 - Fix typo: Change 'should not' to 'should' ([ipfs/go-ipfs-blockstore#14](https://github.com/ipfs/go-ipfs-blockstore/pull/14))
2424 - fix test race condition ([ipfs/go-ipfs-blockstore#9](https://github.com/ipfs/go-ipfs-blockstore/pull/9))
2425 - make arccache.GetSize return ErrNotFound when not found ([ipfs/go-ipfs-blockstore#16](https://github.com/ipfs/go-ipfs-blockstore/pull/16))
2426 - use datastore.GetSize ([ipfs/go-ipfs-blockstore#17](https://github.com/ipfs/go-ipfs-blockstore/pull/17))
2427
2428 github.com/ipfs/go-ipns
2429 - update gogo protobuf ([ipfs/go-ipns#16](https://github.com/ipfs/go-ipns/pull/16))
2430 - use new ExtractPublicKey signature ([ipfs/go-ipns#17](https://github.com/ipfs/go-ipns/pull/17))
2431
2432 github.com/ipfs/go-bitswap
2433 - update gogo protobuf ([ipfs/go-bitswap#2](https://github.com/ipfs/go-bitswap/pull/2))
2434 - ci: add jenkins ([ipfs/go-bitswap#9](https://github.com/ipfs/go-bitswap/pull/9))
2435 - bitswap: Bitswap now sends multiple blocks per message ([ipfs/go-bitswap#5](https://github.com/ipfs/go-bitswap/pull/5))
2436 - reduce allocations ([ipfs/go-bitswap#12](https://github.com/ipfs/go-bitswap/pull/12))
2437 - buffer writes ([ipfs/go-bitswap#15](https://github.com/ipfs/go-bitswap/pull/15))
2438 - delay finding providers ([ipfs/go-bitswap#17](https://github.com/ipfs/go-bitswap/pull/17))
2439 github.com/ipfs/go-blockservice
2440 - Avoid allocating a session unless we need it ([ipfs/go-blockservice#6](https://github.com/ipfs/go-blockservice/pull/6))
2441
2442 github.com/ipfs/go-cidutil
2443 - add a utility method for sorting CID slices ([ipfs/go-cidutil#5](https://github.com/ipfs/go-cidutil/pull/5))
2444
2445 github.com/ipfs/go-ipfs-config
2446 - Add pubsub configuration options ([ipfs/go-ipfs-config#3](https://github.com/ipfs/go-ipfs-config/pull/3))
2447 - add QUIC experiment ([ipfs/go-ipfs-config#4](https://github.com/ipfs/go-ipfs-config/pull/4))
2448 - Add Gateway.APICommands for /api allowlists ([ipfs/go-ipfs-config#10](https://github.com/ipfs/go-ipfs-config/pull/10))
2449 - allow multiple API/Gateway addresses ([ipfs/go-ipfs-config#11](https://github.com/ipfs/go-ipfs-config/pull/11))
2450 - Fix handling of null strings ([ipfs/go-ipfs-config#12](https://github.com/ipfs/go-ipfs-config/pull/12))
2451 - add experiment for p2p http proxy ([ipfs/go-ipfs-config#13](https://github.com/ipfs/go-ipfs-config/pull/13))
2452 - add message signing config options ([ipfs/go-ipfs-config#18](https://github.com/ipfs/go-ipfs-config/pull/18))
2453
2454 github.com/ipfs/go-merkledag
2455 - Add FetchGraphWithDepthLimit to specify depth-limited graph fetching. ([ipfs/go-merkledag#2](https://github.com/ipfs/go-merkledag/pull/2))
2456 - update gogo protobuf ([ipfs/go-merkledag#4](https://github.com/ipfs/go-merkledag/pull/4))
2457 - Update to use new Builder interface for creating CIDs. ([ipfs/go-merkledag#6](https://github.com/ipfs/go-merkledag/pull/6))
2458 - perf: avoid allocations when filtering nodes ([ipfs/go-merkledag#11](https://github.com/ipfs/go-merkledag/pull/11))
2459
2460 github.com/ipfs/go-mfs
2461 - fix(unixfs): issue #6 ([ipfs/go-mfs#7](https://github.com/ipfs/go-mfs/pull/7))
2462 - fix(type): issue #13 ([ipfs/go-mfs#14](https://github.com/ipfs/go-mfs/pull/14))
2463
2464 github.com/ipfs/go-path
2465 - fix: don't dag.Get in ResolveToLastNode when not needed ([ipfs/go-path#1](https://github.com/ipfs/go-path/pull/1))
2466
2467 github.com/ipfs/go-unixfs
2468 - update gogo protobuf ([ipfs/go-unixfs#6](https://github.com/ipfs/go-unixfs/pull/6))
2469 - Update to use new Builder interface for creating CIDs. ([ipfs/go-unixfs#7](https://github.com/ipfs/go-unixfs/pull/7))
2470 - nit: make dagTruncate a method on DagModifier ([ipfs/go-unixfs#13](https://github.com/ipfs/go-unixfs/pull/13))
2471 - fix(fsnode): issue #17 ([ipfs/go-unixfs#18](https://github.com/ipfs/go-unixfs/pull/18))
2472 - Use EnumerateChildrenAsync in for enumerating HAMT links ([ipfs/go-unixfs#19](https://github.com/ipfs/go-unixfs/pull/19))
2473
2474 ## v0.4.17 2018-07-27
2475
2476 Ipfs 0.4.17 is a quick release to fix a major performance regression in bitswap
2477 (mostly affecting go-ipfs -> js-ipfs transfers). However, while motivated by
2478 this fix, this release contains a few other goodies that will excite some users.
2479
2480 The headline feature in this release is [urlstore][] support. Urlstore is a
2481 generalization of the filestore backend that can fetch file blocks from remote
2482 URLs on-demand instead of storing them in the local datastore.
2483
2484 Additionally, we've added support for extracting inline blocks from CIDs (blocks
2485 inlined into CIDs using the identity hash function). However, go-ipfs won't yet
2486 *create* such CIDs so you're unlikely to see any in the wild.
2487
2488 [urlstore]: https://github.com/ipfs/go-ipfs/blob/master/docs/experimental-features.md#ipfs-urlstore
2489
2490 Features:
2491
2492 * URLStore ([ipfs/go-ipfs#4896](https://github.com/ipfs/go-ipfs/pull/4896))
2493 * Add trickle-dag support to the urlstore ([ipfs/go-ipfs#5245](https://github.com/ipfs/go-ipfs/pull/5245)).
2494 * Allow specifying how the data field in the `object get` is encoded ([ipfs/go-ipfs#5139](https://github.com/ipfs/go-ipfs/pull/5139))
2495 * Add a `-U` flag to `files ls` to disable sorting ([ipfs/go-ipfs#5219](https://github.com/ipfs/go-ipfs/pull/5219))
2496 * Add an efficient `--size-only` flag to the `repo stat` ([ipfs/go-ipfs#5010](https://github.com/ipfs/go-ipfs/pull/5010))
2497 * Inline blocks in CIDs ([ipfs/go-ipfs#5117](https://github.com/ipfs/go-ipfs/pull/5117))
2498
2499 Changes/Fixes:
2500
2501 * Make `ipfs files ls -l` correctly report the hash and size of files ([ipfs/go-ipfs#5045](https://github.com/ipfs/go-ipfs/pull/5045))
2502 * Fix sorting of `files ls` ([ipfs/go-ipfs#5219](https://github.com/ipfs/go-ipfs/pull/5219))
2503 * Improve prefetching in `ipfs cat` and related commands ([ipfs/go-ipfs#5162](https://github.com/ipfs/go-ipfs/pull/5162))
2504 * Better error message when `ipfs cp` fails ([ipfs/go-ipfs#5218](https://github.com/ipfs/go-ipfs/pull/5218))
2505 * Don't wait for the peer to close it's end of a bitswap stream before considering the block "sent" ([ipfs/go-ipfs#5258](https://github.com/ipfs/go-ipfs/pull/5258))
2506 * Fix resolving links in sharded directories via the gateway ([ipfs/go-ipfs#5271](https://github.com/ipfs/go-ipfs/pull/5271))
2507 * Fix building when there's a space in the current directory ([ipfs/go-ipfs#5261](https://github.com/ipfs/go-ipfs/pull/5261))
2508
2509 Documentation:
2510
2511 * Improve documentation about the bloomfilter config options ([ipfs/go-ipfs#4924](https://github.com/ipfs/go-ipfs/pull/4924))
2512
2513 General refactorings and internal bug fixes:
2514
2515 * Remove the `Offset()` method from the DAGReader ([ipfs/go-ipfs#5190](https://github.com/ipfs/go-ipfs/pull/5190))
2516 * Fix TestLargeWriteChunks seek behavior ([ipfs/go-ipfs#5276](https://github.com/ipfs/go-ipfs/pull/5276))
2517 * Add a build tag to disable dynamic plugins ([ipfs/go-ipfs#5274](https://github.com/ipfs/go-ipfs/pull/5274))
2518 * Use FSNode instead of the Protobuf structure in PBDagReader ([ipfs/go-ipfs#5189](https://github.com/ipfs/go-ipfs/pull/5189))
2519 * Remove support for non-directory MFS roots ([ipfs/go-ipfs#5170](https://github.com/ipfs/go-ipfs/pull/5170))
2520 * Remove `UnixfsNode` from the balanced builder ([ipfs/go-ipfs#5118](https://github.com/ipfs/go-ipfs/pull/5118))
2521 * Fix truncating files (internal) when already at the correct size ([ipfs/go-ipfs#5253](https://github.com/ipfs/go-ipfs/pull/5253))
2522 * Fix `dagTruncate` (internal) to preserve the node type ([ipfs/go-ipfs#5216](https://github.com/ipfs/go-ipfs/pull/5216))
2523 * Add an internal interface for unixfs directories ([ipfs/go-ipfs#5160](https://github.com/ipfs/go-ipfs/pull/5160))
2524 * Refactor the CoreAPI path types and interfaces ([ipfs/go-ipfs#4672](https://github.com/ipfs/go-ipfs/pull/4672))
2525 * Refactor `precalcNextBuf` in the dag reader ([ipfs/go-ipfs#5237](https://github.com/ipfs/go-ipfs/pull/5237))
2526 * Update a bunch of dependencies that haven't been updated for a while ([ipfs/go-ipfs#5268](https://github.com/ipfs/go-ipfs/pull/5268))
2527
2528 ## v0.4.16 2018-07-13
2529
2530 Ipfs 0.4.16 is a fairly small release in terms of changes to the ipfs codebase,
2531 but it contains a huge amount of changes and improvements from the libraries we
2532 depend on, notably libp2p.
2533
2534 This release includes small a repo migration to account for some changes to the
2535 DHT. It should only take a second to run but, depending on your configuration,
2536 you may need to run it manually.
2537
2538 You can run a migration by either:
2539
2540 1. Selecting "Yes" when the daemon prompts you to migrate.
2541 2. Running the daemon with the `--migrate=true` flag.
2542 3. Manually [running](https://github.com/ipfs/fs-repo-migrations/blob/master/run.md#running-repo-migrations) the migration.
2543
2544 ### Libp2p
2545
2546 This version of ipfs contains the changes made in libp2p from v5.0.14 through
2547 v6.0.5. In that time, we have made significant changes to the codebase to allow
2548 for easier integration of future transports and modules along with the usual
2549 performance and reliability improvements. You can find many of these
2550 improvements in the libp2p 6.0 [release blog
2551 post](https://ipfs.io/blog/39-go-libp2p-6-0-0/).
2552
2553 The primary motivation for this refactor was adding support for network
2554 transports like QUIC that have built-in support for encryption, authentication,
2555 and stream multiplexing. It will also allow us to plug-in new security
2556 transports (like TLS) without hard-coding them.
2557
2558 For example, our [QUIC
2559 transport](https://github.com/libp2p/go-libp2p-quic-transport) currently works,
2560 and can be plugged into libp2p manually (though note that it is still
2561 experimental, as the upstream spec is still in flux). Further work is needed to
2562 make enabling this inside ipfs easy and not require recompilation.
2563
2564 On the user-visible side of things, we've improved our dialing logic and
2565 timeouts. We now abort dials to local subnets after 5 seconds and abort all
2566 dials if the TCP handshake takes longer than 5 seconds. This should
2567 significantly improve performance in some cases as we limit the number of
2568 concurrent dials and slow dials to non-responsive peers have been known to clog
2569 the dialer, blocking dials to reachable peers. Importantly, this should improve
2570 DHT performance as it tends to spend a disproportional amount of time connecting
2571 to peers.
2572
2573 We have also made a few noticeable changes to the DHT: we've significantly
2574 improved the chances of finding a value on the DHT, tightened up some of our
2575 validation logic, and fixed some issues that should reduce traffic to nodes
2576 running in dhtclient mode over time.
2577
2578 Of these, the first one will likely see the most impact. In the past, when
2579 putting a value (e.g., an IPNS entry) into the DHT, we'd try to put the value to
2580 K peers (where K for us is 20). However, we'd often fail to connect to many of
2581 these peers so we'd end up putting the value to significantly fewer than K
2582 peers. We now try to put the value to the K peers we can actually connect to.
2583
2584 Finally, we've fixed JavaScript interoperability in go-multiplex, the one stream
2585 muxer that both go-libp2p and js-libp2p implement. This should significantly
2586 improve go-libp2p and js-libp2p interoperability.
2587
2588 ### Multiformats
2589
2590 We are also changing the way that people write 'ipfs' multiaddrs. Currently,
2591 ipfs multiaddrs look something like
2592 `/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ`.
2593 However, calling them 'ipfs' multiaddrs is a bit misleading, as this is actually
2594 the multiaddr of a libp2p peer that happens to run ipfs. Other protocols built
2595 on libp2p right now still have to use multiaddrs that say 'ipfs', even if they
2596 have nothing to do with ipfs. Therefore, we are renaming them to 'p2p'
2597 multiaddrs. Moving forward, these addresses will be written as:
2598 `/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ`.
2599
2600 This release adds support for *parsing* both types of addresses (`.../ipfs/...`
2601 and `.../p2p/...`) into the same network format, and the network format is
2602 remaining exactly the same. A future release will have the ipfs daemon switch to
2603 *printing* out addresses this way once a large enough portion of the network
2604 has upgraded.
2605
2606 N.B., these addresses are *not* related to IPFS *file* names (`/ipfs/Qm...`).
2607 Disambiguating the two was yet another motivation to switch the protocol name to
2608 `/p2p/`.
2609
2610 ### IPFS
2611
2612 On the ipfs side of things, we've started embedding public keys inside IPNS
2613 records and have enabled the Git plugin by default.
2614
2615 Embedding public keys inside IPNS records allows lookups to be faster as we only
2616 need to fetch the record itself (and not the public key separately). It also
2617 fixes an issue where DHT peers wouldn't store a record for a peer if they didn't
2618 have their public key already. Combined with some of the DHT and dialing fixes,
2619 this should improve the performance of IPNS (once a majority of the network
2620 updates).
2621
2622 Second, our public builds now include the Git plugin (in past builds, you could
2623 add it yourself, but doing so was not easy). With this, ipfs can ingest and
2624 operate over Git repositories and commit graphs directly. For more information
2625 on this, see [the go-ipld-git repo](https://github.com/ipfs/go-ipld-git).
2626
2627 Finally, we've included many smaller bug fixes, refactorings, improved
2628 documentation, and a good bit more. For the full details, see the changelog
2629 below.
2630
2631 ## v0.4.16-rc3 2018-07-09
2632 - Bug fixes
2633 - Fix dht commands when ipns over pubsub is enabled ([ipfs/go-ipfs#5200](https://github.com/ipfs/go-ipfs/pull/5200))
2634 - Fix content routing when ipns over pubsub is enabled ([ipfs/go-ipfs#5200](https://github.com/ipfs/go-ipfs/pull/5200))
2635 - Correctly handle multi-hop dnslink resolution ([ipfs/go-ipfs#5202](https://github.com/ipfs/go-ipfs/pull/5202))
2636
2637 ## v0.4.16-rc2 2018-07-05
2638 - Bug fixes
2639 - Fix usage of file name vs path name in adder ([ipfs/go-ipfs#5167](https://github.com/ipfs/go-ipfs/pull/5167))
2640 - Fix `ipfs update` working with migrations ([ipfs/go-ipfs#5194](https://github.com/ipfs/go-ipfs/pull/5194))
2641 - Documentation
2642 - Grammar fix in fuse docs ([ipfs/go-ipfs#5164](https://github.com/ipfs/go-ipfs/pull/5164))
2643
2644 ## v0.4.16-rc1 2018-06-27
2645 - Features
2646 - Embed public keys inside ipns records, use for validation ([ipfs/go-ipfs#5079](https://github.com/ipfs/go-ipfs/pull/5079))
2647 - Preload git plugin by default ([ipfs/go-ipfs#4991](https://github.com/ipfs/go-ipfs/pull/4991))
2648 - Improvements
2649 - Only resolve dnslinks once in the gateway ([ipfs/go-ipfs#4977](https://github.com/ipfs/go-ipfs/pull/4977))
2650 - Libp2p transport refactor update ([ipfs/go-ipfs#4817](https://github.com/ipfs/go-ipfs/pull/4817))
2651 - Improve swarm connect/disconnect commands ([ipfs/go-ipfs#5107](https://github.com/ipfs/go-ipfs/pull/5107))
2652 - Documentation
2653 - Fix typo of sudo install command ([ipfs/go-ipfs#5001](https://github.com/ipfs/go-ipfs/pull/5001))
2654 - Fix experimental features Table of Contents ([ipfs/go-ipfs#4976](https://github.com/ipfs/go-ipfs/pull/4976))
2655 - Fix link to systemd init scripts in the README ([ipfs/go-ipfs#4968](https://github.com/ipfs/go-ipfs/pull/4968))
2656 - Add package overview comments to coreapi ([ipfs/go-ipfs#5108](https://github.com/ipfs/go-ipfs/pull/5108))
2657 - Add README to docs folder ([ipfs/go-ipfs#5095](https://github.com/ipfs/go-ipfs/pull/5095))
2658 - Add system requirements to README ([ipfs/go-ipfs#5137](https://github.com/ipfs/go-ipfs/pull/5137))
2659 - Bug fixes
2660 - Fix goroutine leak in pin verify ([ipfs/go-ipfs#5011](https://github.com/ipfs/go-ipfs/pull/5011))
2661 - Fix commit string in version ([ipfs/go-ipfs#4982](https://github.com/ipfs/go-ipfs/pull/4982))
2662 - Fix `key rename` command output error ([ipfs/go-ipfs#4962](https://github.com/ipfs/go-ipfs/pull/4962))
2663 - Report error source when failing to construct private network ([ipfs/go-ipfs#4952](https://github.com/ipfs/go-ipfs/pull/4952))
2664 - Fix build on DragonFlyBSD ([ipfs/go-ipfs#5031](https://github.com/ipfs/go-ipfs/pull/5031))
2665 - Fix goroutine leak in dag put ([ipfs/go-ipfs#5016](https://github.com/ipfs/go-ipfs/pull/5016))
2666 - Fix goroutine leaks in refs.go ([ipfs/go-ipfs#5018](https://github.com/ipfs/go-ipfs/pull/5018))
2667 - Fix panic, Don't handle errors with fallthrough ([ipfs/go-ipfs#5072](https://github.com/ipfs/go-ipfs/pull/5072))
2668 - Fix how filestore is hooked up with caching ([ipfs/go-ipfs#5122](https://github.com/ipfs/go-ipfs/pull/5122))
2669 - Add record validation to offline routing ([ipfs/go-ipfs#5116](https://github.com/ipfs/go-ipfs/pull/5116))
2670 - Fix `ipfs update` working with migrations ([ipfs/go-ipfs#5194](https://github.com/ipfs/go-ipfs/pull/5194))
2671 - General Changes and Refactorings
2672 - Remove leftover bits of dead code ([ipfs/go-ipfs#5022](https://github.com/ipfs/go-ipfs/pull/5022))
2673 - Remove fuse platform build constraints ([ipfs/go-ipfs#5033](https://github.com/ipfs/go-ipfs/pull/5033))
2674 - Warning when legacy NoSync setting is set ([ipfs/go-ipfs#5036](https://github.com/ipfs/go-ipfs/pull/5036))
2675 - Clean up and refactor namesys module ([ipfs/go-ipfs#5007](https://github.com/ipfs/go-ipfs/pull/5007))
2676 - When raw-leaves are used for empty files use 'Raw' nodes ([ipfs/go-ipfs#4693](https://github.com/ipfs/go-ipfs/pull/4693))
2677 - Update dist_root in build scripts ([ipfs/go-ipfs#5093](https://github.com/ipfs/go-ipfs/pull/5093))
2678 - Integrate `pb.Data` into `FSNode` to avoid duplicating fields ([ipfs/go-ipfs#5098](https://github.com/ipfs/go-ipfs/pull/5098))
2679 - Reduce log level when we can't republish ([ipfs/go-ipfs#5091](https://github.com/ipfs/go-ipfs/pull/5091))
2680 - Extract ipns record logic to go-ipns ([ipfs/go-ipfs#5124](https://github.com/ipfs/go-ipfs/pull/5124))
2681 - Testing
2682 - Collect test times for sharness ([ipfs/go-ipfs#4959](https://github.com/ipfs/go-ipfs/pull/4959))
2683 - Fix sharness iptb connect timeout ([ipfs/go-ipfs#4966](https://github.com/ipfs/go-ipfs/pull/4966))
2684 - Add more timeouts to the jenkins pipeline ([ipfs/go-ipfs#4958](https://github.com/ipfs/go-ipfs/pull/4958))
2685 - Use go 1.10 on jenkins ([ipfs/go-ipfs#5009](https://github.com/ipfs/go-ipfs/pull/5009))
2686 - Speed up multinode sharness test ([ipfs/go-ipfs#4967](https://github.com/ipfs/go-ipfs/pull/4967))
2687 - Print out iptb logs on iptb test failure (for debugging CI) ([ipfs/go-ipfs#5069](https://github.com/ipfs/go-ipfs/pull/5069))
2688 - Disable the MacOS tests in jenkins ([ipfs/go-ipfs#5119](https://github.com/ipfs/go-ipfs/pull/5119))
2689 - Make republisher test robust against timing issues ([ipfs/go-ipfs#5125](https://github.com/ipfs/go-ipfs/pull/5125))
2690 - Archive sharness trash dirs in jenkins ([ipfs/go-ipfs#5071](https://github.com/ipfs/go-ipfs/pull/5071))
2691 - Fix up DHT sharness tests ([ipfs/go-ipfs#5114](https://github.com/ipfs/go-ipfs/pull/5114))
2692 - Dependencies
2693 - Update go-ipld-git to fix mergetag resolving ([ipfs/go-ipfs#4988](https://github.com/ipfs/go-ipfs/pull/4988))
2694 - Fix duplicate /x/sys imports ([ipfs/go-ipfs#5068](https://github.com/ipfs/go-ipfs/pull/5068))
2695 - Update stream multiplexers ([ipfs/go-ipfs#5075](https://github.com/ipfs/go-ipfs/pull/5075))
2696 - Update dependencies: go-log, sys, go-crypto ([ipfs/go-ipfs#5100](https://github.com/ipfs/go-ipfs/pull/5100))
2697 - Explicitly import go-multiaddr-dns in config/bootstrap_peers ([ipfs/go-ipfs#5144](https://github.com/ipfs/go-ipfs/pull/5144))
2698 - Gx update with dht and dialing improvements ([ipfs/go-ipfs#5158](https://github.com/ipfs/go-ipfs/pull/5158))
2699
2700 ## v0.4.15 2018-05-09
2701
2702 This release is significantly smaller than the last as much of the work on
2703 improving our datastores, and other libraries libp2p has yet to be merged.
2704 However, it still includes many welcome improvements.
2705
2706 As with 0.4.12 and 0.4.14 (0.4.13 was a patch), this release has a negative
2707 diff-stat. Unfortunately, much of this code isn't actually going away but at
2708 least it's being moved out into separate repositories.
2709
2710 Much of the work that made it into this release is under the hood. We've cleaned
2711 up some code, extracted several packages into their own repositories, and made
2712 some long neglected optimizations (e.g., handling of sharded directories).
2713 Additionally, this release includes a bunch of tests for our CLI commands that
2714 should help us avoid some of the issues we've seen in the past few releases.
2715
2716 More visibly, thanks to @djdv's efforts, this release includes some significant
2717 Windows improvements (with more on the way). Specifically, this release includes
2718 better handling of repo lockfiles (no more `ipfs repo fsck`), stdin command-line
2719 support, and, last but not least, IPFS no longer writes random files with scary
2720 garbage in the drive root. To read more about future windows improvements, take
2721 a look at this [blog post](https://blog.ipfs.io/36-a-look-at-windows/).
2722
2723 To better support low-power devices, we've added a low-power config profile.
2724 This can be enabled when initializing a repo by running `ipfs init` with the
2725 `--profile=lowpower` flag or later by running `ipfs config profile apply lowpower`.
2726
2727 Finally, with this release we have begun distributing self-contained source
2728 archives of go-ipfs and its dependencies. This should be a welcome improvement
2729 for both packagers and those living in countries with harmonized internet
2730 access.
2731
2732 - Features
2733 - Add options for record count and timeout for resolving DHT paths ([ipfs/go-ipfs#4733](https://github.com/ipfs/go-ipfs/pull/4733))
2734 - Add low power init profile ([ipfs/go-ipfs#4154](https://github.com/ipfs/go-ipfs/pull/4154))
2735 - Add Opentracing plugin support ([ipfs/go-ipfs#4506](https://github.com/ipfs/go-ipfs/pull/4506))
2736 - Add make target to build source tarballs ([ipfs/go-ipfs#4920](https://github.com/ipfs/go-ipfs/pull/4920))
2737
2738 - Improvements
2739 - Add BlockedFetched/Added/Removed events to Blockservice ([ipfs/go-ipfs#4649](https://github.com/ipfs/go-ipfs/pull/4649))
2740 - Improve performance of HAMT code ([ipfs/go-ipfs#4889](https://github.com/ipfs/go-ipfs/pull/4889))
2741 - Avoid unnecessarily resolving child nodes when listing a sharded directory ([ipfs/go-ipfs#4884](https://github.com/ipfs/go-ipfs/pull/4884))
2742 - Tar writer now supports sharded ipfs directories ([ipfs/go-ipfs#4873](https://github.com/ipfs/go-ipfs/pull/4873))
2743 - Infer type from CID when possible in `ipfs ls` ([ipfs/go-ipfs#4890](https://github.com/ipfs/go-ipfs/pull/4890))
2744 - Deduplicate keys in GetMany ([ipfs/go-ipfs#4888](https://github.com/ipfs/go-ipfs/pull/4888))
2745
2746 - Documentation
2747 - Fix spelling of retrieval ([ipfs/go-ipfs#4819](https://github.com/ipfs/go-ipfs/pull/4819))
2748 - Update broken links ([ipfs/go-ipfs#4798](https://github.com/ipfs/go-ipfs/pull/4798))
2749 - Remove roadmap.md ([ipfs/go-ipfs#4834](https://github.com/ipfs/go-ipfs/pull/4834))
2750 - Remove link to IPFS paper in contribute.md ([ipfs/go-ipfs#4812](https://github.com/ipfs/go-ipfs/pull/4812))
2751 - Fix broken todo link in readme.md ([ipfs/go-ipfs#4865](https://github.com/ipfs/go-ipfs/pull/4865))
2752 - Document ipns pubsub ([ipfs/go-ipfs#4903](https://github.com/ipfs/go-ipfs/pull/4903))
2753 - Fix missing profile docs ([ipfs/go-ipfs#4846](https://github.com/ipfs/go-ipfs/pull/4846))
2754 - Fix a few typos ([ipfs/go-ipfs#4835](https://github.com/ipfs/go-ipfs/pull/4835))
2755 - Fix typo in fsrepo error message ([ipfs/go-ipfs#4933](https://github.com/ipfs/go-ipfs/pull/4933))
2756 - Remove go-ipfs version from issue template ([ipfs/go-ipfs#4943](https://github.com/ipfs/go-ipfs/pull/4943))
2757 - Add docs for --profile=lowpower ([ipfs/go-ipfs#4970](https://github.com/ipfs/go-ipfs/pull/4970))
2758 - Improve Windows build documentation ([ipfs/go-ipfs#4691](https://github.com/ipfs/go-ipfs/pull/4691))
2759
2760 - Bug fixes
2761 - Check CIDs in base case when diffing nodes ([ipfs/go-ipfs#4767](https://github.com/ipfs/go-ipfs/pull/4767))
2762 - Support for CIDv1 with custom mhtype in `ipfs block put` ([ipfs/go-ipfs#4563](https://github.com/ipfs/go-ipfs/pull/4563))
2763 - Clean path in DagArchive ([ipfs/go-ipfs#4743](https://github.com/ipfs/go-ipfs/pull/4743))
2764 - Set the prefix for MFS root in `ipfs add --hash-only` ([ipfs/go-ipfs#4755](https://github.com/ipfs/go-ipfs/pull/4755))
2765 - Fix get output path ([ipfs/go-ipfs#4809](https://github.com/ipfs/go-ipfs/pull/4809))
2766 - Fix incorrect Read calls ([ipfs/go-ipfs#4792](https://github.com/ipfs/go-ipfs/pull/4792))
2767 - Use prefix in bootstrapWritePeers ([ipfs/go-ipfs#4832](https://github.com/ipfs/go-ipfs/pull/4832))
2768 - Fix mfs Directory.Path not working ([ipfs/go-ipfs#4844](https://github.com/ipfs/go-ipfs/pull/4844))
2769 - Remove header in `ipfs stats bw` if not polling ([ipfs/go-ipfs#4856](https://github.com/ipfs/go-ipfs/pull/4856))
2770 - Match Go's GOPATH defaults behaviour in build scripts ([ipfs/go-ipfs#4678](https://github.com/ipfs/go-ipfs/pull/4678))
2771 - Fix default-net profile not reverting bootstrap config ([ipfs/go-ipfs#4845](https://github.com/ipfs/go-ipfs/pull/4845))
2772 - Fix excess goroutines in bitswap caused by insecure CIDs ([ipfs/go-ipfs#4946](https://github.com/ipfs/go-ipfs/pull/4946))
2773
2774 - General Changes and Refactorings
2775 - Refactor trickle DAG builder ([ipfs/go-ipfs#4730](https://github.com/ipfs/go-ipfs/pull/4730))
2776 - Split the coreapi interface into multiple files ([ipfs/go-ipfs#4802](https://github.com/ipfs/go-ipfs/pull/4802))
2777 - Make `ipfs init` command use new cmds lib ([ipfs/go-ipfs#4732](https://github.com/ipfs/go-ipfs/pull/4732))
2778 - Extract thirdparty/tar package ([ipfs/go-ipfs#4857](https://github.com/ipfs/go-ipfs/pull/4857))
2779 - Reduce log level when for disconnected peers to info ([ipfs/go-ipfs#4811](https://github.com/ipfs/go-ipfs/pull/4811))
2780 - Only visit nodes in EnumerateChildrenAsync when asked ([ipfs/go-ipfs#4885](https://github.com/ipfs/go-ipfs/pull/4885))
2781 - Refactor coreapi options ([ipfs/go-ipfs#4807](https://github.com/ipfs/go-ipfs/pull/4807))
2782 - Fix error style for most errors ([ipfs/go-ipfs#4829](https://github.com/ipfs/go-ipfs/pull/4829))
2783 - Ensure `--help` always works, even with /dev/null stdin ([ipfs/go-ipfs#4849](https://github.com/ipfs/go-ipfs/pull/4849))
2784 - Deduplicate AddNodeLinkClean into AddNodeLink ([ipfs/go-ipfs#4940](https://github.com/ipfs/go-ipfs/pull/4940))
2785 - Remove some dead code ([ipfs/go-ipfs#4833](https://github.com/ipfs/go-ipfs/pull/4833))
2786 - Remove unused imports ([ipfs/go-ipfs#4955](https://github.com/ipfs/go-ipfs/pull/4955))
2787 - Fix go vet warnings ([ipfs/go-ipfs#4859](https://github.com/ipfs/go-ipfs/pull/4859))
2788
2789 - Testing
2790 - Generate JUnit test reports for sharness tests ([ipfs/go-ipfs#4530](https://github.com/ipfs/go-ipfs/pull/4530))
2791 - Fix t0063-daemon-init.sh by adding test profile to daemon ([ipfs/go-ipfs#4816](https://github.com/ipfs/go-ipfs/pull/4816))
2792 - Remove circular dependencies in merkledag package tests ([ipfs/go-ipfs#4704](https://github.com/ipfs/go-ipfs/pull/4704))
2793 - Check that all the commands fail when passed a bad flag ([ipfs/go-ipfs#4848](https://github.com/ipfs/go-ipfs/pull/4848))
2794 - Allow for some small margin of code coverage dropping on commit ([ipfs/go-ipfs#4867](https://github.com/ipfs/go-ipfs/pull/4867))
2795 - Add confirmation to archive-branches script ([ipfs/go-ipfs#4797](https://github.com/ipfs/go-ipfs/pull/4797))
2796
2797 - Dependencies
2798 - Update lock package ([ipfs/go-ipfs#4855](https://github.com/ipfs/go-ipfs/pull/4855))
2799 - Update to latest go-datastore. Remove thirdparty/datastore2 ([ipfs/go-ipfs#4742](https://github.com/ipfs/go-ipfs/pull/4742))
2800 - Extract fs lock into go-fs-lock ([ipfs/go-ipfs#4631](https://github.com/ipfs/go-ipfs/pull/4631))
2801 - Extract: exchange/interface.go, blocks/blocksutil, exchange/offline ([ipfs/go-ipfs#4912](https://github.com/ipfs/go-ipfs/pull/4912))
2802 - Remove unused lock dep ([ipfs/go-ipfs#4971](https://github.com/ipfs/go-ipfs/pull/4971))
2803 - Update iptb ([ipfs/go-ipfs#4965](https://github.com/ipfs/go-ipfs/pull/4965))
2804 - Update go-ipfs-cmds to fix stdin on windows ([ipfs/go-ipfs#4975](https://github.com/ipfs/go-ipfs/pull/4975))
2805 - Update go-ds-flatfs to fix windows corruption issue ([ipfs/go-ipfs#4872](https://github.com/ipfs/go-ipfs/pull/4872))
2806
2807 ## v0.4.14 2018-03-22
2808
2809 Ipfs 0.4.14 is a big release with a large number of improvements and bug fixes.
2810 It is also the first release of 2018, and our first release in over three
2811 months. The release took longer than expected due to our refactoring and
2812 extracting of our commands library. This refactor had two stages. The first
2813 round of the refactor disentangled the commands code from core ipfs code,
2814 allowing us to move it out into a [separate
2815 repository](https://github.com/ipfs/go-ipfs-cmds). The code was previously
2816 very entangled with the go-ipfs codebase and not usable for other projects.
2817 The second round of the refactor had the goal of fixing several major issues
2818 around streaming outputs, progress bars, and error handling. It also paved the
2819 way for us to more easily provide an API over other transports, such as
2820 websockets and unix domain sockets. It took a while to flush out all the kinks
2821 on such a massive change. We're pretty sure we've got most of them, but if you
2822 notice anything weird, please let us know.
2823
2824 Beyond that, we've added a new experimental way to use IPNS. With the new
2825 pubsub IPNS resolver and publisher, you can subscribe to updates of an IPNS
2826 entry, and the owner can publish out changes in real time. With this, IPNS can
2827 become nearly instantaneous. To make use of this, simply start your ipfs daemon
2828 with the `--enable-namesys-pubsub` option, and all IPNS resolution and
2829 publishing will use pubsub. Note that resolving an IPNS name via pubsub without
2830 someone publishing it via pubsub will result in a fallback to using the DHT.
2831 Please give this a try and let us know how it goes!
2832
2833 Memory and CPU usage should see a noticeable improvement in this release. We
2834 have spent considerable time fixing excess memory usage throughout the codebase
2835 and down into libp2p. Fixes in peer tracking, bitswap allocation, pinning, and
2836 many other places have brought down both peak and average memory usage. An
2837 upgraded hashing library, base58 encoding library, and improved allocation
2838 patterns all contribute to overall lower CPU usage across the board. See the
2839 full changelist below for more memory and CPU usage improvements.
2840
2841 This release also brings the beginning of the ipfs 'Core API'. Once finished,
2842 the Core API will be the primary way to interact with go-ipfs using go. Both
2843 embedded nodes and nodes accessed over the http API will have the same
2844 interface. Stay tuned for future updates and documentation.
2845
2846 These are only a sampling of the changes that made it into this release, the
2847 full list (almost 100 PRs!) is below.
2848
2849 Finally, I'd like to thank everyone who contributed to this release, whether
2850 you're just contributing a typo fix or driving new features. We are really
2851 grateful to everyone who has spent their their time pushing ipfs forward.
2852
2853 SECURITY NOTE:
2854
2855 This release of ipfs disallows the usage of insecure hash functions and
2856 lengths. Ipfs does not create these insecure objects for any purpose, but it
2857 did allow manually creating them and fetching them from other peers. If you
2858 currently have objects using insecure hashes in your local ipfs repo, please
2859 remove them before updating.
2860
2861 #### Changes from rc2 to rc3
2862 - Fix bug in stdin argument parsing ([ipfs/go-ipfs#4827](https://github.com/ipfs/go-ipfs/pull/4827))
2863 - Revert commands back to sending a single response ([ipfs/go-ipfs#4822](https://github.com/ipfs/go-ipfs/pull/4822))
2864
2865 #### Changes from rc1 to rc2
2866 - Fix issue in ipfs get caused by go1.10 changes ([ipfs/go-ipfs#4790](https://github.com/ipfs/go-ipfs/pull/4790))
2867
2868 - Features
2869 - Pubsub IPNS Publisher and Resolver (experimental) ([ipfs/go-ipfs#4047](https://github.com/ipfs/go-ipfs/pull/4047))
2870 - Implement coreapi Dag interface ([ipfs/go-ipfs#4471](https://github.com/ipfs/go-ipfs/pull/4471))
2871 - Add --offset flag to ipfs cat ([ipfs/go-ipfs#4538](https://github.com/ipfs/go-ipfs/pull/4538))
2872 - Command to apply config profile after init ([ipfs/go-ipfs#4195](https://github.com/ipfs/go-ipfs/pull/4195))
2873 - Implement coreapi Name and Key interfaces ([ipfs/go-ipfs#4477](https://github.com/ipfs/go-ipfs/pull/4477))
2874 - Add --length flag to ipfs cat ([ipfs/go-ipfs#4553](https://github.com/ipfs/go-ipfs/pull/4553))
2875 - Implement coreapi Object interface ([ipfs/go-ipfs#4492](https://github.com/ipfs/go-ipfs/pull/4492))
2876 - Implement coreapi Block interface ([ipfs/go-ipfs#4548](https://github.com/ipfs/go-ipfs/pull/4548))
2877 - Implement coreapi Pin interface ([ipfs/go-ipfs#4575](https://github.com/ipfs/go-ipfs/pull/4575))
2878 - Add a --with-local flag to ipfs files stat ([ipfs/go-ipfs#4638](https://github.com/ipfs/go-ipfs/pull/4638))
2879 - Disallow usage of blocks with insecure hashes ([ipfs/go-ipfs#4751](https://github.com/ipfs/go-ipfs/pull/4751))
2880 - Improvements
2881 - Add uuid to event logs ([ipfs/go-ipfs#4392](https://github.com/ipfs/go-ipfs/pull/4392))
2882 - Add --quiet flag to object put ([ipfs/go-ipfs#4411](https://github.com/ipfs/go-ipfs/pull/4411))
2883 - Pinning memory improvements and fixes ([ipfs/go-ipfs#4451](https://github.com/ipfs/go-ipfs/pull/4451))
2884 - Update WebUI version ([ipfs/go-ipfs#4449](https://github.com/ipfs/go-ipfs/pull/4449))
2885 - Check strong and weak ETag validator ([ipfs/go-ipfs#3983](https://github.com/ipfs/go-ipfs/pull/3983))
2886 - Improve and refactor FD limit handling ([ipfs/go-ipfs#3801](https://github.com/ipfs/go-ipfs/pull/3801))
2887 - Support linking to non-dagpb objects in ipfs object patch ([ipfs/go-ipfs#4460](https://github.com/ipfs/go-ipfs/pull/4460))
2888 - Improve allocation patterns of slices in bitswap ([ipfs/go-ipfs#4458](https://github.com/ipfs/go-ipfs/pull/4458))
2889 - Secio handshake now happens synchronously ([libp2p/go-libp2p-secio#25](https://github.com/libp2p/go-libp2p-secio/pull/25))
2890 - Don't block closing connections on pending writes ([libp2p/go-msgio#7](https://github.com/libp2p/go-msgio/pull/7))
2891 - Improve memory usage of multiaddr parsing ([multiformats/go-multiaddr#56](https://github.com/multiformats/go-multiaddr/pull/56))
2892 - Don't lock up 256KiB buffers when adding small files ([ipfs/go-ipfs#4508](https://github.com/ipfs/go-ipfs/pull/4508))
2893 - Clear out memory after reads from the dagreader ([ipfs/go-ipfs#4525](https://github.com/ipfs/go-ipfs/pull/4525))
2894 - Improve error handling in ipfs ping ([ipfs/go-ipfs#4546](https://github.com/ipfs/go-ipfs/pull/4546))
2895 - Allow install.sh to be run without being the script dir ([ipfs/go-ipfs#4547](https://github.com/ipfs/go-ipfs/pull/4547))
2896 - Much faster base58 encoding ([libp2p/go-libp2p-peer#24](https://github.com/libp2p/go-libp2p-peer/pull/24))
2897 - Use faster sha256 and blake2b libs ([multiformats/go-multihash#63](https://github.com/multiformats/go-multihash/pull/63))
2898 - Greatly improve peerstore memory usage ([libp2p/go-libp2p-peerstore#22](https://github.com/libp2p/go-libp2p-peerstore/pull/22))
2899 - Improve dht memory usage and peer tracking ([libp2p/go-libp2p-kad-dht#111](https://github.com/libp2p/go-libp2p-kad-dht/pull/111))
2900 - New libp2p metrics lib with lower overhead ([libp2p/go-libp2p-metrics#8](https://github.com/libp2p/go-libp2p-metrics/pull/8))
2901 - Fix memory leak that occurred when dialing many peers ([libp2p/go-libp2p-swarm#51](https://github.com/libp2p/go-libp2p-swarm/pull/51))
2902 - Wire up new dag interfaces to make sessions easier ([ipfs/go-ipfs#4641](https://github.com/ipfs/go-ipfs/pull/4641))
2903 - Documentation
2904 - Correct StorageMax config description ([ipfs/go-ipfs#4388](https://github.com/ipfs/go-ipfs/pull/4388))
2905 - Add how to download IPFS with IPFS doc ([ipfs/go-ipfs#4390](https://github.com/ipfs/go-ipfs/pull/4390))
2906 - Document gx release checklist item ([ipfs/go-ipfs#4480](https://github.com/ipfs/go-ipfs/pull/4480))
2907 - Add some documentation to CoreAPI ([ipfs/go-ipfs#4493](https://github.com/ipfs/go-ipfs/pull/4493))
2908 - Add interop tests to the release checklist ([ipfs/go-ipfs#4501](https://github.com/ipfs/go-ipfs/pull/4501))
2909 - Add badgerds to experimental-features ToC ([ipfs/go-ipfs#4537](https://github.com/ipfs/go-ipfs/pull/4537))
2910 - Fix typos and inconsistencies in commands documentation ([ipfs/go-ipfs#4552](https://github.com/ipfs/go-ipfs/pull/4552))
2911 - Add a document to help troubleshoot data transfers ([ipfs/go-ipfs#4332](https://github.com/ipfs/go-ipfs/pull/4332))
2912 - Add a bunch of documentation on public interfaces ([ipfs/go-ipfs#4599](https://github.com/ipfs/go-ipfs/pull/4599))
2913 - Expand the issue template and remove the severity field ([ipfs/go-ipfs#4624](https://github.com/ipfs/go-ipfs/pull/4624))
2914 - Add godocs for importers module ([ipfs/go-ipfs#4640](https://github.com/ipfs/go-ipfs/pull/4640))
2915 - Document make targets ([ipfs/go-ipfs#4653](https://github.com/ipfs/go-ipfs/pull/4653))
2916 - Add godocs for merkledag module ([ipfs/go-ipfs#4665](https://github.com/ipfs/go-ipfs/pull/4665))
2917 - Add godocs for unixfs module ([ipfs/go-ipfs#4664](https://github.com/ipfs/go-ipfs/pull/4664))
2918 - Add sharding to experimental features list ([ipfs/go-ipfs#4569](https://github.com/ipfs/go-ipfs/pull/4569))
2919 - Add godocs for routing module ([ipfs/go-ipfs#4676](https://github.com/ipfs/go-ipfs/pull/4676))
2920 - Add godocs for path module ([ipfs/go-ipfs#4689](https://github.com/ipfs/go-ipfs/pull/4689))
2921 - Add godocs for pin module ([ipfs/go-ipfs#4696](https://github.com/ipfs/go-ipfs/pull/4696))
2922 - Update link to filestore experimental status ([ipfs/go-ipfs#4557](https://github.com/ipfs/go-ipfs/pull/4557))
2923 - Bug fixes
2924 - Remove trailing slash in ipfs get paths, fixes #3729 ([ipfs/go-ipfs#4365](https://github.com/ipfs/go-ipfs/pull/4365))
2925 - fix deadlock in bitswap sessions ([ipfs/go-ipfs#4407](https://github.com/ipfs/go-ipfs/pull/4407))
2926 - Fix two race conditions (and possibly go routine leaks) in commands ([ipfs/go-ipfs#4406](https://github.com/ipfs/go-ipfs/pull/4406))
2927 - Fix output delay in ipfs pubsub sub ([ipfs/go-ipfs#4402](https://github.com/ipfs/go-ipfs/pull/4402))
2928 - Use correct context in AddWithContext ([ipfs/go-ipfs#4433](https://github.com/ipfs/go-ipfs/pull/4433))
2929 - Fix various IPNS republisher issues ([ipfs/go-ipfs#4440](https://github.com/ipfs/go-ipfs/pull/4440))
2930 - Fix error handling in commands add and get ([ipfs/go-ipfs#4454](https://github.com/ipfs/go-ipfs/pull/4454))
2931 - Fix hamt (sharding) delete issue ([ipfs/go-ipfs#4398](https://github.com/ipfs/go-ipfs/pull/4398))
2932 - More correctly check for reuseport support ([libp2p/go-reuseport#40](https://github.com/libp2p/go-reuseport/pull/40))
2933 - Fix goroutine leak in websockets transport ([libp2p/go-ws-transport#21](https://github.com/libp2p/go-ws-transport/pull/21))
2934 - Update badgerds to fix i386 windows build ([ipfs/go-ipfs#4464](https://github.com/ipfs/go-ipfs/pull/4464))
2935 - Only construct bitswap event loggable if necessary ([ipfs/go-ipfs#4533](https://github.com/ipfs/go-ipfs/pull/4533))
2936 - Ensure that flush on the mfs root flushes its directory ([ipfs/go-ipfs#4509](https://github.com/ipfs/go-ipfs/pull/4509))
2937 - Fix deferred unlock of pin lock in AddR ([ipfs/go-ipfs#4562](https://github.com/ipfs/go-ipfs/pull/4562))
2938 - Fix iOS builds ([ipfs/go-ipfs#4610](https://github.com/ipfs/go-ipfs/pull/4610))
2939 - Calling repo gc now frees up space with badgerds ([ipfs/go-ipfs#4578](https://github.com/ipfs/go-ipfs/pull/4578))
2940 - Fix leak in bitswap sessions shutdown ([ipfs/go-ipfs#4658](https://github.com/ipfs/go-ipfs/pull/4658))
2941 - Fix make on windows ([ipfs/go-ipfs#4682](https://github.com/ipfs/go-ipfs/pull/4682))
2942 - Ignore invalid key files in keystore directory ([ipfs/go-ipfs#4700](https://github.com/ipfs/go-ipfs/pull/4700))
2943 - General Changes and Refactorings
2944 - Extract and refactor commands library ([ipfs/go-ipfs#3856](https://github.com/ipfs/go-ipfs/pull/3856))
2945 - Remove all instances of `Default(false)` ([ipfs/go-ipfs#4042](https://github.com/ipfs/go-ipfs/pull/4042))
2946 - Build for all supported platforms when testing ([ipfs/go-ipfs#4445](https://github.com/ipfs/go-ipfs/pull/4445))
2947 - Refine gateway and namesys logging ([ipfs/go-ipfs#4428](https://github.com/ipfs/go-ipfs/pull/4428))
2948 - Demote bitswap error to an info ([ipfs/go-ipfs#4472](https://github.com/ipfs/go-ipfs/pull/4472))
2949 - Extract posinfo package to github.com/ipfs/go-ipfs-posinfo ([ipfs/go-ipfs#4669](https://github.com/ipfs/go-ipfs/pull/4669))
2950 - Move signature verification to ipns validator ([ipfs/go-ipfs#4628](https://github.com/ipfs/go-ipfs/pull/4628))
2951 - Extract importers/chunk module as go-ipfs-chunker ([ipfs/go-ipfs#4661](https://github.com/ipfs/go-ipfs/pull/4661))
2952 - Extract go-detect-race from Godeps ([ipfs/go-ipfs#4686](https://github.com/ipfs/go-ipfs/pull/4686))
2953 - Extract flags, delay, ds-help ([ipfs/go-ipfs#4685](https://github.com/ipfs/go-ipfs/pull/4685))
2954 - Extract routing package to go-ipfs-routing ([ipfs/go-ipfs#4703](https://github.com/ipfs/go-ipfs/pull/4703))
2955 - Extract blocks/blockstore package to go-ipfs-blockstore ([ipfs/go-ipfs#4707](https://github.com/ipfs/go-ipfs/pull/4707))
2956 - Add exchange.SessionExchange interface for exchanges that support sessions ([ipfs/go-ipfs#4709](https://github.com/ipfs/go-ipfs/pull/4709))
2957 - Extract thirdparty/pq to go-ipfs-pq ([ipfs/go-ipfs#4711](https://github.com/ipfs/go-ipfs/pull/4711))
2958 - Separate "path" from "path/resolver" ([ipfs/go-ipfs#4713](https://github.com/ipfs/go-ipfs/pull/4713))
2959 - Testing
2960 - Increase verbosity of t0088-repo-stat-symlink.sh test ([ipfs/go-ipfs#4434](https://github.com/ipfs/go-ipfs/pull/4434))
2961 - Make repo size test pass deterministically ([ipfs/go-ipfs#4443](https://github.com/ipfs/go-ipfs/pull/4443))
2962 - Always set IPFS_PATH in test-lib.sh ([ipfs/go-ipfs#4469](https://github.com/ipfs/go-ipfs/pull/4469))
2963 - Fix sharness docker ([ipfs/go-ipfs#4489](https://github.com/ipfs/go-ipfs/pull/4489))
2964 - Fix loops in sharness tests to fail the test if the inner command fails ([ipfs/go-ipfs#4482](https://github.com/ipfs/go-ipfs/pull/4482))
2965 - Improve bitswap tests, fix race conditions ([ipfs/go-ipfs#4499](https://github.com/ipfs/go-ipfs/pull/4499))
2966 - Fix circleci cache directory list ([ipfs/go-ipfs#4564](https://github.com/ipfs/go-ipfs/pull/4564))
2967 - Only run the build test on test_go_expensive ([ipfs/go-ipfs#4645](https://github.com/ipfs/go-ipfs/pull/4645))
2968 - Fix go test on Windows ([ipfs/go-ipfs#4632](https://github.com/ipfs/go-ipfs/pull/4632))
2969 - Fix some tests on FreeBSD ([ipfs/go-ipfs#4662](https://github.com/ipfs/go-ipfs/pull/4662))
2970
2971 ## v0.4.13 2017-11-16
2972
2973 Ipfs 0.4.13 is a patch release that fixes two high priority issues that were
2974 discovered in the 0.4.12 release.
2975
2976 Bug fixes:
2977 - Fix periodic bitswap deadlock ([ipfs/go-ipfs#4386](https://github.com/ipfs/go-ipfs/pull/4386))
2978 - Fix badgerds crash on startup ([ipfs/go-ipfs#4384](https://github.com/ipfs/go-ipfs/pull/4384))
2979
2980
2981 ## v0.4.12 2017-11-09
2982
2983 Ipfs 0.4.12 brings with it many important fixes for the huge spike in network
2984 size we've seen this past month. These changes include the Connection Manager,
2985 faster batching in `ipfs add`, libp2p fixes that reduce CPU usage, and a bunch
2986 of new documentation.
2987
2988 The most critical change is the 'Connection Manager': it allows an ipfs node to
2989 maintain a limited set of connections to other peers in the network. By default
2990 (and with no config changes required by the user), ipfs nodes will now try to
2991 maintain between 600 and 900 open connections. These limits are still likely
2992 higher than needed, and future releases may lower the default recommendation,
2993 but for now we want to make changes gradually. The rationale for this selection
2994 of numbers is as follows:
2995
2996 - The DHT routing table for a large network may rise to around 400 peers
2997 - Bitswap connections tend to be separate from the DHT
2998 - PubSub connections also generally are another distinct set of peers
2999 (including js-ipfs nodes)
3000
3001 Because of this, we selected 600 as a 'LowWater' number, and 900 as a
3002 'HighWater' number to avoid having to clear out connections too frequently.
3003 You can configure different numbers as you see fit via the `Swarm.ConnMgr`
3004 field in your ipfs config file. See
3005 [here](https://github.com/ipfs/go-ipfs/blob/master/docs/config.md#connmgr) for
3006 more details.
3007
3008 Disk utilization during `ipfs add` has been optimized for large files by doing
3009 batch writes in parallel. Previously, when adding a large file, users might have
3010 noticed that the add progressed by about 8MB at a time, with brief pauses in between.
3011 This was caused by quickly filling up the batch, then blocking while it was
3012 writing to disk. We now write to disk in the background while continuing to add
3013 the remainder of the file.
3014
3015 Other changes in this release have noticeably reduced memory consumption and CPU
3016 usage. This was done by optimising some frequently called functions in libp2p
3017 that were expensive in terms of both CPU usage and memory allocations. We also
3018 lowered the yamux accept buffer sizes which were raised over a year ago to
3019 combat a separate bug that has since been fixed.
3020
3021 And finally, thank you to everyone who filed bugs, tested out the release candidates,
3022 filed pull requests, and contributed in any other way to this release!
3023
3024 - Features
3025 - Implement Connection Manager ([ipfs/go-ipfs#4288](https://github.com/ipfs/go-ipfs/pull/4288))
3026 - Support multiple files in dag put ([ipfs/go-ipfs#4254](https://github.com/ipfs/go-ipfs/pull/4254))
3027 - Add 'raw' support to the dag put command ([ipfs/go-ipfs#4285](https://github.com/ipfs/go-ipfs/pull/4285))
3028 - Improvements
3029 - Parallelize dag batch flushing ([ipfs/go-ipfs#4296](https://github.com/ipfs/go-ipfs/pull/4296))
3030 - Update go-peerstream to improve CPU usage ([ipfs/go-ipfs#4323](https://github.com/ipfs/go-ipfs/pull/4323))
3031 - Add full support for CidV1 in Files API and Dag Modifier ([ipfs/go-ipfs#4026](https://github.com/ipfs/go-ipfs/pull/4026))
3032 - Lower yamux accept buffer size ([ipfs/go-ipfs#4326](https://github.com/ipfs/go-ipfs/pull/4326))
3033 - Optimise `ipfs pin update` command ([ipfs/go-ipfs#4348](https://github.com/ipfs/go-ipfs/pull/4348))
3034 - Documentation
3035 - Add some docs on plugins ([ipfs/go-ipfs#4255](https://github.com/ipfs/go-ipfs/pull/4255))
3036 - Add more info about private network bootstrap ([ipfs/go-ipfs#4270](https://github.com/ipfs/go-ipfs/pull/4270))
3037 - Add more info about `ipfs add` chunker option ([ipfs/go-ipfs#4306](https://github.com/ipfs/go-ipfs/pull/4306))
3038 - Remove cruft in readme and mention discourse forum ([ipfs/go-ipfs#4345](https://github.com/ipfs/go-ipfs/pull/4345))
3039 - Add note about updating before reporting issues ([ipfs/go-ipfs#4361](https://github.com/ipfs/go-ipfs/pull/4361))
3040 - Bug fixes
3041 - Fix FreeBSD build issues ([ipfs/go-ipfs#4275](https://github.com/ipfs/go-ipfs/pull/4275))
3042 - Don't crash when Datastore.StorageMax is not defined ([ipfs/go-ipfs#4246](https://github.com/ipfs/go-ipfs/pull/4246))
3043 - Do not call 'Connect' on NewStream in bitswap ([ipfs/go-ipfs#4317](https://github.com/ipfs/go-ipfs/pull/4317))
3044 - Filter out "" from active peers in bitswap sessions ([ipfs/go-ipfs#4316](https://github.com/ipfs/go-ipfs/pull/4316))
3045 - Fix "seeker can't seek" on specific files ([ipfs/go-ipfs#4320](https://github.com/ipfs/go-ipfs/pull/4320))
3046 - Do not set "gecos" field in Dockerfile ([ipfs/go-ipfs#4331](https://github.com/ipfs/go-ipfs/pull/4331))
3047 - Handle sym links in when calculating repo size ([ipfs/go-ipfs#4305](https://github.com/ipfs/go-ipfs/pull/4305))
3048 - General Changes and Refactorings
3049 - Fix indent in sharness tests ([ipfs/go-ipfs#4212](https://github.com/ipfs/go-ipfs/pull/4212))
3050 - Remove supernode routing ([ipfs/go-ipfs#4302](https://github.com/ipfs/go-ipfs/pull/4302))
3051 - Extract go-ipfs-addr ([ipfs/go-ipfs#4340](https://github.com/ipfs/go-ipfs/pull/4340))
3052 - Remove dead code and config files ([ipfs/go-ipfs#4357](https://github.com/ipfs/go-ipfs/pull/4357))
3053 - Update badgerds to 1.0 ([ipfs/go-ipfs#4327](https://github.com/ipfs/go-ipfs/pull/4327))
3054 - Wrap help descriptions under 80 chars ([ipfs/go-ipfs#4121](https://github.com/ipfs/go-ipfs/pull/4121))
3055 - Testing
3056 - Make sharness t0180-p2p less racy ([ipfs/go-ipfs#4310](https://github.com/ipfs/go-ipfs/pull/4310))
3057
3058
3059 ### v0.4.11 2017-09-14
3060
3061 Ipfs 0.4.11 is a larger release that brings many long-awaited features and
3062 performance improvements. These include new datastore options, more efficient
3063 bitswap transfers, greatly improved resource consumption, circuit relay
3064 support, ipld plugins, and more! Take a look at the full changelog below for a
3065 detailed list of every change.
3066
3067 The ipfs datastore has, until now, been a combination of leveldb and a custom
3068 git-like storage backend called 'flatfs'. This works well enough for the
3069 average user, but different ipfs usecases demand different backend
3070 configurations. To address this, we have changed the configuration file format
3071 for datastores to be a modular way of specifying exactly how you want the
3072 datastore to be structured. You will now be able to configure ipfs to use
3073 flatfs, leveldb, badger, an in-memory datastore, and more to suit your needs.
3074 See the new [datastore
3075 documentation](https://github.com/ipfs/go-ipfs/blob/master/docs/datastores.md)
3076 for more information.
3077
3078 Bitswap received some much needed attention during this release cycle. The
3079 concept of 'Bitswap Sessions' allows bitswap to associate requests for
3080 different blocks to the same underlying session, and from that infer better
3081 ways of requesting that data. In more concrete terms, parts of the ipfs
3082 codebase that take advantage of sessions (currently, only `ipfs pin add`) will
3083 cause much less extra traffic than before. This is done by making optimistic
3084 guesses about which nodes might be providing given blocks and not sending
3085 wantlist updates to every connected bitswap partner, as well as searching the
3086 DHT for providers less frequently. In future releases we will migrate over more
3087 ipfs commands to take advantage of bitswap sessions. As nodes update to this
3088 and future versions, expect to see idle bandwidth usage on the ipfs network
3089 go down noticeably.
3090
3091 The never ending effort to reduce resource consumption had a few important
3092 updates this release. First, the bitswap sessions changes discussed above will
3093 help with improving bandwidth usage. Aside from that there are two important
3094 libp2p updates that improved things significantly. The first was a fix to a bug
3095 in the dial limiter code that was causing it to not limit outgoing dials
3096 correctly. This resulted in ipfs running out of file descriptors very
3097 frequently (as well as incurring a decent amount of excess outgoing bandwidth),
3098 this has now been fixed. Users who previously received "too many open files"
3099 errors should see this much less often in 0.4.11. The second change was a
3100 memory leak in the DHT that was identified and fixed. Streams being tracked in
3101 a map in the DHT weren't being cleaned up after the peer disconnected leading
3102 to the multiplexer session not being cleaned up properly. This issue has been
3103 resolved, and now memory usage appears to be stable over time. There is still a
3104 lot of work to be done improving memory usage, but we feel this is a solid
3105 victory.
3106
3107 It is often said that NAT traversal is the hardest problem in peer to peer
3108 technology, we tend to agree with this. In an effort to provide a more
3109 ubiquitous p2p mesh, we have implemented a relay mechanism that allows willing
3110 peers to relay traffic for other peers who might not otherwise be able to
3111 communicate with each other. This feature is still pretty early, and currently
3112 users have to manually connect through a relay. The next step in this endeavour
3113 is automatic relaying, and research for this is currently in progress. We
3114 expect that when it lands, it will improve the perceived performance of ipfs by
3115 spending less time attempting connections to hard to reach nodes. A short guide
3116 on using the circuit relay feature can be found
3117 [here](https://github.com/ipfs/go-ipfs/blob/master/docs/experimental-features.md#circuit-relay).
3118
3119 The last feature we want to highlight (but by no means the last feature in this
3120 release) is our new plugin system. There are many different workflows and
3121 usecases that ipfs should be able to support, but not everyone wants to be able
3122 to use every feature. We could simply merge in all these features, but that
3123 causes problems for several reasons: first off, the size of the ipfs binary
3124 starts to get very large very quickly. Second, each of these different pieces
3125 needs to be maintained and updated independently, which would cause significant
3126 churn in the codebase. To address this, we have come up with a system that
3127 allows users to install plugins to the vanilla ipfs daemon that augment its
3128 capabilities. The first of these plugins are a [git
3129 plugin](https://github.com/ipfs/go-ipfs/blob/master/plugin/plugins/git/git.go)
3130 that allows ipfs to natively address git objects and an [ethereum
3131 plugin](https://github.com/ipfs/go-ipld-eth) that lets ipfs ingest and operate
3132 on all ethereum blockchain data. Soon to come are plugins for the bitcoin and
3133 zcash data formats. In the future, we will be adding plugins for other things
3134 like datastore backends and specialized libp2p network transports.
3135 You can read more on this topic in [Plugin docs](docs/plugins.md)
3136
3137 In order to simplify its integration with fs-repo-migrations, we've switched
3138 the ipfs/go-ipfs docker image from a musl base to a glibc base. For most users
3139 this will not be noticeable, but if you've been building your own images based
3140 off this image, you'll have to update your dockerfile. We recommend a
3141 multi-stage dockerfile, where the build stage is based off of a regular Debian or
3142 other glibc-based image, and the assembly stage is based off of the ipfs/go-ipfs
3143 image, and you copy build artifacts from the build stage to the assembly
3144 stage. Note, if you are using the docker image and see a deprecation message,
3145 please update your usage. We will stop supporting the old method of starting
3146 the dockerfile in the next release.
3147
3148 Finally, I would like to thank all of our contributors, users, supporters, and
3149 friends for helping us along the way. Ipfs would not be where it is without
3150 you.
3151
3152
3153 - Features
3154 - Add `--pin` option to `ipfs dag put` ([ipfs/go-ipfs#4004](https://github.com/ipfs/go-ipfs/pull/4004))
3155 - Add `--pin` option to `ipfs object put` ([ipfs/go-ipfs#4095](https://github.com/ipfs/go-ipfs/pull/4095))
3156 - Implement `--profile` option on `ipfs init` ([ipfs/go-ipfs#4001](https://github.com/ipfs/go-ipfs/pull/4001))
3157 - Add CID Codecs to `ipfs block put` ([ipfs/go-ipfs#4022](https://github.com/ipfs/go-ipfs/pull/4022))
3158 - Bitswap sessions ([ipfs/go-ipfs#3867](https://github.com/ipfs/go-ipfs/pull/3867))
3159 - Create plugin API and loader, add ipld-git plugin ([ipfs/go-ipfs#4033](https://github.com/ipfs/go-ipfs/pull/4033))
3160 - Make announced swarm addresses configurable ([ipfs/go-ipfs#3948](https://github.com/ipfs/go-ipfs/pull/3948))
3161 - Reprovider strategies ([ipfs/go-ipfs#4113](https://github.com/ipfs/go-ipfs/pull/4113))
3162 - Circuit Relay integration ([ipfs/go-ipfs#4091](https://github.com/ipfs/go-ipfs/pull/4091))
3163 - More configurable datastore configs ([ipfs/go-ipfs#3575](https://github.com/ipfs/go-ipfs/pull/3575))
3164 - Add experimental support for badger datastore ([ipfs/go-ipfs#4007](https://github.com/ipfs/go-ipfs/pull/4007))
3165 - Improvements
3166 - Add better support for Raw Nodes in MFS and elsewhere ([ipfs/go-ipfs#3996](https://github.com/ipfs/go-ipfs/pull/3996))
3167 - Added file size to response of `ipfs add` command ([ipfs/go-ipfs#4082](https://github.com/ipfs/go-ipfs/pull/4082))
3168 - Add /dnsaddr bootstrap nodes ([ipfs/go-ipfs#4127](https://github.com/ipfs/go-ipfs/pull/4127))
3169 - Do not publish public keys extractable from ID ([ipfs/go-ipfs#4020](https://github.com/ipfs/go-ipfs/pull/4020))
3170 - Documentation
3171 - Adding documentation that PubSub Sub can be encoded. ([ipfs/go-ipfs#3909](https://github.com/ipfs/go-ipfs/pull/3909))
3172 - Add Comms items from js-ipfs, including blog ([ipfs/go-ipfs#3936](https://github.com/ipfs/go-ipfs/pull/3936))
3173 - Add Developer Certificate of Origin ([ipfs/go-ipfs#4006](https://github.com/ipfs/go-ipfs/pull/4006))
3174 - Add `transports.md` document ([ipfs/go-ipfs#4034](https://github.com/ipfs/go-ipfs/pull/4034))
3175 - Add `experimental-features.md` document ([ipfs/go-ipfs#4036](https://github.com/ipfs/go-ipfs/pull/4036))
3176 - Update release docs ([ipfs/go-ipfs#4165](https://github.com/ipfs/go-ipfs/pull/4165))
3177 - Add documentation for datastore configs ([ipfs/go-ipfs#4223](https://github.com/ipfs/go-ipfs/pull/4223))
3178 - General update and clean-up of docs ([ipfs/go-ipfs#4222](https://github.com/ipfs/go-ipfs/pull/4222))
3179 - Bug fixes
3180 - Fix shutdown check in t0023 ([ipfs/go-ipfs#3969](https://github.com/ipfs/go-ipfs/pull/3969))
3181 - Fix pinning of unixfs sharded directories ([ipfs/go-ipfs#3975](https://github.com/ipfs/go-ipfs/pull/3975))
3182 - Show escaped url in gateway 404 message ([ipfs/go-ipfs#4005](https://github.com/ipfs/go-ipfs/pull/4005))
3183 - Fix early opening of bitswap message sender ([ipfs/go-ipfs#4069](https://github.com/ipfs/go-ipfs/pull/4069))
3184 - Fix determination of 'root' node in dag put ([ipfs/go-ipfs#4072](https://github.com/ipfs/go-ipfs/pull/4072))
3185 - Fix bad multipart message panic in gateway ([ipfs/go-ipfs#4053](https://github.com/ipfs/go-ipfs/pull/4053))
3186 - Add blocks to the blockstore before returning them from blockservice sessions ([ipfs/go-ipfs#4169](https://github.com/ipfs/go-ipfs/pull/4169))
3187 - Various fixes for /ipfs fuse code ([ipfs/go-ipfs#4194](https://github.com/ipfs/go-ipfs/pull/4194))
3188 - Fix memory leak in dht stream tracking ([ipfs/go-ipfs#4251](https://github.com/ipfs/go-ipfs/pull/4251))
3189 - General Changes and Refactorings
3190 - Require go 1.8 ([ipfs/go-ipfs#4044](https://github.com/ipfs/go-ipfs/pull/4044))
3191 - Change IPFS to use the new pluggable Block to IPLD decoding framework. ([ipfs/go-ipfs#4060](https://github.com/ipfs/go-ipfs/pull/4060))
3192 - Remove tour command from ipfs ([ipfs/go-ipfs#4123](https://github.com/ipfs/go-ipfs/pull/4123))
3193 - Add support for Go 1.9 ([ipfs/go-ipfs#4156](https://github.com/ipfs/go-ipfs/pull/4156))
3194 - Remove some dead code ([ipfs/go-ipfs#4204](https://github.com/ipfs/go-ipfs/pull/4204))
3195 - Switch docker image from musl to glibc ([ipfs/go-ipfs#4219](https://github.com/ipfs/go-ipfs/pull/4219))
3196
3197 ### v0.4.10 - 2017-06-27
3198
3199 Ipfs 0.4.10 is a patch release that contains several exciting new features,
3200 bug fixes and general improvements. Including new commands, easier corruption
3201 recovery, and a generally cleaner codebase.
3202
3203 The `ipfs pin` command has two new subcommands, `verify` and `update`. `ipfs
3204 pin verify` is used to scan the repo for pinned object graphs and check their
3205 integrity. Any issues are reported back with helpful error text to make error
3206 recovery simpler. This subcommand was added to help recover from datastore
3207 corruptions, particularly if using the experimental filestore and accidentally
3208 deleting tracked files.
3209 `ipfs pin update` was added to make the task of keeping a large, frequently
3210 changing object graph pinned. Previously users had to call `ipfs pin rm` on the
3211 old pin, and `ipfs pin add` on the new one. The 'new' `ipfs pin add` call would
3212 be very expensive as it would need to verify the entirety of the graph again.
3213 The `ipfs pin update` command takes shortcuts, portions of the graph that were
3214 covered under the old pin are assumed to be fine, and the command skips
3215 checking them.
3216
3217 Next up, we have finally implemented an `ipfs shutdown` command so users can
3218 shut down their ipfs daemons via the API. This is especially useful on
3219 platforms that make it difficult to control processes (Android, for example),
3220 and is also useful when needing to shut down a node remotely and you do not
3221 have access to the machine itself.
3222
3223 `ipfs add` has gained a new flag; the `--hash` flag allows you to select which
3224 hash function to use and we have given it the ability to select `blake2b-256`.
3225 This pushes us one step closer to shifting over to using blake2b as the
3226 default. Blake2b is significantly faster than sha2-256, and also is conjectured
3227 to provide superior security.
3228
3229 We have also finally implemented a very early (and experimental) `ipfs p2p`.
3230 This command and its subcommands will allow you to open up arbitrary streams to
3231 other ipfs peers through libp2p. The interfaces are a little bit clunky right
3232 now, but shouldn't get in the way of anyone wanting to try building a fully
3233 peer to peer application on top of ipfs and libp2p. For more info on this
3234 command, to ask questions, or to provide feedback, head over to the [feedback
3235 issue](https://github.com/ipfs/go-ipfs/issues/3994) for the command.
3236
3237 A few other subcommands and flags were added around the API, as well as many
3238 other requested improvements. See below for the full list of changes.
3239
3240
3241 - Features
3242 - Add support for specifying the hash function in `ipfs add` ([ipfs/go-ipfs#3919](https://github.com/ipfs/go-ipfs/pull/3919))
3243 - Implement `ipfs key {rm, rename}` ([ipfs/go-ipfs#3892](https://github.com/ipfs/go-ipfs/pull/3892))
3244 - Implement `ipfs shutdown` command ([ipfs/go-ipfs#3884](https://github.com/ipfs/go-ipfs/pull/3884))
3245 - Implement `ipfs pin update` ([ipfs/go-ipfs#3846](https://github.com/ipfs/go-ipfs/pull/3846))
3246 - Implement `ipfs pin verify` ([ipfs/go-ipfs#3843](https://github.com/ipfs/go-ipfs/pull/3843))
3247 - Implemented experimental p2p commands ([ipfs/go-ipfs#3943](https://github.com/ipfs/go-ipfs/pull/3943))
3248 - Improvements
3249 - Add MaxStorage field to output of "repo stat" ([ipfs/go-ipfs#3915](https://github.com/ipfs/go-ipfs/pull/3915))
3250 - Add Suborigin header to gateway responses ([ipfs/go-ipfs#3914](https://github.com/ipfs/go-ipfs/pull/3914))
3251 - Add "--file-order" option to "filestore ls" and "verify" ([ipfs/go-ipfs#3938](https://github.com/ipfs/go-ipfs/pull/3938))
3252 - Allow selecting ipns keys by Peer ID ([ipfs/go-ipfs#3882](https://github.com/ipfs/go-ipfs/pull/3882))
3253 - Don't redirect to trailing slash in gateway for `go get` ([ipfs/go-ipfs#3963](https://github.com/ipfs/go-ipfs/pull/3963))
3254 - Add 'ipfs dht findprovs --num-providers' to allow choosing number of providers to find ([ipfs/go-ipfs#3966](https://github.com/ipfs/go-ipfs/pull/3966))
3255 - Make sure all keystore keys get republished ([ipfs/go-ipfs#3951](https://github.com/ipfs/go-ipfs/pull/3951))
3256 - Documentation
3257 - Adding documentation on PubSub encodings ([ipfs/go-ipfs#3909](https://github.com/ipfs/go-ipfs/pull/3909))
3258 - Change 'necessary' to 'necessary' ([ipfs/go-ipfs#3941](https://github.com/ipfs/go-ipfs/pull/3941))
3259 - README.md: add Nix to the linux package managers ([ipfs/go-ipfs#3939](https://github.com/ipfs/go-ipfs/pull/3939))
3260 - More verbose errors in filestore ([ipfs/go-ipfs#3964](https://github.com/ipfs/go-ipfs/pull/3964))
3261 - Bug fixes
3262 - Fix typo in message when file size check fails ([ipfs/go-ipfs#3895](https://github.com/ipfs/go-ipfs/pull/3895))
3263 - Clean up bitswap ledgers when disconnecting ([ipfs/go-ipfs#3437](https://github.com/ipfs/go-ipfs/pull/3437))
3264 - Make odds of 'process added after close' panic less likely ([ipfs/go-ipfs#3940](https://github.com/ipfs/go-ipfs/pull/3940))
3265 - General Changes and Refactorings
3266 - Remove 'ipfs diag net' from codebase ([ipfs/go-ipfs#3916](https://github.com/ipfs/go-ipfs/pull/3916))
3267 - Update to dht code with provide announce option ([ipfs/go-ipfs#3928](https://github.com/ipfs/go-ipfs/pull/3928))
3268 - Apply the megacheck code vetting tool ([ipfs/go-ipfs#3949](https://github.com/ipfs/go-ipfs/pull/3949))
3269 - Expose port 8081 in docker container for /ws listener ([ipfs/go-ipfs#3954](https://github.com/ipfs/go-ipfs/pull/3954))
3270
3271 ### v0.4.9 - 2017-04-30
3272
3273 Ipfs 0.4.9 is a maintenance release that contains several useful bug fixes and
3274 improvements. Notably, `ipfs add` has gained the ability to select which CID
3275 version will be output. The common ipfs hash that looks like this:
3276 `QmRjNgF2mRLDT8AzCPsQbw1EYF2hDTFgfUmJokJPhCApYP` is a multihash. Multihashes
3277 allow us to specify the hashing algorithm that was used to verify the data, but
3278 it doesn't give us any indication of what format that data might be. To address
3279 that issue, we are adding another couple of bytes to the prefix that will allow us
3280 to indicate the format of the data referenced by the hash. This new format is
3281 called a Content ID, or CID for short. The previous bare multihashes will still
3282 be fully supported throughout the entire application as CID version 0. The new
3283 format with the type information will be CID version 1. To give an example,
3284 the content referenced by the hash above is "Hello Ipfs!". That same content,
3285 in the same format (dag-protobuf) using CIDv1 is
3286 `zb2rhkgXZVkT2xvDiuUsJENPSbWJy7fdYnsboLBzzEjjZMRoG`.
3287
3288 CIDv1 hashes are supported in ipfs versions back to 0.4.5. Nodes running 0.4.4
3289 and older will not be able to load content via CIDv1 and we recommend that they
3290 update to a newer version.
3291
3292 There are many other use cases for CIDs. Plugins can be written to
3293 allow ipfs to natively address content from any other merkletree based system,
3294 such as git, bitcoin, zcash and ethereum -- a few systems we've already started work on.
3295
3296 Aside from the CID flag, there were many other changes as noted below:
3297
3298 - Features
3299 - Add support for using CidV1 in 'ipfs add' ([ipfs/go-ipfs#3743](https://github.com/ipfs/go-ipfs/pull/3743))
3300 - Improvements
3301 - Use CID as an ETag strong validator ([ipfs/go-ipfs#3869](https://github.com/ipfs/go-ipfs/pull/3869))
3302 - Update go-multihash with keccak and bitcoin hashes ([ipfs/go-ipfs#3833](https://github.com/ipfs/go-ipfs/pull/3833))
3303 - Update go-is-domain to contain new gTLD ([ipfs/go-ipfs#3873](https://github.com/ipfs/go-ipfs/pull/3873))
3304 - Periodically flush cached directories during ipfs add ([ipfs/go-ipfs#3888](https://github.com/ipfs/go-ipfs/pull/3888))
3305 - improved gateway directory listing for sharded nodes ([ipfs/go-ipfs#3897](https://github.com/ipfs/go-ipfs/pull/3897))
3306 - Documentation
3307 - Change issue template to use Severity instead of Priority ([ipfs/go-ipfs#3834](https://github.com/ipfs/go-ipfs/pull/3834))
3308 - Fix link to commit hook script in contribute.md ([ipfs/go-ipfs#3863](https://github.com/ipfs/go-ipfs/pull/3863))
3309 - Fix install_unsupported for openbsd, add docs ([ipfs/go-ipfs#3880](https://github.com/ipfs/go-ipfs/pull/3880))
3310 - Bug fixes
3311 - Fix wantlist typo in Prometheus metric name ([ipfs/go-ipfs#3841](https://github.com/ipfs/go-ipfs/pull/3841))
3312 - Fix `make install` not using ldflags for git hash ([ipfs/go-ipfs#3838](https://github.com/ipfs/go-ipfs/pull/3838))
3313 - Fix `make install` not installing dependencies ([ipfs/go-ipfs#3848](https://github.com/ipfs/go-ipfs/pull/3848))
3314 - Fix erroneous Cache-Control: immutable on dir listings ([ipfs/go-ipfs#3870](https://github.com/ipfs/go-ipfs/pull/3870))
3315 - Fix bitswap accounting of 'BytesSent' in ledger ([ipfs/go-ipfs#3876](https://github.com/ipfs/go-ipfs/pull/3876))
3316 - Fix gateway handling of sharded directories ([ipfs/go-ipfs#3889](https://github.com/ipfs/go-ipfs/pull/3889))
3317 - Fix sharding memory growth, and fix resolver for unixfs paths ([ipfs/go-ipfs#3890](https://github.com/ipfs/go-ipfs/pull/3890))
3318 - General Changes and Refactorings
3319 - Use ctx var consistently in daemon.go ([ipfs/go-ipfs#3864](https://github.com/ipfs/go-ipfs/pull/3864))
3320 - Handle 404 correctly in dist_get tool ([ipfs/go-ipfs#3879](https://github.com/ipfs/go-ipfs/pull/3879))
3321 - Testing
3322 - Fix go fuse tests ([ipfs/go-ipfs#3840](https://github.com/ipfs/go-ipfs/pull/3840))
3323
3324 ### v0.4.8 - 2017-03-29
3325
3326 Ipfs 0.4.8 brings with it several improvements, bug fixes, documentation
3327 improvements, and the long awaited directory sharding code.
3328
3329 Currently, when too many items are added into a unixfs directory, the object
3330 gets too large and you may experience issues. To prevent this problem, and
3331 generally make working really large directories more efficient, we have
3332 implemented a HAMT structure for unixfs. To enable this feature, run:
3333 ```
3334 ipfs config --json Experimental.ShardingEnabled true
3335 ```
3336
3337 And restart your daemon if it was running.
3338
3339 Note: With this setting enabled, the hashes of any newly added directories will
3340 be different than they previously were, as the new code will use the sharded
3341 HAMT structure for all directories. Also, nodes running ipfs 0.4.7 and earlier
3342 will not be able to access directories created with this option.
3343
3344 That said, please do give it a try, let us know how it goes, and then take a
3345 look at all the other cool things added in 0.4.8 below.
3346
3347 - Features
3348 - Implement unixfs directory sharding ([ipfs/go-ipfs#3042](https://github.com/ipfs/go-ipfs/pull/3042))
3349 - Add DisableNatPortMap option ([ipfs/go-ipfs#3798](https://github.com/ipfs/go-ipfs/pull/3798))
3350 - Basic Filestore utility commands ([ipfs/go-ipfs#3653](https://github.com/ipfs/go-ipfs/pull/3653))
3351 - Improvements
3352 - More Robust GC ([ipfs/go-ipfs#3712](https://github.com/ipfs/go-ipfs/pull/3712))
3353 - Automatically fix permissions for docker volumes ([ipfs/go-ipfs#3744](https://github.com/ipfs/go-ipfs/pull/3744))
3354 - Core API refinements and efficiency improvements ([ipfs/go-ipfs#3493](https://github.com/ipfs/go-ipfs/pull/3493))
3355 - Improve IsPinned() lookups for indirect pins ([ipfs/go-ipfs#3809](https://github.com/ipfs/go-ipfs/pull/3809))
3356 - Documentation
3357 - Improve 'name' and 'key' helptexts ([ipfs/go-ipfs#3806](https://github.com/ipfs/go-ipfs/pull/3806))
3358 - Update link to paper in dev.md ([ipfs/go-ipfs#3812](https://github.com/ipfs/go-ipfs/pull/3812))
3359 - Add test to enforce helptext on commands ([ipfs/go-ipfs#2648](https://github.com/ipfs/go-ipfs/pull/2648))
3360 - Bug fixes
3361 - Remove bloom filter check on Put call in blockstore ([ipfs/go-ipfs#3782](https://github.com/ipfs/go-ipfs/pull/3782))
3362 - Re-add the GOPATH checking functionality ([ipfs/go-ipfs#3787](https://github.com/ipfs/go-ipfs/pull/3787))
3363 - Use fsrepo.IsInitialized to test for initialization ([ipfs/go-ipfs#3805](https://github.com/ipfs/go-ipfs/pull/3805))
3364 - Return 404 Not Found for failed path resolutions ([ipfs/go-ipfs#3777](https://github.com/ipfs/go-ipfs/pull/3777))
3365 - Fix 'dist\_get' failing without failing ([ipfs/go-ipfs#3818](https://github.com/ipfs/go-ipfs/pull/3818))
3366 - Update iptb with fix for t0130 hanging issue ([ipfs/go-ipfs#3823](https://github.com/ipfs/go-ipfs/pull/3823))
3367 - fix hidden file detection on windows ([ipfs/go-ipfs#3829](https://github.com/ipfs/go-ipfs/pull/3829))
3368 - General Changes and Refactorings
3369 - Fix multiple govet warnings ([ipfs/go-ipfs#3824](https://github.com/ipfs/go-ipfs/pull/3824))
3370 - Make Golint happy in the blocks submodule ([ipfs/go-ipfs#3827](https://github.com/ipfs/go-ipfs/pull/3827))
3371 - Testing
3372 - Enable codeclimate for automated linting and vetting ([ipfs/go-ipfs#3821](https://github.com/ipfs/go-ipfs/pull/3821))
3373 - Fix EOF test failure with Multipart.Read ([ipfs/go-ipfs#3804](https://github.com/ipfs/go-ipfs/pull/3804))
3374
3375 ### v0.4.7 - 2017-03-15
3376
3377 Ipfs 0.4.7 contains several exciting new features!
3378 First off, The long awaited filestore feature has been merged, allowing users
3379 the option to not have ipfs store chunked copies of added files in the
3380 blockstore, pushing to burden of ensuring those files are not changed to the
3381 user. The filestore feature is currently still experimental, and must be
3382 enabled in your config with:
3383 ```
3384 ipfs config --json Experimental.FilestoreEnabled true
3385 ```
3386 before it can be used. Please see [this issue](https://github.com/ipfs/go-ipfs/issues/3397#issuecomment-284337564) for more details.
3387
3388 Next up, We have merged initial support for ipfs 'Private Networks'. This
3389 feature allows users to run ipfs in a mode that will only connect to other
3390 peers in the private network. This feature, like the filestore is being
3391 released experimentally, but if you're interested please try it out.
3392 Instructions for setting it up can be found
3393 [here](https://github.com/ipfs/go-ipfs/issues/3397#issuecomment-284341649).
3394
3395 This release also enables support for the 'mplex' stream muxer by default. This
3396 stream multiplexing protocol was available previously via the
3397 `--enable-mplex-experiment` daemon flag, but has now graduated to being 'less
3398 experimental' and no longer requires the flag to use it.
3399
3400 Aside from those, we have a good number of bug fixes, perf improvements and new
3401 tests. Heres a list of highlights:
3402
3403 - Features
3404 - Implement basic filestore 'no-copy' functionality ([ipfs/go-ipfs#3629](https://github.com/ipfs/go-ipfs/pull/3629))
3405 - Add support for private ipfs networks ([ipfs/go-ipfs#3697](https://github.com/ipfs/go-ipfs/pull/3697))
3406 - Enable 'mplex' stream muxer by default ([ipfs/go-ipfs#3725](https://github.com/ipfs/go-ipfs/pull/3725))
3407 - Add `--quieter` option to `ipfs add` ([ipfs/go-ipfs#3770](https://github.com/ipfs/go-ipfs/pull/3770))
3408 - Report progress during `pin add` via `--progress` ([ipfs/go-ipfs#3671](https://github.com/ipfs/go-ipfs/pull/3671))
3409 - Improvements
3410 - Allow `ipfs get` to handle content added with raw leaves option ([ipfs/go-ipfs#3757](https://github.com/ipfs/go-ipfs/pull/3757))
3411 - Fix accuracy of progress bar on `ipfs get` ([ipfs/go-ipfs#3758](https://github.com/ipfs/go-ipfs/pull/3758))
3412 - Limit number of objects in batches to prevent too many fds issue ([ipfs/go-ipfs#3756](https://github.com/ipfs/go-ipfs/pull/3756))
3413 - Add more info to bitswap stat ([ipfs/go-ipfs#3635](https://github.com/ipfs/go-ipfs/pull/3635))
3414 - Add multiple performance metrics ([ipfs/go-ipfs#3615](https://github.com/ipfs/go-ipfs/pull/3615))
3415 - Make `dist_get` fall back to other downloaders if one fails ([ipfs/go-ipfs#3692](https://github.com/ipfs/go-ipfs/pull/3692))
3416 - Documentation
3417 - Add Arch Linux install instructions to readme ([ipfs/go-ipfs#3742](https://github.com/ipfs/go-ipfs/pull/3742))
3418 - Improve release checklist document ([ipfs/go-ipfs#3717](https://github.com/ipfs/go-ipfs/pull/3717))
3419 - Bug fixes
3420 - Fix drive root parsing on windows ([ipfs/go-ipfs#3328](https://github.com/ipfs/go-ipfs/pull/3328))
3421 - Fix panic in ipfs get when passing no parameters to API ([ipfs/go-ipfs#3768](https://github.com/ipfs/go-ipfs/pull/3768))
3422 - Fix breakage of `ipfs pin add` api output ([ipfs/go-ipfs#3760](https://github.com/ipfs/go-ipfs/pull/3760))
3423 - Fix issue in DHT queries that was causing poor record replication ([ipfs/go-ipfs#3748](https://github.com/ipfs/go-ipfs/pull/3748))
3424 - Fix `ipfs mount` crashing if no name was published before ([ipfs/go-ipfs#3728](https://github.com/ipfs/go-ipfs/pull/3728))
3425 - Add `self` key to the `ipfs key list` listing ([ipfs/go-ipfs#3734](https://github.com/ipfs/go-ipfs/pull/3734))
3426 - Fix panic when shutting down `ipfs daemon` pre gateway setup ([ipfs/go-ipfs#3723](https://github.com/ipfs/go-ipfs/pull/3723))
3427 - General Changes and Refactorings
3428 - Refactor `EnumerateChildren` to avoid need for bestEffort parameter ([ipfs/go-ipfs#3700](https://github.com/ipfs/go-ipfs/pull/3700))
3429 - Update fuse dependency, fixing several issues ([ipfs/go-ipfs#3727](https://github.com/ipfs/go-ipfs/pull/3727))
3430 - Add `install_unsupported` makefile target for 'exotic' systems ([ipfs/go-ipfs#3719](https://github.com/ipfs/go-ipfs/pull/3719))
3431 - Deprecate implicit daemon argument in Dockerfile ([ipfs/go-ipfs#3685](https://github.com/ipfs/go-ipfs/pull/3685))
3432 - Testing
3433 - Add test to ensure helptext is under 80 columns wide ([ipfs/go-ipfs#3774](https://github.com/ipfs/go-ipfs/pull/3774))
3434 - Add unit tests for auto migration code ([ipfs/go-ipfs#3618](https://github.com/ipfs/go-ipfs/pull/3618))
3435 - Fix iptb stop issue in sharness tests ([ipfs/go-ipfs#3714](https://github.com/ipfs/go-ipfs/pull/3714))
3436
3437
3438 ### v0.4.6 - 2017-02-21
3439
3440 Ipfs 0.4.6 contains several bug fixes related to migrations and also contains a
3441 few other improvements to other parts of the codebase. Notably:
3442
3443 - The default config will now contain some ipv6 addresses for bootstrap nodes.
3444 - `ipfs pin add` should be faster and consume less memory.
3445 - Pinning thousands of files no longer causes superlinear usage of storage space.
3446
3447 - Improvements
3448 - Make pinset sharding deterministic ([ipfs/go-ipfs#3640](https://github.com/ipfs/go-ipfs/pull/3640))
3449 - Update to go-multihash with blake2 ([ipfs/go-ipfs#3649](https://github.com/ipfs/go-ipfs/pull/3649))
3450 - Pass cids instead of nodes around in EnumerateChildrenAsync ([ipfs/go-ipfs#3598](https://github.com/ipfs/go-ipfs/pull/3598))
3451 - Add /ip6 bootstrap nodes ([ipfs/go-ipfs#3523](https://github.com/ipfs/go-ipfs/pull/3523))
3452 - Add sub-object support to `dag get` command ([ipfs/go-ipfs#3687](https://github.com/ipfs/go-ipfs/pull/3687))
3453 - Add half-closed streams support to multiplex experiment ([ipfs/go-ipfs#3695](https://github.com/ipfs/go-ipfs/pull/3695))
3454 - Documentation
3455 - Add the snap installation instructions ([ipfs/go-ipfs#3663](https://github.com/ipfs/go-ipfs/pull/3663))
3456 - Add closed PRs, Issues throughput ([ipfs/go-ipfs#3602](https://github.com/ipfs/go-ipfs/pull/3602))
3457 - Bug fixes
3458 - Fix auto-migration on docker nodes ([ipfs/go-ipfs#3698](https://github.com/ipfs/go-ipfs/pull/3698))
3459 - Update flatfs to v1.1.2, fixing directory fd issue ([ipfs/go-ipfs#3711](https://github.com/ipfs/go-ipfs/pull/3711))
3460 - General Changes and Refactorings
3461 - Remove `FindProviders` from routing mocks ([ipfs/go-ipfs#3617](https://github.com/ipfs/go-ipfs/pull/3617))
3462 - Use Marshalers instead of PostRun to process `block rm` output ([ipfs/go-ipfs#3708](https://github.com/ipfs/go-ipfs/pull/3708))
3463 - Testing
3464 - Makefile rework and sharness test coverage ([ipfs/go-ipfs#3504](https://github.com/ipfs/go-ipfs/pull/3504))
3465 - Print out all daemon stderr files when iptb stop fails ([ipfs/go-ipfs#3701](https://github.com/ipfs/go-ipfs/pull/3701))
3466 - Add tests for recursively pinning a dag ([ipfs/go-ipfs#3691](https://github.com/ipfs/go-ipfs/pull/3691))
3467 - Fix lack of commit hash during build ([ipfs/go-ipfs#3705](https://github.com/ipfs/go-ipfs/pull/3705))
3468
3469 ### v0.4.5 - 2017-02-11
3470
3471 #### Changes from rc3 to rc4
3472 - Update to fixed webui. ([ipfs/go-ipfs#3669](https://github.com/ipfs/go-ipfs/pull/3669))
3473
3474 #### Changes from rc2 to rc3
3475 - Fix handling of null arrays in cbor ipld objects. ([ipfs/go-ipfs#3666](https://github.com/ipfs/go-ipfs/pull/3666))
3476 - Add env var to enable yamux debug logging. ([ipfs/go-ipfs#3668](https://github.com/ipfs/go-ipfs/pull/3668))
3477 - Fix libc check during auto-migrations. ([ipfs/go-ipfs#3665](https://github.com/ipfs/go-ipfs/pull/3665))
3478
3479 #### Changes from rc1 to rc2
3480 - Fixed json output of ipld objects in `ipfs dag get` ([ipfs/go-ipfs#3655](https://github.com/ipfs/go-ipfs/pull/3655))
3481
3482 #### Changes since 0.4.4
3483
3484 - Notable changes
3485 - IPLD and CIDs
3486 - Rework go-ipfs to use Content IDs ([ipfs/go-ipfs#3187](https://github.com/ipfs/go-ipfs/pull/3187)) ([ipfs/go-ipfs#3290](https://github.com/ipfs/go-ipfs/pull/3290))
3487 - Turn merkledag.Node into an interface ([ipfs/go-ipfs#3301](https://github.com/ipfs/go-ipfs/pull/3301))
3488 - Implement cbor ipld nodes ([ipfs/go-ipfs#3325](https://github.com/ipfs/go-ipfs/pull/3325))
3489 - Allow cid format selection in block put command ([ipfs/go-ipfs#3324](https://github.com/ipfs/go-ipfs/pull/3324)) ([ipfs/go-ipfs#3483](https://github.com/ipfs/go-ipfs/pull/3483))
3490 - Bitswap protocol extension to handle cids ([ipfs/go-ipfs#3297](https://github.com/ipfs/go-ipfs/pull/3297))
3491 - Add dag get to read-only api ([ipfs/go-ipfs#3499](https://github.com/ipfs/go-ipfs/pull/3499))
3492 - Raw Nodes
3493 - Implement 'Raw Node' node type for addressing raw data ([ipfs/go-ipfs#3307](https://github.com/ipfs/go-ipfs/pull/3307))
3494 - Optimize DagService GetLinks for Raw Nodes. ([ipfs/go-ipfs#3351](https://github.com/ipfs/go-ipfs/pull/3351))
3495 - Experimental PubSub
3496 - Added a very basic pubsub implementation ([ipfs/go-ipfs#3202](https://github.com/ipfs/go-ipfs/pull/3202))
3497 - Core API
3498 - gateway: use core api for serving GET/HEAD/POST ([ipfs/go-ipfs#3244](https://github.com/ipfs/go-ipfs/pull/3244))
3499
3500 - Improvements
3501 - Disable auto-gc check in 'ipfs cat' ([ipfs/go-ipfs#3100](https://github.com/ipfs/go-ipfs/pull/3100))
3502 - Add `bitswap ledger` command ([ipfs/go-ipfs#2852](https://github.com/ipfs/go-ipfs/pull/2852))
3503 - Add `ipfs block rm` command. ([ipfs/go-ipfs#2962](https://github.com/ipfs/go-ipfs/pull/2962))
3504 - Add config option to disable bandwidth metrics ([ipfs/go-ipfs#3381](https://github.com/ipfs/go-ipfs/pull/3381))
3505 - Add experimental dht 'client mode' flag ([ipfs/go-ipfs#3269](https://github.com/ipfs/go-ipfs/pull/3269))
3506 - Add config option to set reprovider interval ([ipfs/go-ipfs#3101](https://github.com/ipfs/go-ipfs/pull/3101))
3507 - Add `ipfs dht provide` command ([ipfs/go-ipfs#3106](https://github.com/ipfs/go-ipfs/pull/3106))
3508 - Add stream info to `ipfs swarm peers -v` ([ipfs/go-ipfs#3352](https://github.com/ipfs/go-ipfs/pull/3352))
3509 - Add option to enable go-multiplex experiment ([ipfs/go-ipfs#3447](https://github.com/ipfs/go-ipfs/pull/3447))
3510 - Basic Keystore implementation ([ipfs/go-ipfs#3472](https://github.com/ipfs/go-ipfs/pull/3472))
3511 - Make `ipfs add --local` not send providers messages ([ipfs/go-ipfs#3102](https://github.com/ipfs/go-ipfs/pull/3102))
3512 - Fix bug in `ipfs tar add` that buffered input in memory ([ipfs/go-ipfs#3334](https://github.com/ipfs/go-ipfs/pull/3334))
3513 - Make blockstore retry operations on temporary errors ([ipfs/go-ipfs#3091](https://github.com/ipfs/go-ipfs/pull/3091))
3514 - Don't hold the PinLock in adder when not pinning. ([ipfs/go-ipfs#3222](https://github.com/ipfs/go-ipfs/pull/3222))
3515 - Validate repo/api file and improve error message ([ipfs/go-ipfs#3219](https://github.com/ipfs/go-ipfs/pull/3219))
3516 - no longer hard code gomaxprocs ([ipfs/go-ipfs#3357](https://github.com/ipfs/go-ipfs/pull/3357))
3517 - Updated Bash complete script ([ipfs/go-ipfs#3377](https://github.com/ipfs/go-ipfs/pull/3377))
3518 - Remove expensive debug statement in blockstore AllKeysChan ([ipfs/go-ipfs#3384](https://github.com/ipfs/go-ipfs/pull/3384))
3519 - Remove GC timeout, fix GC tests ([ipfs/go-ipfs#3494](https://github.com/ipfs/go-ipfs/pull/3494))
3520 - Fix `ipfs pin add` resource consumption ([ipfs/go-ipfs#3495](https://github.com/ipfs/go-ipfs/pull/3495)) ([ipfs/go-ipfs#3571](https://github.com/ipfs/go-ipfs/pull/3571))
3521 - Add IPNS entry to DHT cache after publish ([ipfs/go-ipfs#3501](https://github.com/ipfs/go-ipfs/pull/3501))
3522 - Add in `--routing=none` daemon option ([ipfs/go-ipfs#3605](https://github.com/ipfs/go-ipfs/pull/3605))
3523
3524 - Bitswap
3525 - Don't re-provide blocks we've provided very recently ([ipfs/go-ipfs#3105](https://github.com/ipfs/go-ipfs/pull/3105))
3526 - Add a deadline to sendmsg calls ([ipfs/go-ipfs#3445](https://github.com/ipfs/go-ipfs/pull/3445))
3527 - cleanup bitswap and handle message send failure slightly better ([ipfs/go-ipfs#3408](https://github.com/ipfs/go-ipfs/pull/3408))
3528 - Increase wantlist resend delay to one minute ([ipfs/go-ipfs#3448](https://github.com/ipfs/go-ipfs/pull/3448))
3529 - Fix issue where wantlist fullness wasn't included in messages ([ipfs/go-ipfs#3461](https://github.com/ipfs/go-ipfs/pull/3461))
3530 - Only pass keys down newBlocks chan in bitswap ([ipfs/go-ipfs#3271](https://github.com/ipfs/go-ipfs/pull/3271))
3531
3532 - Bug fixes
3533 - gateway: fix --writable flag ([ipfs/go-ipfs#3206](https://github.com/ipfs/go-ipfs/pull/3206))
3534 - Fix relative seek in unixfs not expanding file properly ([ipfs/go-ipfs#3095](https://github.com/ipfs/go-ipfs/pull/3095))
3535 - Update multicodec service names for ipfs services ([ipfs/go-ipfs#3132](https://github.com/ipfs/go-ipfs/pull/3132))
3536 - dht: add missing protocol ID to newStream call ([ipfs/go-ipfs#3203](https://github.com/ipfs/go-ipfs/pull/3203))
3537 - Return immediately on namesys error ([ipfs/go-ipfs#3345](https://github.com/ipfs/go-ipfs/pull/3345))
3538 - Improve osxfuse handling ([ipfs/go-ipfs#3098](https://github.com/ipfs/go-ipfs/pull/3098)) ([ipfs/go-ipfs#3413](https://github.com/ipfs/go-ipfs/pull/3413))
3539 - commands: fix opt.Description panic when desc was empty ([ipfs/go-ipfs#3521](https://github.com/ipfs/go-ipfs/pull/3521))
3540 - Fixes #3133: Properly handle release candidates in version comparison ([ipfs/go-ipfs#3136](https://github.com/ipfs/go-ipfs/pull/3136))
3541 - Don't drop error in readStreamedJson. ([ipfs/go-ipfs#3276](https://github.com/ipfs/go-ipfs/pull/3276))
3542 - Error out on invalid `--routing` option ([ipfs/go-ipfs#3482](https://github.com/ipfs/go-ipfs/pull/3482))
3543 - Respect contexts when returning diagnostics responses ([ipfs/go-ipfs#3353](https://github.com/ipfs/go-ipfs/pull/3353))
3544 - Fix json marshalling of pbnode ([ipfs/go-ipfs#3507](https://github.com/ipfs/go-ipfs/pull/3507))
3545
3546 - General changes and refactorings
3547 - Disable Suborigins the spec changed and our impl conflicts ([ipfs/go-ipfs#3519](https://github.com/ipfs/go-ipfs/pull/3519))
3548 - Avoid sending provide messages for pinsets ([ipfs/go-ipfs#3103](https://github.com/ipfs/go-ipfs/pull/3103))
3549 - Refactor cli handling to expose argument parsing functionality ([ipfs/go-ipfs#3308](https://github.com/ipfs/go-ipfs/pull/3308))
3550 - Create a FilestoreNode object to carry PosInfo ([ipfs/go-ipfs#3314](https://github.com/ipfs/go-ipfs/pull/3314))
3551 - Print 'n/a' instead of zero latency in `ipfs swarm peers` ([ipfs/go-ipfs#3491](https://github.com/ipfs/go-ipfs/pull/3491))
3552 - Add DAGService.GetLinks() method to optimize traversals. ([ipfs/go-ipfs#3255](https://github.com/ipfs/go-ipfs/pull/3255))
3553 - Make path resolver no longer require whole IpfsNode for construction ([ipfs/go-ipfs#3321](https://github.com/ipfs/go-ipfs/pull/3321))
3554 - Distinguish between Offline and Local Modes of daemon operation. ([ipfs/go-ipfs#3259](https://github.com/ipfs/go-ipfs/pull/3259))
3555 - Separate out the GC Locking from the Blockstore interface. ([ipfs/go-ipfs#3348](https://github.com/ipfs/go-ipfs/pull/3348))
3556 - Avoid unnecessary allocs in datastore key handling ([ipfs/go-ipfs#3407](https://github.com/ipfs/go-ipfs/pull/3407))
3557 - Use NextSync method for datastore queries ([ipfs/go-ipfs#3386](https://github.com/ipfs/go-ipfs/pull/3386))
3558 - Switch unixfs.Metadata.MimeType to optional ([ipfs/go-ipfs#3458](https://github.com/ipfs/go-ipfs/pull/3458))
3559 - Fix path parsing in `ipfs name publish` ([ipfs/go-ipfs#3592](https://github.com/ipfs/go-ipfs/pull/3592))
3560 - Fix inconsistent `ipfs stats bw` formatting ([ipfs/go-ipfs#3554](https://github.com/ipfs/go-ipfs/pull/3554))
3561 - Set the libp2p agent version based on version string ([ipfs/go-ipfs#3569](https://github.com/ipfs/go-ipfs/pull/3569))
3562
3563 - Cross Platform Changes
3564 - Fix 'dist_get' script on BSDs. ([ipfs/go-ipfs#3264](https://github.com/ipfs/go-ipfs/pull/3264))
3565 - ulimit: Tune resource limits on BSDs ([ipfs/go-ipfs#3374](https://github.com/ipfs/go-ipfs/pull/3374))
3566
3567 - Metrics
3568 - Introduce go-metrics-interface ([ipfs/go-ipfs#3189](https://github.com/ipfs/go-ipfs/pull/3189))
3569 - Fix metrics injection ([ipfs/go-ipfs#3315](https://github.com/ipfs/go-ipfs/pull/3315))
3570
3571 - Misc
3572 - Bump Go requirement to 1.7 ([ipfs/go-ipfs#3111](https://github.com/ipfs/go-ipfs/pull/3111))
3573 - Merge 0.4.3 release candidate changes back into master ([ipfs/go-ipfs#3248](https://github.com/ipfs/go-ipfs/pull/3248))
3574 - Add security@ipfs.io GPG key to assets ([ipfs/go-ipfs#2997](https://github.com/ipfs/go-ipfs/pull/2997))
3575 - Improve makefiles ([ipfs/go-ipfs#2999](https://github.com/ipfs/go-ipfs/pull/2999)) ([ipfs/go-ipfs#3265](https://github.com/ipfs/go-ipfs/pull/3265))
3576 - Refactor install.sh script ([ipfs/go-ipfs#3194](https://github.com/ipfs/go-ipfs/pull/3194))
3577 - Add test check for go code formatting ([ipfs/go-ipfs#3421](https://github.com/ipfs/go-ipfs/pull/3421))
3578 - bin: dist_get script: prevents get_go_vars() returns same values twice ([ipfs/go-ipfs#3079](https://github.com/ipfs/go-ipfs/pull/3079))
3579
3580 - Dependencies
3581 - Update libp2p to have fixed spdystream dep ([ipfs/go-ipfs#3210](https://github.com/ipfs/go-ipfs/pull/3210))
3582 - Update libp2p and dht packages ([ipfs/go-ipfs#3263](https://github.com/ipfs/go-ipfs/pull/3263))
3583 - Update to libp2p 4.0.1 and propagate other changes ([ipfs/go-ipfs#3284](https://github.com/ipfs/go-ipfs/pull/3284))
3584 - Update to libp2p 4.0.4 ([ipfs/go-ipfs#3361](https://github.com/ipfs/go-ipfs/pull/3361))
3585 - Update go-libp2p across codebase ([ipfs/go-ipfs#3406](https://github.com/ipfs/go-ipfs/pull/3406))
3586 - Update to go-libp2p 4.1.0 ([ipfs/go-ipfs#3373](https://github.com/ipfs/go-ipfs/pull/3373))
3587 - Update deps for libp2p 3.4.0 ([ipfs/go-ipfs#3110](https://github.com/ipfs/go-ipfs/pull/3110))
3588 - Update go-libp2p-swarm with deadlock fixes ([ipfs/go-ipfs#3339](https://github.com/ipfs/go-ipfs/pull/3339))
3589 - Update to new cid and ipld node packages ([ipfs/go-ipfs#3326](https://github.com/ipfs/go-ipfs/pull/3326))
3590 - Update to newer ipld node interface with Copy and better Tree ([ipfs/go-ipfs#3391](https://github.com/ipfs/go-ipfs/pull/3391))
3591 - Update experimental go-multiplex to 0.2.6 ([ipfs/go-ipfs#3475](https://github.com/ipfs/go-ipfs/pull/3475))
3592 - Rework routing interfaces to make separation easier ([ipfs/go-ipfs#3107](https://github.com/ipfs/go-ipfs/pull/3107))
3593 - Update to dht code with fixed GetClosestPeers ([ipfs/go-ipfs#3346](https://github.com/ipfs/go-ipfs/pull/3346))
3594 - Move go-is-domain to gx ([ipfs/go-ipfs#3077](https://github.com/ipfs/go-ipfs/pull/3077))
3595 - Extract thirdparty/loggables and thirdparty/peerset ([ipfs/go-ipfs#3204](https://github.com/ipfs/go-ipfs/pull/3204))
3596 - Completely remove go-key dep ([ipfs/go-ipfs#3439](https://github.com/ipfs/go-ipfs/pull/3439))
3597 - Remove randbo dep, its no longer needed ([ipfs/go-ipfs#3118](https://github.com/ipfs/go-ipfs/pull/3118))
3598 - Update libp2p for identify configuration updates ([ipfs/go-ipfs#3539](https://github.com/ipfs/go-ipfs/pull/3539))
3599 - Use newer flatfs sharding scheme ([ipfs/go-ipfs#3608](https://github.com/ipfs/go-ipfs/pull/3608))
3600
3601 - Testing
3602 - fix test_fsh arg quoting in ipfs-test-lib ([ipfs/go-ipfs#3085](https://github.com/ipfs/go-ipfs/pull/3085))
3603 - 100% coverage for blocks/blocksutil ([ipfs/go-ipfs#3090](https://github.com/ipfs/go-ipfs/pull/3090))
3604 - 100% coverage on blocks/set ([ipfs/go-ipfs#3084](https://github.com/ipfs/go-ipfs/pull/3084))
3605 - 81% coverage on blockstore ([ipfs/go-ipfs#3074](https://github.com/ipfs/go-ipfs/pull/3074))
3606 - 80% coverage of unixfs/mod ([ipfs/go-ipfs#3096](https://github.com/ipfs/go-ipfs/pull/3096))
3607 - 82% coverage on blocks ([ipfs/go-ipfs#3086](https://github.com/ipfs/go-ipfs/pull/3086))
3608 - 87% coverage on unixfs ([ipfs/go-ipfs#3492](https://github.com/ipfs/go-ipfs/pull/3492))
3609 - Improve coverage on routing/offline ([ipfs/go-ipfs#3516](https://github.com/ipfs/go-ipfs/pull/3516))
3610 - Add test for flags package ([ipfs/go-ipfs#3449](https://github.com/ipfs/go-ipfs/pull/3449))
3611 - improve test coverage on merkledag package ([ipfs/go-ipfs#3113](https://github.com/ipfs/go-ipfs/pull/3113))
3612 - 80% coverage of unixfs/io ([ipfs/go-ipfs#3097](https://github.com/ipfs/go-ipfs/pull/3097))
3613 - Accept more than one digit in repo version tests ([ipfs/go-ipfs#3130](https://github.com/ipfs/go-ipfs/pull/3130))
3614 - Fix typo in hash in t0050 ([ipfs/go-ipfs#3170](https://github.com/ipfs/go-ipfs/pull/3170))
3615 - fix bug in pinsets and add a stress test for the scenario ([ipfs/go-ipfs#3273](https://github.com/ipfs/go-ipfs/pull/3273)) ([ipfs/go-ipfs#3302](https://github.com/ipfs/go-ipfs/pull/3302))
3616 - Report coverage to codecov ([ipfs/go-ipfs#3473](https://github.com/ipfs/go-ipfs/pull/3473))
3617 - Add test for 'ipfs config replace' ([ipfs/go-ipfs#3073](https://github.com/ipfs/go-ipfs/pull/3073))
3618 - Fix netcat on macOS not closing socket when the stdin sends EOF ([ipfs/go-ipfs#3515](https://github.com/ipfs/go-ipfs/pull/3515))
3619
3620 - Documentation
3621 - Update dns help with a correct domain name ([ipfs/go-ipfs#3087](https://github.com/ipfs/go-ipfs/pull/3087))
3622 - Add period to `ipfs pin rm` ([ipfs/go-ipfs#3088](https://github.com/ipfs/go-ipfs/pull/3088))
3623 - Make all Taglines use imperative mood ([ipfs/go-ipfs#3041](https://github.com/ipfs/go-ipfs/pull/3041))
3624 - Document listing commands better ([ipfs/go-ipfs#3083](https://github.com/ipfs/go-ipfs/pull/3083))
3625 - Add notes to readme on building for uncommon systems ([ipfs/go-ipfs#3051](https://github.com/ipfs/go-ipfs/pull/3051))
3626 - Add branch naming conventions doc ([ipfs/go-ipfs#3035](https://github.com/ipfs/go-ipfs/pull/3035))
3627 - Replace <default> keyword with <<default>> ([ipfs/go-ipfs#3129](https://github.com/ipfs/go-ipfs/pull/3129))
3628 - Fix Add() docs regarding pinning ([ipfs/go-ipfs#3513](https://github.com/ipfs/go-ipfs/pull/3513))
3629 - Add sudo to install commands. ([ipfs/go-ipfs#3201](https://github.com/ipfs/go-ipfs/pull/3201))
3630 - Add docs for `"commands".Command.Run` ([ipfs/go-ipfs#3382](https://github.com/ipfs/go-ipfs/pull/3382))
3631 - Put config keys in proper case ([ipfs/go-ipfs#3365](https://github.com/ipfs/go-ipfs/pull/3365))
3632 - Fix link in `ipfs stats bw` help message ([ipfs/go-ipfs#3620](https://github.com/ipfs/go-ipfs/pull/3620))
3633
3634 ## v0.4.4 - 2016-10-11
3635
3636 This release contains an important hotfix for a bug we discovered in how pinning works.
3637 If you had a large number of pins, new pins would overwrite existing pins.
3638 Apart from the hotfix, this release is equal to the previous release 0.4.3.
3639
3640 - Fix bug in pinsets fanout, and add stress test. (@whyrusleeping, [ipfs/go-ipfs#3273](https://github.com/ipfs/go-ipfs/pull/3273))
3641
3642 We published a [detailed account of the bug and fix in a blog post](https://ipfs.io/blog/21-go-ipfs-0-4-4-released/).
3643
3644 ## v0.4.3 - 2016-09-20
3645
3646 There have been no changes since the last release candidate 0.4.3-rc4. \o/
3647
3648 ## v0.4.3-rc4 - 2016-09-09
3649
3650 This release candidate fixes issues in Bitswap and the `ipfs add` command, and improves testing.
3651 We plan for this to be the last release candidate before the release of go-ipfs v0.4.3.
3652
3653 With this release candidate, we're also moving go-ipfs to Go 1.7, which we expect will yield improvements in runtime performance, memory usage, build time and size of the release binaries.
3654
3655 - Require Go 1.7. (@whyrusleeping, @Kubuxu, @lgierth, [ipfs/go-ipfs#3163](https://github.com/ipfs/go-ipfs/pull/3163))
3656 - For this purpose, switch Docker image from Alpine 3.4 to Alpine Edge.
3657 - Fix cancellation of Bitswap `wantlist` entries. (@whyrusleeping, [ipfs/go-ipfs#3182](https://github.com/ipfs/go-ipfs/pull/3182))
3658 - Fix clearing of `active` state of Bitswap provider queries. (@whyrusleeping, [ipfs/go-ipfs#3169](https://github.com/ipfs/go-ipfs/pull/3169))
3659 - Fix a panic in the DHT code. (@Kubuxu, [ipfs/go-ipfs#3200](https://github.com/ipfs/go-ipfs/pull/3200))
3660 - Improve handling of `Identity` field in `ipfs config` command. (@Kubuxu, @whyrusleeping, [ipfs/go-ipfs#3141](https://github.com/ipfs/go-ipfs/pull/3141))
3661 - Fix explicit adding of symlinked files and directories. (@kevina, [ipfs/go-ipfs#3135](https://github.com/ipfs/go-ipfs/pull/3135))
3662 - Fix bash auto-completion of `ipfs daemon --unrestricted-api` option. (@lgierth, [ipfs/go-ipfs#3159](https://github.com/ipfs/go-ipfs/pull/3159))
3663 - Introduce a new timeout tool for tests to avoid licensing issues. (@Kubuxu, [ipfs/go-ipfs#3152](https://github.com/ipfs/go-ipfs/pull/3152))
3664 - Improve output for migrations of fs-repo. (@lgierth, [ipfs/go-ipfs#3158](https://github.com/ipfs/go-ipfs/pull/3158))
3665 - Fix info notice of commands taking input from stdin. (@Kubuxu, [ipfs/go-ipfs#3134](https://github.com/ipfs/go-ipfs/pull/3134))
3666 - Bring back a few tests for stdin handling of `ipfs cat` and `ipfs add`. (@Kubuxu, [ipfs/go-ipfs#3144](https://github.com/ipfs/go-ipfs/pull/3144))
3667 - Improve sharness tests for `ipfs repo verify` command. (@whyrusleeping, [ipfs/go-ipfs#3148](https://github.com/ipfs/go-ipfs/pull/3148))
3668 - Improve sharness tests for CORS headers on the gateway. (@Kubuxu, [ipfs/go-ipfs#3142](https://github.com/ipfs/go-ipfs/pull/3142))
3669 - Improve tests for pinning within `ipfs files`. (@kevina, [ipfs/go-ipfs#3151](https://github.com/ipfs/go-ipfs/pull/3151))
3670 - Improve tests for the automatic raising of file descriptor limits. (@whyrusleeping, [ipfs/go-ipfs#3149](https://github.com/ipfs/go-ipfs/pull/3149))
3671
3672 ## v0.4.3-rc3 - 2016-08-11
3673
3674 This release candidate fixes a panic that occurs when input from stdin was
3675 expected, but none was given: [ipfs/go-ipfs#3050](https://github.com/ipfs/go-ipfs/pull/3050)
3676
3677 ## v0.4.3-rc2 - 2016-08-04
3678
3679 This release includes bug fixes and fixes for regressions that were introduced
3680 between 0.4.2 and 0.4.3-rc1.
3681
3682 - Regressions
3683 - Fix daemon panic when there is no multipart input provided over the HTTP API.
3684 (@whyrusleeping, [ipfs/go-ipfs#2989](https://github.com/ipfs/go-ipfs/pull/2989))
3685 - Fix `ipfs refs --edges` not printing edges.
3686 (@Kubuxu, [ipfs/go-ipfs#3007](https://github.com/ipfs/go-ipfs/pull/3007))
3687 - Fix progress option for `ipfs add` defaulting to true on the HTTP API.
3688 (@whyrusleeping, [ipfs/go-ipfs#3025](https://github.com/ipfs/go-ipfs/pull/3025))
3689 - Fix erroneous printing of stdin reading message.
3690 (@whyrusleeping, [ipfs/go-ipfs#3033](https://github.com/ipfs/go-ipfs/pull/3033))
3691 - Fix panic caused by passing `--mount` and `--offline` flags to `ipfs daemon`.
3692 (@Kubuxu, [ipfs/go-ipfs#3022](https://github.com/ipfs/go-ipfs/pull/3022))
3693 - Fix symlink path resolution on windows.
3694 (@Kubuxu, [ipfs/go-ipfs#3023](https://github.com/ipfs/go-ipfs/pull/3023))
3695 - Add in code to prevent issue 3032 from crashing the daemon.
3696 (@whyrusleeping, [ipfs/go-ipfs#3037](https://github.com/ipfs/go-ipfs/pull/3037))
3697
3698
3699 ## v0.4.3-rc1 - 2016-07-23
3700
3701 This is a maintenance release which comes with a couple of nice enhancements, and improves the performance of Storage, Bitswap, as well as Content and Peer Routing. It also introduces a handful of new commands and options, and fixes a good bunch of bugs.
3702
3703 This is the first Release Candidate. Unless there are vulnerabilities or regressions discovered, the final 0.4.3 release will happen about one week from now.
3704
3705 - Security Vulnerability
3706
3707 - The `master` branch if go-ipfs suffered from a vulnerability for about 3 weeks. It allowed an attacker to use an iframe to request malicious HTML and JS from the API of a local go-ipfs node. The attacker could then gain unrestricted access to the node's API, and e.g. extract the private key. We fixed this issue by reintroducing restrictions on which particular objects can be loaded through the API (@lgierth, [ipfs/go-ipfs#2949](https://github.com/ipfs/go-ipfs/pull/2949)), and by completely excluding the private key from the API (@Kubuxu, [ipfs/go-ipfs#2957](https://github.com/ipfs/go-ipfs/pull/2957)). We will also work on more hardening of the API in the next release.
3708 - **The previous release 0.4.2 is not vulnerable. That means if you're using official binaries from [dist.ipfs.tech](https://dist.ipfs.tech) you're not affected.** If you're running go-ipfs built from the `master` branch between June 17th ([ipfs/go-ipfs@1afebc21](https://github.com/ipfs/go-ipfs/commit/1afebc21f324982141ca8a29710da0d6f83ca804)) and July 7th ([ipfs/go-ipfs@39bef0d5](https://github.com/ipfs/go-ipfs/commit/39bef0d5b01f70abf679fca2c4d078a2d55620e2)), please update to v0.4.3-rc1 immediately.
3709 - We are grateful to the group of independent researchers who made us aware of this vulnerability. We wanna use this opportunity to reiterate that we're very happy about any additional review of pull requests and releases. You can contact us any time at security@ipfs.io (GPG [4B9665FB 92636D17 7C7A86D3 50AAE8A9 59B13AF3](https://pgp.mit.edu/pks/lookup?op=get&search=0x50AAE8A959B13AF3)).
3710
3711 - Notable changes
3712
3713 - Improve Bitswap performance. (@whyrusleeping, [ipfs/go-ipfs#2727](https://github.com/ipfs/go-ipfs/pull/2727), [ipfs/go-ipfs#2798](https://github.com/ipfs/go-ipfs/pull/2798))
3714 - Improve Content Routing and Peer Routing performance. (@whyrusleeping, [ipfs/go-ipfs#2817](https://github.com/ipfs/go-ipfs/pull/2817), [ipfs/go-ipfs#2841](https://github.com/ipfs/go-ipfs/pull/2841))
3715 - Improve datastore, blockstore, and dagstore performance. (@kevina, @Kubuxu, @whyrusleeping [ipfs/go-datastore#43](https://github.com/ipfs/go-datastore/pull/43), [ipfs/go-ipfs#2885](https://github.com/ipfs/go-ipfs/pull/2885), [ipfs/go-ipfs#2961](https://github.com/ipfs/go-ipfs/pull/2961), [ipfs/go-ipfs#2953](https://github.com/ipfs/go-ipfs/pull/2953), [ipfs/go-ipfs#2960](https://github.com/ipfs/go-ipfs/pull/2960))
3716 - Content Providers are now stored on disk to gain savings on process memory. (@whyrusleeping, [ipfs/go-ipfs#2804](https://github.com/ipfs/go-ipfs/pull/2804), [ipfs/go-ipfs#2860](https://github.com/ipfs/go-ipfs/pull/2860))
3717 - Migrations of the fs-repo (usually stored at `~/.ipfs`) now run automatically. If there's a TTY available, you'll get prompted when running `ipfs daemon`, and in addition you can use the `--migrate=true` or `--migrate=false` options to avoid the prompt. (@whyrusleeping, @lgierth, [ipfs/go-ipfs#2939](https://github.com/ipfs/go-ipfs/pull/2939))
3718 - The internal naming of blocks in the blockstore has changed, which requires a migration of the fs-repo, from version 3 to 4. (@whyrusleeping, [ipfs/go-ipfs#2903](https://github.com/ipfs/go-ipfs/pull/2903))
3719 - We now automatically raise the file descriptor limit to 1024 if necessary. (@whyrusleeping, [ipfs/go-ipfs#2884](https://github.com/ipfs/go-ipfs/pull/2884), [ipfs/go-ipfs#2891](https://github.com/ipfs/go-ipfs/pull/2891))
3720 - After a long struggle with deadlocks and hanging connections, we've decided to disable the uTP transport by default for now. (@whyrusleeping, [ipfs/go-ipfs#2840](https://github.com/ipfs/go-ipfs/pull/2840), [ipfs/go-libp2p-transport@88244000](https://github.com/ipfs/go-libp2p-transport/commit/88244000f0ce8851ffcfbac746ebc0794b71d2a4))
3721 - There is now documentation for the configuration options in `docs/config.md`. (@whyrusleeping, [ipfs/go-ipfs#2974](https://github.com/ipfs/go-ipfs/pull/2974))
3722 - All commands now sanely handle the combination of stdin and optional flags in certain edge cases. (@lgierth, [ipfs/go-ipfs#2952](https://github.com/ipfs/go-ipfs/pull/2952))
3723
3724 - New Features
3725
3726 - Add `--offline` option to `ipfs daemon` command, which disables all swarm networking. (@Kubuxu, [ipfs/go-ipfs#2696](https://github.com/ipfs/go-ipfs/pull/2696), [ipfs/go-ipfs#2867](https://github.com/ipfs/go-ipfs/pull/2867))
3727 - Add `Datastore.HashOnRead` option for verifying block hashes on read access. (@Kubuxu, [ipfs/go-ipfs#2904](https://github.com/ipfs/go-ipfs/pull/2904))
3728 - Add `Datastore.BloomFilterSize` option for tuning the blockstore's new lookup bloom filter. (@Kubuxu, [ipfs/go-ipfs#2973](https://github.com/ipfs/go-ipfs/pull/2973))
3729
3730 - Bug fixes
3731
3732 - Fix publishing of local IPNS entries, and more. (@whyrusleeping, [ipfs/go-ipfs#2943](https://github.com/ipfs/go-ipfs/pull/2943))
3733 - Fix progress bars in `ipfs add` and `ipfs get`. (@whyrusleeping, [ipfs/go-ipfs#2893](https://github.com/ipfs/go-ipfs/pull/2893), [ipfs/go-ipfs#2948](https://github.com/ipfs/go-ipfs/pull/2948))
3734 - Make sure files added through `ipfs files` are pinned and don't get GC'd. (@kevina, [ipfs/go-ipfs#2872](https://github.com/ipfs/go-ipfs/pull/2872))
3735 - Fix copying into directory using `ipfs files cp`. (@whyrusleeping, [ipfs/go-ipfs#2977](https://github.com/ipfs/go-ipfs/pull/2977))
3736 - Fix `ipfs version --commit` with Docker containers. (@lgierth, [ipfs/go-ipfs#2734](https://github.com/ipfs/go-ipfs/pull/2734))
3737 - Run `ipfs diag` commands in the daemon instead of the CLI. (@Kubuxu, [ipfs/go-ipfs#2761](https://github.com/ipfs/go-ipfs/pull/2761))
3738 - Fix protobuf encoding on the API and in commands. (@stebalien, [ipfs/go-ipfs#2516](https://github.com/ipfs/go-ipfs/pull/2516))
3739 - Fix goroutine leak in `/ipfs/ping` protocol handler. (@whyrusleeping, [ipfs/go-libp2p#58](https://github.com/ipfs/go-libp2p/pull/58))
3740 - Fix `--flags` option on `ipfs commands`. (@Kubuxu, [ipfs/go-ipfs#2773](https://github.com/ipfs/go-ipfs/pull/2773))
3741 - Fix the error channels in `namesys`. (@whyrusleeping, [ipfs/go-ipfs#2788](https://github.com/ipfs/go-ipfs/pull/2788))
3742 - Fix consumptions of observed swarm addresses. (@whyrusleeping, [ipfs/go-libp2p#63](https://github.com/ipfs/go-libp2p/pull/63), [ipfs/go-ipfs#2771](https://github.com/ipfs/go-ipfs/issues/2771))
3743 - Fix a rare DHT panic. (@whyrusleeping, [ipfs/go-ipfs#2856](https://github.com/ipfs/go-ipfs/pull/2856))
3744 - Fix go-ipfs/js-ipfs interoperability issues in SPDY. (@whyrusleeping, [whyrusleeping/go-smux-spdystream@fae17783](https://github.com/whyrusleeping/go-smux-spdystream/commit/fae1778302a9e029bb308cf71cf33f857f2d89e8))
3745 - Fix a logging race condition during shutdown. (@Kubuxu, [ipfs/go-log#3](https://github.com/ipfs/go-log/pull/3))
3746 - Prevent DHT connection hangs. (@whyrusleeping, [ipfs/go-ipfs#2826](https://github.com/ipfs/go-ipfs/pull/2826), [ipfs/go-ipfs#2863](https://github.com/ipfs/go-ipfs/pull/2863))
3747 - Fix NDJSON output of `ipfs refs local`. (@Kubuxu, [ipfs/go-ipfs#2812](https://github.com/ipfs/go-ipfs/pull/2812))
3748 - Fix race condition in NAT detection. (@whyrusleeping, [ipfs/go-libp2p#69](https://github.com/ipfs/go-libp2p/pull/69))
3749 - Fix error messages. (@whyrusleeping, @Kubuxu, [ipfs/go-ipfs#2905](https://github.com/ipfs/go-ipfs/pull/2905), [ipfs/go-ipfs#2928](https://github.com/ipfs/go-ipfs/pull/2928))
3750
3751 - Enhancements
3752
3753 - Increase maximum object size on `ipfs put` from 1 MiB to 2 MiB. The maximum object size on the wire including all framing is 4 MiB. (@kpcyrd, [ipfs/go-ipfs#2980](https://github.com/ipfs/go-ipfs/pull/2980))
3754 - Add CORS headers to the Gateway's default config. (@Kubuxu, [ipfs/go-ipfs#2778](https://github.com/ipfs/go-ipfs/pull/2778))
3755 - Clear the dial backoff for a peer when using `ipfs swarm connect`. (@whyrusleeping, [ipfs/go-ipfs#2941](https://github.com/ipfs/go-ipfs/pull/2941))
3756 - Allow passing options to daemon in Docker container. (@lgierth, [ipfs/go-ipfs#2955](https://github.com/ipfs/go-ipfs/pull/2955))
3757 - Add `-v/--verbose` to `ìpfs swarm peers` command. (@csasarak, [ipfs/go-ipfs#2713](https://github.com/ipfs/go-ipfs/pull/2713))
3758 - Add `--format`, `--hash`, and `--size` options to `ipfs files stat` command. (@Kubuxu, [ipfs/go-ipfs#2706](https://github.com/ipfs/go-ipfs/pull/2706))
3759 - Add `--all` option to `ipfs version` command. (@Kubuxu, [ipfs/go-ipfs#2790](https://github.com/ipfs/go-ipfs/pull/2790))
3760 - Add `ipfs repo version` command. (@pfista, [ipfs/go-ipfs#2598](https://github.com/ipfs/go-ipfs/pull/2598))
3761 - Add `ipfs repo verify` command. (@whyrusleeping, [ipfs/go-ipfs#2924](https://github.com/ipfs/go-ipfs/pull/2924), [ipfs/go-ipfs#2951](https://github.com/ipfs/go-ipfs/pull/2951))
3762 - Add `ipfs stats repo` and `ipfs stats bitswap` command aliases. (@pfista, [ipfs/go-ipfs#2810](https://github.com/ipfs/go-ipfs/pull/2810))
3763 - Add success indication to responses of `ipfs ping` command. (@Kubuxu, [ipfs/go-ipfs#2813](https://github.com/ipfs/go-ipfs/pull/2813))
3764 - Save changes made via `ipfs swarm filter` to the config file. (@yuvallanger, [ipfs/go-ipfs#2880](https://github.com/ipfs/go-ipfs/pull/2880))
3765 - Expand `ipfs_p2p_peers` metric to include libp2p transport. (@lgierth, [ipfs/go-ipfs#2728](https://github.com/ipfs/go-ipfs/pull/2728))
3766 - Rework `ipfs files add` internals to avoid caching and prevent memory leaks. (@whyrusleeping, [ipfs/go-ipfs#2795](https://github.com/ipfs/go-ipfs/pull/2795))
3767 - Support `GOPATH` with multiple path components. (@karalabe, @lgierth, @djdv, [ipfs/go-ipfs#2808](https://github.com/ipfs/go-ipfs/pull/2808), [ipfs/go-ipfs#2862](https://github.com/ipfs/go-ipfs/pull/2862), [ipfs/go-ipfs#2975](https://github.com/ipfs/go-ipfs/pull/2975))
3768
3769 - General Codebase
3770
3771 - Take steps towards the `filestore` datastore. (@kevina, [ipfs/go-ipfs#2792](https://github.com/ipfs/go-ipfs/pull/2792), [ipfs/go-ipfs#2634](https://github.com/ipfs/go-ipfs/pull/2634))
3772 - Update recommended Golang version to 1.6.2 (@Kubuxu, [ipfs/go-ipfs#2724](https://github.com/ipfs/go-ipfs/pull/2724))
3773 - Update to Gx 0.8.0 and Gx-Go 1.2.1, which is faster and less noisy. (@whyrusleeping, [ipfs/go-ipfs#2979](https://github.com/ipfs/go-ipfs/pull/2979))
3774 - Use `go4.org/lock` instead of `camlistore/lock` for locking. (@whyrusleeping, [ipfs/go-ipfs#2887](https://github.com/ipfs/go-ipfs/pull/2887))
3775 - Manage `go.uuid`, `hamming`, `backoff`, `proquint`, `pb`, `go-context`, `cors`, `go-datastore` packages with Gx. (@Kubuxu, [ipfs/go-ipfs#2733](https://github.com/ipfs/go-ipfs/pull/2733), [ipfs/go-ipfs#2736](https://github.com/ipfs/go-ipfs/pull/2736), [ipfs/go-ipfs#2757](https://github.com/ipfs/go-ipfs/pull/2757), [ipfs/go-ipfs#2825](https://github.com/ipfs/go-ipfs/pull/2825), [ipfs/go-ipfs#2838](https://github.com/ipfs/go-ipfs/pull/2838))
3776 - Clean up the gateway's surface. (@lgierth, [ipfs/go-ipfs#2874](https://github.com/ipfs/go-ipfs/pull/2874))
3777 - Simplify the API gateway's access restrictions. (@lgierth, [ipfs/go-ipfs#2949](https://github.com/ipfs/go-ipfs/pull/2949), [ipfs/go-ipfs#2956](https://github.com/ipfs/go-ipfs/pull/2956))
3778 - Update docker image to Alpine Linux 3.4 and remove Go version constraint. (@lgierth, [ipfs/go-ipfs#2901](https://github.com/ipfs/go-ipfs/pull/2901), [ipfs/go-ipfs#2929](https://github.com/ipfs/go-ipfs/pull/2929))
3779 - Clarify `Dockerfile` and `Dockerfile.fast`. (@lgierth, [ipfs/go-ipfs#2796](https://github.com/ipfs/go-ipfs/pull/2796))
3780 - Simplify resolution of Git commit refs in Dockerfiles. (@lgierth, [ipfs/go-ipfs#2754](https://github.com/ipfs/go-ipfs/pull/2754))
3781 - Consolidate `--verbose` description across commands. (@Kubuxu, [ipfs/go-ipfs#2746](https://github.com/ipfs/go-ipfs/pull/2746))
3782 - Allow setting position of default values in command option descriptions. (@Kubuxu, [ipfs/go-ipfs#2744](https://github.com/ipfs/go-ipfs/pull/2744))
3783 - Set explicit default values for boolean command options. (@RichardLitt, [ipfs/go-ipfs#2657](https://github.com/ipfs/go-ipfs/pull/2657))
3784 - Autogenerate command synopses. (@Kubuxu, [ipfs/go-ipfs#2785](https://github.com/ipfs/go-ipfs/pull/2785))
3785 - Fix and improve lots of documentation. (@RichardLitt, [ipfs/go-ipfs#2741](https://github.com/ipfs/go-ipfs/pull/2741), [ipfs/go-ipfs#2781](https://github.com/ipfs/go-ipfs/pull/2781))
3786 - Improve command descriptions to fit a width of 78 characters. (@RichardLitt, [ipfs/go-ipfs#2779](https://github.com/ipfs/go-ipfs/pull/2779), [ipfs/go-ipfs#2780](https://github.com/ipfs/go-ipfs/pull/2780), [ipfs/go-ipfs#2782](https://github.com/ipfs/go-ipfs/pull/2782))
3787 - Fix filename conflict in the debugging guide. (@Kubuxu, [ipfs/go-ipfs#2752](https://github.com/ipfs/go-ipfs/pull/2752))
3788 - Decapitalize log messages, according to Golang style guides. (@RichardLitt, [ipfs/go-ipfs#2853](https://github.com/ipfs/go-ipfs/pull/2853))
3789 - Add GitHub Issues HowTo guide. (@RichardLitt, @chriscool, [ipfs/go-ipfs#2889](https://github.com/ipfs/go-ipfs/pull/2889), [ipfs/go-ipfs#2895](https://github.com/ipfs/go-ipfs/pull/2895))
3790 - Add GitHub Issue template. (@chriscool, [ipfs/go-ipfs#2786](https://github.com/ipfs/go-ipfs/pull/2786))
3791 - Apply standard-readme to the README file. (@RichardLitt, [ipfs/go-ipfs#2883](https://github.com/ipfs/go-ipfs/pull/2883))
3792 - Fix issues pointed out by `govet`. (@Kubuxu, [ipfs/go-ipfs#2854](https://github.com/ipfs/go-ipfs/pull/2854))
3793 - Clarify `ipfs get` error message. (@whyrusleeping, [ipfs/go-ipfs#2886](https://github.com/ipfs/go-ipfs/pull/2886))
3794 - Remove dead code. (@whyrusleeping, [ipfs/go-ipfs#2819](https://github.com/ipfs/go-ipfs/pull/2819))
3795 - Add changelog for v0.4.3. (@lgierth, [ipfs/go-ipfs#2984](https://github.com/ipfs/go-ipfs/pull/2984))
3796
3797 - Tests & CI
3798
3799 - Fix flaky `ipfs mount` sharness test by using the `iptb` tool. (@noffle, [ipfs/go-ipfs#2707](https://github.com/ipfs/go-ipfs/pull/2707))
3800 - Fix flaky IP port selection in tests. (@Kubuxu, [ipfs/go-ipfs#2855](https://github.com/ipfs/go-ipfs/pull/2855))
3801 - Fix CLI tests on OSX by resolving /tmp symlink. (@Kubuxu, [ipfs/go-ipfs#2926](https://github.com/ipfs/go-ipfs/pull/2926))
3802 - Fix flaky GC test by running the daemon in offline mode. (@Kubuxu, [ipfs/go-ipfs#2908](https://github.com/ipfs/go-ipfs/pull/2908))
3803 - Add tests for `ipfs add` with hidden files. (@Kubuxu, [ipfs/go-ipfs#2756](https://github.com/ipfs/go-ipfs/pull/2756))
3804 - Add test to make sure the body of HEAD responses is empty. (@Kubuxu, [ipfs/go-ipfs#2775](https://github.com/ipfs/go-ipfs/pull/2775))
3805 - Add test to catch misdials. (@Kubuxu, [ipfs/go-ipfs#2831](https://github.com/ipfs/go-ipfs/pull/2831))
3806 - Mark flaky tests for `ipfs dht query` as known failure. (@noffle, [ipfs/go-ipfs#2720](https://github.com/ipfs/go-ipfs/pull/2720))
3807 - Remove failing blockstore-without-context test. (@Kubuxu, [ipfs/go-ipfs#2857](https://github.com/ipfs/go-ipfs/pull/2857))
3808 - Fix `--version` tests for versions with a suffix like `-dev` or `-rc1`. (@lgierth, [ipfs/go-ipfs#2937](https://github.com/ipfs/go-ipfs/pull/2937))
3809 - Make sharness tests work in cases where go-ipfs is symlinked into GOPATH. (@lgierth, [ipfs/go-ipfs#2937](https://github.com/ipfs/go-ipfs/pull/2937))
3810 - Add variable delays to blockstore mocks. (@rikonor, [ipfs/go-ipfs#2871](https://github.com/ipfs/go-ipfs/pull/2871))
3811 - Disable Travis CI email notifications. (@Kubuxu, [ipfs/go-ipfs#2896](https://github.com/ipfs/go-ipfs/pull/2896))
3812
3813
3814 ## v0.4.2 - 2016-05-17
3815
3816 This is a patch release which fixes performance and networking bugs in go-libp2p,
3817 You should see improvements in CPU and RAM usage, as well as speed of object lookups.
3818 There are also a few other nice improvements.
3819
3820 * Notable Fixes
3821 * Set a deadline for dialing attempts. This prevents a node from accumulating
3822 failed connections. (@whyrusleeping)
3823 * Avoid unnecessary string/byte conversions in go-multihash. (@whyrusleeping)
3824 * Fix a deadlock around the yamux stream muxer. (@whyrusleeping)
3825 * Fix a bug that left channels open, causing hangs. (@whyrusleeping)
3826 * Fix a bug around yamux which caused connection hangs. (@whyrusleeping)
3827 * Fix a crash caused by nil multiaddrs. (@whyrusleeping)
3828
3829 * Enhancements
3830 * Add NetBSD support. (@erde74)
3831 * Set Cache-Control: immutable on /ipfs responses. (@kpcyrd)
3832 * Have `ipfs init` optionally accept a default configuration from stdin. (@sivachandran)
3833 * Add `ipfs log ls` command for listing logging subsystems. (@hsanjuan)
3834 * Allow bitswap to read multiple messages per stream. (@whyrusleeping)
3835 * Remove `make toolkit_upgrade` step. (@chriscool)
3836
3837 * Documentation
3838 * Add a debug-guidelines document. (@richardlitt)
3839 * Update the contribute document. (@richardlitt)
3840 * Fix documentation of many `ipfs` commands. (@richardlitt)
3841 * Fall back to ShortDesc if LongDesc is missing. (@Kubuxu)
3842
3843 * Removals
3844 * Remove -f option from `ipfs init` command. (@whyrusleeping)
3845
3846 * Bug fixes
3847 * Fix `ipfs object patch` argument handling and validation. (@jbenet)
3848 * Fix `ipfs config edit` command by running it client-side. (@Kubuxu)
3849 * Set default value for `ipfs refs` arguments. (@richardlitt)
3850 * Fix parsing of incorrect command and argument permutations. (@thomas-gardner)
3851 * Update Dockerfile to latest go1.5.4-r0. (@chriscool)
3852 * Allow passing IPFS_LOGGING to Docker image. (@lgierth)
3853 * Fix dot path parsing on Windows. (@djdv)
3854 * Fix formatting of `ipfs log ls` output. (@richardlitt)
3855
3856 * General Codebase
3857 * Refactor Makefile. (@kevina)
3858 * Wire context into bitswap requests more deeply. (@whyrusleeping)
3859 * Use gx for iptb. (@chriscool)
3860 * Update gx and gx-go. (@chriscool)
3861 * Make blocks.Block an interface. (@kevina)
3862 * Silence check for Docker existence. (@chriscool)
3863 * Add dist_get script for fetching tools from dist.ipfs.tech. (@whyrusleeping)
3864 * Add proper defaults to all `ipfs` commands. (@richardlitt)
3865 * Remove dead `count` option from `ipfs pin ls`. (@richardlitt)
3866 * Initialize pin mode strings only once. (@chriscool)
3867 * Add changelog for v0.4.2. (@lgierth)
3868 * Specify a dist.ipfs.tech hash for tool downloads instead of trusting DNS. (@lgierth)
3869
3870 * CI
3871 * Fix t0170-dht sharness test. (@chriscool)
3872 * Increase timeout in t0060-daemon sharness test. (@Kubuxu)
3873 * Have CircleCI use `make deps` instead of `gx` directly. (@whyrusleeping)
3874
3875
3876 ## v0.4.1 - 2016-04-25
3877
3878 This is a patch release that fixes a few bugs, and adds a few small (but not
3879 insignificant) features. The primary reason for this release is the listener
3880 hang bugfix that was shipped in the 0.4.0 release.
3881
3882 * Features
3883 * implemented ipfs object diff (@whyrusleeping)
3884 * allow promises (used in get, refs) to fail (@whyrusleeping)
3885
3886 * Tool changes
3887 * Adds 'toolkit_upgrade' to the makefile help target (@achin)
3888
3889 * General Codebase
3890 * Use extracted go-libp2p-crypto, -secio, -peer packages (@lgierth)
3891 * Update go-libp2p (@lgierth)
3892 * Fix package manifest fields (@lgierth)
3893 * remove incfusever dead-code (@whyrusleeping)
3894 * remove a ton of unused godeps (@whyrusleeping)
3895 * metrics: add Prometheus back (@lgierth)
3896 * clean up dead code and config fields (@whyrusleeping)
3897 * Add log events when blocks are added/removed from the blockstore (@michealmure)
3898 * repo: don't create logs directory, not used any longer (@lgierth)
3899
3900 * Bug fixes
3901 * fixed ipfs name resolve --local multihash error (@pfista)
3902 * ipfs patch commands won't return null links field anymore (@whyrusleeping)
3903 * Make non recursive resolve print the result (@Kubuxu)
3904 * Output dirs on ipfs add -rn (@noffle)
3905 * update libp2p dep to fix hanging listeners problem (@whyrusleeping)
3906 * Fix Swarm.AddrFilters config setting with regard to `/ip6` addresses (@lgierth)
3907 * fix dht command key escaping (@whyrusleeping)
3908
3909 * Testing
3910 * Adds tests to make sure 'object patch' writes. (@noffle)
3911 * small sharness test for promise failure checking (@whyrusleeping)
3912 * sharness/Makefile: clean all BINS when cleaning (@chriscool)
3913
3914 * Documentation
3915 * Fix disconnect argument description (@richardlitt)
3916 * Added a note about swarm disconnect (@richardlitt)
3917 * Also fixed syntax for comment (@richardlitt)
3918 * Alphabetized swarm subcmds (@richardlitt)
3919 * Added note to ipfs stats bw interval option (@richardlitt)
3920 * Small syntax changes to repo stat man (@richardlitt)
3921 * update log command help text (@pfista)
3922 * Added a long description to add (@richardlitt)
3923 * Edited object patch set-data doc (@richardlitt)
3924 * add roadmap.md (@Jeromy)
3925 * Adds files api cmd to helptext (@noffle)
3926
3927
3928 ## v0.4.0 - 2016-04-05
3929
3930 This is a major release with plenty of new features and bug fixes.
3931 It also includes breaking changes which make it incompatible with v0.3.x
3932 on the networking layer.
3933
3934 * Major Changes
3935 * Multistream
3936 * The addition of multistream is a breaking change on the networking layer,
3937 but gives IPFS implementations the ability to mix and match different
3938 stream multiplexers, e.g. yamux, spdystream, or muxado.
3939 This adds a ton of flexibility on one of the lower layers of the protocol,
3940 and will help us avoid further breaking protocol changes in the future.
3941 * Files API
3942 * The new `files` command and API allow a program to interact with IPFS
3943 using familiar filesystem operations, namely: creating directories,
3944 reading, writing, and deleting files, listing out different directories,
3945 and so on. This feature enables any other application that uses a
3946 filesystem-like backend for storage, to use IPFS as its storage driver
3947 without having change the application logic at all.
3948 * Gx
3949 * go-ipfs now uses [gx](https://github.com/whyrusleeping/gx) to manage its
3950 dependencies. This means that under the hood, go-ipfs's dependencies are
3951 backed by IPFS itself! It also means that go-ipfs is no longer installed
3952 using `go get`. Use `make install` instead.
3953 * New Features
3954 * Web UI
3955 * Update to new version which is compatible with 0.4.0. (@dignifiedquire)
3956 * Networking
3957 * Implement uTP transport. (@whyrusleeping)
3958 * Allow multiple addresses per configured bootstrap node. (@whyrusleeping)
3959 * IPNS
3960 * Improve IPNS resolution performance. (@whyrusleeping)
3961 * Have dnslink prefer `TXT _dnslink.example.com`, allows usage of CNAME records. (@Kubuxu)
3962 * Prevent `ipfs name publish` when `/ipns` is mounted. (@noffle)
3963 * Repo
3964 * Improve performance of `ipfs add`. (@whyrusleeping)
3965 * Add `Datastore.NoSync` config option for flatfs. (@rht)
3966 * Implement mark-and-sweep GC. (@whyrusleeping)
3967 * Allow for GC during `ipfs add`. (@whyrusleeping)
3968 * Add `ipfs repo stat` command. (@tmg, @diasdavid)
3969 * General
3970 * Add support for HTTP OPTIONS requests. (@lidel)
3971 * Add `ipfs diag cmds` to view active API requests (@whyrusleeping)
3972 * Add an `IPFS_LOW_MEM` environment variable which relaxes Bitswap's memory usage. (@whyrusleeping)
3973 * The Docker image now lives at `ipfs/go-ipfs` and has been completely reworked. (@lgierth)
3974 * Security fixes
3975 * The gateway path prefix added in v0.3.10 was vulnerable to cross-site
3976 scripting attacks. This release introduces a configurable list of allowed
3977 path prefixes. It's called `Gateway.PathPrefixes` and takes a list of
3978 strings, e.g. `["/blog", "/foo/bar"]`. The v0.3.x line will not receive any
3979 further updates, so please update to v0.4.0 as soon as possible. (@lgierth)
3980 * Incompatible Changes
3981 * Install using `make install` instead of `go get` (@whyrusleeping)
3982 * Rewrite pinning to store pins in IPFS objects. (@tv42)
3983 * Bump fs-repo version to 3. (@whyrusleeping)
3984 * Use multistream muxer (@whyrusleeping)
3985 * The default for `--type` in `ipfs pin ls` is now `all`. (@chriscool)
3986 * Bug Fixes
3987 * Remove msgio double wrap. (@jbenet)
3988 * Buffer msgio. (@whyrusleeping)
3989 * Perform various fixes to the FUSE code. (@tv42)
3990 * Compute `ipfs add` size in background to not stall add operation. (@whyrusleeping)
3991 * Add option to have `ipfs add` include top-level hidden files. (@noffle)
3992 * Fix CORS checks on the API. (@rht)
3993 * Fix `ipfs update` error message. (@tomgg)
3994 * Resolve paths in `ipfs pin rm` without network lookup. (@noffle)
3995 * Detect FUSE unmounts and track mount state. (@noffle)
3996 * Fix go1.6rc2 panic caused by CloseNotify being called from wrong goroutine. (@rwcarlsen)
3997 * Bump DHT kvalue from 10 to 20. (@whyrusleeping)
3998 * Put public key and IPNS entry to DHT in parallel. (@whyrusleeping)
3999 * Fix panic in CLI argument parsing. (@whyrusleeping)
4000 * Fix range error by using larger-than-zero-length buffer. (@noffle)
4001 * Fix yamux hanging issue by increasing AcceptBacklog. (@whyrusleeping)
4002 * Fix double Transport-Encoding header bug. (@whyrusleeping)
4003 * Fix uTP panic and file descriptor leak. (@whyrusleeping)
4004 * Tool Changes
4005 * Add `--pin` option to `ipfs add`, which defaults to `true` and allows `--pin=false`. (@eminence)
4006 * Add arguments to `ipfs pin ls`. (@chriscool)
4007 * Add `dns` and `resolve` commands to read-only API. (@Kubuxu)
4008 * Add option to display headers for `ipfs object links`. (@palkeo)
4009 * General Codebase Changes
4010 * Check Golang version in Makefile. (@chriscool)
4011 * Improve Makefile. (@tomgg)
4012 * Remove dead Jenkins CI code. (@lgierth)
4013 * Add locking interface to blockstore. (@whyrusleeping)
4014 * Add Merkledag FetchGraph and EnumerateChildren. (@whyrusleeping)
4015 * Rename Lock/RLock to GCLock/PinLock. (@jbenet)
4016 * Implement pluggable datastore types. (@tv42)
4017 * Record datastore metrics for non-default datastores. (@tv42)
4018 * Allow multistream to have zero-rtt stream opening. (@whyrusleeping)
4019 * Refactor `ipnsfs` into a more generic and well tested `mfs`. (@whyrusleeping)
4020 * Grab more peers if bucket doesn't contain enough. (@whyrusleeping)
4021 * Use CloseNotify in gateway. (@whyrusleeping)
4022 * Flatten multipart file transfers. (@whyrusleeping)
4023 * Send updated DHT record fixes to peers who sent outdated records. (@whyrusleeping)
4024 * Replace go-psutil with go-sysinfo. (@whyrusleeping)
4025 * Use ServeContent for index.html. (@AtnNn)
4026 * Refactor `object patch` API to not store data in URL. (@whyrusleeping)
4027 * Use mfs for `ipfs add`. (@whyrusleeping)
4028 * Add `Server` header to API responses. (@Kubuxu)
4029 * Wire context directly into HTTP requests. (@rht)
4030 * Wire context directly into GetDAG operations within GC. (@rht)
4031 * Vendor libp2p using gx. (@whyrusleeping)
4032 * Use gx vendored packages instead of Godeps. (@whyrusleeping)
4033 * Simplify merkledag package interface to ease IPLD inclusion. (@mildred)
4034 * Add default option value support to commands lib. (@whyrusleeping)
4035 * Refactor merkledag fetching methods. (@whyrusleeping)
4036 * Use net/url to escape paths within Web UI. (@noffle)
4037 * Deprecated key.Pretty(). (@MichealMure)
4038 * Documentation
4039 * Fix and update help text for **every** `ipfs` command. (@RichardLitt)
4040 * Change sample API origin settings from wildcard (`*`) to `example.com`. (@Kubuxu)
4041 * Improve documentation of installation process in README. (@whyrusleeping)
4042 * Improve windows.md. (@chriscool)
4043 * Clarify instructions for installing from source. (@noffle)
4044 * Make version checking more robust. (@jedahan)
4045 * Assert the source code is located within GOPATH. (@whyrusleeping)
4046 * Remove mentions of `/dns` from `ipfs dns` command docs. (@lgierth)
4047 * Testing
4048 * Refactor iptb tests. (@chriscool)
4049 * Improve t0240 sharness test. (@chriscool)
4050 * Make bitswap tests less flaky. (@whyrusleeping)
4051 * Use TCP port zero for ipfs daemon in sharness tests. (@whyrusleeping)
4052 * Improve sharness tests on AppVeyor. (@chriscool)
4053 * Add a pause to fix timing on t0065. (@whyrusleeping)
4054 * Add support for arbitrary TCP ports to t0060-daemon.sh. (@noffle)
4055 * Make t0060 sharness test use TCP port zero. (@whyrusleeping)
4056 * Randomized ipfs stress testing via randor (@dignifiedquire)
4057 * Stress test pinning and migrations (@whyrusleeping)