IPFS (opens new window) is a new hypermedia distribution protocol, addressed by content and identities, aiming to make the web faster, safer, and more open. In these posts, we highlight some of the development that has happened in the past week. For anyone looking to get involved, follow the embedded hyperlinks, search the wealth of information on GitHub (opens new window) or join us on IRC (opens new window) (#ipfs on the Freenode network).

If you would like to get this update as an email, sign up for our weekly newsletter (opens new window)!

Here are some of the highlights for the time period from April 6th through April 25th (opens new window).

# Updates

# 0.4.0!

go-ipfs 0.4.0 (opens new window) has been released! Among the many changes are a revamped implementation of the IPFS communication protocols, increased performance, improvements to IPNS (the Interplanetary Naming System), many bugfixes, and lots of new features to make IPFS even more powerful.

See the blog (opens new window) for more details.

# Orbit

@haadcode (opens new window) upgraded all of his projects to use 0.4.0, got orbit-db (opens new window) and ipfs-log (opens new window) working in the browser, and improved Orbit's UX. As a result, Orbit is much faster and more stable than it was under 0.3! We now have working distributables for orbit-db (opens new window) and ipfs-log (opens new window) in the browser. They still require a local daemon to run to work but this will change when js-ipfs ships. @haadcode (opens new window) added some new features to Orbit: preview files directly in the chat with code highlighting, players for audio and video, and improved the files browsing functionality in general. You can now also copy the hash of a file to clipboard. It looks like this:

Orbit

Finally, @haadcode (opens new window) also created a simple JavaScript logging module called logplease (opens new window), which works in Node.js and browsers. logplease does two simple things: output log messages to the console and/or to a file (Node.js only) and display the log messages with nice colors. It was inspired by log4js (opens new window) and debug (opens new window).

# aegir (opens new window)

AEgir has been officially released. Formerly called dignified.js, this is our toolset for JavaScript modules, which cuts down on development time immensely by standardizing the process of testing, building, linting, releasing, and generally scaffolding out JS modules. It is now deployed over nearly all active JavaScript projects on IPFS. Check out the npm package (opens new window) or the github repo (opens new window).

We've also overhauled the community JavaScript guidelines (opens new window) to reflect this change, and to make them more accessible to new developers.

# go-libp2p and go-ipfs refactoring

We're modularizing go-libp2p, aiming at module parity with js-ipfs. This makes the codebase less daunting to newcomers, and makes maintenance and testing of everything much easier.

As part of this, @whyrusleeping (opens new window) removed over 9000 (yes, over 9000) lines of unused godeps dependencies from the go-ipfs repo. Its a good deal more manageable now, and we are getting ever closer to having a purely gx (opens new window) managed package.

# js-ipld

libp2p-cli

@dignifiedquire (opens new window) shipped an updated version of js-ipld (opens new window) which now conforms to the latest spec of IPLD (opens new window). In addition js-ipfs-ipld (opens new window) was created, which implements the building blocks to use IPLD in js-ipfs. The third package that was published is js-ipfs-cli (opens new window) which gives you a cli tool to interact and experiment with IPLD.

# ipfs-blob-store v1.0.0 released

One of the benefits that comes from the new Files API (opens new window) in 0.4.0, is that we can emulate any kind of file system expectations on top of IPFS, and by doing so, enable applications that use a file system, to use IPFS without any modification. One perfect example of that are all the applications that use a module that implements the abstract-blob-store (opens new window) interface, now with ipfs-blob-store (opens new window), with a simple npm install, you can swap out your current blob-store implementation by the IPFS one.

# js-ipfs-api now supports the Files API

On the same lines, js-ipfs-api now offers all the Files API calls through a convenient and easy to use library. You can find all of the function declarations on the js-ipfs-api docs (opens new window)

# Making js-ipfs and js-libp2p modules awesome

@JGAntunes (opens new window), @dignifiedquire (opens new window), @nginnever (opens new window), @diasdavid (opens new window), and @noffle (opens new window) have been working hard to bring the pantheon of js-ipfs modules (opens new window) up to snuff: detailed READMEs with examples and full API docs, as well as 100% test coverage. We made significant inroads last sprint on js-peer-id (opens new window), js-multiaddr (opens new window), js-peer-info (opens new window), js-ipfs-blocks (opens new window) and more! There are a lot more modules that still need good READMEs and docs, so dive in (opens new window) and give us a hand!

# go-ipfs and the Prometheus monitoring system

We've had Prometheus (opens new window) integrated with go-ipfs for some time already. In case you're unfamiliar, Prometheus is an open-source systems monitoring and alerting toolkit. It allows you to monitor diverse services, visualize the collected metrics in dashboards, and define rules for alerting. Together with the Grafana dashboard UI, it's the perfect monitoring system.

The scraping endpoint of go-ipfs is exposed at :5001/debug/metrics/prometheus (opens new window) by your go-ipfs daemon. Check Prometheus' Getting Started guide (opens new window) to try it out.

# go-ipfs and restricting dialing

go-ipfs has support for restricting peer connections to certain IP address ranges, by using the Swarm.AddrFilters config setting. The following config example illustrates how to exclude all IPv4 peers, and all IPv6 link-local peers.

// .ipfs/config
"Swarm": {
  "AddrFilters": [
    "/ip4/0.0.0.0/ipcidr/0",
    "/ip6/fe80::/ipcidr/64"
  ]
}

# Community

# Berkman Center

@jbenet (opens new window) and @nicola (opens new window) spoke about IPFS with fellows at the Berkman Center. They discussed the core motivations of the IPFS Project, how it works, the state of the implementations, and a wide array of issues IPFS tackles. The discussion was excellent, starting with important ethical problems present in the web today, going through critical features our web should exhibit to solve them, and ending with how to get there. We look forward to tighter collaboration between our communities. Thank you very much for having us!

# MIT Meetup

IPFS Meeting in Cambridge

We had the first ever IPFS meetup in Cambridge, at MIT. It was sponsored by Consensys (opens new window), and hosted by the MIT Bitcoin Club (opens new window). @jbenet (opens new window), @nicola (opens new window), and @CReckhow (opens new window) each gave talks. A full writeup will appear on the blog as soon as we have edited the videos and posted them on the IPFS YouTube channel. We'll let you know when that happens, here.

_Photo by @nicocesar_ (opens new window)._

# Peergos

Work on Peergos (opens new window), a decentralised, secure file storage, sharing and social network using IPFS, is progressing well; @ianopolous (opens new window) is close to getting a FUSE binding working. Throughput hasn't been as bad as he was expecting with all the encryption and erasure coding, and it's looking likely that it will end up being network IO bound, instead of CPU bound for non trivial writes.

# SpaceX Landing

Things are awesome and getting awesomer. Specifically, SpaceX landed a reusable Falcon 9 booster (opens new window), which puts us that much closer to having a human colony on Mars. When that happens, we're betting they'll be using IPFS.

# Content-Type of The Week

This week's Content-Type is the non-standard chemical/x-chemdraw. ChemDraw is a molecule editor first released in 1985, and still maintained as of today. We don't know which molecules were added to IPFS, but will do our best for IPFS to be around in 30 years just like ChemDraw is still around.

Every week we highlight a Content-Type that we've seen on the public HTTP-to-IPFS gateway at https://ipfs.io. If you're waiting to see one particularly interesting Content-Type in one of the next Weeklies, propose it by ipfs add -w'ing a file of that type, and requesting it from the public gateway: https://ipfs.io/ipfs/<hash>.

# Contributors

Across the entire IPFS GitHub organization, the following people have committed code, created issues, or made a comment on GitHub between April 6th (noon, GMT) and April 25th. We're autogenerating this list using this tool (opens new window) and this other tool (opens new window), so please let us know if your name isn't here.

This newsletter is also a community effort. If you have cool things to share for the next weekly, drop a comment about it in the next weekly sprint issue (opens new window)! The more people mention items they want to see in the weekly there, the easier it is to make this and send it out.

Thanks, and see you next week!

  • Richard Littauer

Submit feedback about this issue here (opens new window), or send us feedback about the IPFS Weekly in general (opens new window).