Skip to content
@orbitdb

OrbitDB

Peer-to-Peer Databases for the Decentralized Web

☄️💫 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.

Matrix

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.

OrbitDB Dependency Graph

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:

  • orbit-db - The main repo for OrbitDB.
  • ipfs-log - The most important module used by OrbitDB.

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 called keyvalue 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.

Pinned

  1. orbit-db Public

    Peer-to-Peer Databases for the Decentralized Web

    JavaScript 7.7k 562

  2. The Offical User's Guide to OrbitDB

    JavaScript 201 45

  3. UI for managing OrbitDB databases

    JavaScript 79 31

  4. ipfs-log Public

    Append-only log CRDT on IPFS

    JavaScript 384 64

Repositories