1
0
mirror of https://github.com/ipfs/ipfs synced 2024-11-08 04:59:15 +01:00

Clean up readme and migrate materials to IPFS docs (#455)

Bring README.md up to date and do general cleanup.
This commit is contained in:
Jessica Schilling 2020-04-01 11:09:33 -06:00 committed by GitHub
parent a1d068cd3c
commit 2981fd8068
Signed by: GitHub
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 169 additions and 1977 deletions

@ -1,23 +0,0 @@
# Contributing to IPFS
There are many ways to contribute to IPFS development. We welcome contributions big and small! We also have more extensive [community contributing notes](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md).
### Help with the design
If you have a suggestion regarding the overall design of IPFS (or if find an error), please submit an [issue](https://github.com/ipfs/ipfs/issues/new).
This repository is a landing repository for IPFS in general, and where any big updates will be posted. If you have an error with an [implementation](README.md#implementations), file an issue in the respective repository. If you have more questions about the abstracted design, you can also check [specs](https://github.com/ipfs/specs).
### Help with the implementations
Please contribute to the various [implementations](README.md#implementations) under development, or start another!
There are also many other repositories that are part of IPFS, listed in the [project directory](https://github.com/ipfs/ipfs/blob/master/project-directory.md). Dive in and help out.
### Help with spreading the word
Please tweet, email, tell everyone about this. IPFS will succeed only if many people use it and build on it.
### Help in other ways
[Email @jbenet directly](mailto:juan@ipfs.io?subject=Contributing to IPFS) if you'd like to help in other ways.

@ -1,880 +0,0 @@
# IPFS Implementation Status
> Legend: :green_apple: Done   :lemon: In Progress   :tomato: Missing   :chestnut: Not planned
# Table of Contents
# API
## Bitswap
#### CLI
| Command | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`ipfs ledger`** | :green_apple: | :lemon: |
| `peer` | :green_apple: | :lemon: |
| **`ipfs reprovide`** | :green_apple: | :tomato: |
| **`ipfs bitswap stat`** | :green_apple: | :green_apple: |
| **`ipfs bitswap unwant`** | :green_apple: | :green_apple: |
| `key` | :green_apple: | :green_apple: |
| **`ipfs bitswap wantlist`** | :green_apple: | :green_apple: |
| `peer` | :green_apple: | :green_apple: |
#### HTTP
| Endpoint | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`GET /api/v0/bitswap/ledger`** | :green_apple: | :lemon: |
| `arg=` | :green_apple: | :lemon: |
| **`GET /api/v0/bitswap/reprovide`** | :green_apple: | :tomato: |
| **`GET /api/v0/bitswap/stat`** | :green_apple: | :green_apple: |
| **`GET /api/v0/bitswap/unwant`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| **`GET /api/v0/bitswap/wantlist`** | :green_apple: | :green_apple: |
| `peer=` | :green_apple: | :green_apple: |
#### Core
See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core).
--------------------------------------------------------------------------------
## Block `ipfs block`
#### CLI
| Command | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`ipfs block get`** | :green_apple: | :green_apple: |
| `key` | :green_apple: | :green_apple: |
| **`ipfs block put`** | :green_apple: | :green_apple: |
| `data` | :green_apple: | :green_apple: |
| `format` | :green_apple: | :green_apple: |
| `mhtype` | :green_apple: | :green_apple: |
| `mhlen` | :green_apple: | :green_apple: |
| **`ipfs block rm`** | :green_apple: | :lemon: |
| `hash` | :green_apple: | :lemon: |
| `force` | :green_apple: | :lemon: |
| **`ipfs block stat`** | :green_apple: | :green_apple: |
| `key` | :green_apple: | :green_apple: |
#### HTTP
| Endpoint | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`GET /api/v0/block/get`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| **`POST /api/v0/block/put`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| `format=` | :green_apple: | :green_apple: |
| `mhtype=` | :green_apple: | :green_apple: |
| `mhlen=` | :green_apple: | :green_apple: |
| **`GET /api/v0/block/rm`** | :green_apple: | :lemon: |
| `arg=` | :green_apple: | :lemon: |
| `force=` | :green_apple: | :lemon: |
| **`GET /api/v0/block/stat`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
#### Core
See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core).
--------------------------------------------------------------------------------
## Bootstrap
#### CLI
| Command | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`ipfs bootstrap add`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| `default=` | :green_apple: | :green_apple: |
| **`ipfs bootstrap list`** | :green_apple: | :green_apple: |
| **`ipfs bootstrap rm`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| `all=` | :green_apple: | :green_apple: |
#### HTTP
| Endpoint | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`GET /api/v0/bootstrap/add`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| `default=` | :green_apple: | :green_apple: |
| **`GET /api/v0/bootstrap/add/default`** | :green_apple: | :tomato: |
| **`GET /api/v0/bootstrap/list`** | :green_apple: | :green_apple: |
| **`GET /api/v0/bootstrap/rm`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| `all=` | :green_apple: | :green_apple: |
| **`GET /api/v0/bootstrap/rm/all`** | :green_apple: | :tomato: |
#### Core
See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core).
--------------------------------------------------------------------------------
## Config
#### CLI
| Command | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`ipfs config edit`** | :green_apple: | :chestnut: |
| **`ipfs config`** | :green_apple: | :chestnut: |
| `key` | :green_apple: | :green_apple: |
| `value` | :green_apple: | :green_apple: |
| `bool=` | :green_apple: | :green_apple: |
| `json=` | :green_apple: | :green_apple: |
| **`ipfs config replace`** | :green_apple: | :green_apple: |
| `file` | :green_apple: | :green_apple: |
| **`ipfs config show`** | :green_apple: | :green_apple: |
| **`ipfs log level`** | :green_apple: | :chestnut: |
| `subsystem` | :green_apple: | :chestnut: |
| `level` | :green_apple: | :chestnut: |
| **`ipfs log ls`** | :green_apple: | :chestnut: |
| **`ipfs log tail`** | :green_apple: | :chestnut: |
#### HTTP
| Endpoint | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`GET /api/v0/config/edit`** | :green_apple: | :chestnut: |
| **`POST /api/v0/config`** | :green_apple: | :chestnut: |
| `arg1=` | :green_apple: | :green_apple: |
| `arg2=` | :green_apple: | :green_apple: |
| `bool=` | :green_apple: | :green_apple: |
| `json=` | :green_apple: | :green_apple: |
| **`POST /api/v0/config/replace`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| **`GET /api/v0/config/show`** | :green_apple: | :green_apple: |
| **`POST /api/v0/log/level`** | :green_apple: | :chestnut: |
| `arg1=` | :green_apple: | :chestnut: |
| `arg2=` | :green_apple: | :chestnut: |
| **`GET /api/v0/log/ls`** | :green_apple: | :chestnut: |
| **`GET /api/v0/log/tail`** | :green_apple: | :chestnut: |
#### Core
See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core).
--------------------------------------------------------------------------------
## DAG
> **Blocked until the following are resolved:**
- https://github.com/ipfs/js-ipfs-api/pull/534
- https://github.com/ipfs/go-ipfs/issues/3771#issue-213068794
#### CLI
#### HTTP
#### Core
See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core).
--------------------------------------------------------------------------------
## Stats and Diagnostics
#### CLI
| Command | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`ipfs stats bitswap`** | :green_apple: | :tomato: |
| **`ipfs stats bw`** | :green_apple: | :tomato: |
| `peer` | :green_apple: | :tomato: |
| `proto` | :green_apple: | :tomato: |
| `poll` | :green_apple: | :tomato: |
| `interval ` | :green_apple: | :tomato: |
| **`ipfs stats repo`** | :green_apple: | :tomato: |
| **`ipfs diag cmds`** | :green_apple: | :chestnut: |
| **`ipfs diag cmds clear`** | :green_apple: | :chestnut: |
| **`ipfs diag cmds set-time`** | :green_apple: | :chestnut: |
| `time` | :green_apple: | :chestnut: |
| **`ipfs diag sys`** | :green_apple: | :chestnut: |
#### HTTP
| Endpoint | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`GET /api/v0/stats/bitswap`** | :green_apple: | :tomato: |
| **`POST /api/v0/stats/bw`** | :green_apple: | :tomato: |
| `peer=` | :green_apple: | :tomato: |
| `proto=` | :green_apple: | :tomato: |
| `poll=` | :green_apple: | :tomato: |
| `interval=` | :green_apple: | :tomato: |
| **`GET /api/v0/stats/repo`** | :green_apple: | :tomato: |
| **`GET /api/v0/diag/cmds`** | :green_apple: | :chestnut: |
| **`GET /api/v0/diag/cmds/clear`** | :green_apple: | :chestnut: |
| **`GET /api/v0/diag/cmds/set-time`** | :green_apple: | :chestnut: |
| `arg=` | :green_apple: | :chestnut: |
| **`GET /api/v0/net`** | :green_apple: | :chestnut: |
| `vis` | :green_apple: | :chestnut: |
| **`GET /api/v0/sys`** | :green_apple: | :chestnut: |
#### Core
See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core).
--------------------------------------------------------------------------------
## DHT
#### CLI
| Command | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`ipfs dht findpeer`** | :green_apple: | :green_apple: |
| `peer ID` | :green_apple: | :green_apple: |
| `verbose=` | :green_apple: | :tomato: |
| **`ipfs dht findprovs`** | :green_apple: | :green_apple: |
| `key` | :green_apple: | :green_apple: |
| `verbose=` | :green_apple: | :tomato: |
| `num-providers=` | :green_apple: | :green_apple: |
| **`ipfs dht get`** | :green_apple: | :green_apple: |
| `key` | :green_apple: | :green_apple: |
| `verbose=` | :green_apple: | :tomato: |
| **`ipfs dht provide`** | :green_apple: | :green_apple: |
| `key` | :green_apple: | :green_apple: |
| `verbose=` | :green_apple: | :tomato: |
| `recursive=` | :green_apple: | :tomato: |
| **`ipfs dht put`** | :green_apple: | :green_apple: |
| `key` | :green_apple: | :green_apple: |
| `value` | :green_apple: | :green_apple: |
| `verbose=` | :green_apple: | :tomato: |
| **`ipfs dht query`** | :green_apple: | :tomato: |
| `peer ID` | :green_apple: | :green_apple: |
| `verbose=` | :green_apple: | :tomato: |
#### HTTP
| Endpoint | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`GET /api/v0/dht/findpeer`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| `verbose=` | :green_apple: | :tomato: |
| **`GET /api/v0/dht/findprovs`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| `verbose=` | :green_apple: | :tomato: |
| `num-providers=` | :green_apple: | :green_apple: |
| **`GET /api/v0/dht/get`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| `verbose=` | :green_apple: | :tomato: |
| **`GET /api/v0/dht/provide`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| `verbose=` | :green_apple: | :tomato: |
| `recursive=` | :green_apple: | :tomato: |
| **`GET /api/v0/dht/put`** | :green_apple: | :green_apple: |
| `arg1=` | :green_apple: | :green_apple: |
| `arg2=` | :green_apple: | :green_apple: |
| `verbose=` | :green_apple: | :tomato: |
| **`GET /api/v0/dht/query`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| `verbose=` | :green_apple: | :tomato: |
#### Core
See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core).
--------------------------------------------------------------------------------
## Files
#### CLI
| Command | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`ipfs add`** | :green_apple: | :lemon: |
| `file` | :green_apple: | :green_apple: |
| `recursive` | :green_apple: | :green_apple: |
| `quiet` | :green_apple: | :green_apple: |
| `quieter` | :green_apple: | :green_apple: |
| `silent` | :green_apple: | :green_apple: |
| `progress` | :green_apple: | :green_apple: |
| `trickle` | :green_apple: | :green_apple: |
| `only-hash` | :green_apple: | :green_apple: |
| `wrap-with-directory` | :green_apple: | :green_apple: |
| `hidden` | :green_apple: | :tomato: |
| `chunker` | :green_apple: | :tomato: |
| `pin` | :green_apple: | :lemon: |
| `raw-leaves` | :green_apple: | :tomato: |
| `nocopy` | :green_apple: | :tomato: |
| `fscache` | :green_apple: | :tomato: |
| `cid-version` | :green_apple: | :tomato: |
| `hash` | :green_apple: | :tomato: |
| **`ipfs cat`** | :green_apple: | :green_apple: |
| `arg` | :green_apple: | :green_apple: |
| **`ipfs ls`** | :green_apple: | :lemon: |
| `arg` | :green_apple: | :lemon: |
| `headers` | :green_apple: | :lemon: |
| `resolve-type` | :green_apple: | :lemon: |
| **`ipfs file ls`** | :green_apple: | :chestnut: |
| `path` | :green_apple: | :chestnut: |
| **`ipfs files cp`** | :green_apple: | :tomato: |
| `src` | :green_apple: | :tomato: |
| `dst` | :green_apple: | :tomato: |
| `flush` | :green_apple: | :tomato: |
| **`ipfs files flush`** | :green_apple: | :tomato: |
| `path` | :green_apple: | :tomato: |
| **`ipfs files ls`** | :green_apple: | :tomato: |
| `path` | :green_apple: | :tomato: |
| `level` | :green_apple: | :tomato: |
| `flush` | :green_apple: | :tomato: |
| **`ipfs files mkdir`** | :green_apple: | :tomato: |
| `path` | :green_apple: | :tomato: |
| `parents` | :green_apple: | :tomato: |
| `flush` | :green_apple: | :tomato: |
| **`ipfs files mv`** | :green_apple: | :tomato: |
| `src` | :green_apple: | :tomato: |
| `dst` | :green_apple: | :tomato: |
| `flush` | :green_apple: | :tomato: |
| **`ipfs files read`** | :green_apple: | :tomato: |
| `path` | :green_apple: | :tomato: |
| `offset` | :green_apple: | :tomato: |
| `count` | :green_apple: | :tomato: |
| `flush` | :green_apple: | :tomato: |
| **`ipfs files rm`** | :green_apple: | :tomato: |
| `path` | :green_apple: | :tomato: |
| `recursive` | :green_apple: | :tomato: |
| `flush` | :green_apple: | :tomato: |
| **`ipfs files stat`** | :green_apple: | :tomato: |
| `path` | :green_apple: | :tomato: |
| `flush` | :green_apple: | :tomato: |
| **`ipfs files write`** | :green_apple: | :tomato: |
| `path` | :green_apple: | :tomato: |
| `data` | :green_apple: | :tomato: |
| `offset` | :green_apple: | :tomato: |
| `create` | :green_apple: | :tomato: |
| `truncate` | :green_apple: | :tomato: |
| `count` | :green_apple: | :tomato: |
| `flush` | :green_apple: | :tomato: |
| **`ipfs get`** | :green_apple: | :green_apple: |
| `path` | :green_apple: | :green_apple: |
| `archive` | :green_apple: | :tomato: |
| `compress` | :green_apple: | :tomato: |
| `compression-level` | :green_apple: | :tomato: |
#### HTTP
| Endpoint | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`POST /api/v0/add`** | :green_apple: | :lemon: |
| `arg=` | :green_apple: | :green_apple: |
| `recursive=` | :green_apple: | :green_apple: |
| `quiet=` | :green_apple: | :tomato: |
| `quieter=` | :green_apple: | :tomato: |
| `silent=` | :green_apple: | :tomato: |
| `progress=` | :green_apple: | :green_apple: |
| `trickle=` | :green_apple: | :green_apple: |
| `only-hash=` | :green_apple: | :green_apple: |
| `wrap-with-directory` | :green_apple: | :green_apple: |
| `hidden` | :green_apple: | :tomato: |
| `chunker` | :green_apple: | :tomato: |
| `pin` | :green_apple: | :lemon: |
| `raw-leaves` | :green_apple: | :tomato: |
| `nocopy` | :green_apple: | :tomato: |
| `fscache` | :green_apple: | :tomato: |
| `cid-version` | :green_apple: | :tomato: |
| `hash` | :green_apple: | :tomato: |
| **`GET /api/v0/cat`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| **`GET /api/v0/ls`** | :green_apple: | :lemon: |
| `arg=` | :green_apple: | :lemon: |
| `headers=` | :green_apple: | :lemon: |
| `resolve-type=` | :green_apple: | :lemon: |
| **`GET /api/v0/file/ls`** | :green_apple: | :chestnut: |
| `arg=` | :green_apple: | :chestnut: |
| **`GET /api/v0/files/cp`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| `arg2=` | :green_apple: | :tomato: |
| `flush=,f=` | :green_apple: | :tomato: |
| **`GET /api/v0/files/flush`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| **`GET /api/v0/files/ls`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| `l=` | :green_apple: | :tomato: |
| `flush=,f=` | :green_apple: | :tomato: |
| **`GET /api/v0/files/mkdir`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| `parents=,p=` | :green_apple: | :tomato: |
| `flush=,f=` | :green_apple: | :tomato: |
| **`GET /api/v0/files/mv`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| `arg2=` | :green_apple: | :tomato: |
| `flush=,f=` | :green_apple: | :tomato: |
| **`GET /api/v0/files/read`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| `offset=,o=` | :green_apple: | :tomato: |
| `count=,n=` | :green_apple: | :tomato: |
| `flush=,f=` | :green_apple: | :tomato: |
| **`POST /api/v0/files/rm`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| `recursive=,r=` | :green_apple: | :tomato: |
| `flush=,f=` | :green_apple: | :tomato: |
| **`GET /api/v0/files/stat`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| `flush=,f=` | :green_apple: | :tomato: |
| **`POST /api/v0/files/write`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| `arg2=` | :green_apple: | :tomato: |
| `offset=,o=` | :green_apple: | :tomato: |
| `create=,e=` | :green_apple: | :tomato: |
| `truncate=,t=` | :green_apple: | :tomato: |
| `count=,n=` | :green_apple: | :tomato: |
| `flush=,f=` | :green_apple: | :tomato: |
| **`POST /api/v0/get`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| `archive=` | :green_apple: | :tomato: |
| `compress=` | :green_apple: | :tomato: |
| `compression-level=-1` | :green_apple: | :tomato: |
| `compression-level=0` | :green_apple: | :tomato: |
| `compression-level=1` | :green_apple: | :tomato: |
| `compression-level=2` | :green_apple: | :tomato: |
| `compression-level=3` | :green_apple: | :tomato: |
| `compression-level=4` | :green_apple: | :tomato: |
| `compression-level=5` | :green_apple: | :tomato: |
| `compression-level=6` | :green_apple: | :tomato: |
| `compression-level=7` | :green_apple: | :tomato: |
| `compression-level=8` | :green_apple: | :tomato: |
| `compression-level=9` | :green_apple: | :tomato: |
#### Core
See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core).
--------------------------------------------------------------------------------
## File Store (IPFS Pack)
> **Note:** Implementation in js-ipfs is not planned for now.
#### CLI
#### HTTP
#### Core
See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core).
--------------------------------------------------------------------------------
## Key Management
#### CLI
| Command | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`ipfs key gen`** | :green_apple: | :chestnut: |
| `name` | :green_apple: | :chestnut: |
| `type=` | :green_apple: | :chestnut: |
| `size=` | :green_apple: | :chestnut: |
| **`ipfs key list`** | :green_apple: | :chestnut: |
| `l=` | :green_apple: | :chestnut: |
| **`ipfs key rename`** | :green_apple: | :chestnut: |
| `name` | :green_apple: | :chestnut: |
| `newName` | :green_apple: | :chestnut: |
| `force=` | :green_apple: | :chestnut: |
| **`ipfs key rm`** | :green_apple: | :chestnut: |
| `name` | :green_apple: | :chestnut: |
| `l=` | :green_apple: | :chestnut: |
#### HTTP
| Endpoint | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`GET /api/v0/key/gen`** | :green_apple: | :chestnut: |
| `arg=` | :green_apple: | :chestnut: |
| `type=` | :green_apple: | :chestnut: |
| `size=` | :green_apple: | :chestnut: |
| **`GET /api/v0/key/list`** | :green_apple: | :chestnut: |
| `l=` | :green_apple: | :chestnut: |
| **`GET /api/v0/key/rename`** | :green_apple: | :chestnut: |
| `arg=` | :green_apple: | :chestnut: |
| `arg=` | :green_apple: | :chestnut: |
| `force=` | :green_apple: | :chestnut: |
| **`GET /api/v0/key/rm`** | :green_apple: | :chestnut: |
| `arg=` | :green_apple: | :chestnut: |
| `l=` | :green_apple: | :chestnut: |
#### Core
See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core).
--------------------------------------------------------------------------------
## Miscellaneous
#### CLI
| Command | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`ipfs ping`** | :green_apple: | :lemon: |
| `peer ID` | :green_apple: | :tomato: |
| `count` | :green_apple: | :tomato: |
| **`ipfs update`** | :chestnut: | :chestnut: |
| **`ipfs version`** | :green_apple: | :green_apple: |
| **`ipfs commands`** | :green_apple: | :green_apple: |
| **`ipfs id`** | :green_apple: | :green_apple: |
| `peerid` | :green_apple: | :tomato: |
| `aver` | :green_apple: | :tomato: |
| `pver` | :green_apple: | :tomato: |
| `pubkey` | :green_apple: | :tomato: |
| `addrs` | :green_apple: | :tomato: |
| **`ipfs mount`** | :green_apple: | :chestnut: |
| `ipfs-path=` | :green_apple: | :chestnut: |
| `ipns-path=` | :green_apple: | :chestnut: |
| **`ipfs mount`** | :green_apple: | :chestnut: |
#### HTTP
| Endpoint | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`GET /api/v0/ping`** | :green_apple: | :lemon: |
| `arg=` | :green_apple: | :tomato: |
| `count=` | :green_apple: | :tomato: |
| **`GET /api/v0/update`** | :chestnut: | :chestnut: |
| **`GET /api/v0/version`** | :green_apple: | :green_apple: |
| **`GET /api/v0/commands`** | :green_apple: | :green_apple: |
| **`POST /api/v0/id`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| **`GET /api/v0/mount`** | :green_apple: | :chestnut: |
| `ipfs-path=` | :green_apple: | :chestnut: |
| `ipns-path=` | :green_apple: | :chestnut: |
| **`GET /api/v0/mount`** | :green_apple: | :chestnut: |
#### Core
See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core).
--------------------------------------------------------------------------------
## Naming
> **Note:** Implementation in js-ipfs is blocked until DHT is finished.
#### CLI
| Command | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`ipfs name publish`** | :green_apple: | :tomato: |
| `ipfs-path` | :green_apple: | :tomato: |
| `resolve=` | :green_apple: | :tomato: |
| `lifetime=` | :green_apple: | :tomato: |
| `ttl=` | :green_apple: | :tomato: |
| `key=` | :green_apple: | :tomato: |
| **`ipfs name resolve`** | :green_apple: | :tomato: |
| `name` | :green_apple: | :tomato: |
| `recursive=` | :green_apple: | :tomato: |
| `nocache=` | :green_apple: | :tomato: |
| **`ipfs resolve`** | :green_apple: | :tomato: |
| `name` | :green_apple: | :tomato: |
| `recursive=` | :green_apple: | :tomato: |
| **`ipfs dns`** | :green_apple: | :tomato: |
| `domain` | :green_apple: | :tomato: |
| `recursive=` | :green_apple: | :tomato: |
#### HTTP
| Endpoint | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`POST /api/v0/name/publish`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| `resolve=` | :green_apple: | :tomato: |
| `lifetime=` | :green_apple: | :tomato: |
| `ttl=` | :green_apple: | :tomato: |
| `key=` | :green_apple: | :tomato: |
| **`GET /api/v0/name/resolve`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| `recursive=` | :green_apple: | :tomato: |
| `nocache=` | :green_apple: | :tomato: |
| **`GET /api/v0/resolve`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| `recursive=` | :green_apple: | :tomato: |
| **`GET /api/v0/dns`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| `recursive=` | :green_apple: | :tomato: |
#### Core
See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core).
--------------------------------------------------------------------------------
## Object `ipfs object`
#### CLI
| Endpoint | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`ipfs object data`** | :green_apple: | :green_apple: |
| `key` | :green_apple: | :green_apple: |
| **`ipfs object diff`** | :green_apple: | :tomato: |
| `key1` | :green_apple: | :tomato: |
| `key2` | :green_apple: | :tomato: |
| **`ipfs object/get`** | :green_apple: | :green_apple: |
| `key` | :green_apple: | :green_apple: |
| `encoding` | :green_apple: | :green_apple: |
| **`GET /api/v0/object/links`** | :green_apple: | :green_apple: |
| `key` | :green_apple: | :green_apple: |
| **`GET /api/v0/object/new`** | :green_apple: | :green_apple: |
| `template` | :green_apple: | :green_apple: |
| **`GET /api/v0/object/patch/append-data`** | :green_apple: | :green_apple: |
| `root` | :green_apple: | :green_apple: |
| `data` | :green_apple: | :green_apple: |
| **`POST /api/v0/object/patch/add-link`** | :green_apple: | :green_apple: |
| `root` | :green_apple: | :green_apple: |
| `name` | :green_apple: | :green_apple: |
| `ref` | :green_apple: | :lemon: |
| `create` | :green_apple: | :tomato: |
| **`POST /api/v0/object/patch/rm-link`** | :green_apple: | :green_apple: |
| `root` | :green_apple: | :green_apple: |
| `link` | :green_apple: | :green_apple: |
| **`POST /api/v0/object/patch/set-data`** | :green_apple: | :green_apple: |
| `root` | :green_apple: | :green_apple: |
| `data` | :green_apple: | :green_apple: |
| **`GET /api/v0/object/put`** | :green_apple: | :green_apple: |
| `data` | :green_apple: | :green_apple: |
| `inputenc` | :green_apple: | :green_apple: |
| `datafieldenc` | :green_apple: | :tomato: |
| `pin` | :green_apple: | :tomato: |
| **`GET /api/v0/object/stat`** | :green_apple: | :green_apple: |
| `root` | :green_apple: | :green_apple: |
#### HTTP
| Endpoint | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`GET /api/v0/object/data`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| **`GET /api/v0/object/diff`** | :green_apple: | :tomato: |
| `arg1=` | :green_apple: | :tomato: |
| `arg2=` | :green_apple: | :tomato: |
| **`POST /api/v0/object/get`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| `encoding=json,enc=json` | :green_apple: | :green_apple: |
| `encoding=protobuf,enc=protobuf` | :green_apple: | :green_apple: |
| `encoding=xml,enc=xml` | :green_apple: | :green_apple: |
| **`GET /api/v0/object/links`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| **`GET /api/v0/object/new`** | :green_apple: | :green_apple: |
| `arg=unixfs-dir` | :green_apple: | :green_apple: |
| **`GET /api/v0/object/patch/append-data`** | :green_apple: | :green_apple: |
| `arg1=` | :green_apple: | :green_apple: |
| `arg2=` | :green_apple: | :green_apple: |
| **`POST /api/v0/object/patch/add-link`** | :green_apple: | :green_apple: |
| `arg1=` | :green_apple: | :green_apple: |
| `arg2=` | :green_apple: | :green_apple: |
| `arg3=` | :green_apple: | :green_apple: |
| `create=` | :green_apple: | :green_apple: |
| **`POST /api/v0/object/patch/rm-link`** | :green_apple: | :green_apple: |
| `arg1=` | :green_apple: | :green_apple: |
| `arg2=` | :green_apple: | :green_apple: |
| **`POST /api/v0/object/patch/set-data`** | :green_apple: | :green_apple: |
| `arg1=` | :green_apple: | :green_apple: |
| `arg2=` | :green_apple: | :green_apple: |
| **`GET /api/v0/object/put`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| `inputenc` | :green_apple: | :green_apple: |
| **`GET /api/v0/object/stat`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
#### Core
See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core).
--------------------------------------------------------------------------------
## p2p (libp2p exposed API)
> **This is blocked until there is a formalized `interface-libp2p`**. Currently, js-ipfs exposes libp2p directly while go-ipfs exposes a subset of commands that use libp2p.
#### CLI
#### HTTP
#### Core
See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core).
--------------------------------------------------------------------------------
## Pining
#### CLI
| Command | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`ipfs pin add`** | :green_apple: | :lemon: |
| `hash` | :green_apple: | :lemon: |
| `recursive` | :green_apple: | :lemon: |
| `progress` | :green_apple: | :tomato: |
| **`ipfs pin ls`** | :green_apple: | :lemon: |
| `type` | :green_apple: | :lemon: |
| `quiet` | :green_apple: | :lemon: |
| **`ipfs pin rm`** | :green_apple: | :lemon: |
| `hash` | :green_apple: | :lemon: |
| `recursive` | :green_apple: | :lemon: |
| **`ipfs pin update`** | :green_apple: | :tomato: |
| `hash` | :green_apple: | :tomato: |
| `unpin` | :green_apple: | :tomato: |
| **`ipfs pin verify`** | :green_apple: | :tomato: |
| `verbose` | :green_apple: | :tomato: |
| **`ipfs refs`** | :green_apple: | :tomato: |
| `hash` | :green_apple: | :tomato: |
| `format` | :green_apple: | :tomato: |
| `edges` | :green_apple: | :tomato: |
| `unique` | :green_apple: | :tomato: |
| `recursive` | :green_apple: | :tomato: |
| **`ipfs refs local`** | :green_apple: | :tomato: |
#### HTTP
| Endpoint | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`GET /api/v0/pin/add`** | :green_apple: | :lemon: |
| `arg=` | :green_apple: | :lemon: |
| `recursive=` | :green_apple: | :lemon: |
| **`POST /api/v0/pin/ls`** | :green_apple: | :lemon: |
| `type=` | :green_apple: | :tomato: |
| `quiet=` | :green_apple: | :tomato: |
| **`GET /api/v0/pin/rm`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| `recursive=` | :green_apple: | :tomato: |
| **`GET /api/v0/pin/update`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| `unpin=` | :green_apple: | :tomato: |
| **`GET /api/v0/pin/verify`** | :green_apple: | :tomato: |
| `verbose=` | :green_apple: | :tomato: |
| **`GET /api/v0/refs`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| `format=` | :green_apple: | :tomato: |
| `edges=` | :green_apple: | :tomato: |
| `unique=` | :green_apple: | :tomato: |
| `recursive=` | :green_apple: | :tomato: |
| **`GET /api/v0//refs/local`** | :green_apple: | :tomato: |
#### Core
See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core).
--------------------------------------------------------------------------------
## PubSub
#### CLI
| Command | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`ipfs pubsub ls`** | :green_apple: | :green_apple: |
| **`ipfs pubsub peers`** | :green_apple: | :green_apple: |
| `topic` | :green_apple: | :green_apple: |
| **`ipfs pubsub pub`** | :green_apple: | :green_apple: |
| `topic` | :green_apple: | :green_apple: |
| `data` | :green_apple: | :green_apple: |
| **`ipfs pubsub sub`** | :green_apple: | :green_apple: |
| `topic` | :green_apple: | :green_apple: |
| `discover` | :green_apple: | :tomato: |
#### HTTP
| Endpoint | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`GET /api/v0/pubsub/ls`** | :green_apple: | :green_apple: |
| **`GET /api/v0/pubsub/peers`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| **`GET /api/v0/pubsub/pub`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| **`GET /api/v0/pubsub/sub`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| `discover=` | :green_apple: | :green_apple: |
#### Core
See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core).
--------------------------------------------------------------------------------
## Repo
#### CLI
| Command | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`ipfs repo fsck`** | :green_apple: | :chestnut: |
| **`ipfs repo gc`** | :green_apple: | :tomato: |
| **`ipfs repo stat`** | :green_apple: | :tomato: |
| **`ipfs repo verify`** | :green_apple: | :chestnut: |
| **`ipfs repo version`** | :green_apple: | :green_apple: |
#### HTTP
| Endpoint | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`GET /api/v0/repo/fsck`** | :green_apple: | :chestnut: |
| **`GET /api/v0/repo/gc`** | :green_apple: | :tomato: |
| **`GET /api/v0/repo/stat`** | :green_apple: | :tomato: |
| **`GET /api/v0/repo/verify`** | :green_apple: | :chestnut: |
| **`GET /api/v0/repo/version`** | :green_apple: | :green_apple: |
#### Core
See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core).
--------------------------------------------------------------------------------
## Swarm
#### CLI
| Command | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`ipfs swarm addrs`** | :green_apple: | :green_apple: |
| **`ipfs swarm addrs listen`** | :green_apple: | :tomato: |
| **`ipfs swarm addrs local`** | :green_apple: | :green_apple: |
| `id=` | :green_apple: | :tomato: |
| **`ipfs swarm connect`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| **`ipfs swarm disconnect`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| **`ipfs swarm filters`** | :green_apple: | :tomato: |
| **`ipfs swarm filters add`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| **`ipfs swarm filters rm`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| **`ipfs swarm peers`** | :green_apple: | :green_apple: |
| `verbose=` | :green_apple: | :tomato: |
| `latency=` | :green_apple: | :tomato: |
| `streams=` | :green_apple: | :tomato: |
#### HTTP
| Endpoint | Go Impl | JS Impl |
| -------------------------------------------- | :-----------: | :-----------: |
| **`GET /api/v0/swarm/addrs`** | :green_apple: | :green_apple: |
| **`GET /api/v0/swarm/addrs/listen`** | :green_apple: | :tomato: |
| **`GET /api/v0/swarm/addrs/local`** | :green_apple: | :green_apple: |
| `id=` | :green_apple: | :tomato: |
| **`GET /api/v0/swarm/connect`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| **`GET /api/v0/swarm/disconnect`** | :green_apple: | :green_apple: |
| `arg=` | :green_apple: | :green_apple: |
| **`GET /api/v0/swarm/filters`** | :green_apple: | :tomato: |
| **`GET /api/v0/swarm/filters/add`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| **`GET /api/v0/swarm/filters/rm`** | :green_apple: | :tomato: |
| `arg=` | :green_apple: | :tomato: |
| **`GET /api/v0/swarm/peers`** | :green_apple: | :green_apple: |
| `verbose=` | :green_apple: | :tomato: |
| `latency=` | :green_apple: | :tomato: |
| `streams=` | :green_apple: | :tomato: |
#### Core
See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core).
--------------------------------------------------------------------------------

@ -1,16 +0,0 @@
For QUESTIONS, DISCUSSIONS and SUPPORT issues, go to:
https://discuss.ipfs.io
For actionable issues pertaining to BUGS in GO-IPFS, create an issue at:
https://github.com/ipfs/go-ipfs/issues
For anything else, please take a look at the project directory on this repos
README.md to find the appropriate location for your issue, or ask in
https://discuss.ipfs.io .
This repo exists just to provide an overview of the entire ipfs project and
ecosystem. If you are about to file an issue about a certain implementation
of ipfs (for example, go-ipfs or js-ipfs), please instead file it in the
appropriate location!

425
README.md

@ -1,185 +1,166 @@
# IPFS is the Distributed Web
# IPFS powers the Distributed Web
> A peer-to-peer hypermedia protocol to make the web faster, safer, and more open.
### A peer-to-peer hypermedia protocol to make the web faster, safer, and more open.
[![Forum](https://img.shields.io/badge/Discourse-%23Discussion forums-blue.svg)](https://discuss.ipfs.io)
[![Forum](https://img.shields.io/badge/Discourse-%23Discussion%20forums-blue.svg)](https://discuss.ipfs.io)
[![Matrix](https://img.shields.io/badge/matrix-%23ipfs%3Amatrix.org-blue.svg?style=flat-square)](https://matrix.to/#/#ipfs:matrix.org)
[![IRC](https://img.shields.io/badge/irc-%23ipfs-brightgreen.svg?style=flat-square)](https://webchat.freenode.net/?channels=ipfs)
[![Discord](https://img.shields.io/discord/475789330380488707?color=blueviolet&label=discord&style=flat-square)](https://discord.gg/24fmuwR)
[![Changelog #204](https://img.shields.io/badge/changelog-%23204-lightgrey.svg)](https://changelog.com/204)
Welcome to IPFS! Why not [watch a video demo](https://www.youtube.com/watch?v=8CMxDNuuAiQ) to get started?
## TL;DR
**Please post questions and ideas at [https://discuss.ipfs.io](https://discuss.ipfs.io) .**
- **Get help and talk about ideas in the [IPFS Forums](https://discuss.ipfs.io)**
- Visit the [IPFS website](https://www.ipfs.io)
- Watch Juan Benet's [Why IPFS?](https://www.youtube.com/watch?v=zE_WSLbqqvo) keynote from IPFS Camp 2019
- Watch Juan's Stanford Seminar talk on [IPFS: The Distributed, Permanent Web](https://www.youtube.com/watch?v=HUVmypx9HGI)
- Watch a video demo [of the IPFS alpha](https://www.youtube.com/watch?v=8CMxDNuuAiQ)
- Dive in to the [IPFS Docs](https://docs-beta.ipfs.io )
- Subscribe to the [weekly IPFS newsletter](http://eepurl.com/gL2Pi5) and [read the blog](https://blog.ipfs.io/).
**A new documentation site effort is ongoing and you can access it at [https://docs-beta.ipfs.io](https://docs-beta.ipfs.io ) .**
*Or read this in other languages: [Portuguese](translations/pt_BR/README.md).*
*Read this in other languages: [Portuguese](translations/pt_BR/README.md).*
## Full contents
## Table of Contents
- [Overview](#overview)
- [Quick Summary](#quick-summary)
- [How IPFS Works](#how-ipfs-works)
- [IPFS Papers](#ipfs-papers)
- [IPFS Talks](#ipfs-talks)
- [More About IPFS](#more-about-ipfs)
- [Current State of IPFS](#current-state-of-ipfs)
- [Alpha Distribution](#alpha-distribution)
- [Security Issues and Disclosures](#security-issues-and-disclosures)
- [Project and Community](#project-and-community)
- [Project Links](#project-links)
- [Documentation](#documentation)
- [Protocol Implementations](#protocol-implementations)
- [HTTP Client Libraries](#http-client-libraries)
- [Project Directory](#project-directory)
- [Other Community Resources](#other-community-resources)
- [Quick summary](#quick-summary)
- [Learn how IPFS works](#learn-how-ipfs-works)
- [Current state of IPFS](#current-state-of-ipfs)
- [Try it out](#try-it-out)
- [A word on security](#a-word-on-security)
- [Get involved](#get-involved)
- [Help and documentation](#help-and-documentation)
- [Links and resources](#links-and-resources)
- [Protocol implementations](#protocol-implementations)
- [HTTP client libraries](#http-client-libraries)
- [GUIs and helper apps](#guis-and-helper-apps)
- [Apps and data sets on IPFS](#apps-and-data-sets-on-IPFS)
- [Specs and papers](#specs-and-papers)
- [Installation and update tools](#installation-and-update-tools)
- [Additional resources](#additional-resources)
- [License](#license)
## Overview
## Quick summary
IPFS ([the InterPlanetary File System](https://docs-beta.ipfs.io/concepts/what-is-ipfs/)) 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.
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](https://git-scm.com/), [BitTorrent](http://bittorrent.org/), [Kademlia](https://en.wikipedia.org/wiki/Kademlia), [Bitcoin](https://bitcoin.org/), and many, many more. This is the sort of thing that would have come out of ARPA/DARPA, IETF, or Bell Labs in another age. IPFS is a free, open-source project with thousands of contributors.
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](https://github.com/ipfs/ipfs/blob/master/papers/ipfs-cap2pfs/ipfs-p2p-file-system.pdf?raw=true).
IPFS ([the InterPlanetary File System](https://docs-beta.ipfs.io/concepts/what-is-ipfs/)) is a hypermedia distribution **protocol** addressed by content and identities. It enables the creation of completely distributed applications, and in doing so aims to make the web faster, safer, and more open.
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.
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](https://github.com/ipfs/ipfs/blob/master/papers/ipfs-cap2pfs/ipfs-p2p-file-system.pdf?raw=true).
[![Alpha Demo](img/ipfs-alpha-video.png)](https://www.youtube.com/watch?v=8CMxDNuuAiQ)
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. Let's go point-by-point into how.
Want to see more? Check out Juan Benet's talk at Sourcegraph - [IPFS: The Permanent Web](https://www.youtube.com/watch?v=Fa4pckodM9g).
IPFS is a **protocol**:
- Defines a content-addressed file system
- Coordinates content delivery
- Combines Kademlia + BitTorrent + Git
### Quick Summary
IPFS is a **file system**:
- Has directories and files
- Is a mountable filesystem (via FUSE)
IPFS is a protocol:
- defines a content-addressed file system
- coordinates content delivery
- combines Kademlia + BitTorrent + Git
IPFS is a **web**:
- Can be used to view documents like the conventional web
- Files are accessible via HTTP at `https://ipfs.io/<path>`
- Browsers and extensions can learn to use the `ipfs://` URL or `dweb:/ipfs/` URI schemes directly
- Hash-addressed content guarantees authenticity
IPFS is a filesystem:
- has directories and files
- mountable filesystem (via FUSE)
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 a BitTorrent-inspired block exchange
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 uses **crypto**:
- Cryptographic-hash content addressing
- Block-level deduplication
- File integrity plus versioning
- File-system-level encryption plus signing support
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 is **p2p**:
- Worldwide peer-to-peer file transfers
- Completely decentralized architecture
- **No** central point of failure
IPFS uses crypto:
- cryptographic-hash content addressing
- block-level deduplication
- file integrity + versioning
- filesystem-level encryption + signing support
IPFS is **a CDN**:
- Add a file to the file system locally, and it's now available to the world
- Caching-friendly (content-hash naming)
- BitTorrent-based bandwidth distribution
IPFS is p2p:
- worldwide peer-to-peer file transfers
- completely decentralized architecture
- **no** central point of failure
IPFS has **a name service**:
- IPNS, an SFS-inspired name system
- Global namespace based on PKI
- It serves to build trust chains
- It's compatible with other NSes
- Can map DNS, .onion, .bit, etc to IPNS
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
## Learn how IPFS works
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
To learn more about how IPFS works, explore the following resources:
- [IPFS Docs: How IPFS Works](https://docs-beta.ipfs.io/concepts/how-ipfs-works)
- [IPFS Specifications](https://github.com/ipfs/specs)
- IPFS-related papers:
- [IPFS - Content Addressed, Versioned, P2P File System (draft 3)](https://github.com/ipfs/ipfs/blob/master/papers/ipfs-cap2pfs/ipfs-p2p-file-system.pdf?raw=true)
- For academic papers on IPFS, visit the [ipfs/papers](https://github.com/ipfs/papers) repo.
- For papers that you can read to understand IPFS and its underlying technologies, check out the ["Further Reading"](https://docs-beta.ipfs.io/concepts/further-reading/academic-papers) section of the [IPFS Docs](https://docs-beta.ipfs.io).
- [IPFS Videos & Media](https://ipfs.io/media/) for a regularly-updated list of videos and media/news coverage, including these highlights:
- [IPFS: The Distributed, Permanent Web](https://www.youtube.com/watch?v=HUVmypx9HGI) at Stanford Seminar (best overview of project)
- [IPFS: The Permanent Web](https://www.youtube.com/watch?v=Fa4pckodM9g) at [Sourcegraph](https://sourcegraph.com/) (first public talk)
- [IPFS Alpha Demo](https://www.youtube.com/watch?v=8CMxDNuuAiQ)
- [The Decentralized Web, IPFS and Filecoin](https://www.youtube.com/watch?v=cU-n_m-snxQ)
- [IPFS Hands-on Introduction](https://www.youtube.com/watch?v=h73bd9b5pPA) at Ethereum SV Meetup
- [Distributed Apps with IPFS](https://www.youtube.com/watch?v=jONZtXMu03w)
## How IPFS Works
## Current state of IPFS
To learn more about how IPFS works, take a look at the [IPFS Documentation](#ipfs-documenation), [Papers](#ipfs-papers) or [Talks](#ipfs-talks). You can also explore the [Specs](https://github.com/ipfs/specs) in writing.
**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.
### IPFS Documentation
Today, there is one main, reference IPFS protocol implementation (in [Go](https://github.com/ipfs/go-ipfs)) with [more on the way](#protocol-implementations) (including [JavaScript](https://github.com/ipfs/js-ipfs) and [Python](https://github.com/ipfs/py-ipfs)).
- [How IPFS Works](https://docs-beta.ipfs.io/concepts/how-ipfs-works)
### Try it out
### IPFS Papers
The [go-ipfs](https://github.com/ipfs/go-ipfs) implementation was released as an alpha distribution in February 2015 and since then has been making regular releases on the road to beta. Notably, [js-ipfs](https://github.com/ipfs/js-ipfs) is also well along the way in progress. Want to get started with the IPFS alpha? Try these resources:
- [IPFS - Content Addressed, Versioned, P2P File System (draft 3)](https://github.com/ipfs/ipfs/blob/master/papers/ipfs-cap2pfs/ipfs-p2p-file-system.pdf?raw=true)
- [Specifications](https://github.com/ipfs/specs) (work in progress)
- see also: https://github.com/ipfs/papers
- [Install IPFS](https://docs-beta.ipfs.io/install/)
- [Command-line quick start guide](https://docs-beta.ipfs.io/how-to/command-line-quick-start/)
- [Taking your node online](https://docs-beta.ipfs.io/how-to/command-line-quick-start/#take-your-node-online)
- [More how-tos and tutorials](https://docs-beta.ipfs.io/how-to/)
- [Hands-on introductory video](https://www.youtube.com/watch?v=h73bd9b5pPA)
### IPFS Talks
### A word on security
This is a short selection of introductory talks. In time we will collect more here.
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 on their machines, so we take security vulnerabilities very seriously. If you discover a security issue, please bring it to our attention right away!
- 2014-07-21 - [IPFS: The Permanent Web](https://www.youtube.com/watch?v=Fa4pckodM9g) at [Sourcegraph](https://sourcegraph.com/) (first public talk)
- 2015-02-20 - [IPFS Alpha Demo](https://www.youtube.com/watch?v=8CMxDNuuAiQ)
- 2015-06-03 - [IPFS Hands on Introduction](https://www.youtube.com/watch?v=h73bd9b5pPA) at Ethereum SV Meetup
- **2015-10-22 - [IPFS: The Distributed, Permanent Web](https://www.youtube.com/watch?v=HUVmypx9HGI) at Stanford Seminar (best overview of project)**
- 2016-09-14 - [Distributed Apps with IPFS](https://www.youtube.com/watch?v=jONZtXMu03w)
- 2016-10-22 - [The Decentralized Web, IPFS and Filecoin](https://www.youtube.com/watch?v=cU-n_m-snxQ)
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.**
See full list at [IPFS Media](https://ipfs.io/media/)
If the issue is a protocol weakness that cannot be immediately exploited, or something not yet deployed, just discuss it openly.
## 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](https://git-scm.com/), [BitTorrent](http://bittorrent.org/), [Kademlia](https://en.wikipedia.org/wiki/Kademlia), [Bitcoin](https://bitcoin.org/), 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](https://github.com/ipfs/go-ipfs)) with [more on the way](#protocol-implementations) ([JavaScript](https://github.com/ipfs/js-ipfs), and [Python](https://github.com/ipfs/py-ipfs)).
### Alpha Distribution
In February of 2015, the [go-ipfs](https://github.com/ipfs/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](https://github.com/ipfs/js-ipfs) and [py-ipfs](https://github.com/ipfs/py-ipfs) are in progress.
- [Install IPFS Alpha Distribution](https://docs.ipfs.io/introduction/usage/#install-ipfs)
- [Setup IPFS and Getting Started](https://docs.ipfs.io/introduction/usage/)
- [Going Online](https://docs.ipfs.io/introduction/usage/#taking-your-node-online)
- [More Examples](https://docs.ipfs.io/guides/examples/)
For an in-depth tutorial, see a [Hands on Introduction](https://www.youtube.com/watch?v=h73bd9b5pPA).
### 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
## Get involved
[![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)
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:
The IPFS project is big — with thousands of contributors in our community — and you're invited to join! Check out the [Community section of the IPFS Docs](https://docs-beta.ipfs.io/community/) for all the details on how to get involved, including the official [IPFS forums](https://discuss.ipfs.io), our [IRC channels](https://docs-beta.ipfs.io/community/irc), [social media](https://docs-beta.ipfs.io/community/social-media), [meetups and ProtoSchool workshops](https://github.com/ipfs/community#events), and more.
- [IPFS Community Forums for Discussion and Support](https://discuss.ipfs.io)
- [Sprints and Project Management](https://github.com/ipfs/pm)
- [Contributing Guidelines](https://github.com/ipfs/community/blob/master/CONTRIBUTING.md)
If you're interested in how the project is organized at a higher level, visit the [IPFS Team & Project Management](https://github.com/ipfs/team-mgmt) repo.
You can also find our community on:
There's also a weekly IPFS newsletter ([subscribe here](http://eepurl.com/gL2Pi5)) and [regularly-updated blog](https://blog.ipfs.io/).
- IRC: [#ipfs on chat.freenode.net](https://webchat.freenode.net/?channels=ipfs) for live help and some dev discussions ([Logs](https://botbot.me/freenode/ipfs/))
- Google Group: [ipfs-users@groups.google.com](https://groups.google.com/forum/#!forum/ipfs-users) (low traffic)
- Twitter: [@IPFSbot](https://twitter.com/ipfsbot) for news.
## Help and documentation
## Project Links
If you're looking for help learning about or building with IPFS, start with these resources:
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.
- [IPFS Documentation](https://docs-beta.ipfs.io)
- [IPFS Forums](https://discuss.ipfs.io)
For a community-curated lists of awesome projects using IPFS, check out [awesome-ipfs](https://github.com/ipfs/awesome-ipfs)!
**If you've found a bug or want to make a feature request regarding a specific component of IPFS, please open an issue in the appropriate repo so that it can be triaged and responded to as quickly as possible.**
### Documentation
## Links and resources
* [Documentation site](https://docs-beta.ipfs.io)
The IPFS project is big (and expanding every day!), so we've excerpted some frequently-used links and other resources below. However, we encourage you to explore both the main [IPFS GitHub org](https://github.com/ipfs) (for core implementations and other mission-critical work) and the [IPFS Shipyard GitHub org](https://github.com/ipfs-shipyard), home to incubated projects by the IPFS community.
### Protocol Implementations
### Protocol implementations
These are the current implementations of IPFS:
| Language | Project | Completeness |
|----------|---------|--------------|
@ -190,152 +171,74 @@ For a community-curated lists of awesome projects using IPFS, check out [awesome
If you would you like to start your own language implementation of IPFS, check out the [IPFS Implementation Guide](https://github.com/ipfs/specs/blob/master/overviews/implement-ipfs.md), and the [Specifications](https://github.com/ipfs/specs). 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
### HTTP client libraries
<a href="ipfs.io"><img width="360px" src="https://ipfs.io/ipfs/QmQJ68PFMDdAsgCZvA1UVzzn18asVcf7HVvCDgpjiSCAse" alt="IPFS http client lib logo" /></a>
The following HTTP client libraries are either complete (:white_check_mark:) or under development. All welcome contributions! If you would like to create a new library, please see the [IPFS HTTP Client Implementation Guide](https://github.com/ipfs/go-ipfs/blob/master/docs/implement-api-bindings.md), and [tell us](https://discuss.ipfs.io/) so we can help.
| 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 | ?? |
| | https://github.com/JadedCtrl/cl-ipfs-api2 | ?? |
| 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](https://github.com/rened) | ?? |
| Lua | contact: [@seclorum](https://github.com/seclorum) | ?? |
| Language | Client library |
|---------------|-----------------------------------------------------------|
| Go | https://github.com/ipfs/go-ipfs-api |
| Java | https://github.com/ipfs/java-ipfs-api |
| JavaScript :white_check_mark: | https://github.com/ipfs/js-ipfs-api |
| 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 :white_check_mark: | https://github.com/district0x/cljs-ipfs-http-client |
| 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-client |
| C++ | https://github.com/vasild/cpp-ipfs-api |
| Erlang | https://github.com/hendry19901990/erlang-ipfs-http-client |
| Objective-C | None yet |
| Julia | contact [@rened](https://github.com/rened) |
| Lua | contact [@seclorum](https://github.com/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](https://github.com/ipfs/go-ipfs/blob/master/docs/implement-api-bindings.md), and [tell us](https://github.com/ipfs/ipfs/issues/83) so we can help!
### GUIs and helper apps
### Project Directory
This aims to be a directory of all the various repos in the [IPFS Github Organization](https://github.com/ipfs), 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](https://github.com/ipfs/ipfs) - Master repo, intro, and news.
- [discourse](https://discuss.ipfs.io) - Community discussions and support forum.
- [tm](https://github.com/ipfs/tm) - IPFS Team Planning and Management of the Project
#### Get Help!
The best place to seek help is on [the IPFS community forum](https://discuss.ipfs.io) or on IRC (freenode) in the `#ipfs` channel.
There are two deprecated repositories containing [FAQ](https://github.com/ipfs/faq) and [support](https://github.com/ipfs/support). Use those as reference, but post any new questions or requests for help on https://discuss.ipfs.io.
#### Documents
- [papers](papers) - Academic papers on IPFS.
- [specs](https://github.com/ipfs/specs) - Specifications on the IPFS protocol.
- [notes](https://github.com/ipfs/notes) - Various relevant notes and discussions (that do not fit elsewhere).
- [reading-list](https://github.com/ipfs/reading-list) - Papers to read to understand IPFS.
#### Discussions
- [archives](https://github.com/ipfs/archives) - Coordinating archival efforts with IPFS.
- [archive-format](https://github.com/ipfs/archive-format) - A DAG Archive format.
- [research-bitswap](https://github.com/ipfs/research-bitswap) - Repo to discuss Bitswap research.
- [bitswap-ml](https://github.com/ipfs/bitswap-ml) - Bitswap and Machine Learning.
- [research-crdt](https://github.com/ipfs/research-crdt) - Repo to discuss crdt research.
- [research-pubsub](https://github.com/libp2p/research-pubsub) - Repo to discuss pubsub research.
- [blockchain-data](https://github.com/ipfs/blockchain-data) - Using IPFS for storing data for Blockchain apps.
- [POST](https://github.com/ipfs/POST) - A datastructure for human communication.
#### Protocol Implementations
- [go-ipfs](https://github.com/ipfs/go-ipfs) - Implementation in Go.
- [js-ipfs](https://github.com/ipfs/js-ipfs) - Implementation in Javascript.
- [py-ipfs](https://github.com/ipfs/py-ipfs) - Implementation in Python.
#### IPFS DSLs
- [fsharp-ipfs-dsl](https://github.com/cloveekprojeqt/fsharp-ipfs-dsl) - Embedded declarative F# DSL over [net-ipfs-api](https://github.com/richardschneider/net-ipfs-api)
#### IPFS GUIs
- [ipfs-companion](https://github.com/ipfs-shipyard/ipfs-companion) - The web browser extension.
- [ipfs-desktop](https://github.com/ipfs-shipyard/ipfs-desktop) - A menubar/tray desktop app.
- [ipfs-companion](https://github.com/ipfs-shipyard/ipfs-companion) - The IPFS web browser extension.
- [ipfs-webui](https://github.com/ipfs/webui) - The IPFS WebUI app.
- [ipfs-desktop](https://github.com/ipfs-shipyard/ipfs-desktop) - A menubar/tray desktop app.
- [ipfs-gui](https://github.com/ipfs/ipfs-gui) - Coordinating development, user experience, and maintenance of IPFS GUIs.
- [i18n](https://github.com/ipfs/i18n) - The IPFS Translation Project: crowdsourcing translations of IPFS GUIs and websites.
- [pm-ipfs-gui](https://github.com/ipfs-shipyard/pm-ipfs-gui) - Coordinating development and maintenance of GUI apps.
#### Apps on IPFS
### Apps and data sets on IPFS
You can find an ever growing list at [Awesome IPFS](https://awesome.ipfs.io/apps/)
- [Awesome IPFS](https://awesome.ipfs.io) - an ever-growing list of apps, data sets, and other inspirational resources built on IPFS.
#### Community Infrastructure
### Specs and papers
- [blog](https://github.com/ipfs/blog) - The IPFS Blog.
- [community forum](https://discuss.ipfs.io)
- [distributions](https://github.com/ipfs/distributions) - Scripts to build the /install html page.
- [newsletter](https://github.com/ipfs/newsletter) - Prepare and store IPFS Newsletter roundups. [Subscribe here.](http://eepurl.com/gL2Pi5)
- [infrastructure](https://github.com/ipfs/infrastructure) - Tools and systems for the community.
- [ops-requests](https://github.com/ipfs/ops-requests) - Requests about infrastructure operations.
- [project-repos](https://github.com/ipfs/project-repos) CI status and other health metrics.
- [website](https://github.com/ipfs/website) - The source to the IPFS community website at http://ipfs.io.
- [specs](https://github.com/ipfs/specs) - Specifications on the IPFS protocol.
- [papers](papers) - Academic papers on IPFS.
- [IPFS Docs: Further Reading](https://docs-beta.ipfs.io/concepts/further-reading/academic-papers) - Papers to read to understand IPFS and its underlying technologies.
#### Ref Lists
- [refs](https://github.com/ipfs/refs) - Tools for publishing lists of IPFS ref heads.
- [refs-denylists-dmca](https://github.com/ipfs/refs-denylists-dmca) - DMCA takedown notices for the IPFS Public Gateway.
- [refs-solarnet-storage](https://github.com/ipfs/refs-solarnet-storage) - Inventory of content archived on Solarnet storage hosts.
### Other Community Resources
- [examples](https://github.com/ipfs/examples) - Examples on how to use go-ipfs.
- [awesome-ipfs](https://github.com/ipfs/awesome-ipfs) - Useful resources for using IPFS and building things on top of it.
- [logo](https://github.com/ipfs/logo) - The logo for IPFS.
#### IPFS Meetups
There are plethora of IPFS Meetups all over the world now. Find yours at the [Community Repo](https://github.com/ipfs/community#events)
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](https://github.com/ipfs/community/issues) and [to advertise events in the main repository](https://github.com/ipfs/ipfs/issues).
#### Tools
Installing
### Installation and update tools
- [install-go-ipfs](https://github.com/ipfs/go-ipfs#install) - Install go-ipfs shell script.
- [install-js-ipfs](https://github.com/ipfs/js-ipfs#install) - Install js-ipfs through npm or a script tag.
- [install-js-ipfs](https://github.com/ipfs/js-ipfs#getting-started) - Install js-ipfs through NPM or a script tag.
- [ipfs-update](https://github.com/ipfs/ipfs-update) - An updater tool for IPFS.
- [fs-repo-migrations](https://github.com/ipfs/fs-repo-migrations) - These are migrations for [IPFS fs-repo](https://github.com/ipfs/specs/tree/399c907b214a24dc82ca010af6884227cb2829cf/repo/fs-repo) versions.
- [npm-go-ipfs](https://github.com/ipfs/npm-go-ipfs) - Install go-ipfs from npm.
- [npm-go-ipfs](https://github.com/ipfs/npm-go-ipfs) - Install go-ipfs from NPM.
Other
### Additional resources
- [connections-globe](https://github.com/ipfs/connections-globe) - An interactive globe to view all your IPFS peers.
- [dataviz](https://github.com/ipfs/dataviz) - IPFS data visualizations.
- [dir-index-html](https://github.com/ipfs/dir-index-html) - Directory listing html.
- [dnslink-deploy](https://github.com/ipfs/dnslink-deploy) - Automatically set DNS records on Digital Ocean.
- [file-browser](https://github.com/ipfs/file-browser) - Generic IPFS file browser UI
- [fs-stress-test](https://github.com/ipfs/fs-stress-test) - Stress testing IPFS filesystem capabilities.
- [js-ipfsd-ctl](https://github.com/ipfs/js-ipfsd-ctl) - Control IPFS daemons from JavaScript.
- [ipfs-hubot](https://github.com/ipfs/ipfs-hubot) - Hubot for IPFS uses.
- [ipfs-blob-store](https://github.com/ipfs/ipfs-blob-store) - A place to buy blobs.
- [Find an ever growing list on Awesome IPFS](https://awesome.ipfs.io/tools/)
- [distributions](https://github.com/ipfs/distributions) - Source code for the IPFS distributions website, https://dist.ipfs.io.
- [infra](https://github.com/ipfs/infra) - Tools for maintaining infrastructure for the IPFS community.
- [testground](https://github.com/ipfs/testground) - Tools for testing distributed software at scale.
- [ipfs-cluster](https://github.com/ipfs/ipfs-cluster) - Provides data orchestration across a swarm of IPFS daemons by allocating, replicating, and tracking a global pinset distributed among multiple peers.
- [ipfs-shipyard](https://github.com/ipfs-shipyard) - A wide range of incubated projects by and for the IPFS community.
- [website](https://github.com/ipfs/website) - Source code for the IPFS website, http://ipfs.io.
## License
MIT
[MIT](LICENSE).

@ -1,793 +0,0 @@
# IPFS Project Requirements to 1.0.0
## Table of Contents
- [Description](#description)
- [Milestones](#milestones)
## Description
In order for IPFS to reach its maturity state, going from Alpha, to Beta and to v1.0.0, the project will need:
- For its specifications to be 100% complete. This includes the IPFS, libp2p, multiformats and IPLD specs.
- Compliance tests for the specification.
- The golang and JavaScript implementations to be 100% complete and spec compliant.
- A third party implementation of IPFS, fully interoperable with the go and JavaScript versions.
- A release plan and cycle, including a strategy to support specific key releases for longer periods of time (i.e LTS releases vs stable)
## Milestones
Here you will find a comprehensive list of the various challenges and milestones in the IPFS Project to reach version 1.0.0. They are not ordered in any way at the moment, merely grouped.
### Sustainability and Governance
These are some of the milestones to hit to create a active, sustainable, inclusive and participatory governance model for IPFS.
- [x] Organize IPFS All Hands.
- [ ] Have IPFS lead by a Steering Working Group.
- [ ] Define several Working Groups focused on different parts of the project (e.g Community Engagement, Documentation and Education, IPFS in Web Browsers).
- [ ] Define a release plan and long term support plan.
### IPFS Use Cases
These are some use case milestones to drive development.
- [x] Support for file distribution
- [x] Support for personal file storage, backups, and distribution
- [x] Support for basic p2p file distribution
- [x] Support for fast local area network file distribution
- [x] Support for immutable, permanent links to files, websites, data
- [x] Support for mutable links to files, websites, data
- [x] Support for websites and web applications
- [x] Support for static web applications
- [x] Support for API based web applications
- [x] Support for fully dynamic websites entirely on IPFS (eg chat)
- [x] Support for collaborative seeding/pinning
- [x] basic support for ipfs ref pinning
- [ ] Cloud ipfs frontend services (cube)
- [ ] clusters of ipfs nodes (RAID/RAIN)
- [ ] byzantine clusters (BA)
- [x] Support for browsers
- [x] js-ipfs-api client inside a tab
- [x] js-ipfs full node inside a tab
- [x] browser extension gateway redirects
- [x] browser extension full node
- [ ] impl native inside browsers
- [x] Support for versioning and archival
- [x] archival of files
- [x] archival of data and databases
- [ ] commit based versioning
- [x] Support other tools or applications via APIs
- [x] Support for commandline API usage
- [x] Support for HTTP API usage
- [ ] Support for unix sockets RPC API usage
- [x] Support for embedded, programmatic API usage
- [x] Support for HTTP Gateway
### Performance Milestones
These are some basic performance milestones to hit.
- [x] Megabytes / Slow
- [x] Good enough for small files - MB
- [x] Good enough for static websites - MB
- [x] Good enough for distributing webapp code/assets - MB
- [x] Good enough for images - MB
- [x] Gigabytes
- [x] Good enough for personal documents - GB
- [x] Good enough to stream video on the web - GB
- [x] Good enough for small scientific datasets - GB
- [x] Good enough for distributing webapp user data - GB
- [ ] Terabytes
- [x] Good enough for image collections - TB
- [x] Good enough for small video collections - TB
- [ ] Good enough for medium scientific datasets - TB
- [x] Good enough as a package manager (gx) - TB
- [x] Good enough as a package manager backup (npm-on-ipfs) - TB
- [ ] Good enough as a package manager replacement (npm-on-ipfs) - TB
- [x] Good enough to distribute small databases - TB
- [ ] Good enough for large (single) archives - TB
- [ ] Petabytes
- [ ] Good enough for large video collections - PB
- [ ] Good enough for large scientific datasets - PB
- [ ] Good enough for Backup Archival - TB/PB
- [ ] Good enough to distribute large databases - PB
- [ ] Exabytes
- [ ] Good enough for massive archives - EB
- [ ] Good enough for the entire web - EB
- [ ] Good enough for top10 websites - EB
### Developer Libraries
These are some libraries that must exist to make developers' lives easy. It is critical that making fully dynamic apps on IPFS should be just as easy or easier than traditional systems.
- [x] file importers for basic files
- [x] custom file importer tooling
- [x] ipfs node api bindings
- [x] ipfs api bindings in Go
- [x] ipfs api bindings in JS
- [x] ipfs api bindings in Java
- [x] ipfs api bindings in Python
- [x] ipfs api bindings in PHP
- [x] ipfs api bindings in Ruby
- [ ] ipfs api bindings in Scala
- [ ] ipfs api bindings in Rust
- [ ] ipfs api bindings in Haskell
- [x] ipfs api bindings in C/C++
- [ ] ipfs api bindings in Erlang
- [x] full ipfs node implementations
- [x] go-ipfs - implementation in Go
- [x] js-ipfs - implementation in JS
- [x] developer libs for cli tools
- [ ] developer libs for desktop apps
- [x] developer libs for webapps
- [x] js-ipfs-api - js api bindings
- [ ] developer libs for mobile apps
- [ ] developer libs for iOS
- [ ] developer libs for Android
- [x] developer libs for node.js apps
- [x] go-ipfs-dep - module to install go-ipfs
- [x] ipfsd-ctl - module to control an ipfs daemon
- [x] js-ipfs-api - js api bindings
- [ ] developer libs for dynamic webapps (in progress)
- [x] ipfs-log (CRDT)
- [ ] other "CRDTs on IPFS" libs
- [x] orbit-db - key-value store and event log
- [ ] developer libs for crypto capabilities
- [ ] typical sharing models over ipfs
- [ ] developer libs for social networks
- [ ] POST datastructure
- [ ] decentralized identity
### Security Milestones
- [ ] Network security
- [x] upgradable transport encryption (multistream)
- [x] transport encryption: secio (ECDHE)
- [ ] transport encryption: TLS 1.3 (mainstream crypto)
- [ ] transport encryption: CurveCP or MinimaLT (djb crypto)
- [ ] Content Security
- [x] content security: IPLD hash links (authenticated content)
- [ ] content security: Keychain signed objects
- [ ] content security: native content encryption
- [ ] content security: native crypto capabilities
- [ ] content security: audit
- [ ] Anonymity
- [ ] transport anonymity: tor support
- [ ] transport anonymity: i2p support
- [ ] ship anonymity focused distribution (tor, i2p, no leaking info)
- [ ] peer and content routing anonymity
- [ ] anonymity: audit
- [ ] Anticensorship
- [x] Anticensorship: decentralized, peering content distribution
- [x] Anticensorship: access based re-distribution
- [ ] Anticensorship: incentivized distribution
- [ ] Anticensorship: PKI distribution
- [ ] Anticensorship: resilience to powerful sybil attacks on routing
- [ ] Anticensorship: HTTP TLS transport emulation
- [ ] Auditing
- [ ] Audit: full protocol fuzzer tests
- [ ] Audit: test with state of the art exploit test suites
- [ ] Audit: p2p scalability researcher audits
- [ ] Audit: 3x independent professional security audits of full protocol
- [ ] Audit: 3x independent professional security audits of implementations
### Network Scalability
The scalability of the IPFS protocol depends on careful design of algorithms and models, careful optimization of our implementations, and careful attention to the security properties of the protocols. Reaching high scalability for self-organizing peer-to-peer protocols is HARD, though definitely achievable. We measure scalability in orders of magnitude, as larger thresholds will require revisiting various parts of our codebase.
Please bear in mind that we are currently still implementing major features of the protocols and reaching implementation completion. We have not yet turned our focus towards scalability, thus there are LOTS of low hanging fruit to optimize and likely many scalability bugs to be worked out. The most important part is to make sure all protocols are meant to scale to billions of nodes, and that they make no centralizing assumptions. All protocols we have chosen make no small scale assumptions and are meant to scale well (typically `log(n)`).
Our scalability observations are divided into simulations, real network tests, and production networks.
- [x] Simulations
- [x] Scalability to 1,000s of nodes
- [x] Scalability to 10,000s of nodes
- [x] Scalability to 100,000s of nodes
- [ ] Scalability to 1,000,000s of nodes
- [ ] Scalability to 1,000,000,000s of nodes
- [x] Real network tests
- [x] Scalability to 1,000s of nodes
- [x] Scalability to 10,000s of nodes
- [ ] Scalability to 100,000s of nodes
- [ ] Scalability to 1,000,000s of nodes
- [ ] Scalability to 1,000,000,000s of nodes
- [x] Production networks
- [x] Scalability to 1,000s of nodes
- [x] Scalability to 10,000s of nodes
- [ ] Scalability to 100,000s of nodes
- [ ] Scalability to 1,000,000s of nodes
- [ ] Scalability to 1,000,000,000s of nodes
### Polish level
The polish level achieved defined how much effort has gone into polishing all the corners of the tools, APIs, documentation, and so on. Early on, things will be much more rough as we need to focus on implementation speed over final polish. As we reach completion of the implementations, we turn our focus towards scalability, stability, and security. After that, we focus on end user polish.
- [x] Polish level: alpha - individuals innovators
- [x] Polish level: alpha - production for early adopters
- [ ] Polish level: beta - production for small orgs (in progress)
- [ ] Polish level: beta - production for large orgs
- [ ] Polish level: 1.0 - production for all
### Multiformats
The multiformats are a set of self-describing protocols/formats for future-proofed or "upgradable systems" (systems that make no silly assumptions that are likely to break over time).
- [x] multiaddr: protocol design
- [x] multiaddr: impl in Go
- [x] multiaddr: impl in JS
- [x] multiaddr: impl in Java
- [x] multiaddr: impl in Haskell
- [x] multiaddr: impl in Python
- [x] multiaddr: impl in Rust
- [x] multihash: protocol spec
- [x] multihash: impl in Go
- [x] multihash: impl in JS
- [x] multihash: impl in Scala
- [x] multihash: impl in Java
- [x] multihash: impl in Clojure
- [x] multihash: impl in Rust
- [x] multihash: impl in Haskell
- [x] multihash: impl in Python
- [x] multihash: impl in Elixir
- [x] multihash: impl in Swift
- [x] multihash: impl in Ruby
- [x] multicodec: protocol spec
- [x] multicodec: impl in Go
- [x] multicodec: impl in JS
- [x] multistream: protocol spec
- [x] multistream: impl in Go
- [x] multistream: impl in JS
- [x] multibase / baseN: protocol spec
- [x] multibase / baseN: impl in Go
- [x] multibase / baseN: impl in JS
### libp2p Protocols
The libp2p protocols are the protocol stack for the modular p2p protocols library spun out of IPFS. These form a p2p-first network stack, with no assumptions, self description, and modular interfaces. More at https://github.com/ipfs/specs/tree/master/libp2p
Consult [libp2p Requirements here](https://github.com/libp2p/libp2p/blob/master/REQUIREMENTS.md)
### Bitswap
Bitswap is the exchange protocol of IPFS. It simulates a data market.
- [x] Bitswap: Protocol and architecture design
- [x] Bitswap: protocol spec
- [x] Bitswap: decision engine
- [x] Bitswap: strategy: altruist
- [x] Bitswap: strategy: logistic
- [x] Bitswap: strategy: programmable
- [x] Bitswap: support for keys
- [x] Bitswap: support for paths
- [ ] Bitswap: support for selectors
- [ ] Bitswap: hooks for other txns
- [x] Bitswap: impl in Go
- [x] Bitswap: testing simulator
- [x] Bitswap: basic exchange
- [x] Bitswap: bandwidth accounting
- [x] Bitswap: decision engine
- [x] Bitswap: strategy: altruist
- [ ] Bitswap: strategy: logistic
- [ ] Bitswap: strategy: programmable
- [x] Bitswap: support for keys
- [ ] Bitswap: support for paths
- [ ] Bitswap: support for selectors
- [ ] Bitswap: hooks for other txns
- [x] Bitswap: impl in JS
- [x] Bitswap: testing simulator
- [x] Bitswap: basic exchange
- [x] Bitswap: bandwidth accounting
- [x] Bitswap: decision engine
- [x] Bitswap: strategy: altruist
- [ ] Bitswap: strategy: logistic
- [x] Bitswap: strategy: programmable
- [x] Bitswap: support for keys
- [ ] Bitswap: support for paths
- [ ] Bitswap: support for selectors
- [ ] Bitswap: hooks for other txns
- [x] Bitswap: bssim network simulations
- [x] Bitswap: bssim: basic in-proc simulation
- [x] Bitswap: bssim: basic multiproc simulation
- [ ] Bitswap: bssim: basic multi machine simulation
- [x] Bitswap: bssim: metrics collection
- [x] Bitswap: bssim: reporting
- [x] Bitswap: bssim: pluggable strategies
- [ ] Bitswap: bssim: strategies config
### IPFS DHT
The IPFS DHT is (today) a Kademlia based DHT implementing several libp2p protocols: Peer Discovery, Peer Routing, Content Routing, and some NAT Traversal assistance.
- [x] IPFS DHT: Protocol and architecture design
- [x] IPFS DHT: protocol spec / messages
- [x] IPFS DHT: kad queries
- [x] IPFS DHT: kbucketing
- [x] IPFS DHT: churn resistance
- [ ] IPFS DHT: censor resistance
- [x] IPFS DHT: impl in Go
- [x] IPFS DHT: messages
- [x] IPFS DHT: kad queries
- [x] IPFS DHT: kbucketing
- [x] IPFS DHT: churn resistance
- [ ] IPFS DHT: censor resistance
- [x] IPFS DHT: impl in JS
- [x] IPFS DHT: messages
- [x] IPFS DHT: kad queries
- [x] IPFS DHT: kbucketing
- [x] IPFS DHT: churn resistance
- [ ] IPFS DHT: censor resistance
- [x] IPFS DHT: dhtHell simulations
- [x] IPFS DHT: dhtHell programmable config
- [x] IPFS DHT: dhtHell in-proc tests
- [ ] IPFS DHT: dhtHell multi-proc tests
- [ ] IPFS DHT: dhtHell multi-machine tests
- [x] IPFS DHT: dhtHell 1,000 nodes
- [x] IPFS DHT: dhtHell 10,000 nodes
- [ ] IPFS DHT: dhtHell 100,000 nodes
- [ ] IPFS DHT: dhtHell 1,000,000 nodes
### IPFS pub/sub
The IPFS pub/sub service will provide fast delivery and routing for subnets of ipfs nodes. This is critical for dynamic applications. pub/sub (or multicast) will implement: Peer Discovery, Peer Routing, Content Routing, and some NAT Traversal assistance. It fulfills similar roles as the IPFS DHT, but with drastically different performance, security, and scalability guarantees. IPFS Pub/Sub is currently in development.
- [ ] IPFS pub/sub: Protocol and architecture design
- [ ] IPFS pub/sub: protocol spec / messages
- [ ] IPFS pub/sub: record spec
- [x] IPFS pub/sub: one-hop support
- [ ] IPFS pub/sub: multihop tree forming
- [ ] IPFS pub/sub: churn resistance
- [ ] IPFS pub/sub: censor resistance
- [ ] IPFS pub/sub: topic/channel support
- [ ] IPFS pub/sub: hierarchical topic/channel support
- [ ] IPFS pub/sub: authenticated subnets
- [ ] IPFS pub/sub: private subnets (symmetric)
- [ ] IPFS pub/sub: private subnets (PKI)
- [ ] IPFS pub/sub: impl in Go
- [x] IPFS pub/sub: prototyping in Go
- [ ] IPFS pub/sub: impl in JS
- [x] IPFS pub/sub: prototyping in JS
- [ ] IPFS pub/sub: pssim simulations
- [ ] IPFS pub/sub: pssim programmable config
- [ ] IPFS pub/sub: pssim in-proc tests
- [ ] IPFS pub/sub: pssim multi-proc tests
- [ ] IPFS pub/sub: pssim multi-machine tests
- [ ] IPFS pub/sub: pssim 1,000 nodes
- [ ] IPFS pub/sub: pssim 10,000 nodes
- [ ] IPFS pub/sub: pssim 100,000 nodes
- [ ] IPFS pub/sub: pssim 1,000,000 nodes
### IPLD
IPLD is the core format for data on IPFS. More at https://github.com/ipfs/specs/tree/master/ipld
- [x] ipld v0 protobuf: spec
- [x] ipld v0 protobuf: impl in go
- [x] ipld v0 protobuf: impl in js
- [x] ipld: spec
- [x] ipld: Linking
- [x] ipld: Pathing
- [ ] ipld: Selector
- [ ] ipld: Query
- [x] ipld: v0 compat
- [x] ipld: cbor serialization
- [x] ipld: links and resolving
- [x] ipld: streaming support
- [x] ipld: impl in Go
- [x] ipld: Linking
- [x] ipld: Pathing
- [ ] ipld: Selector
- [ ] ipld: Query
- [x] ipld: v0 compat
- [x] ipld: cbor serialization
- [x] ipld: links and resolving
- [x] ipld: streaming support
- [x] ipld: impl in JS
- [x] ipld: Linking
- [x] ipld: Pathing
- [ ] ipld: Selector
- [ ] ipld: Query
- [x] ipld: v0 compat
- [x] ipld: cbor serialization
- [x] ipld: links and resolving
- [ ] ipld: streaming support
- [ ] ipld: website
- [ ] ipld: website: front page
- [ ] ipld: website: spec
- [ ] ipld: website: about
- [ ] ipld: website: playground
- [ ] ipld: website: playground spec
- [ ] ipld: website: playground impl
### IPLD Data Structures and Importers
IPLD data structures and importers are various data structures and programs that covert data or files from other native representations to and from IPLD graphs. Think of these as both the graph representation datastructs, and conversion codecs.
- [x] unixfs for unix/posix files
- [x] unixfs spec
- [x] unixfs file
- [x] unixfs file sharding
- [x] unixfs file trickledag
- [x] unixfs dir
- [ ] unixfs dir sharding
- [x] unixfs metadata
- [x] unixfs impl in Go
- [x] unixfs file
- [x] unixfs file sharding
- [x] unixfs file trickledag
- [x] unixfs dir
- [x] unixfs dir sharding
- [x] unixfs metadata
- [x] unixfs impl in JS
- [x] unixfs file
- [x] unixfs file sharding
- [x] unixfs file trickledag
- [x] unixfs dir
- [x] unixfs dir sharding
- [x] unixfs metadata
- [x] archives spec
- [x] tar
- [ ] zip
- [ ] rar
- [ ] keychain spec
- [ ] keychain: keys
- [ ] keychain: sigs
- [ ] keychain: caps
- [ ] keychain: proofs
### IPFS Repo
More at https://github.com/ipfs/specs and https://github.com/ipfs/fs-repo-migrations
- [x] IPFS repo spec
- [x] IPFS repo impl in Go
- [x] IPFS repo impl in JS node
- [x] IPFS repo impl in JS browser
- [x] IPFS fs-repo spec
- [x] IPFS fs-repo v0
- [x] IPFS fs-repo datastore (blocks and metadata)
- [x] IPFS fs-repo config file
- [x] IPFS fs-repo lock file
- [x] IPFS fs-repo logs dir
- [x] IPFS fs-repo v1
- [x] IPFS fs-repo version file
- [x] IPFS fs-repo api file
- [x] IPFS fs-repo blocks (data)
- [x] IPFS fs-repo datastore (metadata)
- [x] IPFS fs-repo v2
- [x] IPFS fs-repo ipld pinset
- [x] IPFS fs-repo impl in Go
- [x] IPFS fs-repo impl in JS node
- [x] IPFS fs-repo impl in JS browser
- [x] IPFS fs-repo-migrations
- [x] IPFS fs-repo-migrations 0-to-1
- [x] IPFS fs-repo-migrations 1-to-2
- [x] IPFS fs-repo-migrations 2-to-3
### IPFS Protocol and Architecture
- [x] IPFS architecture: macro protocol architecture
- [x] IPFS architecture: futureproofing and self-description (multis)
- [x] IPFS architecture: networking
- [x] IPFS architecture: encrypted and authenticated connectivity
- [x] IPFS architecture: peer and content routing
- [x] IPFS architecture: NAT traversal
- [x] IPFS architecture: line and pkt switching relay
- [x] IPFS architecture: abstracting and extracting libp2p
- [x] IPFS architecture: basic private networks (symmetric encryption)
- [ ] IPFS architecture: advanced private networks (PKI)
- [x] IPFS architecture: merkle-linked graph and IPLD
- [x] IPFS architecture: pathing model for fs and web
- [x] IPFS architecture: selectors for graph traversals
- [x] IPFS architecture: addressing
- [x] IPFS architecture: content addressing and resolution
- [x] IPFS architecture: key addressing and resolution
- [x] IPFS architecture: other resolver addressing and resolution
- [x] IPFS architecture: node data sync model
- [x] IPFS architecture: ref pull resolution and retrieval
- [ ] IPFS architecture: ref push
- [x] IPFS architecture: ref pinning
- [ ] IPFS architecture: peer-to-peer RPC auth
- [x] IPFS architecture: projection of protocol to programs
- [x] IPFS architecture: program model
- [x] IPFS architecture: service design
- [x] IPFS architecture: tool design
- [x] IPFS architecture: core api design
- [x] IPFS architecture: cli api design
- [x] IPFS architecture: http api design
- [ ] IPFS architecture: RPC api design
- [x] IPFS architecture: distribution of programs
- [x] IPFS architecture: webui design
- [x] IPFS architecture: app designs
- [ ] IPFS architecture: programmable policy hooks
- [ ] IPFS architecture: bitswap strategies and trading
- [ ] IPFS architecture: data advertising and serving
- [ ] IPFS architecture: social network
- [x] IPFS architecture: blocklists design
- [ ] IPFS architecture: blocklist support in gateway
- [ ] IPFS architecture: blocklist support in net
- [ ] IPFS architecture: scalable blocklist (bloom)
- [ ] IPFS architecture: clustering
- [ ] IPFS architecture: cluster RAID/RAIN modes
- [ ] IPFS architecture: cluster consensus
### Go implementation of IPFS
The go-ipfs effort is the Go implementation of IPFS. It is meant to run as a commandline tool, as a background service, as a programmatic embedded node, through an RPC API, and to be used as part of other tools. go-ipfs is the reference implementation of IPFS. It includes the HTTP-to-IPFS Gateway implementation. More at https://github.com/ipfs/go-ipfs
- [x] go-ipfs ipfs node components
- [x] go-ipfs multi protocols
- [x] go-ipfs component: repo
- [x] go-ipfs component: networking (libp2p)
- [x] go-ipfs component: bitswap
- [x] go-ipfs component: dag / ipld
- [x] go-ipfs component: pinning
- [x] go-ipfs component: block api
- [x] go-ipfs component: object api
- [x] go-ipfs component: files api
- [x] go-ipfs component: daemon
- [x] go-ipfs component: data importing
- [x] go-ipfs component: gateway
- [x] go-ipfs component: http api
- [x] go-ipfs ipfs node api
- [x] go-ipfs core api impl
- [x] go-ipfs core api: version
- [x] go-ipfs core api: daemon
- [x] go-ipfs core api: id
- [x] go-ipfs core api: block
- [x] go-ipfs core api: object
- [x] go-ipfs core api: refs
- [x] go-ipfs core api: repo
- [x] go-ipfs core api: pin
- [x] go-ipfs core api: log
- [x] go-ipfs ext api impl
- [x] go-ipfs ext api: name (ipns)
- [x] go-ipfs ext api: dns
- [x] go-ipfs ext api: tar
- [ ] go-ipfs ext api: tour
- [x] go-ipfs ext api: files
- [x] go-ipfs ext api: stat
- [x] go-ipfs ext api: mount
- [x] go-ipfs ext api: bootstrap
- [x] go-ipfs ext api: bitswap
- [x] go-ipfs tool api impl
- [x] go-ipfs tool api: init
- [x] go-ipfs tool api: config
- [x] go-ipfs tool api: update
- [x] go-ipfs tool api: commands
- [x] go-ipfs net api impl
- [x] go-ipfs net api: ping
- [x] go-ipfs net api: dht
- [x] go-ipfs net api: swarm
- [ ] go-ipfs net api: records
- [x] go-ipfs cli api impl
- [x] go-ipfs cli codecs
- [x] go-ipfs http api impl
- [x] go-ipfs http api: streaming
- [x] go-ipfs http api: multipart
### Javascript implementation of IPFS
The js-ipfs effort is the javascript implementation of IPFS. It is meant to run on both node.js and today's regular web browsers. It is close, but not yet ready. More at https://github.com/ipfs/js-ipfs
- [x] js-ipfs ipfs node components
- [x] js-ipfs multi protocols
- [x] js-ipfs component: repo
- [x] js-ipfs component: networking (libp2p)
- [x] js-ipfs component: bitswap
- [x] js-ipfs component: dag / ipld
- [x] js-ipfs component: pinning
- [x] js-ipfs component: block api
- [x] js-ipfs component: object api
- [x] js-ipfs component: files api
- [x] js-ipfs component: daemon
- [x] js-ipfs component: data importing
- [x] js-ipfs component: http api
- [ ] js-ipfs ipfs node api
- [x] js-ipfs core api impl
- [x] js-ipfs core api: version
- [x] js-ipfs core api: daemon
- [x] js-ipfs core api: id
- [x] js-ipfs core api: block
- [x] js-ipfs core api: object
- [ ] js-ipfs core api: refs
- [x] js-ipfs core api: repo
- [x] js-ipfs core api: pin
- [ ] js-ipfs core api: log
- [ ] js-ipfs ext api impl
- [ ] js-ipfs ext api: name (ipns)
- [ ] js-ipfs ext api: dns
- [ ] js-ipfs ext api: tar
- [x] js-ipfs ext api: files
- [ ] js-ipfs ext api: stat
- [ ] js-ipfs ext api: mount
- [x] js-ipfs ext api: bootstrap
- [x] js-ipfs ext api: bitswap
- [x] js-ipfs tool api impl
- [x] js-ipfs tool api: init
- [x] js-ipfs tool api: config
- [ ] js-ipfs tool api: update
- [x] js-ipfs tool api: commands
- [ ] js-ipfs net api impl
- [x] js-ipfs net api: ping
- [ ] js-ipfs net api: dht
- [x] js-ipfs net api: swarm
- [ ] js-ipfs net api: records
- [x] js-ipfs cli api impl
- [x] js-ipfs http api impl
- [x] js-ipfs http api: streaming
- [x] js-ipfs http api: multipart
### IPFS directly on the Browsers
As a protocol for the web, the ultimate goal of IPFS is to run directly in the browsers. We are achieving this through a four-step plan:
- (1) Implement IPFS in any language, and use a js-ipfs-api library to delegate commands to an IPFS API (e.g. go-ipfs running on localhost). This already works today, and many applications already exist leveraging IPFS in the browser this way.
- (2) Implement IPFS in javascript, and use js-ipfs directly in the browser tab. This is in progress today.
- (3) Build browser extensions that use IPFS to serve IPFS URIs and expose ipfs to the browser tab. This can be done using go-ipfs (API on localhost) or ideally a bundled js-ipfs. This is in progress today. The firefox extension already has 400+ daily users.
- (4) Finally, submit patches to the major browsers adding IPFS support.
We have finished step (1). We are currently working on steps (2) and (3). Step (4) is likely a 2017 endeavor.
- [x] IPFS API used in a browser tab
- [x] go-ipfs implementation
- [x] js-ipfs-api client library
- [x] use background go-ipfs node (localhost or elsewhere)
- [x] IPFS protocol running in a browser tab, in js
- [x] js-libp2p implementation
- [x] js-ipfs implementation
- [x] libp2p.js browser library
- [x] ipfs.js browser library
- [x] IPFS running with a browser extension
- [x] go-ipfs implementation
- [x] js-ipfs implementation
- [x] firefox extension
- [x] use background go-ipfs node
- [ ] easy install of go-ipfs node
- [x] bundling of js-ipfs node
- [x] url rewriting
- [x] node management
- [x] api configuration
- [ ] simple UX for users
- [ ] expose ipfs and p2p in the browser window
- [x] chrome extension
- [x] use background go-ipfs node
- [ ] easy install of go-ipfs node
- [x] bundling of js-ipfs node
- [x] url rewriting
- [ ] node management
- [ ] api configuration
- [ ] simple UX for users
- [x] expose ipfs and p2p in the browser window
- [ ] IPFS running natively in a browser
- [x] go-ipfs implementation (for chrome or firefox)
- [ ] go-ipfs static lib (for chrome or firefox)
- [x] js-ipfs implementation (for chrome or firefox)
- [ ] rust-ipfs implementation (for servo)
- [ ] chromium patches adding IPFS support
- [ ] firefox patches adding IPFS support
- [ ] servo patches adding IPFS support
- [ ] safari patches adding IPFS support
### IPFS Node Management Console (webui)
We have an ipfs node "management console" GUI, delivered as a distributed webapp (dapp). This shows information about an ipfs node, and allows issuing some commands. The webui is entirely hosted and distributed through IPFS itself, demonstrating dynamic web applications on IPFS. More at https://github.com/ipfs/webui
- [x] webui console architecture
- [x] R/W privileged API route (:5001)
- [x] Security: Origin and CORS
- [x] Security: exposed only locally
- [ ] Security: token based access
- [x] distributed through IPFS itself
- [x] accessed through http-to-ipfs gateway
- [x] webui console v0
- [x] webapp design
- [x] basic node info
- [x] peer map (3D earth)
- [x] ipfs dag explorer
- [x] ipfs file viewer
- [x] listing all files
- [x] adding files (+ drag and drop)
- [x] tail logs (json)
- [x] view & edit config (json)
- [x] webui console v1
- [x] webapp redesign
- [x] peer map (flat and 3D)
- [x] new dag explorer
- [x] new file explorer
- [x] file navigation
- [x] drag and drop support
- [x] file previews
### HTTP to IPFS Gateway
In order to ease the adoption and deployment of IPFS, we have HTTP-to-IPFS Gateways. This means two related things: (a) implementation of an HTTP-to-IPFS gateway server (currently part of go-ipfs), and (b) a globally accessible service Protocol Labs runs for the community. All of the official IPFS websites are now self-hosted directly on IPFS.
- [x] HTTP Gateway implementation (in go-ipfs)
- [x] HTTP Gateway file listing
- [x] HTTP Gateway /ipfs route for files
- [x] HTTP Gateway /ipns route for names
- [ ] HTTP Gateway /ipfs POST writes
- [ ] HTTP Gateway /ipns PUT/POST writes
- [x] HTTP Gateway CORS and Headers support
- [x] HTTP Gateway Service (ipfs.io)
- [x] HTTP Gateway Service: solarnet vps infrastructure
- [x] HTTP Gateway Service: DNS architecture
- [x] HTTP Gateway Service DNS: deployed at ipfs.io
- [x] HTTP Gateway Service DNS: dnslink, CNAME, A support
- [ ] HTTP Gateway Service DNS: zone automation
- [ ] HTTP Gateway Service DNS: TLD redundancy
- [x] HTTP Gateway Service: nginx frontend
- [x] HTTP Gateway Service: backend fallbacks
- [x] HTTP Gateway Service: nginx blocklists (dmca)
- [ ] HTTP Gateway Service: rate limiting
- [x] HTTP Gateway Service Devops
- [x] HTTP Gateway Service Devops: containers
- [x] HTTP Gateway Service Devops: automated deployments
- [x] HTTP Gateway Service Devops: logging
- [x] HTTP Gateway Service Devops: event monitoring
- [x] HTTP Gateway Service Devops: status alerts
- [ ] HTTP Gateway Service Devops: status webpage (status.ipfs.io)
- [ ] HTTP Gateway Service Devops: chaos monkey
- [x] HTTP Gateway Self-hosting
- [x] HTTP Gateway Self-hosting: ipfs.io project website
- [x] HTTP Gateway Self-hosting: dist.ipfs.io
- [x] HTTP Gateway Self-hosting: blog.ipfs.io
- [x] HTTP Gateway Self-hosting: refs.ipfs.io
### IPFS Distributions
IPFS Distributions is the distribution model for IPFS Project programs. This means a repository of pages, source, binaries, and links for all programs officially distributed by the project.
- [x] IPFS Distributions: architecture
- [ ] IPFS Distributions: security
- [x] IPFS Distributions: TLS cert for HTTP site
- [ ] IPFS Distributions: code signing
- [x] IPFS Distributions: code signing source
- [x] IPFS Distributions: code signing protocol
- [x] IPFS Distributions: code signing team yubikeys
- [x] IPFS Distributions: website
- [x] IPFS Distributions: website design
- [x] IPFS Distributions: website landing page
- [x] IPFS Distributions: website program listings
- [x] IPFS Distributions: website domain (dist.ipfs.io)
- [ ] IPFS Distributions: website localization
- [x] IPFS Distributions: tools
- [x] IPFS Distributions: go-ipfs
- [x] IPFS Distributions: ipfs-update
- [x] IPFS Distributions: ipget
- [x] IPFS Distributions: fs-repo-migrations
- [x] IPFS Distributions: gx, gx-go
- [ ] IPFS Distributions: station
- [ ] IPFS Distributions: webui
### Security
- [ ] Create a bug bounty program for IPFS
- [ ] Have IPFS go and js implementations be fully Audited
- [ ] Create a Security Working Group
- [ ] Create a responsible disclosure program
### IPFS Blog and Newsletter
In order to keep the community updated, we run a blog. This blog is distributed through IPFS itself, and through an email newsletter.
- [x] ipfs blog
- [x] blog design
- [x] distribute through ipfs
- [x] blog.ipfs.io domain
- [ ] use POST datastructure
- [x] weekly/newsletter
- [x] establish newsletter process
- [x] highlight contributions and contributors
- [x] post to the blog
- [x] email subscription
- [x] use tinyletter
- [x] post weekly
- [ ] post blog

Binary file not shown.

Before

Width:  |  Height:  |  Size: 606 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

@ -1,6 +1,7 @@
# papers
# This file has moved!
These papers have moved to: https://github.com/ipfs/papers
For papers on IPFS, please see the following:
- For academic papers on IPFS, visit the [ipfs/papers](https://github.com/ipfs/papers) repo.
- For papers that you can read to understand IPFS and its underlying technologies, check out the ["Further Reading"](https://docs-beta.ipfs.io/concepts/further-reading/academic-papers) section of the [IPFS docs site](https://docs-beta.ipfs.io).
Older versions of the papers are still hosted here to avoid breaking links,
but please update links and refer to the https://github.com/ipfs/papers repo for the most up-to-date versions.
Some older versions of papers are still hosted here to avoid breaking links — but please update links and refer to the items above for new and updated content.