Overview of Architecture and Components of IPFS

Looking at the github.com page for IPFS, there seems to be a lot of repository under github_dot_com/ipfs/

I am also aware of sister projects like multihash, multiaddress etc that is used within IPFS.

My question now is, where is the best place to get a good overview of the pieces and components of IPFS. A related question to that is about the IPFS white paper that can be found here. Would you consider the content of that paper a good resource to learn about the architecture of IPFS? Is up to date with the current state of IPFS? If not, where would you suggest I go find this overview?

It is hard to define a view. What kind of architectural view?

Just code dependency tree? You can probably get an ultra detailed idea with go mod graph.

A conceptual overview? You might get an idea watching some introductions to IPFS videos or reading the docs (https://docs-beta.ipfs.io/).

The paper’s general ideas are in place. Concrete details may have changed/evolved.

As you said, there are many components involved and it also depends on the implementation.

In go-libp2p, top of my mind and maybe slightly wrong:

  • multiaddresses
  • Used by Transports (tcp, quic)
  • Optionally wrapped by security transport (tls)
  • Wrapped by multiplexor (yamux)
  • Wrapped by multistream select
  • Wrapped by libp2p-swarm
  • Wrapped by libp2p-host/peerstore
  • Wrapped by dht, pubsub, bitswap and other protocols on top of libp2p

In go-IPFS:

  • go-datastore
  • wrapped by go-blockstore implementations
  • wrapped by exchange/blockservice (which use dht, bitswap)
  • wrapped by go-merkledag
  • wrapped go-ipld DAGService

Plus different parts in go-ipfs:

  • Commands/API
  • Reproviders
  • UnixFS
  • MFS

etc etc… I don’t know if this is useful at all, but it is a large codebase.

1 Like

Thanks for the response!

Just one note about these line:

I could easily find the github for the other components you mentioned: go-datastore, go-blockstore, go-merkledag etc. But not for exchange/blockservice (which use dht, bitswap) which I suspect actually refers to more than one components. Mind shedding more light here?

Thanks to you.

?

A paper on the architectural overview of IPFS is currently in the works. Hopefully a version of that will be ready within the next month or so. Will share here, but feel free to ping back. And hopefully it will answer most of your questions. Could you please point to issues that you’re looking to clarify?

Nothing specific. Just want to understand the architecture in general.

I found this diagram https://raw.githubusercontent.com/ipfs/js-ipfs/master/packages/ipfs/img/architecture.png from the js-ipfs repo, and it does a good job of giving the overview I am looking for.