Skip to content

Latest commit

 

History

History
489 lines (340 loc) · 12.4 KB

ROADMAP.md

File metadata and controls

489 lines (340 loc) · 12.4 KB

IPFS JavaScript Implementation roadmap

We track the development of the js-ipfs project through Github issues and Waffle.io. See our waffle board at: https://waffle.io/ipfs/js-ipfs


2016 Q3

✔️ Milestone - js-ipfs on the browser

Summary: This milestone's focus is to ship a version of js-ipfs that can be embed in browser applications, creating an IPFS node inside a browser web application.

Tasks:

  • files API
    • js-ipfs-unixfs
    • fixed size chunker
    • unixfs layout
    • jsipfs files add
    • jsipfs files get
  • jsipfs swarm
    • listen on WebSockets + TCP
    • spdy support
    • identify protocol
    • multistream
    • connect
    • interop with go-ipfs
  • block API
  • object API
    • js-ipfs-merkle-dag
  • repo API
  • bitswap
  • js-libp2p
    • js-libp2p-swarm
    • js-libp2p-tcp
    • js-libp2p-websockets
    • js-libp2p-spdy
    • js-multiaddr
    • js-multistream
    • js-peer-id
    • js-peer-info
    • js-webcrypto

Notes:

  • This release won't
    • support WebRTC, the communication between browser and machine nodes will happen through WebSockets+SPDY
    • support DHT (Kademlia Routing and Record Store)

UPDATE:

Milestone - Quality and correctness of the JavaScript Implementation

Summary: The focus of this milestone is quality of the JavaScript implementation so that users of the library can build their applications with confidence.

Tasks:

Extra:

  • Migration to pull-streams - ipfs#403
  • Test js-ipfs using ipfs-api through http-api with interface-ipfs-core tests
    • test-block
    • test-object
    • test-files
    • test-config
    • test-swarm

Dependencies:

Notes:

  • We will be defining the API in interface-ipfs-core, however some pieces like DHT, mfs and pinning will not be available in js-ipfs.
Expected date of completion: late August

2016 Q4

✔️ Milestone - The InterPlanetary JavaScript

Summary: Settle in what will be the 'good parts' for us to use accross JS projects

Leads:

  • David
  • Friedel
  • Victor
  • Richard

Tasks:

  • Create an issue for each of the 'parts' that needs to be discussed
  • Parts:
    • Supported Runtimes ipfs#536
    • Bundling js-ipfs and js-ipfs-api ipfs#429
    • Node.js version to support
    • Flow control library -> Natural convergence happened - use Async
    • Exposed Interfaces ipfs#557
    • Improving init ipfs#556
    • Getters and Setters - ipfs#267

Dependencies: NA

Requirements by other projects: NA

Notes: NA

Expected date of completion: Week 1 - October 17 to create the issues, discussion will happen throughout the quarter

Milestone - interface-floodsub

Summary: Define an interface for floodsub, that can be implemented for js-ipfs and js-ipfs-api

Leads:

  • David
  • Juan

Tasks:

  • Create interface-floodsub.md on pubsub-notes repo - ipfs#580

Dependencies: NA

Requirements by other projects:

This is a requirement to integrate floodsub in js-ipfs

Notes: NA

Expected date of completion: Week 1 - October 17

✔️ Milestone - Awesome IPLD - Enable js-ipfs to handle both merkledag protobufs and ipld cbor objects

Summary: Integration of IPLD (js-ipld and js-ipld-ipfs) into js-ipfs.

Leads:

  • David

Tasks:

Dependencies:

  • CID spec
  • go-ipfs with IPLD already integrated (it would be best)

Requirements by other projects:

  • everyone is waiting for this

Notes: NA

Expected date of completion: Week 2 - Oct 24

✔️ Milestone - Async Crypto

Summary: Move away from bundling in node-forge and use the WebCrypto browser primitives directly

Leads:

  • Friedel

Tasks:

Dependencies: NA

Requirements by other projects: NA

Notes: NA

Expected date of completion: Week 2 - Oct 24

Milestone - Bitswap Complete

Summary: Make js-ipfs-bitswap work at the same level go-ipfs-bitswap

Leads:

  • David
  • Friedel

Tasks:

NA

Dependencies: NA

Requirements by other projects: NA

Notes: NA

Expected date of completion: Week 3 - Oct 31

Milestone - js-ipfs and js-ipfs-api bundling

Summary: Make it work with any bundler, out of the box or provide proper documentation if not possible.

Leads:

  • Friedel

Tasks:

Dependencies: NA

Requirements by other projects: NA

Notes: NA

Expected date of completion: Week 3 - Oct 31

Milestone - Documentation of all the modules

Summary:

Leads:

  • Friedel

Tasks: NA

Dependencies: NA

Requirements by other projects: NA

Notes: NA

Expected date of completion: Week 6 - Nov 21

Milestone - Quick Start examples for js-ipfs and js-ipfs-api

Summary:

Leads:

  • Samuli

Tasks:

NA

Dependencies: NA

Requirements by other projects: NA

Notes: NA

Expected date of completion: Week 7 - Nov 28

Cached milestones (to re-evaluate for next quarter)

Milestone 4 - Documentation and Developer Experience

Summary: During this period, we will focus on bringing great developer experience to js-ipfs, this includes: great examples, documentation, tutorials, blog posts and more, enabling more developers to hack with js-ipfs or contribute to the project.

Tasks:

  • Amazing examples
    • Create the same examples available on https://ipfs.io/docs/examples/ using js-ipfs (through CLI and programatically)
    • Example: Create an IPFS node
    • Examples: Add files to IPFS
    • Tutorial: Build an 'pastebin' with js-ipfs
    • Tutorial: How to use js-ipfs in the browser
    • Tutorial: Make a video player with js-ipfs ipfs#128
    • Tutorial: Load a Webpage/WebApplication using js-ipfs
    • Add all of the examples to https://ipfs.io/docs/examples/
  • Revisit and complete the IPFS spec

Dependencies:

NA

Requirements by other projects:

NA

Notes:

NA

Expected date of completion: TBA

Milestone 5 - 1st implementation Peer Routing + Content Routing (the go-ipfs DHT)

Summary: Enable content discovery in js-ipfs

Tasks:

  • js-ipfs-dht

Dependencies:

NA

Requirements by other projects:

NA

Notes:

NA

Expected date of completion: TBA

Milestone 6 - The last miles for complete feature parity with go-ipfs

Summary: 100% feature parity and interop with go-ipfs

Tasks:

  • mfs
  • ipns
  • HAMT on unixfs-engine
  • ls
  • pinning
  • ping

Dependencies:

NA

Requirements by other projects:

NA

Notes:

Expected date of completion: TBA

Milestone 7 - Shoot for the moon 🌑

Summary: Grandiose ideas to make the js-ipfs project really awesome. It might take some time to get to them, but writting them down is always good.

Tasks:

  • InterPlanetary Lab - A test lab for the IPFS project, spawning nodes in different geographic locations with different network and machine conditions to really stress test IPFS (heavily inspired by PlanetLab)

Dependencies:

NA

Requirements by other projects:

NA

Notes:

NA

Expected date of completion: TBA

Project Status

Per component view

Name Spec Disc
Importers ipfs/specs#57 ipfs#41
repo https://github.com/ipfs/specs/tree/master/repo ipfs#51
network layer https://github.com/ipfs/specs/tree/master/libp2p https://github.com/diasdavid/js-libp2p/issues
bitswap ipfs#51 ipfs#51
pin ipfs#59
files ipfs#60
daemon ipfs#57
object ipfs#58
block ipfs#50
bootstrap ipfs#46
init ipfs#42

Per feature view

  • core
    • version
    • daemon
    • id
    • block
      • get
      • put
      • stat
    • object - Basic manipulation of the DAG
      • data
      • get
      • links
      • new
      • patch
      • put
      • stat
    • refs - Listing of references. (alking around the graph)
      • local
    • repo
      • init
      • stat
      • gc
    • pin
      • add
      • ls
      • rm
    • log
      • level
      • tail
  • extensions
    • name (IPNS)
      • publish
      • resolve
    • dns
      • resolve
    • tar
      • add
      • cat
    • tour
      • list
      • next
      • restart
    • files
      • add
      • cat
      • get
    • stat - Statistics about everything
      • bw
    • mount
    • bootstrap
      • add
      • list
      • rm
    • bitswap
      • stat
      • unwant
      • wantlist
  • tooling
    • commands
    • update
    • init - sugar on top of ipfs repo init
    • config
      • edit
      • replace
      • show
  • network (bubbles up from libp2p)
    • ping
    • dht
      • findpeer
      • findprovs
      • get
      • put
      • query
    • swarm
      • addrs
      • connect
      • disconnect
      • filters
      • peers
    • records (IPRS)
      • put
      • get