Skip to content

Latest commit

 

History

History
1671 lines (1457 loc) · 110 KB

CHANGELOG.md

File metadata and controls

1671 lines (1457 loc) · 110 KB

go-ipfs changelog

0.4.14 2018-03-02

Ipfs 0.4.14 is a big release with a large number of improvements and bugfixes. It is also the first release of 2018, and our first release in over three months. The release took longer than expected due to our refactoring and extracting of our commands library. This refactor had two stages. The first round of the refactor disentangled the commands code from core ipfs code, allowing us to move it out into a separate repository. The code was previously very entangled with the go-ipfs codebase and not usable for other projects. The second round of the refactor had the goal of fixing several major issues around streaming outputs, progress bars, and error handling. It also paved the way for us to more easily provide an API over other transports, such as websockets and unix domain sockets. It took a while to flush out all the kinks on such a massive change. We're pretty sure we've got most of them, but if you notice anything weird, please let us know.

Beyond that, we've added a new experimental way to use IPNS. With the new pubsub IPNS resolver and publisher, you can subscribe to updates of an IPNS entry, and the owner can publish out changes in real time. With this, IPNS can become nearly instantaneous. To make use of this, simply start your ipfs daemon with the --enable-namesys-pubsub option, and all IPNS resolution and publishing will use pubsub. Note that resolving an IPNS name via pubsub without someone publishing it via pubsub will result in a fallback to using the DHT. Please give this a try and let us know how it goes!

Memory and CPU usage should see a noticeable improvement in this release. We have spent considerable time fixing excess memory usage throughout the codebase and down into libp2p. Fixes in peer tracking, bitswap allocation, pinning, and many other places have brought down both peak and average memory usage. An upgraded hashing library, base58 encoding library, and improved allocation patterns all contribute to overall lower CPU usage across the board. See the full changelist below for more memory and CPU usage improvements.

This release also brings the beginning of the ipfs 'Core API'. Once finished, the Core API will be the primary way to interact with go-ipfs using go. Both embedded nodes and nodes accessed over the http API will have the same interface. Stay tuned for future updates and documentation.

These are only a sampling of the changes that made it into this release, the full list (almost 100 PRs!) is below.

Finally, I'd like to thank everyone who contributed to this release, whether you're just contributing a typo fix or driving new features. We are really grateful to everyone who has spent their their time pushing ipfs forward.

SECURITY NOTE:

This release of ipfs disallows the usage of insecure hash functions and lengths. Ipfs does not create these insecure objects for any purpose, but it did allow manually creating them and fetching them from other peers. If you currently have objects using insecure hashes in your local ipfs repo, please remove them before updating.

0.4.13 2017-11-16

Ipfs 0.4.13 is a patch release that fixes two high priority issues that were discovered in the 0.4.12 release.

Bugfixes:

0.4.12 2017-11-09

Ipfs 0.4.12 brings with it many important fixes for the huge spike in network size we've seen this past month. These changes include the Connection Manager, faster batching in ipfs add, libp2p fixes that reduce CPU usage, and a bunch of new documentation.

The most critical change is the 'Connection Manager': it allows an ipfs node to maintain a limited set of connections to other peers in the network. By default (and with no config changes required by the user), ipfs nodes will now try to maintain between 600 and 900 open connections. These limits are still likely higher than needed, and future releases may lower the default recommendation, but for now we want to make changes gradually. The rationale for this selection of numbers is as follows:

  • The DHT routing table for a large network may rise to around 400 peers
  • Bitswap connections tend to be separate from the DHT
  • PubSub connections also generally are another distinct set of peers (including js-ipfs nodes)

Because of this, we selected 600 as a 'LowWater' number, and 900 as a 'HighWater' number to avoid having to clear out connections too frequently. You can configure different numbers as you see fit via the Swarm.ConnMgr field in your ipfs config file. See here for more details.

Disk utilization during ipfs add has been optimized for large files by doing batch writes in parallel. Previously, when adding a large file, users might have noticed that the add progressed by about 8MB at a time, with brief pauses in between. This was caused by quickly filling up the batch, then blocking while it was writing to disk. We now write to disk in the background while continuing to add the remainder of the file.

Other changes in this release have noticeably reduced memory consumption and CPU usage. This was done by optimising some frequently called functions in libp2p that were expensive in terms of both CPU usage and memory allocations. We also lowered the yamux accept buffer sizes which were raised over a year ago to combat a separate bug that has since been fixed.

And finally, thank you to everyone who filed bugs, tested out the release candidates, filed pull requests, and contributed in any other way to this release!

0.4.11 2017-09-14

Ipfs 0.4.11 is a larger release that brings many long-awaited features and performance improvements. These include new datastore options, more efficient bitswap transfers, greatly improved resource consumption, circuit relay support, ipld plugins, and more! Take a look at the full changelog below for a detailed list of every change.

The ipfs datastore has, until now, been a combination of leveldb and a custom git-like storage backend called 'flatfs'. This works well enough for the average user, but different ipfs usecases demand different backend configurations. To address this, we have changed the configuration file format for datastores to be a modular way of specifying exactly how you want the datastore to be structured. You will now be able to configure ipfs to use flatfs, leveldb, badger, an in-memory datastore, and more to suit your needs. See the new datastore documentation for more information.

Bitswap received some much needed attention during this release cycle. The concept of 'Bitswap Sessions' allows bitswap to associate requests for different blocks to the same underlying session, and from that infer better ways of requesting that data. In more concrete terms, parts of the ipfs codebase that take advantage of sessions (currently, only ipfs pin add) will cause much less extra traffic than before. This is done by making optimistic guesses about which nodes might be providing given blocks and not sending wantlist updates to every connected bitswap partner, as well as searching the DHT for providers less frequently. In future releases we will migrate over more ipfs commands to take advantage of bitswap sessions. As nodes update to this and future versions, expect to see idle bandwidth usage on the ipfs network go down noticably.

The never ending effort to reduce resource consumption had a few important updates this release. First, the bitswap sessions changes discussed above will help with improving bandwidth usage. Aside from that there are two important libp2p updates that improved things significantly. The first was a fix to a bug in the dial limiter code that was causing it to not limit outgoing dials correctly. This resulted in ipfs running out of file descriptors very frequently (as well as incurring a decent amount of excess outgoing bandwidth), this has now been fixed. Users who previously received "too many open files" errors should see this much less often in 0.4.11. The second change was a memory leak in the DHT that was identified and fixed. Streams being tracked in a map in the DHT weren't being cleaned up after the peer disconnected leading to the multiplexer session not being cleaned up properly. This issue has been resolved, and now memory usage appears to be stable over time. There is still a lot of work to be done improving memory usage, but we feel this is a solid victory.

It is often said that NAT traversal is the hardest problem in peer to peer technology, we tend to agree with this. In an effort to provide a more ubiquitous p2p mesh, we have implemented a relay mechanism that allows willing peers to relay traffic for other peers who might not otherwise be able to communicate with each other. This feature is still pretty early, and currently users have to manually connect through a relay. The next step in this endeavour is automatic relaying, and research for this is currently in progress. We expect that when it lands, it will improve the perceived performance of ipfs by spending less time attempting connections to hard to reach nodes. A short guide on using the circuit relay feature can be found here.

The last feature we want to highlight (but by no means the last feature in this release) is our new plugin system. There are many different workflows and usecases that ipfs should be able to support, but not everyone wants to be able to use every feature. We could simply merge in all these features, but that causes problems for several reasons: first off, the size of the ipfs binary starts to get very large very quickly. Second, each of these different pieces needs to be maintained and updated independently, which would cause significant churn in the codebase. To address this, we have come up with a system that allows users to install plugins to the vanilla ipfs daemon that augment its capabilities. The first of these plugins are a git plugin that allows ipfs to natively address git objects and an ethereum plugin that lets ipfs ingest and operate on all ethereum blockchain data. Soon to come are plugins for the bitcoin and zcash data formats. In the future, we will be adding plugins for other things like datastore backends and specialized libp2p network transports. You can read more on this topic in Plugin docs

In order to simplify its integration with fs-repo-migrations, we've switched the ipfs/go-ipfs docker image from a musl base to a glibc base. For most users this will not be noticable, but if you've been building your own images based off this image, you'll have to update your dockerfile. We recommend a multi-stage dockerfile, where the build stage is based off of a regular Debian or other glibc-based image, and the assembly stage is based off of the ipfs/go-ipfs image, and you copy build artifacts from the build stage to the assembly stage. Note, if you are using the docker image and see a deprecation message, please update your usage. We will stop supporting the old method of starting the dockerfile in the next release.

Finally, I would like to thank all of our contributors, users, supporters, and friends for helping us along the way. Ipfs would not be where it is without you.

0.4.10 - 2017-06-27

Ipfs 0.4.10 is a patch release that contains several exciting new features, bugfixes and general improvements. Including new commands, easier corruption recovery, and a generally cleaner codebase.

The ipfs pin command has two new subcommands, verify and update. ipfs pin verify is used to scan the repo for pinned object graphs and check their integrity. Any issues are reported back with helpful error text to make error recovery simpler. This subcommand was added to help recover from datastore corruptions, particularly if using the experimental filestore and accidentally deleting tracked files. ipfs pin update was added to make the task of keeping a large, frequently changing object graph pinned. Previously users had to call ipfs pin rm on the old pin, and ipfs pin add on the new one. The 'new' ipfs pin add call would be very expensive as it would need to verify the entirety of the graph again. The ipfs pin update command takes shortcuts, portions of the graph that were covered under the old pin are assumed to be fine, and the command skips checking them.

Next up, we have finally implemented an ipfs shutdown command so users can shut down their ipfs daemons via the API. This is especially useful on platforms that make it difficult to control processes (Android, for example), and is also useful when needing to shut down a node remotely and you do not have access to the machine itself.

ipfs add has gained a new flag; the --hash flag allows you to select which hash function to use and we have given it the ability to select blake2b-256. This pushes us one step closer to shifting over to using blake2b as the default. Blake2b is significantly faster than sha2-256, and also is conjectured to provide superior security.

We have also finally implemented a very early (and experimental) ipfs p2p. This command and its subcommands will allow you to open up arbitrary streams to other ipfs peers through libp2p. The interfaces are a little bit clunky right now, but shouldn't get in the way of anyone wanting to try building a fully peer to peer application on top of ipfs and libp2p. For more info on this command, to ask questions, or to provide feedback, head over to the feedback issue for the command.

A few other subcommands and flags were added around the API, as well as many other requested improvements. See below for the full list of changes.

0.4.9 - 2017-04-30

Ipfs 0.4.9 is a maintenance release that contains several useful bugfixes and improvements. Notably, ipfs add has gained the ability to select which CID version will be output. The common ipfs hash that looks like this: QmRjNgF2mRLDT8AzCPsQbw1EYF2hDTFgfUmJokJPhCApYP is a multihash. Multihashes allow us to specify the hashing algorithm that was used to verify the data, but it doesn't give us any indication of what format that data might be. To address that issue, we are adding another couple of bytes to the prefix that will allow us to indicate the format of the data referenced by the hash. This new format is called a Content ID, or CID for short. The previous bare multihashes will still be fully supported throughout the entire application as CID version 0. The new format with the type information will be CID version 1. To give an example, the content referenced by the hash above is "Hello Ipfs!". That same content, in the same format (dag-protobuf) using CIDv1 is zb2rhkgXZVkT2xvDiuUsJENPSbWJy7fdYnsboLBzzEjjZMRoG.

CIDv1 hashes are supported in ipfs versions back to 0.4.5. Nodes running 0.4.4 and older will not be able to load content via CIDv1 and we recommend that they update to a newer version.

There are many other use cases for CIDs. Plugins can be written to allow ipfs to natively address content from any other merkletree based system, such as git, bitcoin, zcash and ethereum -- a few systems we've already started work on.

Aside from the CID flag, there were many other changes as noted below:

0.4.8 - 2017-03-29

Ipfs 0.4.8 brings with it several improvements, bugfixes, documentation improvements, and the long awaited directory sharding code.

Currently, when too many items are added into a unixfs directory, the object gets too large and you may experience issues. To pervent this problem, and generally make working really large directories more efficient, we have implemented a HAMT structure for unixfs. To enable this feature, run:

ipfs config --json Experimental.ShardingEnabled true

And restart your daemon if it was running.

Note: With this setting enabled, the hashes of any newly added directories will be different than they previously were, as the new code will use the sharded HAMT structure for all directories. Also, nodes running ipfs 0.4.7 and earlier will not be able to access directories created with this option.

That said, please do give it a try, let us know how it goes, and then take a look at all the other cool things added in 0.4.8 below.

0.4.7 - 2017-03-15

Ipfs 0.4.7 contains several exciting new features! First off, The long awaited filestore feature has been merged, allowing users the option to not have ipfs store chunked copies of added files in the blockstore, pushing to burden of ensuring those files are not changed to the user. The filestore feature is currently still experimental, and must be enabled in your config with:

ipfs config --json Experimental.FilestoreEnabled true

before it can be used. Please see this issue for more details.

Next up, We have merged initial support for ipfs 'Private Networks'. This feature allows users to run ipfs in a mode that will only connect to other peers in the private network. This feature, like the filestore is being released experimentally, but if you're interested please try it out. Instructions for setting it up can be found here.

This release also enables support for the 'mplex' stream muxer by default. This stream multiplexing protocol was available previously via the --enable-mplex-experiment daemon flag, but has now graduated to being 'less experimental' and no longer requires the flag to use it.

Aside from those, we have a good number of bugfixes, perf improvements and new tests. Heres a list of highlights:

0.4.6 - 2017-02-21

Ipfs 0.4.6 contains several bugfixes related to migrations and also contains a few other improvements to other parts of the codebase. Notably:

0.4.5 - 2017-02-11

Changes from rc3 to rc4

Changes from rc2 to rc3

Changes from rc1 to rc2

Changes since 0.4.4

0.4.4 - 2016-10-11

This release contains an important hotfix for a bug we discovered in how pinning works. If you had a large number of pins, new pins would overwrite existing pins. Apart from the hotfix, this release is equal to the previous release 0.4.3.

  • Fix bug in pinsets fanout, and add stress test. (@whyrusleeping, ipfs/go-ipfs#3273)

We published a detailed account of the bug and fix in a blog post.

0.4.3 - 2016-09-20

There have been no changes since the last release candidate 0.4.3-rc4. \o/

0.4.3-rc4 - 2016-09-09

This release candidate fixes issues in Bitswap and the ipfs add command, and improves testing. We plan for this to be the last release candidate before the release of go-ipfs v0.4.3.

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.

  • Require Go 1.7. (@whyrusleeping, @Kubuxu, @lgierth, ipfs/go-ipfs#3163)
    • For this purpose, switch Docker image from Alpine 3.4 to Alpine Edge.
  • Fix cancellation of Bitswap wantlist entries. (@whyrusleeping, ipfs/go-ipfs#3182)
  • Fix clearing of active state of Bitswap provider queries. (@whyrusleeping, ipfs/go-ipfs#3169)
  • Fix a panic in the DHT code. (@Kubuxu, ipfs/go-ipfs#3200)
  • Improve handling of Identity field in ipfs config command. (@Kubuxu, @whyrusleeping, ipfs/go-ipfs#3141)
  • Fix explicit adding of symlinked files and directories. (@kevina, ipfs/go-ipfs#3135)
  • Fix bash auto-completion of ipfs daemon --unrestricted-api option. (@lgierth, ipfs/go-ipfs#3159)
  • Introduce a new timeout tool for tests to avoid licensing issues. (@Kubuxu, ipfs/go-ipfs#3152)
  • Improve output for migrations of fs-repo. (@lgierth, ipfs/go-ipfs#3158)
  • Fix info notice of commands taking input from stdin. (@Kubuxu, ipfs/go-ipfs#3134)
  • Bring back a few tests for stdin handling of ipfs cat and ipfs add. (@Kubuxu, ipfs/go-ipfs#3144)
  • Improve sharness tests for ipfs repo verify command. (@whyrusleeping, ipfs/go-ipfs#3148)
  • Improve sharness tests for CORS headers on the gateway. (@Kubuxu, ipfs/go-ipfs#3142)
  • Improve tests for pinning within ipfs files. (@kevina, ipfs/go-ipfs#3151)
  • Improve tests for the automatic raising of file descriptor limits. (@whyrusleeping, ipfs/go-ipfs#3149)

0.4.3-rc3 - 2016-08-11

This release candidate fixes a panic that occurs when input from stdin was expected, but none was given: ipfs/go-ipfs#3050

0.4.3-rc2 - 2016-08-04

This release includes bugfixes and fixes for regressions that were introduced between 0.4.2 and 0.4.3-rc1.

  • Regressions
    • Fix daemon panic when there is no multipart input provided over the HTTP API. (@whyrusleeping, ipfs/go-ipfs#2989)
    • Fix ipfs refs --edges not printing edges. (@Kubuxu, ipfs/go-ipfs#3007)
    • Fix progress option for ipfs add defaulting to true on the HTTP API. (@whyrusleeping, ipfs/go-ipfs#3025)
    • Fix erroneous printing of stdin reading message. (@whyrusleeping, ipfs/go-ipfs#3033)
    • Fix panic caused by passing --mount and --offline flags to ipfs daemon. (@Kubuxu, ipfs/go-ipfs#3022)
    • Fix symlink path resolution on windows. (@Kubuxu, ipfs/go-ipfs#3023)
    • Add in code to prevent issue 3032 from crashing the daemon. (@whyrusleeping, ipfs/go-ipfs#3037)

0.4.3-rc1 - 2016-07-23

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.

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.

0.4.2 - 2016-05-17

This is a patch release which fixes perfomance and networking bugs in go-libp2p, You should see improvements in CPU and RAM usage, as well as speed of object lookups. There are also a few other nice improvements.

  • Notable Fixes

    • Set a deadline for dialing attempts. This prevents a node from accumulating failed connections. (@whyrusleeping)
    • Avoid unneccessary string/byte conversions in go-multihash. (@whyrusleeping)
    • Fix a deadlock around the yamux stream muxer. (@whyrusleeping)
    • Fix a bug that left channels open, causing hangs. (@whyrusleeping)
    • Fix a bug around yamux which caused connection hangs. (@whyrusleeping)
    • Fix a crash caused by nil multiaddrs. (@whyrusleeping)
  • Enhancements

    • Add NetBSD support. (@erde74)
    • Set Cache-Control: immutable on /ipfs responses. (@kpcyrd)
    • Have ipfs init optionally accept a default configuration from stdin. (@sivachandran)
    • Add ipfs log ls command for listing logging subsystems. (@hsanjuan)
    • Allow bitswap to read multiple messages per stream. (@whyrusleeping)
    • Remove make toolkit_upgrade step. (@chriscool)
  • Documentation

    • Add a debug-guidelines document. (@richardlitt)
    • Update the contribute document. (@richardlitt)
    • Fix documentation of many ipfs commands. (@richardlitt)
    • Fall back to ShortDesc if LongDesc is missing. (@Kubuxu)
  • Removals

    • Remove -f option from ipfs init command. (@whyrusleeping)
  • Bugfixes

    • Fix ipfs object patch argument handling and validation. (@jbenet)
    • Fix ipfs config edit command by running it client-side. (@Kubuxu)
    • Set default value for ipfs refs arguments. (@richardlitt)
    • Fix parsing of incorrect command and argument permutations. (@thomas-gardner)
    • Update Dockerfile to latest go1.5.4-r0. (@chriscool)
    • Allow passing IPFS_LOGGING to Docker image. (@lgierth)
    • Fix dot path parsing on Windows. (@djdv)
    • Fix formatting of ipfs log ls output. (@richardlitt)
  • General Codebase

    • Refactor Makefile. (@kevina)
    • Wire context into bitswap requests more deeply. (@whyrusleeping)
    • Use gx for iptb. (@chriscool)
    • Update gx and gx-go. (@chriscool)
    • Make blocks.Block an interface. (@kevina)
    • Silence check for Docker existance. (@chriscool)
    • Add dist_get script for fetching tools from dist.ipfs.io. (@whyrusleeping)
    • Add proper defaults to all ipfs commands. (@richardlitt)
    • Remove dead count option from ipfs pin ls. (@richardlitt)
    • Initialize pin mode strings only once. (@chriscool)
    • Add changelog for v0.4.2. (@lgierth)
    • Specify a dist.ipfs.io hash for tool downloads instead of trusting DNS. (@lgierth)
  • CI

    • Fix t0170-dht sharness test. (@chriscool)
    • Increase timeout in t0060-daemon sharness test. (@Kubuxu)
    • Have CircleCI use make deps instead of gx directly. (@whyrusleeping)

0.4.1 - 2016-04-25

This is a patch release that fixes a few bugs, and adds a few small (but not insignificant) features. The primary reason for this release is the listener hang bugfix that was shipped in the 0.4.0 release.

  • Features

    • implementated ipfs object diff (@whyrusleeping)
    • allow promises (used in get, refs) to fail (@whyrusleeping)
  • Tool changes

    • Adds 'toolkit_upgrade' to the makefile help target (@achin)
  • General Codebase

    • Use extracted go-libp2p-crypto, -secio, -peer packages (@lgierth)
    • Update go-libp2p (@lgierth)
    • Fix package manifest fields (@lgierth)
    • remove incfusever dead-code (@whyrusleeping)
    • remove a ton of unused godeps (@whyrusleeping)
    • metrics: add prometheus back (@lgierth)
    • clean up dead code and config fields (@whyrusleeping)
    • Add log events when blocks are added/removed from the blockstore (@michealmure)
    • repo: don't create logs directory, not used any longer (@lgierth)
  • Bugfixes

    • fixed ipfs name resolve --local multihash error (@pfista)
    • ipfs patch commands won't return null links field anymore (@whyrusleeping)
    • Make non recursive resolve print the result (@Kubuxu)
    • Output dirs on ipfs add -rn (@noffle)
    • update libp2p dep to fix hanging listeners problem (@whyrusleeping)
    • Fix Swarm.AddrFilters config setting with regard to /ip6 addresses (@lgierth)
    • fix dht command key escaping (@whyrusleeping)
  • Testing

    • Adds tests to make sure 'object patch' writes. (@noffle)
    • small sharness test for promise failure checking (@whyrusleeping)
    • sharness/Makefile: clean all BINS when cleaning (@chriscool)
  • Documentation

    • Fix disconnect argument description (@richardlitt)
    • Added a note about swarm disconnect (@richardlitt)
    • Also fixed syntax for comment (@richardlitt)
    • Alphabetized swarm subcmds (@richardlitt)
    • Added note to ipfs stats bw interval option (@richardlitt)
    • Small syntax changes to repo stat man (@richardlitt)
    • update log command help text (@pfista)
    • Added a long description to add (@richardlitt)
    • Edited object patch set-data doc (@richardlitt)
    • add roadmap.md (@Jeromy)
    • Adds files api cmd to helptext (@noffle)

0.4.0 - 2016-04-05

This is a major release with plenty of new features and bugfixes. It also includes breaking changes which make it incompatible with v0.3.x on the networking layer.

  • Major Changes
    • Multistream
      • The addition of multistream is a breaking change on the networking layer, but gives IPFS implementations the ability to mix and match different stream multiplexers, e.g. yamux, spdystream, or muxado. This adds a ton of flexibility on one of the lower layers of the protocol, and will help us avoid further breaking protocol changes in the future.
    • Files API
      • The new files command and API allow a program to interact with IPFS using familiar filesystem operations, namely: creating directories, reading, writing, and deleting files, listing out different directories, and so on. This feature enables any other application that uses a filesystem-like backend for storage, to use IPFS as its storage driver without having change the application logic at all.
    • Gx
      • go-ipfs now uses gx to manage its dependencies. This means that under the hood, go-ipfs's dependencies are backed by IPFS itself! It also means that go-ipfs is no longer installed using go get. Use make install instead.
  • New Features
    • Web UI
      • Update to new version which is compatible with 0.4.0. (@dignifiedquire)
    • Networking
      • Implement uTP transport. (@whyrusleeping)
      • Allow multiple addresses per configured bootstrap node. (@whyrusleeping)
    • IPNS
      • Improve IPNS resolution performance. (@whyrusleeping)
      • Have dnslink prefer TXT _dnslink.example.com, allows usage of CNAME records. (@Kubuxu)
      • Prevent ipfs name publish when /ipns is mounted. (@noffle)
    • Repo
      • Improve performance of ipfs add. (@whyrusleeping)
      • Add Datastore.NoSync config option for flatfs. (@rht)
      • Implement mark-and-sweep GC. (@whyrusleeping)
      • Allow for GC during ipfs add. (@whyrusleeping)
      • Add ipfs repo stat command. (@tmg, @diasdavid)
    • General
      • Add support for HTTP OPTIONS requests. (@lidel)
      • Add ipfs diag cmds to view active API requests (@whyrusleeping)
      • Add an IPFS_LOW_MEM environment veriable which relaxes Bitswap's memory usage. (@whyrusleeping)
      • The Docker image now lives at ipfs/go-ipfs and has been completely reworked. (@lgierth)
  • Security fixes
    • The gateway path prefix added in v0.3.10 was vulnerable to cross-site scripting attacks. This release introduces a configurable list of allowed path prefixes. It's called Gateway.PathPrefixes and takes a list of strings, e.g. ["/blog", "/foo/bar"]. The v0.3.x line will not receive any further updates, so please update to v0.4.0 as soon as possible. (@lgierth)
  • Incompatible Changes
    • Install using make install instead of go get (@whyrusleeping)
    • Rewrite pinning to store pins in IPFS objects. (@tv42)
    • Bump fs-repo version to 3. (@whyrusleeping)
    • Use multistream muxer (@whyrusleeping)
    • The default for --type in ipfs pin ls is now all. (@chriscool)
  • Bug Fixes
    • Remove msgio double wrap. (@jbenet)
    • Buffer msgio. (@whyrusleeping)
    • Perform various fixes to the FUSE code. (@tv42)
    • Compute ipfs add size in background to not stall add operation. (@whyrusleeping)
    • Add option to have ipfs add include top-level hidden files. (@noffle)
    • Fix CORS checks on the API. (@rht)
    • Fix ipfs update error message. (@tomgg)
    • Resolve paths in ipfs pin rm without network lookup. (@noffle)
    • Detect FUSE unmounts and track mount state. (@noffle)
    • Fix go1.6rc2 panic caused by CloseNotify being called from wrong goroutine. (@rwcarlsen)
    • Bump DHT kvalue from 10 to 20. (@whyrusleeping)
    • Put public key and IPNS entry to DHT in parallel. (@whyrusleeping)
    • Fix panic in CLI argument parsing. (@whyrusleeping)
    • Fix range error by using larger-than-zero-length buffer. (@noffle)
    • Fix yamux hanging issue by increasing AcceptBacklog. (@whyrusleeping)
    • Fix double Transport-Encoding header bug. (@whyrusleeping)
    • Fix uTP panic and file descriptor leak. (@whyrusleeping)
  • Tool Changes
    • Add --pin option to ipfs add, which defaults to true and allows --pin=false. (@eminence)
    • Add arguments to ipfs pin ls. (@chriscool)
    • Add dns and resolve commands to read-only API. (@Kubuxu)
    • Add option to display headers for ipfs object links. (@palkeo)
  • General Codebase Changes
    • Check Golang version in Makefile. (@chriscool)
    • Improve Makefile. (@tomgg)
    • Remove dead Jenkins CI code. (@lgierth)
    • Add locking interface to blockstore. (@whyrusleeping)
    • Add Merkledag FetchGraph and EnumerateChildren. (@whyrusleeping)
    • Rename Lock/RLock to GCLock/PinLock. (@jbenet)
    • Implement pluggable datastore types. (@tv42)
    • Record datastore metrics for non-default datastores. (@tv42)
    • Allow multistream to have zero-rtt stream opening. (@whyrusleeping)
    • Refactor ipnsfs into a more generic and well tested mfs. (@whyrusleeping)
    • Grab more peers if bucket doesn't contain enough. (@whyrusleeping)
    • Use CloseNotify in gateway. (@whyrusleeping)
    • Flatten multipart file transfers. (@whyrusleeping)
    • Send updated DHT record fixes to peers who sent outdated records. (@whyrusleeping)
    • Replace go-psutil with go-sysinfo. (@whyrusleeping)
    • Use ServeContent for index.html. (@AtnNn)
    • Refactor object patch API to not store data in URL. (@whyrusleeping)
    • Use mfs for ipfs add. (@whyrusleeping)
    • Add Server header to API responses. (@Kubuxu)
    • Wire context directly into HTTP requests. (@rht)
    • Wire context directly into GetDAG operations within GC. (@rht)
    • Vendor libp2p using gx. (@whyrusleeping)
    • Use gx vendored packages instead of Godeps. (@whyrusleeping)
    • Simplify merkledag package interface to ease IPLD inclusion. (@mildred)
    • Add default option value support to commands lib. (@whyrusleeping)
    • Refactor merkledag fetching methods. (@whyrusleeping)
    • Use net/url to escape paths within Web UI. (@noffle)
    • Deprecated key.Pretty(). (@MichealMure)
  • Documentation
    • Fix and update help text for every ipfs command. (@RichardLitt)
    • Change sample API origin settings from wildcard (*) to example.com. (@Kubuxu)
    • Improve documentation of installation process in README. (@whyrusleeping)
    • Improve windows.md. (@chriscool)
    • Clarify instructions for installing from source. (@noffle)
    • Make version checking more robust. (@jedahan)
    • Assert the source code is located within GOPATH. (@whyrusleeping)
    • Remove mentions of /dns from ipfs dns command docs. (@lgierth)
  • Testing
    • Refactor iptb tests. (@chriscool)
    • Improve t0240 sharness test. (@chriscool)
    • Make bitswap tests less flaky. (@whyrusleeping)
    • Use TCP port zero for ipfs daemon in sharness tests. (@whyrusleeping)
    • Improve sharness tests on AppVeyor. (@chriscool)
    • Add a pause to fix timing on t0065. (@whyrusleeping)
    • Add support for arbitrary TCP ports to t0060-daemon.sh. (@noffle)
    • Make t0060 sharness test use TCP port zero. (@whyrusleeping)
    • Randomized ipfs stress testing via randor (@dignifiedquire)
    • Stress test pinning and migrations (@whyrusleeping)

0.3.11 - 2016-01-12

This is the final ipfs version before the transition to v0.4.0. It introduces a few stability improvements, bugfixes, and increased test coverage.

  • Features

    • Add 'get' and 'patch' to the allowed gateway commands (@whyrusleeping)
    • Updated webui version (@dignifiedquire)
  • BugFixes

    • Fix path parsing for add command (@djdv)
    • namesys: Make paths with multiple segments work. Fixes #2059 (@Kubuxu)
    • Fix up panic catching in http handler funcs (@whyrusleeping)
    • Add correct access control headers to the default api config (@dignifiedquire)
    • Fix closenotify by not sending empty file set (@whyrusleeping)
  • Tool Changes

    • Have install.sh use the full path to ipfs binary if detected (@jedahan)
    • Install daemon system-wide if on El Capitan (@jedahan)
    • makefile: add -ldflags to install and nofuse tasks (@lgierth)
  • General Codebase

    • Clean up http client code (@whyrusleeping)
    • Move api version check to header (@rht)
  • Documentation

    • Improved release checklist (@jbenet)
    • Added quotes around command in long description (@RichardLitt)
    • Added a shutdown note to daemon description (@RichardLitt)
  • Testing

    • t0080: improve last tests (@chriscool)
    • t0080: improve 'ipfs refs --unique' test (@chriscool)
    • Fix t.Fatal usage in goroutines (@chriscool)
    • Add docker testing support to sharness (@chriscool)
    • sharness: add t0300-docker-image.sh (@chriscool)
    • Included more namesys tests. (@Kubuxu)
    • Add sharness test to verify requests look good (@whyrusleeping)
    • Re-enable ipns sharness test now that iptb is fixed (@whyrusleeping)
    • Force use of ipv4 in test (@whyrusleeping)
    • Travis-CI: use go 1.5.2 (@jbenet)

0.3.10 - 2015-12-07

This patch update introduces the 'ipfs update' command which will be used for future ipfs updates along with a few other bugfixes and documentation improvements.

  • Features

    • support for 'ipfs update' to call external binary (@whyrusleeping)
    • cache ipns entries to speed things up a little (@whyrusleeping)
    • add option to version command to print repo version (@whyrusleeping)
    • Add in some more notifications to help profile queries (@whyrusleeping)
    • gateway: add path prefix for directory listings (@lgierth)
    • gateway: add CurrentCommit to /version (@lgierth)
  • BugFixes

    • set data and links nil if not present (@whyrusleeping)
    • fix log hanging issue, and implement close-notify for commands (@whyrusleeping)
    • fix dial backoff (@whyrusleeping)
    • proper ndjson implementation (@whyrusleeping)
    • seccat: fix secio context (@lgierth)
    • Add newline to end of the output for a few commands. (@nham)
    • Add fixed period repo GC + test (@rht)
  • Tool Changes

    • Allow ipfs cat on ipns path (@rht)
  • General Codebase

    • rewrite of backoff mechanism (@whyrusleeping)
    • refactor net code to use transports, in rough accordance with libp2p (@whyrusleeping)
    • disable building fuse stuff on windows (@whyrusleeping)
    • repo: remove Log config (@lgierth)
    • commands: fix description of --api (@lgierth)
  • Documentation

    • --help: Add a note on using IPFS_PATH to the footer of the helptext. (@sahib)
    • Moved email juan to ipfs/contribute (@richardlitt)
    • Added commit sign off section (@richardlitt)
    • Added a security section (@richardlitt)
    • Moved TODO doc to issue #1929 (@richardlitt)
  • Testing

    • gateway: add tests for /version (@lgierth)
    • Add gc auto test (@rht)
    • t0020: cleanup dir with bad perms (@chriscool)

Note: this commit introduces fixed-period repo gc, which will trigger gc after a fixed period of time. This feature is introduced now, disabled by default, and can be enabled with ipfs daemon --enable-gc. If all goes well, in the future, it will be enabled by default.

0.3.9 - 2015-10-30

This patch update includes a good number of bugfixes, notably, it fixes builds on windows, and puts newlines between streaming json objects for a proper nsjon format.

  • Features

    • Writable gateway enabled again (@cryptix)
  • Bugfixes

    • fix windows builds (@whyrusleeping)
    • content type on command responses default to text (@whyrusleeping)
    • add check to makefile to ensure windows builds dont fail silently (@whyrusleeping)
    • put newlines between streaming json output objects (@whyrusleeping)
    • fix streaming output to flush per write (@whyrusleeping)
    • purposely fail builds pre go1.5 (@whyrusleeping)
    • fix ipfs id (@whyrusleeping)
    • fix a few race conditions in mocknet (@whyrusleeping)
    • fix makefile failing when not in a git repo (@whyrusleeping)
    • fix cli flag orders (long, short) (@rht)
    • fix races in http cors (@miolini)
    • small webui update (some bugfixes) (@jbenet)
  • Tool Changes

    • make swarm connect return an error when it fails (@whyrusleeping)
    • Add short flag for ipfs ls --headers (v for verbose) (@rht)
  • General Codebase

    • bitswap: clean log printf and humanize dup data count (@cryptix)
    • config: update pluto's peerID (@lgierth)
    • config: update bootstrap list hostname (@lgierth)
  • Documentation

    • Pared down contribute to link to new go guidelines (@richardlitt)
  • Testing

    • t0010: add tests for 'ipfs commands --flags' (@chriscool)
    • ipns_test: fix namesys.NewNameSystem() call (@chriscool)
    • t0060: fail if no nc (@chriscool)

0.3.8 - 2015-10-09

This patch update includes changes to make ipns more consistent and reliable, symlink support in unixfs, mild performance improvements, new tooling features, a plethora of bugfixes, and greatly improved tests.

NOTICE: Version 0.3.8 also requires golang version 1.5.1 or higher.

  • Bugfixes

    • refactor ipns to be more consistent and reliable (@whyrusleeping)
    • fix 'ipfs refs' json output (@whyrusleeping)
    • fix setting null config maps (@rht)
    • fix output of dht commands (@whyrusleeping)
    • fix NAT spam dialing (@whyrusleeping)
    • fix random panics on 32 bit systems (@whyrusleeping)
    • limit total number of network fd's (@whyrusleeping)
    • fix http api content type (@WeMeetAgain)
    • fix writing of api file for port zero daemons (@whyrusleeping)
    • windows connection refused fixes (@mjanczyk)
    • use go1.5's built in trailers, no more failures (@whyrusleeping)
    • fix random bitswap hangs (@whyrusleeping)
    • rate limit fd usage (@whyrusleeping)
    • fix panic in bitswap ratelimiting (@whyrusleeping)
  • Tool Changes

    • --empty-repo option for init (@prusnak)
    • implement symlinks (@whyrusleeping)
    • improve cmds lib files processing (@rht)
    • properly return errors through commands (@whyrusleeping)
    • bitswap unwant command (@whyrusleeping)
    • tar add/cat commands (@whyrusleeping)
    • fix gzip compression in get (@klauspost)
    • bitswap stat logs wasted bytes (@whyrusleeping)
    • resolve command now uses core.Resolve (@rht)
    • add --local flag to 'name resolve' (@whyrusleeping)
    • add ipfs diag sys command for debugging help (@whyrusleeping)
  • General Codebase

    • improvements to dag editor (@whyrusleeping)
    • swarm IPv6 in default config (Baptiste Jonglez)
    • improve dir listing css (@rht)
    • removed elliptic.P224 usage (@prusnak)
    • improve bitswap providing speed (@jbenet)
    • print panics that occur in cmds lib (@whyrusleeping)
    • ipfs api check test fixes (@rht)
    • update peerstream and datastore (@whyrusleeping)
    • cleaned up tar-reader code (@jbenet)
    • write context into coreunix.Cat (@rht)
    • move assets to separate repo (@rht)
    • fix proc/ctx wiring in bitswap (@jbenet)
    • rabin fingerprinting chunker (@whyrusleeping)
    • better notification on daemon ready (@rht)
    • coreunix cat cleanup (@rht)
    • extract logging into go-log (@whyrusleeping)
    • blockservice.New no longer errors (@whyrusleeping)
    • refactor ipfs get (@rht)
    • readonly api on gateway (@rht)
    • cleanup context usage all over (@rht)
    • add xml decoding to 'object put' (@ForrestWeston)
    • replace nodebuilder with NewNode method (@whyrusleeping)
    • add metrics to http handlers (@lgierth)
    • rm blockservice workers (@whyrusleeping)
    • decompose maybeGzWriter (@rht)
    • makefile sets git commit sha on build (@CaioAlonso)
  • Documentation

    • add contribute file (@RichardLitt)
    • add go devel guide to contribute.md (@whyrusleeping)
  • Testing

    • fix mock notifs test (@whyrusleeping)
    • test utf8 with object cmd (@chriscool)
    • make mocknet conn close idempotent (@jbenet)
    • fix fuse tests (@pnelson)
    • improve sharness test quoting (@chriscool)
    • sharness tests for chunker and add-cat (@rht)
    • generalize peerid check in sharness (@chriscool)
    • test_cmp argument cleanup (@chriscool)

0.3.7 - 2015-08-02

This patch update fixes a problem we introduced in 0.3.6 and did not catch: the webui failed to work with out-of-the-box CORS configs. This has been fixed and now should work correctly. @jbenet

0.3.6 - 2015-07-30

This patch improves the resource consumption of go-ipfs, introduces a few new options on the CLI, and also fixes (yet again) windows builds.

  • Resource consumption:

    • fixed goprocess memory leak @rht
    • implement batching on datastore @whyrusleeping
    • Fix bitswap memory leak @whyrusleeping
    • let bitswap ignore temporary write errors @whyrusleeping
    • remove logging to disk in favor of api endpoint @whyrusleeping
    • --only-hash option for add to skip writing to disk @whyrusleeping
  • Tool changes

    • improved ipfs daemon output with all addresses @jbenet
    • improved ipfs id -f output, added <addrs> and \n \t support @jbenet
    • ipfs swarm addrs local now shows the local node's addrs @jbenet
    • improved config json parsing @rht
    • improved Dockerfile to use alpine linux @Luzifer @lgierth
    • improved bash completion @MichaelMure
    • Improved 404 for gateway @cryptix
    • add unixfs ls to list correct filesizes @wking
    • ignore hidden files by default @gatesvp
    • global --timeout flag @whyrusleeping
    • fix random API failures by closing resp bodies @whyrusleeping
    • ipfs swarm filters @whyrusleeping
    • api returns errors in http trailers @whyrusleeping @jbenet
    • ipfs patch learned to create intermediate nodes @whyrusleeping
    • ipfs object stat now shows Hash @whyrusleeping
    • ipfs cat now clears progressbar on exit @rht
    • ipfs add -w -r <dir> now wraps directories @jbenet
    • ipfs add -w <file1> <file2> now wraps with one dir @jbenet
    • API + Gateway now support arbitrary HTTP Headers from config @jbenet
    • API now supports CORS properly from config @jbenet
    • Deprecated: API_ORIGIN env var (use config, see ipfs daemon --help) @jbenet
  • General Codebase

    • nofuse tag for windows @Luzifer
    • improved ipfs add code @gatesvp
    • started requiring license trailers @chriscool @jbenet
    • removed CtxCloser for goprocess @rht
    • remove deadcode @lgierth @whyrusleeping
    • reduced number of logging libs to 2 (soon to be 1) @rht
    • dial address filtering @whyrusleeping
    • prometheus metrics @lgierth
    • new index page for gateway @krl @cryptix
    • move ping to separate protocol @whyrusleeping
    • add events to bitswap for a dashboard @whyrusleeping
    • add latency and bandwidth options to mocknet @heems
    • levenshtein distance cmd autosuggest @sbruce
    • refactor/cleanup of cmds http handler @whyrusleeping
    • cmds http stream reports errors in trailers @whyrusleeping
  • Bugfixes

    • fixed path resolution and validation @rht
    • fixed ipfs get -C output and progress bar @rht
    • Fixed install pkg dist bug @jbenet @Luzifer
    • Fix ipfs get silent failure @whyrusleeping
    • ipfs get tarx no longer times out @jbenet
    • ipfs refs -r -u is now correct @gatesvp
    • Fix ipfs add -w -r <dir> wrapping bugs @jbenet
    • Fixed FUSE unmount failures @jbenet
    • Fixed ipfs log tail command (api + cli) @whyrusleeping
  • Testing

    • sharness updates @chriscool
    • ability to disable secio for testing @jbenet
    • fixed many random test failures, more reliable CI @whyrusleeping
    • Fixed racey notifier failures @whyrusleeping
    • ipfs refs -r -u test cases @jbenet
    • Fix failing pinning test @jbenet
    • Better CORS + Referer tests @jbenet
    • Added reversible gc test @rht
    • Fixed bugs in FUSE IPNS tests @whyrusleeping
    • Fixed bugs in FUSE IPFS tests @jbenet
    • Added random-files tool for easier sharness tests @jbenet
  • Documentation

    • Add link to init system examples @slang800
    • Add CORS documentation to daemon init @carver (Note: this will change soon)

0.3.5 - 2015-06-11

This patch improves overall stability and performance

  • added 'object patch' and 'object new' commands @whyrusleeping
  • improved symmetric NAT avoidance @jbenet
  • move util.Key to blocks.Key @whyrusleeping
  • fix memory leak in provider store @whyrusleeping
  • updated webui to 0.2.0 @krl
  • improved bitswap performance @whyrusleeping
  • update fuse lib @cryptix
  • fix path resolution @wking
  • implement test_seq() in sharness @chriscool
  • improve parsing of stdin for commands @chriscool
  • fix 'ipfs refs' failing silently @whyrusleeping
  • fix serial dialing bug @jbenet
  • improved testing @chriscool @rht @jbenet
  • fixed domain resolving @luzifer
  • fix parsing of unwanted stdin @lgierth
  • added CORS handlers to gateway @NodeGuy
  • added ipfs daemon --unrestricted-api option @krl
  • general cleanup of dependencies

0.3.4 - 2015-05-10

  • fix ipns append bug @whyrusleeping
  • fix out of memory panic @whyrusleeping
  • add in expvar metrics @tv42
  • bitswap improvements @whyrusleeping
  • fix write-cache in blockstore @tv42
  • vendoring cleanup @cryptix
  • added launchctl plist for OSX @grncdr
  • improved Dockerfile, changed root and mount paths @ehd
  • improved pin ls output to show types @vitorbaptista

0.3.3 - 2015-04-28

This patch update fixes various issues, in particular:

  • windows support (0.3.0 had broken it)
  • commandline parses spaces correctly.
  • much improved commandline parsing by @AtnNn
  • improved dockerfile by @luzifer
  • add cmd cleanup by @wking
  • fix flatfs windows support by @tv42 and @gatesvp
  • test case improvements by @chriscool
  • ipns resolution timeout bug fix by @whyrusleeping
  • new cluster tests with iptb by @whyrusleeping
  • fix log callstack printing bug by @whyrusleeping
  • document bash completiong by @dylanPowers

0.3.2 - 2015-04-22

This patch update implements multicast dns as well as fxing a few test issues.

  • implment mdns peer discovery @whyrusleeping
  • fix mounting issues in sharness tests @chriscool

0.3.1 - 2015-04-21

This patch update fixes a few bugs:

  • harden shutdown logic by @torarnv
  • daemon locking fixes by @travisperson
  • don't re-add entire dirs by @whyrusleeping
  • tests now wait for graceful shutdown by @jbenet
  • default key size is now 2048 by @jbenet

0.3.0 - 2015-04-20

We've just released version 0.3.0, which contains many performance improvements, bugfixes, and new features. Perhaps the most noticeable change is moving block storage from leveldb to flat files in the filesystem.

What to expect:

  • much faster performance

  • Repo format 2

    • moved default location from ~/.go-ipfs -> ~/.ipfs
    • renamed lock filename daemon.lock -> repo.lock
    • now using a flat-file datastore for local blocks
  • Fixed lots of bugs

    • proper ipfs-path in various commands
    • fixed two pinning bugs (recursive pins)
    • increased yamux streams window (for speed)
    • increased bitswap workers (+ env var)
    • fixed memory leaks
    • ipfs add error returns
    • daemon exit bugfix
    • set proper UID and GID on fuse mounts
  • Gateway

    • Added support for HEAD requests
  • configuration

    • env var to turn off SO_REUSEPORT: IPFS_REUSEPORT=false
    • env var to increase bitswap workers: IPFS_BITSWAP_TASK_WORKERS=n
  • other

    • bash completion is now available
    • ipfs stats bw -- bandwidth meetering

And many more things.

0.2.3 - 2015-03-01

  • Alpha Release

2015-01-31:

  • bootstrap addresses now have .../ipfs/... in format config file Bootstrap field changed accordingly. users can upgrade cleanly with:

    ipfs bootstrap >boostrap_peers
    ipfs bootstrap rm --all
    <install new ipfs>
    <manually add .../ipfs/... to addrs in bootstrap_peers>
    ipfs bootstrap add <bootstrap_peers