-# PowerSync SDK for Dart/Flutter
+# PowerSync SDK for Flutter
-*[PowerSync](https://www.powersync.com) is a sync engine for building local-first apps with instantly-responsive UI/UX and simplified state transfer. Syncs between SQLite on the client-side and Postgres, MongoDB or MySQL on the server-side.*
+_[PowerSync](https://www.powersync.com) is a sync engine for building local-first apps with instantly-responsive UI/UX and simplified state transfer. Syncs between SQLite on the client-side and Postgres, MongoDB or MySQL on the server-side._
-This package (`powersync`) is the PowerSync client SDK for Dart/Flutter.
+This package (`powersync`) is the PowerSync client SDK for Flutter.
See a summary of features [here](https://docs.powersync.com/client-sdk-references/flutter).
+> **Note**
+> This package is recommended for Flutter applications that do not require on-device encryption.
+
+> - For Flutter applications that require encryption, use the [`powersync_sqlcipher`](https://pub.dev/packages/powersync_sqlcipher) package.
+> - For use cases such as server-side Dart or non-Flutter Dart environments, use the [`powersync_core`](https://pub.dev/packages/powersync_core) package.
+
# Installation
```bash
diff --git a/packages/powersync/example/README.md b/packages/powersync/example/README.md
index 26741f48..9db577ab 100644
--- a/packages/powersync/example/README.md
+++ b/packages/powersync/example/README.md
@@ -1,5 +1,5 @@
# Examples
- * [Getting started](./getting_started.dart)
- * [Watching queries](./watching_changes.dart)
- * [Batch writes](./batch_writes.dart)
+- [Getting started](./getting_started.dart)
+- [Watching queries](./watching_changes.dart)
+- [Batch writes](./batch_writes.dart)
diff --git a/packages/powersync/lib/powersync.dart b/packages/powersync/lib/powersync.dart
index d931d4f4..c5e05872 100644
--- a/packages/powersync/lib/powersync.dart
+++ b/packages/powersync/lib/powersync.dart
@@ -1,15 +1,6 @@
-/// PowerSync Dart SDK.
+/// PowerSync Flutter SDK.
///
/// Use [PowerSyncDatabase] to open a database.
library;
-export 'src/connector.dart';
-export 'src/crud.dart';
-export 'src/database/powersync_database.dart';
-export 'src/exceptions.dart';
-export 'src/log.dart';
-export 'src/open_factory.dart';
-export 'src/powersync_database.dart';
-export 'src/schema.dart';
-export 'src/sync_status.dart';
-export 'src/uuid.dart';
+export 'package:powersync_core/powersync_core.dart';
diff --git a/packages/powersync/lib/sqlite3.dart b/packages/powersync/lib/sqlite3.dart
index 66f87ad4..2941247e 100644
--- a/packages/powersync/lib/sqlite3.dart
+++ b/packages/powersync/lib/sqlite3.dart
@@ -2,4 +2,4 @@
/// adding it as a direct dependency.
library;
-export 'package:sqlite_async/sqlite3.dart';
+export 'package:powersync_core/sqlite3.dart';
diff --git a/packages/powersync/lib/sqlite3_common.dart b/packages/powersync/lib/sqlite3_common.dart
index df84a8e0..52887937 100644
--- a/packages/powersync/lib/sqlite3_common.dart
+++ b/packages/powersync/lib/sqlite3_common.dart
@@ -2,4 +2,4 @@
/// adding it as a direct dependency.
library;
-export 'package:sqlite_async/sqlite3_common.dart';
+export 'package:powersync_core/sqlite3_common.dart';
diff --git a/packages/powersync/lib/sqlite3_open.dart b/packages/powersync/lib/sqlite3_open.dart
new file mode 100644
index 00000000..fd364dc4
--- /dev/null
+++ b/packages/powersync/lib/sqlite3_open.dart
@@ -0,0 +1,5 @@
+/// Re-exports [sqlite3_open](https://pub.dev/packages/sqlite3) to expose sqlite3_open without
+/// adding it as a direct dependency.
+library;
+
+export 'package:powersync_core/sqlite3_open.dart';
diff --git a/packages/powersync/lib/sqlite_async.dart b/packages/powersync/lib/sqlite_async.dart
index 1d09936d..6deed835 100644
--- a/packages/powersync/lib/sqlite_async.dart
+++ b/packages/powersync/lib/sqlite_async.dart
@@ -2,4 +2,4 @@
/// adding it as a direct dependency.
library;
-export 'package:sqlite_async/sqlite_async.dart';
+export 'package:powersync_core/sqlite_async.dart';
diff --git a/packages/powersync/lib/src/powersync_database.dart b/packages/powersync/lib/src/powersync_database.dart
deleted file mode 100644
index c051b90d..00000000
--- a/packages/powersync/lib/src/powersync_database.dart
+++ /dev/null
@@ -1 +0,0 @@
-export 'package:powersync/src/database/powersync_database.dart';
diff --git a/packages/powersync/lib/src/version.dart b/packages/powersync/lib/src/version.dart
deleted file mode 100644
index f3ee1336..00000000
--- a/packages/powersync/lib/src/version.dart
+++ /dev/null
@@ -1 +0,0 @@
-const String libraryVersion = '1.9.3';
diff --git a/packages/powersync/lib/web_worker.dart b/packages/powersync/lib/web_worker.dart
index 19983751..5d7b86d3 100644
--- a/packages/powersync/lib/web_worker.dart
+++ b/packages/powersync/lib/web_worker.dart
@@ -1 +1 @@
-export 'src/web/powersync_db.worker.dart';
+export 'package:powersync_core/src/web/powersync_db.worker.dart';
diff --git a/packages/powersync/pubspec.yaml b/packages/powersync/pubspec.yaml
index e7d7b91a..2faa17f4 100644
--- a/packages/powersync/pubspec.yaml
+++ b/packages/powersync/pubspec.yaml
@@ -1,5 +1,5 @@
name: powersync
-version: 1.9.3
+version: 1.10.0
homepage: https://powersync.com
repository: https://github.com/powersync-ja/powersync.dart
description: PowerSync Flutter SDK - sync engine for building local-first apps.
@@ -10,36 +10,17 @@ dependencies:
flutter:
sdk: flutter
- sqlite_async: ^0.11.0
- # We only use sqlite3 as a transitive dependency,
- # but right now we need a minimum of v2.4.6.
- sqlite3: ^2.4.6
- universal_io: ^2.0.0
sqlite3_flutter_libs: ^0.5.23
+ powersync_core: ^1.0.0
powersync_flutter_libs: ^0.4.3
- meta: ^1.0.0
- http: ^1.1.0
- uuid: ^4.2.0
- async: ^2.10.0
- logging: ^1.1.1
collection: ^1.17.0
- fetch_client: ^1.1.2
pubspec_parse: ^1.3.0
args: ^2.5.0
pub_semver: ^2.1.4
- js: ^0.7.0
- web: ^1.0.0
dev_dependencies:
- dcli: ^4.0.0
lints: ^3.0.0
- test: ^1.25.0
- test_api: ^0.7.0
- path_provider: ^2.0.13
- shelf: ^1.4.1
- shelf_router: ^1.1.4
- shelf_static: ^1.1.2
- stream_channel: ^2.1.2
path: ^1.8.3
+ path_provider: ^2.0.13
platforms:
android:
diff --git a/packages/powersync_attachments_helper/CHANGELOG.md b/packages/powersync_attachments_helper/CHANGELOG.md
index 74acae9b..564b41c7 100644
--- a/packages/powersync_attachments_helper/CHANGELOG.md
+++ b/packages/powersync_attachments_helper/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.6.16
+
+ - Update a dependency to the latest release.
+
## 0.6.15+2
- Update a dependency to the latest release.
diff --git a/packages/powersync_attachments_helper/README.md b/packages/powersync_attachments_helper/README.md
index a44f8c9d..dbd65bef 100644
--- a/packages/powersync_attachments_helper/README.md
+++ b/packages/powersync_attachments_helper/README.md
@@ -4,14 +4,14 @@
## Features
-* Handles syncing uploads, downloads and deletes between local and remote storage.
+- Handles syncing uploads, downloads and deletes between local and remote storage.
## Getting started
```dart
import 'dart:async';
import 'package:powersync_attachments_helper/powersync_attachments_helper.dart';
-import 'package:powersync/powersync.dart';
+import 'package:powersync_core/powersync_core.dart';
// Set up schema with an id field that can be used in watchIds().
// In this case it is photo_id
diff --git a/packages/powersync_attachments_helper/example/getting_started.dart b/packages/powersync_attachments_helper/example/getting_started.dart
index f5302508..5ed2000b 100644
--- a/packages/powersync_attachments_helper/example/getting_started.dart
+++ b/packages/powersync_attachments_helper/example/getting_started.dart
@@ -1,7 +1,7 @@
import 'dart:async';
import 'package:powersync_attachments_helper/powersync_attachments_helper.dart';
-import 'package:powersync/powersync.dart';
+import 'package:powersync_core/powersync_core.dart';
const schema = Schema([
Table('users', [Column.text('name'), Column.text('photo_id')])
diff --git a/packages/powersync_attachments_helper/lib/src/attachments_queue.dart b/packages/powersync_attachments_helper/lib/src/attachments_queue.dart
index 7ceb8208..1f2a1b35 100644
--- a/packages/powersync_attachments_helper/lib/src/attachments_queue.dart
+++ b/packages/powersync_attachments_helper/lib/src/attachments_queue.dart
@@ -6,7 +6,7 @@ import './local_storage_adapter.dart';
import './remote_storage_adapter.dart';
import './syncing_service.dart';
import 'package:logging/logging.dart';
-import 'package:powersync/powersync.dart';
+import 'package:powersync_core/powersync_core.dart';
/// Logger for the attachment queue
final log = Logger('AttachmentQueue');
diff --git a/packages/powersync_attachments_helper/lib/src/attachments_queue_table.dart b/packages/powersync_attachments_helper/lib/src/attachments_queue_table.dart
index 91e940b5..ffa3fb20 100644
--- a/packages/powersync_attachments_helper/lib/src/attachments_queue_table.dart
+++ b/packages/powersync_attachments_helper/lib/src/attachments_queue_table.dart
@@ -1,5 +1,5 @@
-import 'package:powersync/powersync.dart';
-import 'package:powersync/sqlite3_common.dart' as sqlite;
+import 'package:powersync_core/powersync_core.dart';
+import 'package:powersync_core/sqlite3_common.dart' as sqlite;
const defaultAttachmentsQueueTableName = 'attachments_queue';
diff --git a/packages/powersync_attachments_helper/lib/src/attachments_service.dart b/packages/powersync_attachments_helper/lib/src/attachments_service.dart
index 0383a393..689fef22 100644
--- a/packages/powersync_attachments_helper/lib/src/attachments_service.dart
+++ b/packages/powersync_attachments_helper/lib/src/attachments_service.dart
@@ -1,8 +1,8 @@
import './attachments_queue.dart';
import './attachments_queue_table.dart';
import './local_storage_adapter.dart';
-import 'package:powersync/powersync.dart';
-import 'package:powersync/sqlite3_common.dart';
+import 'package:powersync_core/powersync_core.dart';
+import 'package:powersync_core/sqlite3_common.dart';
/// Service for interacting with the attachment queue.
class AttachmentsService {
diff --git a/packages/powersync_attachments_helper/lib/src/syncing_service.dart b/packages/powersync_attachments_helper/lib/src/syncing_service.dart
index 93c2300c..664f068b 100644
--- a/packages/powersync_attachments_helper/lib/src/syncing_service.dart
+++ b/packages/powersync_attachments_helper/lib/src/syncing_service.dart
@@ -4,7 +4,7 @@ import 'dart:typed_data';
import './attachments_queue.dart';
import './local_storage_adapter.dart';
import './remote_storage_adapter.dart';
-import 'package:powersync/powersync.dart';
+import 'package:powersync_core/powersync_core.dart';
import 'attachments_queue_table.dart';
import 'attachments_service.dart';
diff --git a/packages/powersync_attachments_helper/pubspec.yaml b/packages/powersync_attachments_helper/pubspec.yaml
index 53779451..35be20be 100644
--- a/packages/powersync_attachments_helper/pubspec.yaml
+++ b/packages/powersync_attachments_helper/pubspec.yaml
@@ -1,6 +1,6 @@
name: powersync_attachments_helper
description: A helper library for handling attachments when using PowerSync.
-version: 0.6.15+2
+version: 0.6.16
repository: https://github.com/powersync-ja/powersync.dart
homepage: https://www.powersync.com/
environment:
@@ -10,7 +10,7 @@ dependencies:
flutter:
sdk: flutter
- powersync: ^1.9.3
+ powersync_core: ^1.0.0
logging: ^1.2.0
sqlite_async: ^0.11.0
path_provider: ^2.0.13
diff --git a/packages/powersync_core/.gitignore b/packages/powersync_core/.gitignore
new file mode 100644
index 00000000..ddfb9c2a
--- /dev/null
+++ b/packages/powersync_core/.gitignore
@@ -0,0 +1,9 @@
+# https://dart.dev/guides/libraries/private-files
+# Created by `dart pub`
+.dart_tool/
+
+# Avoid committing pubspec.lock for library packages; see
+# https://dart.dev/guides/libraries/private-files#pubspeclock.
+pubspec.lock
+
+/test-db
\ No newline at end of file
diff --git a/packages/powersync_core/CHANGELOG.md b/packages/powersync_core/CHANGELOG.md
new file mode 100644
index 00000000..9b19f65d
--- /dev/null
+++ b/packages/powersync_core/CHANGELOG.md
@@ -0,0 +1,3 @@
+## 1.0.0
+
+ - Dart library for Powersync for use cases such as server-side Dart or non-Flutter Dart environments initial release.
diff --git a/packages/powersync_core/LICENSE b/packages/powersync_core/LICENSE
new file mode 100644
index 00000000..f433b1a5
--- /dev/null
+++ b/packages/powersync_core/LICENSE
@@ -0,0 +1,177 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
diff --git a/packages/powersync_core/NOTICE b/packages/powersync_core/NOTICE
new file mode 100644
index 00000000..da0d4ce5
--- /dev/null
+++ b/packages/powersync_core/NOTICE
@@ -0,0 +1 @@
+Copyright 2024 Journey Mobile, Inc.
diff --git a/packages/powersync_core/README.md b/packages/powersync_core/README.md
new file mode 100644
index 00000000..642baa15
--- /dev/null
+++ b/packages/powersync_core/README.md
@@ -0,0 +1,36 @@
+
+
+
+
+# PowerSync SDK for Dart
+
+*[PowerSync](https://www.powersync.com) is a sync engine for building local-first apps with instantly-responsive UI/UX and simplified state transfer. Syncs between SQLite on the client-side and Postgres, MongoDB or MySQL on the server-side.*
+
+This package (`powersync_core`) is the PowerSync client SDK for Dart.
+
+> **Note**
+>
+> This is a Dart library for Powersync for use cases such as server-side Dart or non-Flutter Dart environments.
+> This library requires sqlite3 with extension loading enabled to be installed on your system.
+>
+> If you are developing a Flutter application, use [powersync](https://pub.dev/packages/powersync) or [powersync_sqlcipher](https://pub.dev/packages/powersync_sqlcipher) instead. The `powersync_core` package is for non-Flutter Dart environments.
+
+# Installation
+
+```bash
+dart pub add powersync_core
+```
+
+# Changelog
+
+A changelog for this SDK is available [here](https://pub.dev/packages/powersync_core/changelog).
+
+# API Reference
+
+The full API reference for this SDK can be found [here](https://pub.dev/documentation/powersync_core/latest/powersync_core/powersync_core-library.html).
+
+# Found a bug or need help?
+
+- Join our [Discord server](https://discord.gg/powersync) where you can browse topics from our community, ask questions, share feedback, or just say hello :)
+- Please open a [GitHub issue](https://github.com/powersync-ja/powersync.dart/issues) when you come across a bug.
+- Have feedback or an idea? [Submit an idea](https://roadmap.powersync.com/tabs/5-roadmap/submit-idea) via our public roadmap or [schedule a chat](https://calendly.com/powersync/powersync-chat) with someone from our product team.
diff --git a/packages/powersync_core/analysis_options.yaml b/packages/powersync_core/analysis_options.yaml
new file mode 100644
index 00000000..dee8927a
--- /dev/null
+++ b/packages/powersync_core/analysis_options.yaml
@@ -0,0 +1,30 @@
+# This file configures the static analysis results for your project (errors,
+# warnings, and lints).
+#
+# This enables the 'recommended' set of lints from `package:lints`.
+# This set helps identify many issues that may lead to problems when running
+# or consuming Dart code, and enforces writing Dart using a single, idiomatic
+# style and format.
+#
+# If you want a smaller set of lints you can change this to specify
+# 'package:lints/core.yaml'. These are just the most critical lints
+# (the recommended set includes the core lints).
+# The core lints are also what is used by pub.dev for scoring packages.
+
+include: package:lints/recommended.yaml
+
+# Uncomment the following section to specify additional rules.
+
+# linter:
+# rules:
+# - camel_case_types
+
+# analyzer:
+# exclude:
+# - path/to/excluded/files/**
+
+# For more information about the core and recommended set of lints, see
+# https://dart.dev/go/core-lints
+
+# For additional information about configuring this file, see
+# https://dart.dev/guides/language/analysis-options
diff --git a/packages/powersync_core/assets/.gitkeep b/packages/powersync_core/assets/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/powersync_core/example/README.md b/packages/powersync_core/example/README.md
new file mode 100644
index 00000000..8dbcfb60
--- /dev/null
+++ b/packages/powersync_core/example/README.md
@@ -0,0 +1,3 @@
+# Examples
+
+- [Getting started](./getting_started.dart)
diff --git a/packages/powersync_core/example/getting_started.dart b/packages/powersync_core/example/getting_started.dart
new file mode 100644
index 00000000..eb291b3b
--- /dev/null
+++ b/packages/powersync_core/example/getting_started.dart
@@ -0,0 +1,109 @@
+import 'dart:ffi';
+import 'dart:io';
+
+import 'package:powersync_core/powersync_core.dart';
+import 'package:path/path.dart';
+import 'package:powersync_core/sqlite3.dart' as sqlite;
+import 'package:powersync_core/sqlite3_common.dart';
+import 'package:powersync_core/sqlite_async.dart';
+import 'package:powersync_core/sqlite3_open.dart' as sqlite_open;
+
+const schema = Schema([
+ Table('customers', [Column.text('name'), Column.text('email')])
+]);
+
+late PowerSyncDatabase db;
+
+// Setup connector to backend if you would like to sync data.
+class BackendConnector extends PowerSyncBackendConnector {
+ PowerSyncDatabase db;
+
+ BackendConnector(this.db);
+ @override
+ // ignore: body_might_complete_normally_nullable
+ Future fetchCredentials() async {
+ // implement fetchCredentials
+ }
+ @override
+ Future uploadData(PowerSyncDatabase database) async {
+ // implement uploadData
+ }
+}
+
+/// Custom factory to load the PowerSync extension.
+/// This is required to load the extension from a custom location.
+/// The extension is required to sync data with the backend.
+/// On macOS and Linux, the default sqlite3 library is overridden to load the extension.
+class PowerSyncDartOpenFactory extends PowerSyncOpenFactory {
+ PowerSyncDartOpenFactory({required super.path, super.sqliteOptions});
+
+ @override
+ CommonDatabase open(SqliteOpenOptions options) {
+ sqlite_open.open.overrideFor(sqlite_open.OperatingSystem.linux, () {
+ return DynamicLibrary.open('libsqlite3.so.0');
+ });
+ sqlite_open.open.overrideFor(sqlite_open.OperatingSystem.macOS, () {
+ return DynamicLibrary.open('libsqlite3.dylib');
+ });
+ return super.open(options);
+ }
+
+ @override
+ void enableExtension() {
+ var powersyncLib = DynamicLibrary.open(getLibraryForPlatform());
+ sqlite.sqlite3.ensureExtensionLoaded(sqlite.SqliteExtension.inLibrary(
+ powersyncLib, 'sqlite3_powersync_init'));
+ }
+
+ @override
+ String getLibraryForPlatform({String? path = "."}) {
+ switch (Abi.current()) {
+ case Abi.androidArm:
+ case Abi.androidArm64:
+ case Abi.androidX64:
+ return '$path/libpowersync.so';
+ case Abi.macosArm64:
+ case Abi.macosX64:
+ return '$path/libpowersync.dylib';
+ case Abi.linuxX64:
+ case Abi.linuxArm64:
+ return '$path/libpowersync.so';
+ case Abi.windowsX64:
+ return '$path/powersync.dll';
+ case Abi.androidIA32:
+ throw PowersyncNotReadyException(
+ 'Unsupported processor architecture. X86 Android emulators are not '
+ 'supported. Please use an x86_64 emulator instead. All physical '
+ 'Android devices are supported including 32bit ARM.',
+ );
+ default:
+ throw PowersyncNotReadyException(
+ 'Unsupported processor architecture "${Abi.current()}". '
+ 'Please open an issue on GitHub to request it.',
+ );
+ }
+ }
+}
+
+Future getDatabasePath() async {
+ const dbFilename = 'powersync-demo.db';
+ final dir = (Directory.current.uri).toFilePath();
+ return join(dir, dbFilename);
+}
+
+openDatabase() async {
+ // Setup the database.
+ final psFactory = PowerSyncDartOpenFactory(path: await getDatabasePath());
+ db = PowerSyncDatabase.withFactory(psFactory, schema: schema);
+
+ // Initialise the database.
+ await db.initialize();
+
+ // Run local statements.
+ await db.execute(
+ 'INSERT INTO customers(id, name, email) VALUES(uuid(), ?, ?)',
+ ['Fred', 'fred@example.org']);
+
+ // Connect to backend
+ db.connect(connector: BackendConnector(db));
+}
diff --git a/packages/powersync_core/lib/powersync_core.dart b/packages/powersync_core/lib/powersync_core.dart
new file mode 100644
index 00000000..d931d4f4
--- /dev/null
+++ b/packages/powersync_core/lib/powersync_core.dart
@@ -0,0 +1,15 @@
+/// PowerSync Dart SDK.
+///
+/// Use [PowerSyncDatabase] to open a database.
+library;
+
+export 'src/connector.dart';
+export 'src/crud.dart';
+export 'src/database/powersync_database.dart';
+export 'src/exceptions.dart';
+export 'src/log.dart';
+export 'src/open_factory.dart';
+export 'src/powersync_database.dart';
+export 'src/schema.dart';
+export 'src/sync_status.dart';
+export 'src/uuid.dart';
diff --git a/packages/powersync_core/lib/sqlite3.dart b/packages/powersync_core/lib/sqlite3.dart
new file mode 100644
index 00000000..66f87ad4
--- /dev/null
+++ b/packages/powersync_core/lib/sqlite3.dart
@@ -0,0 +1,5 @@
+/// Re-exports [sqlite3](https://pub.dev/packages/sqlite3) to expose sqlite3 without
+/// adding it as a direct dependency.
+library;
+
+export 'package:sqlite_async/sqlite3.dart';
diff --git a/packages/powersync_core/lib/sqlite3_common.dart b/packages/powersync_core/lib/sqlite3_common.dart
new file mode 100644
index 00000000..df84a8e0
--- /dev/null
+++ b/packages/powersync_core/lib/sqlite3_common.dart
@@ -0,0 +1,5 @@
+/// Re-exports [sqlite3_common](https://pub.dev/packages/sqlite3) to expose sqlite3_common without
+/// adding it as a direct dependency.
+library;
+
+export 'package:sqlite_async/sqlite3_common.dart';
diff --git a/packages/powersync_core/lib/sqlite3_open.dart b/packages/powersync_core/lib/sqlite3_open.dart
new file mode 100644
index 00000000..b5659245
--- /dev/null
+++ b/packages/powersync_core/lib/sqlite3_open.dart
@@ -0,0 +1,5 @@
+/// Re-exports [sqlite3_open](https://pub.dev/packages/sqlite3) to expose sqlite3_open without
+/// adding it as a direct dependency.
+library;
+
+export 'package:sqlite_async/sqlite3_open.dart';
diff --git a/packages/powersync_core/lib/sqlite_async.dart b/packages/powersync_core/lib/sqlite_async.dart
new file mode 100644
index 00000000..1d09936d
--- /dev/null
+++ b/packages/powersync_core/lib/sqlite_async.dart
@@ -0,0 +1,5 @@
+/// Re-exports [sqlite_async](https://pub.dev/packages/sqlite_async) to expose sqlite_async without
+/// adding it as a direct dependency.
+library;
+
+export 'package:sqlite_async/sqlite_async.dart';
diff --git a/packages/powersync/lib/src/abort_controller.dart b/packages/powersync_core/lib/src/abort_controller.dart
similarity index 100%
rename from packages/powersync/lib/src/abort_controller.dart
rename to packages/powersync_core/lib/src/abort_controller.dart
diff --git a/packages/powersync/lib/src/bucket_storage.dart b/packages/powersync_core/lib/src/bucket_storage.dart
similarity index 99%
rename from packages/powersync/lib/src/bucket_storage.dart
rename to packages/powersync_core/lib/src/bucket_storage.dart
index ab26f654..27c090a1 100644
--- a/packages/powersync/lib/src/bucket_storage.dart
+++ b/packages/powersync_core/lib/src/bucket_storage.dart
@@ -2,8 +2,8 @@ import 'dart:async';
import 'dart:convert';
import 'package:collection/collection.dart';
-import 'package:powersync/sqlite_async.dart';
-import 'package:powersync/sqlite3_common.dart';
+import 'package:powersync_core/sqlite_async.dart';
+import 'package:powersync_core/sqlite3_common.dart';
import 'crud.dart';
import 'schema_logic.dart';
diff --git a/packages/powersync/lib/src/connector.dart b/packages/powersync_core/lib/src/connector.dart
similarity index 100%
rename from packages/powersync/lib/src/connector.dart
rename to packages/powersync_core/lib/src/connector.dart
diff --git a/packages/powersync/lib/src/crud.dart b/packages/powersync_core/lib/src/crud.dart
similarity index 98%
rename from packages/powersync/lib/src/crud.dart
rename to packages/powersync_core/lib/src/crud.dart
index 3ca4c288..5a11ae4d 100644
--- a/packages/powersync/lib/src/crud.dart
+++ b/packages/powersync_core/lib/src/crud.dart
@@ -1,7 +1,7 @@
import 'dart:convert';
import 'package:collection/collection.dart';
-import 'package:powersync/sqlite3_common.dart' as sqlite;
+import 'package:powersync_core/sqlite3_common.dart' as sqlite;
/// A batch of client-side changes.
class CrudBatch {
diff --git a/packages/powersync/lib/src/database/native/native_powersync_database.dart b/packages/powersync_core/lib/src/database/native/native_powersync_database.dart
similarity index 94%
rename from packages/powersync/lib/src/database/native/native_powersync_database.dart
rename to packages/powersync_core/lib/src/database/native/native_powersync_database.dart
index e62f8ac8..a2a6d028 100644
--- a/packages/powersync/lib/src/database/native/native_powersync_database.dart
+++ b/packages/powersync_core/lib/src/database/native/native_powersync_database.dart
@@ -4,20 +4,20 @@ import 'package:meta/meta.dart';
import 'package:http/http.dart' as http;
import 'package:logging/logging.dart';
-import 'package:powersync/src/abort_controller.dart';
-import 'package:powersync/src/bucket_storage.dart';
-import 'package:powersync/src/connector.dart';
-import 'package:powersync/src/database/powersync_database.dart';
-import 'package:powersync/src/database/powersync_db_mixin.dart';
-import 'package:powersync/src/isolate_completer.dart';
-import 'package:powersync/src/log.dart';
-import 'package:powersync/src/log_internal.dart';
-import 'package:powersync/src/open_factory/abstract_powersync_open_factory.dart';
-import 'package:powersync/src/open_factory/native/native_open_factory.dart';
-import 'package:powersync/src/schema.dart';
-import 'package:powersync/src/schema_logic.dart';
-import 'package:powersync/src/streaming_sync.dart';
-import 'package:powersync/src/sync_status.dart';
+import 'package:powersync_core/src/abort_controller.dart';
+import 'package:powersync_core/src/bucket_storage.dart';
+import 'package:powersync_core/src/connector.dart';
+import 'package:powersync_core/src/database/powersync_database.dart';
+import 'package:powersync_core/src/database/powersync_db_mixin.dart';
+import 'package:powersync_core/src/isolate_completer.dart';
+import 'package:powersync_core/src/log.dart';
+import 'package:powersync_core/src/log_internal.dart';
+import 'package:powersync_core/src/open_factory/abstract_powersync_open_factory.dart';
+import 'package:powersync_core/src/open_factory/native/native_open_factory.dart';
+import 'package:powersync_core/src/schema.dart';
+import 'package:powersync_core/src/schema_logic.dart';
+import 'package:powersync_core/src/streaming_sync.dart';
+import 'package:powersync_core/src/sync_status.dart';
import 'package:sqlite_async/sqlite3_common.dart';
import 'package:sqlite_async/sqlite_async.dart';
diff --git a/packages/powersync/lib/src/database/powersync_database.dart b/packages/powersync_core/lib/src/database/powersync_database.dart
similarity index 92%
rename from packages/powersync/lib/src/database/powersync_database.dart
rename to packages/powersync_core/lib/src/database/powersync_database.dart
index 96a48ef6..528b029f 100644
--- a/packages/powersync/lib/src/database/powersync_database.dart
+++ b/packages/powersync_core/lib/src/database/powersync_database.dart
@@ -1,7 +1,7 @@
import 'package:logging/logging.dart';
-import 'package:powersync/src/database/powersync_database_impl.dart';
-import 'package:powersync/src/database/powersync_db_mixin.dart';
-import 'package:powersync/src/open_factory/abstract_powersync_open_factory.dart';
+import 'package:powersync_core/src/database/powersync_database_impl.dart';
+import 'package:powersync_core/src/database/powersync_db_mixin.dart';
+import 'package:powersync_core/src/open_factory/abstract_powersync_open_factory.dart';
import 'package:sqlite_async/sqlite_async.dart';
import '../schema.dart';
diff --git a/packages/powersync/lib/src/database/powersync_database_impl.dart b/packages/powersync_core/lib/src/database/powersync_database_impl.dart
similarity index 100%
rename from packages/powersync/lib/src/database/powersync_database_impl.dart
rename to packages/powersync_core/lib/src/database/powersync_database_impl.dart
diff --git a/packages/powersync/lib/src/database/powersync_database_impl_stub.dart b/packages/powersync_core/lib/src/database/powersync_database_impl_stub.dart
similarity index 94%
rename from packages/powersync/lib/src/database/powersync_database_impl_stub.dart
rename to packages/powersync_core/lib/src/database/powersync_database_impl_stub.dart
index 68faf631..a4b0ce80 100644
--- a/packages/powersync/lib/src/database/powersync_database_impl_stub.dart
+++ b/packages/powersync_core/lib/src/database/powersync_database_impl_stub.dart
@@ -2,9 +2,9 @@ import 'dart:async';
import 'package:logging/logging.dart';
import 'package:meta/meta.dart';
-import 'package:powersync/sqlite_async.dart';
-import 'package:powersync/src/database/powersync_db_mixin.dart';
-import 'package:powersync/src/open_factory/abstract_powersync_open_factory.dart';
+import 'package:powersync_core/sqlite_async.dart';
+import 'package:powersync_core/src/database/powersync_db_mixin.dart';
+import 'package:powersync_core/src/open_factory/abstract_powersync_open_factory.dart';
import 'powersync_database.dart';
import '../connector.dart';
diff --git a/packages/powersync/lib/src/database/powersync_db_mixin.dart b/packages/powersync_core/lib/src/database/powersync_db_mixin.dart
similarity index 96%
rename from packages/powersync/lib/src/database/powersync_db_mixin.dart
rename to packages/powersync_core/lib/src/database/powersync_db_mixin.dart
index af8156e1..bc359616 100644
--- a/packages/powersync/lib/src/database/powersync_db_mixin.dart
+++ b/packages/powersync_core/lib/src/database/powersync_db_mixin.dart
@@ -2,15 +2,15 @@ import 'dart:async';
import 'package:logging/logging.dart';
import 'package:meta/meta.dart';
-import 'package:powersync/sqlite3_common.dart';
-import 'package:powersync/sqlite_async.dart';
-import 'package:powersync/src/abort_controller.dart';
-import 'package:powersync/src/connector.dart';
-import 'package:powersync/src/crud.dart';
-import 'package:powersync/src/powersync_update_notification.dart';
-import 'package:powersync/src/schema.dart';
-import 'package:powersync/src/schema_logic.dart';
-import 'package:powersync/src/sync_status.dart';
+import 'package:powersync_core/sqlite3_common.dart';
+import 'package:powersync_core/sqlite_async.dart';
+import 'package:powersync_core/src/abort_controller.dart';
+import 'package:powersync_core/src/connector.dart';
+import 'package:powersync_core/src/crud.dart';
+import 'package:powersync_core/src/powersync_update_notification.dart';
+import 'package:powersync_core/src/schema.dart';
+import 'package:powersync_core/src/schema_logic.dart';
+import 'package:powersync_core/src/sync_status.dart';
mixin PowerSyncDatabaseMixin implements SqliteConnection {
/// Schema used for the local database.
diff --git a/packages/powersync/lib/src/database/web/web_powersync_database.dart b/packages/powersync_core/lib/src/database/web/web_powersync_database.dart
similarity index 91%
rename from packages/powersync/lib/src/database/web/web_powersync_database.dart
rename to packages/powersync_core/lib/src/database/web/web_powersync_database.dart
index f75c7beb..b981319c 100644
--- a/packages/powersync/lib/src/database/web/web_powersync_database.dart
+++ b/packages/powersync_core/lib/src/database/web/web_powersync_database.dart
@@ -2,18 +2,18 @@ import 'dart:async';
import 'package:meta/meta.dart';
import 'package:fetch_client/fetch_client.dart';
import 'package:logging/logging.dart';
-import 'package:powersync/src/abort_controller.dart';
-import 'package:powersync/src/bucket_storage.dart';
-import 'package:powersync/src/connector.dart';
-import 'package:powersync/src/database/powersync_database.dart';
-import 'package:powersync/src/database/powersync_db_mixin.dart';
-import 'package:powersync/src/log.dart';
-import 'package:powersync/src/open_factory/abstract_powersync_open_factory.dart';
-import 'package:powersync/src/open_factory/web/web_open_factory.dart';
-import 'package:powersync/src/schema.dart';
-import 'package:powersync/src/streaming_sync.dart';
+import 'package:powersync_core/src/abort_controller.dart';
+import 'package:powersync_core/src/bucket_storage.dart';
+import 'package:powersync_core/src/connector.dart';
+import 'package:powersync_core/src/database/powersync_database.dart';
+import 'package:powersync_core/src/database/powersync_db_mixin.dart';
+import 'package:powersync_core/src/log.dart';
+import 'package:powersync_core/src/open_factory/abstract_powersync_open_factory.dart';
+import 'package:powersync_core/src/open_factory/web/web_open_factory.dart';
+import 'package:powersync_core/src/schema.dart';
+import 'package:powersync_core/src/streaming_sync.dart';
import 'package:sqlite_async/sqlite_async.dart';
-import 'package:powersync/src/schema_logic.dart' as schema_logic;
+import 'package:powersync_core/src/schema_logic.dart' as schema_logic;
import '../../web/sync_controller.dart';
diff --git a/packages/powersync/lib/src/exceptions.dart b/packages/powersync_core/lib/src/exceptions.dart
similarity index 100%
rename from packages/powersync/lib/src/exceptions.dart
rename to packages/powersync_core/lib/src/exceptions.dart
diff --git a/packages/powersync/lib/src/isolate_completer.dart b/packages/powersync_core/lib/src/isolate_completer.dart
similarity index 100%
rename from packages/powersync/lib/src/isolate_completer.dart
rename to packages/powersync_core/lib/src/isolate_completer.dart
diff --git a/packages/powersync/lib/src/log.dart b/packages/powersync_core/lib/src/log.dart
similarity index 95%
rename from packages/powersync/lib/src/log.dart
rename to packages/powersync_core/lib/src/log.dart
index c628295b..0d0ef1ce 100644
--- a/packages/powersync/lib/src/log.dart
+++ b/packages/powersync_core/lib/src/log.dart
@@ -1,5 +1,5 @@
import 'package:logging/logging.dart';
-import 'package:powersync/src/log_internal.dart';
+import 'package:powersync_core/src/log_internal.dart';
/// Logger that outputs to the console in debug mode, and nothing
/// in release and profile modes.
diff --git a/packages/powersync/lib/src/log_internal.dart b/packages/powersync_core/lib/src/log_internal.dart
similarity index 100%
rename from packages/powersync/lib/src/log_internal.dart
rename to packages/powersync_core/lib/src/log_internal.dart
diff --git a/packages/powersync/lib/src/open_factory.dart b/packages/powersync_core/lib/src/open_factory.dart
similarity index 100%
rename from packages/powersync/lib/src/open_factory.dart
rename to packages/powersync_core/lib/src/open_factory.dart
diff --git a/packages/powersync/lib/src/open_factory/abstract_powersync_open_factory.dart b/packages/powersync_core/lib/src/open_factory/abstract_powersync_open_factory.dart
similarity index 95%
rename from packages/powersync/lib/src/open_factory/abstract_powersync_open_factory.dart
rename to packages/powersync_core/lib/src/open_factory/abstract_powersync_open_factory.dart
index 06e8feda..d5666fad 100644
--- a/packages/powersync/lib/src/open_factory/abstract_powersync_open_factory.dart
+++ b/packages/powersync_core/lib/src/open_factory/abstract_powersync_open_factory.dart
@@ -2,8 +2,8 @@ import 'dart:async';
import 'package:universal_io/io.dart';
import 'dart:math';
-import 'package:powersync/sqlite_async.dart';
-import 'package:powersync/src/open_factory/common_db_functions.dart';
+import 'package:powersync_core/sqlite_async.dart';
+import 'package:powersync_core/src/open_factory/common_db_functions.dart';
import 'package:sqlite_async/sqlite3_common.dart';
const powerSyncDefaultSqliteOptions = SqliteOptions(
diff --git a/packages/powersync/lib/src/open_factory/common_db_functions.dart b/packages/powersync_core/lib/src/open_factory/common_db_functions.dart
similarity index 100%
rename from packages/powersync/lib/src/open_factory/common_db_functions.dart
rename to packages/powersync_core/lib/src/open_factory/common_db_functions.dart
diff --git a/packages/powersync/lib/src/open_factory/native/native_open_factory.dart b/packages/powersync_core/lib/src/open_factory/native/native_open_factory.dart
similarity index 94%
rename from packages/powersync/lib/src/open_factory/native/native_open_factory.dart
rename to packages/powersync_core/lib/src/open_factory/native/native_open_factory.dart
index e2cbd575..f564d349 100644
--- a/packages/powersync/lib/src/open_factory/native/native_open_factory.dart
+++ b/packages/powersync_core/lib/src/open_factory/native/native_open_factory.dart
@@ -1,9 +1,10 @@
import 'dart:ffi';
-import 'package:powersync/powersync.dart';
+import 'package:powersync_core/src/exceptions.dart';
+import 'package:powersync_core/src/log.dart';
import 'package:universal_io/io.dart';
import 'dart:isolate';
-import 'package:powersync/src/open_factory/abstract_powersync_open_factory.dart';
+import 'package:powersync_core/src/open_factory/abstract_powersync_open_factory.dart';
import 'package:sqlite_async/sqlite3.dart' as sqlite;
import 'package:sqlite_async/sqlite3_common.dart';
import 'package:sqlite_async/sqlite_async.dart';
diff --git a/packages/powersync/lib/src/open_factory/open_factory_stub.dart b/packages/powersync_core/lib/src/open_factory/open_factory_stub.dart
similarity index 100%
rename from packages/powersync/lib/src/open_factory/open_factory_stub.dart
rename to packages/powersync_core/lib/src/open_factory/open_factory_stub.dart
diff --git a/packages/powersync/lib/src/open_factory/web/web_open_factory.dart b/packages/powersync_core/lib/src/open_factory/web/web_open_factory.dart
similarity index 91%
rename from packages/powersync/lib/src/open_factory/web/web_open_factory.dart
rename to packages/powersync_core/lib/src/open_factory/web/web_open_factory.dart
index 8c137393..bf4cf979 100644
--- a/packages/powersync/lib/src/open_factory/web/web_open_factory.dart
+++ b/packages/powersync_core/lib/src/open_factory/web/web_open_factory.dart
@@ -1,7 +1,7 @@
import 'dart:async';
-import 'package:powersync/src/open_factory/abstract_powersync_open_factory.dart';
-import 'package:powersync/src/uuid.dart';
+import 'package:powersync_core/src/open_factory/abstract_powersync_open_factory.dart';
+import 'package:powersync_core/src/uuid.dart';
import 'package:sqlite_async/sqlite3_common.dart';
import 'package:sqlite_async/sqlite_async.dart';
diff --git a/packages/powersync_core/lib/src/powersync_database.dart b/packages/powersync_core/lib/src/powersync_database.dart
new file mode 100644
index 00000000..144a7df4
--- /dev/null
+++ b/packages/powersync_core/lib/src/powersync_database.dart
@@ -0,0 +1 @@
+export 'package:powersync_core/src/database/powersync_database.dart';
diff --git a/packages/powersync/lib/src/powersync_update_notification.dart b/packages/powersync_core/lib/src/powersync_update_notification.dart
similarity index 100%
rename from packages/powersync/lib/src/powersync_update_notification.dart
rename to packages/powersync_core/lib/src/powersync_update_notification.dart
diff --git a/packages/powersync/lib/src/schema.dart b/packages/powersync_core/lib/src/schema.dart
similarity index 100%
rename from packages/powersync/lib/src/schema.dart
rename to packages/powersync_core/lib/src/schema.dart
diff --git a/packages/powersync/lib/src/schema_logic.dart b/packages/powersync_core/lib/src/schema_logic.dart
similarity index 100%
rename from packages/powersync/lib/src/schema_logic.dart
rename to packages/powersync_core/lib/src/schema_logic.dart
diff --git a/packages/powersync/lib/src/stream_utils.dart b/packages/powersync_core/lib/src/stream_utils.dart
similarity index 100%
rename from packages/powersync/lib/src/stream_utils.dart
rename to packages/powersync_core/lib/src/stream_utils.dart
diff --git a/packages/powersync/lib/src/streaming_sync.dart b/packages/powersync_core/lib/src/streaming_sync.dart
similarity index 98%
rename from packages/powersync/lib/src/streaming_sync.dart
rename to packages/powersync_core/lib/src/streaming_sync.dart
index 27c1bd62..6f4191ff 100644
--- a/packages/powersync/lib/src/streaming_sync.dart
+++ b/packages/powersync_core/lib/src/streaming_sync.dart
@@ -2,10 +2,10 @@ import 'dart:async';
import 'dart:convert' as convert;
import 'package:http/http.dart' as http;
-import 'package:powersync/src/abort_controller.dart';
-import 'package:powersync/src/exceptions.dart';
-import 'package:powersync/src/log_internal.dart';
-import 'package:powersync/src/user_agent/user_agent.dart';
+import 'package:powersync_core/src/abort_controller.dart';
+import 'package:powersync_core/src/exceptions.dart';
+import 'package:powersync_core/src/log_internal.dart';
+import 'package:powersync_core/src/user_agent/user_agent.dart';
import 'package:sqlite_async/mutex.dart';
import 'bucket_storage.dart';
diff --git a/packages/powersync/lib/src/sync_status.dart b/packages/powersync_core/lib/src/sync_status.dart
similarity index 100%
rename from packages/powersync/lib/src/sync_status.dart
rename to packages/powersync_core/lib/src/sync_status.dart
diff --git a/packages/powersync/lib/src/sync_types.dart b/packages/powersync_core/lib/src/sync_types.dart
similarity index 100%
rename from packages/powersync/lib/src/sync_types.dart
rename to packages/powersync_core/lib/src/sync_types.dart
diff --git a/packages/powersync/lib/src/user_agent/user_agent.dart b/packages/powersync_core/lib/src/user_agent/user_agent.dart
similarity index 100%
rename from packages/powersync/lib/src/user_agent/user_agent.dart
rename to packages/powersync_core/lib/src/user_agent/user_agent.dart
diff --git a/packages/powersync/lib/src/user_agent/user_agent_native.dart b/packages/powersync_core/lib/src/user_agent/user_agent_native.dart
similarity index 76%
rename from packages/powersync/lib/src/user_agent/user_agent_native.dart
rename to packages/powersync_core/lib/src/user_agent/user_agent_native.dart
index 018ddf87..ab1638c5 100644
--- a/packages/powersync/lib/src/user_agent/user_agent_native.dart
+++ b/packages/powersync_core/lib/src/user_agent/user_agent_native.dart
@@ -1,6 +1,6 @@
import 'dart:io';
-import 'package:powersync/src/version.dart';
+import 'package:powersync_core/src/version.dart';
String powerSyncUserAgent() {
var dartVersion = RegExp(r'[\w.]+').stringMatch(Platform.version);
@@ -10,7 +10,7 @@ String powerSyncUserAgent() {
}
// Ideally we'd get an OS version as well, but that's a little complex.
// Platform.operatingSystemVersion is very verbose.
- return 'powersync-dart/$libraryVersion $dart ${Platform.operatingSystem}';
+ return 'powersync-dart-core/$libraryVersion $dart ${Platform.operatingSystem}';
}
Map userAgentHeaders() {
diff --git a/packages/powersync/lib/src/user_agent/user_agent_stub.dart b/packages/powersync_core/lib/src/user_agent/user_agent_stub.dart
similarity index 100%
rename from packages/powersync/lib/src/user_agent/user_agent_stub.dart
rename to packages/powersync_core/lib/src/user_agent/user_agent_stub.dart
diff --git a/packages/powersync/lib/src/user_agent/user_agent_web.dart b/packages/powersync_core/lib/src/user_agent/user_agent_web.dart
similarity index 68%
rename from packages/powersync/lib/src/user_agent/user_agent_web.dart
rename to packages/powersync_core/lib/src/user_agent/user_agent_web.dart
index fb9a9d6c..8475d63c 100644
--- a/packages/powersync/lib/src/user_agent/user_agent_web.dart
+++ b/packages/powersync_core/lib/src/user_agent/user_agent_web.dart
@@ -1,7 +1,7 @@
-import 'package:powersync/src/version.dart';
+import 'package:powersync_core/src/version.dart';
String powerSyncUserAgent() {
- return 'powersync-dart/$libraryVersion Dart (flutter-web)';
+ return 'powersync-dart-core/$libraryVersion Dart (flutter-web)';
}
Map userAgentHeaders() {
diff --git a/packages/powersync/lib/src/uuid.dart b/packages/powersync_core/lib/src/uuid.dart
similarity index 100%
rename from packages/powersync/lib/src/uuid.dart
rename to packages/powersync_core/lib/src/uuid.dart
diff --git a/packages/powersync_core/lib/src/version.dart b/packages/powersync_core/lib/src/version.dart
new file mode 100644
index 00000000..bd2b438f
--- /dev/null
+++ b/packages/powersync_core/lib/src/version.dart
@@ -0,0 +1 @@
+const String libraryVersion = '1.0.0';
diff --git a/packages/powersync/lib/src/web/powersync_db.worker.dart b/packages/powersync_core/lib/src/web/powersync_db.worker.dart
similarity index 100%
rename from packages/powersync/lib/src/web/powersync_db.worker.dart
rename to packages/powersync_core/lib/src/web/powersync_db.worker.dart
diff --git a/packages/powersync/lib/src/web/sync_controller.dart b/packages/powersync_core/lib/src/web/sync_controller.dart
similarity index 98%
rename from packages/powersync/lib/src/web/sync_controller.dart
rename to packages/powersync_core/lib/src/web/sync_controller.dart
index 8231e7ce..a24ba578 100644
--- a/packages/powersync/lib/src/web/sync_controller.dart
+++ b/packages/powersync_core/lib/src/web/sync_controller.dart
@@ -1,7 +1,7 @@
import 'dart:async';
import 'dart:js_interop';
-import 'package:powersync/powersync.dart';
+import 'package:powersync_core/powersync_core.dart';
import 'package:sqlite_async/web.dart';
import 'package:web/web.dart';
diff --git a/packages/powersync/lib/src/web/sync_worker.dart b/packages/powersync_core/lib/src/web/sync_worker.dart
similarity index 97%
rename from packages/powersync/lib/src/web/sync_worker.dart
rename to packages/powersync_core/lib/src/web/sync_worker.dart
index 0b405bb1..59c0d9a9 100644
--- a/packages/powersync/lib/src/web/sync_worker.dart
+++ b/packages/powersync_core/lib/src/web/sync_worker.dart
@@ -9,10 +9,10 @@ import 'dart:js_interop';
import 'package:async/async.dart';
import 'package:fetch_client/fetch_client.dart';
-import 'package:powersync/powersync.dart';
-import 'package:powersync/sqlite_async.dart';
-import 'package:powersync/src/database/powersync_db_mixin.dart';
-import 'package:powersync/src/streaming_sync.dart';
+import 'package:powersync_core/powersync_core.dart';
+import 'package:powersync_core/sqlite_async.dart';
+import 'package:powersync_core/src/database/powersync_db_mixin.dart';
+import 'package:powersync_core/src/streaming_sync.dart';
import 'package:sqlite_async/web.dart';
import 'package:web/web.dart' hide RequestMode;
diff --git a/packages/powersync/lib/src/web/sync_worker_protocol.dart b/packages/powersync_core/lib/src/web/sync_worker_protocol.dart
similarity index 100%
rename from packages/powersync/lib/src/web/sync_worker_protocol.dart
rename to packages/powersync_core/lib/src/web/sync_worker_protocol.dart
diff --git a/packages/powersync/lib/src/web/web_bucket_storage.dart b/packages/powersync_core/lib/src/web/web_bucket_storage.dart
similarity index 82%
rename from packages/powersync/lib/src/web/web_bucket_storage.dart
rename to packages/powersync_core/lib/src/web/web_bucket_storage.dart
index ba106b26..c2f276e8 100644
--- a/packages/powersync/lib/src/web/web_bucket_storage.dart
+++ b/packages/powersync_core/lib/src/web/web_bucket_storage.dart
@@ -1,5 +1,5 @@
-import 'package:powersync/sqlite_async.dart';
-import 'package:powersync/src/bucket_storage.dart';
+import 'package:powersync_core/sqlite_async.dart';
+import 'package:powersync_core/src/bucket_storage.dart';
import 'package:sqlite_async/web.dart';
class WebBucketStorage extends BucketStorage {
diff --git a/packages/powersync/lib/src/web/worker_utils.dart b/packages/powersync_core/lib/src/web/worker_utils.dart
similarity index 88%
rename from packages/powersync/lib/src/web/worker_utils.dart
rename to packages/powersync_core/lib/src/web/worker_utils.dart
index 9f15547f..da14808d 100644
--- a/packages/powersync/lib/src/web/worker_utils.dart
+++ b/packages/powersync_core/lib/src/web/worker_utils.dart
@@ -1,5 +1,5 @@
-import 'package:powersync/sqlite3_common.dart';
-import 'package:powersync/src/open_factory/common_db_functions.dart';
+import 'package:powersync_core/sqlite3_common.dart';
+import 'package:powersync_core/src/open_factory/common_db_functions.dart';
import 'package:uuid/uuid.dart';
// Registers custom SQLite functions for the SQLite connection
diff --git a/packages/powersync_core/pubspec.yaml b/packages/powersync_core/pubspec.yaml
new file mode 100644
index 00000000..eb7a02fa
--- /dev/null
+++ b/packages/powersync_core/pubspec.yaml
@@ -0,0 +1,43 @@
+name: powersync_core
+version: 1.0.0
+homepage: https://powersync.com
+repository: https://github.com/powersync-ja/powersync.dart
+description: PowerSync Dart SDK - sync engine for building local-first apps.
+
+environment:
+ sdk: ^3.4.3
+
+dependencies:
+ sqlite_async: ^0.11.0
+ # We only use sqlite3 as a transitive dependency,
+ # but right now we need a minimum of v2.4.6.
+ sqlite3: ^2.4.6
+ universal_io: ^2.0.0
+ meta: ^1.0.0
+ http: ^1.1.0
+ uuid: ^4.2.0
+ async: ^2.10.0
+ logging: ^1.1.1
+ collection: ^1.17.0
+ fetch_client: ^1.1.2
+ js: ^0.7.0
+ web: ^1.0.0
+dev_dependencies:
+ dcli: ^4.0.0
+ lints: ^3.0.0
+ test: ^1.25.0
+ test_api: ^0.7.0
+ path_provider: ^2.0.13
+ shelf: ^1.4.1
+ shelf_router: ^1.1.4
+ shelf_static: ^1.1.2
+ stream_channel: ^2.1.2
+ path: ^1.8.3
+
+platforms:
+ android:
+ ios:
+ linux:
+ macos:
+ windows:
+ web:
diff --git a/packages/powersync/test/bucket_storage_test.dart b/packages/powersync_core/test/bucket_storage_test.dart
similarity index 99%
rename from packages/powersync/test/bucket_storage_test.dart
rename to packages/powersync_core/test/bucket_storage_test.dart
index 8b3cac41..beb05d16 100644
--- a/packages/powersync/test/bucket_storage_test.dart
+++ b/packages/powersync_core/test/bucket_storage_test.dart
@@ -1,6 +1,6 @@
-import 'package:powersync/powersync.dart';
-import 'package:powersync/src/bucket_storage.dart';
-import 'package:powersync/src/sync_types.dart';
+import 'package:powersync_core/powersync_core.dart';
+import 'package:powersync_core/src/bucket_storage.dart';
+import 'package:powersync_core/src/sync_types.dart';
import 'package:sqlite_async/sqlite3_common.dart';
import 'package:test/test.dart';
diff --git a/packages/powersync/test/connected_test.dart b/packages/powersync_core/test/connected_test.dart
similarity index 98%
rename from packages/powersync/test/connected_test.dart
rename to packages/powersync_core/test/connected_test.dart
index 0f6d3b71..90218cb8 100644
--- a/packages/powersync/test/connected_test.dart
+++ b/packages/powersync_core/test/connected_test.dart
@@ -3,7 +3,7 @@
// but this makes the test significantly more complex.
import 'dart:async';
-import 'package:powersync/powersync.dart';
+import 'package:powersync_core/powersync_core.dart';
import 'package:test/test.dart';
import 'server/sync_server/mock_sync_server.dart';
diff --git a/packages/powersync/test/credentials_test.dart b/packages/powersync_core/test/credentials_test.dart
similarity index 90%
rename from packages/powersync/test/credentials_test.dart
rename to packages/powersync_core/test/credentials_test.dart
index fcdb2551..013b5efe 100644
--- a/packages/powersync/test/credentials_test.dart
+++ b/packages/powersync_core/test/credentials_test.dart
@@ -1,4 +1,4 @@
-import 'package:powersync/powersync.dart';
+import 'package:powersync_core/powersync_core.dart';
import 'package:test/test.dart';
void main() {
diff --git a/packages/powersync/test/crud_test.dart b/packages/powersync_core/test/crud_test.dart
similarity index 99%
rename from packages/powersync/test/crud_test.dart
rename to packages/powersync_core/test/crud_test.dart
index ba7de5c7..3a4ab635 100644
--- a/packages/powersync/test/crud_test.dart
+++ b/packages/powersync_core/test/crud_test.dart
@@ -1,4 +1,4 @@
-import 'package:powersync/powersync.dart';
+import 'package:powersync_core/powersync_core.dart';
import 'package:sqlite_async/sqlite3_common.dart';
import 'package:test/test.dart';
diff --git a/packages/powersync/test/disconnect_test.dart b/packages/powersync_core/test/disconnect_test.dart
similarity index 95%
rename from packages/powersync/test/disconnect_test.dart
rename to packages/powersync_core/test/disconnect_test.dart
index 80cb52ed..489928ef 100644
--- a/packages/powersync/test/disconnect_test.dart
+++ b/packages/powersync_core/test/disconnect_test.dart
@@ -1,5 +1,5 @@
-import 'package:powersync/powersync.dart';
-import 'package:powersync/sqlite_async.dart';
+import 'package:powersync_core/powersync_core.dart';
+import 'package:powersync_core/sqlite_async.dart';
import 'package:test/test.dart';
import 'streaming_sync_test.dart';
import 'utils/test_utils_impl.dart';
diff --git a/packages/powersync/test/offline_online_test.dart b/packages/powersync_core/test/offline_online_test.dart
similarity index 98%
rename from packages/powersync/test/offline_online_test.dart
rename to packages/powersync_core/test/offline_online_test.dart
index 8c831806..2fb1ed6d 100644
--- a/packages/powersync/test/offline_online_test.dart
+++ b/packages/powersync_core/test/offline_online_test.dart
@@ -1,6 +1,6 @@
import 'dart:convert';
-import 'package:powersync/powersync.dart';
+import 'package:powersync_core/powersync_core.dart';
import 'package:sqlite_async/src/utils/shared_utils.dart';
import 'package:test/test.dart';
diff --git a/packages/powersync/test/performance_native_test.dart b/packages/powersync_core/test/performance_native_test.dart
similarity index 98%
rename from packages/powersync/test/performance_native_test.dart
rename to packages/powersync_core/test/performance_native_test.dart
index 9def5945..b36236de 100644
--- a/packages/powersync/test/performance_native_test.dart
+++ b/packages/powersync_core/test/performance_native_test.dart
@@ -1,5 +1,5 @@
@TestOn('!browser')
-import 'package:powersync/powersync.dart';
+import 'package:powersync_core/powersync_core.dart';
import 'package:test/test.dart';
import 'performance_shared_test.dart';
diff --git a/packages/powersync/test/performance_shared_test.dart b/packages/powersync_core/test/performance_shared_test.dart
similarity index 98%
rename from packages/powersync/test/performance_shared_test.dart
rename to packages/powersync_core/test/performance_shared_test.dart
index 5044c099..f4a20431 100644
--- a/packages/powersync/test/performance_shared_test.dart
+++ b/packages/powersync_core/test/performance_shared_test.dart
@@ -1,4 +1,4 @@
-import 'package:powersync/powersync.dart';
+import 'package:powersync_core/powersync_core.dart';
import 'package:test/test.dart';
import 'utils/test_utils_impl.dart';
diff --git a/packages/powersync/test/powersync_native_test.dart b/packages/powersync_core/test/powersync_native_test.dart
similarity index 98%
rename from packages/powersync/test/powersync_native_test.dart
rename to packages/powersync_core/test/powersync_native_test.dart
index aeda23d8..1a338e3d 100644
--- a/packages/powersync/test/powersync_native_test.dart
+++ b/packages/powersync_core/test/powersync_native_test.dart
@@ -2,7 +2,7 @@
import 'dart:async';
import 'dart:math';
-import 'package:powersync/powersync.dart';
+import 'package:powersync_core/powersync_core.dart';
import 'package:sqlite_async/sqlite3_common.dart';
import 'package:test/test.dart';
import 'utils/abstract_test_utils.dart';
diff --git a/packages/powersync/test/powersync_shared_test.dart b/packages/powersync_core/test/powersync_shared_test.dart
similarity index 100%
rename from packages/powersync/test/powersync_shared_test.dart
rename to packages/powersync_core/test/powersync_shared_test.dart
diff --git a/packages/powersync/test/schema_test.dart b/packages/powersync_core/test/schema_test.dart
similarity index 99%
rename from packages/powersync/test/schema_test.dart
rename to packages/powersync_core/test/schema_test.dart
index 7dfda31c..82cfac06 100644
--- a/packages/powersync/test/schema_test.dart
+++ b/packages/powersync_core/test/schema_test.dart
@@ -1,4 +1,4 @@
-import 'package:powersync/powersync.dart';
+import 'package:powersync_core/powersync_core.dart';
import 'package:test/test.dart';
import 'utils/test_utils_impl.dart';
diff --git a/packages/powersync/test/server/asset_server.dart b/packages/powersync_core/test/server/asset_server.dart
similarity index 100%
rename from packages/powersync/test/server/asset_server.dart
rename to packages/powersync_core/test/server/asset_server.dart
diff --git a/packages/powersync/test/server/sync_server/mock_sync_server.dart b/packages/powersync_core/test/server/sync_server/mock_sync_server.dart
similarity index 100%
rename from packages/powersync/test/server/sync_server/mock_sync_server.dart
rename to packages/powersync_core/test/server/sync_server/mock_sync_server.dart
diff --git a/packages/powersync/test/server/worker_server.dart b/packages/powersync_core/test/server/worker_server.dart
similarity index 91%
rename from packages/powersync/test/server/worker_server.dart
rename to packages/powersync_core/test/server/worker_server.dart
index 2889b1d5..47c5e407 100644
--- a/packages/powersync/test/server/worker_server.dart
+++ b/packages/powersync_core/test/server/worker_server.dart
@@ -17,14 +17,14 @@ Future hybridMain(StreamChannel