[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