+++ title = "Multiformats" stars = "multiformats/multiformats" +++
Self-describing values for Future-proofing
Every choice in computing has a tradeoff. This includes formats, algorithms, encodings, and so on. And even with a great deal of planning, decisions may lead to breaking changes down the road, or to solutions which are no longer optimal. Allowing systems to evolve and grow is important.
What are Multiformats?
The Multiformats Project is a collection of protocols which aim to future-proof systems, today. They do this mainly by enhancing format values with self-description. This allows interoperability, protocol agility, and helps us avoid lock in.
The self-describing aspects of the protocols have a few stipulations:
- They MUST be in-band (with the value); not out-of-band (in context).
- They MUST avoid lock-in and promote extensibility.
- They MUST be compact and have a binary-packed representation.
- They MUST have a human-readable representation.
Currently, we have the following multiformat protocols:
- multihash - self-describing hashes
- multiaddr - self-describing network addresses
- multibase - self-describing base encodings
- multicodec - self-describing serialization
- multistream - self-describing stream network protocols
- multigram (WIP) - self-describing packet network protocols
Each of the projects has its list of implementations in various languages.
Several of the multiformats have stable specs and stable implementations. We're are working on the others. We prioritize their usage as soon as possible, as what they offer -- protocol interoperability and future-proofing -- has real-world consequences today.
Towards that end, we are encouraging improvements to WIP protocols, and implementations of all. Please contribute to the projects on Github.
A note on the word Multiformats
Multiformats is the name for the organization, but it can also be used to refer to protocols; for instance, in the sentence "Use one of the multiformats". Formats is interchangeable with protocols, here. We try to capitalize Multiformats when it refers to the organization, on GitHub.
Projects using Multiformats
The Multiformats project began through the IPFS Project. It is used extensively in projects like
- IPFS - a peer-to-peer hypermedia protocol and distributed file system.
- libp2p - a modular network library for peer-to-peer protocols.
- (add yours here)
Contribute & Community
The Multiformats Project is an Open Source software project. It is built by a large community of contributors. Please join us on Github or IRC to request features, file bugs, contribute code, improve documentation, and ask questions. We have a very open and welcoming community.