dev.md 2.05 KB
Newer Older
Juan Batiz-Benet's avatar
Juan Batiz-Benet committed
1 2 3 4 5 6 7
# go-ipfs development

This is a simple description of where the codebase stands.

There are multiple subpackages:

- `bitswap` - the block exchange
Jeromy Johnson's avatar
Jeromy Johnson committed
8 9
- `blocks` - handles dealing with individual blocks and sharding files
- `blockservice` - handles getting and storing blocks
Juan Batiz-Benet's avatar
Juan Batiz-Benet committed
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
- `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
Jeromy Johnson's avatar
Jeromy Johnson committed
33
- dht - impl basic kademlia routing
Juan Batiz-Benet's avatar
Juan Batiz-Benet committed
34

Jeromy Johnson's avatar
Jeromy Johnson committed
35
### What's in progress:
Juan Batiz-Benet's avatar
Juan Batiz-Benet committed
36 37

- bitswap - impl basic block exchange functionality
Jeromy Johnson's avatar
Jeromy Johnson committed
38 39 40

### What's next:

Juan Batiz-Benet's avatar
Juan Batiz-Benet committed
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
- 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)