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
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.
- 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
- 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:
- For Milestone 1, we also added:
- WebRTC transport with libp2p-webrtc-star
- secio
Summary: The focus of this milestone is quality of the JavaScript implementation so that users of the library can build their applications with confidence.
- Interface definition, documentation and test coverage for both js-ipfs and js-ipfs-api. The
interface-ipfs-core
effort.- Create a process to signal users of a proposed interface change and interface changelog. ipfs-inactive/interface-js-ipfs-core#55
- swarm API - ipfs-inactive/interface-js-ipfs-core#35
- block API - ipfs-inactive/interface-js-ipfs-core#32
- generic API - ipfs-inactive/interface-js-ipfs-core#33
- pinning API - ipfs-inactive/interface-js-ipfs-core#34
- swarm API - ipfs-inactive/interface-js-ipfs-core#35
- DHT API ipfs-inactive/interface-js-ipfs-core#36
- mfs API ipfs-inactive/interface-js-ipfs-core#38
- Robust testing infrastructure
- Isolation of tests. This includes:
- Avoid cases where there is one set up for a bunch of test files, instead make each test file be runnable by itself. This also includes removing the use of all globals (i.e js-ipfs-api).
- Interoperability tests between js-ipfs and go-ipfs
- Benchmarking tests - ipfs#488
- Stress tests, things like:
- Spawn a reasonable amount of nodes
- Add large files
- Exchange large files
- IPTB (InterPlanetary TestBed) Integration
- Isolation of tests. This includes:
- Fixed identified bugs to date
- 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
- js-ipfs needs the following from go-ipfs (preferrably in a release) (ipfs/kubo#2738):
- Do not assume that the Public Key is only transfered in secio
- Websockets support (really nice to have)
- use the defined protocol multicodecs https://github.com/ipfs/specs/blob/master/libp2p/7-properties.md#757-protocol-multicodecs
- go-libp2p scripts for libp2p interop testing https://github.com/ipfs/js-libp2p-ipfs/issues/15
- 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.
Summary: Settle in what will be the 'good parts' for us to use accross JS projects
- David
- Friedel
- Victor
- Richard
- Create an issue for each of the 'parts' that needs to be discussed
- Parts:
Expected date of completion: Week 1 - October 17 to create the issues, discussion will happen throughout the quarter
Summary: Define an interface for floodsub, that can be implemented for js-ipfs and js-ipfs-api
- David
- Juan
- Create interface-floodsub.md on pubsub-notes repo - ipfs#580
This is a requirement to integrate floodsub in js-ipfs
✔️ 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.
- David
- Awesome IPLD endeavour PR - ipld/js-ipld#60
- CID spec
- go-ipfs with IPLD already integrated (it would be best)
- everyone is waiting for this
Summary: Move away from bundling in node-forge and use the WebCrypto browser primitives directly
- Friedel
- ipfs#485 (the PR of PRs)
Summary: Make js-ipfs-bitswap work at the same level go-ipfs-bitswap
- David
- Friedel
NA
Summary: Make it work with any bundler, out of the box or provide proper documentation if not possible.
- Friedel
Summary:
- Friedel
Summary:
- Samuli
NA
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.
- 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
NA
NA
NA
Summary: Enable content discovery in js-ipfs
- js-ipfs-dht
NA
NA
NA
Summary: 100% feature parity and interop with go-ipfs
- mfs
- ipns
- HAMT on unixfs-engine
- ls
- pinning
- ping
NA
NA
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.
- 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)
NA
NA
NA
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 |
- 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
- name (IPNS)
- 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