diff --git a/README.md b/README.md index 414fb4028461dc6fc24c0bb17fd11045a302f8ec..ab3879b36305a5ba17676db0e37d1606bc9b5cb2 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ go-ipfs is MIT licensed open source software. We welcome contributions big and s Guidelines: +- see the [dev pseudo-roadmap](dev.md) - please adhere to the protocol described in [the main ipfs repo](https://github.com/jbenet/ipfs) and [paper](http://static.benet.ai/t/ipfs.pdf). - please make branches + pull-request, even if working on the main repository - ask questions or talk about things in [Issues](https://github.com/jbenet/go-ipfs/issues) or #ipfs on freenode. diff --git a/dev.md b/dev.md new file mode 100644 index 0000000000000000000000000000000000000000..dc4fbe35db1ecfe84657467663047ace05ffd4f8 --- /dev/null +++ b/dev.md @@ -0,0 +1,57 @@ +# go-ipfs development + +This is a simple description of where the codebase stands. + +There are multiple subpackages: + +- `bitswap` - the block exchange +- `blocks` - retrieve blocks for the core node +- `cmd/ipfs` - cli ipfs tool - the main **entrypoint** atm +- `config` - load/edit configuration +- `core` - the core node, joins all the pieces +- `fuse/readonly` - mount `/ipfs` as a readonly fuse fs +- `importer` - import files into ipfs +- `merkledag` - merkle dag data structure +- `path` - path resolution over merkledag data structure +- `peer` - identity + addresses of local and remote peers +- `routing` - the routing system +- `routing/dht` - the dht default routing system implementation +- `swarm` - connection multiplexing, many peers and many transports +- `util` - various utilities + + +### What's done: + +- merkle dag data structure +- path resolution over merkle dag +- local storage of blocks +- basic file import/export (`ipfs add`, `ipfs cat`) +- mounting `/ipfs` (try `{cat, ls} /ipfs/<path>`) +- multiplexing connections (tcp atm) +- peer addressing + +### What's next: + +- dht - impl basic kademlia routing +- bitswap - impl basic block exchange functionality +- ipns - impl `/ipns` obj publishing + path resolution +- **(at this point should have func similar to bittorrent)** +- block splitting on import - Rabin fingerprints, etc +- version control - `commit` like data structure +- expose objects to the web at `http://ipfs.io/<path>` +- more... + +## Cool demos + +A list of cool demos to work towards + +- boot a VM from an image in ipfs +- boot a VM from a filesystem tree in ipfs +- publish static websites directly from ipfs +- expose objects to the web at `http://ipfs.io/<path>` +- mounted auto-committing versioned personal dropbox +- mounted encrypted personal/group dropbox +- mounted {npm, apt, other pkg manager} registry +- open a video on ipfs, stream it in +- watch a video with a topology of 1 seed N leechers (N ~100) +- more in section 3.8 in the [paper](http://http://static.benet.ai/t/ipfs.pdf)