| 1 | # Kubo changelog v0.17 |
| 2 | |
| 3 | ## v0.17.0 |
| 4 | |
| 5 | ### Overview |
| 6 | |
| 7 | Below is an outline of all that is in this release, so you get a sense of all that's included. |
| 8 | |
| 9 | - [Kubo changelog v0.17](#kubo-changelog-v017) |
| 10 | - [v0.17.0](#v0170) |
| 11 | - [Overview](#overview) |
| 12 | - [🔦 Highlights](#-highlights) |
| 13 | - [libp2p resource management enabled by default](#libp2p-resource-management-enabled-by-default) |
| 14 | - [Implicit connection manager limits](#implicit-connection-manager-limits) |
| 15 | - [TAR Response Format on Gateways](#tar-response-format-on-gateways) |
| 16 | - [Dialling `/wss` peer behind a reverse proxy](#dialling-wss-peer-behind-a-reverse-proxy) |
| 17 | - [Changelog](#changelog) |
| 18 | - [Contributors](#contributors) |
| 19 | |
| 20 | ### 🔦 Highlights |
| 21 | |
| 22 | <!-- TODO --> |
| 23 | |
| 24 | #### libp2p resource management enabled by default |
| 25 | |
| 26 | To help protect nodes from DoS (resource exhaustion) and eclipse attacks, |
| 27 | go-libp2p released a [Network Resource Manager](https://github.com/libp2p/go-libp2p/tree/master/p2p/host/resource-manager) with a host of improvements throughout 2022. |
| 28 | |
| 29 | Kubo first [exposed this functionality in Kubo 0.13](https://github.com/ipfs/kubo/blob/master/docs/changelogs/v0.13.md#-libp2p-network-resource-manager-swarmresourcemgr), |
| 30 | but it was disabled by default. |
| 31 | |
| 32 | The resource manager is now enabled by default to protect nodes. |
| 33 | The defaults balance providing protection from various attacks while still enabling normal usecases to work as expected. |
| 34 | |
| 35 | If you want to adjust the defaults, then you can: |
| 36 | 1. bound the amount of memory and file descriptors that libp2p will use with [Swarm.ResourceMgr.MaxMemory](https://github.com/ipfs/go-ipfs/blob/master/docs/config.md#swarmresourcemgrmaxmemory) |
| 37 | and [Swarm.ResourceMgr.MaxFileDescriptors](https://github.com/ipfs/go-ipfs/blob/master/docs/config.md#swarmresourcemgrmaxfiledescriptors) and/or |
| 38 | 2. override any specific resource scopes/limits with [Swarm.ResourceMgr.Limits](https://github.com/ipfs/go-ipfs/blob/master/docs/config.md#swarmresourcemgrlimits) |
| 39 | |
| 40 | See [Swarm.ResourceMgr](https://github.com/ipfs/go-ipfs/blob/master/docs/config.md#swarmresourcemgr) for |
| 41 | 1. what limits are set by default, |
| 42 | 2. example override configuration, |
| 43 | 3. how to access Prometheus metrics and view Grafana dashboards of resource usage, and |
| 44 | 4. how to set explicit "allow lists" to protect against eclipse attacks. |
| 45 | |
| 46 | #### Implicit connection manager limits |
| 47 | |
| 48 | Starting with this release, `ipfs init` will no longer store the default |
| 49 | [Connection Manager](https://github.com/ipfs/kubo/blob/master/docs/config.md#swarmconnmgr) |
| 50 | limits in the user config under `Swarm.ConnMgr`. |
| 51 | |
| 52 | Users are still free to use this setting to set custom values, but for most use |
| 53 | cases, the defaults provided with the latest Kubo release should be sufficient. |
| 54 | |
| 55 | To remove any custom limits and switch to the implicit defaults managed by Kubo: |
| 56 | |
| 57 | ```console |
| 58 | $ ipfs config --json Swarm.ConnMgr '{}' |
| 59 | ``` |
| 60 | |
| 61 | We will be adjusting defaults in the future releases. |
| 62 | |
| 63 | #### TAR Response Format on Gateways |
| 64 | |
| 65 | Implemented [IPIP-288](https://github.com/ipfs/specs/pull/288) which adds |
| 66 | support for requesting deserialized UnixFS directory as a TAR stream. |
| 67 | |
| 68 | HTTP clients can request TAR response by passing the `?format=tar` URL |
| 69 | parameter, or setting `Accept: application/x-tar` HTTP header: |
| 70 | |
| 71 | ```console |
| 72 | $ export DIR_CID=bafybeigccimv3zqm5g4jt363faybagywkvqbrismoquogimy7kvz2sj7sq |
| 73 | $ curl -H "Accept: application/x-tar" "http://127.0.0.1:8080/ipfs/$DIR_CID" > dir.tar |
| 74 | $ curl "http://127.0.0.1:8080/ipfs/$DIR_CID?format=tar" | tar xv |
| 75 | bafybeigccimv3zqm5g4jt363faybagywkvqbrismoquogimy7kvz2sj7sq |
| 76 | bafybeigccimv3zqm5g4jt363faybagywkvqbrismoquogimy7kvz2sj7sq/1 - Barrel - Part 1 - alt.txt |
| 77 | bafybeigccimv3zqm5g4jt363faybagywkvqbrismoquogimy7kvz2sj7sq/1 - Barrel - Part 1 - transcript.txt |
| 78 | bafybeigccimv3zqm5g4jt363faybagywkvqbrismoquogimy7kvz2sj7sq/1 - Barrel - Part 1.png |
| 79 | ``` |
| 80 | |
| 81 | #### Dialling `/wss` peer behind a reverse proxy |
| 82 | |
| 83 | This release resolves a regression introduced in Kubo 0.16, making it possible |
| 84 | again to connect to a peer over a WebSockets endpoint (`/wss`) that is |
| 85 | deployed behind a reverse proxy. |
| 86 | |
| 87 | More details in [go-libp2p release notes](https://github.com/libp2p/go-libp2p/releases/tag/v0.23.3). |
| 88 | |
| 89 | ### Changelog |
| 90 | |
| 91 | <details><summary>Full Changelog</summary> |
| 92 | |
| 93 | - github.com/ipfs/kubo: |
| 94 | - chore: bump version to v0.17.0 ([ipfs/kubo#9427](https://github.com/ipfs/kubo/pull/9427)) |
| 95 | - chore: bump version to v0.17.0-rc2 ([ipfs/kubo#9414](https://github.com/ipfs/kubo/pull/9414)) |
| 96 | - Doc improvements and changelog for resource manager (#9413) ([ipfs/kubo#9413](https://github.com/ipfs/kubo/pull/9413)) |
| 97 | - fix(docs): typo |
| 98 | - docs: document /wss fixes in 0.17 |
| 99 | - refactor(config): remove Swarm.ConnMgr defaults |
| 100 | - fix(config): skip nulls in ResourceMgr |
| 101 | - Apply go fmt |
| 102 | - Update core/node/libp2p/rcmgr_defaults.go |
| 103 | - Remove limitation by HighWater param. |
| 104 | - Fix RM errors when acceleratedDHT is active |
| 105 | - docs: Deprecate Reframe on docs. (#9401) ([ipfs/kubo#9401](https://github.com/ipfs/kubo/pull/9401)) |
| 106 | - chore: bump version to v0.17.0-rc1 ([ipfs/kubo#9394](https://github.com/ipfs/kubo/pull/9394)) |
| 107 | - feat: Improve ResourceManager UX (#9338) ([ipfs/kubo#9338](https://github.com/ipfs/kubo/pull/9338)) |
| 108 | - feat: ipfs-webui 2.20.0 |
| 109 | - docs: note log tail is broken (#9383) ([ipfs/kubo#9383](https://github.com/ipfs/kubo/pull/9383)) |
| 110 | - feat(gateway): TAR response format (#9029) ([ipfs/kubo#9029](https://github.com/ipfs/kubo/pull/9029)) |
| 111 | - fix: error when using huge json limit file |
| 112 | - chore: go-multicodec v0.7.0 |
| 113 | - fix: remove old unused buggy coredag code |
| 114 | - feat: Add command line completion for fish |
| 115 | - chore: delete snap configuration ([ipfs/kubo#9352](https://github.com/ipfs/kubo/pull/9352)) |
| 116 | - docs: update scoop package |
| 117 | - docs: init release issue template improvement process v0.16.0 ([ipfs/kubo#9283](https://github.com/ipfs/kubo/pull/9283)) |
| 118 | - feat: add delegated routing metrics (#9354) ([ipfs/kubo#9354](https://github.com/ipfs/kubo/pull/9354)) |
| 119 | - chore: create v0.17.md changelog ([ipfs/kubo#9353](https://github.com/ipfs/kubo/pull/9353)) |
| 120 | - docs: pin remote arg |
| 121 | - feat: webui@v2.19.0 |
| 122 | - test(car): export/import of (dag-)cbor/json codecs |
| 123 | - add refs local alias repo ls (#9320) ([ipfs/kubo#9320](https://github.com/ipfs/kubo/pull/9320)) |
| 124 | - docs(cmds): Clarify block fetching of refs endpoint. |
| 125 | - chore(cmds): dag import: use ipld legacy decode ([ipfs/kubo#9219](https://github.com/ipfs/kubo/pull/9219)) |
| 126 | - fix ipfs swarm peering crash in offline mode (#9261) ([ipfs/kubo#9261](https://github.com/ipfs/kubo/pull/9261)) |
| 127 | - feat: remove provider delay interval in bitswap (#9053) ([ipfs/kubo#9053](https://github.com/ipfs/kubo/pull/9053)) |
| 128 | - feat: --reset flag on swarm limit command (#9310) ([ipfs/kubo#9310](https://github.com/ipfs/kubo/pull/9310)) |
| 129 | - fix: add InlineDNSLink flag to PublicGateways config (#9328) ([ipfs/kubo#9328](https://github.com/ipfs/kubo/pull/9328)) |
| 130 | - docs: Fix typo and grammar in README |
| 131 | - ci: add stylecheck to golangci-lint (#9334) ([ipfs/kubo#9334](https://github.com/ipfs/kubo/pull/9334)) |
| 132 | - Fix: `swarm stats all` command |
| 133 | - Merge release v0.16.0 back into master ([ipfs/kubo#9324](https://github.com/ipfs/kubo/pull/9324)) |
| 134 | - fix: Set default Methods value to nil |
| 135 | - docs: add WebTransport docs ([ipfs/kubo#9314](https://github.com/ipfs/kubo/pull/9314)) |
| 136 | - chore: bump version to 0.17.0-dev |
| 137 | - github.com/ipfs/go-delegated-routing (v0.6.0 -> v0.7.0): |
| 138 | - Release v0.7.0 |
| 139 | - feat: add latency & count metrics for content routing client (#59) ([ipfs/go-delegated-routing#59](https://github.com/ipfs/go-delegated-routing/pull/59)) |
| 140 | - docs: add basic readme ([ipfs/go-delegated-routing#57](https://github.com/ipfs/go-delegated-routing/pull/57)) |
| 141 | - sync: update CI config files ([ipfs/go-delegated-routing#40](https://github.com/ipfs/go-delegated-routing/pull/40)) |
| 142 | - added link to reframe blog post (#54) ([ipfs/go-delegated-routing#54](https://github.com/ipfs/go-delegated-routing/pull/54)) |
| 143 | - github.com/ipfs/go-ipfs-files (v0.1.1 -> v0.2.0): |
| 144 | - Release v0.2.0 |
| 145 | - fix: error when TAR has files outside of root (#56) ([ipfs/go-ipfs-files#56](https://github.com/ipfs/go-ipfs-files/pull/56)) |
| 146 | - sync: update CI config files ([ipfs/go-ipfs-files#55](https://github.com/ipfs/go-ipfs-files/pull/55)) |
| 147 | - chore(Directory): add DirIterator API restriction: iterate only once |
| 148 | - github.com/ipfs/go-unixfs (v0.4.0 -> v0.4.1): |
| 149 | - Update version.json |
| 150 | - Fix: panic when childer is nil (#127) ([ipfs/go-unixfs#127](https://github.com/ipfs/go-unixfs/pull/127)) |
| 151 | - sync: update CI config files (#125) ([ipfs/go-unixfs#125](https://github.com/ipfs/go-unixfs/pull/125)) |
| 152 | - github.com/ipld/go-ipld-prime (v0.18.0 -> v0.19.0): |
| 153 | - Prepare v0.19.0 |
| 154 | - fix: correct json codec links & bytes handling |
| 155 | - test(basicnode): increase test coverage for int and map types (#454) ([ipld/go-ipld-prime#454](https://github.com/ipld/go-ipld-prime/pull/454)) |
| 156 | - fix: remove reliance on ioutil |
| 157 | - run gofmt -s |
| 158 | - bump go.mod to Go 1.18 and run go fix |
| 159 | - feat: add kinded union to gendemo |
| 160 | - github.com/libp2p/go-libp2p (v0.23.2 -> v0.23.4): |
| 161 | - Release v0.23.4 (#1864) ([libp2p/go-libp2p#1864](https://github.com/libp2p/go-libp2p/pull/1864)) |
| 162 | - release v0.23.3 |
| 163 | - websocket: set the HTTP host header in WSS |
| 164 | - github.com/libp2p/go-netroute (v0.2.0 -> v0.2.1): |
| 165 | - v0.2.1 ([libp2p/go-netroute#27](https://github.com/libp2p/go-netroute/pull/27)) |
| 166 | - fix(phys-addr-length): fix physical address length mismatch ([libp2p/go-netroute#29](https://github.com/libp2p/go-netroute/pull/29)) |
| 167 | - compare priority if route rule's dst mask is same size |
| 168 | - compare priority if route rule's dst mask is same size |
| 169 | - sync: update CI config files (#24) ([libp2p/go-netroute#24](https://github.com/libp2p/go-netroute/pull/24)) |
| 170 | - github.com/marten-seemann/qpack (v0.2.1 -> v0.3.0): |
| 171 | - update to Ginkgo v2 (#30) ([marten-seemann/qpack#30](https://github.com/marten-seemann/qpack/pull/30)) |
| 172 | - return write error when encoding header fields (#28) ([marten-seemann/qpack#28](https://github.com/marten-seemann/qpack/pull/28)) |
| 173 | - update Go versions (#29) ([marten-seemann/qpack#29](https://github.com/marten-seemann/qpack/pull/29)) |
| 174 | - remove CircleCI build status from README |
| 175 | - add link to QPACK RFC to README |
| 176 | - remove build constraint from fuzzer ([marten-seemann/qpack#24](https://github.com/marten-seemann/qpack/pull/24)) |
| 177 | - github.com/multiformats/go-multicodec (v0.6.0 -> v0.7.0): |
| 178 | - feat: update ./multicodec/table.csv ([multiformats/go-multicodec#71](https://github.com/multiformats/go-multicodec/pull/71)) |
| 179 | |
| 180 | </details> |
| 181 | |
| 182 | ### Contributors |
| 183 | |
| 184 | | Contributor | Commits | Lines ± | Files Changed | |
| 185 | |-------------|---------|---------|---------------| |
| 186 | | Antonio Navarro Perez | 11 | +780/-987 | 31 | |
| 187 | | Marcin Rataj | 14 | +791/-543 | 26 | |
| 188 | | web3-bot | 7 | +393/-427 | 71 | |
| 189 | | galargh | 20 | +309/-277 | 21 | |
| 190 | | Gus Eggert | 5 | +358/-222 | 58 | |
| 191 | | Henrique Dias | 3 | +409/-30 | 13 | |
| 192 | | Dustin Long | 1 | +314/-0 | 2 | |
| 193 | | Marco Munizaga | 2 | +211/-46 | 11 | |
| 194 | | Rod Vagg | 4 | +188/-62 | 13 | |
| 195 | | Jorropo | 2 | +4/-219 | 5 | |
| 196 | | Steve Loeppky | 1 | +115/-72 | 4 | |
| 197 | | Andreas Källberg | 1 | +145/-5 | 5 | |
| 198 | | Lucas Molas | 3 | +76/-53 | 9 | |
| 199 | | snyh | 2 | +36/-18 | 2 | |
| 200 | | Piotr Galar | 2 | +31/-4 | 2 | |
| 201 | | Ondrej Kokes | 1 | +25/-4 | 2 | |
| 202 | | Marten Seemann | 6 | +14/-14 | 14 | |
| 203 | | Yann Autissier | 1 | +14/-4 | 1 | |
| 204 | | maxos | 1 | +8/-1 | 2 | |
| 205 | | reidlw | 1 | +1/-4 | 1 | |
| 206 | | Russell Dempsey | 2 | +4/-1 | 2 | |
| 207 | | Ian Davis | 1 | +4/-0 | 2 | |
| 208 | | Daniel Norman | 1 | +3/-1 | 1 | |
| 209 | | Will Scott | 1 | +1/-1 | 1 | |
| 210 | | Nikhilesh Susarla | 1 | +2/-0 | 2 | |
| 211 | | Jamie Wilkinson | 1 | +1/-1 | 1 | |
| 212 | | Will | 1 | +0/-1 | 1 | |