graph_db 0.0.1
graph_db: ^0.0.1 copied to clipboard
Flutter graph database plugin
graph_db #
A Flutter FFI plugin for graph database functionality, enabling you to store and query graph structures (nodes and edges) in your Flutter applications.
⚠️ Alpha Version #
This package is currently in alpha status. The API may change in future versions. Use in production environments is not recomended.
Platform Support #
This package is designed to work on the following platforms:
- ✅ Android (tested)
- ✅ iOS (planned)
- ✅ Linux (planned)
- ✅ macOS (planned)
- ✅ Windows (planned)
- ❌ Web (not supported)
Note: Currently, only Android has been tested. Support for other platforms (excluding web) is planned but not yet verified.
Features #
- Store and retrieve graph nodes
- Create and query edges between nodes
- Persistent storage using native C++ implementation
- Type-safe API with Dart generics
- JSON serialization support
Getting Started #
Installation #
Add graph_db to your pubspec.yaml:
dependencies:
graph_db: ^0.0.1
Usage #
1. Define your Node and Edge classes
import 'package:graph_db/domain/node.dart';
import 'package:graph_db/domain/edge.dart';
class PersonNode extends Node {
final String name;
final int age;
PersonNode({
required String id,
required this.name,
required this.age,
}) : super(id: id);
@override
Map<String, dynamic> toJson() {
return {
'id': id,
'name': name,
'age': age,
};
}
}
class FriendshipEdge extends Edge {
@override
final String from;
@override
final String to;
@override
final double weight;
FriendshipEdge({
required this.from,
required this.to,
this.weight = 1.0,
});
@override
Map<String, dynamic> toJson() {
return {
'from': from,
'to': to,
'weight': weight,
};
}
}
2. Initialize the database
import 'package:graph_db/domain/box.dart';
final box = await Box.init('my_graph_db');
3. Save nodes and edges
// Save nodes
final alice = PersonNode(id: '1', name: 'Alice', age: 30);
final bob = PersonNode(id: '2', name: 'Bob', age: 25);
await box.saveNodes(alice);
await box.saveNodes(bob);
// Save edges
final friendship = FriendshipEdge(from: '1', to: '2', weight: 1.0);
await box.saveEdges(friendship);
4. Load nodes and edges
// Load a node
final person = box.loadNode<PersonNode>(
'1',
serializer: (json) => PersonNode(
id: json['id'] as String,
name: json['name'] as String,
age: json['age'] as int,
),
);
// Load edges from a node
final edges = box.loadEdges<FriendshipEdge>(
'1',
serializer: (json) => FriendshipEdge(
from: json['from'] as String,
to: json['to'] as String,
weight: (json['weight'] as num).toDouble(),
),
);
Project Structure #
This plugin uses Flutter FFI to interact with native C++ code:
src: Contains the native C++ source code and CMakeLists.txt for building the dynamic librarylib: Contains the Dart code that defines the API and calls into native code usingdart:ffi- Platform folders (
android,ios,windows, etc.): Contains build files for bundling the native library
Building Native Code #
The native bindings are generated from the header file (src/graph_db.h) using package:ffigen.
To regenerate the bindings:
dart run ffigen --config ffigen.yaml
License #
This package is free and open source. See LICENSE file for details.
Contributing #
Contributions are welcome! Please feel free to submit a Pull Request.