In the past few months we have been getting this question a lot: What do I use for managing dynamic data for my Decentralized App? We have for storing static data, but what about the data that keeps changing? InterPlanetary File System There are a number of exiting distributed databases like , , , , etc. GUN OrbitDB Scuttlebutt Textile Threads Although these existing databases are great, but we wanted a distributed database that will feel familiar, when you are coming from Web 2.0 & still has all the features that you would expect from a distributed database. Something like a distributed . MongoDB Enter AvionDB is a distributed database built on top of & . AvionDB OrbitDB IPFS When started our work on AvionDB, we had a few design goals in our mind. we Design Goals MongoDB/Mongoose like interface. Familiar developer interface: Your app can work locally without internet. For example, you can take notes on your notepad without (or even sync with other devices) connecting to the Internet. Local-first: All the data, whether it is on your device or on out in the network, it should be encrypted by default. Privacy-first: The database can be used natively on Mobile, Web & Desktop platforms. Cross-platform: How it Works? AvionDB uses OrbitDB stores to model MongoDB-like Databases. Each AvionDB instance can have several .Each Database can have several .Each Collection can have several . Databases Collections Documents The Javascript implementation works both in and with support for Linux, 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, 10, etc) are preferred. Browsers Node.js Using AvionDB with Node.js AvionDB = ( ); IPFS = ( ); ipfs = IPFS(); runExample = () => { ipfs.ready; aviondb = AvionDB.init( , ipfs); collection = aviondb.initCollection( ); aviondb.listCollections() collection.insertOne({ : , : , : , : , }); employee = collection.findOne({ : , }); .log(employee); updatedEmployee = collection.update( { : }, { : { : } } ); .log(updatedEmployee); collection.close(); aviondb.drop(); aviondb.close(); ipfs.stop(); }; runExample(); // Import modules const require "aviondb" const require "ipfs" const new const async await // Creates a db named "DatabaseName" const await "DatabaseName" // Creates a Collection named "employees" const await "employees" // Returns the List of collection names await // prints ['employees'] // Adding an employee document await hourly_pay "$15" name "Elon" ssn "562-48-5384" weekly_hours 100 // We also support multi-insert using collection.insert() // See https://github.com/dappkit/aviondb/blob/master/API.md // Search by a single field Or many! var await ssn "562-48-5384" // We also support find(), findById() // See https://github.com/dappkit/aviondb/blob/master/API.md // Returns the matching document console // Prints the above added JSON document // Update a document var await ssn "562-48-5384" $set hourly_pay '$100' // We also support updateMany(), findOneAndUpdate() // See https://github.com/dappkit/aviondb/blob/master/API.md // Returns the updated document console // Prints the updated JSON document await // Collection will be closed. await // Drops the database await // Closes all collections and binding database. await Using AvionDB with Browser <!--Using AvionDB in Browser--> <!--IPFS CDN Link--> < = > script src "https://cdn.jsdelivr.net/npm/ipfs/dist/index.min.js" </ > script <!--AvionDB CDN Link--> < = > script src "https://unpkg.com/aviondb/dist/aviondb.min.js" </ > script < = > script type "text/javascript" runExample = () => { ipfs = .Ipfs.create(); aviondb = AvionDB.init( , ipfs); collection = aviondb.initCollection( ); aviondb.listCollections() collection.insertOne({ : , : , : , : , }); employee = collection.findOne({ : , }); .log(employee); updatedEmployee = collection.update( { : }, { : { : } } ); .log(updatedEmployee); collection.close(); aviondb.drop(); aviondb.close(); ipfs.stop(); }; runExample() const async const await window // Creates a db named "DatabaseName" const await "DatabaseName" // Creates a Collection named "employees" const await "employees" // Returns the List of collection names await // prints ['employees'] // Adding an employee document await hourly_pay "$15" name "Elon" ssn "562-48-5384" weekly_hours 100 // We also support multi-insert using collection.insert() // See https://github.com/dappkit/aviondb/blob/master/API.md // Search by a single field Or many! var await ssn "562-48-5384" // We also support find(), findById() // See https://github.com/dappkit/aviondb/blob/master/API.md // Returns the matching document console // Prints the above added JSON document // Update a document var await ssn "562-48-5384" $set hourly_pay '$100' // We also support updateMany(), findOneAndUpdate() // See https://github.com/dappkit/aviondb/blob/master/API.md // Returns the updated document console // Prints the updated JSON document await // Collection will be closed. await // Drops the database await // Closes all collections and binding database. await </ > script Here is a simple . Todo List webapp What MongoDB features does AvionDB support? You can find all the supported MongoDB-like features in our . API docs RoadMap You can find our Roadmap . The features in the Roadmap are taken from 2 separate issues( , ) which individually maintain a list of feature proposals related to OrbitDB-specific improvements & AvionDB-specific improvements respectively. here #7 #8 The Roadmap is an open discussion, feel free to add your suggestions, comments. Want to build an Dapp using AvionDB but still have Questions? If you didn't find the answer to your question(s), feel free to reach us out on . Discord Contributing Take a look at our organization-wide Contributing Guide . As far as code goes, we would be happy to accept PRs! If you want to work on something, it'd be good to talk beforehand to make sure nobody else is working on it. You can reach us , or in the . on Discord issues section If you want to code but don't know where to start, check out the issues labelled , . "help wanted" "discussion" Contact Us Feel free to reach us out on . Discord Previously published at https://simpleaswater.com/intro-to-aviondb/