![IPFS Logo] (ipfs.png)
Python implementation of IPFS, the InterPlanetary File System. Not even remotely done yet - check out [# fs1]{https://github.com/ipfs/py-ipfs/issues/1} to join the project.
IPFS is a distributed file system that seeks to connect all computing devices with the same system of files. In some ways, this is similar to the original aims of the Web, but IPFS is actually more similar to a single bittorrent swarm exchanging git objects.
IPFS could become a new major subsystem of the internet. If built right, it could complement or replace HTTP. It could complement or replace even more. It sounds crazy. It is crazy.
This repository contains the Python package ipfs
, which contains the
subpackages block
, merkledag
, naming
, and routing
, which function as
laid out in the main IPFS repo
The repo roughly looks like this::
ipfs
├─ block
├─ merkledag
├─ naming
├─ network
└─ routing
IPFS implementation in Python is a work in progress. As such, there's a few things you can do right now to help out:
- Go through the modules below and check out existing issues. This would be especially useful for modules in active development. Some knowledge of IPFS may be required, as well as the infrasture behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.
- Perform code reviews. More eyes will help a) speed the project along b) ensure quality and c) reduce possible future bugs.
- Take a look at both go-ipfs and js-ipfs (which we intend to follow to a point), and also at some of the planning repositories or issues: for instance, the libp2p spec here. Contributions here that would be most helpful are top-level comments about how it should look based on our understanding. Again, the more eyes the better.
- Add tests. There can never be enough tests.
- Contribute to the FAQ repository with any questions you have about IPFS or any of the relevant technology. A good example would be asking, 'What is a merkledag tree?'. If you don't know a term, odds are, someone else doesn't either. Eventually, we should have a good understanding of where we need to improve communications and teaching together to make IPFS and IPN better.
- TODO: write our own CONTRIBUTE.md similar to IPFS's and once we know what we're doing and who's doing it.
Not ready for prime time yet
Note: this has been lifted wholesale from js-ipfs and only lightly edited. As such, ot may still contain inconsistencies until further editing.
TODO:
- Create stubs and checklist items for relevant Python modules.
- Create and link discussion issues at least for each top level.
- Remove JS discussion issues when no longer needed.
This is the roadmap according to the JS implementation. It has Peer Routing
inside the Network
hierarchy. The above organization has both at the same level. It also has the Distributed Record Store
inside Network
, while our organization diagram also has it at first level. TODO: harmonise?
- Block
- MerkleDAG
- Network
- The libp2p-website is the spec, but for now the place to go is the roadmap readme in the go-libp2p docs.
- py-libp2p (the entry point).
- Peer Routing
- mDNS-routing
- [py-libp2p-kad-routing]JS Impl.. JS discussion issue.
- Discovery: listed separately because they have separate discussion issues in the JS repo, which might be relevant.
- py-libp2p-mdns-discovery JS Impl mDNS-discovery. JS discussion issue.
- py-libp2p-random-walkJS Impl. JS discussion issue.
- py-libp2p-railingJS Impl Bootstrap-list. JS discussion issue.
- Swarm.
- Entry point, for now let's call it py-libp2p-swarm. JS Impl. JS discussion issue.
- libp2p-identify JS implementation.
- libp2p-ping JS Impl.
- Transports: Links to JS impementations probably not needed if we go with Curio, but there's always time to delete.
- Upgrades/Crypto channel
- libp2p-tls
- libp2p-secio
- Stream Muxing
- py-spdy-stream-muxer JS Impl stream muxer. JS Discussion issue.
- libp2p-spdy JS Impl stream muxer upgrade
- Distributed Record Store. JS Discussion issue.
- Peer Routing
- Exchange
- py-bitswap JS Impl. JS Discussion issue.
- Supporting modules
- multihash/multihashing: (see discussion about the multihash/multihashing distinction )
- py-multihashing. (note: started as multihash, should be multihashing) JS Impl
- [py-multihash] Spec. Discussion Issue. Go Impl. JS Impl
- python-multiaddr Spec Go Impl. JS Impl.
- py-multistream Spec. JS Impl protocol muxer. JS Discussion issue.
- multicodec
- PeerID - JS Impl
- PeerInfo - JS Impl
- repo
- [py-ipld].
- multihash/multihashing: (see discussion about the multihash/multihashing distinction )
- specs/19.