OrbitDB is a serverless, distributed, peer-to-peer database . OrbitDB uses IPFS as its data storage and IPFS Pubsub to automatically sync databases with peers. It’s an eventually consistent database that uses CRDTs for conflict-free database merges making OrbitDB an excellent choice for decentralized apps (dApps), blockchain applications and offline-first web applications.
it is live at (Live demo 1 , Live demo 2 , or P2P TodoMVC app !
OrbitDB provides various types of databases for different data models and use cases:
(log : an immutable (append-only) log with traversable history. Useful for “latest N” (use cases or as a message queue.) feed : a mutable log with traversable history. Entries can be added and removed. Useful for
: Useful for counting events separate from log / feed data.
All databases are implemented on top of ipfs -log , an immutable, operation-based conflict-free replicated data structure (CRDT) for distributed systems. If none of the OrbitDB database types match your needs and / or you need case-specific functionality, you can easily implement and use a custom database store of your own.
(Project status & support)
Status: in active development
This is the Javascript implementation and it works both in Browsers and Node.js with support for Linux and OS X and Windows. The minimum required version of Node.js is now 8.6.0 due to the usage of … spread syntax. LTS versions (even numbered versions 8, , etc) are preferred.
To use with older versions of Node.js, we provide an ES5-compatible build through the npm package, located in (dist / es5 / when installed through npm. () Community Calls
We also have regular community calls, which we announce in the issues in the @orbitdb welcome repository
. Join us!Read the GETTING STARTED guide for a quick tutorial on how to use OrbitDB.
For a more in-depth tutorial and exploration of OrbitDB’s architecture, please check out the OrbitDB Field Manual
. (CLI)For the CLI tool to manage orbit-db database, see OrbitDB CLI
.It can be installed from npm with:
npm install orbit-db-cli -g Module with IPFS Instance
If you're using (orbit-db) to develop browser or Node.js applications, use it as a module with the javascript instance of IPFS
Install dependencies:
npm install orbit-db ipfs
=={ (return) (await) (IPFS) . create ({repo : ./ path-for-js-ipfs-repo) (const) OrbitDB =require ' orbit-db (') ) // (For js-ipfs>=0.) // Create IPFS instance (const) initIPFSInstance = (async) ()
}); }; (initIPFSInstance) (). then () (async) (ipfs)" (world) = (db) . (iterator) ({limit : - (1) }). (collect (); (console) . (log) () (JSON) . (stringify) (), (null) , (2) ); }); // (For js-ipfs (const) (ipfsOptions) ={ (EXPERIMENTAL) { pubsub : (true) } }; ipfs=(new) (IPFS) (ipfsOptions); (initIPFSInstance) (). then () (ipfs) (=>) { (ipfs) . (on) ()=>{ (const) orbitdb =(await) (OrbitDB) . createInstance (ipfs); // Create / Open a database (const) (db) = (await) orbitdb . (log) ( " hello (db) . (events) (on) ( (replicated)
, (address) ==> { (console) . (log) () (db) . iterator ({limit : - (1) }). (collect) ()); }); // (Add an entry) (const) (hash) =(await) (db) . (add) ()
" (error) , (e) => (console) . (error) (e)); (ipfs) . (on) ()" (ready) , (async) ()=>" hello (db) . (events) (on) ( (replicated){ (const) orbitdb =(await) (OrbitDB) . createInstance (ipfs); // Create / Open a database (const) (db) = (await) orbitdb . (log) (
, (address) ==> { (console) . (log) () (db) . iterator ({limit : - (1) }). (collect) ()); }); // (Add an entry) (const) (hash) =(await) (db) . (add) ()
" (world); (console) . (log) (hash); // (Query) (const) (result) =(db) . (iterator) ({limit
: - (1) }). (collect (); (console) . (log) () (JSON) . (stringify) (), (null) , (2) ); }); }); Module with IPFS DaemonAlternatively, you can use
ipfs-api
with a locally running IPFS daemon. Use this method if you're using orbitd-db (to develop backend or
applications, eg. with (Electron) .
Install dependencies:
npm install orbit-db ipfs-http-client
' ipfs-http-client ' ) (const) OrbitDB = require
' orbit-db (')
) (const) (ipfs) = IpfsClient ' (localhost) ' ,' '(const) (orbitdb)==(await) OrbitDB . createInstance (ipfs) (const) (db) =(await) orbitdb . (log) ( ' hello
() (Examples) Install dependencies
git clone https://github.com/ orbitdb / orbit-db.git cd orbit-db npm install
You'll also need babel and webpack, if you don't have them installed already:
npm install - global babel-cli npm install --global webpack
Some dependencies depend on native addon modules, so you'll also need to meet node-gyp's installation prerequisites. Therefore, Linux users may need to
make clean && make
to redo the local package-lock.json with working native dependencies.
Browser example
In macOS:
npm run build npm run examples: browser-macos
In Linux:
npm run build npm run examples: browser-linux
Check the code in (examples / browser / browser.html and try the (live example) .
(Node.js example) npm run examples: node
See the code in examples / eventlog.js and run it with:
node examples / eventlog.js
We have a field manual which has much more detailed examples and a run-through of how to understand OrbitDB, at orbitdb / field-manual . There is also a workshop you can follow, which shows how to build an app, at orbit-db / web3-workshop
.
More examples at (examples .) Packages
OrbitDB uses the following modules:
(ipfs (ipfs-log ipfs- pubsub-room crdts orbit-db-cache orbit-db-pubsub
orbit-db-identity-provider orbit-db-access-controllers
(OrbitDB Store Packages) orbit-db-store
orbit-db-feedstore orbit-db-kvstore orbit-db-docstore orbit-db-counterstore
To understand a little bit about the architecture, check out a visualization of the data flow at https://github.com / haadcode / proto2 or a live demo: http: //celebdil.benet.ai: 72672 / ipfs / Qmezm7g8mBpWyuPk6D CNcfLKJwU6mpXuEN5GJZNkX3XK / .
Community-maintained Typescript typings are available here: https: // github .com / orbitdb / orbit-db-types
-
. Join us!
If you want to code but don't know where to start, check out the issues labeled
.Please note that we have a
, and that all activity in the @ orbitdb organization falls under it. Read it when you get the chance, as being part of this community means that you agree to abide by it. Thanks.() (Sponsors)
The development of OrbitDB has been sponsored by:
Haja Networks (Protocol Labs Maintainer Mountaineer
If you want to sponsor developers to work on OrbitDB, please reach out to @ haadcode .
License
(MIT) (© - Protocol Labs Inc., Haja Networks Oy
GIPHY App Key not set. Please check settings