├── img ├── ipfs-talk.png └── ipfs-alpha-video.png ├── papers ├── ipfs-cap2pfs │ ├── ipfs-p2p-file-system.pdf │ └── .gitignore └── README.md ├── project-directory.md ├── ISSUE_TEMPLATE.md ├── LICENSE ├── CONTRIBUTE.md ├── ENDEAVOURS-INDEX.md ├── README.md ├── ROADMAP-TO-1.0.0.md └── IMPLEMENTATION_STATUS.md /img/ipfs-talk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TarekJor/ipfs/master/img/ipfs-talk.png -------------------------------------------------------------------------------- /img/ipfs-alpha-video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TarekJor/ipfs/master/img/ipfs-alpha-video.png -------------------------------------------------------------------------------- /papers/ipfs-cap2pfs/ipfs-p2p-file-system.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TarekJor/ipfs/master/papers/ipfs-cap2pfs/ipfs-p2p-file-system.pdf -------------------------------------------------------------------------------- /papers/ipfs-cap2pfs/.gitignore: -------------------------------------------------------------------------------- 1 | gfs.pdf 2 | gfs.aux 3 | gfs.log 4 | texput.log 5 | ipfs.aux 6 | ipfs.log 7 | ipfs.pgf-plot.gnuplot 8 | ipfs.pgf-plot.table 9 | -------------------------------------------------------------------------------- /project-directory.md: -------------------------------------------------------------------------------- 1 | ### [Project Directory Moved](https://github.com/ipfs/ipfs#project-directory) 2 | 3 | The Project Directory has moved, [click here to go to it](https://github.com/ipfs/ipfs#project-directory). 4 | 5 | -------------------------------------------------------------------------------- /papers/README.md: -------------------------------------------------------------------------------- 1 | # papers 2 | 3 | These papers have moved to: https://github.com/ipfs/papers 4 | 5 | Older versions of the papers are still hosted here to avoid breaking links, 6 | but please update links and refer to the https://github.com/ipfs/papers repo for the most up-to-date versions. 7 | -------------------------------------------------------------------------------- /ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | PLEASE READ THE FOLLOWING BEFORE CREATING AN ISSUE 2 | 3 | This repo exists just to provide an overview of the entire ipfs project and 4 | ecosystem. If you are about to file an issue about a certain implementation of 5 | ipfs (for example, go-ipfs) Please instead file it in the appropriate location: 6 | 7 | For actionable issues pertaining to BUGS in GO-IPFS, create an issue over at: 8 | https://github.com/ipfs/go-ipfs/issues 9 | 10 | For SUPPORT issues with any ipfs implementation, go to: 11 | https://github.com/ipfs/support 12 | 13 | For QUESTIONS about ipfs in general, go to: 14 | https://github.com/ipfs/faq 15 | 16 | For anything else, please take a look at the project directory on this repos 17 | README.md to find the appropriate location for your issue. 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014-2016 Juan Batiz-Benet 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /CONTRIBUTE.md: -------------------------------------------------------------------------------- 1 | # Contributing to IPFS 2 | 3 | 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). 4 | 5 | ### Help with the design 6 | 7 | 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). 8 | 9 | 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). 10 | 11 | ### Help with the implementations 12 | 13 | Please contribute to the various [implementations](README.md#implementations) under development, or start another! 14 | 15 | 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. 16 | 17 | ### Help with spreading the word 18 | 19 | Please tweet, email, tell everyone about this. IPFS will succeed only if many people use it and build on it. 20 | 21 | ### Help in other ways 22 | 23 | [Email @jbenet directly](mailto:juan@ipfs.io?subject=Contributing to IPFS) if you'd like to help in other ways. 24 | -------------------------------------------------------------------------------- /ENDEAVOURS-INDEX.md: -------------------------------------------------------------------------------- 1 | IPFS Endeavours Index 2 | ===================== 3 | 4 | Our work around building and maintaining IPFS is broken up into numerous "endeavors", each of which has an assigned captain. This Roadmap indicates whether the endeavors are "Active", on the "Back Burner" or "Stale". You can use that to get a sense of where development efforts are currently focused. All of these endeavors are entirely open source. You can join in and contribute to any of the endeavors at any time. 5 | 6 | ## Active Endeavors 7 | 8 | "Active" endeavors are the endeavors for which we have allocated developer time this quarter. 9 | 10 | | Endeavor | Captain | Status | 11 | |----------------|----------------|--------| 12 | | js-ipfs | @diasdavid | Active | 13 | | go-ipfs | @whyrusleeping | Active | 14 | | multiformats | @diasdavid | Active | 15 | | libp2p | @diasdavid | Active | 16 | | IPLD | @nicola | Active | 17 | | ipfs-cluster | @hsanjuan | Active | 18 | | Infrastructure | @VictorBjelkholm | Active | 19 | | CI/CD | @VictorBjelkholm | Active | 20 | | gx | @whyrusleeping | Active | 21 | 22 | ## Endeavors on the Back Burner 23 | 24 | Endeavors on the "Back Burner" are getting less attention this quarter. 25 | 26 | | Endeavor | Captain | Status | 27 | |---|---|---| 28 | | | | 29 | 30 | ## Stale Endeavors 31 | 32 | Stale Endeavors are the ones that have fallen between the cracks. They need to be either revived, put on the back burner, or set free. 33 | 34 | **Key**: 💥 = fire, 🔥 = huge fire, 🎣 = opportunity we're missing 35 | 36 | | Endeavor | Captain | Target Status | Plan (link) | 37 | |---|---|---|---| 38 | |Specs 🔥| | | | 39 | |[Awesome API Documentation](https://github.com/ipfs/js-ipfs/issues/615#issuecomment-272160177) (js) 🔥| | | | 40 | |Documentation (general) 🔥| | | | 41 | |decentralized web primer| @flyingzumwalt | | | 42 | |WebUI 💥| | | | 43 | |Station 🎣| | | | 44 | |http-api spec| | | | 45 | |multiformats| | | | 46 | |test lab| | | | 47 | |packet-switching| @lgierth | | | 48 | |npm-on-ipfs 🎣| | | | 49 | |gateway 💥| @lgierth | | | 50 | |xtp| | | | 51 | |dist.ipfs.io 💥| | | to-be merged with CI/CD | 52 | |core-api| | | | 53 | |project-repos| | | | 54 | |blog 💥| | | | 55 | |ethereum on libp2p| | | | 56 | |paperhub?| | | | 57 | |newsletter 💥| | | | 58 | |multikey| | | to-be merged with multiformats | 59 | |ipfs-update 💥| | | to-be merged with CI/CD | 60 | |starlog| | | dead | 61 | |ipsend 🎣| | | | 62 | |ipget| | | | 63 | |maps on IPFS| | | | 64 | |examples (on website) 💥| | | to-be merged with documentation | 65 | |ipfs on mobile 🎣| | | | 66 | | archives repo | | | | 67 | 68 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # IPFS - The Permanent Web 2 | 3 | [![ipfs](https://img.shields.io/badge/irc-%23ipfs-brightgreen.svg)](https://webchat.freenode.net/?channels=ipfs) 4 | [![Changelog #204](https://img.shields.io/badge/changelog-%23204-lightgrey.svg)](https://changelog.com/204) 5 | 6 | Welcome to IPFS! Why not [watch a video demo](https://www.youtube.com/watch?v=8CMxDNuuAiQ) to get started? Please post questions and ideas at http://discuss.ipfs.io 7 | 8 | ## Table of Contents 9 | 10 | - [Overview](#overview) 11 | - [Quick Summary](#quick-summary) 12 | - [How IPFS Works](#how-ipfs-works) 13 | - [IPFS Papers](#ipfs-papers) 14 | - [IPFS Talks](#ipfs-talks) 15 | - [More About IPFS](#more-about-ipfs) 16 | - [Current State of IPFS](#current-state-of-ipfs) 17 | - [Alpha Distribution](#alpha-distribution) 18 | - [Security Issues and Disclosures](#security-issues-and-disclosures) 19 | - [Project and Community](#project-and-community) 20 | - [Project Links](#project-links) 21 | - [Protocol Implementations](#protocol-implementations) 22 | - [API Client Libraries](#api-client-libraries) 23 | - [Project Directory](#project-directory) 24 | - [Other Community Resources](#other-community-resources) 25 | - [License](#license) 26 | 27 | ## Overview 28 | 29 | IPFS ([the InterPlanetary File System](https://github.com/ipfs/faq/issues/76)) 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. 30 | 31 | 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). 32 | 33 | 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. 34 | 35 | [![Alpha Demo](img/ipfs-alpha-video.png)](https://www.youtube.com/watch?v=8CMxDNuuAiQ) 36 | 37 | Want to see more? Check out Juan Benet's talk at Sourcegraph - [IPFS: The Permanent Web](https://www.youtube.com/watch?v=Fa4pckodM9g). 38 | 39 | ### Quick Summary 40 | 41 | IPFS is a protocol: 42 | - defines a content-addressed file system 43 | - coordinates content delivery 44 | - combines Kademlia + BitTorrent + Git 45 | 46 | IPFS is a filesystem: 47 | - has directories and files 48 | - mountable filesystem (via FUSE) 49 | 50 | IPFS is a web: 51 | - can be used to view documents like the web 52 | - files accessible via HTTP at `http://ipfs.io/` 53 | - browsers or extensions can learn to use the `ipfs:/` or `fs:/` URI schemes directly 54 | - hash-addressed content guarantees authenticity 55 | 56 | IPFS is modular: 57 | - connection layer over any network protocol 58 | - routing layer 59 | - uses a routing layer DHT (kademlia/coral) 60 | - uses a path-based naming service 61 | - uses bittorrent-inspired block exchange 62 | 63 | IPFS uses crypto: 64 | - cryptographic-hash content addressing 65 | - block-level deduplication 66 | - file integrity + versioning 67 | - filesystem-level encryption + signing support 68 | 69 | IPFS is p2p: 70 | - worldwide peer-to-peer file transfers 71 | - completely decentralized architecture 72 | - **no** central point of failure 73 | 74 | IPFS is a cdn: 75 | - add a file to the filesystem locally, and it's now available to the world 76 | - caching-friendly (content-hash naming) 77 | - bittorrent-based bandwidth distribution 78 | 79 | IPFS has a name service: 80 | - IPNS, an SFS inspired name system 81 | - global namespace based on PKI 82 | - serves to build trust chains 83 | - compatible with other NSes 84 | - can map DNS, .onion, .bit, etc to IPNS 85 | 86 | ## How IPFS Works 87 | 88 | To learn more about how IPFS works take a look at the [Papers](#ipfs-papers) or [Talks](#ipfs-talks). You can also explore the [Specs](https://github.com/ipfs/specs) in writing. 89 | 90 | ### IPFS Papers 91 | 92 | - [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) 93 | - [Specifications](https://github.com/ipfs/specs) (work in progress) 94 | - see also: https://github.com/ipfs/papers 95 | 96 | ### IPFS Talks 97 | 98 | This is a short selection of introductory talks. In time we will collect more here. 99 | 100 | - 2014-07-21 - [IPFS: The Permanent Web](https://www.youtube.com/watch?v=Fa4pckodM9g) at [Sourcegraph](https://sourcegraph.com/) (first public talk) 101 | - 2015-02-20 - [IPFS Alpha Demo](https://www.youtube.com/watch?v=8CMxDNuuAiQ) 102 | - 2015-06-03 - [IPFS Hands on Introduction](https://www.youtube.com/watch?v=h73bd9b5pPA) at Ethereum SV Meetup 103 | - **2015-10-22 - [IPFS: The Distributed, Permanent Web](https://www.youtube.com/watch?v=HUVmypx9HGI) at Stanford Seminar (best overview of project)** 104 | - 2016-09-14 - [Distributed Apps with IPFS](https://www.youtube.com/watch?v=jONZtXMu03w) 105 | - 2016-10-22 - [The Decentralized Web, IPFS and Filecoin](https://www.youtube.com/watch?v=cU-n_m-snxQ) 106 | 107 | 108 | ## More About IPFS 109 | 110 | 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. 111 | 112 | ### Current State of IPFS 113 | 114 | **IPFS is a work in progress!** 115 | 116 | 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. 117 | 118 | 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)). 119 | 120 | ### Alpha Distribution 121 | 122 | 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. 123 | 124 | - [Install IPFS Alpha Distribution](http://ipfs.io/docs/install) 125 | - [Setup IPFS and Getting Started](http://ipfs.io/docs/getting-started/) 126 | - [Going Online](http://ipfs.io/docs/getting-started/#going-online) 127 | - [More Examples](https://ipfs.io/docs/examples/) 128 | 129 | For an in-depth tutorial, see a [Hands on Introduction](https://www.youtube.com/watch?v=h73bd9b5pPA). 130 | 131 | ### Security Issues and Disclosures 132 | 133 | 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! 134 | 135 | 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. 136 | 137 | If the issue is a protocol weakness that cannot be immediately exploited or something not yet deployed, just discuss it openly. 138 | 139 | ## Project and Community 140 | 141 | [![](https://cdn.rawgit.com/jbenet/contribute-ipfs-gif/master/img/contribute.gif)](https://github.com/ipfs/community/blob/master/contributing.md) 142 | 143 | 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: 144 | 145 | - [IPFS Community Forums for Discussion and Support](https://discuss.ipfs.io) 146 | - [Sprints and Project Management](https://github.com/ipfs/pm) 147 | - [Contributing Guidelines](https://github.com/ipfs/community/blob/master/contributing.md) 148 | 149 | You can also find our community on: 150 | 151 | - IRC: [#ipfs on chat.freenode.net](http://chat.ipfs.io) for live help and some dev discussions ([Logs](https://botbot.me/freenode/ipfs/)) 152 | - Google Group: [ipfs-users@groups.google.com](https://groups.google.com/forum/#!forum/ipfs-users) (low traffic) 153 | - Twitter: [@IPFSbot](https://twitter.com/ipfsbot) for some news. 154 | 155 | ## Project Links 156 | 157 | 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. 158 | 159 | For a community-curated lists of awesome projects using IPFS, check out [awesome-ipfs](https://github.com/ipfs/awesome-ipfs)! 160 | 161 | ### Protocol Implementations 162 | 163 | | Language | Project | Completeness | 164 | |----------|---------|--------------| 165 | | Go | https://github.com/ipfs/go-ipfs | **reference** | 166 | | JavaScript | https://github.com/ipfs/js-ipfs | incomplete | 167 | | Python | https://github.com/ipfs/py-ipfs | starting | 168 | | C | https://github.com/Agorise/c-ipfs | starting | 169 | 170 | 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. 171 | 172 | ### API Client Libraries 173 | 174 | | Language | Client Library | Completeness | 175 | |-------------|----------------|--------------| 176 | | Go | https://github.com/ipfs/go-ipfs-api | | 177 | | Java | https://github.com/ipfs/java-ipfs-api | | 178 | | JavaScript | https://github.com/ipfs/js-ipfs-api | | 179 | | Python | https://github.com/ipfs/py-ipfs-api | | 180 | | Scala | https://github.com/ipfs/scala-ipfs-api | | 181 | | Haskell | https://github.com/davidar/hs-ipfs-api | | 182 | | Swift | https://github.com/ipfs/swift-ipfs-api | | 183 | | CommonLisp | https://github.com/WeMeetAgain/cl-ipfs-api | | 184 | | Rust | https://github.com/gkbrk/rust-ipfs-api | | 185 | | | https://github.com/rmnoff/rust-ipfs-api | | 186 | | | https://github.com/rschulman/rust-ipfs-api | | 187 | | Ruby | https://github.com/Fryie/ipfs-ruby | | 188 | | Swift | https://github.com/NeoTeo/ipfs-osx-service | | 189 | | PHP | https://github.com/cloutier/php-ipfs-api | | 190 | | | https://github.com/digitalkaoz/php-ipfs-api | | 191 | | C# | https://github.com/TrekDev/net-ipfs-api | | 192 | | | https://github.com/richardschneider/net-ipfs-api | | 193 | | C++ | https://github.com/vasild/cpp-ipfs-api | | 194 | | Julia | contact: [@rened](https://github.com/rened) | 0% | 195 | | Lua | contact: [@seclorum](https://github.com/seclorum) | 0% | 196 | | Erlang | https://github.com/hendry19901990/erlang-ipfs-api | | 197 | | Objective C | ! | 0% | 198 | 199 | Please help by contributing to one of the above client libraries. If you would like to create another, please see the [IPFS API 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! 200 | 201 | ### Project Directory 202 | 203 | 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. 204 | 205 | We have a status board that checks all IPFS repositories for CI, Readmes, test coverage, and so on, here: http://project-repos.ipfs.io/ 206 | 207 | #### Project Oranization 208 | 209 | - [ipfs](https://github.com/ipfs/ipfs) - Master repo, intro, and news. 210 | - [discourse](https://discuss.ipfs.io) - Community discussions and support forum. 211 | - [pm](https://github.com/ipfs/pm) - Community Sprints and Project Management. 212 | 213 | #### Get Help! 214 | 215 | The best place to seek help is on [the IPFS community forum](https://discuss.ipfs.io) or on IRC (freenode) in the #ipfs channel. 216 | 217 | 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. 218 | 219 | #### Documents 220 | 221 | - [papers](https://github.com/ipfs/papers) - Academic papers on IPFS. 222 | - [specs](https://github.com/ipfs/specs) - Specifications on the IPFS protocol. 223 | - [notes](https://github.com/ipfs/notes) - Various relevant notes and discussions (that do not fit elsewhere). 224 | - [reading-list](https://github.com/ipfs/reading-list) - Papers to read to understand IPFS. 225 | 226 | #### Discussions 227 | 228 | - [apps](https://github.com/ipfs/apps) - Coordinating writing apps on top of ipfs. 229 | - [archives](https://github.com/ipfs/archives) - Coordinating archival efforts with IPFS. 230 | 231 | #### Specification Discussions 232 | 233 | - [archive-format](https://github.com/ipfs/archive-format) - A DAG Archive format. 234 | - [research-bitswap](https://github.com/ipfs/research-bitswap) - Repo to discuss Bitswap research 235 | - [bitswap-ml](https://github.com/ipfs/bitswap-ml) - Bitswap and Machine Learning. 236 | - [research-crdt](https://github.com/ipfs/research-crdt) - Repo to discuss crdt research 237 | - [research-pubsub](https://github.com/libp2p/research-pubsub) - Repo to discuss pubsub research 238 | - [research-p2p-video](https://github.com/libp2p/research-p2p-video) - Repo to discuss pubsub research 239 | - [blockchain-data](https://github.com/ipfs/blockchain-data) - Using IPFS for storing data for Blockchain apps. 240 | - [POST](https://github.com/ipfs/POST) - A datastructure for human communication. 241 | 242 | #### Protocol Implementations 243 | 244 | - [go-ipfs](https://github.com/ipfs/go-ipfs) - Implementation in Go. 245 | - [js-ipfs](https://github.com/ipfs/js-ipfs) - Implementation in Javascript. 246 | - [py-ipfs](https://github.com/ipfs/py-ipfs) - Implementation in Python. 247 | 248 | #### API Client Implementations 249 | 250 | - [http-api-spec](https://github.com/ipfs/http-api-spec) - Apiary IPFS HTTP API description http://docs.ipfs.apiary.io 251 | - [js-ipfs-api](https://github.com/ipfs/js-ipfs-api) - Implementation in Javascript. 252 | - [java-ipfs-api](https://github.com/ipfs/java-ipfs-api) - Implementation in Java. 253 | - [go-ipfs-api](https://github.com/ipfs/go-ipfs-api) - Implementation in Go. 254 | - [python-ipfs-api](https://github.com/ipfs/python-ipfs-api) - Implementation in Python. 255 | - [py-ipfs-api](https://github.com/ipfs/py-ipfs-api) - A python client library for the IPFS API 256 | - [scala-ipfs-api](https://github.com/ipfs/scala-ipfs-api) - Implementation in Scala. 257 | - [swift-ipfs-api](https://github.com/ipfs/swift-ipfs-api) - Implementation in Swift. 258 | - [net-ipfs-api](https://github.com/richardschneider/net-ipfs-api) - Implementation in C#. 259 | 260 | #### IPFS GUIs 261 | 262 | - [station](https://github.com/ipfs/station) - An IPFS Desktop app. 263 | - [webui](https://github.com/ipfs/webui) - The IPFS WebUI app. 264 | 265 | #### Apps on IPFS 266 | 267 | - [astralboot](https://github.com/ipfs/astralboot) - Low level boot server that deploys directly out of IPFS (TFTP, PXE Boot). 268 | - [ipfs-web-app](https://github.com/ipfs/ipfs-web-app) - IPFS web app interfaces. 269 | - [ipget](https://github.com/ipfs/ipget) - wget for IPFS: retrieve files over IPFS and save them locally. 270 | - [starlog](https://github.com/ipfs/starlog) - Blog posts in IPFS. 271 | - [container-demos](https://github.com/ipfs/container-demos) - Demos on how to boot docker images and VMs from IPFS. 272 | - [ipfs-geoip](https://github.com/ipfs/ipfs-geoip) - Geoip over ipfs. 273 | - [npm on ipfs](https://github.com/diasdavid/npm-on-ipfs) - npm on IPFS. 274 | 275 | #### Community Infrastructure 276 | 277 | - [blog](https://github.com/ipfs/blog) - The IPFS Blog 278 | - [community forum](https://discuss.ipfs.io) 279 | - [distributions](https://github.com/ipfs/distributions) - Scripts to build the /install html page. 280 | - [infrastructure](https://github.com/ipfs/infrastructure) - Tools and systems for the community. 281 | - [newsletter](https://github.com/ipfs/newsletter) - Prepare and store IPFS Newsletter roundups 282 | - [ops-requests](https://github.com/ipfs/ops-requests) - Requests about infrastructure operations 283 | - [project-repos](https://github.com/ipfs/project-repos) CI status and other health metrics 284 | - [website](https://github.com/ipfs/website) - The source to the IPFS community website at http://ipfs.io. 285 | 286 | #### Ref Lists 287 | 288 | - [refs](https://github.com/ipfs/refs) - Tools for publishing lists of IPFS ref heads. 289 | - [refs-denylists-dmca](https://github.com/ipfs/refs-denylists-dmca) - DMCA takedown notices for the IPFS Public Gateway. 290 | - [refs-solarnet-storage](https://github.com/ipfs/refs-solarnet-storage) - Inventory of content archived on Solarnet storage hosts. 291 | 292 | ### Other Community Resources 293 | 294 | - [examples](https://github.com/ipfs/examples) - Examples on how to use go-ipfs. 295 | - [awesome-ipfs](https://github.com/ipfs/awesome-ipfs) - Useful resources for using IPFS and building things on top of it. 296 | - [ipfs-readme-standard](https://github.com/RichardLitt/standard-readme) - Standardize all IPFS Readme.md's and other markdown files. 297 | - [ipld-examples](https://github.com/ipfs/ipld-examples) - Datastructure examples to use with IPLD, the new data format for IPFS. 298 | - [logo](https://github.com/ipfs/logo) - The logo for IPFS. 299 | - [translation project](https://www.transifex.com/ipfs/ipfs/) - Crowdsourced translation of IPFS WebUI and the ipfs.io website. 300 | 301 | #### IPFS Meetups 302 | 303 | - [ipfs/lisbon](https://www.meetup.com/ipfs-lisbon-meetup/) - The IPFS meetup in Lisbon. 304 | - [ipfs/london](https://www.meetup.com/IPFS-London-Meetup/) - The IPFS meetup in London. 305 | - More repos coming here. Check [the community discussions](https://github.com/ipfs/community/issues) for other meetups. (There's many now!) 306 | 307 | 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). 308 | 309 | #### Tools 310 | 311 | Installing 312 | 313 | - [install-go-ipfs](https://github.com/ipfs/install-go-ipfs) - Install go-ipfs shell script. 314 | - [install-js-ipfs](https://github.com/ipfs/js-ipfs#install) - Install js-ipfs through npm or a script tag. 315 | - [ipfs-update](https://github.com/ipfs/ipfs-update) - An updater tool for IPFS. 316 | - [fs-repo-migrations](https://github.com/ipfs/fs-repo-migrations) - These are migrations for [IPFS fs-repo](https://github.com/ipfs/specs/blob/repo/fs-repo) versions. 317 | - [npm-go-ipfs](https://github.com/ipfs/npm-go-ipfs) - Install go-ipfs from npm. 318 | 319 | Other 320 | 321 | - [connections-globe](https://github.com/ipfs/connections-globe) - An interactive globe to view all your IPFS peers. 322 | - [dataviz](https://github.com/ipfs/dataviz) - IPFS data visualizations. 323 | - [dir-index-html](https://github.com/ipfs/dir-index-html) - Directory listing html. 324 | - [dnslink-deploy](https://github.com/ipfs/dnslink-deploy) - Automatically set DNS records on Digital Ocean. 325 | - [file-browser](https://github.com/ipfs/file-browser) - Generic IPFS file browser UI 326 | - [fs-stress-test](https://github.com/ipfs/fs-stress-test) - Stress testing IPFS filesystem capabilities. 327 | - [js-ipfsd-ctl](https://github.com/ipfs/js-ipfsd-ctl) - Control IPFS daemons from JavaScript. 328 | - [ipfs-hubot](https://github.com/ipfs/ipfs-hubot) - Hubot for IPFS uses. 329 | - [ipfs-blob-store](https://github.com/ipfs/ipfs-blob-store) - A place to buy blobs. 330 | 331 | #### Forks 332 | 333 | - [go-datastore (fork)](https://github.com/ipfs/go-datastore) - key-value datastore interfaces 334 | - [golang-build (fork)](https://github.com/ipfs/golang-build) - Continuous build and release infrastructure 335 | - [pinbot-irc (fork)](https://github.com/ipfs/pinbot-irc) - a bot for the ipfs irc channel that pins things (among other menial tasks) 336 | 337 | #### Implementation Submodules 338 | 339 | Many more exist, but we will endeavor to find them and add them here. 340 | 341 | - [go-blocks](https://github.com/ipfs/go-blocks) - Deprecated, continued within go-ipfs 342 | - [go-commands](https://github.com/ipfs/go-commands) - Deprecated, continued within go-ipfs 343 | - [go-ipfs-util](https://github.com/ipfs/go-ipfs-util) - Common utilities used by go-ipfs and other related go packages. 344 | - [go-ipld](https://github.com/ipfs/go-ipld) - Implementation of [the IPLD spec](https://github.com/ipfs/specs/tree/master/merkledag/ipld.md) in Go. 345 | - [go-iprs](https://github.com/ipfs/go-iprs) - Go-ipfs records. 346 | - [go-libp2p](https://github.com/libp2p/go-libp2p) - libp2p is a networking stack and library modularized out of The IPFS Project, and bundled separately for other tools to use. 347 | - [go-log](https://github.com/ipfs/go-log) - A logging library used by go-ipfs. 348 | - [js-ipfs](https://github.com/ipfs/js-ipfs) - IPFS on the Browser. 349 | - [js-ipfs-bitswap](https://github.com/ipfs/js-ipfs-bitswap) - JavaScript implementation of the Bitswap 'data exchange' protocol used by IPFS 350 | - [js-ipfs-blocks](https://github.com/ipfs/js-ipfs-block-service) - JavaScript Implementation of Block and BlockService 351 | - [js-ipfs-data-importing](https://github.com/ipfs/js-ipfs-unixfs-engine) - JavaScript implementation of the layout and chunking mechanisms used by IPFS 352 | - [js-ipfs-path](https://github.com/ipfs/js-ipfs-path) - Javascript helper functions for IPFS path handling. 353 | - [js-ipfs-repo](https://github.com/ipfs/js-ipfs-repo) - Implementation of [the IPFS repo spec](https://github.com/ipfs/specs/tree/master/repo) in Javascript. 354 | - [js-ipfs-unixfs](https://github.com/ipfs/js-ipfs-unixfs) - JavaScript implementation of IPFS' unixfs (a Unix FileSystem representation on top of a MerkleDAG). 355 | - [js-libp2p](https://github.com/libp2p/js-libp2p) - libp2p implementation in JavaScript. 356 | 357 | ## License 358 | 359 | MIT 360 | -------------------------------------------------------------------------------- /ROADMAP-TO-1.0.0.md: -------------------------------------------------------------------------------- 1 | # Roadmap to IPFS 1.0.0 2 | 3 | ## Table of Contents 4 | 5 | - [Description](#description) 6 | - [Milestones](#milestones) 7 | 8 | ## Description 9 | 10 | In order for IPFS to reach its maturity state, going from Alpha, to Beta and to v1.0.0, the project will need: 11 | 12 | - For its specifications to be 100% complete. This includes the IPFS, libp2p, multiformats and IPLD specs. 13 | - Compliance tests for the specification. 14 | - The golang and JavaScript implementations to be 100% complete and spec compliant. 15 | - A third party implementation of IPFS, fully interopable with the go and JavaScript versions. 16 | - A release plan and cycle, including a strategy to support specific key releases for longer periods of time (i.e LTS releases vs stable) 17 | 18 | ## Milestones 19 | 20 | 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. 21 | 22 | ### Sustainability and Governance 23 | 24 | These are some of the milestones to hit to create a active, sustainable, inclusive and participatory governance model for IPFS. 25 | 26 | - [x] Organize IPFS All Hands. 27 | - [ ] Have IPFS lead by a Steering Working Group. 28 | - [ ] Define several Working Groups focused on different parts of the project (e.g Community Engagement, Documentation and Education, IPFS in Web Browsers). 29 | - [ ] Define a release plan and long term support plan. 30 | 31 | ### IPFS Use Cases 32 | 33 | These are some use case milestones to drive development. 34 | 35 | - [x] Support for file distribution 36 | - [x] Support for personal file storage, backups, and distribution 37 | - [x] Support for basic p2p file distribution 38 | - [x] Support for fast local area network file distribution 39 | - [x] Support for immutable, permanent links to files, websites, data 40 | - [x] Support for mutable links to files, websites, data 41 | - [x] Support for websites and web applications 42 | - [x] Support for static web applications 43 | - [x] Support for API based web applications 44 | - [x] Support for fully dynamic websites entirely on IPFS (eg chat) 45 | - [x] Support for collaborative seeding/pinning 46 | - [x] basic support for ipfs ref pinning 47 | - [ ] Cloud ipfs frontend services (cube) 48 | - [ ] clusters of ipfs nodes (RAID/RAIN) 49 | - [ ] byzantine clusters (BA) 50 | - [x] Support for browsers 51 | - [x] js-ipfs-api client inside a tab 52 | - [x] js-ipfs full node inside a tab 53 | - [x] browser extension gateway redirects 54 | - [ ] browser extension full node 55 | - [ ] impl native inside browsers 56 | - [x] Support for versioning and archival 57 | - [x] archival of files 58 | - [x] archival of data and databases 59 | - [ ] commit based versioning 60 | - [x] Support other tools or applications via APIs 61 | - [x] Support for commandline API usage 62 | - [x] Support for HTTP API usage 63 | - [ ] Support for unix sockets RPC API usage 64 | - [x] Support for embedded, programmatic API usage 65 | - [x] Support for HTTP Gateway 66 | 67 | ### Performance Milestones 68 | 69 | These are some basic performance milestones to hit. 70 | 71 | - [x] Megabytes / Slow 72 | - [x] Good enough for small files - MB 73 | - [x] Good enough for static websites - MB 74 | - [x] Good enough for distributing webapp code/assets - MB 75 | - [x] Good enough for images - MB 76 | - [x] Gigabytes 77 | - [x] Good enough for personal documents - GB 78 | - [x] Good enough to stream video on the web - GB 79 | - [x] Good enough for small scientific datasets - GB 80 | - [x] Good enough for distributing webapp user data - GB 81 | - [ ] Terabytes 82 | - [x] Good enough for image collections - TB 83 | - [x] Good enough for small video collections - TB 84 | - [ ] Good enough for medium scientific datasets - TB 85 | - [x] Good enough as a package manager (gx) - TB 86 | - [x] Good enough as a package manager backup (npm-on-ipfs) - TB 87 | - [ ] Good enough as a package manager replacement (npm-on-ipfs) - TB 88 | - [x] Good enough to distribute small databases - TB 89 | - [ ] Good enough for large (single) archives - TB 90 | - [ ] Petabytes 91 | - [ ] Good enough for large video collections - PB 92 | - [ ] Good enough for large scientific datasets - PB 93 | - [ ] Good enough for Backup Archival - TB/PB 94 | - [ ] Good enough to distribute large databases - PB 95 | - [ ] Exabytes 96 | - [ ] Good enough for massive archives - EB 97 | - [ ] Good enough for the entire web - EB 98 | - [ ] Good enough for top10 websites - EB 99 | 100 | ### Developer Libraries 101 | 102 | 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. 103 | 104 | - [x] file importers for basic files 105 | - [x] custom file importer tooling 106 | - [x] ipfs node api bindings 107 | - [x] ipfs api bindings in Go 108 | - [x] ipfs api bindings in JS 109 | - [x] ipfs api bindings in Java 110 | - [x] ipfs api bindings in Python 111 | - [x] ipfs api bindings in PHP 112 | - [x] ipfs api bindings in Ruby 113 | - [ ] ipfs api bindings in Scala 114 | - [ ] ipfs api bindings in Rust 115 | - [ ] ipfs api bindings in Haskell 116 | - [x] ipfs api bindings in C/C++ 117 | - [ ] ipfs api bindings in Erlang 118 | - [x] full ipfs node implementations 119 | - [x] go-ipfs - implementation in Go 120 | - [ ] js-ipfs - implementation in JS 121 | - [x] developer libs for cli tools 122 | - [ ] developer libs for desktop apps 123 | - [x] developer libs for webapps 124 | - [x] js-ipfs-api - js api bindings 125 | - [ ] developer libs for mobile apps 126 | - [ ] developer libs for iOS 127 | - [ ] developer libs for Android 128 | - [x] developer libs for node.js apps 129 | - [x] go-ipfs-dep - module to install go-ipfs 130 | - [x] ipfsd-ctl - module to control an ipfs daemon 131 | - [x] js-ipfs-api - js api bindings 132 | - [ ] developer libs for dynamic webapps (in progress) 133 | - [x] ipfs-log (CRDT) 134 | - [ ] other "CRDTs on IPFS" libs 135 | - [x] orbit-db - key-value store and event log 136 | - [ ] developer libs for crypto capabilities 137 | - [ ] typical sharing models over ipfs 138 | - [ ] developer libs for social networks 139 | - [ ] POST datastructure 140 | - [ ] decentralized identity 141 | 142 | ### Security Milestones 143 | 144 | - [ ] Network security 145 | - [x] upgradable transport encryption (multistream) 146 | - [x] transport encryption: secio (ECDHE) 147 | - [ ] transport encryption: TLS 1.3 (mainstream crypto) 148 | - [ ] transport encryption: CurveCP or MinimaLT (djb crypto) 149 | - [ ] Content Security 150 | - [x] content security: IPLD hash links (authenticated content) 151 | - [ ] content security: Keychain signed objects 152 | - [ ] content security: native content encryption 153 | - [ ] content security: native crypto capabilities 154 | - [ ] content security: audit 155 | - [ ] Anonymity 156 | - [ ] transport anonymity: tor support 157 | - [ ] transport anonymity: i2p support 158 | - [ ] ship anonymity focused distribution (tor, i2p, no leaking info) 159 | - [ ] peer and content routing anonymity 160 | - [ ] anonymity: audit 161 | - [ ] Anticensorship 162 | - [x] Anticensorship: decentralized, peering content distribution 163 | - [x] Anticensorship: access based re-distribution 164 | - [ ] Anticensorship: incentivized distribution 165 | - [ ] Anticensorship: PKI distribution 166 | - [ ] Anticensorship: resilience to powerful sybil attacks on routing 167 | - [ ] Anticensorship: HTTP TLS transport emulation 168 | - [ ] Auditing 169 | - [ ] Audit: full protocol fuzzer tests 170 | - [ ] Audit: test with state of the art exploit test suites 171 | - [ ] Audit: p2p scalability researcher audits 172 | - [ ] Audit: 3x independent professional security audits of full protocol 173 | - [ ] Audit: 3x independent professional security audits of implementations 174 | 175 | ### Network Scalability 176 | 177 | The scalability of the IPFS protocol depends on careful design of algoriths 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. 178 | 179 | Please bear in mind that we are currently still iplementing 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)`). 180 | 181 | Our scalability observations are divided into simulations, real network tests, and production networks. 182 | 183 | - [x] Simulations 184 | - [x] Scalability to 1,000s of nodes 185 | - [x] Scalability to 10,000s of nodes 186 | - [x] Scalability to 100,000s of nodes 187 | - [ ] Scalability to 1,000,000s of nodes 188 | - [ ] Scalability to 1,000,000,000s of nodes 189 | - [x] Real network tests 190 | - [x] Scalability to 1,000s of nodes 191 | - [x] Scalability to 10,000s of nodes 192 | - [ ] Scalability to 100,000s of nodes 193 | - [ ] Scalability to 1,000,000s of nodes 194 | - [ ] Scalability to 1,000,000,000s of nodes 195 | - [x] Production networks 196 | - [x] Scalability to 1,000s of nodes 197 | - [x] Scalability to 10,000s of nodes 198 | - [ ] Scalability to 100,000s of nodes 199 | - [ ] Scalability to 1,000,000s of nodes 200 | - [ ] Scalability to 1,000,000,000s of nodes 201 | 202 | ### Polish level 203 | 204 | 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. 205 | 206 | - [x] Polish level: alpha - individuals innovators 207 | - [x] Polish level: alpha - production for early adopters 208 | - [ ] Polish level: beta - production for small orgs (in progress) 209 | - [ ] Polish level: beta - production for large orgs 210 | - [ ] Polish level: 1.0 - production for all 211 | 212 | 213 | ### Multiformats 214 | 215 | 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). 216 | 217 | - [x] multiaddr: protocol design 218 | - [x] multiaddr: impl in Go 219 | - [x] multiaddr: impl in JS 220 | - [x] multiaddr: impl in Java 221 | - [x] multiaddr: impl in Haskell 222 | - [x] multiaddr: impl in Python 223 | - [x] multiaddr: impl in Rust 224 | - [x] multihash: protocol spec 225 | - [x] multihash: impl in Go 226 | - [x] multihash: impl in JS 227 | - [x] multihash: impl in Scala 228 | - [x] multihash: impl in Java 229 | - [x] multihash: impl in Clojure 230 | - [x] multihash: impl in Rust 231 | - [x] multihash: impl in Haskell 232 | - [x] multihash: impl in Python 233 | - [x] multihash: impl in Elixir 234 | - [x] multihash: impl in Swift 235 | - [x] multihash: impl in Ruby 236 | - [x] multicodec: protocol spec 237 | - [x] multicodec: impl in Go 238 | - [x] multicodec: impl in JS 239 | - [x] multistream: protocol spec 240 | - [x] multistream: impl in Go 241 | - [x] multistream: impl in JS 242 | - [x] multibase / baseN: protocol spec 243 | - [x] multibase / baseN: impl in Go 244 | - [x] multibase / baseN: impl in JS 245 | 246 | 247 | ### libp2p Protocols 248 | 249 | 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 250 | 251 | - [x] libp2p architecture 252 | - [x] libp2p impl in Go 253 | - [x] libp2p impl in JS 254 | - [x] Identify Protocol interfaces 255 | - [x] Identify: impl in Go 256 | - [x] Identify: impl in JS 257 | - [x] Transport Protocol interfaces 258 | - [x] Transport protocol: TCP in Go 259 | - [x] Transport protocol: TCP in JS node 260 | - [x] Transport protocol: UTP in Go 261 | - [x] Transport protocol: UTP in JS node 262 | - [x] Transport protocol: UDT in Go 263 | - [ ] Transport protocol: UDT in JS node 264 | - [x] Transport protocol: WebSockets in Go 265 | - [x] Transport protocol: WebSockets in JS node 266 | - [x] Transport protocol: WebSockets in JS browser 267 | - [ ] Transport protocol: WebRTC in Go 268 | - [x] Transport protocol: WebRTC in JS node 269 | - [x] Transport protocol: WebRTC in JS browser 270 | - [ ] Transport protocol: SCTP in Go 271 | - [ ] Transport protocol: SCTP in JS node 272 | - [ ] Transport protocol: tor in Go 273 | - [ ] Transport protocol: tor in JS node 274 | - [ ] Transport protocol: i2p in Go 275 | - [ ] Transport protocol: i2p in JS node 276 | - [ ] Transport protocol: cjdns in Go 277 | - [ ] Transport protocol: cjdns in JS node 278 | - [ ] Transport protocol: Bluetooth LE in Go 279 | - [ ] Transport protocol: Bluetooth LE in JS node 280 | - [ ] Transport protocol: Audio TP in Go 281 | - [ ] Transport protocol: Audio TP in JS node 282 | - [ ] Transport protocol: Zerotier in Go 283 | - [ ] Transport protocol: Zerotier in JS node 284 | - [ ] Transport protocol: QUIC in Go 285 | - [ ] Transport protocol: QUIC in JS node 286 | - [x] Stream Muxer: interfaces 287 | - [x] Stream Muxer: benchmarks in Go 288 | - [x] Stream Muxer: benchmarks in JS 289 | - [x] Stream Muxer: muxado in Go 290 | - [x] Stream Muxer: spdystream in Go 291 | - [x] Stream Muxer: multiplex in Go 292 | - [x] Stream Muxer: multiplex in JS 293 | - [x] Stream Muxer: spdy in JS 294 | - [ ] Stream Muxer: http2 in Go 295 | - [ ] Stream Muxer: http2 in JS 296 | - [ ] Stream Muxer: QUIC in Go 297 | - [ ] Stream Muxer: QUIC in JS 298 | - [x] Swarm / Switch: interfaces 299 | - [x] Dialer stack in Go 300 | - [x] Dialer stack in JS 301 | - [x] Swarm implementation in Go 302 | - [x] Swarm implementation in JS 303 | - [x] NAT Traversal: interfaces 304 | - [x] nat-pmp implementation in Go 305 | - [ ] nat-pmp implementation in JS 306 | - [x] upnp implementation in Go 307 | - [ ] upnp implementation in JS 308 | - [x] ext addr discovery in Go 309 | - [ ] ext addr discovery in JS 310 | - [ ] STUN-like implementation in Go 311 | - [ ] STUN-like implementation in JS 312 | - [x] line-switch relay implementation in Go 313 | - [ ] line-switch relay implementation in JS 314 | - [ ] pkt-switch relay implementation in Go 315 | - [ ] pkt-switch relay implementation in JS 316 | - [x] Peer Discovery: interfaces 317 | - [x] Peer Discovery: mDNS in Go 318 | - [x] Peer Discovery: mDNS in JS 319 | - [x] Peer Discovery: bootstrap list in JS 320 | - [x] Peer Discovery: bootstrap list in Go 321 | - [x] Peer Discovery: DHT query in JS 322 | - [x] Peer Discovery: DHT query in Go 323 | - [ ] Peer Discovery: PEX in JS 324 | - [ ] Peer Discovery: PEX in Go 325 | - [ ] Peer Discovery: DNS in JS 326 | - [ ] Peer Discovery: DNS in Go 327 | - [x] Content Routing: protocol interfaces 328 | - [x] Content Routing: Kademlia DHT impl in Go 329 | - [x] Content Routing: Kademlia DHT impl in JS 330 | - [ ] Content Routing: pub/sub impl in Go 331 | - [ ] Content Routing: pub/sub impl in JS 332 | - [ ] Content Routing: PHT in Go 333 | - [ ] Content Routing: PHT in JS 334 | - [x] Peer Routing: protocol interfaces 335 | - [x] Peer Routing: Kademlia DHT impl in Go 336 | - [x] Peer Routing: Kademlia DHT impl in JS 337 | - [ ] Peer Routing: pub/sub impl in Go 338 | - [ ] Peer Routing: pub/sub impl in JS 339 | - [ ] Peer Routing: PHT in Go 340 | - [ ] Peer Routing: PHT in JS 341 | - [x] Exchange: protocol interfaces 342 | - [x] Exchange: HTTP in Go 343 | - [x] Exchange: HTTP in JS 344 | - [x] Exchange: Bitswap in Go 345 | - [x] Exchange: Bitswap in JS 346 | - [x] Exchange: Bittorrent in Go 347 | - [x] Exchnage: Bittorrent in JS 348 | - [ ] Consensus: protocol interfaces 349 | - [ ] Consensus: Paxos 350 | - [ ] Consensus: Raft 351 | - [ ] Consensus: PBFT 352 | - [ ] Consensus: Nakamoto 353 | 354 | ### Bitswap 355 | 356 | Bitswap is the exchange protocol of IPFS. It simulates a data market. 357 | 358 | - [x] Bitswap: Protocol and architecture design 359 | - [x] Bitswap: protocol spec 360 | - [x] Bitswap: decision engine 361 | - [x] Bitswap: strategy: altruist 362 | - [x] Bitswap: strategy: logistic 363 | - [x] Bitswap: strategy: programmable 364 | - [x] Bitswap: support for keys 365 | - [x] Bitswap: support for paths 366 | - [ ] Bitswap: support for selectors 367 | - [ ] Bitswap: hooks for other txns 368 | - [x] Bitswap: impl in Go 369 | - [x] Bitswap: testing simulator 370 | - [x] Bitswap: basic exchange 371 | - [x] Bitswap: bandwidth accounting 372 | - [x] Bitswap: decision engine 373 | - [x] Bitswap: strategy: altruist 374 | - [ ] Bitswap: strategy: logistic 375 | - [ ] Bitswap: strategy: programmable 376 | - [x] Bitswap: support for keys 377 | - [ ] Bitswap: support for paths 378 | - [ ] Bitswap: support for selectors 379 | - [ ] Bitswap: hooks for other txns 380 | - [x] Bitswap: impl in JS 381 | - [x] Bitswap: testing simulator 382 | - [x] Bitswap: basic exchange 383 | - [x] Bitswap: bandwidth accounting 384 | - [x] Bitswap: decision engine 385 | - [x] Bitswap: strategy: altruist 386 | - [ ] Bitswap: strategy: logistic 387 | - [x] Bitswap: strategy: programmable 388 | - [x] Bitswap: support for keys 389 | - [ ] Bitswap: support for paths 390 | - [ ] Bitswap: support for selectors 391 | - [ ] Bitswap: hooks for other txns 392 | - [x] Bitswap: bssim network simulations 393 | - [x] Bitswap: bssim: basic in-proc simulation 394 | - [x] Bitswap: bssim: basic multiproc simulation 395 | - [ ] Bitswap: bssim: basic multi machine simulation 396 | - [x] Bitswap: bssim: metrics collection 397 | - [x] Bitswap: bssim: reporting 398 | - [x] Bitswap: bssim: pluggable strategies 399 | - [ ] Bitswap: bssim: strategies config 400 | 401 | ### IPFS DHT 402 | 403 | The IPFS DHT is (today) a Kademlia based DHT implementing several libp2p protocols: Peer Discovery, Peer Routing, Content Routing, and some NAT Traversal assistance. 404 | 405 | - [x] IPFS DHT: Protocol and architecture design 406 | - [x] IPFS DHT: protocol spec / messages 407 | - [x] IPFS DHT: kad queries 408 | - [x] IPFS DHT: kbucketing 409 | - [x] IPFS DHT: churn resistance 410 | - [ ] IPFS DHT: censor resistance 411 | - [x] IPFS DHT: impl in Go 412 | - [x] IPFS DHT: messages 413 | - [x] IPFS DHT: kad queries 414 | - [x] IPFS DHT: kbucketing 415 | - [x] IPFS DHT: churn resistance 416 | - [ ] IPFS DHT: censor resistance 417 | - [x] IPFS DHT: impl in JS 418 | - [x] IPFS DHT: messages 419 | - [x] IPFS DHT: kad queries 420 | - [x] IPFS DHT: kbucketing 421 | - [x] IPFS DHT: churn resistance 422 | - [ ] IPFS DHT: censor resistance 423 | - [x] IPFS DHT: dhtHell simulations 424 | - [x] IPFS DHT: dhtHell programmable config 425 | - [x] IPFS DHT: dhtHell in-proc tests 426 | - [ ] IPFS DHT: dhtHell multi-proc tests 427 | - [ ] IPFS DHT: dhtHell multi-machine tests 428 | - [x] IPFS DHT: dhtHell 1,000 nodes 429 | - [x] IPFS DHT: dhtHell 10,000 nodes 430 | - [ ] IPFS DHT: dhtHell 100,000 nodes 431 | - [ ] IPFS DHT: dhtHell 1,000,000 nodes 432 | 433 | 434 | ### IPFS pub/sub 435 | 436 | 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. 437 | 438 | - [ ] IPFS pub/sub: Protocol and architecture design 439 | - [ ] IPFS pub/sub: protocol spec / messages 440 | - [ ] IPFS pub/sub: record spec 441 | - [ ] IPFS pub/sub: one-hop support 442 | - [ ] IPFS pub/sub: multihop tree forming 443 | - [ ] IPFS pub/sub: churn resistance 444 | - [ ] IPFS pub/sub: censor resistance 445 | - [ ] IPFS pub/sub: topic/channel support 446 | - [ ] IPFS pub/sub: hierarchical topic/channel support 447 | - [ ] IPFS pub/sub: authenticated subnets 448 | - [ ] IPFS pub/sub: private subnets (symmetric) 449 | - [ ] IPFS pub/sub: private subnets (PKI) 450 | - [ ] IPFS pub/sub: impl in Go 451 | - [x] IPFS pub/sub: prototyping in Go 452 | - [ ] IPFS pub/sub: impl in JS 453 | - [ ] IPFS pub/sub: pssim simulations 454 | - [ ] IPFS pub/sub: pssim programmable config 455 | - [ ] IPFS pub/sub: pssim in-proc tests 456 | - [ ] IPFS pub/sub: pssim multi-proc tests 457 | - [ ] IPFS pub/sub: pssim multi-machine tests 458 | - [ ] IPFS pub/sub: pssim 1,000 nodes 459 | - [ ] IPFS pub/sub: pssim 10,000 nodes 460 | - [ ] IPFS pub/sub: pssim 100,000 nodes 461 | - [ ] IPFS pub/sub: pssim 1,000,000 nodes 462 | 463 | ### IPLD 464 | 465 | IPLD is the core format for data on IPFS. More at https://github.com/ipfs/specs/tree/master/ipld 466 | 467 | - [x] ipld v0 protobuf: spec 468 | - [x] ipld v0 protobuf: impl in go 469 | - [x] ipld v0 protobuf: impl in js 470 | - [x] ipld: spec 471 | - [x] ipld: Linking 472 | - [x] ipld: Pathing 473 | - [ ] ipld: Selector 474 | - [ ] ipld: Query 475 | - [x] ipld: v0 compat 476 | - [x] ipld: cbor serialization 477 | - [x] ipld: links and resolving 478 | - [x] ipld: streaming support 479 | - [x] ipld: impl in Go 480 | - [x] ipld: Linking 481 | - [x] ipld: Pathing 482 | - [ ] ipld: Selector 483 | - [ ] ipld: Query 484 | - [x] ipld: v0 compat 485 | - [x] ipld: cbor serialization 486 | - [x] ipld: links and resolving 487 | - [x] ipld: streaming support 488 | - [x] ipld: impl in JS 489 | - [x] ipld: Linking 490 | - [x] ipld: Pathing 491 | - [ ] ipld: Selector 492 | - [ ] ipld: Query 493 | - [x] ipld: v0 compat 494 | - [x] ipld: cbor serialization 495 | - [x] ipld: links and resolving 496 | - [ ] ipld: streaming support 497 | - [ ] ipld: website 498 | - [ ] ipld: website: front page 499 | - [ ] ipld: website: spec 500 | - [ ] ipld: website: about 501 | - [ ] ipld: website: playground 502 | - [ ] ipld: website: playground spec 503 | - [ ] ipld: website: playground impl 504 | 505 | ### IPLD Data Structures and Importers 506 | 507 | 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. 508 | 509 | - [x] unixfs for unix/posix files 510 | - [x] unixfs spec 511 | - [x] unixfs file 512 | - [x] unixfs file sharding 513 | - [x] unixfs file trickledag 514 | - [x] unixfs dir 515 | - [ ] unixfs dir sharding 516 | - [x] unixfs metadata 517 | - [x] unixfs impl in Go 518 | - [x] unixfs file 519 | - [x] unixfs file sharding 520 | - [x] unixfs file trickledag 521 | - [x] unixfs dir 522 | - [ ] unixfs dir sharding 523 | - [x] unixfs metadata 524 | - [x] unixfs impl in JS 525 | - [x] unixfs file 526 | - [x] unixfs file sharding 527 | - [ ] unixfs file trickledag 528 | - [x] unixfs dir 529 | - [ ] unixfs dir sharding 530 | - [x] unixfs metadata 531 | - [x] archives spec 532 | - [x] tar 533 | - [ ] zip 534 | - [ ] rar 535 | - [ ] keychain spec 536 | - [ ] keychain: keys 537 | - [ ] keychain: sigs 538 | - [ ] keychain: caps 539 | - [ ] keychain: proofs 540 | 541 | ### IPFS Repo 542 | 543 | More at https://github.com/ipfs/specs and https://github.com/ipfs/fs-repo-migrations 544 | 545 | - [x] IPFS repo spec 546 | - [x] IPFS repo impl in Go 547 | - [x] IPFS repo impl in JS node 548 | - [x] IPFS repo impl in JS browser 549 | - [x] IPFS fs-repo spec 550 | - [x] IPFS fs-repo v0 551 | - [x] IPFS fs-repo datastore (blocks and metadata) 552 | - [x] IPFS fs-repo config file 553 | - [x] IPFS fs-repo lock file 554 | - [x] IPFS fs-repo logs dir 555 | - [x] IPFS fs-repo v1 556 | - [x] IPFS fs-repo version file 557 | - [x] IPFS fs-repo api file 558 | - [x] IPFS fs-repo blocks (data) 559 | - [x] IPFS fs-repo datastore (metadata) 560 | - [x] IPFS fs-repo v2 561 | - [x] IPFS fs-repo ipld pinset 562 | - [x] IPFS fs-repo impl in Go 563 | - [x] IPFS fs-repo impl in JS node 564 | - [x] IPFS fs-repo impl in JS browser 565 | - [x] IPFS fs-repo-migrations 566 | - [x] IPFS fs-repo-migrations 0-to-1 567 | - [x] IPFS fs-repo-migrations 1-to-2 568 | - [x] IPFS fs-repo-migrations 2-to-3 569 | 570 | ### IPFS Protocol and Architecture 571 | 572 | - [x] IPFS architecture: macro protocol architecture 573 | - [x] IPFS architecture: futureproofing and self-description (multis) 574 | - [x] IPFS architecture: networking 575 | - [x] IPFS architecture: encrypted and authenticated connectivity 576 | - [x] IPFS architecture: peer and content routing 577 | - [x] IPFS architecture: NAT traversal 578 | - [x] IPFS architecture: line and pkt switching relay 579 | - [x] IPFS architecture: abstracting and extracting libp2p 580 | - [x] IPFS architecture: basic private networks (symmetric encryption) 581 | - [ ] IPFS architecture: advanced private networks (PKI) 582 | - [x] IPFS architecture: merkle-linked graph and IPLD 583 | - [x] IPFS architecture: pathing model for fs and web 584 | - [x] IPFS architecture: selectors for graph traversals 585 | - [x] IPFS architecture: addressing 586 | - [x] IPFS architecture: content addressing and resolution 587 | - [x] IPFS architecture: key addressing and resolution 588 | - [x] IPFS architecture: other resolver addressing and resolution 589 | - [x] IPFS architecture: node data sync model 590 | - [x] IPFS architecture: ref pull resolution and retrieval 591 | - [ ] IPFS architecture: ref push 592 | - [x] IPFS architecture: ref pinning 593 | - [ ] IPFS architecture: peer-to-peer RPC auth 594 | - [x] IPFS architecture: projection of protocol to programs 595 | - [x] IPFS architecture: program model 596 | - [x] IPFS architecture: service design 597 | - [x] IPFS architecture: tool design 598 | - [x] IPFS architecture: core api design 599 | - [x] IPFS architecture: cli api design 600 | - [x] IPFS architecture: http api design 601 | - [ ] IPFS architecture: RPC api design 602 | - [x] IPFS architecture: distribution of programs 603 | - [x] IPFS architecture: webui design 604 | - [x] IPFS architecture: app designs 605 | - [ ] IPFS architecture: programmable policy hooks 606 | - [ ] IPFS architecture: bitswap strategies and trading 607 | - [ ] IPFS architecture: data advertising and serving 608 | - [ ] IPFS architecture: social network 609 | - [x] IPFS architecture: blocklists design 610 | - [ ] IPFS architecture: blocklist support in gateway 611 | - [ ] IPFS architecture: blocklist support in net 612 | - [ ] IPFS architecture: scalable blocklist (bloom) 613 | - [ ] IPFS architecture: clustering 614 | - [ ] IPFS architecture: cluster RAID/RAIN modes 615 | - [ ] IPFS architecture: cluster consensus 616 | 617 | ### Go implementation of IPFS 618 | 619 | 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 620 | 621 | 622 | - [x] go-ipfs ipfs node components 623 | - [x] go-ipfs multi protocols 624 | - [x] go-ipfs component: repo 625 | - [x] go-ipfs component: networking (libp2p) 626 | - [x] go-ipfs component: bitswap 627 | - [x] go-ipfs component: dag / ipld 628 | - [x] go-ipfs component: pinning 629 | - [x] go-ipfs component: block api 630 | - [x] go-ipfs component: object api 631 | - [x] go-ipfs component: files api 632 | - [x] go-ipfs component: daemon 633 | - [x] go-ipfs component: data importing 634 | - [x] go-ipfs component: gateway 635 | - [x] go-ipfs component: http api 636 | - [x] go-ipfs ipfs node api 637 | - [x] go-ipfs core api impl 638 | - [x] go-ipfs core api: version 639 | - [x] go-ipfs core api: daemon 640 | - [x] go-ipfs core api: id 641 | - [x] go-ipfs core api: block 642 | - [x] go-ipfs core api: object 643 | - [x] go-ipfs core api: refs 644 | - [x] go-ipfs core api: repo 645 | - [x] go-ipfs core api: pin 646 | - [x] go-ipfs core api: log 647 | - [x] go-ipfs ext api impl 648 | - [x] go-ipfs ext api: name (ipns) 649 | - [x] go-ipfs ext api: dns 650 | - [x] go-ipfs ext api: tar 651 | - [ ] go-ipfs ext api: tour 652 | - [x] go-ipfs ext api: files 653 | - [x] go-ipfs ext api: stat 654 | - [x] go-ipfs ext api: mount 655 | - [x] go-ipfs ext api: bootstrap 656 | - [x] go-ipfs ext api: bitswap 657 | - [x] go-ipfs tool api impl 658 | - [x] go-ipfs tool api: init 659 | - [x] go-ipfs tool api: config 660 | - [x] go-ipfs tool api: update 661 | - [x] go-ipfs tool api: commands 662 | - [x] go-ipfs net api impl 663 | - [x] go-ipfs net api: ping 664 | - [x] go-ipfs net api: dht 665 | - [x] go-ipfs net api: swarm 666 | - [ ] go-ipfs net api: records 667 | - [x] go-ipfs cli api impl 668 | - [x] go-ipfs cli codecs 669 | - [x] go-ipfs http api impl 670 | - [x] go-ipfs http api: streaming 671 | - [x] go-ipfs http api: multipart 672 | 673 | ### Javascript implementation of IPFS 674 | 675 | 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 676 | 677 | - [ ] js-ipfs ipfs node components 678 | - [x] js-ipfs multi protocols 679 | - [x] js-ipfs component: repo 680 | - [x] js-ipfs component: networking (libp2p) 681 | - [x] js-ipfs component: bitswap 682 | - [x] js-ipfs component: dag / ipld 683 | - [ ] js-ipfs component: pinning 684 | - [x] js-ipfs component: block api 685 | - [x] js-ipfs component: object api 686 | - [ ] js-ipfs component: files api 687 | - [x] js-ipfs component: daemon 688 | - [x] js-ipfs component: data importing 689 | - [x] js-ipfs component: http api 690 | - [ ] js-ipfs ipfs node api 691 | - [x] js-ipfs core api impl 692 | - [x] js-ipfs core api: version 693 | - [x] js-ipfs core api: daemon 694 | - [x] js-ipfs core api: id 695 | - [x] js-ipfs core api: block 696 | - [x] js-ipfs core api: object 697 | - [ ] js-ipfs core api: refs 698 | - [x] js-ipfs core api: repo 699 | - [ ] js-ipfs core api: pin 700 | - [ ] js-ipfs core api: log 701 | - [ ] js-ipfs ext api impl 702 | - [ ] js-ipfs ext api: name (ipns) 703 | - [ ] js-ipfs ext api: dns 704 | - [ ] js-ipfs ext api: tar 705 | - [ ] js-ipfs ext api: files 706 | - [ ] js-ipfs ext api: stat 707 | - [ ] js-ipfs ext api: mount 708 | - [x] js-ipfs ext api: bootstrap 709 | - [x] js-ipfs ext api: bitswap 710 | - [x] js-ipfs tool api impl 711 | - [x] js-ipfs tool api: init 712 | - [x] js-ipfs tool api: config 713 | - [ ] js-ipfs tool api: update 714 | - [x] js-ipfs tool api: commands 715 | - [ ] js-ipfs net api impl 716 | - [ ] js-ipfs net api: ping 717 | - [ ] js-ipfs net api: dht 718 | - [ ] js-ipfs net api: swarm 719 | - [ ] go-ipfs net api: records 720 | - [ ] js-ipfs cli api impl 721 | - [ ] js-ipfs cli codecs 722 | - [ ] js-ipfs http api impl 723 | - [ ] js-ipfs http api: streaming 724 | - [ ] js-ipfs http api: multipart 725 | 726 | ### IPFS directly on the Browsers 727 | 728 | 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: 729 | 730 | - (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. 731 | - (2) Implement IPFS in javascript, and use js-ipfs directly in the browser tab. This is in progress today. 732 | - (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. 733 | - (4) Finally, submit patches to the major browsers adding IPFS support. 734 | 735 | We have finished step (1). We are currently working on steps (2) and (3). Step (4) is likely a 2017 endeavor. 736 | 737 | - [x] IPFS API used in a browser tab 738 | - [x] go-ipfs implementation 739 | - [x] js-ipfs-api client library 740 | - [x] use background go-ipfs node (localhost or elsewhere) 741 | - [ ] IPFS protocol running in a browser tab, in js 742 | - [x] js-libp2p implementation 743 | - [ ] js-ipfs implementation 744 | - [x] libp2p.js browser library 745 | - [ ] ipfs.js browser library 746 | - [x] IPFS running with a browser extension 747 | - [x] go-ipfs implementation 748 | - [ ] js-ipfs implementation 749 | - [x] firefox extension 750 | - [x] use background go-ipfs node 751 | - [ ] easy install of go-ipfs node 752 | - [ ] bundling of js-ipfs node 753 | - [x] url rewriting 754 | - [x] node management 755 | - [x] api configuration 756 | - [ ] simple UX for users 757 | - [ ] expose ipfs and p2p in the browser window 758 | - [x] chrome extension 759 | - [x] use background go-ipfs node 760 | - [ ] easy install of go-ipfs node 761 | - [ ] bundling of js-ipfs node 762 | - [x] url rewriting 763 | - [ ] node management 764 | - [ ] api configuration 765 | - [ ] simple UX for users 766 | - [ ] expose ipfs and p2p in the browser window 767 | - [ ] IPFS running natively in a browser 768 | - [x] go-ipfs implementation (for chrome or firefox) 769 | - [ ] go-ipfs static lib (for chrome or firefox) 770 | - [ ] js-ipfs implementation (for chrome or firefox) 771 | - [ ] rust-ipfs implementation (for servo) 772 | - [ ] chromium patches adding IPFS support 773 | - [ ] firefox patches adding IPFS support 774 | - [ ] servo patches adding IPFS support 775 | - [ ] safari patches adding IPFS support 776 | 777 | 778 | ### IPFS Node Management Console (webui) 779 | 780 | 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 781 | 782 | - [x] webui console architecture 783 | - [x] R/W privileged API route (:5001) 784 | - [x] Security: Origin and CORS 785 | - [x] Security: exposed only locally 786 | - [ ] Security: token based access 787 | - [x] distributed through IPFS itself 788 | - [x] accessed through http-to-ipfs gateway 789 | - [x] webui console v0 790 | - [x] webapp design 791 | - [x] basic node info 792 | - [x] peer map (3D earth) 793 | - [x] ipfs dag explorer 794 | - [x] ipfs file viewer 795 | - [x] listing all files 796 | - [x] adding files (+ drag and drop) 797 | - [x] tail logs (json) 798 | - [x] view & edit config (json) 799 | - [ ] webui console v1 800 | - [x] webapp redesign 801 | - [x] peer map (flat and 3D) 802 | - [ ] new dag explorer 803 | - [x] new file explorer 804 | - [x] file navigation 805 | - [x] drag and drop support 806 | - [x] file previews 807 | 808 | 809 | ### HTTP to IPFS Gateway 810 | 811 | 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. 812 | 813 | - [x] HTTP Gateway implementation (in go-ipfs) 814 | - [x] HTTP Gateway file listing 815 | - [x] HTTP Gateway /ipfs route for files 816 | - [x] HTTP Gateway /ipns route for names 817 | - [ ] HTTP Gateway /ipfs POST writes 818 | - [ ] HTTP Gateway /ipns PUT/POST writes 819 | - [x] HTTP Gateway CORS and Headers support 820 | - [x] HTTP Gateway Service (ipfs.io) 821 | - [x] HTTP Gateway Service: solarnet vps infrastructure 822 | - [x] HTTP Gateway Service: DNS architecture 823 | - [x] HTTP Gateway Service DNS: deployed at ipfs.io 824 | - [x] HTTP Gateway Service DNS: dnslink, CNAME, A support 825 | - [ ] HTTP Gateway Service DNS: zone automation 826 | - [ ] HTTP Gateway Service DNS: TLD redundancy 827 | - [x] HTTP Gateway Service: nginx frontend 828 | - [x] HTTP Gateway Service: backend fallbacks 829 | - [x] HTTP Gateway Service: nginx blocklists (dmca) 830 | - [ ] HTTP Gateway Service: rate limiting 831 | - [x] HTTP Gateway Service Devops 832 | - [x] HTTP Gateway Service Devops: containers 833 | - [x] HTTP Gateway Service Devops: automated deployments 834 | - [x] HTTP Gateway Service Devops: logging 835 | - [x] HTTP Gateway Service Devops: event monitoring 836 | - [x] HTTP Gateway Service Devops: status alerts 837 | - [ ] HTTP Gateway Service Devops: status webpage (status.ipfs.io) 838 | - [ ] HTTP Gateway Service Devops: chaos monkey 839 | - [x] HTTP Gateway Self-hosting 840 | - [x] HTTP Gateway Self-hosting: ipfs.io project website 841 | - [x] HTTP Gateway Self-hosting: dist.ipfs.io 842 | - [x] HTTP Gateway Self-hosting: blog.ipfs.io 843 | - [x] HTTP Gateway Self-hosting: refs.ipfs.io 844 | 845 | ### IPFS Distributions 846 | 847 | 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. 848 | 849 | - [x] IPFS Distributions: architecture 850 | - [ ] IPFS Distributions: security 851 | - [x] IPFS Distributions: TLS cert for HTTP site 852 | - [ ] IPFS Distributions: code signing 853 | - [x] IPFS Distributions: code signing source 854 | - [x] IPFS Distributions: code signing protocol 855 | - [x] IPFS Distributions: code signing team yubikeys 856 | - [x] IPFS Distributions: website 857 | - [x] IPFS Distributions: website design 858 | - [x] IPFS Distributions: website landing page 859 | - [x] IPFS Distributions: website program listings 860 | - [x] IPFS Distributions: website domain (dist.ipfs.io) 861 | - [ ] IPFS Distributions: website localization 862 | - [x] IPFS Distributions: tools 863 | - [x] IPFS Distributions: go-ipfs 864 | - [x] IPFS Distributions: ipfs-update 865 | - [x] IPFS Distributions: ipget 866 | - [x] IPFS Distributions: fs-repo-migrations 867 | - [x] IPFS Distributions: gx, gx-go 868 | - [ ] IPFS Distributions: station 869 | - [ ] IPFS Distributions: webui 870 | 871 | ### Security 872 | 873 | - [ ] Create a bug bounty program for IPFS 874 | - [ ] Have IPFS go and js implementations be fully Audited 875 | - [ ] Create a Security Working Group 876 | - [ ] Create a responsible disclosure program 877 | 878 | ### IPFS Blog and Newsletter 879 | 880 | In order to keep the community updated, we run a blog. This blog is distributed through IPFS itself, and through an email newsletter. 881 | 882 | - [x] ipfs blog 883 | - [x] blog design 884 | - [x] distribute through ipfs 885 | - [x] blog.ipfs.io domain 886 | - [ ] use POST datastructure 887 | - [x] weekly/newsletter 888 | - [x] establish newsletter process 889 | - [x] highlight contributions and contributors 890 | - [x] post to the blog 891 | - [x] email subscription 892 | - [x] use tinyletter 893 | - [x] post weekly 894 | - [ ] post blog 895 | -------------------------------------------------------------------------------- /IMPLEMENTATION_STATUS.md: -------------------------------------------------------------------------------- 1 | # IPFS Implementation Status 2 | 3 | > Legend: :green_apple: Done   :lemon: In Progress   :tomato: Missing   :chestnut: Not planned 4 | 5 | # Table of Contents 6 | 7 | # API 8 | 9 | ## Bitswap 10 | 11 | #### CLI 12 | 13 | | Command | Go Impl | JS Impl | 14 | | -------------------------------------------- | :-----------: | :-----------: | 15 | | **`ipfs ledger`** | :green_apple: | :tomato: | 16 | | `peer` | :green_apple: | :tomato: | 17 | | **`ipfs reprovide`** | :green_apple: | :tomato: | 18 | | **`ipfs bitswap stat`** | :green_apple: | :green_apple: | 19 | | **`ipfs bitswap unwant`** | :green_apple: | :tomato: | 20 | | `key` | :green_apple: | :tomato: | 21 | | **`ipfs bitswap wantlist`** | :green_apple: | :lemon: | 22 | | `peer` | :green_apple: | :tomato: | 23 | 24 | #### HTTP 25 | 26 | | Endpoint | Go Impl | JS Impl | 27 | | -------------------------------------------- | :-----------: | :-----------: | 28 | | **`GET /api/v0/bitswap/ledger`** | :green_apple: | :tomato: | 29 | | `arg=` | :green_apple: | :tomato: | 30 | | **`GET /api/v0/bitswap/reprovide`** | :green_apple: | :tomato: | 31 | | **`GET /api/v0/bitswap/stat`** | :green_apple: | :green_apple: | 32 | | **`GET /api/v0/bitswap/unwant`** | :green_apple: | :tomato: | 33 | | `arg=` | :green_apple: | :tomato: | 34 | | **`GET /api/v0/bitswap/wantlist`** | :green_apple: | :lemon: | 35 | | `peer=` | :green_apple: | :tomato: | 36 | 37 | #### Core 38 | 39 | See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core). 40 | 41 | -------------------------------------------------------------------------------- 42 | 43 | ## Block `ipfs block` 44 | 45 | #### CLI 46 | 47 | | Command | Go Impl | JS Impl | 48 | | -------------------------------------------- | :-----------: | :-----------: | 49 | | **`ipfs block get`** | :green_apple: | :green_apple: | 50 | | `key` | :green_apple: | :green_apple: | 51 | | **`ipfs block put`** | :green_apple: | :green_apple: | 52 | | `data` | :green_apple: | :green_apple: | 53 | | `format` | :green_apple: | :green_apple: | 54 | | `mhtype` | :green_apple: | :green_apple: | 55 | | `mhlen` | :green_apple: | :green_apple: | 56 | | **`ipfs block rm`** | :green_apple: | :lemon: | 57 | | `hash` | :green_apple: | :lemon: | 58 | | `force` | :green_apple: | :lemon: | 59 | | **`ipfs block stat`** | :green_apple: | :green_apple: | 60 | | `key` | :green_apple: | :green_apple: | 61 | 62 | #### HTTP 63 | 64 | | Endpoint | Go Impl | JS Impl | 65 | | -------------------------------------------- | :-----------: | :-----------: | 66 | | **`GET /api/v0/block/get`** | :green_apple: | :green_apple: | 67 | | `arg=` | :green_apple: | :green_apple: | 68 | | **`POST /api/v0/block/put`** | :green_apple: | :green_apple: | 69 | | `arg=` | :green_apple: | :green_apple: | 70 | | `format=` | :green_apple: | :green_apple: | 71 | | `mhtype=` | :green_apple: | :green_apple: | 72 | | `mhlen=` | :green_apple: | :green_apple: | 73 | | **`GET /api/v0/block/rm`** | :green_apple: | :lemon: | 74 | | `arg=` | :green_apple: | :lemon: | 75 | | `force=` | :green_apple: | :lemon: | 76 | | **`GET /api/v0/block/stat`** | :green_apple: | :green_apple: | 77 | | `arg=` | :green_apple: | :green_apple: | 78 | 79 | #### Core 80 | 81 | See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core). 82 | 83 | -------------------------------------------------------------------------------- 84 | 85 | ## Bootstrap 86 | 87 | #### CLI 88 | 89 | | Command | Go Impl | JS Impl | 90 | | -------------------------------------------- | :-----------: | :-----------: | 91 | | **`ipfs bootstrap add`** | :green_apple: | :green_apple: | 92 | | `arg=` | :green_apple: | :green_apple: | 93 | | `default=` | :green_apple: | :green_apple: | 94 | | **`ipfs bootstrap list`** | :green_apple: | :green_apple: | 95 | | **`ipfs bootstrap rm`** | :green_apple: | :green_apple: | 96 | | `arg=` | :green_apple: | :green_apple: | 97 | | `all=` | :green_apple: | :green_apple: | 98 | 99 | #### HTTP 100 | 101 | | Endpoint | Go Impl | JS Impl | 102 | | -------------------------------------------- | :-----------: | :-----------: | 103 | | **`GET /api/v0/bootstrap/add`** | :green_apple: | :green_apple: | 104 | | `arg=` | :green_apple: | :green_apple: | 105 | | `default=` | :green_apple: | :green_apple: | 106 | | **`GET /api/v0/bootstrap/add/default`** | :green_apple: | :tomato: | 107 | | **`GET /api/v0/bootstrap/list`** | :green_apple: | :green_apple: | 108 | | **`GET /api/v0/bootstrap/rm`** | :green_apple: | :green_apple: | 109 | | `arg=` | :green_apple: | :green_apple: | 110 | | `all=` | :green_apple: | :green_apple: | 111 | | **`GET /api/v0/bootstrap/rm/all`** | :green_apple: | :tomato: | 112 | 113 | #### Core 114 | 115 | See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core). 116 | 117 | -------------------------------------------------------------------------------- 118 | 119 | ## Config 120 | 121 | #### CLI 122 | 123 | | Command | Go Impl | JS Impl | 124 | | -------------------------------------------- | :-----------: | :-----------: | 125 | | **`ipfs config edit`** | :green_apple: | :chestnut: | 126 | | **`ipfs config`** | :green_apple: | :chestnut: | 127 | | `key` | :green_apple: | :green_apple: | 128 | | `value` | :green_apple: | :green_apple: | 129 | | `bool=` | :green_apple: | :green_apple: | 130 | | `json=` | :green_apple: | :green_apple: | 131 | | **`ipfs config replace`** | :green_apple: | :green_apple: | 132 | | `file` | :green_apple: | :green_apple: | 133 | | **`ipfs config show`** | :green_apple: | :green_apple: | 134 | | **`ipfs log level`** | :green_apple: | :chestnut: | 135 | | `subsystem` | :green_apple: | :chestnut: | 136 | | `level` | :green_apple: | :chestnut: | 137 | | **`ipfs log ls`** | :green_apple: | :chestnut: | 138 | | **`ipfs log tail`** | :green_apple: | :chestnut: | 139 | 140 | #### HTTP 141 | 142 | | Endpoint | Go Impl | JS Impl | 143 | | -------------------------------------------- | :-----------: | :-----------: | 144 | | **`GET /api/v0/config/edit`** | :green_apple: | :chestnut: | 145 | | **`POST /api/v0/config`** | :green_apple: | :chestnut: | 146 | | `arg1=` | :green_apple: | :green_apple: | 147 | | `arg2=` | :green_apple: | :green_apple: | 148 | | `bool=` | :green_apple: | :green_apple: | 149 | | `json=` | :green_apple: | :green_apple: | 150 | | **`POST /api/v0/config/replace`** | :green_apple: | :green_apple: | 151 | | `arg=` | :green_apple: | :green_apple: | 152 | | **`GET /api/v0/config/show`** | :green_apple: | :green_apple: | 153 | | **`POST /api/v0/log/level`** | :green_apple: | :chestnut: | 154 | | `arg1=` | :green_apple: | :chestnut: | 155 | | `arg2=` | :green_apple: | :chestnut: | 156 | | **`GET /api/v0/log/ls`** | :green_apple: | :chestnut: | 157 | | **`GET /api/v0/log/tail`** | :green_apple: | :chestnut: | 158 | 159 | #### Core 160 | 161 | See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core). 162 | 163 | -------------------------------------------------------------------------------- 164 | 165 | ## DAG 166 | 167 | > **Blocked until the following are resolved:** 168 | - https://github.com/ipfs/js-ipfs-api/pull/534 169 | - https://github.com/ipfs/go-ipfs/issues/3771#issue-213068794 170 | 171 | #### CLI 172 | 173 | #### HTTP 174 | 175 | #### Core 176 | 177 | See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core). 178 | 179 | -------------------------------------------------------------------------------- 180 | 181 | ## Stats and Diagnostics 182 | 183 | #### CLI 184 | 185 | | Command | Go Impl | JS Impl | 186 | | -------------------------------------------- | :-----------: | :-----------: | 187 | | **`ipfs stats bitswap`** | :green_apple: | :tomato: | 188 | | **`ipfs stats bw`** | :green_apple: | :tomato: | 189 | | `peer` | :green_apple: | :tomato: | 190 | | `proto` | :green_apple: | :tomato: | 191 | | `poll` | :green_apple: | :tomato: | 192 | | `interval ` | :green_apple: | :tomato: | 193 | | **`ipfs stats repo`** | :green_apple: | :tomato: | 194 | | **`ipfs diag cmds`** | :green_apple: | :chestnut: | 195 | | **`ipfs diag cmds clear`** | :green_apple: | :chestnut: | 196 | | **`ipfs diag cmds set-time`** | :green_apple: | :chestnut: | 197 | | `time` | :green_apple: | :chestnut: | 198 | | **`ipfs diag sys`** | :green_apple: | :chestnut: | 199 | 200 | #### HTTP 201 | 202 | | Endpoint | Go Impl | JS Impl | 203 | | -------------------------------------------- | :-----------: | :-----------: | 204 | | **`GET /api/v0/stats/bitswap`** | :green_apple: | :tomato: | 205 | | **`POST /api/v0/stats/bw`** | :green_apple: | :tomato: | 206 | | `peer=` | :green_apple: | :tomato: | 207 | | `proto=` | :green_apple: | :tomato: | 208 | | `poll=` | :green_apple: | :tomato: | 209 | | `interval=` | :green_apple: | :tomato: | 210 | | **`GET /api/v0/stats/repo`** | :green_apple: | :tomato: | 211 | | **`GET /api/v0/diag/cmds`** | :green_apple: | :chestnut: | 212 | | **`GET /api/v0/diag/cmds/clear`** | :green_apple: | :chestnut: | 213 | | **`GET /api/v0/diag/cmds/set-time`** | :green_apple: | :chestnut: | 214 | | `arg=` | :green_apple: | :chestnut: | 215 | | **`GET /api/v0/net`** | :green_apple: | :chestnut: | 216 | | `vis` | :green_apple: | :chestnut: | 217 | | **`GET /api/v0/sys`** | :green_apple: | :chestnut: | 218 | 219 | #### Core 220 | 221 | See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core). 222 | 223 | -------------------------------------------------------------------------------- 224 | 225 | ## DHT 226 | 227 | > **Note:** This is blocked by core implementation of DHT itself. Follow https://github.com/ipfs/js-ipfs/pull/856 228 | 229 | #### CLI 230 | 231 | #### HTTP 232 | 233 | | Endpoint | Go Impl | JS Impl | 234 | | -------------------------------------------- | :-----------: | :-----------: | 235 | | **`GET /api/v0/dht/findpeer`** | :green_apple: | :tomato: | 236 | | `arg=` | :green_apple: | :tomato: | 237 | | **`POST /api/v0/dht/findprovs`** | :green_apple: | :tomato: | 238 | | `arg=` | :green_apple: | :tomato: | 239 | | **`GET /api/v0/dht/get`** | :green_apple: | :tomato: | 240 | | `arg=` | :green_apple: | :tomato: | 241 | | **`GET /api/v0/dht/put`** | :green_apple: | :tomato: | 242 | | `arg1=` | :green_apple: | :tomato: | 243 | | `arg2=` | :green_apple: | :tomato: | 244 | | **`GET /api/v0/dht/query`** | :green_apple: | :tomato: | 245 | | `arg=` | :green_apple: | :tomato: | 246 | 247 | 248 | #### Core 249 | 250 | See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core). 251 | 252 | -------------------------------------------------------------------------------- 253 | 254 | ## Files 255 | 256 | #### CLI 257 | 258 | | Command | Go Impl | JS Impl | 259 | | -------------------------------------------- | :-----------: | :-----------: | 260 | | **`ipfs add`** | :green_apple: | :lemon: | 261 | | `file` | :green_apple: | :green_apple: | 262 | | `recursive` | :green_apple: | :green_apple: | 263 | | `quiet` | :green_apple: | :tomato: | 264 | | `quieter` | :green_apple: | :tomato: | 265 | | `silent` | :green_apple: | :tomato: | 266 | | `progress` | :green_apple: | :tomato: | 267 | | `trickle` | :green_apple: | :green_apple: | 268 | | `only-hash` | :green_apple: | :tomato: | 269 | | `wrap-with-directory` | :green_apple: | :green_apple: | 270 | | `hidden` | :green_apple: | :tomato: | 271 | | `chunker` | :green_apple: | :tomato: | 272 | | `pin` | :green_apple: | :tomato: | 273 | | `raw-leaves` | :green_apple: | :tomato: | 274 | | `nocopy` | :green_apple: | :tomato: | 275 | | `fscache` | :green_apple: | :tomato: | 276 | | `cid-version` | :green_apple: | :tomato: | 277 | | `hash` | :green_apple: | :tomato: | 278 | | **`ipfs cat`** | :green_apple: | :green_apple: | 279 | | `arg` | :green_apple: | :green_apple: | 280 | | **`ipfs ls`** | :green_apple: | :lemon: | 281 | | `arg` | :green_apple: | :lemon: | 282 | | `headers` | :green_apple: | :lemon: | 283 | | `resolve-type` | :green_apple: | :lemon: | 284 | | **`ipfs file ls`** | :green_apple: | :chestnut: | 285 | | `path` | :green_apple: | :chestnut: | 286 | | **`ipfs files cp`** | :green_apple: | :tomato: | 287 | | `src` | :green_apple: | :tomato: | 288 | | `dst` | :green_apple: | :tomato: | 289 | | `flush` | :green_apple: | :tomato: | 290 | | **`ipfs files flush`** | :green_apple: | :tomato: | 291 | | `path` | :green_apple: | :tomato: | 292 | | **`ipfs files ls`** | :green_apple: | :tomato: | 293 | | `path` | :green_apple: | :tomato: | 294 | | `level` | :green_apple: | :tomato: | 295 | | `flush` | :green_apple: | :tomato: | 296 | | **`ipfs files mkdir`** | :green_apple: | :tomato: | 297 | | `path` | :green_apple: | :tomato: | 298 | | `parents` | :green_apple: | :tomato: | 299 | | `flush` | :green_apple: | :tomato: | 300 | | **`ipfs files mv`** | :green_apple: | :tomato: | 301 | | `src` | :green_apple: | :tomato: | 302 | | `dst` | :green_apple: | :tomato: | 303 | | `flush` | :green_apple: | :tomato: | 304 | | **`ipfs files read`** | :green_apple: | :tomato: | 305 | | `path` | :green_apple: | :tomato: | 306 | | `offset` | :green_apple: | :tomato: | 307 | | `count` | :green_apple: | :tomato: | 308 | | `flush` | :green_apple: | :tomato: | 309 | | **`ipfs files rm`** | :green_apple: | :tomato: | 310 | | `path` | :green_apple: | :tomato: | 311 | | `recursive` | :green_apple: | :tomato: | 312 | | `flush` | :green_apple: | :tomato: | 313 | | **`ipfs files stat`** | :green_apple: | :tomato: | 314 | | `path` | :green_apple: | :tomato: | 315 | | `flush` | :green_apple: | :tomato: | 316 | | **`ipfs files write`** | :green_apple: | :tomato: | 317 | | `path` | :green_apple: | :tomato: | 318 | | `data` | :green_apple: | :tomato: | 319 | | `offset` | :green_apple: | :tomato: | 320 | | `create` | :green_apple: | :tomato: | 321 | | `truncate` | :green_apple: | :tomato: | 322 | | `count` | :green_apple: | :tomato: | 323 | | `flush` | :green_apple: | :tomato: | 324 | | **`ipfs get`** | :green_apple: | :green_apple: | 325 | | `path` | :green_apple: | :green_apple: | 326 | | `archive` | :green_apple: | :tomato: | 327 | | `compress` | :green_apple: | :tomato: | 328 | | `compression-level` | :green_apple: | :tomato: | 329 | 330 | #### HTTP 331 | 332 | | Endpoint | Go Impl | JS Impl | 333 | | -------------------------------------------- | :-----------: | :-----------: | 334 | | **`POST /api/v0/add`** | :green_apple: | :lemon: | 335 | | `arg=` | :green_apple: | :green_apple: | 336 | | `recursive=` | :green_apple: | :green_apple: | 337 | | `quiet=` | :green_apple: | :tomato: | 338 | | `quieter=` | :green_apple: | :tomato: | 339 | | `silent=` | :green_apple: | :tomato: | 340 | | `progress=` | :green_apple: | :tomato: | 341 | | `trickle=` | :green_apple: | :green_apple: | 342 | | `only-hash=` | :green_apple: | :tomato: | 343 | | `wrap-with-directory` | :green_apple: | :green_apple: | 344 | | `hidden` | :green_apple: | :tomato: | 345 | | `chunker` | :green_apple: | :tomato: | 346 | | `pin` | :green_apple: | :tomato: | 347 | | `raw-leaves` | :green_apple: | :tomato: | 348 | | `nocopy` | :green_apple: | :tomato: | 349 | | `fscache` | :green_apple: | :tomato: | 350 | | `cid-version` | :green_apple: | :tomato: | 351 | | `hash` | :green_apple: | :tomato: | 352 | | **`GET /api/v0/cat`** | :green_apple: | :green_apple: | 353 | | `arg=` | :green_apple: | :green_apple: | 354 | | **`GET /api/v0/ls`** | :green_apple: | :lemon: | 355 | | `arg=` | :green_apple: | :lemon: | 356 | | `headers=` | :green_apple: | :lemon: | 357 | | `resolve-type=` | :green_apple: | :lemon: | 358 | | **`GET /api/v0/file/ls`** | :green_apple: | :chestnut: | 359 | | `arg=` | :green_apple: | :chestnut: | 360 | | **`GET /api/v0/files/cp`** | :green_apple: | :tomato: | 361 | | `arg=` | :green_apple: | :tomato: | 362 | | `arg2=` | :green_apple: | :tomato: | 363 | | `flush=,f=` | :green_apple: | :tomato: | 364 | | **`GET /api/v0/files/flush`** | :green_apple: | :tomato: | 365 | | `arg=` | :green_apple: | :tomato: | 366 | | **`GET /api/v0/files/ls`** | :green_apple: | :tomato: | 367 | | `arg=` | :green_apple: | :tomato: | 368 | | `l=` | :green_apple: | :tomato: | 369 | | `flush=,f=` | :green_apple: | :tomato: | 370 | | **`GET /api/v0/files/mkdir`** | :green_apple: | :tomato: | 371 | | `arg=` | :green_apple: | :tomato: | 372 | | `parents=,p=` | :green_apple: | :tomato: | 373 | | `flush=,f=` | :green_apple: | :tomato: | 374 | | **`GET /api/v0/files/mv`** | :green_apple: | :tomato: | 375 | | `arg=` | :green_apple: | :tomato: | 376 | | `arg2=` | :green_apple: | :tomato: | 377 | | `flush=,f=` | :green_apple: | :tomato: | 378 | | **`GET /api/v0/files/read`** | :green_apple: | :tomato: | 379 | | `arg=` | :green_apple: | :tomato: | 380 | | `offset=,o=` | :green_apple: | :tomato: | 381 | | `count=,n=` | :green_apple: | :tomato: | 382 | | `flush=,f=` | :green_apple: | :tomato: | 383 | | **`POST /api/v0/files/rm`** | :green_apple: | :tomato: | 384 | | `arg=` | :green_apple: | :tomato: | 385 | | `recursive=,r=` | :green_apple: | :tomato: | 386 | | `flush=,f=` | :green_apple: | :tomato: | 387 | | **`GET /api/v0/files/stat`** | :green_apple: | :tomato: | 388 | | `arg=` | :green_apple: | :tomato: | 389 | | `flush=,f=` | :green_apple: | :tomato: | 390 | | **`POST /api/v0/files/write`** | :green_apple: | :tomato: | 391 | | `arg=` | :green_apple: | :tomato: | 392 | | `arg2=` | :green_apple: | :tomato: | 393 | | `offset=,o=` | :green_apple: | :tomato: | 394 | | `create=,e=` | :green_apple: | :tomato: | 395 | | `truncate=,t=` | :green_apple: | :tomato: | 396 | | `count=,n=` | :green_apple: | :tomato: | 397 | | `flush=,f=` | :green_apple: | :tomato: | 398 | | **`POST /api/v0/get`** | :green_apple: | :green_apple: | 399 | | `arg=` | :green_apple: | :green_apple: | 400 | | `archive=` | :green_apple: | :tomato: | 401 | | `compress=` | :green_apple: | :tomato: | 402 | | `compression-level=-1` | :green_apple: | :tomato: | 403 | | `compression-level=0` | :green_apple: | :tomato: | 404 | | `compression-level=1` | :green_apple: | :tomato: | 405 | | `compression-level=2` | :green_apple: | :tomato: | 406 | | `compression-level=3` | :green_apple: | :tomato: | 407 | | `compression-level=4` | :green_apple: | :tomato: | 408 | | `compression-level=5` | :green_apple: | :tomato: | 409 | | `compression-level=6` | :green_apple: | :tomato: | 410 | | `compression-level=7` | :green_apple: | :tomato: | 411 | | `compression-level=8` | :green_apple: | :tomato: | 412 | | `compression-level=9` | :green_apple: | :tomato: | 413 | 414 | #### Core 415 | 416 | See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core). 417 | 418 | -------------------------------------------------------------------------------- 419 | 420 | ## File Store (IPFS Pack) 421 | 422 | > **Note:** Implementation in js-ipfs is not planned for now. 423 | 424 | #### CLI 425 | 426 | #### HTTP 427 | 428 | #### Core 429 | 430 | See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core). 431 | 432 | -------------------------------------------------------------------------------- 433 | 434 | ## Key Management 435 | 436 | > **Note:** Implementation in js-ipfs is not planned for now. 437 | 438 | #### CLI 439 | 440 | #### HTTP 441 | 442 | #### Core 443 | 444 | See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core). 445 | 446 | -------------------------------------------------------------------------------- 447 | 448 | ## Miscellaneous 449 | 450 | #### CLI 451 | 452 | | Command | Go Impl | JS Impl | 453 | | -------------------------------------------- | :-----------: | :-----------: | 454 | | **`ipfs ping`** | :green_apple: | :lemon: | 455 | | `peer ID` | :green_apple: | :tomato: | 456 | | `count` | :green_apple: | :tomato: | 457 | | **`ipfs update`** | :chestnut: | :chestnut: | 458 | | **`ipfs version`** | :green_apple: | :green_apple: | 459 | | **`ipfs commands`** | :green_apple: | :green_apple: | 460 | | **`ipfs id`** | :green_apple: | :green_apple: | 461 | | `peerid` | :green_apple: | :tomato: | 462 | | `aver` | :green_apple: | :tomato: | 463 | | `pver` | :green_apple: | :tomato: | 464 | | `pubkey` | :green_apple: | :tomato: | 465 | | `addrs` | :green_apple: | :tomato: | 466 | | **`ipfs mount`** | :green_apple: | :chesnut: | 467 | | `ipfs-path=` | :green_apple: | :chesnut: | 468 | | `ipns-path=` | :green_apple: | :chesnut: | 469 | | **`ipfs mount`** | :green_apple: | :chesnut: | 470 | 471 | #### HTTP 472 | 473 | | Endpoint | Go Impl | JS Impl | 474 | | -------------------------------------------- | :-----------: | :-----------: | 475 | | **`GET /api/v0/ping`** | :green_apple: | :lemon: | 476 | | `arg=` | :green_apple: | :tomato: | 477 | | `count=` | :green_apple: | :tomato: | 478 | | **`GET /api/v0/update`** | :chestnut: | :chestnut: | 479 | | **`GET /api/v0/version`** | :green_apple: | :green_apple: | 480 | | **`GET /api/v0/commands`** | :green_apple: | :green_apple: | 481 | | **`POST /api/v0/id`** | :green_apple: | :green_apple: | 482 | | `arg=` | :green_apple: | :green_apple: | 483 | | **`GET /api/v0/mount`** | :green_apple: | :chesnut: | 484 | | `ipfs-path=` | :green_apple: | :chesnut: | 485 | | `ipns-path=` | :green_apple: | :chesnut: | 486 | | **`GET /api/v0/mount`** | :green_apple: | :chesnut: | 487 | 488 | #### Core 489 | 490 | See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core). 491 | 492 | -------------------------------------------------------------------------------- 493 | 494 | ## Naming 495 | 496 | > **Note:** Implementation in js-ipfs is blocked until DHT is finished. 497 | 498 | #### CLI 499 | 500 | #### HTTP 501 | 502 | | Endpoint | Go Impl | JS Impl | 503 | | -------------------------------------------- | :-----------: | :-----------: | 504 | | **`POST /api/v0/name/publish`** | :green_apple: | :tomato: | 505 | | `arg=` | :green_apple: | :tomato: | 506 | | `resolve=` | :green_apple: | :tomato: | 507 | | `lifetime=` | :green_apple: | :tomato: | 508 | | `ttl=` | :green_apple: | :tomato: | 509 | | **`GET /api/v0/name/resolve`** | :green_apple: | :tomato: | 510 | | `arg=` | :green_apple: | :tomato: | 511 | | `recursive=` | :green_apple: | :tomato: | 512 | | `nocache=` | :green_apple: | :tomato: | 513 | | **`GET /api/v0/resolve`** | :green_apple: | :tomato: | 514 | | `arg=` | :green_apple: | :tomato: | 515 | | `recursive=` | :green_apple: | :tomato: | 516 | | **`GET /api/v0/dns`** | :green_apple: | :tomato: | 517 | | `arg=` | :green_apple: | :tomato: | 518 | | `recursive=` | :green_apple: | :tomato: | 519 | 520 | #### Core 521 | 522 | See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core). 523 | 524 | -------------------------------------------------------------------------------- 525 | 526 | ## Object `ipfs object` 527 | 528 | #### CLI 529 | 530 | | Endpoint | Go Impl | JS Impl | 531 | | -------------------------------------------- | :-----------: | :-----------: | 532 | | **`ipfs object data`** | :green_apple: | :green_apple: | 533 | | `key` | :green_apple: | :green_apple: | 534 | | **`ipfs object diff`** | :green_apple: | :tomato: | 535 | | `key1` | :green_apple: | :tomato: | 536 | | `key2` | :green_apple: | :tomato: | 537 | | **`ipfs object/get`** | :green_apple: | :green_apple: | 538 | | `key` | :green_apple: | :green_apple: | 539 | | `encoding` | :green_apple: | :green_apple: | 540 | | **`GET /api/v0/object/links`** | :green_apple: | :green_apple: | 541 | | `key` | :green_apple: | :green_apple: | 542 | | **`GET /api/v0/object/new`** | :green_apple: | :green_apple: | 543 | | `template` | :green_apple: | :green_apple: | 544 | | **`GET /api/v0/object/patch/append-data`** | :green_apple: | :green_apple: | 545 | | `root` | :green_apple: | :green_apple: | 546 | | `data` | :green_apple: | :green_apple: | 547 | | **`POST /api/v0/object/patch/add-link`** | :green_apple: | :green_apple: | 548 | | `root` | :green_apple: | :green_apple: | 549 | | `name` | :green_apple: | :green_apple: | 550 | | `ref` | :green_apple: | :lemon: | 551 | | `create` | :green_apple: | :tomato: | 552 | | **`POST /api/v0/object/patch/rm-link`** | :green_apple: | :green_apple: | 553 | | `root` | :green_apple: | :green_apple: | 554 | | `link` | :green_apple: | :green_apple: | 555 | | **`POST /api/v0/object/patch/set-data`** | :green_apple: | :green_apple: | 556 | | `root` | :green_apple: | :green_apple: | 557 | | `data` | :green_apple: | :green_apple: | 558 | | **`GET /api/v0/object/put`** | :green_apple: | :green_apple: | 559 | | `data` | :green_apple: | :green_apple: | 560 | | `inputenc` | :green_apple: | :green_apple: | 561 | | `datafieldenc` | :green_apple: | :tomato: | 562 | | `pin` | :green_apple: | :tomato: | 563 | | **`GET /api/v0/object/stat`** | :green_apple: | :green_apple: | 564 | | `root` | :green_apple: | :green_apple: | 565 | 566 | #### HTTP 567 | 568 | | Endpoint | Go Impl | JS Impl | 569 | | -------------------------------------------- | :-----------: | :-----------: | 570 | | **`GET /api/v0/object/data`** | :green_apple: | :green_apple: | 571 | | `arg=` | :green_apple: | :green_apple: | 572 | | **`GET /api/v0/object/diff`** | :green_apple: | :tomato: | 573 | | `arg1=` | :green_apple: | :tomato: | 574 | | `arg2=` | :green_apple: | :tomato: | 575 | | **`POST /api/v0/object/get`** | :green_apple: | :green_apple: | 576 | | `arg=` | :green_apple: | :green_apple: | 577 | | `encoding=json,enc=json` | :green_apple: | :green_apple: | 578 | | `encoding=protobuf,enc=protobuf` | :green_apple: | :green_apple: | 579 | | `encoding=xml,enc=xml` | :green_apple: | :green_apple: | 580 | | **`GET /api/v0/object/links`** | :green_apple: | :green_apple: | 581 | | `arg=` | :green_apple: | :green_apple: | 582 | | **`GET /api/v0/object/new`** | :green_apple: | :green_apple: | 583 | | `arg=unixfs-dir` | :green_apple: | :green_apple: | 584 | | **`GET /api/v0/object/patch/append-data`** | :green_apple: | :green_apple: | 585 | | `arg1=` | :green_apple: | :green_apple: | 586 | | `arg2=` | :green_apple: | :green_apple: | 587 | | **`POST /api/v0/object/patch/add-link`** | :green_apple: | :green_apple: | 588 | | `arg1=` | :green_apple: | :green_apple: | 589 | | `arg2=` | :green_apple: | :green_apple: | 590 | | `arg3=` | :green_apple: | :green_apple: | 591 | | `create=` | :green_apple: | :green_apple: | 592 | | **`POST /api/v0/object/patch/rm-link`** | :green_apple: | :green_apple: | 593 | | `arg1=` | :green_apple: | :green_apple: | 594 | | `arg2=` | :green_apple: | :green_apple: | 595 | | **`POST /api/v0/object/patch/set-data`** | :green_apple: | :green_apple: | 596 | | `arg1=` | :green_apple: | :green_apple: | 597 | | `arg2=` | :green_apple: | :green_apple: | 598 | | **`GET /api/v0/object/put`** | :green_apple: | :green_apple: | 599 | | `arg=` | :green_apple: | :green_apple: | 600 | | `inputenc` | :green_apple: | :green_apple: | 601 | | **`GET /api/v0/object/stat`** | :green_apple: | :green_apple: | 602 | | `arg=` | :green_apple: | :green_apple: | 603 | 604 | #### Core 605 | 606 | See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core). 607 | 608 | -------------------------------------------------------------------------------- 609 | 610 | ## p2p (libp2p exposed API) 611 | 612 | > **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. 613 | 614 | #### CLI 615 | 616 | #### HTTP 617 | 618 | #### Core 619 | 620 | See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core). 621 | 622 | -------------------------------------------------------------------------------- 623 | 624 | ## Pining 625 | 626 | #### CLI 627 | 628 | | Command | Go Impl | JS Impl | 629 | | -------------------------------------------- | :-----------: | :-----------: | 630 | | **`ipfs pin add`** | :green_apple: | :tomato: | 631 | | `arg=` | :green_apple: | :tomato: | 632 | | `recursive=` | :green_apple: | :tomato: | 633 | | **`ipfs pin ls`** | :green_apple: | :tomato: | 634 | | `type=` | :green_apple: | :tomato: | 635 | | `count=` | :green_apple: | :tomato: | 636 | | `quiet=` | :green_apple: | :tomato: | 637 | | **`ipfs pin rm`** | :green_apple: | :tomato: | 638 | | `arg=` | :green_apple: | :tomato: | 639 | | `recursive=` | :green_apple: | :tomato: | 640 | | **`ipfs pin update`** | :green_apple: | :tomato: | 641 | | `arg=` | :green_apple: | :tomato: | 642 | | `unpin=` | :green_apple: | :tomato: | 643 | | **`ipfs pin verify`** | :green_apple: | :tomato: | 644 | | `verbose=` | :green_apple: | :tomato: | 645 | | **`ipfs refs`** | :green_apple: | :tomato: | 646 | | `arg=` | :green_apple: | :tomato: | 647 | | `format=` | :green_apple: | :tomato: | 648 | | `edges=` | :green_apple: | :tomato: | 649 | | `unique=` | :green_apple: | :tomato: | 650 | | `recursive=` | :green_apple: | :tomato: | 651 | | **`ipfs refs local`** | :green_apple: | :tomato: | 652 | | **`ipfs refs`** | :green_apple: | :tomato: | 653 | | `arg=` | :green_apple: | :tomato: | 654 | | `format=` | :green_apple: | :tomato: | 655 | | `edges=` | :green_apple: | :tomato: | 656 | | `unique=` | :green_apple: | :tomato: | 657 | | `recursive=` | :green_apple: | :tomato: | 658 | 659 | #### HTTP 660 | 661 | | Endpoint | Go Impl | JS Impl | 662 | | -------------------------------------------- | :-----------: | :-----------: | 663 | | **`GET /api/v0/pin/add`** | :green_apple: | :tomato: | 664 | | `arg=` | :green_apple: | :tomato: | 665 | | `recursive=` | :green_apple: | :tomato: | 666 | | **`POST /api/v0/pin/ls`** | :green_apple: | :tomato: | 667 | | `type=` | :green_apple: | :tomato: | 668 | | `count=` | :green_apple: | :tomato: | 669 | | `quiet=` | :green_apple: | :tomato: | 670 | | **`GET /api/v0/pin/rm`** | :green_apple: | :tomato: | 671 | | `arg=` | :green_apple: | :tomato: | 672 | | `recursive=` | :green_apple: | :tomato: | 673 | | **`GET /api/v0/pin/update`** | :green_apple: | :tomato: | 674 | | `arg=` | :green_apple: | :tomato: | 675 | | `unpin=` | :green_apple: | :tomato: | 676 | | **`GET /api/v0/pin/verify`** | :green_apple: | :tomato: | 677 | | `verbose=` | :green_apple: | :tomato: | 678 | | **`GET /api/v0/refs`** | :green_apple: | :tomato: | 679 | | `arg=` | :green_apple: | :tomato: | 680 | | `format=` | :green_apple: | :tomato: | 681 | | `edges=` | :green_apple: | :tomato: | 682 | | `unique=` | :green_apple: | :tomato: | 683 | | `recursive=` | :green_apple: | :tomato: | 684 | | **`GET /api/v0//refs/local`** | :green_apple: | :tomato: | 685 | | **`GET /api/v0/refs`** | :green_apple: | :tomato: | 686 | | `arg=` | :green_apple: | :tomato: | 687 | | `format=` | :green_apple: | :tomato: | 688 | | `edges=` | :green_apple: | :tomato: | 689 | | `unique=` | :green_apple: | :tomato: | 690 | | `recursive=` | :green_apple: | :tomato: | 691 | 692 | #### Core 693 | 694 | See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core). 695 | 696 | -------------------------------------------------------------------------------- 697 | 698 | ## PubSub 699 | 700 | #### CLI 701 | 702 | #### HTTP 703 | 704 | #### Core 705 | 706 | See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core). 707 | 708 | -------------------------------------------------------------------------------- 709 | 710 | ## Repo 711 | 712 | #### CLI 713 | 714 | | Command | Go Impl | JS Impl | 715 | | -------------------------------------------- | :-----------: | :-----------: | 716 | | **`ipfs repo fsck`** | :green_apple: | :chestnut: | 717 | | **`ipfs repo gc`** | :green_apple: | :tomato: | 718 | | **`ipfs repo stat`** | :green_apple: | :tomato: | 719 | | **`ipfs repo verify`** | :green_apple: | :chestnut: | 720 | | **`ipfs repo version`** | :green_apple: | :green_apple: | 721 | 722 | #### HTTP 723 | 724 | | Endpoint | Go Impl | JS Impl | 725 | | -------------------------------------------- | :-----------: | :-----------: | 726 | | **`GET /api/v0/repo/fsck`** | :green_apple: | :chestnut: | 727 | | **`GET /api/v0/repo/gc`** | :green_apple: | :tomato: | 728 | | **`GET /api/v0/repo/stat`** | :green_apple: | :tomato: | 729 | | **`GET /api/v0/repo/verify`** | :green_apple: | :chestnut: | 730 | | **`GET /api/v0/repo/version`** | :green_apple: | :green_apple: | 731 | 732 | #### Core 733 | 734 | See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core). 735 | 736 | -------------------------------------------------------------------------------- 737 | 738 | ## Swarm 739 | 740 | #### CLI 741 | 742 | | Command | Go Impl | JS Impl | 743 | | -------------------------------------------- | :-----------: | :-----------: | 744 | | **`ipfs swarm addrs`** | :green_apple: | :green_apple: | 745 | | **`ipfs swarm addrs listen`** | :green_apple: | :tomato: | 746 | | **`ipfs swarm addrs local`** | :green_apple: | :green_apple: | 747 | | `id=` | :green_apple: | :tomato: | 748 | | **`ipfs swarm connect`** | :green_apple: | :green_apple: | 749 | | `arg=` | :green_apple: | :green_apple: | 750 | | **`ipfs swarm disconnect`** | :green_apple: | :green_apple: | 751 | | `arg=` | :green_apple: | :green_apple: | 752 | | **`ipfs swarm filters`** | :green_apple: | :tomato: | 753 | | **`ipfs swarm filters add`** | :green_apple: | :tomato: | 754 | | `arg=` | :green_apple: | :tomato: | 755 | | **`ipfs swarm filters rm`** | :green_apple: | :tomato: | 756 | | `arg=` | :green_apple: | :tomato: | 757 | | **`ipfs swarm peers`** | :green_apple: | :green_apple: | 758 | | `verbose=` | :green_apple: | :tomato: | 759 | | `latency=` | :green_apple: | :tomato: | 760 | | `streams=` | :green_apple: | :tomato: | 761 | 762 | #### HTTP 763 | 764 | | Endpoint | Go Impl | JS Impl | 765 | | -------------------------------------------- | :-----------: | :-----------: | 766 | | **`GET /api/v0/swarm/addrs`** | :green_apple: | :green_apple: | 767 | | **`GET /api/v0/swarm/addrs/listen`** | :green_apple: | :tomato: | 768 | | **`GET /api/v0/swarm/addrs/local`** | :green_apple: | :green_apple: | 769 | | `id=` | :green_apple: | :tomato: | 770 | | **`GET /api/v0/swarm/connect`** | :green_apple: | :green_apple: | 771 | | `arg=` | :green_apple: | :green_apple: | 772 | | **`GET /api/v0/swarm/disconnect`** | :green_apple: | :green_apple: | 773 | | `arg=` | :green_apple: | :green_apple: | 774 | | **`GET /api/v0/swarm/filters`** | :green_apple: | :tomato: | 775 | | **`GET /api/v0/swarm/filters/add`** | :green_apple: | :tomato: | 776 | | `arg=` | :green_apple: | :tomato: | 777 | | **`GET /api/v0/swarm/filters/rm`** | :green_apple: | :tomato: | 778 | | `arg=` | :green_apple: | :tomato: | 779 | | **`GET /api/v0/swarm/peers`** | :green_apple: | :green_apple: | 780 | | `verbose=` | :green_apple: | :tomato: | 781 | | `latency=` | :green_apple: | :tomato: | 782 | | `streams=` | :green_apple: | :tomato: | 783 | 784 | #### Core 785 | 786 | See [interface-ipfs-core](https://github.com/ipfs/interface-ipfs-core). 787 | 788 | -------------------------------------------------------------------------------- 789 | --------------------------------------------------------------------------------