<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>IPFS</title><link href="/" rel="alternate"></link><link href="/rss.xml" rel="self"></link><id>/</id><updated>2016-06-01T00:00:00+02:00</updated><entry><title>IPFS distributions</title><link href="/blog/17-distributions" rel="alternate"></link><published>2016-06-01T00:00:00+02:00</published><author><name>Richard Littauer</name></author><id>tag:,2016-06-01:blog/17-distributions</id><summary type="html">&lt;p&gt;&lt;a href="https://dist.ipfs.io/"&gt;&lt;img alt="" src="/blog/17-distributions/17-screenshot.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dist.ipfs.io/"&gt;dist.ipfs.io&lt;/a&gt; is the new distributions page for IPFS. This is the new one-stop-shop for finding and downloading all official binaries that the IPFS Team produces.&lt;/p&gt;
&lt;h2 id="the-ipfs-distributions-website"&gt;The IPFS Distributions Website&lt;/h2&gt;
&lt;p&gt;The distributions website itself is served by, hosted, and distributed through IPFS. The website assets and all of the binaries form one large IPFS content graph. This means that you can view and use this website through any IPFS node, even your own local ipfs node. All you need to do is to run an IPFS daemon and direct your browser to http://localhost:8080/ipns/dist.ipfs.io. Of course, you'll need to be online and connected to the internet, so you can find other ipfs nodes that have this website.&lt;/p&gt;
&lt;h3 id="download-deduplication"&gt;Download Deduplication&lt;/h3&gt;
&lt;p&gt;If you download files from dist.ipfs.io using your local IPFS node, future downloads &lt;strong&gt;may be&lt;/strong&gt; much faster. When you click to download a file, your browser will ask to download it from your local IPFS node. In turn, your IPFS node will fetch the relevant content from other nodes in the network, and return it to your browser. Your browser will place the file in your Downloads folder, or wherever you directed it to.&lt;/p&gt;
&lt;p&gt;However, once your local IPFS node has fetched the content, it will cache it locally for some time. This makes subsequent downloads of the exact same content instantaneous! Your browser asks the IPFS node for the content; the node already has it and simply returns it, without ever having to connect to other nodes. This also means that if other IPFS nodes in your local area network try to download the file, they may be able to fetch it from your node. Once you have the content locally, this can even work while disconnected from the internet!&lt;/p&gt;
&lt;p&gt;It may also make downloading &lt;strong&gt;new&lt;/strong&gt; versions much faster, because different versions of large binary files often have lots of duplicated data. IPFS represents files as a Merkle DAG (a datastructure similar to a &lt;a href="https://en.wikipedia.org/wiki/Merkle_tree"&gt;merkle tree&lt;/a&gt;), much like Git or BitTorrent. Unlike them, when IPFS imports files, it chunks them to deduplicate similar data within single files. So when you need to download a new version, you only download the parts that are new or different - this can make your future downloads faster!&lt;/p&gt;
&lt;h2 id="project-details"&gt;Project details&lt;/h2&gt;
&lt;p&gt;Every distribution has a section, which includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The distribution name and a short description;&lt;/li&gt;
&lt;li&gt;The current version number and release date;&lt;/li&gt;
&lt;li&gt;The software license (usually MIT);&lt;/li&gt;
&lt;li&gt;A download button that detects your platform and automatically suggests the appropriate distribution for you;&lt;/li&gt;
&lt;li&gt;A grid with download links for all supported platforms (operating system and architectures);&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;Changelog&lt;/code&gt;, a link to a summary of all version changes;&lt;/li&gt;
&lt;li&gt;An &lt;code&gt;All Versions&lt;/code&gt;, a link to view and download previous versions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;code&gt;All Versions&lt;/code&gt; link on each distribution shows directory listings for all the available versions, and a &lt;code&gt;versions&lt;/code&gt; file (&lt;a href="https://dist.ipfs.io/go-ipfs/versions"&gt;example&lt;/a&gt;). This file can be used by tools, such as &lt;a href="https://dist.ipfs.io/#ipfs-update"&gt;ipfs-update&lt;/a&gt;, to find all the available versions and download the latest.&lt;/p&gt;
&lt;p&gt;The directory listing of each version (&lt;a href="https://dist.ipfs.io/go-ipfs/v0.3.11"&gt;example&lt;/a&gt;) has all the platform archives (&lt;code&gt;.zip&lt;/code&gt; or &lt;code&gt;.tar.gz&lt;/code&gt;), a &lt;code&gt;README.md&lt;/code&gt; and a &lt;code&gt;dist.json&lt;/code&gt; which describe the release for humans and machines. It is meant to be easily consumed and used by tools.&lt;/p&gt;
&lt;p&gt;The site is also used directly by &lt;a href="https://github.com/ipfs/ipfs-update"&gt;&lt;code&gt;ipfs-update&lt;/code&gt;&lt;/a&gt; to update IPFS.&lt;/p&gt;
&lt;h2 id="project-prerequisites"&gt;Project Prerequisites&lt;/h2&gt;
&lt;p&gt;In order to be added to the distributions page, a product must:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Originate from the IFPS community;&lt;/li&gt;
&lt;li&gt;Have high-quality UX and documentation;&lt;/li&gt;
&lt;li&gt;Be well maintained and active.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you think that a product should be there that isn't, get in touch.&lt;/p&gt;
&lt;h2 id="future-plans"&gt;Future Plans&lt;/h2&gt;
&lt;p&gt;In the future, we hope to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enable code signing, for progress on this subject you can check this &lt;a href="https://github.com/ipfs/distributions/pull/51"&gt;pull request&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Enable closer integration with package managers.&lt;/li&gt;
&lt;li&gt;Add more products.&lt;/li&gt;
&lt;li&gt;Host more screenshots of the tools directly in the Distributions page.&lt;/li&gt;
&lt;li&gt;Import binaries more intelligently in order to enhance change of deduplication.&lt;/li&gt;
&lt;li&gt;Add the software license (usually MIT) to each distribution.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="contribute"&gt;Contribute&lt;/h2&gt;
&lt;p&gt;We welcome any and all sorts of contributions! File issues or send us patches at &lt;a href="https://github.com/ipfs/distributions"&gt;ipfs/distributions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Last but not least, a huge thank you to &lt;a href="https://github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt; for his amazing work with the Dist page. None of this would be possible without him.&lt;/p&gt;</summary></entry><entry><title>IPFS Weekly 10</title><link href="/blog/16-ipfs-weekly-10" rel="alternate"></link><published>2016-05-08T00:00:00+02:00</published><author><name>Richard Littauer</name></author><id>tag:,2016-05-08:blog/16-ipfs-weekly-10</id><summary type="html">&lt;p&gt;&lt;a href="https://ipfs.io/"&gt;IPFS&lt;/a&gt; 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 &lt;a href="https://github.com/ipfs"&gt;GitHub&lt;/a&gt; or join us on &lt;a href="https://webchat.freenode.net/?channels=ipfs"&gt;IRC&lt;/a&gt; (#ipfs on the Freenode network).&lt;/p&gt;
&lt;p&gt;If you would like to get this update as an email, sign up for our &lt;a href="https://tinyletter.com/ipfsweekly"&gt;weekly newsletter&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Here are some of the highlights for the time period from &lt;a href="https://github.com/ipfs/pm/issues/101"&gt;April 6th through April 25th&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="updates"&gt;Updates&lt;/h2&gt;
&lt;h3 id="040"&gt;0.4.0!&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://dist.ipfs.io/#go-ipfs"&gt;go-ipfs 0.4.0&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;See the &lt;a href="http://blog.ipfs.io/14-ipfs-0-4-0-released/"&gt;blog&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h3 id="orbit"&gt;Orbit&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/haadcode"&gt;@haadcode&lt;/a&gt; upgraded all of his projects to use 0.4.0, got &lt;a href="https://github.com/haadcode/orbit-db"&gt;orbit-db&lt;/a&gt; and &lt;a href="https://github.com/haadcode/ipfs-log"&gt;ipfs-log&lt;/a&gt; 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 &lt;a href="https://github.com/haadcode/orbit-db"&gt;orbit-db&lt;/a&gt; and &lt;a href="https://github.com/haadcode/ipfs-log"&gt;ipfs-log&lt;/a&gt; in the browser. They still require a local daemon to run to work but this will change when js-ipfs ships. &lt;a href="https://github.com/haadcode"&gt;@haadcode&lt;/a&gt; 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:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Orbit" src="/blog/16-ipfs-weekly-10/010_orbit.png" /&gt;&lt;/p&gt;
&lt;p&gt;Finally, &lt;a href="https://github.com/haadcode"&gt;@haadcode&lt;/a&gt; also created a simple JavaScript logging module called &lt;a href="https://github.com/haadcode/logplease"&gt;logplease&lt;/a&gt;, 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 &lt;a href="https://github.com/stritti/log4js"&gt;log4js&lt;/a&gt; and &lt;a href="https://github.com/visionmedia/debug"&gt;debug&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="aegir"&gt;&lt;a href="https://github.com/dignifiedquire/aegir"&gt;aegir&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;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 &lt;a href="https://npmjs.org/aegir"&gt;npm package&lt;/a&gt; or the &lt;a href="https://github.com/dignifiedquire/aegir"&gt;github repo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We've also overhauled the community &lt;a href="https://github.com/ipfs/community/blob/master/js-project-guidelines.md"&gt;JavaScript guidelines&lt;/a&gt; to reflect this change, and to make them more accessible to new developers.&lt;/p&gt;
&lt;h3 id="go-libp2p-and-go-ipfs-refactoring"&gt;go-libp2p and go-ipfs refactoring&lt;/h3&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;As part of this, &lt;a href="https://github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; 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 &lt;a href="https://github.com/whyrusleeping/gx"&gt;gx&lt;/a&gt; managed package.&lt;/p&gt;
&lt;h3 id="js-ipld"&gt;js-ipld&lt;/h3&gt;
&lt;p&gt;&lt;img alt="libp2p-cli" src="/blog/16-ipfs-weekly-10/010_js-libp2p.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt; shipped an updated version of &lt;a href="https://npmjs.org/ipld"&gt;js-ipld&lt;/a&gt; which now conforms to the &lt;a href="https://github.com/ipfs/specs/tree/master/ipld"&gt;latest spec of IPLD&lt;/a&gt;. In addition &lt;a href="https://npmjs.org/ipfs-ipld"&gt;js-ipfs-ipld&lt;/a&gt; was created, which implements the building blocks to use IPLD in js-ipfs. The third package that was published is &lt;a href="https://npmjs.org/ipld-cli"&gt;js-ipfs-cli&lt;/a&gt; which gives you a cli tool to interact and experiment with IPLD.&lt;/p&gt;
&lt;h3 id="ipfs-blob-store-v100-released"&gt;&lt;code&gt;ipfs-blob-store&lt;/code&gt; v1.0.0 released&lt;/h3&gt;
&lt;p&gt;One of the benefits that comes from the new &lt;a href="https://github.com/ipfs/js-ipfs/issues/60"&gt;Files API&lt;/a&gt; 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 &lt;a href="https://github.com/maxogden/abstract-blob-store"&gt;abstract-blob-store&lt;/a&gt; interface, now with &lt;a href="https://github.com/ipfs/ipfs-blob-store"&gt;ipfs-blob-store&lt;/a&gt;, with a simple &lt;code&gt;npm install&lt;/code&gt;, you can swap out your current blob-store implementation by the IPFS one.&lt;/p&gt;
&lt;h3 id="js-ipfs-api-now-supports-the-files-api"&gt;&lt;code&gt;js-ipfs-api&lt;/code&gt; now supports the Files API&lt;/h3&gt;
&lt;p&gt;On the same lines, &lt;code&gt;js-ipfs-api&lt;/code&gt; 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 &lt;a href="https://github.com/ipfs/js-ipfs-api/blob/master/API.md#files"&gt;&lt;code&gt;js-ipfs-api&lt;/code&gt; docs&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="making-js-ipfs-and-js-libp2p-modules-awesome"&gt;Making js-ipfs and js-libp2p modules awesome&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/JGAntunes"&gt;@JGAntunes&lt;/a&gt;, &lt;a href="https://github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt;, &lt;a href="https://github.com/nginnever"&gt;@nginnever&lt;/a&gt;, &lt;a href="https://github.com/diasdavid"&gt;@diasdavid&lt;/a&gt;, and &lt;a href="https://github.com/noffle"&gt;@noffle&lt;/a&gt; have been working hard to bring &lt;a href="https://github.com/ipfs/js-ipfs/issues?utf8=%E2%9C%93&amp;amp;q=is%3Aissue+coverage+dignified"&gt;the pantheon of js-ipfs modules&lt;/a&gt; up to snuff: detailed READMEs with examples and full API docs, as well as 100% test coverage. We made significant inroads last sprint on &lt;a href="https://github.com/diasdavid/js-peer-id"&gt;js-peer-id&lt;/a&gt;, &lt;a href="https://github.com/jbenet/js-multiaddr"&gt;js-multiaddr&lt;/a&gt;, &lt;a href="https://github.com/diasdavid/js-peer-info"&gt;js-peer-info&lt;/a&gt;, &lt;a href="https://github.com/ipfs/js-ipfs-blocks/"&gt;js-ipfs-blocks&lt;/a&gt; and more! There are a lot more modules that still need good READMEs and docs, so &lt;a href="https://github.com/ipfs/js-ipfs/issues?utf8=%E2%9C%93&amp;amp;q=is%3Aissue+coverage+dignified+is%3Aopen"&gt;dive in&lt;/a&gt; and give us a hand!&lt;/p&gt;
&lt;h3 id="go-ipfs-and-the-prometheus-monitoring-system"&gt;go-ipfs and the Prometheus monitoring system&lt;/h3&gt;
&lt;p&gt;We've had &lt;a href="https://prometheus.io"&gt;Prometheus&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;The scraping endpoint of go-ipfs is exposed at &lt;a href="http://localhost:5001/debug/metrics/prometheus"&gt;:5001/debug/metrics/prometheus&lt;/a&gt; by your go-ipfs daemon. Check Prometheus' &lt;a href="https://prometheus.io/docs/introduction/getting_started/"&gt;Getting Started guide&lt;/a&gt; to try it out.&lt;/p&gt;
&lt;h3 id="go-ipfs-and-restricting-dialing"&gt;go-ipfs and restricting dialing&lt;/h3&gt;
&lt;p&gt;go-ipfs has support for restricting peer connections to certain IP address ranges, by using the &lt;code&gt;Swarm.AddrFilters&lt;/code&gt; config setting. The following config example illustrates how to exclude all IPv4 peers, and all IPv6 link-local peers.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt; &lt;span class="err"&gt;.ipfs/config&lt;/span&gt;
&lt;span class="s2"&gt;&amp;quot;Swarm&amp;quot;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;quot;AddrFilters&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;/ip4/0.0.0.0/ipcidr/0&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;/ip6/fe80::/ipcidr/64&amp;quot;&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h2 id="community"&gt;Community&lt;/h2&gt;
&lt;h3 id="berkman-center"&gt;Berkman Center&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://github.com/jbenet"&gt;@jbenet&lt;/a&gt; and &lt;a href="https://github.com/nicola"&gt;@nicola&lt;/a&gt; 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!&lt;/p&gt;
&lt;h3 id="mit-meetup"&gt;MIT Meetup&lt;/h3&gt;
&lt;p&gt;&lt;img alt="IPFS Meeting in Cambridge" src="/blog/16-ipfs-weekly-10/010_ipfs-boston.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;We had the first ever IPFS meetup in Cambridge, at MIT. It was sponsored by &lt;a href="https://consensys.net"&gt;Consensys&lt;/a&gt;, and hosted by the &lt;a href="http://bitcoin.mit.edu/"&gt;MIT Bitcoin Club&lt;/a&gt;. &lt;a href="https://github.com/jbenet"&gt;@jbenet&lt;/a&gt;, &lt;a href="https://github.com/nicola"&gt;@nicola&lt;/a&gt;, and &lt;a href="https://twitter.com/CReckhow"&gt;@CReckhow&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Photo by &lt;a href="https://twitter.com/nicocesar_"&gt;@nicocesar_&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id="peergos"&gt;Peergos&lt;/h3&gt;
&lt;p&gt;Work on &lt;a href="https://github.com/ianopolous/Peergos"&gt;Peergos&lt;/a&gt;, a decentralised, secure file storage, sharing and social network using IPFS, is progressing well; &lt;a href="https://github.com/ianopolous"&gt;@ianopolous&lt;/a&gt; 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.&lt;/p&gt;
&lt;h3 id="spacex-landing"&gt;SpaceX Landing&lt;/h3&gt;
&lt;p&gt;Things are awesome and getting awesomer. Specifically, SpaceX &lt;a href="http://www.space.com/32517-spacex-sticks-rocket-landing-sea-dragon-launch.html"&gt;landed a reusable Falcon 9 booster&lt;/a&gt;, which puts us that much closer to having a human colony on Mars. When that happens, we're betting they'll be using IPFS.&lt;/p&gt;
&lt;h3 id="content-type-of-the-week"&gt;Content-Type of The Week&lt;/h3&gt;
&lt;p&gt;This week's Content-Type is the non-standard &lt;code&gt;chemical/x-chemdraw&lt;/code&gt;. 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.&lt;/p&gt;
&lt;p&gt;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 &lt;code&gt;ipfs add -w&lt;/code&gt;'ing a file of that type, and requesting it from the public gateway: &lt;code&gt;https://ipfs.io/ipfs/&amp;lt;hash&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="contributors"&gt;Contributors&lt;/h2&gt;
&lt;p&gt;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 &lt;a href="https://github.com/ipfs/weekly/blob/master/tools/get_commits.py"&gt;this tool&lt;/a&gt; and &lt;a href="https://github.com/richardlitt/name-your-contributors"&gt;this other tool&lt;/a&gt;, so please let us know if your name isn't here.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/AdamStone"&gt;@AdamStone&lt;/a&gt; (Adam Stone)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/amstocker"&gt;@amstocker&lt;/a&gt; (Andrew Stocker)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ARezaK"&gt;@ARezaK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/atommixz"&gt;@atommixz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/atondwal"&gt;@atondwal&lt;/a&gt; (Anish Tondwalkar)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bpcamac"&gt;@bpcamac&lt;/a&gt; (Brenton Camac)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/c-johnson"&gt;@c-johnson&lt;/a&gt; (Christopher Johnson)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/chriscool"&gt;@chriscool&lt;/a&gt; (Christian Couder)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/chrisvoncsefalvay"&gt;@chrisvoncsefalvay&lt;/a&gt; (Chris)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/chungy"&gt;@chungy&lt;/a&gt; (Mike Swanson)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ComSecNinja"&gt;@ComSecNinja&lt;/a&gt; (Timo Virkkunen)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/cpacia"&gt;@cpacia&lt;/a&gt; (Chris Pacia)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/creckhow"&gt;@creckhow&lt;/a&gt; (Carolyn Reckhow)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/cusspvz"&gt;@cusspvz&lt;/a&gt; (José Moreira)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; (David Dias)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt; (Friedel Ziegelmayer)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/eboto"&gt;@eboto&lt;/a&gt; (Erem Boto)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/edrex"&gt;@edrex&lt;/a&gt; (Eric Drechsel)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/EliasGabrielsson"&gt;@EliasGabrielsson&lt;/a&gt; (Elias Gabrielsson)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/eminence"&gt;@eminence&lt;/a&gt; (Andrew Chin)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fazo96"&gt;@fazo96&lt;/a&gt; (Enrico Fasoli)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/felixonmars"&gt;@felixonmars&lt;/a&gt; (Felix Yan)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/FrauBienenstich"&gt;@FrauBienenstich&lt;/a&gt; (Susanne Dewein)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fzzr-"&gt;@fzzr-&lt;/a&gt; (Alexander "FIZZΞR" Koz.)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/GitCop"&gt;@GitCop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/greenkeeperio-bot"&gt;@greenkeeperio-bot&lt;/a&gt; (Greenkeeper)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/groksie"&gt;@groksie&lt;/a&gt; (James McFarland)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/haadcode"&gt;@haadcode&lt;/a&gt; (Haad)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hermanjunge"&gt;@hermanjunge&lt;/a&gt; (Herman Junge)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hutenosa"&gt;@hutenosa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ianopolous"&gt;@ianopolous&lt;/a&gt; (Ian Preston)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ikreymer"&gt;@ikreymer&lt;/a&gt; (Ilya Kreymer)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ingokeck"&gt;@ingokeck&lt;/a&gt; (Ingo Keck)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/interfect"&gt;@interfect&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jbenet"&gt;@jbenet&lt;/a&gt; (Juan Benet)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jedahan"&gt;@jedahan&lt;/a&gt; (Jonathan Dahan)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jefft0"&gt;@jefft0&lt;/a&gt; (Jeff Thompson)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jerodsanto"&gt;@jerodsanto&lt;/a&gt; (Jerod Santo)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/JGAntunes"&gt;@JGAntunes&lt;/a&gt; (João Antunes)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kbtombul"&gt;@kbtombul&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kevina"&gt;@kevina&lt;/a&gt; (Kevin Atkinson)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kevinmartinmauro"&gt;@kevinmartinmauro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/krl"&gt;@krl&lt;/a&gt; (kristoffer)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Kubuxu"&gt;@Kubuxu&lt;/a&gt; (Jakub Sztandera)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kyledrake"&gt;@kyledrake&lt;/a&gt; (Kyle Drake)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lgierth"&gt;@lgierth&lt;/a&gt; (Lars Gierth)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lidel"&gt;@lidel&lt;/a&gt; (Marcin Rataj)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/machawk1"&gt;@machawk1&lt;/a&gt; (Mat Kelly)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mariusdarila"&gt;@mariusdarila&lt;/a&gt; (Marius Darila)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/matshenricson"&gt;@matshenricson&lt;/a&gt; (Mats Henricson)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mheiber"&gt;@mheiber&lt;/a&gt; (mheiber)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/MichaelMure"&gt;@MichaelMure&lt;/a&gt; (Michael Muré)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/micxjo"&gt;@micxjo&lt;/a&gt; (Micxjo Funkcio)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mildred"&gt;@mildred&lt;/a&gt; (Mildred Ki'Lya)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mitar"&gt;@mitar&lt;/a&gt; (Mitar)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mitzip"&gt;@mitzip&lt;/a&gt; (mitzip)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mrshu"&gt;@mrshu&lt;/a&gt; (Marek Šuppa)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/NDuma"&gt;@NDuma&lt;/a&gt; (NDuma)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/neko259"&gt;@neko259&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nginnever"&gt;@nginnever&lt;/a&gt; (Nathan Ginnever)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nicola"&gt;@nicola&lt;/a&gt; (Nicola Greco)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/noffle"&gt;@noffle&lt;/a&gt; (Stephen Whitmore)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pfista"&gt;@pfista&lt;/a&gt; (michael)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Piruzzolo"&gt;@Piruzzolo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/plungu"&gt;@plungu&lt;/a&gt; (Paul Lungu)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pokeball99"&gt;@pokeball99&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rht"&gt;@rht&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; (Richard Littauer)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SCBuergel"&gt;@SCBuergel&lt;/a&gt; (Sebastian C. Bürgel)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SilverWingedSeraph"&gt;@SilverWingedSeraph&lt;/a&gt; (Leo Tindall)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sivachandran"&gt;@sivachandran&lt;/a&gt; (Sivachandran)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/slang800"&gt;@slang800&lt;/a&gt; (Sean Lang)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Stebalien"&gt;@Stebalien&lt;/a&gt; (Steven Allen)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sterpe"&gt;@sterpe&lt;/a&gt; (Steve Terpe)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/stevenh512"&gt;@stevenh512&lt;/a&gt; (Steven Hancock)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/TheNain38"&gt;@TheNain38&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/thomas-gardner"&gt;@thomas-gardner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/traverseda"&gt;@traverseda&lt;/a&gt; (Alex Davies)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/upfs"&gt;@upfs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vijayee"&gt;@vijayee&lt;/a&gt; (Vijayee Kulkaa)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vitzli"&gt;@vitzli&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; (Jeromy Johnson)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/wzhd"&gt;@wzhd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xicombd"&gt;@xicombd&lt;/a&gt; (Francisco Baio Dias)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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 &lt;a href="https://github.com/ipfs/weekly/issues/39"&gt;next weekly sprint issue&lt;/a&gt;! The more people mention items they want to see in the weekly there, the easier it is to make this and send it out.&lt;/p&gt;
&lt;p&gt;Thanks, and see you next week!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Richard Littauer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Submit feedback about this issue &lt;a href="https://github.com/ipfs/weekly/issues/35"&gt;here&lt;/a&gt;, or send us &lt;a href="https://github.com/ipfs/weekly/issues/7"&gt;feedback about the IPFS Weekly in general&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</summary></entry><entry><title>IPFS Weekly 9</title><link href="/blog/15-ipfs-weekly-9" rel="alternate"></link><published>2016-04-20T00:00:00+02:00</published><author><name>Richard Littauer</name></author><id>tag:,2016-04-20:blog/15-ipfs-weekly-9</id><summary type="html">&lt;p&gt;&lt;a href="//ipfs.io/"&gt;IPFS&lt;/a&gt; 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 &lt;a href="//github.com/ipfs"&gt;GitHub&lt;/a&gt; or join us on &lt;a href="//webchat.freenode.net/?channels=ipfs"&gt;IRC&lt;/a&gt; (#ipfs on the Freenode network).&lt;/p&gt;
&lt;p&gt;If you would like to get this update as an email, sign up for our &lt;a href="//tinyletter.com/ipfsweekly"&gt;weekly newsletter&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Here are some of the highlights for the &lt;a href="//github.com/ipfs/pm/issues/98"&gt;March 21st through March 28th&lt;/a&gt; sprint:&lt;/p&gt;
&lt;h2 id="updates"&gt;Updates&lt;/h2&gt;
&lt;h3 id="package-managers"&gt;Package Managers&lt;/h3&gt;
&lt;p&gt;Package managers have been a large topic of discussion recently. Mostly, this is because of an issue with an author of some heavily used &lt;a href="https://npmjs.com"&gt;npm&lt;/a&gt; packages unpublishing all of his modules simultaneously. One of these was &lt;code&gt;left-pad&lt;/code&gt;, which was used by thousands of builds globally, all of which broke when the package was removed. A great writeup of what happened is on the &lt;a href="http://blog.npmjs.org/post/141577284765/kik-left-pad-and-npm"&gt;npm.js blog here&lt;/a&gt;; they took this very seriously, and shortly after &lt;a href="http://blog.npmjs.org/post/141905368000/changes-to-npms-unpublish-policy"&gt;changed their unpublish policy&lt;/a&gt; as a direct result.&lt;/p&gt;
&lt;p&gt;Many people jumped to IPFS as a possible solution to this problem. With a permanent filesystem, unpublishing wouldn't be possible. Here's one post titled &lt;a href="http://amreldib.com/blog/HowToUseIpfsToFixNpm"&gt;How to use IPFS to fix npm&lt;/a&gt;; here's &lt;a href="https://github.com/ipmjs/ipmjs/issues/9"&gt;an issue&lt;/a&gt; on a new GitHub organization, ipmjs, trying to find consensus on how to fix npm using a permanent storage system; here's an npm module, &lt;a href="https://www.npmjs.com/package/cowpen"&gt;cowpen&lt;/a&gt; that publishes modules directly to IPFS; here's &lt;a href="https://github.com/mhhf/spore"&gt;another decentralized package manager&lt;/a&gt; that sprung up using IPFS and Ethereum.&lt;/p&gt;
&lt;p&gt;The IPFS community has been thinking about immutable package managers for a long time. IPFS itself began as an immutable package manager, and it is built to make writing them much easier. &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; has a project called &lt;code&gt;registry-mirror&lt;/code&gt;, which allows you to run an npm registry locally that is backed by packages retrieved from IPFS instead of NPM directly. He's written about a presentation he gave for it, &lt;a href="http://blog.daviddias.me/2015/12/08/stellar-module-management"&gt;here&lt;/a&gt;; the source code is &lt;a href="https://github.com/diasdavid/registry-mirror"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On a similar note, &lt;a href="//github.com/whyrusleeping/gx"&gt;gx&lt;/a&gt;, a package manager for Go made by &lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt;, was also mentioned in a lot of the discussions about npm and package managers, especially on &lt;a href="https://news.ycombinator.com/item?id=11347163"&gt;Hacker News&lt;/a&gt;. In the past two weeks, the project went from 50 to 1000 stars, so people are clearly interested in this now.&lt;/p&gt;
&lt;p&gt;The discussion about how to best use IPFS as a package manager is ongoing. Jump on GitHub if you have something to say; we're listening in the &lt;a href="https://github.com/ipfs/faq/issues"&gt;FAQ&lt;/a&gt; and in &lt;a href="https://github.com/ipfs/notes/issues"&gt;the notes repo&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="dns-outage"&gt;DNS outage&lt;/h3&gt;
&lt;p&gt;We're using DigitalOcean to provide ipfs.io DNS. On Tuesday, March 24th, DigitalOcean DNS was hit by a &lt;a href="https://www.digitalocean.com/company/blog/update-on-the-march-24-2016-dns-outage/"&gt;severe outage&lt;/a&gt; lasting hours, which took the public gateway at ipfs.io down. We switched to &lt;a href="https://dnsimple.com"&gt;DNSimple&lt;/a&gt; in an ad-hoc fashion and brought ipfs.io back while DigitalOcean was still down, but this incident obviously hit us on the wrong foot a bit. We'll be working to never get taken down this way again. It's HARD not to depend on any single points of failure. Here's a few things we'll do:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;codify DNS zones, and tools to upload them to DNS providers&lt;/li&gt;
&lt;li&gt;keep one or two backup DNS providers&lt;/li&gt;
&lt;li&gt;update our monitoring and failover procedures&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We'll post a more detailed post-mortem on our blog in the next few days.&lt;/p&gt;
&lt;h3 id="captainlog"&gt;Captain.log&lt;/h3&gt;
&lt;h4 id="aye-you-might-want-to-check-the-new-js-ipfs-captainlog-entry-matey"&gt;Aye, you might want to check the new js-ipfs Captain.log entry, matey!&lt;/h4&gt;
&lt;p&gt;Following &lt;a href="https://github.com/ipfs/js-ipfs/blob/master/ROADMAP.md#milestone-1---js-ipfs-on-the-browser"&gt;js-ipfs roadmap&lt;/a&gt;, we’re close™ to having a workable js-ipfs version that can be used in the browser and in Node.js. This will mark a very important milestone on the IPFS project and enable a whole set of new distributed web applications to be possible. If you want to be part of this effort, check out our &lt;a href="https://github.com/ipfs/js-ipfs/issues/30#issuecomment-205884015"&gt;Captain.log&lt;/a&gt; entry to get a full update and a list of tasks you can contribute to.&lt;/p&gt;
&lt;h3 id="orbit"&gt;&lt;a href="//github.com/haadcode/orbit"&gt;Orbit&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Orbit" src="/blog/15-ipfs-weekly-9/009_orbit.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="//github.com/haadcode"&gt;@haadcode&lt;/a&gt; has been working on improvements to &lt;a href="https://github.com/haadcode/orbit-db"&gt;orbit-db&lt;/a&gt;, &lt;a href="https://github.com/haadcode/ipfs-log/"&gt;ipfs-log&lt;/a&gt; and &lt;a href="https://github.com/haadcode/orbit"&gt;Orbit&lt;/a&gt;. The message history fetching is now more stable and the UI feedback for loading messages is fixed. All this work will improve the user experience of Orbit.&lt;/p&gt;
&lt;h3 id="js-ipfs-init"&gt;js-ipfs-init&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;js-ipfs init&lt;/code&gt; works! &lt;a href="//github.com/noffle"&gt;@noffle&lt;/a&gt; finished the remaining pieces this week, including CLI usage. This included a handful of &lt;a href="https://github.com/ipfs/js-ipfs/issue/91"&gt;auxiliary&lt;/a&gt; &lt;a href="https://github.com/ipfs/js-ipfs/issue/96"&gt;PRs&lt;/a&gt; that cascaded out of that work. This makes the &lt;code&gt;js-ipfs&lt;/code&gt; init process produce IPFS repos that are compatible with go-ipfs'.&lt;/p&gt;
&lt;h4 id="dictionary-support-for-the-zlib-javascript-implementation-pako"&gt;Dictionary support for the zlib JavaScript Implementation, &lt;a href="https://github.com/nodeca/pako"&gt;&lt;code&gt;pako&lt;/code&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;One of the significant contributions made this week was the addition of 'dictionary' support for &lt;code&gt;zlib&lt;/code&gt; JavaScript implementation, &lt;code&gt;pako&lt;/code&gt;. With this contribution, we are able to have a complete implementation of SPDY 3.1's framing layer running in the browser, the default stream muxing library used in IPFS. You can find more about this contribution in the following issue and PR discussions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/nodeca/pako/issues/69&lt;/li&gt;
&lt;li&gt;https://github.com/diasdavid/js-libp2p-spdy/pull/6&lt;/li&gt;
&lt;li&gt;https://github.com/nodeca/pako/pull/77&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="go-ipfs"&gt;&lt;a href="//github.com/ipfs/go-ipfs"&gt;go-ipfs&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; wrote a tool to move content from 0.4.0 to 0.3.11 (see &lt;a href="https://github.com/whyrusleeping/levart-emit"&gt;levart-emit&lt;/a&gt;). He also discovered a file descriptor leak bug in utp causing connectivity issues, and began work on datastore performance improvements.&lt;/p&gt;
&lt;h4 id="jsipfs-object-cli-and-http-api-endpoints-are-complete"&gt;&lt;code&gt;jsipfs object&lt;/code&gt; cli and http-api endpoints are complete&lt;/h4&gt;
&lt;p&gt;Now you can use &lt;code&gt;jsipfs object&lt;/code&gt; in the same way you would use &lt;code&gt;ipfs object&lt;/code&gt;. Big thanks to &lt;a href="https://github.com/xicombd"&gt;Francisco Dias&lt;/a&gt; for leading the last miles of this goal. The complete track of the development can be found at &lt;a href="https://github.com/ipfs/js-ipfs/issues/58"&gt;github.com/ipfs/js-ipfs/issues/58&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="nginx-metrics"&gt;Nginx metrics&lt;/h3&gt;
&lt;p&gt;The &lt;a href="https://github.com/ipfs/infrastructure"&gt;infrastructure&lt;/a&gt; metrics dashboard didn't previously have HTTP request/response metrics from nginx's point of view, but only from IPFS's and &lt;a href="https://github.com/whyrusleeping/multireq"&gt;multireq&lt;/a&gt;'s point of view. (Multireq is our v04x/v03x multiplexing proxy). Nginx itself provides finegrained metrics only through their commercial subscriptions. We're now using &lt;a href="https://github.com/google/mtail"&gt;mtail&lt;/a&gt; to parse metrics from nginx access logs and expose them to &lt;a href="https://prometheus.io"&gt;Prometheus&lt;/a&gt;. &lt;a href="//github.com/lgierth"&gt;@lgierth&lt;/a&gt; will also contribute the &lt;code&gt;nginx.mtail&lt;/code&gt; program upstream with mtail.&lt;/p&gt;
&lt;h2 id="community"&gt;Community&lt;/h2&gt;
&lt;h3 id="upcoming-talks"&gt;Upcoming talks&lt;/h3&gt;
&lt;p&gt;On April 20th, IPFS will host a joint meetup with ConsenSys at MIT in Cambridge, Massachusetts. &lt;a href="https://www.eventbrite.com/e/ipfs-ethereum-mit-meetup-tickets-24578852008"&gt;Sign up here!&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="first-ipfs-meeting-in-nyc"&gt;First IPFS Meeting in NYC&lt;/h3&gt;
&lt;p&gt;We had our first IPFS meetup in New York! It went fantastically; expect an upcoming post on the &lt;a href="http://blog.ipfs.io/"&gt;Blog&lt;/a&gt; soon.&lt;/p&gt;
&lt;h3 id="meeting-with-nyc-mesh"&gt;Meeting with NYC Mesh&lt;/h3&gt;
&lt;p&gt;&lt;a href="//github.com/jbenet"&gt;@jbenet&lt;/a&gt; and &lt;a href="//github.com/lgierth"&gt;@lgierth&lt;/a&gt; met with the fine folks of &lt;a href="https://nycmesh.net"&gt;nycmesh.net&lt;/a&gt;. For the past two years they've been building a community Wifi network in New York City. We had lots of great conversation about wireless mesh networking and IPFS. If you live in NYC, you should come attend their &lt;a href="http://www.meetup.com/nycmesh/"&gt;meetups&lt;/a&gt;!&lt;/p&gt;
&lt;h3 id="nyc-blockchain"&gt;&lt;a href="http://nyc.blockchainworkshops.org/"&gt;NYC Blockchain&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Last Monday members of the IPFS comminuty attended a &lt;a href="http://nyc.blockchainworkshops.org/"&gt;blockchain workshop&lt;/a&gt; event held by COALA, "a collaboration between academics, lawyers, technologists and entrepreneurs who have been driving research, policy and infrastructure-building in the blockchain ecosystem for the past three years" at the New York University School of Business. &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; &lt;a href="//github.com/haad"&gt;@haad&lt;/a&gt; &lt;a href="//github.com/noffle"&gt;@noffle&lt;/a&gt; and &lt;a href="//github.com/nginnever"&gt;@nginnever&lt;/a&gt; were in attendance as &lt;a href="//github.com/jbenet"&gt;@jbenet&lt;/a&gt; was a part of a protocols panel, speaking on scalability and the future of blockchain technology. A recording of the event should be available on youtube in the future &lt;a href="https://www.youtube.com/channel/UC9Lmf5FfNkSmYMoxhQh5ktA"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="lisbon-research-and-development-meetup"&gt;Lisbon Research and Development Meetup&lt;/h3&gt;
&lt;p&gt;&lt;img alt="Lisbon" src="/blog/15-ipfs-weekly-9/009_lisbon.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.meetup.com/ipfs-lisbon-meetup/events/229807984/"&gt;The IPFS Lisbon community had their second "Research &amp;amp; Development Meetup"&lt;/a&gt;, hosted by Uniplaces (https://www.uniplaces.com). The focus was "The Distributed Web" (&lt;a href="http://www.slideshare.net/DavidDias11/rdm2-the-distributed-web"&gt;Slides&lt;/a&gt;) and "Machine Learning + Artificial Intelligence for Recommender Algorithms", with talks by &lt;a href="https://github.com/diasdavid"&gt;David Dias&lt;/a&gt; and &lt;a href="https://github.com/jtascensao"&gt;João Ascensão&lt;/a&gt;, respectively. If you are around Lisbon, make sure to join http://www.meetup.com/ipfs-lisbon-meetup to get notified about the next one. Resources for this talk can be found &lt;a href="https://github.com/research-development-meetup/discussion/tree/master/rdm-2"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="seattle"&gt;Seattle&lt;/h3&gt;
&lt;p&gt;&lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; gave a talk introducing IPFS at ta3m seattle - &lt;a href="https://wiki.openitp.org/events:techno-activism_3rd_mondays:seattle"&gt;Techno-Activism 3rd Mondays&lt;/a&gt;. Video links to come when they are posted.&lt;/p&gt;
&lt;h3 id="bitcoin-news"&gt;BitCoin News&lt;/h3&gt;
&lt;p&gt;BitCoin news had a discussion on using IPFS and Bitcoin for Decentralised Citizen Journalism. &lt;a href="http://thebitcoinnews.com/decentralised-citizen-journalism-we-discuss-the-impact-of-bitcoin-and-ipfs/"&gt;Check it out&lt;/a&gt;!&lt;/p&gt;
&lt;h3 id="bitdevsnyc"&gt;BitDevsNYC&lt;/h3&gt;
&lt;p&gt;&lt;a href="//github.com/christianlundkvist"&gt;Christian Lundkvist&lt;/a&gt; gave a talk on IPFS at &lt;a href="http://www.meetup.com/BitDevsNYC/events/229130058/"&gt;BitDevsNYC&lt;/a&gt;. Christian works closely with IPFS at &lt;a href="https://consensys.net/"&gt;ConsenSys&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="ipfs-meme-of-the-week"&gt;IPFS Meme of the Week&lt;/h2&gt;
&lt;p&gt;&lt;img alt="Hee hee" src="/blog/15-ipfs-weekly-9/009_neo.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;From https://twitter.com/jplur_/status/712670265919086594. Thanks, jplur_!&lt;/p&gt;
&lt;h2 id="content-type-of-the-week"&gt;Content-Type of the Week&lt;/h2&gt;
&lt;p&gt;Now that we're using mtail to make better sense of nginx serving the
IPFS-to-HTTP gateway, we can graph the frequency of content types served.
We'll showcase interesting content types served from the gateway in the coming
weeklies.&lt;/p&gt;
&lt;p&gt;The first Content-Type of the week is: application/x-chdr, which signifies a C source header file.&lt;/p&gt;
&lt;h2 id="contributors"&gt;Contributors&lt;/h2&gt;
&lt;p&gt;Across the entire IPFS GitHub organization, the following people have committed code, created issues, or made a comment on GitHub between March 21st (noon, GMT) and March 28th. We're autogenerating this list using &lt;a href="//github.com/ipfs/weekly/blob/master/tools/get_commits.py"&gt;this tool&lt;/a&gt; and &lt;a href="//github.com/richardlitt/name-your-contributors"&gt;this other tool&lt;/a&gt;, so please let us know if your name isn't here.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//githublcom/achin"&gt;@achin&lt;/a&gt; (Andrew Chin)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/AdamStone"&gt;@AdamStone&lt;/a&gt; (Adam Stone)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/admiral-Guck"&gt;@admiral-Guck&lt;/a&gt; (Gucky)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/alexAubin"&gt;@alexAubin&lt;/a&gt; (Alexandre Aubin)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/amstocker"&gt;@amstocker&lt;/a&gt; (Andrew Stocker)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/anarcat"&gt;@anarcat&lt;/a&gt; (anarcat)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Anthonyzou"&gt;@Anthonyzou&lt;/a&gt; (Anthony Ou)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/area"&gt;@area&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ARezaK"&gt;@ARezaK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/atommixz"&gt;@atommixz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Azulan"&gt;@Azulan&lt;/a&gt; (Frank Flores)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/balupton"&gt;@balupton&lt;/a&gt; (Benjamin Lupton)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/bgrieder"&gt;@bgrieder&lt;/a&gt; (Bruno Grieder)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/cb0"&gt;@cb0&lt;/a&gt; (Marcus Puchalla)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/chinshiketsu"&gt;@chinshiketsu&lt;/a&gt; (Sijie Chen)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/chpio"&gt;@chpio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/chriscool"&gt;@chriscool&lt;/a&gt; (Christian Couder)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/CMCDragonkai"&gt;@CMCDragonkai&lt;/a&gt; (Roger Qiu)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ComSecNinja"&gt;@ComSecNinja&lt;/a&gt; (Timo Virkkunen)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/darkstar"&gt;@darkstar&lt;/a&gt; (Michael D.)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/davidar"&gt;@davidar&lt;/a&gt; (David A Roberts)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; (David Dias)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt; (Friedel Ziegelmayer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/djdv"&gt;@djdv&lt;/a&gt; (Dominic Della Valle)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ehmry"&gt;@ehmry&lt;/a&gt; (Emery Hemingway)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/fomkin"&gt;@fomkin&lt;/a&gt; (Aleksey Fomkin)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/gerrickw"&gt;@gerrickw&lt;/a&gt; (Gerrick W)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/greenkeeperio-bot"&gt;@greenkeeperio-bot&lt;/a&gt; (Greenkeeper)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/haadcode"&gt;@haadcode&lt;/a&gt; (Haad)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/harlantwood"&gt;@harlantwood&lt;/a&gt; (Harlan T Wood)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/hshimo"&gt;@hshimo&lt;/a&gt; (Hiroshi Shimo)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/hutenosa"&gt;@hutenosa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ianopolous"&gt;@ianopolous&lt;/a&gt; (Ian Preston)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/iav"&gt;@iav&lt;/a&gt; (iav)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ibnesayeed"&gt;@ibnesayeed&lt;/a&gt; (Sawood Alam)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/insanity54"&gt;@insanity54&lt;/a&gt; (Chris Grimmett)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jbenet"&gt;@jbenet&lt;/a&gt; (Juan Benet)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/JGAntunes"&gt;@JGAntunes&lt;/a&gt; (João Antunes)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jmsmcfrlnd"&gt;@jmsmcfrlnd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/josephholsten"&gt;@josephholsten&lt;/a&gt; (Joseph Anthony Pasquale Holsten)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/julian-smith-code"&gt;@julian-smith-code&lt;/a&gt; (Julian Smith)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jwsher"&gt;@jwsher&lt;/a&gt; (Justin Sher)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/kalmi"&gt;@kalmi&lt;/a&gt; (Tarnay Kálmán)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/kevina"&gt;@kevina&lt;/a&gt; (Kevin Atkinson)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/knocte"&gt;@knocte&lt;/a&gt; (Andres G. Aragoneses)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/KrishnaPG"&gt;@KrishnaPG&lt;/a&gt; (Gopalakrishna Palem)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Kubuxu"&gt;@Kubuxu&lt;/a&gt; (Jakub Sztandera)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/kumavis"&gt;@kumavis&lt;/a&gt; (kumavis)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/kyledrake"&gt;@kyledrake&lt;/a&gt; (Kyle Drake)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/kyrias"&gt;@kyrias&lt;/a&gt; (Johannes Löthberg)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lgierth"&gt;@lgierth&lt;/a&gt; (Lars Gierth)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lidel"&gt;@lidel&lt;/a&gt; (Marcin Rataj)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/machawk1"&gt;@machawk1&lt;/a&gt; (Mat Kelly)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/matshenricson"&gt;@matshenricson&lt;/a&gt; (Mats Henricson)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Mec-iS"&gt;@Mec-iS&lt;/a&gt; (Lorenzo)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/micahredding"&gt;@micahredding&lt;/a&gt; (Micah Redding)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/MichaelMure"&gt;@MichaelMure&lt;/a&gt; (Michael Muré)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/micxjo"&gt;@micxjo&lt;/a&gt; (Micxjo Funkcio)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mildred"&gt;@mildred&lt;/a&gt; (Mildred Ki'Lya)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mitar"&gt;@mitar&lt;/a&gt; (Mitar)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Mithgol"&gt;@Mithgol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/monoflash"&gt;@monoflash&lt;/a&gt; (Alex Geer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/montagsoup"&gt;@montagsoup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mpgn"&gt;@mpgn&lt;/a&gt; (Martial Puygrenier)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mrshu"&gt;@mrshu&lt;/a&gt; (Marek Šuppa)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/nginnever"&gt;@nginnever&lt;/a&gt; (Nathan Ginnever)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/nicola"&gt;@nicola&lt;/a&gt; (Nicola Greco)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/NightRa"&gt;@NightRa&lt;/a&gt; (Ilan Godik)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/noffle"&gt;@noffle&lt;/a&gt; (Stephen Whitmore)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/nonchip"&gt;@nonchip&lt;/a&gt; (Kyra Zimmer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/novocodev"&gt;@novocodev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/palkeo"&gt;@palkeo&lt;/a&gt; (palkeo)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/pguth"&gt;@pguth&lt;/a&gt; (Per)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Piruzzolo"&gt;@Piruzzolo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/pocketmax"&gt;@pocketmax&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/pokeball99"&gt;@pokeball99&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/polkovnikov-ph"&gt;@polkovnikov-ph&lt;/a&gt; (Philip Polkovnikov)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/puffnfresh"&gt;@puffnfresh&lt;/a&gt; (Brian McKenna)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/rht"&gt;@rht&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; (Richard Littauer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/rsynnest"&gt;@rsynnest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/sdockray"&gt;@sdockray&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/se3000"&gt;@se3000&lt;/a&gt; (Steve Ellis)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Shikibashi"&gt;@Shikibashi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/SilverWingedSeraph"&gt;@SilverWingedSeraph&lt;/a&gt; (Leo Tindall)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/slothbag"&gt;@slothbag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Stebalien"&gt;@Stebalien&lt;/a&gt; (Steven Allen)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/syang"&gt;@syang&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/tadfisher"&gt;@tadfisher&lt;/a&gt; (Tad Fisher)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/thomas-gardner"&gt;@thomas-gardner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/tinybike"&gt;@tinybike&lt;/a&gt; (Jack Peterson)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/upfs"&gt;@upfs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/voltrevo"&gt;@voltrevo&lt;/a&gt; (Andrew Morris)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; (Jeromy Johnson)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/willglynn"&gt;@willglynn&lt;/a&gt; (Will Glynn)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/wking"&gt;@wking&lt;/a&gt; (W. Trevor King)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/wmhilton"&gt;@wmhilton&lt;/a&gt; (Will Hilton)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/xicombd"&gt;@xicombd&lt;/a&gt; (Francisco Baio Dias)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/xsnk"&gt;@xsnk&lt;/a&gt; (Sankrant Chaubey)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/yuvipanda"&gt;@yuvipanda&lt;/a&gt; (Yuvi Panda)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Zogg"&gt;@Zogg&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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 &lt;a href="https://github.com/ipfs/weekly/issues/33"&gt;next weekly sprint issue&lt;/a&gt;! The more people mention items they want to see in the weekly there, the easier it is to make this and send it out.&lt;/p&gt;
&lt;p&gt;Thanks, and see you next week!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Richard Littauer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Submit feedback about this issue &lt;a href="https://github.com/ipfs/weekly/issues/31"&gt;here&lt;/a&gt;, or send us &lt;a href="//github.com/ipfs/weekly/issues/7"&gt;feedback about the IPFS Weekly in general&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</summary></entry><entry><title>go-ipfs 0.4.0 has been released</title><link href="/blog/14-ipfs-0-4-0-released" rel="alternate"></link><published>2016-04-07T00:00:00+02:00</published><author><name>Kyle Drake and @whyrusleeping</name></author><id>tag:,2016-04-07:blog/14-ipfs-0-4-0-released</id><summary type="html">&lt;p&gt;&lt;a href="http://dist.ipfs.io/#go-ipfs"&gt;go-ipfs 0.4.0&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;&lt;img alt="0.4.0" src="/blog/14-ipfs-0-4-0-released/fireworks.jpg" /&gt;&lt;/p&gt;
&lt;h2 id="the-ipfs-files-api"&gt;The IPFS &lt;strong&gt;Files API&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;In 0.4.0, we've added a new feature, the Files API, available through the
subcommand: &lt;code&gt;ipfs files&lt;/code&gt;. This subcommand allows 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.&lt;/p&gt;
&lt;p&gt;This feature enables any application that uses a filesystem-like backend
to use IPFS for storage without changing the application logic at all.&lt;/p&gt;
&lt;p&gt;It is used like so:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;gt; ipfs files mkdir /cats

&amp;gt; ipfs files ls /
cats

&amp;gt; &lt;span class="nb"&gt;echo&lt;/span&gt; bar &lt;span class="p"&gt;|&lt;/span&gt; ipfs files write --create /cats/foo

&amp;gt; ipfs files ls /cats
foo

&amp;gt; ipfs files &lt;span class="nb"&gt;read&lt;/span&gt; /cats/foo
bar

&amp;gt; ipfs files stat /
QmNU8HmaeRa8VtfqAoQRJhSE5Zx54vyYf2nT1bDGcYXaNv
...

&lt;span class="c1"&gt;# /ipfs/QmNU8HmaeRa8VtfqAoQRJhSE5Zx54vyYf2nT1bDGcYXaNv is a snapshot&lt;/span&gt;
&lt;span class="c1"&gt;# of this file system!&lt;/span&gt;

&lt;span class="c1"&gt;# You can see it locally or on the public gateway:&lt;/span&gt;
&lt;span class="c1"&gt;#  https://ipfs.io/ipfs/QmNU8HmaeRa8VtfqAoQRJhSE5Zx54vyYf2nT1bDGcYXaNv&lt;/span&gt;

&lt;span class="c1"&gt;# Subsequent edits will produce a new /ipfs address for the root directory.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;One great example of this is &lt;a href="https://github.com/ipfs/ipfs-blob-store"&gt;ipfs-blob-store&lt;/a&gt;,
an IPFS-backed storage driver that implements the
&lt;a href="https://github.com/maxogden/abstract-blob-store"&gt;blob-store-interface&lt;/a&gt;, so that any app
that uses any other blob-store storage driver (S3, IndexedDB, LevelDB, etc) can now use
IPFS. &lt;a href="https://github.com/diasdavid/registry-mirror"&gt;registry-mirror&lt;/a&gt; uses this
approach to mirror the npm registry onto IPFS.&lt;/p&gt;
&lt;p&gt;We are looking forward to seeing more use cases of this new convenient and powerful API.&lt;/p&gt;
&lt;h2 id="why-were-changing-the-protocol"&gt;Why we're changing the protocol&lt;/h2&gt;
&lt;p&gt;The most important change allows IPFS implementations to use pluggable stream
multiplexers, such as &lt;a href="https://github.com/hashicorp/yamux"&gt;yamux&lt;/a&gt;,
&lt;a href="https://github.com/docker/spdystream"&gt;spdystream&lt;/a&gt;, or
&lt;a href="https://github.com/inconshreveable/muxado"&gt;muxado&lt;/a&gt;. Instead of locking IPFS
permanently into a single multiplexer that won't work for every language or
situation, this change allows each IPFS implementation to implement the
multiplexers that they choose to, and then negotiate which to use during the
initial connection handshake.&lt;/p&gt;
&lt;p&gt;This modularity with stream muxing makes it easier for certain languages to
improve performance. For example, the Go programming language may have muxado
and yamux implementations that are really good, but many languages lack good (or
any) implementations of them. Or take Node.js, which works well with
spdy-transport, and it would be nice to take advantage of that. And
then there are options like
&lt;a href="https://github.com/maxogden/multiplex"&gt;multiplex&lt;/a&gt;, which may not have the
same performance, but are much easier to implement.&lt;/p&gt;
&lt;p&gt;So, by supporting as many muxers as we can, we get to choose the best
multiplexers for the job. It also makes it much easier to implement the IPFS
protocols in a new language. And of course, if a better multiplexers standard
comes along, it will be easier to upgrade IPFS to support it in the future.&lt;/p&gt;
&lt;p&gt;The same code that allows us to easily select a stream muxer is also being
used to select which IPFS sub-protocol to use for any given stream between
peers. Now, if we need to make a breaking protocol change to any of those (like
the DHT or bitswap) we can do so seamlessly, and provide easy backwards
compatibility. We won't need to "break" anything because we will be able to
have nodes run multiple protocols at the same time for compatibility.&lt;/p&gt;
&lt;p&gt;In addition to the multiplexers changes, the protocol revamp has also improved
efficiency and performance in a few important ways, including the elimination of
a double wrapping of the length prefixer, and the removal of some unnecessary
round trips between nodes.&lt;/p&gt;
&lt;h3 id="breaking-changes"&gt;Breaking changes&lt;/h3&gt;
&lt;p&gt;This release contains a &lt;strong&gt;breaking change&lt;/strong&gt; to the network wire protocol  in the
form of a major refactor and upgrade to the libp2p handshake protocol.  Because
of the refactor, &lt;strong&gt;all IPFS daemons earlier than 0.4.0 will not be able to
communicate with the newest version&lt;/strong&gt;. It is strongly recommended that everyone
running an IPFS node upgrades to the latest version as soon as possible, as
these nodes will, after a certain time, no longer be able to communicate with
the majority of the network until they are upgraded. There are instructions on
how to update below.&lt;/p&gt;
&lt;p&gt;Refactoring the protocol is not something to be done lightly. But at this early
stage, this is necessary to ensure we have the right design for IPFS in place
for the future. It's better to improve the protocol now during this alpha stage
of the project than when there are a lot more people running nodes across a
lot of different implementations.&lt;/p&gt;
&lt;p&gt;One of the important changes that's been made to the protocol means that &lt;em&gt;there
should never be a breaking change like this again&lt;/em&gt;. This is due to a change to
allow nodes to announce the version of the protocol they are using when
connecting to other IPFS nodes. The goal is to roll any future protocol changes
into the implementations gradually, so that we can still support legacy
protocols for a period of time, making it easier to deprecate old versions over
time.&lt;/p&gt;
&lt;h3 id="the-public-gateway-and-bootstrappers"&gt;The public gateway and bootstrappers&lt;/h3&gt;
&lt;p&gt;We provide two essential public services to the IPFS community: the public
gateway at https://ipfs.io and the default bootstrap nodes. We're making sure
that despite the breaking changes, both will continue to work with 0.4.x and
0.3.x for a while. You can read more about the details of this in an earlier
blog post: &lt;a href="../9-v04x-migration"&gt;Migrating ipfs.io from go-ipfs 0.3.x to 0.4.0&lt;/a&gt;.
We expect to keep this grace period open until the end of April 2016.&lt;/p&gt;
&lt;h2 id="changes-to-the-repo"&gt;Changes to the repo&lt;/h2&gt;
&lt;p&gt;We made a few changes to our on disk storage format (called the 'repo').
The way object pinning (&lt;code&gt;ipfs pin add&lt;/code&gt;) works has also been upgraded to be much
more efficient, which will improve the overall speed of adding and downloading
IPFS data. Previously, when you pinned a file recursively, it would add a
recursive type pin to the root, and then add an indirect type pin to each child
node. This made enumeration for GC convenient, but was very slow and made a lot
of things needlessly complicated. We have switched to just adding the recursive
pin to the root object, and then doing the enumeration of child nodes when we
actually run a garbage collection.&lt;/p&gt;
&lt;p&gt;Because of this change, you will need to run a migration (from repo version 2
to version 3). If you update with the &lt;code&gt;ipfs-update&lt;/code&gt; tool, this will be done for
you automatically. If you updated manually, and did not run the migration, ipfs
will fail to run, and print a message saying that there is a mismatch in the repo
versions.&lt;/p&gt;
&lt;h2 id="other-improvements-and-fixes"&gt;Other improvements and fixes&lt;/h2&gt;
&lt;p&gt;In addition to a major protocol improvement and upgrade, this release adds a lot
of new functionality, performance speedups, and stability fixes that make this
the best version of IPFS to date.&lt;/p&gt;
&lt;p&gt;This release also includes performance and usability improvements to IPNS,
which is IPFS's mutability layer. IPNS creates a link from an IPFS node's
public key to the hash of an arbitrary objects hash, in a way that is
cryptographically verifiable. We call this "publishing" a hash, and you can try
it out using the &lt;code&gt;ipfs publish&lt;/code&gt; command. By allowing users to change what the
pubkey hash points to, we provide users with a single hash they can give to their
users to get the latest version of their data. This creates a seamless way to
use IPFS to verify content, and to distribute content via trustless nodes in a
smart, safe way.  This brings IPFS closer to the goal of being a global
filesystem of data, that can allow everyone in the world to help serve the
world's data in a way that enriches and empowers everybody.&lt;/p&gt;
&lt;h2 id="how-to-upgrade"&gt;How to upgrade&lt;/h2&gt;
&lt;p&gt;Depending on how you initially installed IPFS, there are several ways to
upgrade. If you installed IPFS with a pre-built binary, you can either head over
to &lt;a href="http://dist.ipfs.io/#go-ipfs"&gt;dist.ipfs.io&lt;/a&gt; and grab the latest version
from there. Or alternatively, from the same page you can grab the &lt;code&gt;ipfs-update&lt;/code&gt;
binary, and use it to perform the upgrade for you. If you installed from
source, you can simply update your git repo to the &lt;code&gt;v0.4.0&lt;/code&gt; tag, run &lt;code&gt;make
toolkit_upgrade &amp;amp;&amp;amp; make install&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Please upgrade your IPFS nodes as soon as you can, so you can take advantage
of the improvements!&lt;/p&gt;
&lt;h2 id="changelog"&gt;Changelog&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Major Changes&lt;/li&gt;
&lt;li&gt;Multistream&lt;ul&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Files API&lt;ul&gt;
&lt;li&gt;The new &lt;code&gt;files&lt;/code&gt; 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.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Gx&lt;ul&gt;
&lt;li&gt;go-ipfs now uses &lt;a href="https://github.com/whyrusleeping/gx"&gt;gx&lt;/a&gt; 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 &lt;code&gt;go get&lt;/code&gt;. Use &lt;code&gt;make install&lt;/code&gt; instead.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;New Features&lt;/li&gt;
&lt;li&gt;Web UI&lt;ul&gt;
&lt;li&gt;Update to new version which is compatible with 0.4.0. (@dignifiedquire)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Networking&lt;ul&gt;
&lt;li&gt;Implement uTP transport. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Allow multiple addresses per configured bootstrap node. (@whyrusleeping)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;IPNS&lt;ul&gt;
&lt;li&gt;Improve IPNS resolution performance. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Have dnslink prefer &lt;code&gt;TXT _dnslink.example.com&lt;/code&gt;, allows usage of CNAME records. (@Kubuxu)&lt;/li&gt;
&lt;li&gt;Prevent &lt;code&gt;ipfs name publish&lt;/code&gt; when &lt;code&gt;/ipns&lt;/code&gt; is mounted. (@noffle)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Repo&lt;ul&gt;
&lt;li&gt;Improve performance of &lt;code&gt;ipfs add&lt;/code&gt;. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;Datastore.NoSync&lt;/code&gt; config option for flatfs. (@rht)&lt;/li&gt;
&lt;li&gt;Implement mark-and-sweep GC. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Allow for GC during &lt;code&gt;ipfs add&lt;/code&gt;. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;ipfs repo stat&lt;/code&gt; command. (@tmg, @diasdavid)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;General&lt;ul&gt;
&lt;li&gt;Add support for HTTP OPTIONS requests. (@lidel)&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;ipfs diag cmds&lt;/code&gt; to view active API requests (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Add an &lt;code&gt;IPFS_LOW_MEM&lt;/code&gt; environment veriable which relaxes Bitswap's memory usage. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;The Docker image now lives at &lt;code&gt;ipfs/go-ipfs&lt;/code&gt; and has been completely reworked. (@lgierth)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Security fixes&lt;/li&gt;
&lt;li&gt;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 &lt;code&gt;Gateway.PathPrefixes&lt;/code&gt; and takes a list of
    strings, e.g. &lt;code&gt;["/blog", "/foo/bar"]&lt;/code&gt;. The v0.3.x line will not receive any
    further updates, so please update to v0.4.0 as soon as possible. (@lgierth)&lt;/li&gt;
&lt;li&gt;Incompatible Changes&lt;/li&gt;
&lt;li&gt;Install using &lt;code&gt;make install&lt;/code&gt; instead of &lt;code&gt;go get&lt;/code&gt; (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Rewrite pinning to store pins in IPFS objects. (@tv42)&lt;/li&gt;
&lt;li&gt;Bump fs-repo version to 3. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Use multistream muxer (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;The default for &lt;code&gt;--type&lt;/code&gt; in &lt;code&gt;ipfs pin ls&lt;/code&gt; is now &lt;code&gt;all&lt;/code&gt;. (@chriscool)&lt;/li&gt;
&lt;li&gt;Bug Fixes&lt;/li&gt;
&lt;li&gt;Remove msgio double wrap. (@jbenet)&lt;/li&gt;
&lt;li&gt;Buffer msgio. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Perform various fixes to the FUSE code. (@tv42)&lt;/li&gt;
&lt;li&gt;Compute &lt;code&gt;ipfs add&lt;/code&gt; size in background to not stall add operation. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Add option to have &lt;code&gt;ipfs add&lt;/code&gt; include top-level hidden files. (@noffle)&lt;/li&gt;
&lt;li&gt;Fix CORS checks on the API. (@rht)&lt;/li&gt;
&lt;li&gt;Fix &lt;code&gt;ipfs update&lt;/code&gt; error message. (@tomgg)&lt;/li&gt;
&lt;li&gt;Resolve paths in &lt;code&gt;ipfs pin rm&lt;/code&gt; without network lookup. (@noffle)&lt;/li&gt;
&lt;li&gt;Detect FUSE unmounts and track mount state. (@noffle)&lt;/li&gt;
&lt;li&gt;Fix go1.6rc2 panic caused by CloseNotify being called from wrong goroutine. (@rwcarlsen)&lt;/li&gt;
&lt;li&gt;Bump DHT kvalue from 10 to 20. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Put public key and IPNS entry to DHT in parallel. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Fix panic in CLI argument parsing. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Fix range error by using larger-than-zero-length buffer. (@noffle)&lt;/li&gt;
&lt;li&gt;Fix yamux hanging issue by increasing AcceptBacklog. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Fix double Transport-Encoding header bug. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Fix uTP panic and file descriptor leak. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Tool Changes&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;--pin&lt;/code&gt; option to &lt;code&gt;ipfs add&lt;/code&gt;, which defaults to &lt;code&gt;true&lt;/code&gt; and allows &lt;code&gt;--pin=false&lt;/code&gt;. (@eminence)&lt;/li&gt;
&lt;li&gt;Add arguments to &lt;code&gt;ipfs pin ls&lt;/code&gt;. (@chriscool)&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;dns&lt;/code&gt; and &lt;code&gt;resolve&lt;/code&gt; commands to read-only API. (@Kubuxu)&lt;/li&gt;
&lt;li&gt;Add option to display headers for &lt;code&gt;ipfs object links&lt;/code&gt;. (@palkeo)&lt;/li&gt;
&lt;li&gt;General Codebase Changes&lt;/li&gt;
&lt;li&gt;Check Golang version in Makefile. (@chriscool)&lt;/li&gt;
&lt;li&gt;Improve Makefile. (@tomgg)&lt;/li&gt;
&lt;li&gt;Remove dead Jenkins CI code. (@lgierth)&lt;/li&gt;
&lt;li&gt;Add locking interface to blockstore. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Add Merkledag FetchGraph and EnumerateChildren. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Rename Lock/RLock to GCLock/PinLock. (@jbenet)&lt;/li&gt;
&lt;li&gt;Implement pluggable datastore types. (@tv42)&lt;/li&gt;
&lt;li&gt;Record datastore metrics for non-default datastores. (@tv42)&lt;/li&gt;
&lt;li&gt;Allow multistream to have zero-rtt stream opening. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Refactor &lt;code&gt;ipnsfs&lt;/code&gt; into a more generic and well tested &lt;code&gt;mfs&lt;/code&gt;. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Grab more peers if bucket doesn't contain enough. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Use CloseNotify in gateway. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Flatten multipart file transfers. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Send updated DHT record fixes to peers who sent outdated records. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Replace go-psutil with go-sysinfo. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Use ServeContent for index.html. (@AtnNn)&lt;/li&gt;
&lt;li&gt;Refactor &lt;code&gt;object patch&lt;/code&gt; API to not store data in URL. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Use mfs for &lt;code&gt;ipfs add&lt;/code&gt;. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;Server&lt;/code&gt; header to API responses. (@Kubuxu)&lt;/li&gt;
&lt;li&gt;Wire context directly into HTTP requests. (@rht)&lt;/li&gt;
&lt;li&gt;Wire context directly into GetDAG operations within GC. (@rht)&lt;/li&gt;
&lt;li&gt;Vendor libp2p using gx. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Use gx vendored packages instead of Godeps. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Simplify merkledag package interface to ease IPLD inclusion. (@mildred)&lt;/li&gt;
&lt;li&gt;Add default option value support to commands lib. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Refactor merkledag fetching methods. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Use net/url to escape paths within Web UI. (@noffle)&lt;/li&gt;
&lt;li&gt;Deprecated key.Pretty(). (@MichealMure)&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Fix and update help text for &lt;strong&gt;every&lt;/strong&gt; &lt;code&gt;ipfs&lt;/code&gt; command. (@RichardLitt)&lt;/li&gt;
&lt;li&gt;Change sample API origin settings from wildcard (&lt;code&gt;*&lt;/code&gt;) to &lt;code&gt;example.com&lt;/code&gt;. (@Kubuxu)&lt;/li&gt;
&lt;li&gt;Improve documentation of installation process in README. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Improve windows.md. (@chriscool)&lt;/li&gt;
&lt;li&gt;Clarify instructions for installing from source. (@noffle)&lt;/li&gt;
&lt;li&gt;Make version checking more robust. (@jedahan)&lt;/li&gt;
&lt;li&gt;Assert the source code is located within GOPATH. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Remove mentions of &lt;code&gt;/dns&lt;/code&gt; from &lt;code&gt;ipfs dns&lt;/code&gt; command docs. (@lgierth)&lt;/li&gt;
&lt;li&gt;Testing&lt;/li&gt;
&lt;li&gt;Refactor iptb tests. (@chriscool)&lt;/li&gt;
&lt;li&gt;Improve t0240 sharness test. (@chriscool)&lt;/li&gt;
&lt;li&gt;Make bitswap tests less flaky. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Use TCP port zero for ipfs daemon in sharness tests. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Improve sharness tests on AppVeyor. (@chriscool)&lt;/li&gt;
&lt;li&gt;Add a pause to fix timing on t0065. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Add support for arbitrary TCP ports to t0060-daemon.sh. (@noffle)&lt;/li&gt;
&lt;li&gt;Make t0060 sharness test use TCP port zero. (@whyrusleeping)&lt;/li&gt;
&lt;li&gt;Randomized ipfs stress testing via randor (@dignifiedquire)&lt;/li&gt;
&lt;li&gt;Stress test pinning and migrations (@whyrusleeping)&lt;/li&gt;
&lt;/ul&gt;</summary></entry><entry><title>IPFS Weekly 8</title><link href="/blog/13-ipfs-weekly-8" rel="alternate"></link><published>2016-03-22T00:00:00+01:00</published><author><name>Richard Littauer</name></author><id>tag:,2016-03-22:blog/13-ipfs-weekly-8</id><summary type="html">&lt;p&gt;&lt;a href="//ipfs.io/"&gt;IPFS&lt;/a&gt; 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 &lt;a href="//github.com/ipfs"&gt;GitHub&lt;/a&gt; or join us on &lt;a href="//webchat.freenode.net/?channels=ipfs"&gt;IRC&lt;/a&gt; (#ipfs on the Freenode network).&lt;/p&gt;
&lt;p&gt;If you would like to get this update as an email, sign up for our &lt;a href="//tinyletter.com/ipfsweekly"&gt;weekly newsletter&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Here are some of the highlights for the &lt;a href="//github.com/ipfs/pm/issues/97"&gt;March 14&lt;/a&gt; sprint:&lt;/p&gt;
&lt;h2 id="updates"&gt;Updates&lt;/h2&gt;
&lt;p&gt;&lt;img alt="webui" src="/blog/13-ipfs-weekly-8/008_webui.gif" /&gt;&lt;/p&gt;
&lt;h3 id="webui"&gt;&lt;a href="//github.com/ipfs/webui"&gt;webui&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="//github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt; has been working hard on the new webui, which will be coming soon. You'll be able to preview images, watch videos, create folders, drag and drop, and more. Here's a pretty gif. To help out, check out the &lt;a href="//github.com/ipfs/webui/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22"&gt;help wanted labels&lt;/a&gt; on the repo.&lt;/p&gt;
&lt;h3 id="pubsub"&gt;PubSub&lt;/h3&gt;
&lt;p&gt;There are some active discussions on PubSub, following a good video chat last week during the hangouts. PubSub is the name we're using to talk about a simple protocol which will help facilitate easy publishing and subscribing on top of IPFS. Our requirements are that it must be easy to implement, well-layered, and mesh well with the rest of the IPFS abstractions. To join the conversation about the PubSub API, check out this &lt;a href="//github.com/ipfs/notes/issues/118"&gt;issue&lt;/a&gt;. For more discussions, check out all of the &lt;a href="//github.com/ipfs/notes/issues?utf8=%E2%9C%93&amp;amp;q=is%3Aissue+is%3Aopen+pubsub"&gt;PubSub issues in the notes repo&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="ipfs-log"&gt;&lt;a href="//github.com/haadcode/ipfs-log"&gt;ipfs-log&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="//github.com/haadcode"&gt;@haadcode&lt;/a&gt; has been working on and released &lt;a href="//github.com/haadcode/ipfs-log"&gt;ipfs-log&lt;/a&gt;, a partially ordered linked list of IPFS hashes. Each entry in the log points to all known heads or leaf nodes. It can be used as a building block for applications that need to track "dynamic content", eg. track a version of a file, create a feed of IPFS hashes, messaging or as a transport for CRDTs. THis was originally created for, and is currently used in, &lt;a href="//github.com/haadcode/orbit-db"&gt;orbit-db&lt;/a&gt;, a KV-store and Event Log on IPFS.&lt;/p&gt;
&lt;h3 id="ipfs-init"&gt;ipfs init&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;ipfs init&lt;/code&gt; for js-ipfs &lt;a href="//github.com/ipfs/js-ipfs/pull/91"&gt;is almost complete&lt;/a&gt;, thanks to &lt;a href="//github.com/noffle"&gt;@noffle&lt;/a&gt;. This will have go-ipfs compatibility, but run using only JavaScript. If you like building tests and sharpening your semicolons, there's plenty of &lt;a href="//github.com/ipfs/js-ipfs#contribute"&gt;opportunities to contribute&lt;/a&gt; in js-ipfs land.&lt;/p&gt;
&lt;h3 id="go-ipfs"&gt;&lt;a href="//github.com/ifps/go-ipfs"&gt;go-ipfs&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This week in go-ipfs, we prepped for shipping version 0.4.0. This included lots of testing, writing of information, and verification of different aspects of IPFS. &lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; wrote a stress test for the fs-repo-migrations that adds a very large number of objects (over 200,000) and pins a couple thousand of them, runs the migration, verifies ​everything​, runs a gc, and then verifies everything again. Once that got working, he kicked off a test run of that with the numbers bumped by a factor of 10 (over two million objects!) and everything completed just fine. This robustness means that 0.4.0 will be ready to ship very, very soon.&lt;/p&gt;
&lt;h3 id="ipfs-firefox-addon"&gt;&lt;a href="//github.com/lidel/ipfs-firefox-addon"&gt;ipfs-firefox-addon&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;There were some changes in &lt;a href="//github.com/lidel/ipfs-firefox-addon"&gt;ipfs-firefox-addon&lt;/a&gt; since it was mentioned in Weekly No.3 (v1.4.2).&lt;/p&gt;
&lt;p&gt;The Firefox addon that provides transparent access to IPFS resources via local HTTP2IPFS gateway has been fully reviewed by Mozilla and updated to &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/ipfs-gateway-redirect/versions/1.5.6"&gt;v1.5.6&lt;/a&gt;. On average it has &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/ipfs-gateway-redirect/statistics/?last=365"&gt;over 350 daily users&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The 1.5.x series brings various UX improvements such as Realtime Status and Diagnostics, along with experimental features that can be enabled on the Preferences screen. Check the full list &lt;a href="//github.com/lidel/ipfs-firefox-addon#features"&gt;at Github&lt;/a&gt;. Feature requests and bug reports &lt;a href="//github.com/lidel/ipfs-firefox-addon/issues"&gt;are welcome&lt;/a&gt;!&lt;/p&gt;
&lt;h2 id="community"&gt;Community&lt;/h2&gt;
&lt;h3 id="mediachain"&gt;&lt;a href="https://medium.com/mine-labs/mediachain-483f49cbe37a#.50am8s6cw"&gt;Mediachain&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Our friends at &lt;a href="http://www.mine.nyc/"&gt;Mine&lt;/a&gt; &lt;a href="https://medium.com/mine-labs/mediachain-developer-update-vi-94d28cf6bc30#.kt6uoc9yk"&gt;recently released&lt;/a&gt;
&lt;a href="https://github.com/mediachain/L-SPACE"&gt;L-SPACE&lt;/a&gt;, the Mediachain server. they
have also been writing great updates to &lt;a href="https://medium.com/mine-labs"&gt;their blog&lt;/a&gt;:
&lt;a href="https://medium.com/mine-labs/how-mediachain-works-5a5ccc1c3210#.tv0cv5kc8"&gt;How Mediachain works&lt;/a&gt;,
&lt;a href="https://medium.com/mine-labs/mediachain-developer-update-v-a7f6006ad953#.j0esgkawa"&gt;Dev Update V&lt;/a&gt;,
&lt;a href="https://medium.com/mine-labs/mediachain-developer-update-vi-94d28cf6bc30#.kt6uoc9yk"&gt;Dev Update VI&lt;/a&gt;,
and more. The press took notice and Mediachain has been featured in
&lt;a href="http://www.nasdaq.com/article/mediachain-protect-digital-content-with-a-bitcoin-based-metadata-protocol-cm595895"&gt;Nasdaq&lt;/a&gt;,
&lt;a href="https://bitcoinmagazine.com/articles/mediachain-protect-digital-content-with-a-bitcoin-based-metadata-protocol-1458577763"&gt;Bitcoin Magazine&lt;/a&gt;,
&lt;a href="https://www.cryptocoinsnews.com/protecting-rights-to-digital-works-with-blockchain-technology/"&gt;CCN&lt;/a&gt;,
and more! Congratulations, and thanks for the IPFS shoutouts there!&lt;/p&gt;
&lt;h3 id="lisbon"&gt;Lisbon&lt;/h3&gt;
&lt;p&gt;&lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; organized a research and development meeting for IPFS in Lisbon. If you're in the area, join &lt;a href="http://www.meetup.com/ipfs-lisbon-meetup/events/229530492/"&gt;this meetup group&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="press"&gt;Press&lt;/h2&gt;
&lt;p&gt;Bitcoin Magazine had a guest post by &lt;a href="https://twitter.com/cerebralbosons"&gt;Zach Ramsay&lt;/a&gt;, from Eris Industries, about &lt;a href="http://www.nasdaq.com/article/how-blockchains-can-further-public-science-cm592775"&gt;How Blockchains Can Further Public Science&lt;/a&gt;. Zach also published part two on the Eris blog: &lt;a href="https://db.erisindustries.com/science/2016/03/15/chains-and-science-how-to/"&gt;Public Science: A Slightly More Practical Guide&lt;/a&gt;. Both are well worth the read, especially if you're in academia.&lt;/p&gt;
&lt;h2 id="contributors"&gt;Contributors&lt;/h2&gt;
&lt;p&gt;Across the entire IPFS GitHub organization, the following people have committed code, created issues, or made a comment on GitHub between March 14th (noon, GMT) and March 21st. We're autogenerating this list using &lt;a href="//github.com/ipfs/weekly/blob/master/tools/get_commits.py"&gt;this tool&lt;/a&gt; and &lt;a href="//github.com/richardlitt/name-your-contributors"&gt;this other tool&lt;/a&gt;, so please let us know if your name isn't here.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/amstocker"&gt;@amstocker&lt;/a&gt; (Andrew Stocker)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/anarcat"&gt;@anarcat&lt;/a&gt; (anarcat)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ansuz"&gt;@ansuz&lt;/a&gt; (ansuz)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/basile-henry"&gt;@basile-henry&lt;/a&gt; (Basile Henry)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/bdunlay"&gt;@bdunlay&lt;/a&gt; (Brian Dunlay)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/brainframe-me"&gt;@brainframe-me&lt;/a&gt; (Cox Davy)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/candeira"&gt;@candeira&lt;/a&gt; (Javier Candeira)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/chpio"&gt;@chpio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/chriscool"&gt;@chriscool&lt;/a&gt; (Christian Couder)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/christianlundkvist"&gt;@christianlundkvist&lt;/a&gt; (Christian Lundkvist)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Cleric-K"&gt;@Cleric-K&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/clkao"&gt;@clkao&lt;/a&gt; (Chia-liang Kao)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/davidar"&gt;@davidar&lt;/a&gt; (David A Roberts)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; (David Dias)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt; (Friedel Ziegelmayer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/doesntgolf"&gt;@doesntgolf&lt;/a&gt; (Nate Dobbins)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ehd"&gt;@ehd&lt;/a&gt; (Stephan Seidt)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/eminence"&gt;@eminence&lt;/a&gt; (Andrew Chin)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/fazo96"&gt;@fazo96&lt;/a&gt; (Enrico Fasoli)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/GoogilyBoogily"&gt;@GoogilyBoogily&lt;/a&gt; (Derek Mayer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/greenkeeperio-bot"&gt;@greenkeeperio-bot&lt;/a&gt; (Greenkeeper)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/haadcode"&gt;@haadcode&lt;/a&gt; (Haad)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/harlantwood"&gt;@harlantwood&lt;/a&gt; (Harlan T Wood)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ianopolous"&gt;@ianopolous&lt;/a&gt; (Ian Preston)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ingokeck"&gt;@ingokeck&lt;/a&gt; (Ingo Keck)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jbenet"&gt;@jbenet&lt;/a&gt; (Juan Benet)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jwsher"&gt;@jwsher&lt;/a&gt; (Justin Sher)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/kalmi"&gt;@kalmi&lt;/a&gt; (Tarnay Kálmán)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/kevina"&gt;@kevina&lt;/a&gt; (Kevin Atkinson)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/klartext"&gt;@klartext&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/kseistrup"&gt;@kseistrup&lt;/a&gt; (Klaus Alexander Seistrup)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Kubuxu"&gt;@Kubuxu&lt;/a&gt; (Jakub Sztandera)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lgierth"&gt;@lgierth&lt;/a&gt; (Lars Gierth)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lhenocque"&gt;@lhenocque&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lidel"&gt;@lidel&lt;/a&gt; (Marcin Rataj)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/luigiplr"&gt;@luigiplr&lt;/a&gt; (Luigi Poole)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/matshenricson"&gt;@matshenricson&lt;/a&gt; (Mats Henricson)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/MaxEntropyy"&gt;@MaxEntropyy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Mec-iS"&gt;@Mec-iS&lt;/a&gt; (Lorenzo)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mildred"&gt;@mildred&lt;/a&gt; (Mildred Ki'Lya)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Mithgol"&gt;@Mithgol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mlbk0"&gt;@mlbk0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mnp"&gt;@mnp&lt;/a&gt; (Mitchell Perilstein)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/montagsoup"&gt;@montagsoup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/nginnever"&gt;@nginnever&lt;/a&gt; (Nathan Ginnever)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/nicola"&gt;@nicola&lt;/a&gt; (Nicola Greco)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/noffle"&gt;@noffle&lt;/a&gt; (Stephen Whitmore)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/palkeo"&gt;@palkeo&lt;/a&gt; (palkeo)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; (Richard Littauer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/rinpoo"&gt;@rinpoo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/sahib"&gt;@sahib&lt;/a&gt; (Chris Pahl)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/se3000"&gt;@se3000&lt;/a&gt; (Steve Ellis)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/sexybiggetje"&gt;@sexybiggetje&lt;/a&gt; (Martijn de Boer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/sivachandran"&gt;@sivachandran&lt;/a&gt; (Sivachandran)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/slothbag"&gt;@slothbag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Stebalien"&gt;@Stebalien&lt;/a&gt; (Steven Allen)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/thelinuxkid"&gt;@thelinuxkid&lt;/a&gt; (Andres Buritica)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/thomas-gardner"&gt;@thomas-gardner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/wanderer"&gt;@wanderer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/wasserfuhr"&gt;@wasserfuhr&lt;/a&gt; (RainerWasserfuhr)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; (Jeromy Johnson)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/willglynn"&gt;@willglynn&lt;/a&gt; (Will Glynn)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/wking"&gt;@wking&lt;/a&gt; (W. Trevor King)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/xicombd"&gt;@xicombd&lt;/a&gt; (Francisco Baio Dias)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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 &lt;a href="//github.com/ipfs/weekly/issues/31"&gt;next weekly sprint issue&lt;/a&gt;! The more people mention items they want to see in the weekly there, the easier it is to make this and send it out.&lt;/p&gt;
&lt;p&gt;Thanks, and see you next week!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Richard Littauer&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Submit feedback about this issue &lt;a href="//github.com/ipfs/weekly/issues/29"&gt;here&lt;/a&gt;, or send us &lt;a href="//github.com/ipfs/weekly/issues/7"&gt;feedback about the IPFS Weekly in general&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</summary></entry><entry><title>IPFS Weekly 7</title><link href="/blog/12-ipfs-weekly-7" rel="alternate"></link><published>2016-03-17T00:00:00+01:00</published><author><name>Richard Littauer, Andrew Chin</name></author><id>tag:,2016-03-17:blog/12-ipfs-weekly-7</id><summary type="html">&lt;p&gt;&lt;a href="//ipfs.io/"&gt;IPFS&lt;/a&gt; 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 &lt;a href="//github.com/ipfs"&gt;GitHub&lt;/a&gt; or join us on &lt;a href="//webchat.freenode.net/?channels=ipfs"&gt;IRC&lt;/a&gt; (#ipfs on the Freenode network).&lt;/p&gt;
&lt;p&gt;If you would like to get this update as an email, sign up for our &lt;a href="//tinyletter.com/ipfsweekly"&gt;weekly newsletter&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Here are some of the highlights for the &lt;a href="//github.com/ipfs/pm/issues/97"&gt;second week of March&lt;/a&gt;:&lt;/p&gt;
&lt;h2 id="updates"&gt;Updates&lt;/h2&gt;
&lt;h3 id="orbit"&gt;&lt;a href="//github.com/haadcode/orbit"&gt;Orbit&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="//github.com/haadcode/orbit"&gt;Orbit&lt;/a&gt;, a distributed, peer-to-peer chat application built on IPFS, is back in active development and going through a major code base overhaul. It now uses &lt;a href="//github.com/haadcode/orbit-db"&gt;orbit-db&lt;/a&gt; as it's database layer. &lt;a href="//github.com/haadcode/orbit-db"&gt;orbit-db&lt;/a&gt; is a KV-store and Event Log on top of IPFS which allows developers to use IPFS as a database. Last week orbit-db got big performance and stability improvements and is now using CRDTs for eventual consistency.&lt;/p&gt;
&lt;h3 id="go-ipfs"&gt;&lt;a href="//github.com/ipfs/go-ipfs"&gt;Go-IPFS&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A nasty bug in our networking code was fixed this week. An issue in yamux (our primary stream multiplexer) would cause code to hang when opening a new stream if there were too many in flight stream opens. As a result of this, large file transfers (&lt;code&gt;ipfs refs -r&lt;/code&gt;, &lt;code&gt;ipfs get&lt;/code&gt;, and so on) would hang.&lt;/p&gt;
&lt;p&gt;IPFS 0.4.0 is now very close to shipping, we ran &lt;a href="//github.com/@dignifiedquire"&gt;@dignifiedquire&lt;/a&gt;'s &lt;a href="//github.com/dignifiedquire/randor"&gt;randor&lt;/a&gt; tool quite extensively and are more confident in the repo operations that have changed since 0.3.11. The release now has a &lt;a href="//github.com/ipfs/go-ipfs/issues/2334#issuecomment-195046511"&gt;somewhat short checklist of things&lt;/a&gt; that are blocking the official release.&lt;/p&gt;
&lt;p&gt;As a small side project, &lt;a href="//github.com/@whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; started benchmarking each of our possible datastore implementations with &lt;a href="//github.com/whyrusleeping/ds-bench"&gt;ds-bench&lt;/a&gt;. The results will help us improve the performance of our storage moving forward. On that same topic, he started an experiment in new and exciting datastores and wrote a &lt;a href="//github.com/whyrusleeping/sql-datastore"&gt;datastore implementation&lt;/a&gt; that can be backed by a sql database. &lt;a href="//github.com/@whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; then spun up a postgresql database (from docker) and ran the benchmarks against it, without any sort of tuning the &lt;a href="https://gist.github.com/whyrusleeping/55e2759dfa4b5b60a2cf"&gt;initial performance metrics&lt;/a&gt; showed that it was around three time as fast as our current on-disk datastore. (Note: the metrics are simply testing the performance of writing random 256k binary blobs to each datastore).&lt;/p&gt;
&lt;h3 id="js-multiaddr"&gt;&lt;a href="//github.com/jbenet/js-multiaddr"&gt;js-multiaddr&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;a href="//github.com/jbenet/js-multiaddr"&gt;js-multiaddr&lt;/a&gt; implementation was upgraded, now that it now matches go-ipfs features. What this means is that js-multiaddr now supports protocols that need to be encoded with varints. A varint is a integer that uses only the number of bytes it needs to be described by using a continuation bit (&lt;a href="http://web.stanford.edu/class/cs276/Jeff-Dean-compression-slides.pdf"&gt;more details&lt;/a&gt;). Before this addition, we were not able to declare http, websockets or even IPFS multiaddrs because these protocol have a code that doesn't fit in a byte - now we can. You can check the encoding table &lt;a href="//github.com/jbenet/js-multiaddr/blob/master/src/protocols.csv"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="mafmt"&gt;&lt;a href="//github.com/whyrusleeping/mafmt"&gt;mafmt&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="//github.com/whyrusleeping/mafmt"&gt;mafmt&lt;/a&gt;, a module that &lt;a href="//github.com/@whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; wrote and which stands for &lt;em&gt;multiaddr format&lt;/em&gt;, filters out different formats to use with certain transports. Thanks to &lt;a href="//github.com/@daviddias"&gt;@daviddias&lt;/a&gt;, this now does uTP and WebSockets validation, as well.&lt;/p&gt;
&lt;h3 id="libp2p-swarm"&gt;&lt;a href="//github.com/diasdavid/js-libp2p-swarm"&gt;libp2p-swarm&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The new &lt;a href="//github.com/diasdavid/js-libp2p-swarm"&gt;libp2p-swarm&lt;/a&gt; has been released; to reiterate last week, the module has been overauled to have a new API, to be agnostic about which transport an application has to use, and also to have more tests. This also exposes more internal processes, which makes error checking and logging more useful. Libp2p will eventually help users traverse IPFS for any node which allows their desired transport, meaning that we can have a more connected and less brittle web.&lt;/p&gt;
&lt;h2 id="community"&gt;Community&lt;/h2&gt;
&lt;p&gt;&lt;a href="//github.com/@jbenet"&gt;@jbenet&lt;/a&gt; was in Boston this week for consensus research discussions. While in Boston, &lt;a href="//github.com/@jbenet"&gt;@jbenet&lt;/a&gt; visited the &lt;a href="https://www.media.mit.edu/research/highlights/media-lab-digital-currency-initiative"&gt;Digital Currency Initiative&lt;/a&gt; at the MIT Media Lab, where he spoke about IPFS and its implications for blockchains, for digital publishing, and for access to information.&lt;/p&gt;
&lt;p&gt;&lt;a href="//github.com/c-base/ipfs-ringpin"&gt;c-base/ipfs-ringpin&lt;/a&gt; is a new set of tools for setting up an IPFS "file pinning ring" between multiple parties. This can be used, for example, for hackerspaces to provide redundancy by pinning each other's files. &lt;a href="//github.com/pipermerriam/ipfs-persistence-consortium"&gt;pipermerriam/ipfs-persistence-consortium&lt;/a&gt; and &lt;a href="//github.com/VictorBjelkholm/pincoop"&gt;VictorBjelkholm/pincoop&lt;/a&gt; do similar things.&lt;/p&gt;
&lt;p&gt;&lt;a href="//github.com/the-grid/jsjob-ethereum"&gt;the-gred/jsjob-ethereum&lt;/a&gt; is an experiment at creating a computational market on top of Ethereum. Computational jobs are run in a JavaScript sandbox, and both input data, the algorithm to run, and the produced results are shared over IPFS.&lt;/p&gt;
&lt;p&gt;&lt;a href="//github.com/@jbenet"&gt;@jbenet&lt;/a&gt; gave a talk &lt;a href="http://www.infoq.com/presentations/data-ipfs-ipld"&gt;titled Datastructures In and On IPFS&lt;/a&gt; at last year's &lt;a href="https://qconsf.com/sf2015/schedule/tabular"&gt;QCon SF&lt;/a&gt;. &lt;a href="http://www.infoq.com/presentations/data-ipfs-ipld"&gt;The video&lt;/a&gt; was released this week, so now you can all see it! The talk includes a typical introduction (skip if you know IPFS well), and then dives into datastructures, including Merkle Links, Mazieres links, how IPNS works, IPRS records, versioning, Keychain (PKI on IPFS), Persona (identity), and more.&lt;/p&gt;
&lt;p&gt;&lt;img alt="datastructures-talk-img" src="https://ipfs.io/ipfs/QmXXvH1dZnM5powG7BTJw71zrzGS5Rq2RFUr56apqKeDxx/007_talk.png" /&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href="//github.com/c-base/ipfs-deaddrop"&gt;IPFS powered USB deaddrop at c-base&lt;/a&gt; was demonstrated at the &lt;a href="https://logancij.com/schedule/"&gt;LoganCIJ 2016 Symposium&lt;/a&gt;, in the Investigative Journalism conference. &lt;a href="https://www.flickr.com/photos/bergie/sets/72157665764801046"&gt;More pictures here&lt;/a&gt;. If you want to build your own IPFS USB deaddrops, check out the c-base project here: &lt;a href="//github.com/c-base/ipfs-deaddrop"&gt;c-base/ipfs-deaddrop&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="c-base-deaddrop" src="https://ipfs.io/ipfs/QmXXvH1dZnM5powG7BTJw71zrzGS5Rq2RFUr56apqKeDxx/007_cbase_deaddrop.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://www.meetup.com/Copenhagen-IPFS-Meetup/"&gt;IPFS Copenhagen Meetup&lt;/a&gt; organized by &lt;a href="//github.com/@NeoTeo"&gt;@NeoTeo&lt;/a&gt; had another meeting a few days ago. If you're in the area, sign up at &lt;a href="http://www.meetup.com/Copenhagen-IPFS-Meetup"&gt;the Meetup.com page&lt;/a&gt; so you don't miss the next one!&lt;/p&gt;
&lt;p&gt;Several core IPFS developers will be in NYC from March 28th to April 8. We will be organizing an IPFS Meetup within that time frame. If you would like to come, please follow &lt;a href="//github.com/ipfs/community/issues/102"&gt;this github issue&lt;/a&gt; for the final details. If you would like to present, post in that issue.&lt;/p&gt;
&lt;h2 id="contributors"&gt;Contributors&lt;/h2&gt;
&lt;p&gt;Across the entire IPFS GitHub organization, the following people have committed code, created issues, or made a comment on GitHub between March 7th (noon, GMT) and March 14th. We're autogenerating this list using &lt;a href="//github.com/ipfs/weekly/blob/master/tools/get_commits.py"&gt;this tool&lt;/a&gt; and &lt;a href="//github.com/richardlitt/name-your-contributors"&gt;this other tool&lt;/a&gt;, so please let us know if your name isn't here.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/42"&gt;@42&lt;/a&gt; (42 Coffee Cups)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/aaannndddyyy"&gt;@aaannndddyyy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/adamc199"&gt;@adamc199&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/anarcat"&gt;@anarcat&lt;/a&gt; (anarcat)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/atondwal"&gt;@atondwal&lt;/a&gt; (Anish Tondwalkar)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/basilmon92"&gt;@basilmon92&lt;/a&gt; (Basil M Kuriakose)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/bergie"&gt;@bergie&lt;/a&gt; (Henri Bergius)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/brailateo"&gt;@brailateo&lt;/a&gt; (Constantin Teodorescu)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/candeira"&gt;@candeira&lt;/a&gt; (Javier Candeira)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/chpio"&gt;@chpio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/chriscool"&gt;@chriscool&lt;/a&gt; (Christian Couder)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/christianlundkvist"&gt;@christianlundkvist&lt;/a&gt; (Christian Lundkvist)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/clkao"&gt;@clkao&lt;/a&gt; (Chia-liang Kao)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Crest"&gt;@Crest&lt;/a&gt; (Crest)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/cryptix"&gt;@cryptix&lt;/a&gt; (Henry)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/davidar"&gt;@davidar&lt;/a&gt; (David A Roberts)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/DavidBooher"&gt;@DavidBooher&lt;/a&gt; (David Booher)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/deawar"&gt;@deawar&lt;/a&gt; (Dean Warren)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/deb0ch"&gt;@deb0ch&lt;/a&gt; (Thomas de Beauchêne)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; (David Dias)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt; (Friedel Ziegelmayer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/djdv"&gt;@djdv&lt;/a&gt; (Dominic Della Valle)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/doesntgolf"&gt;@doesntgolf&lt;/a&gt; (Nate Dobbins)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/dontspamm"&gt;@dontspamm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/dylanPowers"&gt;@dylanPowers&lt;/a&gt; (Dylan Powers)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/eminence"&gt;@eminence&lt;/a&gt; (Andrew Chin)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/greenkeeperio-bot"&gt;@greenkeeperio-bot&lt;/a&gt; (Greenkeeper)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/gritzko"&gt;@gritzko&lt;/a&gt; (Victor Grishchenko)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/haadcode"&gt;@haadcode&lt;/a&gt; (Haad)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/hutenosa"&gt;@hutenosa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ianopolous"&gt;@ianopolous&lt;/a&gt; (Ian Preston)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/icf20"&gt;@icf20&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Iyer-VivekAnand"&gt;@Iyer-VivekAnand&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jbenet"&gt;@jbenet&lt;/a&gt; (Juan Benet)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/klauswuestefeld"&gt;@klauswuestefeld&lt;/a&gt; (Klaus Wuestefeld)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/knocte"&gt;@knocte&lt;/a&gt; (Andres G. Aragoneses)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/krl"&gt;@krl&lt;/a&gt; (kristoffer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Kubuxu"&gt;@Kubuxu&lt;/a&gt; (Jakub Sztandera)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/kyledrake"&gt;@kyledrake&lt;/a&gt; (Kyle Drake)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lamarpavel"&gt;@lamarpavel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lgarron"&gt;@lgarron&lt;/a&gt; (Lucas Garron)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lgierth"&gt;@lgierth&lt;/a&gt; (Lars Gierth)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lhenocque"&gt;@lhenocque&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/loadletter"&gt;@loadletter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/matshenricson"&gt;@matshenricson&lt;/a&gt; (Mats Henricson)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mattseh"&gt;@mattseh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/micahredding"&gt;@micahredding&lt;/a&gt; (Micah Redding)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/MichaelMure"&gt;@MichaelMure&lt;/a&gt; (Michael Muré)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/micxjo"&gt;@micxjo&lt;/a&gt; (Micxjo Funkcio)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mildred"&gt;@mildred&lt;/a&gt; (Mildred Ki'Lya)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Mithgol"&gt;@Mithgol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mklarmann"&gt;@mklarmann&lt;/a&gt; (mklarmann)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mnp"&gt;@mnp&lt;/a&gt; (Mitchell Perilstein)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/moritz121"&gt;@moritz121&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/myleshorton"&gt;@myleshorton&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Nadziv"&gt;@Nadziv&lt;/a&gt; (Shahinaz)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/nginnever"&gt;@nginnever&lt;/a&gt; (Nathan Ginnever)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/nicola"&gt;@nicola&lt;/a&gt; (Nicola Greco)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/noffle"&gt;@noffle&lt;/a&gt; (Stephen Whitmore)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/obvio171"&gt;@obvio171&lt;/a&gt; (Helder Ribeiro)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/pietsch"&gt;@pietsch&lt;/a&gt; (Christian Pietsch)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/plungu"&gt;@plungu&lt;/a&gt; (Paul Lungu)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/pokeball99"&gt;@pokeball99&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/polycopter"&gt;@polycopter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/rht"&gt;@rht&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; (Richard Littauer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/rsynnest"&gt;@rsynnest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/SCBuergel"&gt;@SCBuergel&lt;/a&gt; (Sebastian C. Bürgel)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/sdockray"&gt;@sdockray&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/sexybiggetje"&gt;@sexybiggetje&lt;/a&gt; (Martijn de Boer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/shalnoff"&gt;@shalnoff&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/sivachandran"&gt;@sivachandran&lt;/a&gt; (Sivachandran)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/skippa"&gt;@skippa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/slothbag"&gt;@slothbag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/sptankard"&gt;@sptankard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Stebalien"&gt;@Stebalien&lt;/a&gt; (Steven Allen)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/suisha"&gt;@suisha&lt;/a&gt; (David Mai)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/thomas-gardner"&gt;@thomas-gardner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Unode"&gt;@Unode&lt;/a&gt; (Renato Alves)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/wasserfuhr"&gt;@wasserfuhr&lt;/a&gt; (RainerWasserfuhr)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; (Jeromy Johnson)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/xicombd"&gt;@xicombd&lt;/a&gt; (Francisco Baio Dias)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/yncyrydybyl"&gt;@yncyrydybyl&lt;/a&gt; (Yan Minagawa)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/yuvallanger"&gt;@yuvallanger&lt;/a&gt; (Yuval Langer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/yuy168"&gt;@yuy168&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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 &lt;a href="//github.com/ipfs/pm/issues/97"&gt;weekly sprint issue&lt;/a&gt;! The more people mention items they want to see in the weekly there, the easier it is to make this and send it out.&lt;/p&gt;
&lt;p&gt;Thanks, and see you next week!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Richard Littauer and Andrew Chin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Submit feedback about this issue &lt;a href="//github.com/ipfs/weekly/issues/27"&gt;here&lt;/a&gt;, or send us &lt;a href="//github.com/ipfs/weekly/issues/7"&gt;feedback about the IPFS Weekly in general&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</summary></entry><entry><title>IPFS Weekly 6</title><link href="/blog/11-ipfs-weekly-6" rel="alternate"></link><published>2016-03-09T00:00:00+01:00</published><author><name>Richard Littauer, Andrew Chin</name></author><id>tag:,2016-03-09:blog/11-ipfs-weekly-6</id><summary type="html">&lt;p&gt;&lt;a href="https://ipfs.io/"&gt;IPFS&lt;/a&gt; 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 &lt;a href="https://github.com/ipfs"&gt;GitHub&lt;/a&gt; or join us on &lt;a href="https://webchat.freenode.net/?channels=ipfs"&gt;IRC&lt;/a&gt; (#ipfs on the Freenode network).&lt;/p&gt;
&lt;p&gt;If you would like to get this update as an email, sign up for our &lt;a href="https://tinyletter.com/ipfsweekly"&gt;weekly newsletter&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Here are some of the highlights for the &lt;a href="https://github.com/ipfs/pm/issues/93"&gt;first week of March&lt;/a&gt;:&lt;/p&gt;
&lt;h2 id="updates"&gt;Updates&lt;/h2&gt;
&lt;h4 id="station"&gt;&lt;a href="https://github.com/ipfs/station"&gt;&lt;strong&gt;station&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img alt="Station" src="https://ipfs.io/ipfs/QmZV7iGTu91w1YePo1EG98siCPxPFrw9Uzf7wAmARusET5" /&gt;&lt;/p&gt;
&lt;p&gt;The new version of &lt;a href="https://github.com/ipfs/station"&gt;station&lt;/a&gt; is ready for developer preview! &lt;code&gt;station&lt;/code&gt; is one of the easiest ways to get an IPFS daemon running on your machine. It acts as a service and you get many convenient features, such as the ability to turn an IPFS node on through a GUI and drag and drop to share through IPFS. To try it out, you need Node.js 4 (&lt;a href="https://nodejs.org/en/"&gt;installation instructions here&lt;/a&gt;) and npm 3 (which comes with Node) installed. Then, do the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;gt; git clone https://github.com/ipfs/station.git &amp;amp;&amp;amp; cd station
&amp;gt; npm install
&amp;gt; npm start
&lt;/pre&gt;&lt;/div&gt;


&lt;h4 id="website"&gt;&lt;a href="https://github.com/ipfs/website"&gt;&lt;strong&gt;website&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The list of &lt;a href="https://ipfs.io/docs/commands/"&gt;API Commands&lt;/a&gt; on the website has been updated. This provides a single place to look through all of the CLI commands for go-ipfs, at once; it is a good reference point if you're not sure exactly which command to use next, and &lt;code&gt;ipfs commands&lt;/code&gt; seems sparse.&lt;/p&gt;
&lt;h4 id="aur"&gt;&lt;strong&gt;AUR&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://github.com/Kubuxu"&gt;@Kubuxu&lt;/a&gt; has made sure that &lt;code&gt;gx&lt;/code&gt;, &lt;code&gt;gx-go&lt;/code&gt;, and &lt;code&gt;ipget&lt;/code&gt; are available on &lt;a href="https://aur.archlinux.org"&gt;AUR&lt;/a&gt;, the arch-linux user repository. This means that it will be easier to get and install these on some linux platforms.&lt;/p&gt;
&lt;h4 id="karma-peer"&gt;&lt;a href="https://github.com/dignifiedquire/karma-peer"&gt;&lt;strong&gt;karma-peer&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt;'s work on &lt;a href="https://github.com/dignifiedquire/karma-peer"&gt;karma-peer&lt;/a&gt; means that it now has the ability to dynamically launch browsers, which will help &lt;a href="https://github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; (and hopefully more people!) write better tests for P2P browser applications. See an example of some tests, &lt;a href="https://github.com/dignifiedquire/karma-peer/blob/master/test/index.spec.js"&gt;here&lt;/a&gt;. You can also read &lt;a href="https://github.com/diasdavid/piri-piri#why-does-it-exist"&gt;the discussion&lt;/a&gt; that lead to this module and the original tool to test P2P browser applications.&lt;/p&gt;
&lt;h4 id="randor"&gt;&lt;a href="http:https://github.com/dignifiedquire/randor"&gt;&lt;strong&gt;randor&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt; has been working on &lt;a href="http:https://github.com/dignifiedquire/randor"&gt;randor&lt;/a&gt;, a testing framework that will be able to send huge files and lots of requests into IPFS in order to test how it works for edge cases and how it scales. Randor is now able to rerun tests predictably based on stored data, so it's easy to find and fix bugs. &lt;a href="https://github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; is already working on the first bug that randor detected. To contribute, check out the repository.&lt;/p&gt;
&lt;h4 id="webrtc-explorer"&gt;&lt;a href="https://github.com/diasdavid/webrtc-explorer"&gt;&lt;strong&gt;WebRTC Explorer&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;WebRTC Explorer 2.0.0 has been alpha released! WebRTC Explorer is a P2P Routing Overlay Network, using WebRTC Data Channels as the transportation layer between nodes. WebRTC Explorer enables communication between browsers without needing mediators (servers), enabling users to route packets between machines, using only Web technologies. WebRTC Explorer is inspired by the Chord DHT, to create a routing scheme with finger tables that are evenly balanced across nodes. &lt;a href="https://github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; wrote up a more extensive &lt;a href="http://blog.daviddias.me/2016/02/28/webrtc-explorer-2-0-0-alpha-release"&gt;blog post here&lt;/a&gt;, and has an introductory video &lt;a href="https://youtu.be/fNQGGGE__zI"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id="libp2p"&gt;&lt;a href="https://github.com/diasdavid/js-libp2p"&gt;&lt;strong&gt;libp2p&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; released versions of two modules for stream multiplexing: &lt;a href="https://github.com/diasdavid/js-libp2p-spdy"&gt;libp2p-spdy&lt;/a&gt; and &lt;a href="https://github.com/diasdavid/js-libp2p-multiplex"&gt;libp2p-multiplex&lt;/a&gt;. As well, &lt;a href="https://github.com/diasdavid/js-libp2p-swarm"&gt;libp2p-swarm&lt;/a&gt; has a new API, more tests, less magic, and more flexibility. There is an open PR to track these changes; if you'd like to get involved, &lt;a href="https://github.com/diasdavid/js-libp2p-swarm/pull/20"&gt;follow it&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id="js-ipfs"&gt;&lt;a href="https://github.com/ipfs/js-ipfs"&gt;&lt;strong&gt;js-ipfs&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Some of you have been asking about ways to contribute to the JavaScript implementation of IPFS: well, wait no more! Now you can read the latest &lt;a href="https://github.com/ipfs/js-ipfs/issues/30#issuecomment-187950929"&gt;captain.log&lt;/a&gt; entry and learn about the state of the project and have a list of issues of things that you can contribute. We appreciate all your help.&lt;/p&gt;
&lt;h4 id="ipfs-pad"&gt;&lt;strong&gt;ipfs-pad&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;We want to build an Etherpad-like product on top of IPFS. There's a lot of
technical ground to cover to do this: how do we know how to sort edits? How do
we deal with high latencies (days/weeks), or with simultaneous edits? How is the
data transported? &lt;a href="https://github.com/noffle"&gt;@noffle&lt;/a&gt; has been spearheading the process behind building
this, and this week made a host of modules to resolve some of its dependencies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/noffle/bisecting-numbers"&gt;bisecting-numbers&lt;/a&gt; -
  Integer-like number system where any number can be bisected to form infinite
  integer subsystems.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/noffle/bisecting-between"&gt;bisecting-between&lt;/a&gt; - Produces a
  unique value that sorts between two other given values.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/noffle/hyperswarm"&gt;hyperswarm&lt;/a&gt; - Create a p2p webrtc swarm
  around a &lt;a href="https://github.com/mafintosh/hyperlog"&gt;hyperlog&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(He also wrote a little &lt;a href="https://github.com/noffle/generate-readme"&gt;README
generator&lt;/a&gt; to help him out with his
JS module READMEs.)&lt;/p&gt;
&lt;h4 id="pubsub"&gt;&lt;strong&gt;pubsub&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://github.com/noffle"&gt;@noffle&lt;/a&gt; also published a couple of early mad science modules that enable a
peer-to-peer overlay network for gossip-based message exchange. These aren't
strictly built for IPFS, but are an experimental shim to enable projects like
&lt;a href="https://github.com/haad"&gt;@haad&lt;/a&gt;'s &lt;a href="https://github.com/haadcode/orbit-db"&gt;orbit-db&lt;/a&gt; to operate without a
central server for message exchange between peers.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/noffle/secure-gossip"&gt;secure-gossip&lt;/a&gt; - Secure, transport
  agnostic, message gossip protocol. Any peer in the network can publish
  messages, which will eventually propagate to the entire network via rounds of
  gossip between each node's peers.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/noffle/pubsub-swarm"&gt;pubsub-swarm&lt;/a&gt; - Form a p2p swarm of
  nodes around a topic and exchange messages, with a traditional pubsub API.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="go-ipfs"&gt;&lt;a href="https://github.com/ipfs/go-ipfs"&gt;&lt;strong&gt;go-ipfs&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; set up &lt;a href="https://www.jetbrains.com/teamcity/"&gt;Teamcity&lt;/a&gt;. This cuts down on the long waits for Travis to run, and hopefully will mean faster CI tests. Teamcity also gives us awesome metrics on our tests and nice statistics on failures and failure rates. Teamcity has nice integration with a large array of test runners, from go tests to karma and sharness. It will give us more detailed feedback about our test runs, even when successful.&lt;/p&gt;
&lt;h4 id="fc00"&gt;&lt;a href="https://github.com/fc00/spec"&gt;&lt;strong&gt;fc00&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img alt="lgierth in Paris" src="https://ipfs.io/ipfs/QmYBv9R3nHMm8XnTHuNhFDJeQxSE9g3G4edpL13eAje3Cc" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/lgierth"&gt;@lgierth&lt;/a&gt; spent a productive week in Paris, and chatted with &lt;a href="https://github.com/cjdelisle"&gt;@cjdelisle&lt;/a&gt; and &lt;a href="https://github.com/ansuz"&gt;@ansuz&lt;/a&gt; at &lt;a href="https://twitter.com/xwiki"&gt;@xwiki&lt;/a&gt; about the state and future of cjdns/fc00, layed out ideas for routing improvements, and drafted spec documents for the switch and cryptoauth layers. You can find those specs &lt;a href="https://github.com/fc00/spec/pulls"&gt;here&lt;/a&gt; (they'll be updated soon). Work will continue on these for the rest of March. The switch and routing layers of fc00 might be the foundation of a smarter swarm for IPFS/libp2p, so this is all very exciting.&lt;/p&gt;
&lt;h2 id="community"&gt;Community&lt;/h2&gt;
&lt;h4 id="name-your-contributors"&gt;&lt;a href="https://github.com/RichardLitt/name-your-contributors"&gt;&lt;strong&gt;name-your-contributors&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; gave a talk at &lt;a href="http://bostonjs.com/"&gt;BostonJS&lt;/a&gt; on Thursday to around fifty people, about how the &lt;code&gt;name-your-contributors&lt;/code&gt; module is used in this newsletter. The theme of the meetup was community building; if you have any ideas for improving the Contributor list below, check out &lt;a href="github.com/RichardLitt/name-your-contributors"&gt;this repository&lt;/a&gt; and let us know. Since the talk, &lt;a href="https://github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; also added &lt;a href="https://github.com/RichardLitt/get-pr-creators"&gt;get-pr-creators&lt;/a&gt; to the module, so that everyone who opens a PR (even if it isn't merged) gets added to the contributors list. Has your name been included?&lt;/p&gt;
&lt;h4 id="dignifed-hacks"&gt;&lt;strong&gt;dignifed hacks&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt; launched a live-stream of him coding, which he is calling "dignified hacks". Last Monday he recorded himself doing a new feature for the &lt;a href="https://github.com/ipfs/webui"&gt;WebUI&lt;/a&gt; in the first episode. He'll do another one this week. One of the viewers, &lt;a href="https://github.com/nginnever"&gt;@nginnever&lt;/a&gt;, said it "was helpful for a quick view of our components and data flow in the webui." He will announce regular showtimes on &lt;a href="https://twitter.com/dignifiedquire"&gt;Twitter&lt;/a&gt; and you can subscribe to &lt;a href="https://www.youtube.com/channel/UCdjsUXJ3QawK4O5L1kqqsew"&gt;IPFS on YouTube&lt;/a&gt; where future episodes will be hosted.&lt;/p&gt;
&lt;h4 id="lisbon-blockchain-workshop"&gt;&lt;a href="http://www.meetup.com/Lisbon-blockchain"&gt;&lt;strong&gt;Lisbon Blockchain Workshop&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; participated on the last Lisbon Blockchain Workshop on March 5, hosted by Kwamecorp. The workshop gathered many Blockchain, IPFS, ethereum and zerocash enthusiasts that were organized in working groups to build solutions with these distributed technologies.&lt;/p&gt;
&lt;h4 id="ipfs-dead-drop"&gt;&lt;a href="https://github.com/c-base/ipfs-deaddrop"&gt;IPFS Dead drop&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img alt="cbase deadrop" src="https://ipfs.io/ipfs/QmTK8Djb6hFfHD3hGLv4w3RRYsZXLsTkQ4hYzXuM7ba3Sk" title="Photo taken and cropped from https://www.flickr.com/photos/bergie/24769765569/in/datetaken-public/" /&gt;&lt;/p&gt;
&lt;p&gt;Some members of &lt;a href="http://www.c-base.org/"&gt;c-base&lt;/a&gt; have written a dead drop-like system that automatically uploads files from a USB memory stick to IPFS. When you plug a USB memory into the device, it will automatically access the memory stick and publish all the files on the web. Thanks to IPFS the files are instantly available to the whole world. Check out &lt;a href="https://deaddrops.com/"&gt;deaddrops.com&lt;/a&gt; for more information about dead drops.&lt;/p&gt;
&lt;p&gt;They also have an installation available: the node is run in the above device. When you plug it in, you get to &lt;a href="https://www.flickr.com/photos/bergie/24857415123/in/datetaken-public/"&gt;see this&lt;/a&gt;, too. If you're in Berlin or visiting soon, make sure to drop by.&lt;/p&gt;
&lt;h4 id="interplanetary-wayback-ipwb"&gt;Interplanetary Wayback (IPWB)&lt;/h4&gt;
&lt;p&gt;At &lt;a href="https://artsweb.uwaterloo.ca/archivesunleashed/"&gt;Archives Unleashed&lt;/a&gt;, a Web Archive Hackathon in Toronto, &lt;a href="https://twitter.com/machawk1"&gt;Mat Kelly&lt;/a&gt; (@machawk1) and &lt;a href="https://twitter.com/ibnesayeed"&gt;Sawood Alam&lt;/a&gt; (@ibnesayeed) from &lt;a href="https://github.com/oduwsdl"&gt;ODU WSDL Research Group&lt;/a&gt; developed an IPFS based distributed and persistent archive replay system called &lt;a href="https://github.com/oduwsdl/ipwb"&gt;Interplanetary Wayback&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id="science-data"&gt;&lt;strong&gt;Science Data&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;@jbenet visited the &lt;a href="https://www.janelia.org"&gt;Janelia Research Campus&lt;/a&gt; to learn about scientific data tools and use cases. He gave a talk about IPFS, data versioning, package management, and more (video forthcoming). He learned about &lt;a href="https://github.com/janelia-flyem/dvid"&gt;DVID&lt;/a&gt;, and the requirements of the amazing &lt;a href="https://www.janelia.org/project-team/flyem"&gt;FlyEM brain imaging effort&lt;/a&gt;. He got to see many fantastic open source research tools made by the &lt;a href="https://www.janelia.org/project-team/flyem"&gt;FlyEM Team&lt;/a&gt; (&lt;a href="https://github.com/janelia-flyem"&gt;github&lt;/a&gt;), the &lt;a href="http://thefreemanlab.com/"&gt;Freeman Lab&lt;/a&gt; (&lt;a href="https://github.com/freeman-lab"&gt;github&lt;/a&gt;), and other groups. Go check out their GitHub repos, and help them improve brain research!&lt;/p&gt;
&lt;h4 id="press"&gt;&lt;strong&gt;Press&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://www.sitepoint.com/author/jeffsmith/"&gt;Jeff Smith&lt;/a&gt; of Sitepoint released a great article on IPFS: &lt;a href="http://www.sitepoint.com/http-vs-ipfs-is-peer-to-peer-sharing-the-future-of-the-web/"&gt;"HTTP vs IPFS: is Peer-to-Peer Sharing the Future of the Web?"&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="contributors"&gt;Contributors&lt;/h2&gt;
&lt;p&gt;Across the entire IPFS GitHub organization, the following people have committed code, created issues, or made a comment on GitHub between February 29th (noon, GMT) and March 7th. We're autogenerating this list using &lt;a href="https://github.com/ipfs/weekly/blob/master/tools/get_commits.py"&gt;this tool&lt;/a&gt; and &lt;a href="https://github.com/richardlitt/name-your-contributors"&gt;this other tool&lt;/a&gt;, so please let us know if your name isn't here.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/adrian-bl"&gt;@adrian-bl&lt;/a&gt; (Adrian Ulrich)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/amstocker"&gt;@amstocker&lt;/a&gt; (Andrew Stocker)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/anarcat"&gt;@anarcat&lt;/a&gt; (anarcat)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Beligertint"&gt;@Beligertint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bergie"&gt;@bergie&lt;/a&gt; (Henri Bergius)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/cevin"&gt;@cevin&lt;/a&gt; (cevin)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/chriscool"&gt;@chriscool&lt;/a&gt; (Christian Couder)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/cinderblock"&gt;@cinderblock&lt;/a&gt; (Cameron Tacklind)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/clkao"&gt;@clkao&lt;/a&gt; (Chia-liang Kao)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/daveajones"&gt;@daveajones&lt;/a&gt; (Dave Jones)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/davidar"&gt;@davidar&lt;/a&gt; (David A Roberts)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; (David Dias)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt; (Friedel Ziegelmayer)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/greenkeeperio-bot"&gt;@greenkeeperio-bot&lt;/a&gt; (Greenkeeper)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/hjoest"&gt;@hjoest&lt;/a&gt; (Holger Joest)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jbenet"&gt;@jbenet&lt;/a&gt; (Juan Benet)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jedahan"&gt;@jedahan&lt;/a&gt; (Jonathan Dahan)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/knocte"&gt;@knocte&lt;/a&gt; (Andres G. Aragoneses)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Kolomona"&gt;@Kolomona&lt;/a&gt; (Kolomona Myer)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Kubuxu"&gt;@Kubuxu&lt;/a&gt; (Jakub Sztandera)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lgierth"&gt;@lgierth&lt;/a&gt; (Lars Gierth)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mappum"&gt;@mappum&lt;/a&gt; (ᴍᴀᴛᴛ ʙᴇʟʟ)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mattseh"&gt;@mattseh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/MichaelMure"&gt;@MichaelMure&lt;/a&gt; (Michael Muré)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/micxjo"&gt;@micxjo&lt;/a&gt; (Micxjo Funkcio)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mildred"&gt;@mildred&lt;/a&gt; (Mildred Ki'Lya)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/moritz121"&gt;@moritz121&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/NeoTeo"&gt;@NeoTeo&lt;/a&gt; (Teo Sartori)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Neurone"&gt;@Neurone&lt;/a&gt; (Giuseppe Bertone)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nginnever"&gt;@nginnever&lt;/a&gt; (Nathan Ginnever)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/noffle"&gt;@noffle&lt;/a&gt; (Stephen Whitmore)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/peteygao"&gt;@peteygao&lt;/a&gt; (Peter Gao)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/randomshinichi"&gt;@randomshinichi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; (Richard Littauer)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/richardschneider"&gt;@richardschneider&lt;/a&gt; (Richard Schneider)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sivachandran"&gt;@sivachandran&lt;/a&gt; (Sivachandran)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/suisha"&gt;@suisha&lt;/a&gt; (David Mai)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/thelinuxkid"&gt;@thelinuxkid&lt;/a&gt; (Andres Buritica)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tinybike"&gt;@tinybike&lt;/a&gt; (Jack Peterson)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; (Jeromy Johnson)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/xicombd"&gt;@xicombd&lt;/a&gt; (Francisco Baio Dias)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/yangwao"&gt;@yangwao&lt;/a&gt; (Matej Nemček)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/yncyrydybyl"&gt;@yncyrydybyl&lt;/a&gt; (Yan Minagawa)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/zignig"&gt;@zignig&lt;/a&gt; (Simon Kirkby)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Zogg"&gt;@Zogg&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This newsletter is also a community effort. If you have cool things to share for the next weekly, drop a comment about it in &lt;a href="https://github.com/ipfs/weekly"&gt;the weekly repo&lt;/a&gt;! The more people mention items they want to see in the weekly there, the easier it is to make this and send it out.&lt;/p&gt;
&lt;p&gt;Thanks, and see you next week!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Richard Littauer and Andrew Chin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Submit feedback about this issue &lt;a href="https://github.com/ipfs/weekly/issues/24"&gt;here&lt;/a&gt;, or send us &lt;a href="https://github.com/ipfs/weekly/issues/8"&gt;feedback about the IPFS Weekly in general&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</summary></entry><entry><title>IPFS Weekly 5</title><link href="/blog/10-ipfs-weekly-5" rel="alternate"></link><published>2016-03-04T00:00:00+01:00</published><author><name>Richard Littauer, Andrew Chin</name></author><id>tag:,2016-03-04:blog/10-ipfs-weekly-5</id><summary type="html">&lt;p&gt;&lt;a href="//ipfs.io/"&gt;IPFS&lt;/a&gt; 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 &lt;a href="//github.com/ipfs"&gt;GitHub&lt;/a&gt; or join us on &lt;a href="//webchat.freenode.net/?channels=ipfs"&gt;IRC&lt;/a&gt; (#ipfs on the Freenode network).&lt;/p&gt;
&lt;p&gt;If you would like to get this update as an email, sign up for our &lt;a href="//tinyletter.com/ipfsweekly"&gt;weekly newsletter&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;This weekly covers the last month. Here are some of the highlights for the February sprints!&lt;/p&gt;
&lt;h2 id="highlight"&gt;Highlight&lt;/h2&gt;
&lt;p&gt;&lt;img alt="" src="https://cdn-images-1.medium.com/max/2000/1*czZJ7mvEAqL4wNAg-jt9Ow.jpeg" /&gt;&lt;/p&gt;
&lt;p&gt;Our friends and users at ConsenSys wrote an excellent "&lt;a href="https://medium.com/@ConsenSys/an-introduction-to-ipfs-9bba4860abd0#.48ki3fymw"&gt;Introduction to IPFS&lt;/a&gt;", which starts with a less-technical preface, and then dives deep into a full explanation of how the IPFS object model works. It walks through multiple examples, including directory structures, version control systems, and blockchains. This is a great post to familiarize yourself with how the low level IPFS objects work, with graph visualizations and in-depth explanations. It also features a fantastic cover image! Thanks &lt;a href="https://twitter.com/ChrisLundkvist"&gt;@ChrisLundkvist&lt;/a&gt; and &lt;a href="https://twitter.com/ConsenSysAndrew"&gt;@ConsenSysAndrew&lt;/a&gt;!&lt;/p&gt;
&lt;h2 id="updates"&gt;Updates&lt;/h2&gt;
&lt;h4 id="go-ipfs"&gt;&lt;a href="//github.com/ipfs/go-ipfs"&gt;&lt;strong&gt;go-ipfs&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/lgierth"&gt;@lgierth&lt;/a&gt; improved the automated &lt;a href="https://github.com/ipfs/go-ipfs/pull/2308"&gt;docker image&lt;/a&gt; for go-ipfs, which is now named &lt;code&gt;ipfs/go-ipfs&lt;/code&gt;. Give it a try: &lt;code&gt;docker run -i --net=host ipfs/go-ipfs&lt;/code&gt;. The new image is built automatically for every commit, and has automatic tags for the coming releases. It's also a few MB smaller, and doesn't require mounting a volume for the IPFS repository anymore. Instead, if there's no volume mounted, it'll generate an ephemeral identity and configuration which will be lost when the container exits. This is ideal for testing or just trying something out real quick. Images for go-ipfs 0.3.x are not provided, because the Dockerfile shipped with these version isn't suitable for Docker Hub automatic builds.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/noffle"&gt;@noffle&lt;/a&gt;, &lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; and &lt;a href="//github.com/chriscool"&gt;@chriscool&lt;/a&gt; have been improving the test suite, fixing flaky tests which used to fail inaccurately. This will let us merge PRs faster, as CI should correctly categorize success and failure.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/noffle"&gt;@noffle&lt;/a&gt; also made progress toward getting &lt;code&gt;go-ipfs&lt;/code&gt; compatible with vanilla &lt;code&gt;go get&lt;/code&gt; installation. Hope to have more tangible results to show by end of the month.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; made a lot of documentation fixes to the CLI while working on the IPFS HTTP API.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/chriscool"&gt;@chriscool&lt;/a&gt; rewrote &lt;a href="//github.com/ipfs/go-ipfs/blob/master/docs/windows.md"&gt;the build documentation for Windows&lt;/a&gt;, which enabled &lt;a href="//github.com/slothbag"&gt;@slothbag&lt;/a&gt; to get Windows builds working again with minimal fuss.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lgierth"&gt;@lgierth&lt;/a&gt; posted a writeup on the &lt;a href="https://ipfs.io/blog/9-v04x-migration/"&gt;migration from 0.3.x to 0.4.0&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/noffle"&gt;@noffle&lt;/a&gt; improved FUSE connection termination.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="gx"&gt;&lt;a href="//github.com/whyrusleeping"&gt;&lt;strong&gt;GX&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; shipped a PR that introduces the use of a tool called &lt;code&gt;gx&lt;/code&gt;, for vendoring our project dependencies. Previously we used godeps, and saved all of the code required indirectly to build ipfs in the go-ipfs repository itself. This was very difficult to work with for a few different reasons, first off, it made the size of the repository bloat way more than the original size of our codebase, causing clones to take longer, and making CI slower all around. Second, updating these dependencies was a hassle: this was partially the fault of go's poor package management choices and partially that we found godeps UX to be unfriendly. To solve the problem, &lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; create gx. Gx is a package management tool based on ipfs. Package references are all hashes linked in a merkletree, and resolving all the dependencies of a given project is as easy as an ipfs fetch. Now that we are using gx, the main go-ipfs repo is much smaller, dependencies can be easily fetched and installed (and shared across projects), and we also get to essentially bootstrap ipfs with ipfs.&lt;/p&gt;
&lt;p&gt;From the average users perspective, there are a few small changes; &lt;code&gt;go get&lt;/code&gt; is no longer a viable way to install ipfs, and users will now need to run &lt;code&gt;make install&lt;/code&gt; as is common on other large golang projects (docker and kubernetes among them). You can read more about gx over here at its repo: &lt;a href="//github.com/whyrusleeping/gx"&gt;github.com/whyrusleeping/gx&lt;/a&gt; and about gx-go (the subtool of gx specifically for go) here: &lt;a href="//github.com/whyrusleeping/gx-go"&gt;github.com/whyrusleeping/gx-go&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="//github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; improved the &lt;code&gt;gx&lt;/code&gt; README document to better explain its goals, and help people get started. Take a look and give us feedback through an issue if you think anything could be improved.&lt;/p&gt;
&lt;h4 id="ipns-pub"&gt;&lt;a href="//github.com/whyrusleeping/ipns-pub"&gt;&lt;strong&gt;ipns-pub&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; wrote  a tool called &lt;code&gt;ipns-pub&lt;/code&gt; to allow people to publish IPNS entries to the network without actually running a node. You can generate keypairs with &lt;a href="//github.com/whyrusleeping/ipfs-key"&gt;ipfs-key&lt;/a&gt; and then use those keys to publish any ipfs path you like. Be aware though that entries published with this tool expire every 24 hours, so to keep them alive on the network, the tool has a &lt;code&gt;--daemon&lt;/code&gt; option that will republish your entry every twelve hours automatically.&lt;/p&gt;
&lt;h4 id="specs"&gt;&lt;a href="//github.com/ipfs/specs/pull/37"&gt;&lt;strong&gt;specs&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The IPLD spec was merged, after months of thoughtful design. The bulk of the work was achieved by &lt;a href="//github.com/mildred"&gt;@mildred&lt;/a&gt; and &lt;a href="//github.com/jbenet"&gt;@jbenet&lt;/a&gt;, with lots of comments and design opinions from many other contributors. The &lt;a href="https://github.com/ipfs/specs/blob/master/merkledag/ipld.md"&gt;IPLD spec&lt;/a&gt;. The "thin-waist" Merkle DAG format, defines merkle-links, -dags, and -paths, as well as the IPLD Data model and formats. In short: JSON documents with named merkle-links that can be traversed. Stay tuned for more information in the future.&lt;/p&gt;
&lt;h4 id="http-api-spec"&gt;&lt;a href="//github.com/ipfs/http-api-spec"&gt;&lt;strong&gt;http-api-spec&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="//github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; finished logging all existing &lt;code&gt;ipfs&lt;/code&gt; commands for the HTTP API Spec. This means that if you have any questions about how the HTTP API should work, you can see them either in master or as open PRs to that issue. If you are interested in how the HTTP API should work, or have any specific questions, please see the &lt;a href="//github.com/ipfs/http-api-spec/blob/master/apiary.apib"&gt;current version&lt;/a&gt;, and explore the &lt;a href="https://github.com/ipfs/http-api-spec/pulls"&gt;open PRs&lt;/a&gt; on that repo.&lt;/p&gt;
&lt;h4 id="distributions"&gt;&lt;a href="//github.com/ipfs/distributions"&gt;&lt;strong&gt;distributions&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://dist.ipfs.io/"&gt;dist.ipfs.io&lt;/a&gt; &lt;em&gt;almost&lt;/em&gt; has &lt;a href="https://github.com/ipfs/distributions/pull/51"&gt;signed releases&lt;/a&gt; thanks to &lt;a href="//github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt;. This will be coming soon.&lt;/p&gt;
&lt;h4 id="js-ipfs"&gt;&lt;a href="//github.com/ipfs/js-ipfs"&gt;&lt;strong&gt;js-ipfs&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Thanks to &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt;, the DAG object manipulation commands now work, with tests and all. As well, thanks to &lt;a href="//github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt;'s efforts, the js-ipfs API now returns promises if there isn't a specified callback, allowing both major methods used by the Javascript community to work equally well.&lt;/p&gt;
&lt;h4 id="registry-mirror"&gt;&lt;a href="//github.com/diasdavid/registry-mirror"&gt;&lt;strong&gt;registry-mirror&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; improved &lt;a href="//github.com/diasdavid/registry-mirror"&gt;registry-mirror&lt;/a&gt; performance and robustness by removing the dependency on registry-static. The few necessary parts were copied in. This is a huge step in reliability and performance cloning the registry with registry-mirror.&lt;/p&gt;
&lt;h4 id="station"&gt;&lt;a href="//github.com/ipfs/station"&gt;&lt;strong&gt;station&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="//github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt; fixed drag and drop
  file uploading, and some dependency issues. So go ahead and try it
  out.&lt;/p&gt;
&lt;h4 id="ipfs-geoip"&gt;&lt;a href="//github.com/ipfs/ipfs-geoip"&gt;&lt;strong&gt;ipfs-geoip&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="//github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt; rewrote the generation
  script and cleaned up the code so that now the data is consistently
  reproducible and fully stored on IPFS. This ensures that geoip lookups
  over IFPS will work in all future releases.&lt;/p&gt;
&lt;h4 id="fs-repo-migrations"&gt;&lt;a href="//github.com/ipfs/fs-repo-migrations"&gt;&lt;strong&gt;fs-repo-migrations&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="//github.com/chriscool"&gt;@chriscool&lt;/a&gt; improved important tests for fs-repo-migrations -- tests verify more edge cases when migrating forward and backward, through various sample workloads.&lt;/p&gt;
&lt;h4 id="ipfs-hyperlog"&gt;&lt;a href="//github.com/noffle/ipfs-hyperlog"&gt;&lt;strong&gt;ipfs-hyperlog&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="//github.com/noffle"&gt;@noffle&lt;/a&gt; built &lt;code&gt;ipfs-hyperlog&lt;/code&gt;, and ipfs-compatible fork of hyperlog, a DAG that replicates based on scuttlebutt logs and causal linking. &lt;code&gt;ipfs-hyperlog&lt;/code&gt; is a drop-in replacement for &lt;a href="https://github.com/mafintosh"&gt;@mafintosh&lt;/a&gt;'s &lt;a href="https://github.com/mafintosh/hyperlog"&gt;&lt;code&gt;hyperlog&lt;/code&gt;&lt;/a&gt;. Its key difference is that it creates a Merkle DAG that is &lt;em&gt;binary compatible&lt;/em&gt; with IPFS objects. This means any node of any DAG built using ipfs-hyperlog can be replicated to and from the IPFS network as well!&lt;/p&gt;
&lt;h4 id="logo"&gt;&lt;a href="//github.com/ipfs/logo"&gt;&lt;strong&gt;Logo&lt;/strong&gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href="//github.com/Kubuxu"&gt;@Kubuxu&lt;/a&gt; worked on a new &lt;a href="https://ipfs.io/ipfs/QmTgtbb4LckHaXh1YhpNcBu48cFY8zgT1Lh49q7q7ksf3M/"&gt;IPFS logo&lt;/a&gt;. Check it out.&lt;/p&gt;
&lt;h2 id="community"&gt;Community&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;If you have any suggestions for conferences, there is a &lt;a href="https://github.com/ipfs/community/issues/105"&gt;new issue&lt;/a&gt; where you can submit your proposals. The IPFS community will see if we can get to that conference and have a presence there.&lt;/li&gt;
&lt;li&gt;We now have &lt;a href="https://github.com/ipfs/community#events-calendar"&gt;a list of community events&lt;/a&gt; for IPFS on the ipfs/community README. Do you have any that you'd like to add? Check out past events, too.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; proposed using the new &lt;a href="//github.com/ipfs/community/issues/108"&gt;GitHub Templates&lt;/a&gt; for IPFS. What do you think about this idea? Chime in &lt;a href="https://github.com/ipfs/community/issues/108"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ipfs-in-the-wild"&gt;IPFS In The Wild&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/eris-ltd/marmot"&gt;&lt;strong&gt;Marmot Image Checker&lt;/strong&gt;&lt;/a&gt;: This takes an image, asks the Google Cloud Vision API for three descriptions of the image, and compares those descriptions to a chosen list of words. If there is match, the image is added to the &lt;a href="https://github.com/eris-ltd/toadserver"&gt;toadserver&lt;/a&gt;, a smart contract and IPFS-Backed download server. &lt;a href="https://twitter.com/asciinema/status/701730719589126146"&gt;From Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/asciinema/asciinema/releases/tag/v1.2.0"&gt;&lt;strong&gt;asciienema&lt;/strong&gt;&lt;/a&gt; now allows playback on IPFS. &lt;a href="https://twitter.com/asciinema/status/701730719589126146"&gt;From Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="contributors"&gt;Contributors&lt;/h2&gt;
&lt;p&gt;Across the entire IPFS GitHub organization, the following people have committed code, created issues, or made a comment on GitHub between February 1st (noon, GMT) and February 29th. We're autogenerating this list using &lt;a href="//github.com/ipfs/weekly/blob/master/tools/get_commits.py"&gt;this tool&lt;/a&gt; and &lt;a href="//github.com/richardlitt/name-your-contributors"&gt;this other tool&lt;/a&gt;, so please let us know if your name isn't here.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/abacon"&gt;@abacon&lt;/a&gt; (Bacon)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/almereyda"&gt;@almereyda&lt;/a&gt; (jon r)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/amstocker"&gt;@amstocker&lt;/a&gt; (Andrew Stocker)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/anacrolix"&gt;@anacrolix&lt;/a&gt; (Matt Joiner)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/anarcat"&gt;@anarcat&lt;/a&gt; (anarcat)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Ape"&gt;@Ape&lt;/a&gt; (Lauri Niskanen)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/area"&gt;@area&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ARezaK"&gt;@ARezaK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Asgraf"&gt;@Asgraf&lt;/a&gt; (Michal Turek)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Balancer"&gt;@Balancer&lt;/a&gt; (Balancer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/balupton"&gt;@balupton&lt;/a&gt; (Benjamin Lupton)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/bierlingm"&gt;@bierlingm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/BigBlueHat"&gt;@BigBlueHat&lt;/a&gt; (BigBlueHat)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/boergsen"&gt;@boergsen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/boxxa"&gt;@boxxa&lt;/a&gt; (Boxxa)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/briantigerchow"&gt;@briantigerchow&lt;/a&gt; (Brian Tiger Chow)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/brimstone"&gt;@brimstone&lt;/a&gt; (Matt)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/bussiere"&gt;@bussiere&lt;/a&gt; (bussiere)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/bzz"&gt;@bzz&lt;/a&gt; (Alexander)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/chpio"&gt;@chpio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/chris-martin"&gt;@chris-martin&lt;/a&gt; (Christopher Martin)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/chriscool"&gt;@chriscool&lt;/a&gt; (Christian Couder)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/christianlundkvist"&gt;@christianlundkvist&lt;/a&gt; (Christian Lundkvist)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ChristopherA"&gt;@ChristopherA&lt;/a&gt; (Christopher Allen)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/cjcase"&gt;@cjcase&lt;/a&gt; (Cj Case)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/cleichner"&gt;@cleichner&lt;/a&gt; (Chas)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/codeburd"&gt;@codeburd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Crest"&gt;@Crest&lt;/a&gt; (Crest)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/cryptix"&gt;@cryptix&lt;/a&gt; (Henry)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/daveajones"&gt;@daveajones&lt;/a&gt; (Dave Jones)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/David-Leudolph"&gt;@David-Leudolph&lt;/a&gt; (David Leudolph)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/david415"&gt;@david415&lt;/a&gt; (David Stainton)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/davidar"&gt;@davidar&lt;/a&gt; (David A Roberts)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/denisnazarov"&gt;@denisnazarov&lt;/a&gt; (Denis Nazarov)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/dginev"&gt;@dginev&lt;/a&gt; (Deyan Ginev)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; (David Dias)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt; (Friedel Ziegelmayer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/djdv"&gt;@djdv&lt;/a&gt; (Dominic Della Valle)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/dominictarr"&gt;@dominictarr&lt;/a&gt; (Dominic Tarr)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Dumptel"&gt;@Dumptel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/dylanPowers"&gt;@dylanPowers&lt;/a&gt; (Dylan Powers)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/edent"&gt;@edent&lt;/a&gt; (Terence Eden)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ehd"&gt;@ehd&lt;/a&gt; (Stephan Seidt)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/EliasGabrielsson"&gt;@EliasGabrielsson&lt;/a&gt; (Elias Gabrielsson)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/emardee"&gt;@emardee&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/eminence"&gt;@eminence&lt;/a&gt; (Andrew Chin)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/faebser"&gt;@faebser&lt;/a&gt; (Fabian Frei)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/fazo96"&gt;@fazo96&lt;/a&gt; (Enrico Fasoli)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Fil"&gt;@Fil&lt;/a&gt; (Fil)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/frabrunelle"&gt;@frabrunelle&lt;/a&gt; (Francis Brunelle)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/GitCop"&gt;@GitCop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/GravisZro"&gt;@GravisZro&lt;/a&gt; (Gravis)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/greenkeeperio-bot"&gt;@greenkeeperio-bot&lt;/a&gt; (Greenkeeper)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/halseth"&gt;@halseth&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/harlantwood"&gt;@harlantwood&lt;/a&gt; (Harlan T Wood)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/hitchcott"&gt;@hitchcott&lt;/a&gt; (Chris Hitchcott)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/hosh"&gt;@hosh&lt;/a&gt; (Ho-Sheng Hsiao)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/hutenosa"&gt;@hutenosa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/IanCal"&gt;@IanCal&lt;/a&gt; (Ian Calvert)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ianopolous"&gt;@ianopolous&lt;/a&gt; (Ian Preston)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ingokeck"&gt;@ingokeck&lt;/a&gt; (Ingo Keck)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/insanity54"&gt;@insanity54&lt;/a&gt; (Chris Grimmett)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ion1"&gt;@ion1&lt;/a&gt; (Johan Kiviniemi)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/j-h-scheufen"&gt;@j-h-scheufen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/j4nu5"&gt;@j4nu5&lt;/a&gt; (Kushagra Sinha)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jamescarlyle"&gt;@jamescarlyle&lt;/a&gt; (James Carlyle)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jbenet"&gt;@jbenet&lt;/a&gt; (Juan Benet)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jbshirk"&gt;@jbshirk&lt;/a&gt; (Joe)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jedahan"&gt;@jedahan&lt;/a&gt; (Jonathan Dahan)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jeffscottward"&gt;@jeffscottward&lt;/a&gt; (Jeff Ward)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jefft0"&gt;@jefft0&lt;/a&gt; (Jeff Thompson)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/johncant"&gt;@johncant&lt;/a&gt; (John Cant)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/kalmi"&gt;@kalmi&lt;/a&gt; (Tarnay Kálmán)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Kolomona"&gt;@Kolomona&lt;/a&gt; (Kolomona Myer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/krl"&gt;@krl&lt;/a&gt; (kristoffer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Kubuxu"&gt;@Kubuxu&lt;/a&gt; (Jakub Sztandera)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/kyledrake"&gt;@kyledrake&lt;/a&gt; (Kyle Drake)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/kyrias"&gt;@kyrias&lt;/a&gt; (Johannes Löthberg)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lamarpavel"&gt;@lamarpavel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lernisto"&gt;@lernisto&lt;/a&gt; (Terrel Shumway)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lgierth"&gt;@lgierth&lt;/a&gt; (Lars Gierth)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lidel"&gt;@lidel&lt;/a&gt; (Marcin Rataj)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lockedshadow"&gt;@lockedshadow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lovelaced"&gt;@lovelaced&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mappum"&gt;@mappum&lt;/a&gt; (ᴍᴀᴛᴛ ʙᴇʟʟ)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/matshenricson"&gt;@matshenricson&lt;/a&gt; (Mats Henricson)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/MichaelMure"&gt;@MichaelMure&lt;/a&gt; (Michael Muré)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/micxjo"&gt;@micxjo&lt;/a&gt; (Micxjo Funkcio)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mildred"&gt;@mildred&lt;/a&gt; (Mildred Ki'Lya)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mindhog"&gt;@mindhog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Mithgol"&gt;@Mithgol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mnp"&gt;@mnp&lt;/a&gt; (Mitchell Perilstein)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/montagsoup"&gt;@montagsoup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/MrChrisJ"&gt;@MrChrisJ&lt;/a&gt; (Chris Ellis)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mseri"&gt;@mseri&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/NDuma"&gt;@NDuma&lt;/a&gt; (NDuma)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/nginnever"&gt;@nginnever&lt;/a&gt; (Nathan Ginnever)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/NightRa"&gt;@NightRa&lt;/a&gt; (Ilan Godik)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/NodeGuy"&gt;@NodeGuy&lt;/a&gt; (David Braun)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/noffle"&gt;@noffle&lt;/a&gt; (Stephen Whitmore)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/odipar"&gt;@odipar&lt;/a&gt; (rapido)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/olizilla"&gt;@olizilla&lt;/a&gt; (Oli Evans)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/palesz"&gt;@palesz&lt;/a&gt; (Palesz)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/palkeo"&gt;@palkeo&lt;/a&gt; (palkeo)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/parkan"&gt;@parkan&lt;/a&gt; (Arkadiy Kukarkin)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/peerchemist"&gt;@peerchemist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/pietsch"&gt;@pietsch&lt;/a&gt; (Christian Pietsch)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/prusnak"&gt;@prusnak&lt;/a&gt; (Pavol Rusnak)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/randomshinichi"&gt;@randomshinichi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/reit-c"&gt;@reit-c&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/rethore"&gt;@rethore&lt;/a&gt; (Pierre-Elouan Réthoré)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/rht"&gt;@rht&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; (Richard Littauer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/richardschneider"&gt;@richardschneider&lt;/a&gt; (Richard Schneider)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/rsynnest"&gt;@rsynnest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/rubiojr"&gt;@rubiojr&lt;/a&gt; (Sergio Rubio)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rwcarlsen"&gt;@rwcarlsen&lt;/a&gt; (Robert Carlsen)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/se3000"&gt;@se3000&lt;/a&gt; (Steve Ellis)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Shaaah"&gt;@Shaaah&lt;/a&gt; (Shaaah)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/shtukas"&gt;@shtukas&lt;/a&gt; (Pascal Honoré)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/sivachandran"&gt;@sivachandran&lt;/a&gt; (Sivachandran)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/sleep-walker"&gt;@sleep-walker&lt;/a&gt; (Tomáš Čech)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/slothbag"&gt;@slothbag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Stebalien"&gt;@Stebalien&lt;/a&gt; (Steven Allen)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/suisha"&gt;@suisha&lt;/a&gt; (David Mai)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/tcyrus"&gt;@tcyrus&lt;/a&gt; (Timothy Cyrus)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/thelinuxkid"&gt;@thelinuxkid&lt;/a&gt; (Andres Buritica)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/tidux"&gt;@tidux&lt;/a&gt; (Todixu)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/tinybike"&gt;@tinybike&lt;/a&gt; (Jack Peterson)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/tomgg"&gt;@tomgg&lt;/a&gt; (tmg)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/tv42"&gt;@tv42&lt;/a&gt; (Tv)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/void4"&gt;@void4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/wanderer"&gt;@wanderer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/wasserfuhr"&gt;@wasserfuhr&lt;/a&gt; (RainerWasserfuhr)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; (Jeromy Johnson)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/xicombd"&gt;@xicombd&lt;/a&gt; (Francisco Baio Dias)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/yangwao"&gt;@yangwao&lt;/a&gt; (Matej Nemček)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/zignig"&gt;@zignig&lt;/a&gt; (Simon Kirkby)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Zogg"&gt;@Zogg&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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 weekly repo](//github.com/ipfs/weekly! The more people mention items they want to see in the weekly there, the easier it is to make this and send it out.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Richard Littauer and Andrew Chin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Submit feedback about this issue &lt;a href="//github.com/ipfs/weekly/issues/10"&gt;here&lt;/a&gt;, or send us &lt;a href="//github.com/ipfs/weekly/issues/8"&gt;feedback about the IPFS Weekly in general&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</summary></entry><entry><title>Migrating ipfs.io from go-ipfs 0.3.x to 0.4.0</title><link href="/blog/9-ipfs-weekly-v04x-migration" rel="alternate"></link><published>2016-02-12T00:00:00+01:00</published><author><name>Lars Gierth</name></author><id>tag:,2016-02-12:blog/9-ipfs-weekly-v04x-migration</id><summary type="html">&lt;p&gt;Good news everyone! We'll soon release go-ipfs 0.4.0,
which contains lots of great changes and enhancements.
An upcoming post will detail the improvements of 0.4.0.
This post is about important things to be aware of when upgrading.
Users who already rely on go-ipfs or the ipfs.io services should pay special attention.&lt;/p&gt;
&lt;p&gt;There are breaking changes
which prevent 0.4.x nodes from communicating with 0.3.x nodes.
We know breaking changes are painful. We avoid them.
In this case, the improvement makes IPFS substantially more upgradable.
It's one of those things that "should've been different" from the start.
Having the freedom to improve the core protocol is why IPFS is still in alpha phase.&lt;/p&gt;
&lt;p&gt;Nevertheless, we take service disruption very seriously even in these early days.
We know thousands of developers use IPFS,
and hundreds of thousands of people rely on IPFS links to our gateway.
So we planned a smooth upgrade path.&lt;/p&gt;
&lt;p&gt;The breaking change is at the wire protocol level,
which means there will be, and already are, two separate networks.
We'll call these networks v03x and v04x.
IPFS nodes built from the master branch are already part of v04x.
The Docker image &lt;code&gt;ipfs/go-ipfs&lt;/code&gt; is built from master (until 0.4.0 is released)
and thus also part of v04x.&lt;/p&gt;
&lt;p&gt;ipfs.io provides two essential services to the community, which are affected by this:
the public HTTP-to-IPFS gateway and the default bootstrappers.
We'll continue to support them for the v03x network until the &lt;strong&gt;end of April 2016&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Please note that we won't support 0.3.x with patches or new features.
All development effort is directed towards 0.4.0, and you should update as soon as possible.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#how-do-i-update-go-ipfs-to-0-4-0-"&gt;How do I update go-ipfs to 0.4.0?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#the-public-gateways-at-ipfs-io"&gt;The public gateways at ipfs.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#solarnet-the-default-bootstrappers"&gt;Solarnet: the default bootstrappers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#how-does-this-affect-me-"&gt;How does this affect me?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="how-do-i-update-go-ipfs-to-040"&gt;How do I update go-ipfs to 0.4.0?&lt;/h2&gt;
&lt;p&gt;Until we release 0.4.0, you can update by &lt;a href="https://github.com/ipfs/go-ipfs#build-from-source"&gt;building from source&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After the release, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use the brand new &lt;a href="http://dist.ipfs.io/#ipfs-update"&gt;ipfs-update tool&lt;/a&gt; to update go-ipfs &lt;strong&gt;(recommended)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Download &lt;a href="http://dist.ipfs.io/#go-ipfs"&gt;the new go-ipfs binaries&lt;/a&gt; and install them.&lt;/li&gt;
&lt;li&gt;Download &lt;a href="https://github.com/ipfs/go-ipfs"&gt;the new source&lt;/a&gt; and &lt;a href="https://github.com/ipfs/go-ipfs#build-from-source"&gt;build it yourself&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please note that installation with &lt;code&gt;go get&lt;/code&gt; does not work at this time.
We are experimenting with &lt;a href="https://github.com/whyrusleeping/gx"&gt;gx, the new IPFS-based package manager&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="the-public-gateways-at-ipfsio"&gt;The public gateways at ipfs.io&lt;/h2&gt;
&lt;p&gt;For the time being, https://ipfs.io uses both v03x and v04x to service requests.
Content available in either network will be served just fine.
Whichever responds successfully first (2xx or 3xx status code),
gets to serve its content. The other response is discarded.
If the first response is not successful (4xx/5xx, connection errors),
it is discarded and the second response is served, regardless of its status code.&lt;/p&gt;
&lt;p&gt;We're using the &lt;a href="https://github.com/whyrusleeping/multireq"&gt;multireq proxy&lt;/a&gt; to accomplish this multiplexing behaviour.
&lt;code&gt;multireq&lt;/code&gt; is a new tool, so if you notice any weirdness with gateway requests,
&lt;a href="https://github.com/ipfs/infrastructure/issues/"&gt;please let us know&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you want to target a specific network, use v03x.ipfs.io or v04x.ipfs.io.
These domain names will stay around as long as the respective network is
supported by the public gateway.&lt;/p&gt;
&lt;p&gt;All of the above also applies to the &lt;code&gt;/api&lt;/code&gt; endpoint (the readonly API),
which is part of the gateway.&lt;/p&gt;
&lt;p&gt;Expect the &lt;strong&gt;v03x gateway&lt;/strong&gt; to be &lt;strong&gt;supported until the end of April 2016.&lt;/strong&gt;
After that day, ipfs.io will be served by v04x exclusively,
and v03x.ipfs.io will no longer work.&lt;/p&gt;
&lt;h2 id="solarnet-the-default-bootstrappers"&gt;Solarnet: the default bootstrappers&lt;/h2&gt;
&lt;p&gt;We call the 8 bootstrap nodes in go-ipfs's default config the default bootstrappers.
Their PeerIDs start with &lt;code&gt;QmSoL&lt;/code&gt; (for Solarnet),
and all of them use &lt;code&gt;/tcp/4001&lt;/code&gt; and/or &lt;code&gt;/udp/4002/utp&lt;/code&gt;.
Use &lt;code&gt;ipfs bootstrap&lt;/code&gt; to see or modify the bootstrappers currently used by your IPFS node.&lt;/p&gt;
&lt;p&gt;In order to balance the default bootstrappers over v03x and v04x,
a few of them bind v04x to these ports, and a few bind v03x.
The respective other network is bound to &lt;code&gt;/tcp/14001&lt;/code&gt; and &lt;code&gt;/udp/14002/utp&lt;/code&gt;.
This means that all 8 hosts run bootstrappers for both networks,
but are available as default bootstrappers only to one.&lt;/p&gt;
&lt;p&gt;We'll gradually shift the v03x/v04x ratio to v04x.
Expect at least &lt;strong&gt;two v03x bootstrappers&lt;/strong&gt; to be &lt;strong&gt;supported until the end of April 2016.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="how-does-this-affect-me"&gt;How does this affect me?&lt;/h2&gt;
&lt;p&gt;Check which version of go-ipfs you are running: &lt;code&gt;ipfs version&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If you rely on the public gateways,
we ask you to please upgrade to 0.4.0 as soon as you can.
You can subscribe &lt;a href="https://github.com/ipfs/go-ipfs/issues/2334"&gt;to this issue&lt;/a&gt; to be notified when 0.4.0 is released.&lt;/p&gt;
&lt;p&gt;If you're running an 0.3.x node, it won't be able to communicate
with any node which has updated to 0.4.x, let alone exchange data.
You can access data added by 0.4.0 nodes using the public gateway.
Likewise, data added by your 0.3.x node is still available on the public gateway.&lt;/p&gt;
&lt;p&gt;If you're running an 0.4.0 node, all is well in the world.
You don't need to do anything.&lt;/p&gt;
&lt;p&gt;Thank you for bearing with this important change.
We seek to provide a smooth transition for everyone,
and wish we didn't have to bother you with this at all.&lt;/p&gt;</summary></entry><entry><title>IPFS Weekly 4</title><link href="/blog/7-ipfs-weekly-4" rel="alternate"></link><published>2016-02-05T00:00:00+01:00</published><author><name>Richard Littauer, Andrew Chin</name></author><id>tag:,2016-02-05:blog/7-ipfs-weekly-4</id><summary type="html">&lt;p&gt;&lt;a href="//ipfs.io/"&gt;IPFS&lt;/a&gt; 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 &lt;a href="//github.com/ipfs"&gt;GitHub&lt;/a&gt; or join us on &lt;a href="//webchat.freenode.net/?channels=ipfs"&gt;IRC&lt;/a&gt; (#ipfs on the Freenode network).&lt;/p&gt;
&lt;p&gt;If you would like to get this update as an email, sign up for our &lt;a href="//tinyletter.com/ipfsweekly"&gt;weekly newsletter&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Here are some of the highlights for the &lt;a href="//github.com/ipfs/pm/issues/84"&gt;January 25th&lt;/a&gt; sprint:&lt;/p&gt;
&lt;h2 id="updates"&gt;Updates&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/js-ipfs"&gt;&lt;strong&gt;js-ipfs&lt;/strong&gt;&lt;/a&gt;: &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; and &lt;a href="//github.com/vijayee"&gt;@vijayee&lt;/a&gt; created &lt;a href="//github.com/vijayee/js-ipfs-merkle-dag"&gt;js-ipfs-merkle-dag&lt;/a&gt; and &lt;a href="//github.com/ipfs/js-ipfs-blocks"&gt;js-ipfs-blocks&lt;/a&gt;, which will help IPFS deal with &lt;a href="https://github.com/ipfs/specs"&gt;MerkleDAGs&lt;/a&gt; and are extensible enough to allow others to build their own MerkleDAG structures. Also, js-ipfs is now able to import a file into the MerkleDAG, an important milestone. An architecture graph has been spec'ed out &lt;a href="https://github.com/ipfs/js-ipfs#ipfs-core-implementation-architecture"&gt;here&lt;/a&gt; to help newcomers understand how js-ipfs works. Finally, lots of new issues and low-hanging fruit have been tagged for &lt;a href="//github.com/ipfs/js-ipfs/issues"&gt;contributors to tackle&lt;/a&gt;.
&lt;a href="https://github.com/dignifiedquire/idb-plus-blob-store"&gt;&lt;strong&gt;idb-plus-blob-store&lt;/strong&gt;&lt;/a&gt;: The &lt;a href="https://github.com/substack/idb-blob-store"&gt;substack/idb-blob-store&lt;/a&gt; had issues regarding emitting the &lt;code&gt;finish&lt;/code&gt; event on the &lt;code&gt;createWritableStream&lt;/code&gt; result due to internal issues in streams and the way &lt;code&gt;.end&lt;/code&gt; is handled. So &lt;a href="//github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt; wrote this module that fixes this and now allows us to test all parts of js-ipfs in the browser using IndexedDB as the storage.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/go-ipfs"&gt;&lt;strong&gt;go-ipfs&lt;/strong&gt;&lt;/a&gt;: Thanks to &lt;a href="//github.com/Kubuxu"&gt;@Kubuxu&lt;/a&gt;, dnslink was extended by dedicated subdomain (&lt;code&gt;_dnslink.&lt;/code&gt;). This allows users to alias (using CNAME) their domain to gateway.ipfs.io while still being able to to set the dnslink to content they wish. Also, &lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; has &lt;a href="https://github.com/ipfs/go-ipfs/pull/2256"&gt;an open PR&lt;/a&gt; to pull libp2p out of go-ipfs and put it into a module on &lt;a href="https://github.com/whyrusleeping/gx"&gt;gx&lt;/a&gt;, the IPFS native package manager. This is part of a larger effort to whittle go-ipfs down into smaller, extensible modules. Finally, &lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; did a clean up of the go-ipfs pull requests, closing all pull requests or pinging their authors for updates as needed.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/notes"&gt;&lt;strong&gt;notes&lt;/strong&gt;&lt;/a&gt;: &lt;a href="//github.com/noffle"&gt;@noffle&lt;/a&gt; began a discussion about revamping the &lt;code&gt;ipfs mount&lt;/code&gt; interface. Join in to voice your thoughts &lt;a href="//github.com/ipfs/notes/issues/105"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/community"&gt;&lt;strong&gt;community&lt;/strong&gt;&lt;/a&gt;: &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; has written a &lt;a href="https://github.com/ipfs/community/blob/master/captain.log.md"&gt;guide to writing captain.logs&lt;/a&gt;, which are short gists written by maintainers about IPFS projects, their status, and how to help. We plan to have more of these in different projects.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="community"&gt;Community&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/community/issues/103"&gt;&lt;strong&gt;Lisbon&lt;/strong&gt;&lt;/a&gt;: &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; hosted a Lisbon IPFS Sunday Hack Day this week. A few people came, and &lt;a href="//github.com/xicombd"&gt;@xicombd&lt;/a&gt; made &lt;a href="https://chrome.google.com/webstore/detail/ipfs-station/kckhgoigikkadogfdiojcblegfhdnjei/related"&gt;this Chrome Extension&lt;/a&gt;, which lets you access IPFS urls from your local IPFS daemon (&lt;a href="https://github.com/xicombd/ipfs-chrome-station"&gt;source code&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=dL9siwm03H4"&gt;&lt;strong&gt;Coffee Talks&lt;/strong&gt;&lt;/a&gt;: &lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; has hosted another "Coffee Talk", this time on &lt;a href="https://github.com/whyrusleeping/gx"&gt;gx&lt;/a&gt;, the IPFS package manager.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/community/issues/102"&gt;&lt;strong&gt;NYC Meet-up&lt;/strong&gt;&lt;/a&gt;: A NYC meet-up is planned for the end of February. Help us plan it and show your interest &lt;a href="https://github.com/ipfs/community/issues/102"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/DesertBlockHack/status/693520940504784896"&gt;&lt;strong&gt;Desert Blockchain&lt;/strong&gt;&lt;/a&gt;: IPFS was presented at the last &lt;a href="https://twitter.com/DesertBlockHack"&gt;Desert Blockchain&lt;/a&gt; miniconference.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="tools"&gt;Tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;There was an unfortunate GitHub outage and many people started using IPFS to move around their repos, with &lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt;'s simple &lt;a href="https://github.com/whyrusleeping/git-ipfs-rehost"&gt;git-ipfs-rehost&lt;/a&gt; &lt;a href="http://gateway.ipfs.io/ipfs/QmNxF69vkC53ZBgXKHXBRbDWk2ELJeP5ohbPXtdYRRUgmN/git-ipfs-rehost"&gt;(view on IPFS)&lt;/a&gt; and &lt;a href="//github.com/cryptix"&gt;@cryptix&lt;/a&gt;'s excellent &lt;a href="https://github.com/cryptix/git-remote-ipfs"&gt;git-remote-ipfs&lt;/a&gt; &lt;a href="http://gateway.ipfs.io/ipfs/QmbUruSDckF2HqjEBhq3tbtmHjCRAseCFDSDqbWSWE7CoV/git-remote-ipfs"&gt;(view on IPFS)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/pipermerriam"&gt;@pipermerriam&lt;/a&gt; created &lt;a href="https://github.com/pipermerriam/ipfs-persistence-consortium"&gt;ipfs-persistence-consortium&lt;/a&gt; to create networks of IPFS nodes which persist each other's content. This is similar to &lt;a href="//github.com/victorbjelkholm"&gt;@victorbjelkholm&lt;/a&gt;'s &lt;a href="https://github.com/victorbjelkholm/pincoop"&gt;pincoop&lt;/a&gt;. Perhaps there can be some cooperation in these efforts? 😎&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://github.com/MrChrisJ/fullnode"&gt;FullNode&lt;/a&gt; Project -- which includes IPFS, Tor, Bitcoin, OpenVPN and more -- &lt;a href="https://www.startjoin.com/protip2"&gt;is having a crowdfund&lt;/a&gt; -- go get one! Thanks for making it &lt;a href="//github.com/MrChrisJ"&gt;@MrChrisJ&lt;/a&gt;!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="other"&gt;Other&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;It was &lt;a href="https://en.wikipedia.org/wiki/Ralph_Merkle"&gt;Ralph Merkle's&lt;/a&gt; birthday on February 2nd! He is the creator of the &lt;a href="https://en.wikipedia.org/wiki/Merkle_tree"&gt;Merkle tree&lt;/a&gt;, which are a crucial part of how IPFS works. Happy Birthday, Ralph! 🎂&lt;/li&gt;
&lt;li&gt;Our friends at &lt;a href="http://mine.nyc"&gt;Mine&lt;/a&gt; are using IPFS for the excellent &lt;a href="https://medium.com/mine-labs/introducing-mediachain-a696f8fd2035"&gt;Mediachain metadata protocol&lt;/a&gt; (&lt;a href="https://medium.com/mine-labs/mediachain-483f49cbe37a#.h6wrzm3ze"&gt;protocol proposal here&lt;/a&gt;), a protocol to track media creation, attribution, and more. They have published &lt;a href="https://medium.com/mine-labs?source=logo-lo_8f8cb62ab817-6838e0c89092"&gt;several great articles&lt;/a&gt; about it. This week &lt;a href="//github.com/denisnazarov"&gt;@denisnazarov&lt;/a&gt; wrote about &lt;a href="https://medium.com/mine-labs/the-gif-that-fell-to-earth-eae706c72f1f#.s0c7x59he"&gt;The GIF That Fell To Earth&lt;/a&gt;, and &lt;a href="//github.com/parkan"&gt;@parkan&lt;/a&gt; gave a &lt;a href="https://medium.com/mine-labs/mediachain-developer-update-i-911c9e7a4524#.zc984cqen"&gt;Developer Update&lt;/a&gt; that discusses &lt;a href="http://www.phash.org/"&gt;pHash&lt;/a&gt;, &lt;a href="https://github.com/ipfs/specs/blob/ipld-spec/merkledag/ipld.md"&gt;IPLD&lt;/a&gt;, and more.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lexansoft"&gt;@lexansoft&lt;/a&gt; created a new Ethereum name registrar called &lt;a href="http://etherid.org"&gt;EtherID&lt;/a&gt; (&lt;a href="https://github.com/lexansoft/etherid.org"&gt;repo here&lt;/a&gt;), which uses IPFS for storing users' content. Then &lt;a href="https://twitter.com/btsfav"&gt;@btsfav&lt;/a&gt; wrote an article about &lt;a href="http://favs.pw/time-for-some-interplanetary-etheral-magic/"&gt;Personal Websites on EtherID with IPFS&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="contributors"&gt;Contributors&lt;/h2&gt;
&lt;p&gt;Across the entire IPFS GitHub organization, the following people have committed code, created issues, or made a comment on GitHub between January 25th (noon, GMT) and February 1st. We're autogenerating this list using &lt;a href="//github.com/ipfs/weekly/blob/master/tools/get_commits.py"&gt;this tool&lt;/a&gt;, so please let us know if your name isn't here.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/alexAubin"&gt;@alexAubin&lt;/a&gt; (Alexandre Aubin)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/andreiamatuni"&gt;@andreiamatuni&lt;/a&gt; (Andrei Amatuni)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/area"&gt;@area&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/AtnNn"&gt;@AtnNn&lt;/a&gt; (Etienne Laurin)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/bdunlay"&gt;@bdunlay&lt;/a&gt; (Brian Dunlay)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/BigBlueHat"&gt;@BigBlueHat&lt;/a&gt; (BigBlueHat)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/chriscool"&gt;@chriscool&lt;/a&gt; (Christian Couder)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ConsciousCode"&gt;@ConsciousCode&lt;/a&gt; (Conscious Code)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/cryptix"&gt;@cryptix&lt;/a&gt; (Henry)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/davidar"&gt;@davidar&lt;/a&gt; (David A Roberts)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; (David Dias)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt; (Friedel Ziegelmayer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/dysbulic"&gt;@dysbulic&lt;/a&gt; (Will Holcomb)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/eminence"&gt;@eminence&lt;/a&gt; (Andrew Chin)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/fazo96"&gt;@fazo96&lt;/a&gt; (Enrico Fasoli)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/GitCop"&gt;@GitCop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/greenkeeperio-bot"&gt;@greenkeeperio-bot&lt;/a&gt; (Greenkeeper)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/harlantwood"&gt;@harlantwood&lt;/a&gt; (Harlan T Wood)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Hexagon6"&gt;@Hexagon6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/IanCal"&gt;@IanCal&lt;/a&gt; (Ian Calvert)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ion1"&gt;@ion1&lt;/a&gt; (Johan Kiviniemi)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/JAremko"&gt;@JAremko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jbenet"&gt;@jbenet&lt;/a&gt; (Juan Benet)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jedahan"&gt;@jedahan&lt;/a&gt; (Jonathan Dahan)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/kazarena"&gt;@kazarena&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/kpcyrd"&gt;@kpcyrd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Kubuxu"&gt;@Kubuxu&lt;/a&gt; (Jakub Sztandera)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lgierth"&gt;@lgierth&lt;/a&gt; (Lars Gierth)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lidel"&gt;@lidel&lt;/a&gt; (Marcin Rataj)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lockedshadow"&gt;@lockedshadow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Luzifer"&gt;@Luzifer&lt;/a&gt; (Knut Ahlers)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/MartinThoma"&gt;@MartinThoma&lt;/a&gt; (Martin Thoma)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/MichaelMure"&gt;@MichaelMure&lt;/a&gt; (Michael Muré)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mildred"&gt;@mildred&lt;/a&gt; (Mildred Ki'Lya)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mindhog"&gt;@mindhog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Mithgol"&gt;@Mithgol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mortonfox"&gt;@mortonfox&lt;/a&gt; (Morton Fox)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/MrChrisJ"&gt;@MrChrisJ&lt;/a&gt; (Chris Ellis)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/NDuma"&gt;@NDuma&lt;/a&gt; (NDuma)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/NeoTeo"&gt;@NeoTeo&lt;/a&gt; (Teo Sartori)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/nikhilshekhawat"&gt;@nikhilshekhawat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/noffle"&gt;@noffle&lt;/a&gt; (Stephen Whitmore)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/palesz"&gt;@palesz&lt;/a&gt; (Palesz)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Patagonicus"&gt;@Patagonicus&lt;/a&gt; (Philipp Adolf)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ralphbean"&gt;@ralphbean&lt;/a&gt; (Ralph Bean)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/randomshinichi"&gt;@randomshinichi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/rht"&gt;@rht&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; (Richard Littauer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Shaaah"&gt;@Shaaah&lt;/a&gt; (Shaaah)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/sivachandran"&gt;@sivachandran&lt;/a&gt; (Sivachandran)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/slothbag"&gt;@slothbag&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/thelinuxkid"&gt;@thelinuxkid&lt;/a&gt; (Andres Buritica)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/tilgovi"&gt;@tilgovi&lt;/a&gt; (Randall Leeds)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/tomgg"&gt;@tommg&lt;/a&gt; (Thomas Gardner)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/VertigoRay"&gt;@VertigoRay&lt;/a&gt; (Raymond Piller)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/w33tmaricich"&gt;@w33tmaricich&lt;/a&gt; (Alexander Maricich)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; (Jeromy Johnson)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/whyun7892"&gt;@whyun7892&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/willeponken"&gt;@willeponken&lt;/a&gt; (William Wennerström)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/willglynn"&gt;@willglynn&lt;/a&gt; (Will Glynn)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/xicombd"&gt;@xicombd&lt;/a&gt; (Francisco Baio Dias)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks, and see you next week!  If you have cool things to share for the next weekly, drop us a line in the &lt;a href="//github.com/ipfs/pm/issues/88"&gt;next weekly sprint issue&lt;/a&gt;!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Richard Littauer and Andrew Chin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Submit feedback about this issue &lt;a href="https://github.com/ipfs/weekly/pull/16"&gt;here&lt;/a&gt;, or send us &lt;a href="//github.com/ipfs/weekly/issues/7"&gt;feedback about the IPFS Weekly in general&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</summary></entry><entry><title>IPFS Weekly 3</title><link href="/blog/6-ipfs-weekly-3" rel="alternate"></link><published>2016-02-01T00:00:00+01:00</published><author><name>Richard Littauer, Andrew Chin</name></author><id>tag:,2016-02-01:blog/6-ipfs-weekly-3</id><summary type="html">&lt;p&gt;&lt;a href="//ipfs.io/"&gt;IPFS&lt;/a&gt; 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 &lt;a href="//github.com/ipfs"&gt;GitHub&lt;/a&gt; or join us on &lt;a href="//webchat.freenode.net/?channels=ipfs"&gt;IRC&lt;/a&gt; (#ipfs on the Freenode network).&lt;/p&gt;
&lt;p&gt;If you would like to get this update as an email, sign up for our &lt;a href="//tinyletter.com/ipfsweekly"&gt;weekly newsletter&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;This is a double weekly: here are some of the highlights for the &lt;a href="//github.com/ipfs/pm/issues/79"&gt;January 12th&lt;/a&gt; and the &lt;a href="https://github.com/ipfs/pm/issues/83"&gt;January 19th&lt;/a&gt; sprints:&lt;/p&gt;
&lt;h2 id="updates"&gt;Updates&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://dist.ipfs.io"&gt;&lt;strong&gt;dist.ipfs.io&lt;/strong&gt;&lt;/a&gt; A distributions page has been shipped! This was largely spearheaded by &lt;a href="//github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt;. This is the new one-stop-shop for finding and downloading all official binaries that IPFS produces. Each project has:&lt;/li&gt;
&lt;li&gt;The distribution name and a short description;&lt;/li&gt;
&lt;li&gt;The current version number and release date;&lt;/li&gt;
&lt;li&gt;A download button that detects your platform and automatically suggests the appropriate distribution for you;&lt;/li&gt;
&lt;li&gt;A grid with download links for all supported platforms (operating system and architectures);&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;Changelog&lt;/code&gt;, a link to a summary of all version changes;&lt;/li&gt;
&lt;li&gt;An &lt;code&gt;All Versions&lt;/code&gt;, a link to view and download previous versions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The site is also hosted on IPFS, and is used by &lt;a href="https://github.com/ipfs/ipfs-update"&gt;&lt;code&gt;ipfs-update&lt;/code&gt;&lt;/a&gt; to update IPFS. Check it out at http://dist.ipfs.io.
&lt;em&gt; &lt;a href="//github.com/ipfs/go-ipfs"&gt;&lt;strong&gt;go-ipfs&lt;/strong&gt;&lt;/a&gt; 0.3.11 is shipped! Also, we merged 0.4.0 into master. &lt;a href="//github.com/jbenet"&gt;@jbenet&lt;/a&gt;, &lt;a href="//github.com/Dignifiedquire"&gt;@Dignifiedquire&lt;/a&gt; and others &lt;a href="//github.com/ipfs/go-ipfs/pull/2137"&gt;fixed appveyor&lt;/a&gt;. And finally the latest webui by &lt;a href="//github.com/Dignifiedquire"&gt;@Dignifiedquire&lt;/a&gt; was pushed in 0.3.11. Check out the &lt;a href="https://github.com/ipfs/go-ipfs/blob/master/CHANGELOG.md"&gt;changelog&lt;/a&gt;.
&lt;/em&gt; &lt;a href="//github.com/vijayee/js-ipfs-merkle-dag/"&gt;&lt;strong&gt;js-ipfs-merkle-dag&lt;/strong&gt;&lt;/a&gt; &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; worked on merkle-dag implementation interoperabolity, by enabling you to successfully read (and write) MerkleDAG nodes that were stored into an IPFS Repo through go-ipfs, &lt;a href="https://github.com/vijayee/js-ipfs-merkle-dag/pull/6"&gt;in JavaScript&lt;/a&gt;.
&lt;em&gt; &lt;a href="//github.com/ipfs/py-ipfs"&gt;&lt;strong&gt;py-ipfs&lt;/strong&gt;&lt;/a&gt; Thanks to &lt;a href="//github.com/candeira"&gt;@candeira&lt;/a&gt; and &lt;a href="//github.com/ivilata"&gt;@ivilata&lt;/a&gt;, we now have a much more filled out plan for the Python implementation of IPFS. Join in if you are a pythonista.
&lt;/em&gt; &lt;a href="//github.com/whyrusleeping/js-mafmt"&gt;&lt;strong&gt;js-mafmt&lt;/strong&gt;&lt;/a&gt; &lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; is working on a multiaddr validator in js, after his go work in &lt;a href="//github.com/whyrusleeping/mafmt"&gt;mafmt&lt;/a&gt;
&lt;em&gt; &lt;a href="//github.com/ipfs/infrastructure"&gt;&lt;strong&gt;infrastructure&lt;/strong&gt;&lt;/a&gt; The public gateway at &lt;a href="https://ipfs.io"&gt;ipfs.io&lt;/a&gt; is now backed by both v0.4.0-dev and v0.3.11 at the same time. Requests are proxied to both, and the first successful response wins. ipfs.io will be backed by v0.4.x alone eventually. What this means is that if you want to target your requests at one specific version, use v04x.ipfs.io or v03x.ipfs.io, respectively. The latter will stop returning DNS records when v03x isn't supported on the public gateway. Also, while we're releasing v0.4.0 and for a while after, the default bootstrap nodes are divided among v03x and v04x. Most can be used by v04x nodes, and a few by v03x nodes. The latter will be phased out over time.
&lt;/em&gt; &lt;a href="//github.com/lidel/ipfs-firefox-addon#ipfs-firefox-addon"&gt;&lt;strong&gt;ipfs-firefox-addon&lt;/strong&gt;&lt;/a&gt; The Firefox addon that provides transparent access to IPFS resources via local HTTP2IPFS gateway has been updated to &lt;a href="https://github.com/lidel/ipfs-firefox-addon/releases/tag/v1.4.2"&gt;release 1.4.2&lt;/a&gt;. This is the first time we've mentioned this in this newsletter; go check it out. The addon enables you to load content via IPFS instead of HTTP. For example, if you open a resource from a public gateway (eg. https://ipfs.io/ipfs/QmW2WQi7j6c7UgJTarActp7tDNikE4B2qXtFCfLPdsgaTQ/cat.jpg) and have addon enabled, the request will not hit public gateway, but data will be loaded from IPFS swarm, in a decentralized and distributed way. It also now supports the IPFS protocol scheme, meaning that can look up a hash by going to &lt;code&gt;fs:/ipfs/&amp;lt;hash&amp;gt;&lt;/code&gt; directly.
&lt;em&gt; &lt;a href="//github.com/jbenet/go-multiaddr"&gt;&lt;strong&gt;go-multiaddr&lt;/strong&gt;&lt;/a&gt; go-multiaddr now supports the adding of new protocols on the fly. This allows us to build in new protocols without having to force everyone to update the multiaddr library itself.
&lt;/em&gt; &lt;a href="//github.com/ipfs/community"&gt;&lt;strong&gt;community&lt;/strong&gt;&lt;/a&gt; The labels 'help wanted' and 'difficulty:easy', ':hard', and ':moderate' have been added to every IPFS repository, to help out contributors know what are some low-hanging fruit they can help with. As well, &lt;a href="//github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; has created a &lt;a href="https://github.com/ipfs/community/blob/master/docs-styleguide.md"&gt;Docs Styleguide&lt;/a&gt; to help standardize how we use English in all of our tools. It'll grow as time goes on.
&lt;em&gt; &lt;a href="//github.com/whyrusleeping/ipfs-dht"&gt;&lt;strong&gt;ipfs-dht&lt;/strong&gt;&lt;/a&gt; &lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; wrote a 'just a dht' binary. This means you can help out the network without running a full ipfs node. It also takes less memory and bandwidth, and having more dht nodes will speed up lookups.
&lt;/em&gt; &lt;a href="//github.com/ipfs/js-ipfsd-ctl"&gt;&lt;strong&gt;js-ipfsd-ctl&lt;/strong&gt;&lt;/a&gt; The Node module able to control an IPFS daemon was &lt;a href="//github.com/ipfs/js-ipfsd-ctl/pull/47"&gt;updated to 0.3.11&lt;/a&gt;.
* &lt;a href="//github.com/ipfs/webui"&gt;&lt;strong&gt;webui&lt;/strong&gt;&lt;/a&gt; The webui no long depends on &lt;a href="//github.com/ipfs/webui/pull/215"&gt;jQuery&lt;/a&gt;, thanks to a lot of work from &lt;a href="//github.com/luigiplr"&gt;@luigiplr&lt;/a&gt;, &lt;a href="//github.com/travisperson"&gt;@travisperson&lt;/a&gt;, and &lt;a href="//github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="work-in-progress"&gt;Work in Progress&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/pm"&gt;&lt;strong&gt;js-ipfs&lt;/strong&gt;&lt;/a&gt; &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; has merged in the roadmaps for js-ipfs and libp2p, which he'll update as more details become apparent. Take a look.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/weekly"&gt;&lt;strong&gt;weekly&lt;/strong&gt;&lt;/a&gt; &lt;a href="//github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; put a lot of work in getting various sorts of attribution for contributors to IPFS, currently available as &lt;a href="//github.com/RichardLitt/name-your-contributors"&gt;name-your-contributors&lt;/a&gt;. This is almost done, but there are a few tweaks left to do.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="meetups-and-conferences"&gt;Meetups and Conferences&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://arcticjs.club"&gt;&lt;strong&gt;ArcticJS&lt;/strong&gt;&lt;/a&gt; &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt;, &lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt;, &lt;a href="//github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt;, and &lt;a href="//github.com/noffle"&gt;@noffle&lt;/a&gt; were all able to meet up for the first time as a group and hack together at &lt;a href="http://arcticjs.club"&gt;ArcticJS&lt;/a&gt;, the first JavaScript conference above the Arctic circle, in Svalbard. Around 15 attended, and there was a lot of hacking, snow, talking about buffers, and swimming in the ocean at midnight underneath the Aurora Borealis (no, really). Most of the work done at the conference was conversations, but included &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; and &lt;a href="//github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; working on the API together, &lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; learning how to javascript, and &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; and &lt;a href="//github.com/xicombd"&gt;@xicombd&lt;/a&gt; working on IPFS together. All in all, it was an incredible trip. The videos for the actual talks (given in the most Northernmost church in the world) are &lt;a href="https://www.youtube.com/playlist?list=PL3bvPCw5QCLLJUL2Q_bBI1bi9bYQ-4hci"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="shoutouts"&gt;Shoutouts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Joe Armstrong, inventor of Erlang, &lt;a href="https://twitter.com/joeerl/status/692065172609994752"&gt;mentioned&lt;/a&gt; the importance of permanence and IPFS in a recent, and fantastic &lt;a href="http://joearms.github.io/2016/01/26/The-Unintentional-Side-Effects-of-a-Bad-Concurrency-Model.html"&gt;series of posts about organizing software&lt;/a&gt;. Thanks for the kind mention, Joe!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="contributors"&gt;Contributors&lt;/h2&gt;
&lt;p&gt;Across the entire IPFS GitHub organization, the following people have committed code, created issues, or made a comment on GitHub between January 11th and January 25. (We're autogenerating this list using &lt;a href="//github.com/ipfs/weekly/blob/master/tools/get_commits.py"&gt;this tool&lt;/a&gt;, so please let us know if your name isn't here.)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/adrian-bl"&gt;@adrian-bl&lt;/a&gt; (Adrian Ulrich)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/alexeicolin"&gt;@alexeicolin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ali"&gt;@ali&lt;/a&gt; (Ali Ukani)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/amstocker"&gt;@amstocker&lt;/a&gt; (Andrew Stocker)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/anarcat"&gt;@anarcat&lt;/a&gt; (anarcat)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ansuz"&gt;@ansuz&lt;/a&gt; (ansuz)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Ape"&gt;@Ape&lt;/a&gt; (Lauri Niskanen)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/area"&gt;@area&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/AtnNn"&gt;@AtnNn&lt;/a&gt; (Etienne Laurin)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Azulan"&gt;@Azulan&lt;/a&gt; (Frank Flores)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Balancer"&gt;@Balancer&lt;/a&gt; (Balancer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/bcg-didi"&gt;@bcg-didi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/benjaminbollen"&gt;@benjaminbollen&lt;/a&gt; (Benjamin Bollen)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/brailateo"&gt;@brailateo&lt;/a&gt; (Constantin Teodorescu)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/btrask"&gt;@btrask&lt;/a&gt; (Ben Trask)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/CaioAlonso"&gt;@CaioAlonso&lt;/a&gt; (Caio Alonso)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/chpio"&gt;@chpio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/chriscool"&gt;@chriscool&lt;/a&gt; (Christian Couder)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ConsciousCode"&gt;@ConsciousCode&lt;/a&gt; (Conscious Code)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/CrowdHailer"&gt;@CrowdHailer&lt;/a&gt; (Peter Saxton)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/dandart"&gt;@dandart&lt;/a&gt; (Dan Dart)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/david415"&gt;@david415&lt;/a&gt; (David Stainton)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/davidar"&gt;@davidar&lt;/a&gt; (David A Roberts)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; (David Dias)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/digital-dreamer"&gt;@digital-dreamer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/dignifiedquire"&gt;@dignifiedquire&lt;/a&gt; (Friedel Ziegelmayer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/djdv"&gt;@djdv&lt;/a&gt; (Dominic Della Valle)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/dylanPowers"&gt;@dylanPowers&lt;/a&gt; (Dylan Powers)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/eminence"&gt;@eminence&lt;/a&gt; (Andrew Chin)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Faleidel"&gt;@Faleidel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/fazo96"&gt;@fazo96&lt;/a&gt; (Enrico Fasoli)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/findkiko"&gt;@findkiko&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Foxcool"&gt;@Foxcool&lt;/a&gt; (Alexander Babenko)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/GitCop"&gt;@GitCop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/goog"&gt;@goog&lt;/a&gt; (Jay Cheng)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/greenkeeperio-bot"&gt;@greenkeeperio-bot&lt;/a&gt; (Greenkeeper)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/harlantwood"&gt;@harlantwood&lt;/a&gt; (Harlan T Wood)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ikreymer"&gt;@ikreymer&lt;/a&gt; (Ilya Kreymer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jbenet"&gt;@jbenet&lt;/a&gt; (Juan Benet)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jbshirk"&gt;@jbshirk&lt;/a&gt; (Joe)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jedahan"&gt;@jedahan&lt;/a&gt; (Jonathan Dahan)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Kubuxu"&gt;@Kubuxu&lt;/a&gt; (Jakub Sztandera)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/kyledrake"&gt;@kyledrake&lt;/a&gt; (Kyle Drake)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lgierth"&gt;@lgierth&lt;/a&gt; (Lars Gierth)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lidel"&gt;@lidel&lt;/a&gt; (Marcin Rataj)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lovelaced"&gt;@lovelaced&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/luigiplr"&gt;@luigiplr&lt;/a&gt; (Luigi Poole)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Luzifer"&gt;@Luzifer&lt;/a&gt; (Knut Ahlers)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/matshenricson"&gt;@matshenricson&lt;/a&gt; (Mats Henricson)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/MChabez"&gt;@MChabez&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Mec-iS"&gt;@Mec-iS&lt;/a&gt; (Lorenzo)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/MichaelMure"&gt;@MichaelMure&lt;/a&gt; (Michael Muré)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/mildred"&gt;@mildred&lt;/a&gt; (Mildred Ki'Lya)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Mithgol"&gt;@Mithgol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/NDuma"&gt;@NDuma&lt;/a&gt; (NDuma)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/NeoTeo"&gt;@NeoTeo&lt;/a&gt; (Teo Sartori)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/nginnever"&gt;@nginnever&lt;/a&gt; (Nathan Ginnever)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/nicola"&gt;@nicola&lt;/a&gt; (Nicola Greco)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/NightRa"&gt;@NightRa&lt;/a&gt; (Ilan Godik)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/noffle"&gt;@noffle&lt;/a&gt; (Stephen Whitmore)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Patagonicus"&gt;@Patagonicus&lt;/a&gt; (Philipp Adolf)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/peerchemist"&gt;@peerchemist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/peteygao"&gt;@peteygao&lt;/a&gt; (Peter Gao)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/PlanetPlan"&gt;@PlanetPlan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/pra85"&gt;@pra85&lt;/a&gt; (Prayag Verma)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/prusnak"&gt;@prusnak&lt;/a&gt; (Pavol Rusnak)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ralphtheninja"&gt;@ralphtheninja&lt;/a&gt; (Lars-Magnus Skog)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ReadmeCritic"&gt;@ReadmeCritic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Red5d"&gt;@Red5d&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/reit-c"&gt;@reit-c&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/rht"&gt;@rht&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; (Richard Littauer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/richardschneider"&gt;@richardschneider&lt;/a&gt; (Richard Schneider)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/rugk"&gt;@rugk&lt;/a&gt; (rugk)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/SCBuergel"&gt;@SCBuergel&lt;/a&gt; (Sebastian C. Bürgel)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/seclorum"&gt;@seclorum&lt;/a&gt; (seclorum)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/thelinuxkid"&gt;@thelinuxkid&lt;/a&gt; (Andres Buritica)&lt;/li&gt;
&lt;li&gt;Thomas Gardner&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/travisperson"&gt;@travisperson&lt;/a&gt; (Travis Person)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/tv42"&gt;@tv42&lt;/a&gt; (Tommi Virtanen)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/void4"&gt;@void4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/WeMeetAgain"&gt;@WeMeetAgain&lt;/a&gt; (Cayman)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; (Jeromy Johnson)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/windemut"&gt;@windemut&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/wking"&gt;@wking&lt;/a&gt; (W. Trevor King)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/xicombd"&gt;@xicombd&lt;/a&gt; (Francisco Baio Dias)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/zignig"&gt;@zignig&lt;/a&gt; (Simon Kirkby)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks, and see you next week!  If you have cool things to share for the next weekly, drop us a line in the &lt;a href="//github.com/ipfs/pm/issues/83"&gt;next weekly sprint issue&lt;/a&gt;!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Richard Littauer and Andrew Chin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Submit feedback about this issue &lt;a href="//github.com/ipfs/weekly/pull/14"&gt;here&lt;/a&gt;, or send us &lt;a href="//github.com/ipfs/weekly/issues/7"&gt;feedback about the IPFS Weekly in general&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</summary></entry><entry><title>IPFS Weekly 2</title><link href="/blog/5-ipfs-weekly-2" rel="alternate"></link><published>2016-01-13T00:00:00+01:00</published><author><name>Richard Littauer, Andrew Chin</name></author><id>tag:,2016-01-13:blog/5-ipfs-weekly-2</id><summary type="html">&lt;p&gt;&lt;a href="//ipfs.io/"&gt;IPFS&lt;/a&gt; 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 &lt;a href="//github.com/ipfs"&gt;GitHub&lt;/a&gt; or join us on &lt;a href="//webchat.freenode.net/?channels=ipfs"&gt;IRC&lt;/a&gt; (#ipfs on the Freenode network).&lt;/p&gt;
&lt;p&gt;Here are some of the highlights for the &lt;a href="//github.com/ipfs/pm/issues/77"&gt;January 5th&lt;/a&gt; Sprint:&lt;/p&gt;
&lt;h2 id="updates"&gt;Updates&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/specs"&gt;&lt;strong&gt;(specs)&lt;/strong&gt;&lt;/a&gt; There was much debate in the &lt;a href="https://github.com/ipfs/specs/pull/37"&gt;IPLD spec&lt;/a&gt; about pathing notation. &lt;a href="//github.com/mildred"&gt;@mildred&lt;/a&gt; in particular did a lot of good work.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/go-ipfs"&gt;&lt;strong&gt;(go-ipfs)&lt;/strong&gt;&lt;/a&gt; The IPFS Docker image is now tested automatically on Travis, thanks to &lt;a href="//github.com/ChristianKniep"&gt;@ChristianKniep&lt;/a&gt;, &lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt;, and &lt;a href="//github.com/chriscool"&gt;@chriscool&lt;/a&gt;. For more, see the &lt;a href="//github.com/ipfs/go-ipfs/pull/2064"&gt;go-ipfs#2064&lt;/a&gt; pull request.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/js-ipfs"&gt;&lt;strong&gt;(js-ipfs)&lt;/strong&gt;&lt;/a&gt; Now you can do &lt;code&gt;npm i -g js-ipfs&lt;/code&gt; and use jsipfs (the javascript impl of IPFS) with bootstrap + id + version commands, fully compatible with the go-ipfs repo, thanks to &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/project-repos"&gt;&lt;strong&gt;(project-repos)&lt;/strong&gt;&lt;/a&gt; A very cool &lt;a href="http://project-repos.ipfs.io/"&gt;organization-wide dashboard&lt;/a&gt; that provides a status overview of all the IPFS repos was launched.  By &lt;a href="//github.com/harlantwood"&gt;@harlantwood&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/community"&gt;&lt;strong&gt;(community)&lt;/strong&gt;&lt;/a&gt; &lt;a href="//github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; merged the pull request for &lt;a href="//github.com/ipfs/community/blob/master/js-contribution-guidelines.md"&gt;JavaScript guidelines&lt;/a&gt; for IPFS repos. This is a major step towards standard JavaScript repositories within IPFS.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/community#meetups"&gt;&lt;strong&gt;(community)&lt;/strong&gt;&lt;/a&gt; &lt;a href="//github.com/NeoTeo"&gt;@NeoTeo&lt;/a&gt;, &lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt;, and &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; hosted a small meetup in Copenhagen!  Eight people in total showed up for an intro to IPFS, a Q&amp;amp;A session, and some good conversation!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="work-in-progress"&gt;Work in Progress&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/distributions"&gt;&lt;strong&gt;(distributions)&lt;/strong&gt;&lt;/a&gt; &lt;a href="//github.com/Dignifiedquire"&gt;@Dignifiedquire&lt;/a&gt; further developed the distributions page.  &lt;a href="http://v04x.ipfs.io/ipfs/QmZyvWokPYGg6DrjE6o2V7qhThzZQZ8QCWqdd2U3S75HXC/index.html"&gt;Click here&lt;/a&gt; for a preview!&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/go-ipfs"&gt;&lt;strong&gt;(go-ipfs)&lt;/strong&gt;&lt;/a&gt; &lt;a href="//github.com/lgierth"&gt;@lgierth&lt;/a&gt; continued the work towards the dev040 migration.  Notably we have two new gateways to aid in the transition:   &lt;a href="http://v04x.ipfs.io"&gt;http://v04x.ipfs.io&lt;/a&gt; and &lt;a href="http://v03x.ipfs.io"&gt;http://v03x.ipfs.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/archives/"&gt;&lt;strong&gt;(archives)&lt;/strong&gt;&lt;/a&gt; &lt;a href="//github.com/Dignifiedquire"&gt;@Dignifiedquire&lt;/a&gt; has added to IPFS a dump of the Stackexchange archives!  Details are &lt;a href="//github.com/ipfs/archives/issues/50"&gt;in the archives repo&lt;/a&gt;. We are always looking for more help with archiving important datasets, so feel free to join us in the &lt;a href="//github.com/ipfs/archives/"&gt;archives repo&lt;/a&gt;!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="contributors"&gt;Contributors&lt;/h2&gt;
&lt;p&gt;Across the entire IPFS GitHub organization, the following people have committed code since January 4th. (We're autogenerating this list using &lt;a href="//github.com/ipfs/weekly/blob/master/tools/get_commits.py"&gt;this tool&lt;/a&gt;, so please let us know if your name isn't here.) In the future, we will also include people who comment, as they are also super important; bear with us while we develop that technology.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/chriscool"&gt;@chriscool&lt;/a&gt; (Christian Couder)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ChristianKniep"&gt;@ChristianKniep&lt;/a&gt; (Christian Kniep)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; (David Dias)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Dignifiedquire"&gt;@Dignifiedquire&lt;/a&gt; (Friedel Ziegelmayer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/eminence"&gt;@eminence&lt;/a&gt; (Andrew Chin)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/greenkeeperio-bot"&gt;@greenkeeperio-bot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ianopolous"&gt;@ianopolous&lt;/a&gt; (Ian Preston)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jbenet"&gt;@jbenet&lt;/a&gt; (Juan Benet)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Kubuxu"&gt;@Kubuxu&lt;/a&gt; (Jakub Sztandera)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lgierth"&gt;@lgierth&lt;/a&gt; (Lars Gierth)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/noffle"&gt;@noffle&lt;/a&gt; (Stephen Whitmore)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ralphtheninja"&gt;@ralphtheninja&lt;/a&gt; (Lars-Magnus Skog)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ReadmeCritic"&gt;@ReadmeCritic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; (Richard Littauer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; (Jeromy Johnson)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/yuvallanger"&gt;@yuvallanger&lt;/a&gt; (Yuval Langer)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks, and see you next week!  If you have cool things to share for the next weekly, drop us a line in the &lt;a href="//github.com/ipfs/pm/issues/79"&gt;next weekly sprint issue&lt;/a&gt;!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Richard Littauer and Andrew Chin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Submit feedback about this issue &lt;a href="//github.com/ipfs/weekly/issues/10"&gt;here&lt;/a&gt;, or send us &lt;a href="//github.com/ipfs/weekly/issues/7"&gt;feedback about the IPFS Weekly in general&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</summary></entry><entry><title>IPFS Weekly 1</title><link href="/blog/4-ipfs-weekly-1" rel="alternate"></link><published>2016-01-11T00:00:00+01:00</published><author><name>Richard Littauer, Andrew Chin</name></author><id>tag:,2016-01-11:blog/4-ipfs-weekly-1</id><summary type="html">&lt;p&gt;Welcome to the first edition of IPFS Weekly!&lt;/p&gt;
&lt;p&gt;&lt;a href="//ipfs.io/"&gt;IPFS&lt;/a&gt; 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 will try to highlight some of the development that happened in the past week.  For anyone looking to get involved, follow the embedded hyperlinks, search the wealth of information on &lt;a href="//github.com/ipfs"&gt;github&lt;/a&gt; or join us on &lt;a href="//webchat.freenode.net/?channels=ipfs"&gt;IRC&lt;/a&gt; (#ipfs on the Freenode network).&lt;/p&gt;
&lt;p&gt;Since this is our first time launching the Weekly, we've included several past weeks. This is partially because we've been refining our process, and wanted to make the first weekly a great one. In the future, they will be released weekly. If you have any feedback about this process in general, let us know &lt;a href="//github.com/ipfs/weekly/issues/7"&gt;here&lt;/a&gt;. Thanks!&lt;/p&gt;
&lt;h2 id="december-21"&gt;December 21&lt;/h2&gt;
&lt;p&gt;Here are some of the highlights for the &lt;a href="//github.com/ipfs/pm/issues/76"&gt;December 21&lt;/a&gt; Sprint:&lt;/p&gt;
&lt;h3 id="32c3"&gt;32c3&lt;/h3&gt;
&lt;p&gt;Not too much happened during this sprint, because it was the holidays - however, it was also the 32nd CCC. &lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt;, &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt;, &lt;a href="//github.com/lgierth"&gt;@lgierth&lt;/a&gt;, &lt;a href="//github.com/Dignifiedquire"&gt;@Dignifiedquire&lt;/a&gt; and more of the team were over there in Hamburg.&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="https://ipfs.io/ipfs/QmWYaX56pTskFL2UMV2x8ZZAB8xyntPce5bFmY8ugHw47j/32c3.ipfs.2.jpg" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; gave a lightning talk (see above).&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; and &lt;a href="//github.com/Dignifiedquire"&gt;@Dignifiedquire&lt;/a&gt; led an install party and live demo.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/MrChrisJ"&gt;@MrChrisJ&lt;/a&gt; led a discussion about his &lt;a href="//news.bitcoin.com/developer-chris-ellis-builds-full-bitcoin-nodes-12-hours/"&gt;Full Node project&lt;/a&gt;, which includes IPFS.&lt;/li&gt;
&lt;li&gt;We met lots of our users, and other groups (including &lt;a href="https://www.tahoe-lafs.org/trac/tahoe-lafs"&gt;Tahoe-LAFS&lt;/a&gt;, &lt;a href="https://www.torproject.org/"&gt;tor&lt;/a&gt;, etc).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="updates"&gt;Updates&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/go-ipfs"&gt;&lt;strong&gt;(go-ipfs)&lt;/strong&gt;&lt;/a&gt; &lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; and &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; did amazing work closing around 200 issues as part of the "Great go-ipfs Issue Party of 2015".&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/diasdavid/registry-mirror"&gt;&lt;strong&gt;(registry-mirror)&lt;/strong&gt;&lt;/a&gt; npm on IPFS was furthered by &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; by making it work with 0.4.0. Currently, there are 130,000 modules and it's going strong.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/go-ipfs"&gt;&lt;strong&gt;(go-ipfs)&lt;/strong&gt;&lt;/a&gt; &lt;a href="//github.com/lgierth"&gt;@lgierth&lt;/a&gt; set up namaka and hiiaka (NUC nodes at our table at 32c3). This is pretty cool. CF. &lt;a href="//github.com/ipfs/infrastructure#142"&gt;ipfs/infrastructure#142&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/RichardLitt/readme-standard"&gt;&lt;strong&gt;(readme-standard)&lt;/strong&gt;&lt;/a&gt; &lt;a href="//github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; had his own great issue party. He's most proud of breaking ground on the future &lt;a href="//github.com/RichardLitt/readme-standard/issues/1"&gt;readme standard&lt;/a&gt; for IPFS.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/webui"&gt;&lt;strong&gt;(webui)&lt;/strong&gt;&lt;/a&gt; &lt;a href="//github.com/Dignifiedquire"&gt;@Dignifiedquire&lt;/a&gt; did some awesome work improving the webui &lt;a href="//github.com/ipfs/webui/issues/87"&gt;using webpack&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;He &lt;em&gt;also&lt;/em&gt; managed to release &lt;a href="//github.com/Dignifiedquire/rust-multiaddr"&gt;rust-multiaddr&lt;/a&gt; and &lt;a href="//github.com/Dignifiedquire/rust-multihash"&gt;rust-multihash&lt;/a&gt;, which means more languages now implement the orginal &lt;a href="//github.com/jbenet/multihash"&gt;multihash&lt;/a&gt; and &lt;a href="//github.com/jbenet/multiaddr"&gt;multiaddr&lt;/a&gt; specs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more updates, see the &lt;a href="//github.com/ipfs/pm/issues/76"&gt;sprint issue&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="december-14"&gt;December 14&lt;/h2&gt;
&lt;p&gt;Here are some of the highlights for the &lt;a href="//github.com/ipfs/pm/issues/74"&gt;December 14&lt;/a&gt; Sprint:&lt;/p&gt;
&lt;h3 id="releases"&gt;Releases&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; shipped &lt;a href="//github.com/ipfs/fs-repo-migrations"&gt;fs-repo-migrations&lt;/a&gt;! These are migrations for the filesystem repository of ipfs clients. This tool is written in Go, and developed alongside go-ipfs, but it should work with any repo conforming to the fs-repo specs.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Dignifiedquire"&gt;@Dignifiedquire&lt;/a&gt; did some great work with &lt;a href="//github.com/Dignifiedquire/rust-multiaddr"&gt;rust-multiaddr&lt;/a&gt;, which is a Rust implementation of &lt;a href="//github.com/jbenet"&gt;@jbenet&lt;/a&gt;'s &lt;a href="//github.com/jbenet/multiaddr"&gt;multiaddr&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="updates_1"&gt;Updates&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/diasdavid/registry-mirror"&gt;&lt;strong&gt;(registry-mirror)&lt;/strong&gt;&lt;/a&gt; &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; worked on the npm on IPFS project. This involved some new features, moving the mirror to a different server, and making it work better with larger dirs and with 0.4.0.&lt;/li&gt;
&lt;li&gt;[&lt;strong&gt;(js-ipfs)&lt;/strong&gt;](//github.com/ipfs/js-ipfs &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; pushed some major updates for &lt;a href="//github.com/ipfs/js-ipfs-repo"&gt;js-ipfs&lt;/a&gt;, too.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Not much else to report this week; a lot of people are off to enjoy CCC, and the holidays.&lt;/p&gt;
&lt;h2 id="december-7th"&gt;December 7th&lt;/h2&gt;
&lt;p&gt;Here are some highlights of what happened during the &lt;a href="//github.com/ipfs/pm/issues/67"&gt;December 7 Sprint&lt;/a&gt; :&lt;/p&gt;
&lt;h3 id="releases_1"&gt;Releases&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt;  shipped IPFS version 0.3.10!  It contains &lt;a href="//github.com/ipfs/go-ipfs/compare/v0.3.9...v0.3.10"&gt;74 new commits&lt;/a&gt; since the previous version and you can &lt;a href="//ipfs.io/docs/install/"&gt;get it here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;npm on IPFS!  &lt;code&gt;registry-mirror&lt;/code&gt; is a new tool that enables distributed discovery of npm modules by fetching and caching the latest state of npm through IPNS.  For more info, see this &lt;a href="//blog.daviddias.me/2015/12/08/stellar-module-management"&gt;blog post&lt;/a&gt; by &lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; .&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jbenet"&gt;@jbenet&lt;/a&gt; released a new tool/library called &lt;a href="//github.com/jbenet/go-dnslink"&gt;dnslink&lt;/a&gt; that makes it easy to resolve dns links (special TXT records in a domain name that can point to paths, like an IPFS path)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="updates_2"&gt;Updates&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/infrastructure"&gt;&lt;strong&gt;(infrastructure)&lt;/strong&gt;&lt;/a&gt; On the infrastructure side of things, &lt;a href="//github.com/lgierth"&gt;@lgierth&lt;/a&gt; has &lt;a href="//github.com/ipfs/infrastructure/pull/135"&gt;bootstrapped&lt;/a&gt; two new storage, each with 17 TB of disk space!&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/api"&gt;&lt;strong&gt;(api)&lt;/strong&gt;&lt;/a&gt; &lt;a href="//github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; has [reached a draft 1]((//github.com/ipfs/api/pull/13) of the much needed API documentation.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/harlantwood"&gt;@harlantwood&lt;/a&gt; wrote a bit of &lt;a href="//github.com/ipfs/project-repos/pull/11"&gt;nodejs code&lt;/a&gt; that spins up a fresh IPFS node, sets it to a known ID, and publishes to IPNS using that node.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ipfs/specs"&gt;&lt;strong&gt;(specs)&lt;/strong&gt;&lt;/a&gt; The new IPFS Linked Data (IPLD) spec is actively being iterated on in the specs repository.  Join the discussion &lt;a href="//github.com/ipfs/specs/pull/37"&gt;here!&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="active-stuff"&gt;Active stuff&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/robcat"&gt;@robcat&lt;/a&gt; and &lt;a href="//github.com/fazo"&gt;@fazo&lt;/a&gt;96 have done great work integrating IPFS with pacman (the package manager for Arch Linux).  They can now install arch packages straight from IPFS!  For more details, see &lt;a href="//github.com/ipfs/notes/issues/84"&gt;this active discussion&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Dignifiedquire"&gt;@Dignifiedquire&lt;/a&gt; has been working on an attractive new distribution page for IPFS, which will be the new landing page to download all things IPFS.  You can see the &lt;a href="//github.com/ipfs/distributions/issues/11"&gt;latest screenshots here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="contributors"&gt;Contributors&lt;/h2&gt;
&lt;p&gt;Across the entire IPFS GitHub organization, the following people have committed code since December 7th. (We're autogenerating this list using &lt;a href="//github.com/ipfs/weekly/pull/5"&gt;this tool&lt;/a&gt;, so please let us know if your name isn't here.) In the future, we will also include people who comment, as they are also super important; bear with us while we develop that technology.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="//github.com/alexmingoia"&gt;@alexmingoia&lt;/a&gt; (Alex Mingoia)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/chriscool"&gt;@chriscool&lt;/a&gt; (Christian Couder)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/diasdavid"&gt;@diasdavid&lt;/a&gt; (David Dias)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/digital-dreamer"&gt;@digital-dreamer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Dignifiedquire"&gt;@Dignifiedquire&lt;/a&gt; (Friedel Ziegelmayer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/djdv"&gt;@djdv&lt;/a&gt; (Dominic Della Valle)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/fazo96"&gt;@fazo96&lt;/a&gt; (Enrico Fasoli)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/greenkeeperio-bot"&gt;@greenkeeperio-bot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/harlantwood"&gt;@harlantwood&lt;/a&gt; (Harlan T Wood)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/hcs64"&gt;@hcs64&lt;/a&gt; (Adam Gashlin)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ianopolous"&gt;@ianopolous&lt;/a&gt; (Ian Preston)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ivilata"&gt;@ivilata&lt;/a&gt; (Ivan Vilata-i-Balaguer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jbenet"&gt;@jbenet&lt;/a&gt; (Juan Benet)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/jedahan"&gt;@jedahan&lt;/a&gt; (Jonathan Dahan)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/Kubuxu"&gt;@Kubuxu&lt;/a&gt; (Jakub Sztandera)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/kyledrake"&gt;@kyledrake&lt;/a&gt; (Kyle Drake)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/lgierth"&gt;@lgierth&lt;/a&gt; (Lars Gierth)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/NeoTeo"&gt;@NeoTeo&lt;/a&gt; (Teo Sartori)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ralphtheninja"&gt;@ralphtheninja&lt;/a&gt; (Lars-Magnus Skog)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/ReadmeCritic"&gt;@ReadmeCritic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/rht"&gt;@rht&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/RichardLitt"&gt;@RichardLitt&lt;/a&gt; (Richard Littauer)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/travisperson"&gt;@travisperson&lt;/a&gt; (Travis Person)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/wasserfuhr"&gt;@wasserfuhr&lt;/a&gt; (RainerWasserfuhr)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/whyrusleeping"&gt;@whyrusleeping&lt;/a&gt; (Jeromy Johnson)&lt;/li&gt;
&lt;li&gt;&lt;a href="//github.com/zignig"&gt;@zignig&lt;/a&gt; (Simon Kirkby)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thanks, and see you next week!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Richard Littauer and Andrew Chin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="//github.com/ipfs/weekly/issues/7"&gt;&lt;em&gt;Send us feedback about the Weekly&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;</summary></entry><entry><title>Stellar Module Management - Install your Node.js modules using IPFS</title><link href="/blog/8-registry-mirror" rel="alternate"></link><published>2015-12-08T00:00:00+01:00</published><author><name>David Dias</name></author><id>tag:,2015-12-08:blog/8-registry-mirror</id><summary type="html">&lt;p&gt;&lt;img alt="" src="/blog/8-registry-mirror/node-interactive-logo.png" /&gt;&lt;/p&gt;
&lt;p&gt;Node.js Interactive, the first Node.js conference organized by the Linux Foundation, happened on Dec 8-9 of 2015. There were hundreds of participants, and dozens of really amazing talks divided in 3 specific tracks: backend, frontend and IoT.&lt;/p&gt;
&lt;p&gt;I was fortunate to attend and present a project we've been developing at &lt;a href="https://ipn.io"&gt;Protocol Labs&lt;/a&gt;, that builds on on top of &lt;a href="https://ipfs.io"&gt;IPFS, the InterPlanetary FileSystem&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can learn about that project in this blog post, check out the &lt;a href="http://www.slideshare.net/DavidDias11/nodejs-interactive"&gt;talk slides&lt;/a&gt; or wait for the video recording of the talk. I will update this blog post when that happens.&lt;/p&gt;
&lt;h2 id="enter-registry-mirror"&gt;Enter registry-mirror&lt;/h2&gt;
&lt;p&gt;&lt;img alt="" src="/blog/8-registry-mirror/enter-registry-mirror.png" /&gt;
&lt;a href="http://ipn.io"&gt;&lt;img alt="" src="https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square" /&gt;&lt;/a&gt; &lt;a href="http://ipfs.io/"&gt;&lt;img alt="" src="https://img.shields.io/badge/project-IPFS-blue.svg?style=flat-square" /&gt;&lt;/a&gt; &lt;a href="http://webchat.freenode.net/?channels=%23ipfs"&gt;&lt;img alt="" src="https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;registry-mirror&lt;/code&gt; enables distributed discovery of npm modules by fetching and caching the latest state of npm through IPNS, the InterPlanetary Naming System. With this state, a node in the network is capable of querying IPFS network for an npm module's cryptographic hash, fetching it from any peer that has it available.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;registry-mirror&lt;/code&gt; is open source, MIT licensed and available at &lt;a href="https://github.com/diasdavid/registry-mirror"&gt;github.com/diasdavid/registry-mirror&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="getting-started"&gt;Getting started&lt;/h2&gt;
&lt;p&gt;In order to get started, you must first be sure that you are running IPFS 0.4.0. IPFS 0.4.0 is not yet released, but you can already use it by compiling from source or downloading the pre-built binary.&lt;/p&gt;
&lt;h4 id="compiling-from-source"&gt;Compiling from source&lt;/h4&gt;
&lt;p&gt;You can find a tutorial on how to compile and install IPFS from source at &lt;a href="https://github.com/ipfs/go-ipfs#build-from-source"&gt;https://github.com/ipfs/go-ipfs#build-from-source&lt;/a&gt;. Just make sure to change to the &lt;code&gt;dev0.4.0&lt;/code&gt; branch, as 0.4.0 isn't released yet.&lt;/p&gt;
&lt;p&gt;Please make sure you have go 1.5.2 or above installed.&lt;/p&gt;
&lt;h4 id="downloading-pre-built-binary"&gt;Downloading pre-built Binary&lt;/h4&gt;
&lt;p&gt;Download the pre-built binary for your OS and Arch at &lt;a href="https://gobuilder.me/github.com/ipfs/go-ipfs/cmd/ipfs?branch=v0.4.0-dev"&gt;gobuilder&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id="installing-and-running-registry-mirror"&gt;Installing and running registry-mirror&lt;/h4&gt;
&lt;p&gt;Once you have IPFS 0.4.0 available, install registry-mirror by running the following command (you should have Node.js 4 and npm 2 or above available):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ npm i registry-mirror -g
&lt;span class="c1"&gt;# ...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Then start your IPFS daemon, run:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ ipfs daemon
Initializing daemon...
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip4/172.19.248.69/tcp/4001
Swarm listening on /ip6/::1/tcp/4001
API server listening on /ip4/127.0.0.1/tcp/5001
Gateway &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;readonly&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;After, run registry-mirror daemon with the &lt;code&gt;--ipfs&lt;/code&gt; option:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ registry-mirror daemon --ipfs --port&lt;span class="o"&gt;=&lt;/span&gt;9595
IPFS mode ON
registry-mirror &lt;span class="o"&gt;[&lt;/span&gt;info&lt;span class="o"&gt;]&lt;/span&gt; output dir: /npm-registry/
registry-mirror &lt;span class="o"&gt;[&lt;/span&gt;info&lt;span class="o"&gt;]&lt;/span&gt; listening:127.0.0.1:9595
registry-mirror &lt;span class="o"&gt;[&lt;/span&gt;info&lt;span class="o"&gt;]&lt;/span&gt; Updated /npm-registry to: /ipfs/QmSjG9fadu4mPdtRsQYtXhwwCBouFEPiYHtVf8f4iH6vwj
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Now, to install a module using IPFS, you only need to set this local registry when running an &lt;code&gt;npm install&lt;/code&gt;. This can be done through &lt;a href="https://docs.npmjs.com/cli/config"&gt;config&lt;/a&gt; or a command line argument:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ npm i bignumber --registry&lt;span class="o"&gt;=&lt;/span&gt;http://localhost:9595
npm http request GET http://localhost:9595/bignumber
npm http &lt;span class="m"&gt;200&lt;/span&gt; http://localhost:9595/bignumber
npm http fetch GET http://localhost:9595/bignumber/-/bignumber-1.1.0.tgz
npm http fetch &lt;span class="m"&gt;200&lt;/span&gt; http://localhost:9595/bignumber/-/bignumber-1.1.0.tgz
/Users/david/Documents/code/ipfs/ip-npm/node-interactive
└── bignumber@1.1.0
&lt;/pre&gt;&lt;/div&gt;


&lt;h2 id="features"&gt;Features&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;registry-mirror&lt;/code&gt; itself is quite a simple application, as most of the heavy lifting is done by &lt;a href="https://ipfs.io"&gt;IPFS&lt;/a&gt;. IPFS's distributed nature affords a set of really nice features as a transport layer that &lt;code&gt;registry-mirror&lt;/code&gt; leverages to create its service.&lt;/p&gt;
&lt;h4 id="find-where-the-module-lives-without-having-to-hit-the-backbone"&gt;Find where the module lives without having to hit the backbone&lt;/h4&gt;
&lt;p&gt;With &lt;code&gt;registry-mirror&lt;/code&gt;, a registry becomes a curated list of hashes. While the modules live in the network, as soon as &lt;code&gt;registry-mirror&lt;/code&gt; caches this list locally (which it gets from the IPFS network), it has a list of the hashes of the modules that a user might need in the future. With this list, a user doesn't have to know of the whereabouts of a module until it needs to request it from the network.&lt;/p&gt;
&lt;p&gt;This list is fetched and kept up to date through IPNS. This ensures secure distribution, as IPNS records and validated with the publisher's priate key.&lt;/p&gt;
&lt;h4 id="work-offlinedisconnected"&gt;Work offline/disconnected&lt;/h4&gt;
&lt;p&gt;Just like git, &lt;code&gt;registry-mirror&lt;/code&gt; is able to work offline and/or in a disconnected scenario. As long as the module you are looking for exists in the network you are currently in, IPFS would be able to find it through its Peer and Content Routing (e.g. with a DHT).&lt;/p&gt;
&lt;h4 id="enable-several-registries-to-coexist"&gt;Enable several registries to coexist&lt;/h4&gt;
&lt;p&gt;Once the notion of a registry becomes a curated list of modules available, enabling more than one registry to exist becomes simpler. This scenario can be especially interesting for private networks such as the ones within companies and organizations that don't want their modules to be publicly known and available.&lt;/p&gt;
&lt;h4 id="run-only-what-you-were-looking-for"&gt;Run only what you were looking for&lt;/h4&gt;
&lt;p&gt;Just like git, IPFS verifies the content received using cryptographic hashing, making sure it is exactly what was requested -- you can always be sure that what you are running is what you asked for.&lt;/p&gt;
&lt;h4 id="faster"&gt;Faster&lt;/h4&gt;
&lt;p&gt;By leveraging local and network caches efficiently, downloading your dependencies can be much faster as it avoids going to npm's servers or CDN all the time. This can be crucial in high latency networks or more remote areas.&lt;/p&gt;
&lt;h2 id="demo-video"&gt;Demo Video&lt;/h2&gt;
&lt;iframe src="https://player.vimeo.com/video/147968322" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;p&gt;&lt;a href="https://vimeo.com/147968322"&gt;registry-mirror demo&lt;/a&gt; from &lt;a href="https://vimeo.com/daviddias"&gt;David Dias&lt;/a&gt; on &lt;a href="https://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;/p&gt;
&lt;h2 id="a-special-thanks"&gt;A special thanks&lt;/h2&gt;
&lt;p&gt;A very big thank you goes to &lt;a href="https://github.com/bengl"&gt;Bryan English&lt;/a&gt; and everyone that was involved in the &lt;a href="https://github.com/ipfs/notes/issues/2"&gt;discussion&lt;/a&gt; and contributed to make this possible.&lt;/p&gt;</summary></entry><entry><title>ipscend - Publish static web content to IPFS</title><link href="/blog/3-ipscend" rel="alternate"></link><published>2015-11-27T00:00:00+01:00</published><author><name>David Dias</name></author><id>tag:,2015-11-27:blog/3-ipscend</id><summary type="html">&lt;p&gt;&lt;a href="https://github.com/diasdavid/ipscend"&gt;&lt;img alt="" src="/blog/3-ipscend/ipscend.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/diasdavid/ipscend"&gt;&lt;code&gt;ipscend&lt;/code&gt;&lt;/a&gt; is a new tool to help developers publish their static web content to IPFS and share it easily, while keeping history and more. It is heavily inspired by previous static web content publishing tools, like GitHub Pages and surge.&lt;/p&gt;
&lt;h2 id="features"&gt;Features&lt;/h2&gt;
&lt;p&gt;Currently, &lt;code&gt;ipscend&lt;/code&gt; offers a set of features, accessible through a CLI, and installable through npm (&lt;code&gt;npm i -g ipscend&lt;/code&gt;), which enable a simple workflow for working in your Web page/app and publishing it to the IPFS network.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ipscend browse&lt;/code&gt; - Opens the last published version of your application in the browser.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ipscend init&lt;/code&gt; - Initializes your project. Asks for the folder where the web application will be available and stores an &lt;code&gt;ipscend.json&lt;/code&gt; object in your current path to store all the metadata it generates, such as published versions and taken screenshots.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ipscend preview&lt;/code&gt; - Serves your application on a local static file server, so that you can try it out before you feel ready to publish it.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ipscend publish&lt;/code&gt; - Publishes the current state of your application to IPFS and stores a reference to it.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ipscend versions&lt;/code&gt; - Prints out the published versions for the app and its respective timestamp.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ipscend screenshot&lt;/code&gt; - Opens a screenshot preview of all the published versions of your app. In order to generate the screenshots, you must first run &lt;code&gt;ipscend screenshot --gen&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="" src="/blog/3-ipscend/ipscend-screenshot.gif" /&gt;&lt;/p&gt;
&lt;p&gt;An &lt;code&gt;ipscend.json&lt;/code&gt; object for a project with some published versions will look like:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ cat ipscend.json
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;versions&amp;quot;&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;&amp;quot;hash&amp;quot;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;quot;QmQhNMwk7fThpwRNUR3bStb1eA7aeFJaApZjDaQCnykowL&amp;quot;&lt;/span&gt;,
      &lt;span class="s2"&gt;&amp;quot;timestamp&amp;quot;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;quot;2015-11-14T14:50:10.998Z&amp;quot;&lt;/span&gt;,
      &lt;span class="s2"&gt;&amp;quot;snapshot&amp;quot;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;quot;QmNMqiKZG7gCsnaQFTqG3AUeVhA1n8byy974Yqn3qRGZcJ&amp;quot;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;,
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;&amp;quot;hash&amp;quot;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;quot;QmSAmgQPCWjbrpbYHZQ2rVkH7a9vavubG1Jzv5CjDWrUmt&amp;quot;&lt;/span&gt;,
      &lt;span class="s2"&gt;&amp;quot;timestamp&amp;quot;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;quot;2015-11-14T14:51:00.860Z&amp;quot;&lt;/span&gt;,
      &lt;span class="s2"&gt;&amp;quot;snapshot&amp;quot;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;quot;QmcCNrn72FuHWkXtpJuUYfbH87d61qa6PSagUbLiK6VfLJ&amp;quot;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;,
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;&amp;quot;hash&amp;quot;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;quot;QmVNgdUoBQHiBhSeDe2z8LttJaDZq7JZi17sR1SPnJmjMh&amp;quot;&lt;/span&gt;,
      &lt;span class="s2"&gt;&amp;quot;timestamp&amp;quot;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;quot;2015-11-14T14:51:24.379Z&amp;quot;&lt;/span&gt;,
      &lt;span class="s2"&gt;&amp;quot;snapshot&amp;quot;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;quot;QmP5NuGdozeWaZqEdY1zBpcupB6qQ66AWReqm4L2vJzt73&amp;quot;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;]&lt;/span&gt;,
  &lt;span class="s2"&gt;&amp;quot;path&amp;quot;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;quot;src/public&amp;quot;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h2 id="workflow"&gt;Workflow&lt;/h2&gt;
&lt;p&gt;In order to get started, all you need to do is initiate your ipscend in your web page/app project:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ ipscend init
This utility will walk you through creating a ipscend.json file.
Path of your Web Application &lt;span class="o"&gt;(&lt;/span&gt;project&lt;span class="o"&gt;)&lt;/span&gt;? &lt;span class="o"&gt;(&lt;/span&gt;public&lt;span class="o"&gt;)&lt;/span&gt; src/public
$ cat ipscend.json
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;versions&amp;quot;&lt;/span&gt;: &lt;span class="o"&gt;[]&lt;/span&gt;,
  &lt;span class="s2"&gt;&amp;quot;path&amp;quot;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;quot;src/public&amp;quot;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Once you are ready to publish, run the &lt;code&gt;ipscend publish&lt;/code&gt; command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ ipscend publish
&lt;span class="o"&gt;{&lt;/span&gt; hash: &lt;span class="s1"&gt;&amp;#39;QmVNgdUoBQHiBhSeDe2z8LttJaDZq7JZi17sR1SPnJmjMh&amp;#39;&lt;/span&gt;,
  timestamp: Fri Nov &lt;span class="m"&gt;27&lt;/span&gt; &lt;span class="m"&gt;2015&lt;/span&gt; 10:23:37 GMT+0000 &lt;span class="o"&gt;(&lt;/span&gt;WET&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
published src/public QmVNgdUoBQHiBhSeDe2z8LttJaDZq7JZi17sR1SPnJmjMh
$ cat ipscend.json
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;versions&amp;quot;&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;&amp;quot;hash&amp;quot;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;quot;QmVNgdUoBQHiBhSeDe2z8LttJaDZq7JZi17sR1SPnJmjMh&amp;quot;&lt;/span&gt;,
      &lt;span class="s2"&gt;&amp;quot;timestamp&amp;quot;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;quot;2015-11-27T16:23:37.971Z&amp;quot;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;]&lt;/span&gt;,
  &lt;span class="s2"&gt;&amp;quot;path&amp;quot;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;quot;src/public&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Grab that hash and share it with your friends, by sending them a link to ipfs.io, appending "/ipfs/Hash" (e.g.  https:/ipfs.io/ipfs/ QmVNgdUoBQHiBhSeDe2z8LttJaDZq7JZi17sR1SPnJmjMh).&lt;/p&gt;
&lt;p&gt;If you want to use your awesome.domain.com to load your page from IPFS, you can check how to do it now at https://github.com/diasdavid/ipscend#use-ipfs-to-host-your-webpage-using-a-standard-domain-includes-cool-dns-trick.&lt;/p&gt;
&lt;h2 id="awesome-future"&gt;Awesome (FUTURE)!&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;ipscend&lt;/code&gt; is still in its humble beginnings. Some of the ideas and plans to build in the future include being able to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Extract the version from the VCS itself (https://github.com/ipfs/notes/issues/23), so that every commit can be a different working version, allowing you to test every commit in your CI.&lt;/li&gt;
&lt;li&gt;Roll back history, following the 'time machine' analogy.&lt;/li&gt;
&lt;li&gt;Update your DNS provider automatically, avoiding having to use an external tool like &lt;a href="https://github.com/ipfs/dnslink-deploy"&gt;&lt;code&gt;dnslink-deploy&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Enable reviewers to write notes.&lt;/li&gt;
&lt;li&gt;Take screenshots in every browser version, so that we can use the timeline to see if there was any regression at a point in time, which might happen in a specific browser.&lt;/li&gt;
&lt;li&gt;moaaaar :D If you have ideas or want to contribute, ipscend is fully MIT Licensed, so feel free to open a issue or PR on https://github.com/diasdavid/ipscend.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A big thank you to &lt;a href="https://github.com/andresgutgon"&gt;Andrés Gutgon&lt;/a&gt; who made the screenshot preview look &lt;a href="https://github.com/diasdavid/ipscend-screenshot-visualizer/pull/1"&gt;really good&lt;/a&gt;&lt;/p&gt;</summary></entry><entry><title>Run IPFS in a Docker container</title><link href="/blog/1-run-ipfs-on-docker" rel="alternate"></link><published>2015-07-11T00:00:00+02:00</published><author><name>Kyle Drake</name></author><id>tag:,2015-07-11:blog/1-run-ipfs-on-docker</id><summary type="html">&lt;p&gt;In recent years, Docker and a few other projects have redefined how we run server applications. In the future, we might be running containerized apps in our personal devices. At its core, this fast-paced improvement is a combination of good interfaces to standardize how to do things, and great tooling to make using containers easy.&lt;/p&gt;
&lt;p&gt;The IPFS Project has many things planned for the world of containers. The most interesting is using IPFS to distribute containers hyper efficiently across data-centers and the internet. We will be discussing many of these things in upcoming posts, but first things first. This post is a quick guide for running an IPFS node directly within Docker.&lt;/p&gt;
&lt;p&gt;The IPFS team has provided an &lt;a href="https://registry.hub.docker.com/u/jbenet/go-ipfs/"&gt;IPFS Docker image&lt;/a&gt;, which is syncronized with the latest commits to &lt;a href="https://github.com/ipfs/go-ipfs"&gt;go-ipfs&lt;/a&gt;. It only takes a few commands to try it out!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;gt; mkdir /tmp/ipfs-docker-staging
&amp;gt; mkdir /tmp/ipfs-docker-data
&amp;gt; docker run -d --name ipfs-node &lt;span class="se"&gt;\&lt;/span&gt;
  -v /tmp/ipfs-docker-staging:/export -v /tmp/ipfs-docker-data:/data/ipfs &lt;span class="se"&gt;\&lt;/span&gt;
  -p 8080:8080 -p 4001:4001 -p 127.0.0.1:5001:5001 &lt;span class="se"&gt;\&lt;/span&gt;
  jbenet/go-ipfs:latest
faa8f714398c7a1a5a29adc2aed01857b41444ed53ec11863a3136ad37c8064c
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Port &lt;code&gt;8080&lt;/code&gt; is the HTTP Gateway, which allows you to query ipfs data with your browser (&lt;a href="http://gateway.ipfs.io/ipfs/QmVyS3iAy7mvDA2HqQWm2aqZDcGDH3bCRLFkEutfBWNBqN/"&gt;see this example&lt;/a&gt;), port &lt;code&gt;4001&lt;/code&gt; is what swarm port IPFS uses to communicate with other nodes, and port &lt;code&gt;5001&lt;/code&gt; is used for the local API. We bind &lt;code&gt;5001&lt;/code&gt; only on &lt;code&gt;127.0.0.1&lt;/code&gt; because it should not be exposed to the outside world. The &lt;code&gt;faa8f7143...&lt;/code&gt; is the docker container id.&lt;/p&gt;
&lt;p&gt;We've mounted a data and staging volume. The &lt;code&gt;data&lt;/code&gt; volume is used to store the IPFS local repo (config and database), and &lt;code&gt;staging&lt;/code&gt; is a directory you can use for staging files for command line usage (such as &lt;code&gt;ipfs add&lt;/code&gt;). If you're only using the API, you can omit the staging directory volume. And of course, feel free to put those directories somewhere other than &lt;code&gt;/tmp&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now what? Your node is running. You can issue commands directly to the containerized ipfs with &lt;code&gt;docker exec &amp;lt;container-id&amp;gt; &amp;lt;ipfs-cmd&amp;gt;&lt;/code&gt;. For example, you can try &lt;code&gt;ipfs swarm peers&lt;/code&gt; to see who you are connected to:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# let&amp;#39;s set $cid = &amp;lt;container-id&amp;gt; for easy access&lt;/span&gt;
&amp;gt; &lt;span class="nv"&gt;cid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;faa8f714398c7a1a5a29adc2aed01857b41444ed53ec11863a3136ad37c8064c
&amp;gt; docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nv"&gt;$cid&lt;/span&gt; ipfs swarm peers
/ip4/104.236.179.241/tcp/4001/ipfs/QmSoLpPVmHKQ4XTPdz8tjDFgdeRFkpV8JgYq8JVJ69RrZm
/ip4/128.199.219.111/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu
/ip4/162.243.248.213/tcp/4001/ipfs/QmSoLueR4xBeUbY9WZ9xGUUxunbKWcrNFTDAadQJmocnWm
/ip4/178.62.61.185/tcp/4001/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;And of course, you can &lt;code&gt;add&lt;/code&gt; or &lt;code&gt;cat&lt;/code&gt; content as usual:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;hello from dockerized ipfs&amp;quot;&lt;/span&gt; &amp;gt;/tmp/ipfs-docker-staging/hello
&amp;gt; docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nv"&gt;$cid&lt;/span&gt; ipfs add /export/hello
added QmcDge1SrsTBU8b9PBGTGYguNRnm84Kvg8axfGURxqZpR1 /export/hello
&amp;gt; docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nv"&gt;$cid&lt;/span&gt; ipfs cat /ipfs/QmSvCqazpuuib8qyRyddyFemLc2qmRukLLy8YfkdRPEXoQ
hello there!
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Your dockerized IPFS is now also running a Gateway at &lt;code&gt;http://&amp;lt;ip-address-of-the-computer&amp;gt;:8080&lt;/code&gt;. You can try it out with &lt;code&gt;curl&lt;/code&gt;, or with your browser:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;gt; curl http://localhost:8080/ipfs/QmcDge1SrsTBU8b9PBGTGYguNRnm84Kvg8axfGURxqZpR1
hello from dockerized ipfs
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;a href="http://kuberneteslaunch.com"&gt;Kubernetes 1.0&lt;/a&gt; comes out next week, so after that, we'll try using it to build a cluster of IPFS nodes that can store any kind of data and be able to retreive it from any other IPFS node. Not just with IPFS nodes in your cluster, but with everyone!&lt;/p&gt;
&lt;iframe src="../../static/run-ipfs-on-docker/index.html" style="width: 737px; height: 509px; overflow: hidden;" scrolling="no"&gt;&lt;/iframe&gt;

&lt;p class="powered"&gt;asciicast powered by &lt;a href="https://asciinema.org/" target="_top"&gt;asciinema&lt;/a&gt;&lt;/p&gt;</summary></entry><entry><title>Hello Worlds</title><link href="/blog/0-hello-worlds" rel="alternate"></link><published>2015-05-05T00:00:00+02:00</published><author><name>Juan Benet</name></author><id>tag:,2015-05-05:blog/0-hello-worlds</id><summary type="html">&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;hello worlds&amp;quot;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; ipfs add
added QmZ4tDuvesekSs4qM5ZBKpXiZGun7S2CYtEZRB3DYXkjGx
&amp;gt; ipfs cat QmZ4tDuvesekSs4qM5ZBKpXiZGun7S2CYtEZRB3DYXkjGx
hello worlds
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Greetings Internet!&lt;/p&gt;
&lt;p&gt;This post kicks off the official IPFS (InterPlanetary File System) Blog. This is long overdue-- the project is many months old. We will be making a series of posts explaining various aspects of IPFS, its development, our growing community, and so on. This blog will also be used to make all important announcements henceforth.&lt;/p&gt;
&lt;!--more--&gt;

&lt;p&gt;You can't &lt;em&gt;yet&lt;/em&gt; "follow" the blog with ipfs, but we're working on it and expect to have it working soon. For now, you can follow one of these ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP: http://ipfs.io/blog&lt;/li&gt;
&lt;li&gt;Git: &lt;code&gt;git clone https://github.com/ipfs/blog&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;GitHub: click watch at https://github.com/ipfs/blog&lt;/li&gt;
&lt;li&gt;RSS: &lt;a href="{{ baseurl }}/rss.xml"&gt;follow RSS Feed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;IPFS: &lt;a href="https://github.com/ipfs/blog/issues/2"&gt;coming soon&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Don't miss any InterPlanetary updates!&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="/blog/0-hello-worlds/earthrise.png" /&gt;&lt;/p&gt;</summary></entry></feed>