Permalink
6a5afdd Jan 11, 2017
@diasdavid @noffle @pgte @dignifiedquire
457 lines (336 sloc) 13.6 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:

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:

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 - 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 - The DAG API

Summary: Design, agree and implement the new DAG API

Leads:

  • David
  • Juan

Tasks:

Dependencies: NA

Requirements by other projects: NA

Notes: NA

Expected date of completion: Week 3 - Oct 31

Milestone - The Files API

Summary: Achieve a 100% feature parity Unixfs Engine (with the several DAG Builders) and Files API

Leads:

  • David
  • Pedro

Tasks:

  • Import and Export files just like go-ipfs
    • unixfs-engine support of:
      • trickle-dag
      • balanced-dag-
      • sharding (HAMT)
    • ensure compatibility with go
      • import export files both implementations (tests)
      • exchange files (bitswap) betweeen both implementations (tests)
  • Files API (mfs)

Dependencies: NA

Requirements by other projects: NA

Notes:

Not having full unixfs-engine feature matching was causing the 'bitswap only requesting one block', because the exporter of unixfs-engine was not crawling through the dag formed by go-ipfs.

Bonus: Start thinking about the Importer/Exporter spec.

This milestone was added as an extra during the quarter.

Expected date of completion: NA

✔️ 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:

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
  • David
  • Friedel
  • Victor

Tasks:

Dependencies: NA

Requirements by other projects: NA

Notes: NA

Expected date of completion: Week 7 - Nov 28

Milestone - PubSub through Floodsub

Summary: Integrate Floodsubin js-ipfs, exposing the same PubSub interface offered by go-ipfs (with interoperability tested)

Leads:

  • Gavin
  • Samuli

Tasks:

Dependencies: NA

Requirements by other projects: NA

Notes:

Expected date of completion: NA



Cached milestones (to re-evaluate for next quarter)

Tasks:

  • Amazing examples
  • Revisit and complete the IPFS spec
  • IPNS
  • pinning API
  • ping

Milestone - 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 https://github.com/ipfs/specs/pull/57 https://github.com/ipfs/js-ipfs/issues/41
repo https://github.com/ipfs/specs/tree/master/repo https://github.com/ipfs/js-ipfs/issues/51
network layer https://github.com/ipfs/specs/tree/master/libp2p https://github.com/diasdavid/js-libp2p/issues
bitswap https://github.com/ipfs/js-ipfs/issues/51 https://github.com/ipfs/js-ipfs/issues/51
pin https://github.com/ipfs/js-ipfs/issues/59
files https://github.com/ipfs/js-ipfs/issues/60
daemon https://github.com/ipfs/js-ipfs/issues/57
object https://github.com/ipfs/js-ipfs/issues/58
block https://github.com/ipfs/js-ipfs/issues/50
bootstrap https://github.com/ipfs/js-ipfs/issues/46
init https://github.com/ipfs/js-ipfs/issues/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. (walking around the graph)
      • local
    • repo
      • init
      • stat
      • gc
    • pin
      • add
      • ls
      • rm
  • extensions
    • name (IPNS)
      • publish
      • resolve
    • dns
      • resolve
    • tar
      • add
      • cat
    • files
      • add
      • cat
      • get
    • stat - Statistics about everything
      • bw
    • bootstrap
      • add
      • list
      • rm
    • bitswap
      • stat
      • unwant
      • wantlist
  • tooling
    • commands
    • 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
      • peers