Loading benchmarks...
Peers tested:
resqlite (this repo, current commit),
sqlite3.dart 3.3.0 (synchronous FFI baseline),
sqlite_async 0.14.0-wip.0 (PowerSync, async + reactive),
drift 2.21.0 (codegen-backed, isolate-backed, reactive).
Hardware is shown in the device selector above; each device has its own full run.
See SCOPE.md for the full peer list, versioning policy, and upgrade process.
Numbers reported: Wall-clock medians in ms (lower is better) from multi-repeat runs, plus p90 for tail-latency. Point-query throughput is queries/sec (higher is better). Main-isolate times show the time actually spent on the calling/UI thread — the critical budget in Flutter. Sync libraries (sqlite3) report main == wall by construction.
Fair comparison rules:
identical SQL queries, identical seed data, WAL mode everywhere. sqlite_async's
watch() throttle is set to Duration.zero so we're comparing
invalidation engines rather than throttling policies. Each peer uses its idiomatic API
(db.select() / db.getAll() / prepared Statement);
no crippled versions. Methodology details live in
METHODOLOGY.md.
Honesty about what these numbers do not tell you. The suite is designed to expose the behaviors Flutter app authors care about, but it's not exhaustive.
Peers not included:
sqflite_common_ffi) uses sqlite3.dart
under the hood and would not represent actual mobile sqflite performance (platform
channel serialization cost, native iOS/Android SQLite version differences, F2FS vs APFS
fsync behavior). Including it with a caveat would be misleading; excluding and saying
why is honest. Will be added when flutter test integration_test/ on
simulators/emulators is wired into CI.Workloads not included:
Database.open() to
first query? Unmeasured. Matters for CLI tools and add-to-app patterns.The SCOPE.md Known Gaps section is the canonical list; this summary is kept in sync with it.
dart run benchmark/run_release.dart "your-device" --repeat=3
and submit a PR
to add your device.