/ipfs

Peer-to-peer hypermedia protocol

MIT LicenseMIT

IPFS is the Distributed Web

A peer-to-peer hypermedia protocol to make the web faster, safer, and more open.

Matrix IRC Discord Changelog #204

Welcome to IPFS! Why not watch a video demo to get started? Please post questions and ideas at https://discuss.ipfs.io

Read this in other languages: Portuguese.

Table of Contents

Overview

IPFS (the InterPlanetary File System) is a new hypermedia distribution protocol, addressed by content and identities. IPFS enables the creation of completely distributed applications. It aims to make the web faster, safer, and more open.

IPFS is a distributed file system that seeks to connect all computing devices with the same system of files. In some ways, this is similar to the original aims of the Web, but IPFS is actually more similar to a single bittorrent swarm exchanging git objects. You can read more about its origins in the paper IPFS - Content Addressed, Versioned, P2P File System.

IPFS is becoming a new major subsystem of the internet. If built right, it could complement or replace HTTP. It could complement or replace even more. It sounds crazy. It is crazy.

Alpha Demo

Want to see more? Check out Juan Benet's talk at Sourcegraph - IPFS: The Permanent Web.

Quick Summary

IPFS is a protocol:

  • defines a content-addressed file system
  • coordinates content delivery
  • combines Kademlia + BitTorrent + Git

IPFS is a filesystem:

  • has directories and files
  • mountable filesystem (via FUSE)

IPFS is a web:

  • can be used to view documents like the web
  • files accessible via HTTP at https://ipfs.io/<path>
  • browsers or extensions can learn to use the ipfs:// URL or dweb:/ipfs/ URI schemes directly
  • hash-addressed content guarantees authenticity

IPFS is modular:

  • connection layer over any network protocol
  • routing layer
  • uses a routing layer DHT (kademlia/coral)
  • uses a path-based naming service
  • uses bittorrent-inspired block exchange

IPFS uses crypto:

  • cryptographic-hash content addressing
  • block-level deduplication
  • file integrity + versioning
  • filesystem-level encryption + signing support

IPFS is p2p:

  • worldwide peer-to-peer file transfers
  • completely decentralized architecture
  • no central point of failure

IPFS is a cdn:

  • add a file to the filesystem locally, and it's now available to the world
  • caching-friendly (content-hash naming)
  • bittorrent-based bandwidth distribution

IPFS has a name service:

  • IPNS, an SFS inspired name system
  • global namespace based on PKI
  • serves to build trust chains
  • compatible with other NSes
  • can map DNS, .onion, .bit, etc to IPNS

How IPFS Works

To learn more about how IPFS works take a look at the Papers or Talks. You can also explore the Specs in writing.

IPFS Papers

IPFS Talks

This is a short selection of introductory talks. In time we will collect more here.

See full list at IPFS Media

More About IPFS

The IPFS project seeks to evolve the infrastructure of the Internet and the Web, with many things we've learned from successful systems, like Git, BitTorrent, Kademlia, Bitcoin, and many, many more. This is the sort of thing that would have come out of ARPA/DARPA/IETF/BellLabs in another age. IPFS is a Free Open Source project, with hundreds of contributors.

Current State of IPFS

IPFS is a work in progress!

Please note that IPFS is a work in progress. It is an ambitious plan to make the internet more free, open, secure, and high performance. It builds on the good ideas of numerous battle-tested distributed systems.

Today, there is one main IPFS Protocol implementation (in Go) with more on the way (JavaScript, and Python).

Alpha Distribution

In February of 2015, the go-ipfs implementation was released as an "Alpha Distribution". Since then, go-ipfs has been making regular releases on the road towards Beta. Both js-ipfs and py-ipfs are in progress.

For an in-depth tutorial, see a Hands on Introduction.

Security Issues and Disclosures

The IPFS protocol and its implementations are still in heavy development. This means that there may be problems in our protocols, or there may be mistakes in our implementations. And -- though IPFS is not production-ready yet -- many people are already running nodes in their machines. So we take security vulnerabilities very seriously. If you discover a security issue, please bring it to our attention right away!

If you find a vulnerability that may affect live deployments -- for example, by exposing a remote execution exploit -- please send your report privately to security@ipfs.io. Please DO NOT file a public issue.

If the issue is a protocol weakness that cannot be immediately exploited or something not yet deployed, just discuss it openly.

Project and Community

The IPFS Project is now very large, with hundreds of contributors in our community. You are invited to join it! Here are some links to our communication channels:

You can also find our community on:

The IPFS Project is big -- there are many subprojects and related efforts. We will document the core ones here, though you should look around. The space is exploding and lots of new projects are springing up all the time.

For a community-curated lists of awesome projects using IPFS, check out awesome-ipfs!

Protocol Implementations

Language Project Completeness
Go https://github.com/ipfs/go-ipfs reference
JavaScript https://github.com/ipfs/js-ipfs alpha
Python https://github.com/ipfs/py-ipfs starting
C https://github.com/Agorise/c-ipfs starting

If you would you like to start your own language implementation of IPFS, check out the IPFS Implementation Guide, and the Specifications. The specs are still evolving, but the core formats are stable and can be built on. Make sure to post an issue if you would like to start an effort, as many people have expressed interest in contributing to new implementations.

HTTP Client Libraries

IPFS http client lib logo

Language Client Library Completeness
Go https://github.com/ipfs/go-ipfs-api ??
Java https://github.com/ipfs/java-ipfs-api ??
JavaScript https://github.com/ipfs/js-ipfs-api 100%
Python https://github.com/ipfs/py-ipfs-api ??
Scala https://github.com/ipfs/scala-ipfs-api ??
Clojure https://github.com/keorn/clj-ipfs-api ??
Clojurescript https://github.com/district0x/cljs-ipfs-http-client 100%
Haskell https://github.com/davidar/hs-ipfs-api ??
Swift https://github.com/ipfs/swift-ipfs-api ??
CommonLisp https://github.com/WeMeetAgain/cl-ipfs-api ??
Rust https://github.com/ferristseng/rust-ipfs-api ??
https://github.com/gkbrk/rust-ipfs-api ??
https://github.com/rmnoff/rust-ipfs-api ??
https://github.com/rschulman/rust-ipfs-api ??
Ruby https://github.com/Fryie/ipfs-ruby ??
Mac Automator https://github.com/NeoTeo/ipfs-osx-service ??
Pharo https://github.com/khinsen/ipfs-pharo ??
PHP https://github.com/cloutier/php-ipfs-api ??
https://github.com/digitalkaoz/php-ipfs-api ??
C# https://github.com/jeremy-ellis-tech/net-ipfs-http-client ??
https://github.com/richardschneider/net-ipfs-api ??
C++ https://github.com/vasild/cpp-ipfs-api ??
Erlang https://github.com/hendry19901990/erlang-ipfs-http-client ??
Objective C None yet ??
Julia contact: @rened ??
Lua contact: @seclorum ??

Please help by contributing to one of the above client libraries. If you would like to create another, please see the IPFS HTTP Client Implementation Guide, and tell us so we can help!

Project Directory

This aims to be a directory of all the various repos in the IPFS Github Organization, and other closely related things.

We have a status board that checks all IPFS repositories for CI, Readmes, test coverage, and so on, here: http://project-repos.ipfs.io/

Project Organization

  • ipfs - Master repo, intro, and news.
  • discourse - Community discussions and support forum.
  • tm - IPFS Team Planning and Management of the Project

Get Help!

The best place to seek help is on the IPFS community forum or on IRC (freenode) in the #ipfs channel.

There are two deprecated repositories containing FAQ and support. Use those as reference, but post any new questions or requests for help on https://discuss.ipfs.io.

Documents

  • papers - Academic papers on IPFS.
  • specs - Specifications on the IPFS protocol.
  • notes - Various relevant notes and discussions (that do not fit elsewhere).
  • reading-list - Papers to read to understand IPFS.

Discussions

Protocol Implementations

  • go-ipfs - Implementation in Go.
  • js-ipfs - Implementation in Javascript.
  • py-ipfs - Implementation in Python.

IPFS DSLs

IPFS GUIs

  • ipfs-companion - The web browser extension.
  • ipfs-desktop - A menubar/tray desktop app.
  • ipfs-webui - The IPFS WebUI app.
  • i18n - The IPFS Translation Project: crowdsourcing translations of IPFS GUIs and websites.
  • pm-ipfs-gui - Coordinating development and maintenance of GUI apps.

Apps on IPFS

You can find an ever growing list at Awesome IPFS

Community Infrastructure

Ref Lists

Other Community Resources

  • examples - Examples on how to use go-ipfs.
  • awesome-ipfs - Useful resources for using IPFS and building things on top of it.
  • logo - The logo for IPFS.

IPFS Meetups

There are plethora of IPFS Meetups all over the world now. Find yours at the Community Repo

We encourage and support IPFS Meetups, please let us know if you would like to start one. Feel free to organize yourself through the Community discussions and to advertise events in the main repository.

Tools

Installing

Other

License

MIT