DuckDB.Dart is the native Dart API for DuckDB, enabling developers to harness the power of DuckDB in Dart-based applications across Apple, iOS, Android, Linux, and Windows platforms.
DuckDB is a high-performance analytical database system known for its speed, reliability, and ease of use. It supports a comprehensive SQL dialect, offering features such as:
- Arbitrary and nested correlated subqueries
- Window functions
- Collations
- Complex types (arrays, structs)
For more information on DuckDB's goals and capabilities, visit the Why DuckDB page.
DuckDB.Dart is the native Dart API for DuckDB, enabling developers to harness the power of DuckDB in Dart-based applications across Apple, iOS, Android, Linux, and Windows platforms.
DuckDB is a high-performance analytical database system known for its speed, reliability, and ease of use. It supports a comprehensive SQL dialect, offering features such as:
- Arbitrary and nested correlated subqueries
- Window functions
- Collations
- Complex types (arrays, structs)
For more information on DuckDB's goals and capabilities, visit the Why DuckDB page.
- Setup Dart SDK, Getting Started
- Install FVM, Getting Started
- Run Flutter Doctor to ensure everything is setup correctly.
fvm flutter doctor
make build
- Android Studio is required to build the Android binaries, Install Studio.
- JDK 17 is required to build the Android binaries.
Here are the step-by-step instructions to install JDK 17 using SDKMAN:
- First, install SDKMAN if you haven't already:
curl -s "https://get.sdkman.io" | bash
- Open a new terminal or source SDKMAN in your current terminal:
source "$HOME/.sdkman/bin/sdkman-init.sh"
- Verify SDKMAN is installed:
sdk version
- List available Java versions:
sdk list java
- Install JDK 17 (you can choose between different distributions like Oracle, Amazon Corretto, Eclipse Temurin, etc.):
Note: The exact version numbers might change over time. Use sdk list java
to see the latest available versions.
For Temurin (OpenJ9):
sdk install java 17.0.12-tem
- Verify the installation:
java -version
- Set JDK 17 as default (optional):
sdk default java 17.0.12-tem
Note: If you see
"Could not resolve all files for configuration ':dart_duckdb:androidJdkImage'"
try configuring flutter
flutter config --jdk-dir=PATH_TO_JDK_17
Here are some common use cases for DuckDB.Dart:
import 'package:dart_duckdb/dart_duckdb.dart';
void main() {
final db = duckdb.open(":memory:");
final connection = duckdb.connect(db);
connection.execute('''
CREATE TABLE users (id INTEGER, name VARCHAR, age INTEGER);
INSERT INTO users VALUES (1, 'Alice', 30), (2, 'Bob', 25);
''');
final result = connection.query("SELECT * FROM users WHERE age > 28").fetchAll();
for (final row in result) {
print(row);
}
connection.dispose();
db.dispose();
}
import 'package:dart_duckdb/dart_duckdb.dart';
void main() {
final db = duckdb.open(":memory:");
final connection = duckdb.connect(db);
await Isolate.spawn(backgroundTask, db.transferrable);
connection.dispose();
db.dispose();
}
void backgroundTask(TransferableDatabase transferableDb) {
final connection = duckdb.connectWithTransferred(transferableDb);
// Access database ...
// fetch is needed to send the data back to the main isolate
}
We welcome contributions to DuckDB.Dart! If you have suggestions for improvements or bug fixes, please follow these steps:
- Fork the repository.
- Create a new branch for your feature or bug fix.
- Make your changes and commit them with descriptive messages.
- Push your changes to your fork.
- Create a pull request with a detailed description of your changes.
If you encounter any issues or have questions, please check our issue tracker
Install fvm, Getting Started
Install any platform dependencies for DuckDB. Here are the DuckDB Building Instructions. Also, the github workflows are the best examples to learn from.
Run make from this project to build/patch duckdb.
To build for MacOS:
make macos
To build for an iOS device:
make ios_device
To build for an iOS simulator:
make ios_simulator
To build for Android:
make android
cd windows && ./getduck.ps1
To build for Linux:
make linux
make build