From 4b1bae8bc8d4b52e33a3868ac19f76b6f1f36194 Mon Sep 17 00:00:00 2001
From: Juan Batiz-Benet <juan@benet.ai>
Date: Wed, 30 Jul 2014 02:41:26 -0700
Subject: [PATCH] dev pseudo-roadmap

---
 README.md |  1 +
 dev.md    | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 58 insertions(+)
 create mode 100644 dev.md

diff --git a/README.md b/README.md
index 414fb4028..ab3879b36 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 000000000..dc4fbe35d
--- /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)
-- 
GitLab