OrbitDB
is a serverless, distributed, peer-to-peer database.
OrbitDB uses IPFS as its data storage and IPFS Pubsub and uses CRDTs to automatically sync databases with peers, achieving strong eventual consistency - when all updates are eventually received, all nodes will have the same state.
Table of Contents
Funding
OrbitDB is currently funded by OpenCollective. Please visit our page there to learn more.
Repositories and Architecture
The @orbitdb organization on GitHub contains many different repositories. For the most part, these are either code which relates to OrbitDB, or are various non-code repositories for documentation and the like.
Code-free repositories
- awesome-orbitdb, which is an attempt to list everything that is using OrbitDB, or could help people. Basically, what has been built?
OrbitDB
OrbitDB is a peer-to-peer database for the decentralized web (to put it succinctly). The most important repositories are:
There's also at least one workshop you can try out:
- web3-workshop - A workshop showing how to build a basic app using OrbitDB. This workshop was presented at the OrbitDB session during the #Web3 summit in Berlin, in August 2019.
And then, there are a whole host of modules. It should be noted that all of these are JavaScript modules on npm.
- crdts - A library of Conflict-Free Replicated Data Types for JavaScript. Used in orbit-db-counterstore; mostly just one function is used.
- orbit-db-cache - Actually a persistency layer, not a cache. Saves the latest HEAD of each db locally into LevelDB. Doesn't store a huge amount of data, just the amount of DBs you have. For all of the dbs you have locally, you have a hash for each.
- orbit-db-cli - CLI for OrbitDB.
- orbit-db-counterstore - Datastore in OrbitDB. Uses CRDTs, inherits from orbit-db-store.
- orbit-db-docstore - Another OrbitDB store which allows you to index a blob.
- orbit-db-eventstore - Another data model type. Like ipfs-log. Wraps into a store interface.
- orbit-db-feedstore - Database type in OrbitDB. This is exactly like eventlog, but you can delete events from the log.
- orbit-db-keystore - Keystore is actually a module that stores the keys locally. You can generate keys, it persists them in the data folder, you can import and export keys - it is basically a key manager.
- orbit-db-kvstore - KeyValue store. Another DB type in OrbitDB. This may occasionally be unclear in the code, where
kvstore
is calledkeyvalue
store. - orbit-db-pubsub - Message propagation module for OrbitDB. A layer between OrbitDB and IPFS Pubsub.
- orbit-db-store - Base class for OrbitDB data stores. A Base Class defines the common interface for all databases.
- orbit-db-test-utils - Reusable utilities for automated testing across the OrbitDB stack
- orbit-db-benchmark-runner - Benchmark runner for compatible orbit-db repositories.
- orbit-db-storage-adapter - Adapter for any leveldown-compliant store
- orbit-db-io - IO helper module used within OrbitDB
Multilingual Implementations
There has been a recent explosion of awesome, ambitions, community-driven work towards interoperability with other languages. First came the orbit-db-http-api, followed by py-orbit-db-http-client, and go-orbit-db.
These repos started as community efforts and were brought into the organization soon after. However, search GitHub - there's a lot more.
The best place to find out what is available is likely by asking in the Gitter. If you know of any other repos that ought to be included in this section, point them out to us!
Press
Materials for press (logos, formats, guidelines, etc) are available here. For interviews etc, reach out to @aphelionz on Twitter.
Other repositories?
There are other repositories that aren't in the organization around the web which are important - for instance, of course, ipfs. For now, these are the main ones in the @orbitdb organization.
If there is something missing form this list, please let us know! Either open a PR or an issue, and we'll add it. Thank you.
Naming
Why "OrbitDB"? Because it was available on GitHub, and it matches orbitdb
. Why "Orbit"? Because that is the name of the chat app built on top of orbit-db. Why was that called "Orbit"? You'll have to ask @haadcode, but it's probably something to do with the InterPlanetary File System (IPFS).
There are variants of the name. For now, the canonical versions are: OrbitDB for the general project, orbit-db
for the codebase at orbitdb/orbit-db
, @orbitdb
for the organization, and Orbit Chat for what used to be called just Orbit.
Registries
We maintain OrbitDB accounts on these registries:
Contribute
Please contribute! Dive into the issues!
Check out our contributing document for more information on how we work, and about contributing in general. Please be aware that all interactions related to OrbitDB are subject to the OrbitDB Code of Conduct.
Small note: If editing the README, please conform to the standard-readme specification.
This repository is maintained by @RichardLitt. If you've got any questions for him, feel free to open an issue or a pull request, or to email him privately. we're always looking for more maintainers!
License
This repository is only for documents. All of these are licensed under the CC-BY-SA 3.0 license © 2016-2018 Protocol Labs Inc., Haja Networks Oy. Any code is under a MIT © 2016-2018 Protocol Labs Inc., Haja Networks Oy.