Open main menu

InterPlanetary File System

InterPlanetary File System (IPFS) is a protocol and network designed to create a content-addressable, peer-to-peer method of storing and sharing hypermedia in a distributed file system.[2] IPFS was initially designed by Juan Benet, and is now an open-source project developed with help from the community.[3][4]

InterPlanetary File System
Original author(s)Juan Benet and Protocol Labs
Developer(s)Protocol Labs
Stable release
0.4.17 / 27 July 2018; 3 months ago (2018-07-27)
Written inProtocol implementations: Go (reference implementation), JavaScript, C[1], Python
Client libraries: Go, Java, JavaScript, Python, Scala, Haskell, Swift, Common Lisp, Rust, Ruby, PHP, C#, Erlang
Operating systemFreeBSD, Linux, macOS, Windows
Available inGo, JavaScript, Python
TypeProtocol, distributed file system, content delivery network
LicenseMIT license



In 2014, the IPFS protocol took advantage of the Bitcoin blockchain protocol and network infrastructure in order to store unalterable data, remove duplicated files across the network, and obtain address information for accessing storage nodes to search for files in the network.[5][2]

Implementations in Go[6] and JavaScript[7] exist, and a Python implementation is in progress.[8] The Go implementation is considered to be the reference implementation[9] while formal specifications are developed.[10]


IPFS is a peer-to-peer distributed file system that seeks to connect all computing devices with the same system of files. In some ways, IPFS is similar to the World Wide Web, but IPFS could be seen as a single BitTorrent swarm, exchanging objects within one Git repository. In other words, IPFS provides a high-throughput, content-addressed block storage model, with content-addressed hyperlinks.[11] This forms a generalized Merkle directed acyclic graph (DAG). IPFS combines a distributed hash table, an incentivized block exchange, and a self-certifying namespace. IPFS has no single point of failure, and nodes do not need to trust each other not to tamper with data in transit.[12] Distributed Content Delivery saves bandwidth and prevents DDoS attacks, which HTTP struggles with.[5]

The filesystem can be accessed in a variety of ways, including via FUSE and over HTTP.[11] A local file can be added to the IPFS filesystem, making it available to the world. Files are identified by their hashes, so it's caching-friendly. They are distributed using a BitTorrent-based protocol. Other users viewing the content aid in serving the content to others on the network. IPFS has a name service called IPNS, a global namespace based on PKI, serves to build trust chains, is compatible with other NSes and can map DNS, .onion, .bit, etc. to IPNS.[13]

The Wikipedia logo has an IPFS hash with the following code: QmRW3V9znzFW9M5FYbitSEvd5dQrPWGvPvgQD6LM22Tv8D. It can be accessed with that hash over HTTP by a public gateway or a local IPFS instance

Merkle data formatEdit

Every Merkle is a directed acyclic graph (DAG) because each node is accessed via its name. Each branch of Merkle is the hash of its local contents, naming children by their hash instead of their full contents. So after creation there is no way to edit a node. This prevents cycles (assuming there are no hash collisions), since one cannot link the first created node to the last node to create the last reference.

In general, for any Merkle to create a new branch or verify an existing branch, a hash algorithm is used on some combination of the local contents, such as a list of child hashes and other bytes. A few different hash algorithms are available in IPFS.

The data input to any of those hash algorithms is documented.[14]

Notable usersEdit

  • IPFS was used to create a mirror of Wikipedia, which allows people living in jurisdictions where Wikipedia is blocked to access the content of Wikipedia.[17] That archived version of Wikipedia is a limited immutable copy that cannot be updated. Efforts are being made to resolve mutable (updatable) and immutable (permanent archive) systems and interfaces.[citation needed]

"In short: IPFS addresses and moves content; Filecoin is the missing incentive layer."[19]

See alsoEdit


  1. ^ Agorise (23 October 2017). "c-ipfs: IPFS implementation in C. Why C? Think Bitshares' Stealth backups, OpenWrt routers (decentralize the internet/meshnet!), Android TV, decentralized Media, decentralized websites, decent." Retrieved 25 October 2017.
  2. ^ a b Finley, Kurt (June 20, 2016). "The Inventors of the Internet Are Trying to Build a Truly Permanent Web". Wired.
  3. ^ "The IPFS Project". Retrieved 11 September 2015.
  4. ^ "IPFS README - Who designed it?". Retrieved 11 September 2015.
  5. ^ a b "IPFS Protocol Selects Ethereum Over Bitcoin, Prefers Ethereum Dev Community". Retrieved 25 October 2017.
  6. ^ "ipfs/go-ipfs". GitHub. Retrieved 2017-02-13.
  7. ^ "ipfs/js-ipfs". GitHub. Retrieved 2017-02-13.
  8. ^ "ipfs/py-ipfs". GitHub. Retrieved 2017-02-13.
  9. ^ "IPFS Docs". Retrieved 2017-02-13.
  10. ^ "ipfs/specs". GitHub. Retrieved 2017-02-13.
  11. ^ a b Allison, Ian (13 October 2016). "Juan Benet of IPFS talks about Filecoin". Retrieved 25 October 2017.
  12. ^ "IPFS is the Distributed Web". Retrieved 27 March 2018.
  13. ^ "IPFS README". Retrieved 11 September 2015.
  14. ^ "go-ipfs: IPFS implementation in go". 25 October 2017. Retrieved 25 October 2017.
  15. ^ Balcell, Marta Poblet (5 October 2017). "Inside Catalonia's cypherpunk referendum". Eureka Street.
  16. ^ Hill, Paul (30 September 2017). "Catalan referendum app removed from Google Play Store". Neowin. Retrieved 2017-10-06.
  17. ^ Dale, Brady (10 May 2017). "Turkey Can't Block This Copy of Wikipedia". Observer Media. Archived from the original on 18 Oct 2017. Retrieved 20 December 2017.
  18. ^ Johnson, Steven (2018-01-16). "Beyond the Bitcoin Bubble". The New York Times. Retrieved 2018-09-26.
  19. ^ "What is the connection between IPFS and Filecoin?". Retrieved 2018-11-04.

External linksEdit