Flutter plugin for Couchbase Lite Community Edition, an embedded lightweight, noSQL database with live synchronization and offline support on Android and iOS.
Package selection guidance compiled from public package information, community data, and project usage.
Couchbase Lite is a lightweight, embedded NoSQL database for Flutter apps, enabling offline data storage and real-time synchronization across devices. Designed for mobile platforms, it supports Android and iOS with seamless sync capabilities via Couchbase Sync Gateway. The plugin integrates Couchbase Lite Community Edition into Flutter projects, allowing developers to store structured data locally and synchronize changes when connectivity is restored. Ideal for applications requiring reliable offline functionality and consistent data across devices.
Use cases
Offline-first mobile applications
Real-time data synchronization
Local data persistence in mobile apps
Hybrid apps needing local database
Cross-device data consistency
Key features
Embedded NoSQL database
Live synchronization with Sync Gateway
Robust offline support
Cross-platform (Android & iOS)
Lightweight and fast performance
Suitable for
Mobile app developers needing offline data
Apps requiring real-time sync
Startups building offline-capable features
Teams using NoSQL data models
Projects with limited backend infrastructure
Considerations
Requires Couchbase Sync Gateway for full sync
Limited to Android and iOS platforms
Additional setup for sync gateway integration
Learning curve for NoSQL schema design
Potential overhead for simple data needs
Original README
Original README snapshot from the linked source repository. Visit the repository for the latest content.
couchbase_lite plugin
A Flutter plugin for Couchbase Lite Community Edition. An embedded lightweight, noSQL database with live synchronization and offline support on Android and iOS.
The goal of this project is to align this library with the Swift SDK API for Couchbase Lite.
Note: This plugin is still under development, and some APIs might not be available yet.
Feedback and Pull Requests are most welcome!
Note: Included in this example is sync-gateway-config.json (Login => u: foo, p: bar)
Usage example
Below is an example for the database using the BLoC pattern ( View <-> BLoC <-> Repository <-> Database )
// Initialize the databasetry {
database = awaitDatabase.initWithName("gettingStarted");
} onPlatformException {
return"Error initializing database";
}
// Create a new document (i.e. a record) in the database.var mutableDoc = MutableDocument()
.setDouble("version", 2.0)
.setString("type", "SDK");
// Save it to the database.try{
await database.saveDocument(mutableDoc);
} onPlatformException {
return"Error saving document";
}
// Update a document.
mutableDoc = (await database.document(mutableDoc.id))?.toMutable()?.setString("language", "Dart");
if (mutableDoc != null) {
// Save it to the database.try {
await database.saveDocument(mutableDoc);
vardocument = await database.document(mutableDoc.id);
// Log the document ID (generated by the database)// and propertiesprint("Document ID :: ${document.id}");
print("Learning ${document.getString("language")}");
} onPlatformException {
return"Error saving document";
}
}
// Create a query to fetch documents of type SDK.var query = QueryBuilder
.select([SelectResult.all().from("mydocs")])
.from("gettingStarted", as: "mydocs")
.where(Expression.property("type").from("mydocs").equalTo(Expression.string("SDK")));
// Run the query.try {
var result = await query.execute();
print("Number of rows :: ${result.allResults().length}");
} onPlatformException {
return"Error running the query";
}
// Note wss://10.0.2.2:4984/my-database is for the android simulator on your local machine's couchbase database// Create replicators to push and pull changes to and from the cloud.ReplicatorConfiguration config =
ReplicatorConfiguration(database, "ws://10.0.2.2:4984/beer-sample");
config.replicatorType = ReplicatorType.pushAndPull;
config.continuous = true;
// Add authentication.
config.authenticator = BasicAuthenticator("foo", "bar");
// Create replicator (make sure to add an instance or static variable named replicator)var replicator = Replicator(config);
// Listen to replicator change events.
_listenerToken = replicator.addChangeListener((ReplicatorChange event) {
if (event.status.error != null) {
print("Error: " + event.status.error);
}
print(event.status.activity.toString());
});
// Start replication.await replicator.start();
For this getting started guide, you will need to allow using ws protocol.
As of Android Pie, version 9, API 28, cleartext support is disabled, by default. Although wss: protocol URLs are not affected, in order to use the ws: protocol, applications must target API 27 or lower, or must configure application network security as described here.
App Transport Security is enabled by default since iOS 9 and enforces applications to use HTTPS exclusively. For this getting started guide, you will disable it but we recommend to enable it in production (and enable HTTPS on Sync Gateway). In the Xcode navigator, right-click on Info.plist and open it as a source file.
Append the following inside of the XML tags to disable ATS.