|
1 | 1 | # PowerSync SDK for Dart/Flutter |
2 | 2 |
|
3 | | -[PowerSync](https://powersync.co) is a service and set of SDKs that keeps PostgreSQL databases in sync with on-device SQLite databases. |
| 3 | +[PowerSync](https://powersync.com) is a service and set of SDKs that keeps PostgreSQL databases in sync with on-device SQLite databases. |
| 4 | + |
| 5 | +## *** Web support - Open alpha *** |
| 6 | + |
| 7 | +Web support is currently in an alpha release. This Readme has been updated to reflect updates that are currently only relevant to this alpha release. |
| 8 | + |
| 9 | +### Demo app |
| 10 | + |
| 11 | +The easiest way to test out the alpha is to run the [Supabase Todo-List](./demos/supabase-todolist) demo app: |
| 12 | + |
| 13 | +1. Checkout the powersync.dart repo's `alpha_release`` branch. |
| 14 | + * Note: If you are an existing user updating to the latest code after a git pull, run `melos exec 'flutter pub upgrade'` in the project's root and make sure it succeeds. |
| 15 | +2. Run `melos prepare` in the project's root |
| 16 | +3. cd into the `demos/supabase-todolist` folder |
| 17 | +4. If you haven’t yet: `cp lib/app_config_template.dart lib/app_config.dart` (optionally update this config with your own Supabase and PowerSync project details). |
| 18 | +5. Run `flutter run -d chrome` |
| 19 | + |
| 20 | +### Installing PowerSync in your own project |
| 21 | + |
| 22 | +Install the latest alpha version of the package, for example: |
| 23 | + |
| 24 | +```flutter pub add powersync:1.3.0-alpha.1``` |
| 25 | + |
| 26 | +### Additional config |
| 27 | +Web support requires `sqlite3.wasm` and `powersync_db.worker.js` assets to be served from the web application. This is typically achieved by placing the files in the project `web` directory. |
| 28 | + |
| 29 | +- `sqlite3.wasm` can be found [here](https://github.com/simolus3/sqlite3.dart/releases) |
| 30 | +- `powersync_db.worker.js` can be found in the repo's [releases](https://github.com/powersync-ja/powersync.dart/releases) page. |
| 31 | + |
| 32 | +Currently the Drift SQLite library is used under the hood for DB connections. See [here](https://drift.simonbinder.eu/web/#getting-started) for detailed compatibility |
| 33 | +and setup notes. |
| 34 | + |
| 35 | +The same code is used for initializing native and web `PowerSyncDatabase` clients. |
| 36 | + |
| 37 | +### Getting started |
| 38 | +Follow the [Getting Started](#getting-started) steps further down in this Readme to implement a backend connector and initialize the PowerSync database in your app, and hook PowerSync up with your app's UI. |
| 39 | + |
| 40 | +### Limitations |
| 41 | + |
| 42 | +The API for web is essentially the same as for native platforms. Some features within `PowerSyncDatabase` clients are not available. |
| 43 | + |
| 44 | +Multiple tab support is not yet available. Using multiple tabs will break. |
| 45 | + |
| 46 | +#### Imports |
| 47 | + |
| 48 | +Flutter Web does not support importing directly from `sqlite3.dart` as it uses `dart:ffi`. |
| 49 | + |
| 50 | +Change imports from |
| 51 | + |
| 52 | +```Dart |
| 53 | +import 'package/powersync/sqlite3.dart` |
| 54 | +``` |
| 55 | + |
| 56 | +to |
| 57 | + |
| 58 | +```Dart |
| 59 | +import 'package/powersync/sqlite3_common.dart' |
| 60 | +``` |
| 61 | + |
| 62 | +In code which needs to run on the Web platform. Isolated native specific code can still import from `sqlite3.dart`. |
| 63 | + |
| 64 | +#### Database connections |
| 65 | + |
| 66 | +Web DB connections do not support concurrency. A single DB connection is used. `readLock` and `writeLock` contexts do not |
| 67 | +implement checks for preventing writable queries in read connections and vice-versa. |
| 68 | + |
| 69 | +Direct access to the synchronous `CommonDatabase` (`sqlite.Database` equivalent for web) connection is not available. `computeWithDatabase` is not available on web. |
| 70 | + |
4 | 71 |
|
5 | 72 | ## SDK Features |
6 | 73 |
|
|
11 | 78 | - No need for client-side database migrations - these are handled automatically. |
12 | 79 | - Subscribe to queries for live updates. |
13 | 80 |
|
14 | | -## Examples |
15 | 81 |
|
16 | | -For complete app examples, see our [example app gallery](https://docs.powersync.com/resources/demo-apps-example-projects#flutter) |
17 | | - |
18 | | -For examples of some common patterns, see our [example snippets](./example/README.md) |
19 | 82 |
|
20 | 83 | ## Getting started |
21 | 84 |
|
22 | 85 | You'll need to create a PowerSync account and set up a PowerSync instance. You can do this at [https://www.powersync.com/](https://www.powersync.com/). |
23 | 86 |
|
24 | 87 | ### Install the package |
| 88 | +To test web support, install the latest alpha version of the SDK, for example: |
| 89 | + |
| 90 | +```flutter pub add powersync:1.3.0-alpha.1``` |
25 | 91 |
|
| 92 | +If you want to install the latest stable version of the SDK, run: |
26 | 93 | `flutter pub add powersync` |
27 | 94 |
|
28 | 95 | ### Implement a backend connector and initialize the PowerSync database |
@@ -155,49 +222,4 @@ Logger.root.onRecord.listen((record) { |
155 | 222 | }); |
156 | 223 | ``` |
157 | 224 |
|
158 | | -## Web support |
159 | | - |
160 | | -Web support is currently in an alpha release. |
161 | | - |
162 | | -### Setup |
163 | | - |
164 | | -Web support requires `sqlite3.wasm` and `powersync_db.worker.js` assets to be served from the web application. This is typically achieved by placing the files in the project `web` directory. |
165 | | - |
166 | | -- `sqlite3.wasm` can be found [here](https://github.com/simolus3/sqlite3.dart/releases) |
167 | | -- `powersync_db.worker.js` can be found in the repo's [releases](https://github.com/powersync-ja/powersync.dart/releases) page. |
168 | | - |
169 | | -Currently the Drift SQLite library is used under the hood for DB connections. See [here](https://drift.simonbinder.eu/web/#getting-started) for detailed compatibility |
170 | | -and setup notes. |
171 | | - |
172 | | -The same code is used for initializing native and web `PowerSyncDatabase` clients. |
173 | | - |
174 | | -### Limitations |
175 | | - |
176 | | -The API for web is essentially the same as for native platforms. Some features within `PowerSyncDatabase` clients are not available. |
177 | 225 |
|
178 | | -#### Imports |
179 | | - |
180 | | -Flutter Web does not support importing directly from `sqlite3.dart` as it uses `dart:ffi`. |
181 | | - |
182 | | -Change imports from |
183 | | - |
184 | | -```Dart |
185 | | -import 'package/powersync/sqlite3.dart` |
186 | | -``` |
187 | | - |
188 | | -to |
189 | | - |
190 | | -```Dart |
191 | | -import 'package/powersync/sqlite3_common.dart' |
192 | | -``` |
193 | | - |
194 | | -In code which needs to run on the Web platform. Isolated native specific code can still import from `sqlite3.dart`. |
195 | | - |
196 | | -#### Database connections |
197 | | - |
198 | | -Web DB connections do not support concurrency. A single DB connection is used. `readLock` and `writeLock` contexts do not |
199 | | -implement checks for preventing writable queries in read connections and vice-versa. |
200 | | - |
201 | | -Direct access to the synchronous `CommonDatabase` (`sqlite.Database` equivalent for web) connection is not available. `computeWithDatabase` is not available on web. |
202 | | - |
203 | | -Multiple tab support is not yet available. Using multiple tabs will break. |
|
0 commit comments