ACM ICN 2019, Hong Kong, CHINA

Half-day Tutorial: The InterPlanetary File System (IPFS)

The InterPlanetary File System (IPFS) is a peer-to-peer content-addressable distributed filesystem that seeks to connect all computing devices with the same system of files. It is an opensource community-driven project, with reference implementations in Go and Javascript, and aglobal community of millions of users.IPFS resembles past and present efforts to build and deploy Information-Centric Networking approaches to content storage, resolution, distribution and delivery. IPFS and libp2p, which isthe modular network stack of IPFS, are based on name-resolution based routing. The resolution system is based on Kademlia DHT and content is addressed by flat hash-based names. IPFS sees significant real-world usage already and is projected to become one of the main decentralised storage platforms in the near future. The objective of this tutorial is to make the audience familiar with IPFS and able to use the tools provided by the project for research and development. The tutorial targets both developers andresearchers, who may contribute to the project or use it as a tool.

Tutorial Overview


  • David Dias

    Protocol Labs, (Palo Alto, CA and Lisbon, Portugal)

    • David Dias is a Peer-2-Peer Software Engineer at Protocol Labs, (Palo Alto, CA and Lisbon,Portugal), doing software engineering and research, developing protocols to upgrade the web.Previously David worked at &yet where he had the chance to collaborate with all types of teams,helping them ship better secure software by auditing web applications and delivering hands ontraining in Node.js application security and also how to use WebRTC. He has also done Research at the Distributed Systems Group at INESC-ID Lisboa, later becoming an Invited Lecturer and creating the "Modern Web Development" course (from scratch). Passionate abouttechnology, has served IEEE, Google and Kairos, organizing several events and conferences,and even starting his own online events with the Lisbon JavaScript Conference (2012, 2013 and2014) and Startup Scholarship.


  • Adin Schmahmann

    Protocol Labs, (Palo Alto, CA and Lisbon, Portugal)

    • Adin Schmahmann is a distributed systems engineer with a background in designing cryptographically secure systems. He graduated from the Massachusetts Institute ofTechnology (MIT) in 2013 majoring in computer science and physics, before continuing on to amaster's at MIT in computer science in 2014. He worked at MIT's Lincoln Laboratory researching usable cryptographically secured sharing systems and founded SurgeLocker totackle problems revolving around encrypted real-time collaborative applications. He currentlyworks at Protocol Labs developing distributed and peer-to-peer systems for managingnamed/mutable data structures. Adin is passionate about making the digital world more secureand robust. He is based out of Cambridge, MA.


  • Cole Brown

    Protocol Labs, (Palo Alto, CA and Lisbon, Portugal)

    • Cole Brown is a software engineer with a background in distributed systems and functional programming. Starting his career in financial technology, Cole went on to design and implement an online stream-processing framework that processed millions of messages per second. At Protocol Labs, he works full time on libp2p, a modular networking stack. Recently, he kickstarted a testing framework to help benchmark and verify peer to peer applications at reasonable scale.



The main objective of this tutorial is to let researchers, developers, and users understand IPFS and the capabilities it provides. It is expected that by the end of the course, all attendees have a fully working and interoperable application running on their machine that they can further develop following the spec of the session. The resulting application will be fully P2P using the IPFS & libp2p stacks.

More specifically, participants will:

  • Understand how IPFS brings content addressing as a core primitive for data distribution
  • Learn how to use CIDs (content identifiers) to find content and interpret what the content is programatically
  • Learn how to create distributed applications
  • Learn how to create custom data structures using IPFS and its underlying data format, IPLD (InterPlanetary Linked Data)
  • Understand how libp2p bring process addressing as a core primitive for P2P and runtime-independent applications

Type of the Tutorial

This tutorial will have both a lecture component and a hands-on component. Participants will work in pairs to go through a series of hands-on exercises to master each new concept as the lecture progresses.

Outline of the Tutorial

1) Understanding how IPFS deals with files (60 minutes)

This module provides a deep exploration of the reasons behind immutable data, how IPFS addresses immutable data, the data structures IPFS creates and the different ways of interacting with files in IPFS. Specific topics include:

  1. Immutability and its importance
  2. The anatomy of a CID
  3. Fundamentals of Merkle DAGs
  4. The workflow of adding files to IPFS
  5. The Mutable File System (MFS)

2) Solving distributed networking problems with libp2p (50 minutes)

In this module, attendees will build a libp2p application. The module will cover:

  1. Transport, Stream Muxer and Crypto Configuration
  2. Composition of multiaddrs
  3. Creating a custom protocol
  4. Peer discovery with Bootstrap, MDNS and DHT Random Walk
  5. Message broadcasting with Pubsub
  6. Leveraging protobuf to create versatile messaging
  7. Subnet discovery leveraging the DHT

3) Developing Apps with the IPFS API (50 minutes)

Ways to use IPFS as a building block in your application:

  1. Identify use cases for Backend, Remote and Embedded nodes
  2. Find out when to use go-ipfs vs js-ipfs vs API client
  3. Get a hands-on experience in command-line and while building a sandbox web application
  4. How IPFS API simplifies handling of immutable data
  5. What are strategies for managing mutable pointers to immutable data

4) The lifecycle of data in IPFS (50 minutes)

In this course we will cover how IPFS deals with data, including:

  1. Providing data via IPFS and the role of Kademlia
  2. Finding data on IPFS and the Bitswap protocol
  3. Managing data in a local node, via pinning and garbage collection

Requirements for Attendees

In order to participate in the hands-on part of the tutorial, attendees should bring their own laptop (at least one for each two attendees) having a code editor and a pre-installed recent version of IPFS Desktop, Go, and Node.js, as well as clone the js-libp2p examples repository. Basic programming knowledge is a requirement and some Javascript knowledge is a welcome bonus.