All Versions
Latest Version
Avg Release Cycle
36 days
Latest Release

Changelog History
Page 2

  • v0.7.0 Changes

    September 22, 2020


    0️⃣ Secio is now disabled by default

    🐎 As part of deprecating and removing support for the Secio security transport, we have disabled it by default. TLS1.3 will remain the default security transport with fallback to Noise. You can read more about the deprecation in the blog post, If you're running IPFS older than 0.5, this may start to impact your performance on the public network.

    0️⃣ Ed25519 keys are now used by default

    0️⃣ Previously go-ipfs generated 2048 bit RSA keys for new nodes, but it will now use ed25519 keys by default. This will not affect any existing keys, but newly created keys will be ed25519 by default. The main benefit of using ed25519 keys over RSA is that ed25519 keys have an inline public key. This means that someone only needs your PeerId to verify things you've signed, which means we don't have to worry about storing those bulky RSA public keys.

    Rotating keys

    Along with switching the default, we've added support for rotating keys. If you would like to change the key type of your IPFS node, you can now do so with the rotate command. NOTE: This will affect your Peer Id, so be sure you want to do this! Your existing identity key will be backed up in the Keystore.

    ipfs key rotate -o my-old-key -t ed25519
    Key export/import

    We've added commands to allow you to export and import keys from the IPFS Keystore to a local .key file. This does not apply to the IPFS identity key, self.

    ipfs key gen mykey
    ipfs key export -o mykey.key mykey # ./<name>.key is the default path
    ipfs key import mykey mykey.key # on another node
    0️⃣ IPNS paths now encode the key name as a base36 CIDv1 by default

    0️⃣ Previously go-ipfs encoded the key names for IPNS paths as base58btc multihashes (e.g. Qmabc...). We now encode them as base36 encoded CIDv1s as defined in the peerID spec (e.g. k51xyz...) which also deals with encoding of public keys. This is nice because it means that IPNS keys will by default be case-insensitive and that they will fit into DNS labels (e.g. k51xyz...ipns.localhost) and therefore that subdomain gateway redirections (e.g. from localhost:8080/ipns/{key} to {key}.ipns.localhost) will look better to users in the default case.

    πŸ‘ Many commands will accept a --ipns-base option that allows changing command outputs to use a particular encoding (i.e. base58btc multihash, or CIDv1 encoded in any supported base)

    Multiaddresses now accept PeerIDs encoded as CIDv1

    0️⃣ In preparation for eventually changing the default PeerID representation multiaddresses can now contain strings like /p2p/k51xyz... in addition to the default /p2p/Qmabc.... There is a corresponding --peerid-base option to many functions that output peerIDs.

    dag stat

    πŸŽ‰ Initial support has been added for the ipfs dag stat command. Running this command will traverse the DAG for the given root CID and report statistics. By default, progress will be shown as the DAG is traversed. Supported statistics currently include DAG size and number of blocks.

    ipfs dag stat bafybeihpetclqvwb4qnmumvcn7nh4pxrtugrlpw4jgjpqicdxsv7opdm6e # the IPFS webui
    Size: 30362191, NumBlocks: 346
    πŸ”Œ Plugin build changes

    πŸ— We have changed the build flags used by the official binary distributions on (or /ipns/ to use the simpler and more reliable -trimpath flag instead of the more complicated and brittle -asmflags=all=-trimpath="$(GOPATH)" -gcflags=all=-trimpath="$(GOPATH)" flags, however the build flags used by default in go-ipfs remain the same.

    ⚑️ The scripts in have been updated to reflect this change. This is a breaking change to how people have been building plugins against the binary of go-ipfs and plugins should update their build processes accordingly see for details.

    πŸ”„ Changelog


    Contributor Commits Lines Β± Files Changed
    πŸ‘€ Marten Seemann 156 +16428/-42621
    hannahhoward 42 +15132/-9819 467
    Eric Myhre 114 +13709/-6898 586
    Steven Allen 55 +1211/-2714 95
    Adin Schmahmann 54 +1660/-783 117
    Petar Maymounkov 23 +1677/-671 75
    Aarsh Shah 10 +1926/-341 39
    RaΓΊl Kripalani 17 +1134/-537 53
    Will 1 +841/-0 9
    rendaw 3 +425/-195 12
    Will Scott 8 +302/-229 15
    vyzo 22 +345/-166 23
    Fazlul Shahriar 7 +452/-44 19
    Peter Rabbitson 1 +353/-118 5
    Hector Sanjuan 10 +451/-3 14
    Marcin Rataj 9 +298/-106 16
    Łukasz Magiera 4 +329/-51 12
    RubenKelevra 9 +331/-7 12
    Michael MurΓ© 2 +259/-69 6
    jstordeur 1 +252/-2 5
    Diederik Loerakker 1 +168/-35 7
    Tiger 3 +138/-52 8
    Kevin Neaton 3 +103/-21 9
    Rod Vagg 1 +50/-40 4
    Oli Evans 4 +60/-9 6
    achingbrain 4 +30/-30 5
    Cyril Fougeray 2 +34/-24 2
    Luke Tucker 1 +31/-1 2
    sandman 2 +23/-7 3
    Alan Shaw 1 +18/-9 2
    Jacob Heun 4 +13/-3 4
    Jessica Schilling 3 +7/-7 3
    Rafael Ramalho 4 +9/-4 4
    Jeromy Johnson 2 +6/-6 4
    Nick Cabatoff 1 +7/-2 1
    Stephen Solka 1 +1/-7 1
    Preston Van Loon 2 +6/-2 2
    Jakub Sztandera 2 +5/-2 2
    llx 1 +3/-3 1
    Adrian Lanzafame 1 +3/-3 1
    Yusef Napora 1 +3/-2 1
    Louis Thibault 1 +5/-0 1
    MartΓ­n Triay 1 +4/-0 1
    Hlib 1 +2/-2 1
    Shotaro Yamada 1 +2/-1 1
    phuslu 1 +1/-1 1
    Zero King 1 +1/-1 1
    RΓΌdiger Klaehn 1 +2/-0 1
    Nex 1 +1/-1 1
    Mark Gaiser 1 +1/-1 1
    Luflosi 1 +1/-1 1
    David Florness 1 +1/-1 1
    Dean Eigenmann 1 +0/-1 1
  • v0.7.0-rc2 Changes

    September 10, 2020

    Tracking Issue: #7560

  • v0.7.0-rc1 Changes

    August 26, 2020

    Tracking Issue: #7560

  • v0.6.0 Changes

    June 19, 2020

    πŸš€ This is a relatively small release in terms of code changes, but it contains some significant changes to the IPFS protocol.


    πŸš€ The highlights in this release include:

    • ⬆️ The QUIC transport is enabled by default. Furthermore, go-ipfs will automatically run a migration to listen on the QUIC transport (on the same address/port as the TCP transport) to make this upgrade process seamless.
    • πŸ”’ The new NOISE security transport is now supported but won't be selected by default. This transport will replace SECIO as the default cross-language interoperability security transport. TLS 1.3 will still remain the default security transport between go-ipfs nodes for now.

    MIGRATION: This release contains a small config migration to enable listening on the QUIC transport in addition the TCP transport. This migration will:

    • Normalize multiaddrs in the bootstrap list to use the /p2p/Qm... syntax for multiaddrs instead of the /ipfs/Qm... syntax.
    • βž• Add QUIC addresses for the default bootstrapers, as necessary. If you've removed the default bootstrappers from your bootstrap config, the migration won't add them back.
    • βž• Add a QUIC listener address to mirror any TCP addresses present in your config. For example, if you're listening on /ip4/, this migration will add a listen address for /ip4/

    0️⃣ QUIC by default

    πŸš€ This release enables the QUIC transport (draft 28) by default for both inbound and outbound connections. When connecting to new peers, libp2p will continue to dial all advertised addresses (tcp + quic) in parallel so if the QUIC connection fails for some reason, the connection should still succeed.

    The QUIC transport has several key benefits over the current TCP based transports:

    • πŸ‘€ It takes fewer round-trips to establish a connection. With the QUIC transport, the IPFS handshake takes two round trips (one to establish the QUIC connection, one for the libp2p handshake). In the future, we should be able to reduce this to one round trip for the initial connection, and zero round trips for subsequent connections to a previously seen peer. This is especially important for DHT requests that contact many new peers.
    • Because it's UDP based instead of TCP based, it uses fewer file descriptors. The QUIC transport will open one UDP socket per listen address instead of one socket per connection. This should, in the future, allow us to keep more connections open.
    • 🚚 Because QUIC connections don't consume file descriptors, we're able to remove the rate limit on outbound QUIC connections, further speeding up DHT queries.

    Unfortunately, this change isn't without drawbacks: the QUIC transport may not be able to max out some links (usually due to poorly tuned kernel parameters). On the other hand, it may also be faster in some cases

    0️⃣ If you hit this performance issue on Linux, you should tune the net.core.rmem_default and net.core.rmem_max sysctl parameters to increase your UDP receive buffer sizes.

    If necessary, you can disable the QUIC transport by running:

    \> ipfs config --json Swarm.Transports.Network.QUIC false

    NOTE: The QUIC transport included in this release is backwards incompatible with the experimental QUIC transport included in previous releases. Unfortunately, the QUIC protocol underwent some significant breaking changes and supporting multiple versions wasn't an option. In practice this degrades gracefully as go-ipfs will simply fall back on the TCP transport when dialing nodes with incompatible QUIC versions.

    Noise Transport

    πŸš€ This go-ipfs release introduces a new security transport: libp2p Noise (built from the Noise Protocol Framework). While TLS1.3 remains the default go-ipfs security transport, Noise is simpler to implement from scratch and will be the standard cross-platform libp2p security transport going forward.

    πŸ—„ This brings us one step closer to deprecating and removing support for SECIO.

    πŸ‘‰ While enabled by default, Noise won't actually be used by default it's negotiated. Given that TLS1.3 is still the default security transport for go-ipfs, this usually won't happen. If you'd like to prefer Noise over other security transports, you can change its priority in the config (Swarm.Transports.Security.Noise).


    πŸš€ This release brings two gateway-relevant features: custom 404 pages and base36 support.

    Custom 404

    You can now customize 404 Not Found error pages by including an ipfs-404.html file somewhere in the request path. When a requested file isn't found, go-ipfs will look for an ipfs-404.html in the same directory as the requested file, and in each ancestor directory. If found, this file will be returned (with a 404 status code) instead of the usual error message.

    πŸ‘Œ Support for Base36

    πŸš€ This release adds support for a new multibase encoding: base36. Base36 is an optimally efficient case-insensitive alphanumeric encoding. Case-insensitive alphanumeric encodings are important for the subdomain gateway as domain names are case insensitive.

    0️⃣ While base32 (the current default encoding used in subdomains) is simpler than base36, it's not optimally efficient and base36 Ed25519 IPNS keys are 2 characters too big to fit into the 63 character subdomain length limit. The extra efficiency from base36 brings us under this limit and allows Ed25519 IPNS keys to work with the subdomain gateway.

    πŸš€ This release adds support for base36 but won't use it by default. If you'd like to re-encode an Ed25519 IPNS key into base36, you can use the ipfs cid format command:

    $ ipfs cid format -v 1 --codec libp2p-key -b base36 bafzaajaiaejca4syrpdu6gdx4wsdnokxkprgzxf4wrstuc34gxw5k5jrag2so5gk k51qzi5uqu5dj16qyiq0tajolkojyl9qdkr254920wxv7ghtuwcz593tp69z9m

    ⬆️ Gossipsub Upgrade

    πŸš€ This release brings a new gossipsub protocol version: 1.1. You can read about it in the blog post.


    πŸš€ This release introduces a new "peering" feature. The peering subsystem configures go-ipfs to connect to, remain connected to, and reconnect to a set of nodes. Nodes should use this subsystem to create "sticky" links between frequently useful peers to improve reliability.

    πŸ‘‰ Use-cases:

    • An IPFS gateway connected to an IPFS cluster should peer to ensure that the gateway can always fetch content from the cluster.
    • πŸ“Œ A dapp may peer embedded go-ipfs nodes with a set of pinning services or textile cafes/hubs.
    • A set of friends may peer to ensure that they can always fetch each other's content.

    πŸ”„ Changelog


    Contributor Commits Lines Β± Files Changed
    vyzo 224 +8016/-2810 304
    πŸ‘€ Marten Seemann 87 +6081/-2607
    Steven Allen 157 +4763/-1628 266
    Aarsh Shah 33 +4619/-1634 128
    Dirk McCormick 26 +3596/-1156 69
    Yusef Napora 66 +2622/-785 98
    RaΓΊl Kripalani 24 +2424/-782 61
    Hector Sanjuan 30 +999/-177 61
    Louis Thibault 2 +1111/-4 4
    Will Scott 15 +717/-219 31
    dependabot-preview[bot] 53 +640/-64 106
    Michael MurΓ© 7 +456/-213 17
    David Dias 11 +426/-88 15
    Peter Rabbitson 11 +254/-189 31
    Lukasz Zimnoch 9 +361/-49 13
    Jakub Sztandera 4 +157/-104 9
    Rod Vagg 1 +91/-83 2
    RubenKelevra 13 +84/-84 30
    JP Hastings-Spital 1 +145/-0 2
    Adin Schmahmann 11 +67/-37 15
    Marcin Rataj 11 +41/-43 11
    Tiger 5 +53/-8 6
    Akira 2 +35/-19 2
    Casey Chance 2 +31/-22 2
    Alan Shaw 1 +44/-0 2
    Jessica Schilling 4 +20/-19 7
    Gowtham G 4 +22/-14 6
    Jeromy Johnson 3 +24/-6 3
    Edgar Aroutiounian 3 +16/-8 3
    Peter Wu 2 +12/-9 2
    Sawood Alam 2 +7/-7 2
    Command 1 +12/-0 1
    Eric Myhre 1 +9/-2 1
    mawei 2 +5/-5 2
    decanus 1 +5/-5 1
    Ignacio Hagopian 2 +7/-2 2
    Alfonso Montero 1 +1/-5 1
    Volker Mische 1 +2/-2 1
    Shotaro Yamada 1 +2/-1 1
    Mark Gaiser 1 +1/-1 1
    Johnny 1 +1/-1 1
    Ganesh Prasad Kumble 1 +1/-1 1
    Dominic Della Valle 1 +1/-1 1
    Corbin Page 1 +1/-1 1
    Bryan Stenson 1 +1/-1 1
    Bernhard M. Wiedemann 1 +1/-1 1
  • v0.6.0-rc7 Changes

    June 17, 2020

    Tracking issue: #7347

  • v0.6.0-rc6 Changes

    June 11, 2020

    Tracking issue: #7347

  • v0.6.0-rc5

    June 09, 2020
  • v0.6.0-rc4

    June 09, 2020
  • v0.6.0-rc3

    June 09, 2020
  • v0.6.0-rc2

    June 08, 2020