js-ipfs 0.23.0 released

by David Dias & Victor Bjelkholm on 2017-03-24

Today we’re happy to announce that we have released js-ipfs version 0.23.0.


  • DAG API (IPLD Support)
  • Interoperability with go-ipfs
  • Bootstrap nodes
  • Easier initialization
  • Datastore
  • New tutorials
  • jsipfs add --wrap-with-directory feature
  • Support for unixfs sharding


npm install --save ipfs@0.23.0

Full Details

✨ A new way API is born, welcome to .dag

The new DAG API (available through ipfs.dag) offers a new way to create and operate over any MerkleGraph, today it has support for the IPFS MerkleDAG (referenced as dag-cbor), the new dag-cbor (which lets you drop json into IPFS seamlessly) and a preview of Ethereum.

You can learn how to use it through: - docs - examples - video running through the demos

If you are new to the Merkle Forest, make sure to watch @jbenet’s talk “Enter the Merkle Forest”

πŸ™ŒπŸ½ Interoperability with go-ipfs is here!

This took us more time than what we had initially expected, however, now it is a thing of the past, you can dial to a go-ipfs node and exchange files without going through complicated set ups, it just worksβ„’

If you would like to know more about the issue we faced, you can find more info here: “Stream Muxing issues between go-ipfs and js-ipfs are a thing of the past”

Note: Interop is only fully available with go-ipfs 0.4.7 and onwards, if you haven’t updated yet, please do so by visiting http://dist.ipfs.io/.

🌍 js-ipfs will now also bootstrap with bootstrap nodes as well

Same way that go-ipfs does, now your jsipfs daemon will bootstrap itself with the bootstraper nodes. This was easy once we had the Stream Muxing figured out.

> jsipfs swarm peers

⚑️ Starting an IPFS instance is easier than ever

We’ve heard you, starting an ipfs instance was cumbersome 3 step process, but not anymore!

Now, all you need to do to start an instance is:

const IPFS = require('ipfs')
const node = new IPFS()

node.on('start', () => {
  // Your node is now ready to use \o/

That’s it! See more Usage examples in the README

πŸ’Ύ Datastore is here!

We’ve migrated away from pull-blob-store/blob-store to datastore, the storage interface that is used in go-ipfs. This was a requirement towards implementing the DHT on js-ipfs.

πŸ‘©πŸ½β€πŸ« New tutorial! Transfer files between browser and desktop nodes

We’ve build a new Tutorial in how to use js-ipfs that explain how to interact with other nodes, from connecting, discovering and exchanging files. The tutorial is the most bare bones possible (i.e no frameworks) so that it focus on IPFS.

Find this tutorial at our examples folder

πŸ‘πŸ½ jsipfs add –wrap-with-directory is now a feature!

Thanks to @harshjv, now you can add files wrapped in a directory just like go-ipfs. Example:

> jsipfs add <filename> --wrap-with-directory
> jsipfs add <filename -w # alias

Exciting future (soonβ„’)

Here is a quick list of things that we will be heads down after this release

  • Circuit Relay - We are building Circuit Relay in order to let browser nodes to connect to any node in the network (e.g when two nodes do not have a common transport). Track the development and spec here – https://github.com/libp2p/specs/tree/master/relay, https://github.com/libp2p/js-libp2p-circuit/pull/1.
  • DHT - The DHT is the second last piece that needs to be built (the first being relay) in order to give browser nodes the ability to discover the location of content by themselves. Track dev at the repo https://github.com/libp2p/js-libp2p-dht
  • Parity to IPFS - We want IPFS to access the Ethereum blockchain on demand (i.e: Without having to constantly transferring the blocks over), for that, the EthereumJS team had a brilliant idea of building a storage backend for js-ipfs that uses Parity, so that we can ‘read’ blocks from the blockchain. Track at: https://github.com/ipfs/js-ipfs/issues/763
  • Torrent support - We started working in getting Torrent files supported in js-ipfs (same way we do for Ethereum). This will give the ability to fetch data from the BitTorrent network through js-ipfs as well. Track progress here: https://github.com/ipfs/js-ipfs/issues/779