@cryptotaxi247 / kubo / commits / 95af6a8e0

[WIP] release notes for 0.4.18-rc1

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

Steven Allen committed Oct 26, 2018 at 16:40 UTC 95af6a8e0c8b1f3ca92a57de0aebcf5601863caf
1 file changed +288
CHANGELOG.md
+288
@@ -1,5 +1,293 @@
1 # go-ipfs changelog
2
3 +## 0.4.18 2018-10-26-rc1
4 +
5 +This is probably one of largest go-ipfs release to date, 3 months in the making.
6 +
7 +### Features
8 +
9 +The headline features this release are experimental QUIC support, the gossipsub
10 +pubsub routing algorithm, pubsub message signing, and a refactored `ipfs p2p`
11 +command. However, that's just scratching the surface.
12 +
13 +#### QUIC
14 +
15 +First up, on the networking front, this release has also introduced experimental
16 +support for the QUIC protocol. QUIC is a new UDP-based network transport that
17 +solves many of the long standing issues with TCP.
18 +
19 +For us, this means (eventually):
20 +
21 +* Fewer local resources. TCP requires a file-descriptor per connection while
22 + QUIC (and most UDP based transports) can share a single file descriptor
23 + between all connections. This should allow us to dial faster and keep more
24 + connections open.
25 +* Faster connection establishment. When client authentication is included, QUIC
26 + has a three-way handshake like TCP. However, unlike TCP, this handshake brings
27 + us from all the way from 0 to a fully encrypted, authenticated, and
28 + multiplexed connection. In theory (not yet in practice), this should
29 + significantly reduce the latency of DHT queries.
30 +* Behaves better on lossy networks. When multiplexing multiple requests over a
31 + single TCP connection, a single dropped packet will bring the entire
32 + connection to a halt while the packet is re-transmitted. However, because QUIC
33 + handles multiplexing internally, parallel requests can...
34 +* Better home router behavior (hopefully). Currently, IPFS can crash buggy
35 + end-user routers simply by opening too many connections. We believe this is
36 + happening because many home routers try to track every single open connection,
37 + run out of memory, and crash. Because QUIC is based on UDP and UDP doesn't
38 + have the concept of a "connection", we believe many of these routers simply
39 + won't try to track these QUIC connections, simply forwarding the traffic
40 + instead. This won't be the case for all routers in practice but we're hoping
41 + this will improve the situation somewhat.
42 +* Better NAT traversal: TL;DR: NAT hole-punching is significantly easier and, in
43 + many cases, more reliable with UDP than with TCP.
44 +
45 +However, we still have a long way to go. While we encourage users to test this,
46 +the IETF QUIC protocol is still being actively developed and *will* change. You
47 +can find instructions for enabling it
48 +[here](https://github.com/ipfs/go-ipfs/docs/experimental-features.md#QUIC).
49 +
50 +#### Pubsub
51 +
52 +In terms of pubsub, go-ipfs now supports the gossipsub routing algorithm and
53 +message signing.
54 +
55 +The gossipsub routing algorithm is *significantly* more efficient than the
56 +current floodsub routing algorithm. Even better, it's fully backwards compatible
57 +so you can enable it and still talk to nodes using the floodsub algorithm. You
58 +can find instructions to enable gossipsub in go-ipfs
59 +[here](https://github.com/ipfs/go-ipfs/docs/experimental-features.md#gossipsub).
60 +
61 +Messages are now, finally, signed by their authors. While signing has been
62 +enabled by default, strict signature verification has not been and will not be
63 +for at least one release (probably multiple) to avoid breaking existing
64 +applications. You can read about how to configure this feature
65 +[here](https://github.com/ipfs/go-ipfs/docs/experimental-features.md#message-signing).
66 +
67 +#### Commands
68 +
69 +In terms of new toys, this release introduces a new `ipfs cid` subcommand for
70 +working with CIDs and a completely refactored `ipfs p2p` command.
71 +
72 +The new `ipfs cid` command allows users to both inspect CIDs and convert them
73 +between various formats and versions. For example:
74 +
75 +```sh
76 +# Print out the CID metadata (prefix)
77 +> ipfs cid format -f %P QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
78 +cidv0-protobuf-sha2-256-32
79 +
80 +# Get the hex sha256 hash from the CID.
81 +> ipfs cid format -b base16 -f '0x%D' QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
82 +0x46d44814b9c5af141c3aaab7c05dc5e844ead5f91f12858b021eba45768b4c0e
83 +
84 +# Convert a base58 v0 CID to a base32 v1 CID.
85 +> ipfs cid base32 QmT78zSuBmuS4z925WZfrqQ1qHaJ56DQaTfyMUF7F8ff5o
86 +bafybeicg2rebjoofv4kbyovkw7af3rpiitvnl6i7ckcywaq6xjcxnc2mby
87 +```
88 +
89 +The refactored `ipfs p2p` command allows forwarding TCP streams through two IPFS
90 +nodes from one host to another. It's `ssh -L` but for IPFS. You can find
91 +documentation in
92 +[here](https://github.com/ipfs/go-ipfs/docs/experimental-features.md#ipfs-p2p)).
93 +It's still experimental but we don't expect too many breaking changes at this
94 +point (it will very likely be stabilized in the next release).
95 +
96 +TODO: Put this (vv) somewhere else.
97 +TODO: mention `name resolve --stream`.
98 +
99 +In the previous release, we added support for extracting blocks inlined into
100 +CIDs. In this release, we've added support for creating these CIDs. You can now
101 +run `ipfs add` with the `--inline` flag to inline blocks less than or equal to
102 +32 bytes in length into a CID, instead of writing an actual block.
103 +
104 +#### WebUI
105 +
106 +Finally, this release includes the shiny [updated
107 +webui](https://github.com/ipfs-shipyard/ipfs-webui). You can view it by
108 +installing go-ipfs and visiting http://localhost:5001/webui.
109 +
110 +#### Performance
111 +
112 +This release includes some significant performance improvements, both in terms
113 +of resource utilization and speed.
114 +
115 +##### Resource Utilization
116 +
117 +In this release, we've (a) fixed a slow memory leak in libp2p and (b)
118 +significantly reduced the allocation load. Together, these should improve both
119 +memory and CPU usage.
120 +
121 +... TODO ...
122 +
123 +* CIDs
124 +* Multiaddrs
125 +* Peerstore revert
126 +* Yamux buffering
127 +* ...
128 +
129 +##### Bitswap Performance
130 +
131 +TODO: Multiple blocks per message. Could someone test this? Basic tests showed
132 +some improvements for small files but I'd like to see some numbers.
133 +
134 +##### Async Directory Listing V1
135 +
136 +(v2 will make it into the next release)
137 +
138 +TODO
139 +
140 +### go-ipfs changelog
141 +
142 +TODO: only changes in the go-ipfs repo are included. We need to include changes
143 +from other repos (we'll want a script).
144 +
145 +Features (i.e., users take heed):
146 + - gossipsub ([ipfs/go-ipfs#5373](https://github.com/ipfs/go-ipfs/pull/5373))
147 + - support /ipfs/CID in `ipfs dht findprovs` ([ipfs/go-ipfs#5329](https://github.com/ipfs/go-ipfs/pull/5329))
148 + - return a json object from config show ([ipfs/go-ipfs#5345](https://github.com/ipfs/go-ipfs/pull/5345))
149 + - 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))
150 + - Allow mfs files.write command to create parent directories ([ipfs/go-ipfs#5359](https://github.com/ipfs/go-ipfs/pull/5359))
151 + - Run DNS lookup for --api endpoint provided in CLI ([ipfs/go-ipfs#5372](https://github.com/ipfs/go-ipfs/pull/5372))
152 + - Add support for inlinling blocks into CIDs the id-hash ([ipfs/go-ipfs#5281](https://github.com/ipfs/go-ipfs/pull/5281))
153 + - depth limited refs -r ([ipfs/go-ipfs#5337](https://github.com/ipfs/go-ipfs/pull/5337))
154 + - remove bitswap unwant ([ipfs/go-ipfs#5308](https://github.com/ipfs/go-ipfs/pull/5308))
155 + - add experimental QUIC support ([ipfs/go-ipfs#5350](https://github.com/ipfs/go-ipfs/pull/5350))
156 + - add a --stdin-name flag for naming files from stdin ([ipfs/go-ipfs#5399](https://github.com/ipfs/go-ipfs/pull/5399))
157 + - Refactor `ipfs p2p` ([ipfs/go-ipfs#4929](https://github.com/ipfs/go-ipfs/pull/4929))
158 + - add dns support in`ipfs p2p forward` and refactor code ([ipfs/go-ipfs#5533](https://github.com/ipfs/go-ipfs/pull/5533))
159 + - feat(command): expose connection direction ([ipfs/go-ipfs#5457](https://github.com/ipfs/go-ipfs/pull/5457))
160 + - error when publishing ipns records without a running daemon ([ipfs/go-ipfs#5477](https://github.com/ipfs/go-ipfs/pull/5477))
161 + - feat(daemon): print version on start ([ipfs/go-ipfs#5503](https://github.com/ipfs/go-ipfs/pull/5503))
162 + - add quieter option to name publish ([ipfs/go-ipfs#5494](https://github.com/ipfs/go-ipfs/pull/5494))
163 + - Provide new "cid" sub-command. ([ipfs/go-ipfs#5385](https://github.com/ipfs/go-ipfs/pull/5385))
164 + - feat(command): add force flag for files rm ([ipfs/go-ipfs#5555](https://github.com/ipfs/go-ipfs/pull/5555))
165 + - Add support for datastore plugins ([ipfs/go-ipfs#5187](https://github.com/ipfs/go-ipfs/pull/5187))
166 + - files ls: append slash to directory names ([ipfs/go-ipfs#5605](https://github.com/ipfs/go-ipfs/pull/5605))
167 + - ipfs name resolve --stream ([ipfs/go-ipfs#5404](https://github.com/ipfs/go-ipfs/pull/5404))
168 + - update webui to 2.1.0 ([ipfs/go-ipfs#5627](https://github.com/ipfs/go-ipfs/pull/5627))
169 + - feat: add dry-run flag for config profile apply command ([ipfs/go-ipfs#5455](https://github.com/ipfs/go-ipfs/pull/5455))
170 + - configurable pubsub signing ([ipfs/go-ipfs#5647](https://github.com/ipfs/go-ipfs/pull/5647))
171 +
172 +Fixes (i.e., users take note) (some fixed issues may have been introduced *in* this release):
173 + - pin update fixes ([ipfs/go-ipfs#5265](https://github.com/ipfs/go-ipfs/pull/5265))
174 + - Fix inability to pin two things at once ([ipfs/go-ipfs#5512](https://github.com/ipfs/go-ipfs/pull/5512))
175 + - wait for all connections to close before exiting on shutdown. ([ipfs/go-ipfs#5322](https://github.com/ipfs/go-ipfs/pull/5322))
176 + - Fixed ipns address resolution in fuse unix mount ([ipfs/go-ipfs#5384](https://github.com/ipfs/go-ipfs/pull/5384))
177 + - core/commands/ls: wrap `NewDirectoryFromNode` error ([ipfs/go-ipfs#5166](https://github.com/ipfs/go-ipfs/pull/5166))
178 + - fix goroutine leaks in filestore.go ([ipfs/go-ipfs#5427](https://github.com/ipfs/go-ipfs/pull/5427))
179 + - fix two transport related bugs ([ipfs/go-ipfs#5417](https://github.com/ipfs/go-ipfs/pull/5417))
180 + - move VersionOption after GatewayOption to fix #5422 ([ipfs/go-ipfs#5424](https://github.com/ipfs/go-ipfs/pull/5424))
181 + - fix(commands): fix filestore.go goroutine leak ([ipfs/go-ipfs#5439](https://github.com/ipfs/go-ipfs/pull/5439))
182 + - fix(commands): goroutine leaks in ping.go ([ipfs/go-ipfs#5444](https://github.com/ipfs/go-ipfs/pull/5444))
183 + - fix output of object command ([ipfs/go-ipfs#5459](https://github.com/ipfs/go-ipfs/pull/5459))
184 + - add rabin min error test ([ipfs/go-ipfs#5449](https://github.com/ipfs/go-ipfs/pull/5449))
185 + - add warning when no bootstrap in config ([ipfs/go-ipfs#5445](https://github.com/ipfs/go-ipfs/pull/5445))
186 + - make warnings on no bootstrap peers less noisy ([ipfs/go-ipfs#5466](https://github.com/ipfs/go-ipfs/pull/5466))
187 + - fix behaviour of key rename to same name ([ipfs/go-ipfs#5465](https://github.com/ipfs/go-ipfs/pull/5465))
188 + - fix(object): print object diff error ([ipfs/go-ipfs#5469](https://github.com/ipfs/go-ipfs/pull/5469))
189 + - fix(pin): goroutine leaks ([ipfs/go-ipfs#5453](https://github.com/ipfs/go-ipfs/pull/5453))
190 + - fix offline id bug ([ipfs/go-ipfs#5486](https://github.com/ipfs/go-ipfs/pull/5486))
191 + - files cp: improve flush error message ([ipfs/go-ipfs#5485](https://github.com/ipfs/go-ipfs/pull/5485))
192 + - resolve: fix unixfs resolution through sharded directories ([ipfs/go-ipfs#5484](https://github.com/ipfs/go-ipfs/pull/5484))
193 + - Switch name publish/resolve to coreapi ([ipfs/go-ipfs#5563](https://github.com/ipfs/go-ipfs/pull/5563))
194 + - use CoreAPI resolver everywhere (fixes sharded directory resolution) ([ipfs/go-ipfs#5492](https://github.com/ipfs/go-ipfs/pull/5492))
195 + - add pin lock in AddallPin function ([ipfs/go-ipfs#5506](https://github.com/ipfs/go-ipfs/pull/5506))
196 + - take the pinlock when updating pins ([ipfs/go-ipfs#5550](https://github.com/ipfs/go-ipfs/pull/5550))
197 + - fix(object): add support for raw leaves in object diff ([ipfs/go-ipfs#5472](https://github.com/ipfs/go-ipfs/pull/5472))
198 + - 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))
199 + - fix infinite loop in `stats bw` ([ipfs/go-ipfs#5598](https://github.com/ipfs/go-ipfs/pull/5598))
200 + - refactor(command): modify int to int64 ([ipfs/go-ipfs#5612](https://github.com/ipfs/go-ipfs/pull/5612))
201 + - fix(p2p): issue #5523 ([ipfs/go-ipfs#5529](https://github.com/ipfs/go-ipfs/pull/5529))
202 + - fix(core): ipns config RecordLifetime panic ([ipfs/go-ipfs#5648](https://github.com/ipfs/go-ipfs/pull/5648))
203 +
204 +Extractions:
205 + - Extract bitswap to go-bitswap ([ipfs/go-ipfs#5294](https://github.com/ipfs/go-ipfs/pull/5294))
206 + - Extract blockservice and verifcid ([ipfs/go-ipfs#5296](https://github.com/ipfs/go-ipfs/pull/5296))
207 + - Extract merkledag package, move dagutils to top level ([ipfs/go-ipfs#5298](https://github.com/ipfs/go-ipfs/pull/5298))
208 + - Extract path and resolver ([ipfs/go-ipfs#5306](https://github.com/ipfs/go-ipfs/pull/5306))
209 + - Extract config package ([ipfs/go-ipfs#5277](https://github.com/ipfs/go-ipfs/pull/5277))
210 + - Extract unixfs and importers to go-unixfs ([ipfs/go-ipfs#5316](https://github.com/ipfs/go-ipfs/pull/5316))
211 + - delete unixfs code... ([ipfs/go-ipfs#5319](https://github.com/ipfs/go-ipfs/pull/5319))
212 + - Extract /mfs to github.com/ipfs/go-mfs ([ipfs/go-ipfs#5391](https://github.com/ipfs/go-ipfs/pull/5391))
213 +
214 +Documentation:
215 + - document the fact that we now publish releases on GitHub ([ipfs/go-ipfs#5301](https://github.com/ipfs/go-ipfs/pull/5301))
216 + - docs: add url to dev weekly sync to the README ([ipfs/go-ipfs#5371](https://github.com/ipfs/go-ipfs/pull/5371))
217 + - docs: README refresh, add cli-http-api-core diagram ([ipfs/go-ipfs#5396](https://github.com/ipfs/go-ipfs/pull/5396))
218 + - add some basic gateway documentation ([ipfs/go-ipfs#5393](https://github.com/ipfs/go-ipfs/pull/5393))
219 + - fix the default gateway port ([ipfs/go-ipfs#5419](https://github.com/ipfs/go-ipfs/pull/5419))
220 + - fix order of events in the release process ([ipfs/go-ipfs#5434](https://github.com/ipfs/go-ipfs/pull/5434))
221 + - docs: add some minimal read-only API documentation ([ipfs/go-ipfs#5437](https://github.com/ipfs/go-ipfs/pull/5437))
222 + - feat: use package-table ([ipfs/go-ipfs#5395](https://github.com/ipfs/go-ipfs/pull/5395))
223 + - link to go-{libp2p,ipld} package tables ([ipfs/go-ipfs#5446](https://github.com/ipfs/go-ipfs/pull/5446))
224 + - api: fix outdated HTTPHeaders config documentation ([ipfs/go-ipfs#5451](https://github.com/ipfs/go-ipfs/pull/5451))
225 + - add version, usage, and planning info for urlstore ([ipfs/go-ipfs#5552](https://github.com/ipfs/go-ipfs/pull/5552))
226 + - debug-guide.md added memory statistics command ([ipfs/go-ipfs#5546](https://github.com/ipfs/go-ipfs/pull/5546))
227 + - Change to point to combined go contributing guidelines ([ipfs/go-ipfs#5607](https://github.com/ipfs/go-ipfs/pull/5607))
228 + - docs: Update link format ([ipfs/go-ipfs#5617](https://github.com/ipfs/go-ipfs/pull/5617))
229 + - Fix link in readme ([ipfs/go-ipfs#5632](https://github.com/ipfs/go-ipfs/pull/5632))
230 + - docs: add a note for dns command ([ipfs/go-ipfs#5629](https://github.com/ipfs/go-ipfs/pull/5629))
231 + - Dockerfile: Specifies comments on exposed ports ([ipfs/go-ipfs#5615](https://github.com/ipfs/go-ipfs/pull/5615))
232 +
233 +Testing:
234 + - Include cid-fmt binary in test/bin. ([ipfs/go-ipfs#5297](https://github.com/ipfs/go-ipfs/pull/5297))
235 + - wait for the nodes to fully stop ([ipfs/go-ipfs#5315](https://github.com/ipfs/go-ipfs/pull/5315))
236 + - apply timeout for build steps after getting node ([ipfs/go-ipfs#5313](https://github.com/ipfs/go-ipfs/pull/5313))
237 + - ci: check for gx deps dupes ([ipfs/go-ipfs#5338](https://github.com/ipfs/go-ipfs/pull/5338))
238 + - ci: call cleanWs after each step ([ipfs/go-ipfs#5374](https://github.com/ipfs/go-ipfs/pull/5374))
239 + - add correct test for GC completeness ([ipfs/go-ipfs#5364](https://github.com/ipfs/go-ipfs/pull/5364))
240 + - fix the urlstore tests ([ipfs/go-ipfs#5397](https://github.com/ipfs/go-ipfs/pull/5397))
241 + - improve gateway options test ([ipfs/go-ipfs#5433](https://github.com/ipfs/go-ipfs/pull/5433))
242 + - coreapi name: Increase test swarm size ([ipfs/go-ipfs#5481](https://github.com/ipfs/go-ipfs/pull/5481))
243 + - fix fuse unmount test ([ipfs/go-ipfs#5476](https://github.com/ipfs/go-ipfs/pull/5476))
244 + - test(add): add test for issue \#5456 ([ipfs/go-ipfs#5493](https://github.com/ipfs/go-ipfs/pull/5493))
245 + - fixed tests of raised fd limits ([ipfs/go-ipfs#5496](https://github.com/ipfs/go-ipfs/pull/5496))
246 + - pprof: create HTTP endpoint for setting MutexProfileFraction ([ipfs/go-ipfs#5527](https://github.com/ipfs/go-ipfs/pull/5527))
247 + - fix(command):update `add --chunker` test ([ipfs/go-ipfs#5571](https://github.com/ipfs/go-ipfs/pull/5571))
248 + - switch to go 1.11 ([ipfs/go-ipfs#5483](https://github.com/ipfs/go-ipfs/pull/5483))
249 + - fix: sharness race in directory_size if file is removed ([ipfs/go-ipfs#5586](https://github.com/ipfs/go-ipfs/pull/5586))
250 +
251 +Internal:
252 + - 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))
253 + - update gogo-protobuf ([ipfs/go-ipfs#5355](https://github.com/ipfs/go-ipfs/pull/5355))
254 + - update protobuf files in go-ipfs ([ipfs/go-ipfs#5356](https://github.com/ipfs/go-ipfs/pull/5356))
255 + - string-backed CIDs ([ipfs/go-ipfs#5441](https://github.com/ipfs/go-ipfs/pull/5441))
256 + - commands: switch object to CoreAPI ([ipfs/go-ipfs#4643](https://github.com/ipfs/go-ipfs/pull/4643))
257 + - coreapi: dag: Batching interface ([ipfs/go-ipfs#5340](https://github.com/ipfs/go-ipfs/pull/5340))
258 + - key cmd: Refactor to use coreapi ([ipfs/go-ipfs#5339](https://github.com/ipfs/go-ipfs/pull/5339))
259 + - coreapi: DHT API ([ipfs/go-ipfs#4804](https://github.com/ipfs/go-ipfs/pull/4804))
260 + - block cmd: Use coreapi ([ipfs/go-ipfs#5331](https://github.com/ipfs/go-ipfs/pull/5331))
261 + - mk: embed CurrentCommit in the right place ([ipfs/go-ipfs#5507](https://github.com/ipfs/go-ipfs/pull/5507))
262 + - added binary executable files to .dockerignore ([ipfs/go-ipfs#5544](https://github.com/ipfs/go-ipfs/pull/5544))
263 + - Add sessions when fetching MerkleDAG in LS ([ipfs/go-ipfs#5509](https://github.com/ipfs/go-ipfs/pull/5509))
264 + - coreapi: Swarm API ([ipfs/go-ipfs#4803](https://github.com/ipfs/go-ipfs/pull/4803))
265 + - coreapi swarm: unify impl type with other apis ([ipfs/go-ipfs#5551](https://github.com/ipfs/go-ipfs/pull/5551))
266 + - Refactor UnixFS CoreAPI ([ipfs/go-ipfs#5501](https://github.com/ipfs/go-ipfs/pull/5501))
267 + - coreapi: PubSub API ([ipfs/go-ipfs#4805](https://github.com/ipfs/go-ipfs/pull/4805))
268 + - fix: maketarball.sh for OSX ([ipfs/go-ipfs#5575](https://github.com/ipfs/go-ipfs/pull/5575))
269 + - test the correct return value when checking directory size ([ipfs/go-ipfs#5580](https://github.com/ipfs/go-ipfs/pull/5580))
270 + - downgrade iptb to a 1.3 patch release ([ipfs/go-ipfs#5596](https://github.com/ipfs/go-ipfs/pull/5596))
271 + - coreapi unixfs: remove Cat, use sessions ([ipfs/go-ipfs#5574](https://github.com/ipfs/go-ipfs/pull/5574))
272 +
273 +Cleanup:
274 + - Fix some weird code in core/coreunix/add.go ([ipfs/go-ipfs#5354](https://github.com/ipfs/go-ipfs/pull/5354))
275 + - name cmd: move subcommands to subdirectory ([ipfs/go-ipfs#5392](https://github.com/ipfs/go-ipfs/pull/5392))
276 + - directly parse peer IDs as peer IDs ([ipfs/go-ipfs#5409](https://github.com/ipfs/go-ipfs/pull/5409))
277 + - don't bother caching if we're using a nil repo ([ipfs/go-ipfs#5414](https://github.com/ipfs/go-ipfs/pull/5414))
278 + - object:refactor data encode error ([ipfs/go-ipfs#5426](https://github.com/ipfs/go-ipfs/pull/5426))
279 + - remove Godeps ([ipfs/go-ipfs#5440](https://github.com/ipfs/go-ipfs/pull/5440))
280 + - update for the go-ipfs-cmds refactor ([ipfs/go-ipfs#5035](https://github.com/ipfs/go-ipfs/pull/5035))
281 + - fix(unixfs): issue #5217 (Avoid use of `pb.Data`) ([ipfs/go-ipfs#5505](https://github.com/ipfs/go-ipfs/pull/5505))
282 + - fix(unixfs): issue #5055 ([ipfs/go-ipfs#5525](https://github.com/ipfs/go-ipfs/pull/5525))
283 + - add offline id test #4978 and refactor command code ([ipfs/go-ipfs#5562](https://github.com/ipfs/go-ipfs/pull/5562))
284 + - refact(command): replace option name with const string ([ipfs/go-ipfs#5642](https://github.com/ipfs/go-ipfs/pull/5642))
285 + - remove p2p-circuit addr hack in ipfs swarm peers ([ipfs/go-ipfs#5645](https://github.com/ipfs/go-ipfs/pull/5645))
286 + - refactor(commands/id): use new command ([ipfs/go-ipfs#5646](https://github.com/ipfs/go-ipfs/pull/5646))
287 + - object patch rm-link: change arg from 'link' to 'name' ([ipfs/go-ipfs#5638](https://github.com/ipfs/go-ipfs/pull/5638))
288 + - refactor(cmds): use new cmds lib in version, tar and dns ([ipfs/go-ipfs#5650](https://github.com/ipfs/go-ipfs/pull/5650))
289 + - cmds/dag: use new cmds lib ([ipfs/go-ipfs#5662](https://github.com/ipfs/go-ipfs/pull/5662))
290 +
291 ## 0.4.17 2018-07-27
292
293 Ipfs 0.4.17 is a quick release to fix a major performance regression in bitswap