OrbitDB
OrbitDB is a serverless, distributed, peer-to-peer database that utilizes IPFS for data storage and Libp2p Pubsub for automatic synchronization across peers. It employs Merkle-CRDTs to ensure conflict-free database writes and merges, making it suitable for decentralized applications, blockchain integrations, and local-first web apps. OrbitDB offers various database types tailored to different use cases: 'events' for immutable append-only logs, 'documents' for JSON document storage indexed by a specified key, 'keyvalue' for traditional key-value pairs, and 'keyvalue-indexed' for LevelDB-indexed key-value data. All these databases are built atop OpLog, an immutable, cryptographically verifiable, operation-based CRDT structure. The JavaScript implementation supports both browser and Node.js environments, with a Go version maintained by the Berty project.
Learn more
WatermelonDB
WatermelonDB is a reactive database framework designed to build powerful React and React Native apps that scale from hundreds to tens of thousands of records while remaining fast. It ensures instant app launch regardless of data volume, supports lazy loading to load data only when needed, and offers offline-first capabilities with synchronization to your own backend. It is multiplatform. Optimized for React, it allows easy integration of data into components and is framework-agnostic, enabling the use of its JavaScript API with other UI frameworks. Built on a robust SQLite foundation, WatermelonDB provides static typing with Flow or TypeScript and optional reactivity through an RxJS API. WatermelonDB addresses performance issues in complex applications by loading nothing until requested and performing all querying directly on SQLite on a separate native thread, ensuring most queries resolve instantly.
Learn more
Realm
Realm is a mobile-first, open source object database designed to run directly inside phones, tablets, and wearables. It provides a simple, object-oriented data model that eliminates the need for an ORM, allowing developers to define models as regular classes in languages like Swift, Java, Kotlin, C#, JavaScript, Dart, and C++. Realm's architecture ensures high performance and low memory usage by employing a zero-copy design, lazy loading, and multi-version concurrency control (MVCC) for thread-safe operations. It's live objects and collections automatically update across threads, enabling reactive programming patterns. Realm supports relationships between objects via links and backlinks, facilitating complex data structures. Developers can utilize tools like Realm Studio to inspect and manipulate local Realm databases and integrate Realm into various platforms, including React Native, Flutter, Xamarin, and Node.js.
Learn more
Core Data
Use Core Data to save your application’s permanent data for offline use, to cache temporary data, and to add undo functionality to your app on a single device. To sync data across multiple devices in a single iCloud account, Core Data automatically mirrors your schema to a CloudKit container. Through Core Data’s Data model editor, you define your data’s types and relationships, and generate respective class definitions. Core Data can then manage object instances at runtime to provide several features. Core Data abstracts the details of mapping your objects to a store, making it easy to save data from Swift and Objective-C without administering a database directly. Core Data’s undo manager tracks changes and can roll them back individually, in groups, or all at once, making it easy to add undo and redo support to your app. Perform potentially UI-blocking data tasks, like parsing JSON into objects, in the background.
Learn more