diff --git a/client-sdk-references/swift.mdx b/client-sdk-references/swift.mdx
index d4ffb92e..0db330ec 100644
--- a/client-sdk-references/swift.mdx
+++ b/client-sdk-references/swift.mdx
@@ -26,7 +26,7 @@ The PowerSync Swift SDK currently makes use of the [PowerSync Kotlin Multiplatfo
**Demo App**
- We recommend the [Supabase Todo List Demo](https://github.com/powersync-ja/powersync-swift/tree/main/Demo) app as a starting point for using the Swift SDK. See the README for details to run it.
+ We recommend the [Supabase To-Do List Demo](https://github.com/powersync-ja/powersync-swift/tree/main/Demo) app as a starting point for using the Swift SDK. See the README for details to run it.
### SDK Features
@@ -90,7 +90,7 @@ The beta version of this SDK introduces a Swift-native wrapper around the packag
* `@MainThread` usage is no longer required and should be removed.
* Implementing `SuspendTaskWrapper` for database transactions is no longer required and should be removed.
-See the [Todo List Demo app](https://github.com/powersync-ja/powersync-swift/tree/main/Demo) as a reference.
+See the [To-Do List Demo app](https://github.com/powersync-ja/powersync-swift/tree/main/Demo) as a reference.
## Getting Started
diff --git a/installation/app-backend-setup.mdx b/installation/app-backend-setup.mdx
index d3d7ddd6..4b0eb9be 100644
--- a/installation/app-backend-setup.mdx
+++ b/installation/app-backend-setup.mdx
@@ -25,4 +25,4 @@ See [Authentication Setup](/installation/authentication-setup) for details.
See our [Example Projects](/resources/demo-apps-example-projects#custom-backend-examples) page for examples of custom backend implementations (e.g. Django, Node.js, etc.)
-For Postgres developers, using [Supabase](/integration-guides/supabase-+-powersync) is an easy alternative to a custom backend. Several of our example apps demonstrate how to use [Supabase](https://supabase.com/) as the Postgres backend.
+For Postgres developers, using [Supabase](/integration-guides/supabase-+-powersync) is an easy alternative to a custom backend. Several of our demo apps demonstrate how to use [Supabase](https://supabase.com/) as the Postgres backend.
diff --git a/installation/quickstart-guide.mdx b/installation/quickstart-guide.mdx
index 616f5186..29cbf482 100644
--- a/installation/quickstart-guide.mdx
+++ b/installation/quickstart-guide.mdx
@@ -10,7 +10,7 @@ Support for additional platforms is on our [Roadmap](https://roadmap.powersync.c
### Postgres Developers: Using Supabase? Try Our Guide.
-If you are using [Supabase](https://supabase.com/) as your backend, we provide a [PowerSync\<>Supabase integration guide](/integration-guides/supabase-+-powersync) which includes a tutorial and example app to quickly learn how to use PowerSync with Supabase.
+If you are using [Supabase](https://supabase.com/) as your backend, we provide a [PowerSync\<>Supabase integration guide](/integration-guides/supabase-+-powersync) which includes a tutorial and demo app to quickly learn how to use PowerSync with Supabase.
## Implementation outline
diff --git a/integration-guides/coolify.mdx b/integration-guides/coolify.mdx
index 4eac5374..7752e308 100644
--- a/integration-guides/coolify.mdx
+++ b/integration-guides/coolify.mdx
@@ -227,7 +227,7 @@ The following Compose file serves as a universal starting point for deploying th
content: |
bucket_definitions:
user_lists:
- # Separate bucket per todo list
+ # Separate bucket per To-Do list
parameters: select id as list_id from lists where owner_id = request.user_id()
data:
- select * from lists where id = bucket.list_id
diff --git a/integration-guides/supabase-+-powersync.mdx b/integration-guides/supabase-+-powersync.mdx
index f08d90ea..8d49447b 100644
--- a/integration-guides/supabase-+-powersync.mdx
+++ b/integration-guides/supabase-+-powersync.mdx
@@ -133,7 +133,7 @@ create publication powersync for table public.lists, public.todos;
```yaml
bucket_definitions:
user_lists:
- # Separate bucket per todo list
+ # Separate bucket per To-Do list
parameters: select id as list_id from lists where owner_id = request.user_id()
data:
- select * from lists where id = bucket.list_id
diff --git a/integration-guides/supabase-+-powersync/handling-attachments.mdx b/integration-guides/supabase-+-powersync/handling-attachments.mdx
index 3779566e..09e91ae4 100644
--- a/integration-guides/supabase-+-powersync/handling-attachments.mdx
+++ b/integration-guides/supabase-+-powersync/handling-attachments.mdx
@@ -5,7 +5,7 @@ description: "Examples of syncing attachments between a client app and Supabase
## React Native Example
-Our React Native [To-Do List example app](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-native-supabase-todolist) showcases how to sync attachments (such as photos) using the [@powersync/attachments](https://www.npmjs.com/package/@powersync/attachments) library, the PowerSync Service, and Supabase.
+Our React Native [To-Do List demo app](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-native-supabase-todolist) showcases how to sync attachments (such as photos) using the [@powersync/attachments](https://www.npmjs.com/package/@powersync/attachments) library, the PowerSync Service, and Supabase.
In this example, we are syncing photos, however other media types, such as PDFs, are also supported.
@@ -17,7 +17,7 @@ The library and this example implementation can be used as a reference for imple
### Configure Storage in Supabase
-In this example app, [Supabase Storage](https://supabase.com/docs/guides/storage) is used to store and serve attachments. To configure this for your app, navigate to the **Storage** section of your Supabase project and create a new bucket:
+In this demo app, [Supabase Storage](https://supabase.com/docs/guides/storage) is used to store and serve attachments. To configure this for your app, navigate to the **Storage** section of your Supabase project and create a new bucket:
@@ -35,7 +35,7 @@ Next, link this storage bucket to your app by opening up the **AppConfig.ts** fi
-Lastly, configure a policy for this bucket. In this example app, we will allow all user operations on the media bucket.
+Lastly, configure a policy for this bucket. In this demo app, we will allow all user operations on the media bucket.
Create a new policy for the **media** bucket:
@@ -54,7 +54,7 @@ Give the new policy a name, and allow SELECT, INSERT, UPDATE, and DELETE.
Proceed to review and save the policy.
-This concludes the necessary configuration for handling attachments in the To-Do List example app. When running the app now, a photo can be taken for a to-do list item, and PowerSync will ensure that the photo syncs to Supabase and other devices (if sync rules allow).
+This concludes the necessary configuration for handling attachments in the To-Do List demo app. When running the app now, a photo can be taken for a to-do list item, and PowerSync will ensure that the photo syncs to Supabase and other devices (if sync rules allow).
@@ -75,7 +75,7 @@ The [@powersync/attachments](https://www.npmjs.com/package/@powersync/attachment
* Watch for changes and handle CRUD operations on `AttachmentRecord`s.
* Store attachment data on the user's local storage, using file URIs on the device.
-The UI of the example app supports taking photos as follows:
+The UI of the demo app supports taking photos as follows:
* [CameraWidget](https://github.com/powersync-ja/powersync-js/blob/main/demos/react-native-supabase-todolist/library/widgets/CameraWidget.tsx) uses `expo-camera` to allow users to capture a photo.
* The photo is stored on the user's local storage.
@@ -107,7 +107,7 @@ The following improvements can be considered for this implementation.
## Flutter Example
-Our Flutter [To-Do List example app](https://github.com/powersync-ja/powersync.dart/tree/master/demos/supabase-todolist) showcases how to sync attachments (such as photos) using our [powersync\_attachments\_helper](https://pub.dev/packages/powersync_attachments_helper) package for Flutter.
+Our Flutter [To-Do List demo app](https://github.com/powersync-ja/powersync.dart/tree/master/demos/supabase-todolist) showcases how to sync attachments (such as photos) using our [powersync\_attachments\_helper](https://pub.dev/packages/powersync_attachments_helper) package for Flutter.
## See Also
diff --git a/intro/powersync-overview.mdx b/intro/powersync-overview.mdx
index a832edc9..903a5b29 100644
--- a/intro/powersync-overview.mdx
+++ b/intro/powersync-overview.mdx
@@ -109,7 +109,7 @@ This applies to self-hosting of the [PowerSync Open Edition](https://www.powersy
-## Examples
+## Examples & Tutorials
Explore and learn from example implementations and common use cases with PowerSync.
@@ -121,6 +121,10 @@ Explore and learn from example implementations and common use cases with PowerSy
Learn how to implement common use cases with PowerSync.
+
+
+ Solve specific problems with our growing collection of tutorials.
+
## Troubleshooting
diff --git a/migration-guides/mongodb-atlas.mdx b/migration-guides/mongodb-atlas.mdx
index ed91887e..23ddd9e3 100644
--- a/migration-guides/mongodb-atlas.mdx
+++ b/migration-guides/mongodb-atlas.mdx
@@ -1,6 +1,6 @@
---
title: "MongoDB Atlas Migration Guide"
-description: "This page was last updated on 2024-10-16"
+description: "This page was last updated on 2024-12-27"
---
## MongoDB Atlas deprecation
@@ -48,6 +48,8 @@ As you can see, this is not a point-and-click migration, however it does enable
### Migration steps
+The blog post [Migrating a MongoDB Atlas Device Sync App to PowerSync](https://www.powersync.com/blog/migrating-a-mongodb-atlas-device-sync-app-to-powersync) can serve as a handy guide through the migration process.
+
1. Connect your database to an instance of the PowerSync Service:
1. Using PowerSync Cloud (hosted by us): See [Database Connection](/installation/database-connection#mongodb-alpha-specifics)
2. Using PowerSync Open Edition (self-hosted): Refer to our end-to-end demo app [available here](https://github.com/powersync-ja/self-host-demo/tree/main/demos/nodejs-mongodb)
diff --git a/mint.json b/mint.json
index 38296b60..1a5bafe3 100644
--- a/mint.json
+++ b/mint.json
@@ -51,7 +51,7 @@
"url": "client-sdk-references"
},
{
- "name": "Self Hosting",
+ "name": "Self-Hosting",
"url": "self-hosting"
},
{
@@ -338,7 +338,7 @@
]
},
{
- "group": "Self Hosting",
+ "group": "Self-Hosting",
"pages": [
"self-hosting/getting-started",
{
@@ -372,10 +372,14 @@
}
]
},
+ {
+ "group": "",
+ "pages": ["tutorials/overview"]
+ },
{
"group": "Client",
"pages": [
- "tutorials/overview",
+ "tutorials/client/overview",
{
"group": "Attachments / Files",
"pages": [
@@ -401,11 +405,7 @@
]
},
{
- "group": "Backend",
- "pages": ["tutorials/backend/overview"]
- },
- {
- "group": "Self Host",
+ "group": "Self-Hosting",
"pages": [
"tutorials/self-host/overview",
"tutorials/self-host/generate-dev-token"
diff --git a/resources/demo-apps-example-projects.mdx b/resources/demo-apps-example-projects.mdx
index 3be15b12..81b655f4 100644
--- a/resources/demo-apps-example-projects.mdx
+++ b/resources/demo-apps-example-projects.mdx
@@ -3,172 +3,131 @@ title: "Demo Apps / Example Projects"
description: "Gallery of example projects built with PowerSync."
---
-Example projects are listed under the backend they use, but you can easily wire up your own backend as documented [here](/installation/app-backend-setup).
-
-For example implementations and details of common use cases, see [Use Case Examples](/usage/use-case-examples)
+Example projects are listed under backend they use, but you can easily wire up your own backend as documented [here](/installation/app-backend-setup).
We're constantly expanding our list of example projects. If you'd like to see an example that is not currently available, [let us know on Discord](https://discord.gg/powersync).
-## Flutter
-
-#### Supabase Backend:
-
-* [To-Do List App](https://github.com/powersync-ja/powersync.dart/tree/master/demos/supabase-todolist)
-
- * Includes [Full-Text Search](/usage/use-case-examples/full-text-search) (FTS) example
-
- * Includes example of [Handling Attachments](/integration-guides/supabase-+-powersync/handling-attachments) (files)
-
-* [To-Do List app + Drift](https://github.com/powersync-ja/powersync.dart/tree/master/demos/supabase-todolist-drift)
-
-* [To-Do List app demonstrating data persistence with local-only tables](https://github.com/powersync-ja/powersync.dart/tree/main/demos/supabase-todolist-optional-sync)
-
-* [Simple Chat App](https://github.com/powersync-ja/powersync.dart/tree/master/demos/supabase-simple-chat)
-
-* [Trello Clone App](https://github.com/powersync-ja/powersync-supabase-flutter-trello-demo)
-
-**Node.js Custom Backend:**
-
-* [To-Do List App](https://github.com/powersync-ja/powersync.dart/tree/main/demos/firebase-nodejs-todolist)
-
- * Corresponding backend demo: [Node.js Backend for To-Do List App, with Firebase Auth](https://github.com/powersync-ja/powersync-nodejs-firebase-backend-todolist-demo) (also linked below)
-
-**Rails Custom Backend:**
-
-* [GoToFun App](https://github.com/powersync-ja/powersync-rails-flutter-demo)
-
- * This repo includes both the Flutter app and Rails backend
-
-#### Django Custom Backend:
-
-* [To-Do List App](https://github.com/powersync-ja/powersync.dart/tree/master/demos/django-todolist)
-
- * Corresponding backend demo: [Django Backend for To-Do List App](https://github.com/powersync-ja/powersync-django-backend-todolist-demo) (also linked below)
-
-## React Native & Expo
-
-#### Supabase Backend:
-
-* [To-Do List App](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-native-supabase-todolist)
-
- * Includes an example of [Handling Attachments](/integration-guides/supabase-+-powersync/handling-attachments) (files)
-
-* [PowerChat - Group Chat App](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-native-supabase-group-chat)
-
-#### Django Custom Backend:
-
-* [To-Do List App](https://github.com/powersync-ja/powersync-js/tree/main/demos/django-react-native-todolist)
-
- * Corresponding backend demo: [Django Backend for To-Do List App](https://github.com/powersync-ja/powersync-django-backend-todolist-demo) (also linked below)
-
-## JavaScript Web
-
-#### Supabase Backend:
-
-* [React To-Do List App](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-supabase-todolist)
-
- * Includes [Full-Text Search](/usage/use-case-examples/full-text-search) (FTS) example
-
-* [React To-Do List app demonstrating data persistence with local-only tables](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-supabase-todolist-optional-sync)
-
-* [React 'Multi-Client Widget'](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-multi-client)
-
- * This is the demo widget displayed on the [PowerSync homepage](https://www.powersync.com/) which shows how data flows from one PowerSync client to another.
-
-* [Vue To-Do List App](https://github.com/powersync-ja/powersync-js/tree/main/demos/vue-supabase-todolist)
-
-* [Angular To-Do List App](https://github.com/powersync-ja/powersync-js/tree/main/demos/angular-supabase-todolist)
-
-* [Yjs CRDT Text Collaboration Demo](https://github.com/powersync-ja/powersync-js/tree/main/demos/yjs-react-supabase-text-collab)
-
-#### Starter Projects:
-
-* [example-electron](https://github.com/powersync-ja/powersync-js/tree/main/demos/example-electron): Example demonstrating the use of PowerSync together with an [Electron](https://www.electronjs.org/) rendered web app.
-
-* [example-capacitor](https://github.com/powersync-ja/powersync-js/tree/main/demos/example-capacitor): Example demonstrating the use of PowerSync together with a [Capacitor](https://capacitorjs.com/) app.
-
-* [example-nextjs](https://github.com/powersync-ja/powersync-js/blob/main/demos/example-nextjs/README.md): A minimal example demonstrating setup with [Next.js](https://nextjs.org/).
-
-* [example-webpack](https://github.com/powersync-ja/powersync-js/blob/main/demos/example-webpack/README.md): A minimal example demonstrating bundling with [Webpack](https://webpack.js.org/).
-
-* [example-vite](https://github.com/powersync-ja/powersync-js/blob/main/demos/example-vite/README.md): A minimal example demonstrating bundling with [Vite](https://vitejs.dev/).
-
-## Kotlin Multiplatform
-
-**Supabase Backend:**
-
-* [Minimal 'Hello PowerSync' App](https://github.com/powersync-ja/powersync-kotlin/tree/main/demos/hello-powersync)
-
-* [To-Do List App](https://github.com/powersync-ja/powersync-kotlin/tree/main/demos/supabase-todolist)
-
-* [To-Do List App as a native Android application](https://github.com/powersync-ja/powersync-kotlin/tree/main/demos/android-supabase-todolist)
-
-## Swift
-
-**Supabase Backend:**
-
-* [To-Do List App](https://github.com/powersync-ja/powersync-swift/tree/main/Demo)
-
-## Custom Backend Examples
-
-* [Django Backend for To-Do List App](https://github.com/powersync-ja/powersync-django-backend-todolist-demo)
-
- * Corresponding front-end demo app: React Native [To-Do List App](https://github.com/powersync-ja/powersync-js/tree/main/demos/django-react-native-todolist) (also linked above)
-
-* [Node.js Backend for To-Do List App ](https://github.com/powersync-ja/powersync-nodejs-backend-todolist-demo)
-
-* [Node.js Backend for To-Do List App, with Firebase Auth](https://github.com/powersync-ja/powersync-nodejs-firebase-backend-todolist-demo)
-
- * Corresponding front-end demo app: Flutter [To-Do List App](https://github.com/powersync-ja/powersync.dart/tree/main/demos/firebase-nodejs-todolist) (also linked above)
-
-* [Rails Backend for GoToFun App](https://github.com/powersync-ja/powersync-rails-flutter-demo/tree/main/gotofun-backend)
-
- * Corresponding front-end demo app: Flutter [GoToFun App](https://github.com/powersync-ja/powersync-rails-flutter-demo/tree/main/gotofun-app) (also linked above)
-
-## Self-Hosting
-
-* [To-Do List App with Docker Compose](https://github.com/powersync-ja/self-host-demo)
-
- * [Postgres + Node.js Backend](https://github.com/powersync-ja/self-host-demo/tree/main/demos/nodejs)
-
- * [MongoDB + Node.js Backend](https://github.com/powersync-ja/self-host-demo/tree/main/demos/nodejs-mongodb)
-
- * [MySQL + Node.js Backend](https://github.com/powersync-ja/self-host-demo/tree/main/demos/nodejs-mysql)
-
- * [Supabase Backend + Local Development Example](https://github.com/powersync-ja/self-host-demo/tree/main/demos/supabase)
-
- * [Django Backend](https://github.com/powersync-ja/self-host-demo/tree/main/demos/django)
-
-## Notable Community Projects
-
-### JavaScript & TypeScript
-
-* SolidJS hooks for PowerSync queries
-
- * [https://github.com/aboviq/powersync-solid](https://github.com/aboviq/powersync-solid)
-
-* Effect + Kysely + Stytch
-
- * [https://github.com/guillempuche/localfirst\_react\_server](https://github.com/guillempuche/localfirst_react_server)
-
-* Tauri + Shadcn UI
-
- * [https://github.com/romatallinn/powersync-tauri](https://github.com/romatallinn/powersync-tauri)
-
-* Expo Web
-
- * [https://github.com/ImSingee/powersync-web-workers](https://github.com/ImSingee/powersync-web-workers)
-
- * Our [React Native Web](/client-sdk-references/react-native-and-expo/react-native-web-support) support should now remove the need to *"Patch the* *`@powersync/web`* *module"*
-
-### Flutter
-
-* Flutter + Supabase + Firebase
-
- * [https://github.com/Gambley1/flutter-instagram-offline-first-clone](https://github.com/Gambley1/flutter-instagram-offline-first-clone)
-
-* Testing PowerSync with Jepsen for formal consistency validation
- * [https://github.com/nurturenature/jepsen-powersync](https://github.com/nurturenature/jepsen-powersync)
+
+
+ #### Supabase Backend:
+
+ * [To-Do List App](https://github.com/powersync-ja/powersync.dart/tree/master/demos/supabase-todolist)
+ * Includes [Full-Text Search](/usage/use-case-examples/full-text-search) (FTS) example
+ * Includes example of [Handling Attachments](/integration-guides/supabase-+-powersync/handling-attachments) (files)
+ * [To-Do List app + Drift](https://github.com/powersync-ja/powersync.dart/tree/master/demos/supabase-todolist-drift)
+ * [To-Do List app demonstrating data persistence with local-only tables](https://github.com/powersync-ja/powersync.dart/tree/main/demos/supabase-todolist-optional-sync)
+ * [Simple Chat App](https://github.com/powersync-ja/powersync.dart/tree/master/demos/supabase-simple-chat)
+ * [Trello Clone App](https://github.com/powersync-ja/powersync-supabase-flutter-trello-demo)
+
+ #### Node.js Custom Backend:
+ * [To-Do List App](https://github.com/powersync-ja/powersync.dart/tree/main/demos/firebase-nodejs-todolist)
+ * Corresponding backend demo: [Node.js Backend for To-Do List App, with Firebase Auth](https://github.com/powersync-ja/powersync-nodejs-firebase-backend-todolist-demo) (also linked below)
+
+ #### Rails Custom Backend:
+ * [GoToFun App](https://github.com/powersync-ja/powersync-rails-flutter-demo)
+ * This repo includes both the Flutter app and Rails backend
+
+ #### Django Custom Backend:
+ * [To-Do List App](https://github.com/powersync-ja/powersync.dart/tree/master/demos/django-todolist)
+ * Corresponding backend demo: [Django Backend for To-Do List App](https://github.com/powersync-ja/powersync-django-backend-todolist-demo) (also linked below)
+
+
+
+ #### Supabase Backend:
+ * [To-Do List App](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-native-supabase-todolist)
+ * Includes an example of [Handling Attachments](/integration-guides/supabase-+-powersync/handling-attachments) (files)
+ * [PowerChat - Group Chat App](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-native-supabase-group-chat)
+
+ #### Django Custom Backend:
+ * [To-Do List App](https://github.com/powersync-ja/powersync-js/tree/main/demos/django-react-native-todolist)
+ * Corresponding backend demo: [Django Backend for To-Do List App](https://github.com/powersync-ja/powersync-django-backend-todolist-demo) (also linked below)
+
+
+
+ #### Supabase Backend:
+ * [React To-Do List App](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-supabase-todolist)
+ * Includes [Full-Text Search](/usage/use-case-examples/full-text-search) (FTS) example
+ * [React To-Do List app demonstrating data persistence with local-only tables](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-supabase-todolist-optional-sync)
+ * [React 'Multi-Client Widget'](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-multi-client)
+ * This is the demo widget displayed on the [PowerSync homepage](https://www.powersync.com/) which shows how data flows from one PowerSync client to another.
+ * [Vue To-Do List App](https://github.com/powersync-ja/powersync-js/tree/main/demos/vue-supabase-todolist)
+ * [Angular To-Do List App](https://github.com/powersync-ja/powersync-js/tree/main/demos/angular-supabase-todolist)
+ * [Yjs CRDT Text Collaboration Demo](https://github.com/powersync-ja/powersync-js/tree/main/demos/yjs-react-supabase-text-collab)
+
+ #### Starter Projects:
+ * [example-electron](https://github.com/powersync-ja/powersync-js/tree/main/demos/example-electron): Example demonstrating the use of PowerSync together with an [Electron](https://www.electronjs.org/) rendered web app.
+ * [example-capacitor](https://github.com/powersync-ja/powersync-js/tree/main/demos/example-capacitor): Example demonstrating the use of PowerSync together with a [Capacitor](https://capacitorjs.com/) app.
+ * [example-nextjs](https://github.com/powersync-ja/powersync-js/blob/main/demos/example-nextjs/README.md): A minimal example demonstrating setup with [Next.js](https://nextjs.org/).
+ * [example-webpack](https://github.com/powersync-ja/powersync-js/blob/main/demos/example-webpack/README.md): A minimal example demonstrating bundling with [Webpack](https://webpack.js.org/).
+ * [example-vite](https://github.com/powersync-ja/powersync-js/blob/main/demos/example-vite/README.md): A minimal example demonstrating bundling with [Vite](https://vitejs.dev/).
+
+
+
+ #### Supabase Backend:
+
+ * [Minimal 'Hello PowerSync' App](https://github.com/powersync-ja/powersync-kotlin/tree/main/demos/hello-powersync)
+
+ * [To-Do List App](https://github.com/powersync-ja/powersync-kotlin/tree/main/demos/supabase-todolist)
+
+ * [To-Do List App as a native Android application](https://github.com/powersync-ja/powersync-kotlin/tree/main/demos/android-supabase-todolist)
+
+
+
+
+ #### Supabase Backend:
+ * [To-Do List App](https://github.com/powersync-ja/powersync-swift/tree/main/Demo)
+
+
+
+
+ * [Django Backend for To-Do List App](https://github.com/powersync-ja/powersync-django-backend-todolist-demo)
+ * Corresponding front-end demo app: React Native [To-Do List App](https://github.com/powersync-ja/powersync-js/tree/main/demos/django-react-native-todolist) (also linked above)
+ * [Node.js Backend for To-Do List App ](https://github.com/powersync-ja/powersync-nodejs-backend-todolist-demo)
+ * [Node.js Backend for To-Do List App, with Firebase Auth](https://github.com/powersync-ja/powersync-nodejs-firebase-backend-todolist-demo)
+ * Corresponding front-end demo app: Flutter [To-Do List App](https://github.com/powersync-ja/powersync.dart/tree/main/demos/firebase-nodejs-todolist) (also linked above)
+ * [Rails Backend for GoToFun App](https://github.com/powersync-ja/powersync-rails-flutter-demo/tree/main/gotofun-backend)
+ * Corresponding front-end demo app: Flutter [GoToFun App](https://github.com/powersync-ja/powersync-rails-flutter-demo/tree/main/gotofun-app) (also linked above)
+
+
+
+ * [To-Do List App with Docker Compose](https://github.com/powersync-ja/self-host-demo)
+ * [Postgres + Node.js Backend](https://github.com/powersync-ja/self-host-demo/tree/main/demos/nodejs)
+ * [MongoDB + Node.js Backend](https://github.com/powersync-ja/self-host-demo/tree/main/demos/nodejs-mongodb)
+ * [MySQL + Node.js Backend](https://github.com/powersync-ja/self-host-demo/tree/main/demos/nodejs-mysql)
+ * [Supabase Backend + Local Development Example](https://github.com/powersync-ja/self-host-demo/tree/main/demos/supabase)
+ * [Django Backend](https://github.com/powersync-ja/self-host-demo/tree/main/demos/django)
+
+
+
+ #### Flutter:
+
+ * Flutter + Supabase + Firebase
+ * [https://github.com/Gambley1/flutter-instagram-offline-first-clone](https://github.com/Gambley1/flutter-instagram-offline-first-clone)
+ * Testing PowerSync with Jepsen for formal consistency validation
+ * [https://github.com/nurturenature/jepsen-powersync](https://github.com/nurturenature/jepsen-powersync)
+
+ #### JavaScript & TypeScript:
+
+ * SolidJS hooks for PowerSync queries
+ * [https://github.com/aboviq/powersync-solid](https://github.com/aboviq/powersync-solid)
+ * Effect + Kysely + Stytch
+ * [https://github.com/guillempuche/localfirst\_react\_server](https://github.com/guillempuche/localfirst_react_server)
+ * Tauri + Shadcn UI
+ * [https://github.com/romatallinn/powersync-tauri](https://github.com/romatallinn/powersync-tauri)
+ * Expo Web
+ * [https://github.com/ImSingee/powersync-web-workers](https://github.com/ImSingee/powersync-web-workers)
+ * Our [React Native Web](/client-sdk-references/react-native-and-expo/react-native-web-support) support should now remove the need to "Patch the `@powersync/web` module"
+
+
+
+## Additional Resources
+
+A growing collection of use case examples and tutorials are also available:
+
+
+
+
+
\ No newline at end of file
diff --git a/self-hosting/getting-started.mdx b/self-hosting/getting-started.mdx
index 429c5234..bc4d5fd3 100644
--- a/self-hosting/getting-started.mdx
+++ b/self-hosting/getting-started.mdx
@@ -43,17 +43,16 @@ The quickest way to get a feel for the system is to run our example project on y
horizontal
/>
-
## Local Development With Docker Compose (variable)
If you plan to self-host for development purposes only, we have a section describing how to easily do this using Docker Compose:
[Local Development](/self-hosting/local-development)
-## Deployment Templates (15 minutes)
+## Deploy PowerSync on Coolify (30 minutes)
-Some deployment templates are coming in the future.
+See our [integration guide](/integration-guides/coolify) for deploying the PowerSync Service on Coolify. This can simplify the setup and management of the deployment.
-## Installation (1 hour)
+## Full Installation (1 hour)
See our [Installation](/self-hosting/installation) section for instructions to run the PowerSync Service in a production environment.
diff --git a/self-hosting/installation.mdx b/self-hosting/installation.mdx
index 769117ce..cc2c1ce1 100644
--- a/self-hosting/installation.mdx
+++ b/self-hosting/installation.mdx
@@ -27,11 +27,11 @@ See [here](https://github.com/powersync-ja/self-host-demo/blob/main/config/power
In order to run the PowerSync Service, the following activities are required:
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/self-hosting/installation/powersync-service-setup.mdx b/self-hosting/installation/powersync-service-setup.mdx
index e190f23c..23b6dd8a 100644
--- a/self-hosting/installation/powersync-service-setup.mdx
+++ b/self-hosting/installation/powersync-service-setup.mdx
@@ -19,6 +19,10 @@ This entails:
Examples of the above can be found in our demo application [here](https://github.com/powersync-ja/self-host-demo/tree/main/config). Below we go through these in more detail.
+
+ **Deploy PowerSync on Coolify:** See our [integration guide](/integration-guides/coolify) for deploying the PowerSync Service on Coolify. This can simplify the setup and management of the deployment.
+
+
## Configure MongoDB
The PowerSync Service uses [MongoDB](https://www.mongodb.com/) under the hood and requires at least one replica set node. A single node is fine for development/staging environments, but a 3-node replicas set is recommended [for production](/self-hosting/lifecycle-maintenance/server-specs).
diff --git a/tutorials/backend/overview.mdx b/tutorials/backend/overview.mdx
deleted file mode 100644
index 6d6aaaa5..00000000
--- a/tutorials/backend/overview.mdx
+++ /dev/null
@@ -1,3 +0,0 @@
----
-title: "Coming Soon..."
----
\ No newline at end of file
diff --git a/tutorials/client/attachments-and-files/aws-s3-storage-adapter.mdx b/tutorials/client/attachments-and-files/aws-s3-storage-adapter.mdx
index 30597491..f9a6be16 100644
--- a/tutorials/client/attachments-and-files/aws-s3-storage-adapter.mdx
+++ b/tutorials/client/attachments-and-files/aws-s3-storage-adapter.mdx
@@ -1,12 +1,12 @@
---
title: "Use AWS S3 for attachment storage"
-description: "In this tutorial, we will show you how to replace Supabase Storage with AWS S3 for handling attachments in the [React Native To-Do List example app](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-native-supabase-todolist)."
+description: "In this tutorial, we will show you how to replace Supabase Storage with AWS S3 for handling attachments in the [React Native To-Do List demo app](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-native-supabase-todolist)."
sidebarTitle: "AWS S3 Storage"
---
The following pre-requisites are required to complete this tutorial:
- - Clone the [To-Do List example app](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-native-supabase-todolist) repo
+ - Clone the [To-Do List demo app](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-native-supabase-todolist) repo
- Follow the instructions in the [README](https://github.com/powersync-ja/powersync-js/blob/main/demos/react-native-supabase-todolist/README.md) and ensure that the app runs locally
- A running PowerSync Service (can be self-hosted)
diff --git a/tutorials/client/data/cascading-delete.mdx b/tutorials/client/data/cascading-delete.mdx
index 5f8c5aef..409388b7 100644
--- a/tutorials/client/data/cascading-delete.mdx
+++ b/tutorials/client/data/cascading-delete.mdx
@@ -21,7 +21,7 @@ Currently, there is no direct support for cascading deletes on the client. Howev
# Example
-The following example is taken from the [React Native To-Do List example app](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-native-supabase-todolist).
+The following example is taken from the [React Native To-Do List demo app](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-native-supabase-todolist).
It showcases how to delete a `list` and all its associated `todos` in a single transaction.
```typescript
diff --git a/tutorials/client/overview.mdx b/tutorials/client/overview.mdx
new file mode 100644
index 00000000..0c984d03
--- /dev/null
+++ b/tutorials/client/overview.mdx
@@ -0,0 +1,10 @@
+---
+title: "Overview"
+description: "A collection of tutorials for client-side use cases."
+---
+
+
+
+
+
+
diff --git a/tutorials/client/performance/supabase-connector-performance.mdx b/tutorials/client/performance/supabase-connector-performance.mdx
index 41231797..373f2ec7 100644
--- a/tutorials/client/performance/supabase-connector-performance.mdx
+++ b/tutorials/client/performance/supabase-connector-performance.mdx
@@ -1,6 +1,6 @@
---
title: "Improve Supabase Connector"
-description: "In this tutorial we will show you how to improve the performance of the Supabase Connector for the [React Native To-Do List example app](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-native-supabase-todolist)."
+description: "In this tutorial we will show you how to improve the performance of the Supabase Connector for the [React Native To-Do List demo app](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-native-supabase-todolist)."
---
# Background
diff --git a/tutorials/overview.mdx b/tutorials/overview.mdx
index 4c7db353..afc7668f 100644
--- a/tutorials/overview.mdx
+++ b/tutorials/overview.mdx
@@ -1,10 +1,31 @@
---
-title: "Overview"
-description: "A collection of tutorials showcasing various storage attachment and performance strategies."
+title: "Tutorials"
+sidebarTitle: "Overview"
+description: "A collection of tutorials showcasing solutions to common use cases across the PowerSync stack."
---
+## Overview
+
+Here you can learn how to approach various use cases and solve specific challenges when integrating PowerSync in your project.
+
+
+ We are constantly expanding our list of tutorials. If you'd like to see a solution to a use case that is not currently available, [let us know on Discord](https://discord.gg/powersync).
+
+
+Our tutorials are currently organized into the following categories:
+
-
-
-
+
+
+
+## Additional Resources
+
+Haven't found what you're looking for?
+
+* Additional tutorial-style technical posts can be found on the [PowerSync Blog](https://www.powersync.com/blog). Popular pages include:
+ * [Migrating a MongoDB Atlas Device Sync App to PowerSync](https://www.powersync.com/blog/migrating-a-mongodb-atlas-device-sync-app-to-powersync)
+ * [PowerSync and Supabase: Just the Basics](https://www.powersync.com/blog/powersync-and-supabase-just-the-basics)
+ * [Flutter Tutorial: building an offline-first chat app with Supabase and PowerSync](https://www.powersync.com/blog/flutter-tutorial-building-an-offline-first-chat-app-with-supabase-and-powersync)
+* See our [Use Case Examples](/usage/use-case-examples) for details about common use cases.
+* See [Demo Apps / Example Projects](/resources/demo-apps-example-projects) for working implementations of PowerSync.
diff --git a/usage/use-case-examples.mdx b/usage/use-case-examples.mdx
index ce9ebf48..403405f1 100644
--- a/usage/use-case-examples.mdx
+++ b/usage/use-case-examples.mdx
@@ -8,18 +8,24 @@ sidebarTitle: Overview
The following examples are available to help you get started with specific use cases for PowerSync:
-
-
-
+
+
+
+
+
+
-
+
-For example projects built with PowerSync, see:
+## Additional Resources
+
+A growing collection of demo apps and tutorials are also available, showcasing working example implementations and solutions to additional use cases:
-
+
+
diff --git a/usage/use-case-examples/attachments-files.mdx b/usage/use-case-examples/attachments-files.mdx
index d9c5f9f6..2d53c8df 100644
--- a/usage/use-case-examples/attachments-files.mdx
+++ b/usage/use-case-examples/attachments-files.mdx
@@ -14,11 +14,11 @@ We currently have these helper packages available to manage attachments:
| SDK | Attachments Helper Package | Example Implementation |
| ----------------------------- | ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
-| **React Native / JavaScript** | [powersync-attachments](https://www.npmjs.com/package/@powersync/attachments) | [To-Do List example app](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-native-supabase-todolist) |
-| **Flutter** | [powersync\_attachments\_helper](https://pub.dev/packages/powersync_attachments_helper) | [To-Do List example app](https://github.com/powersync-ja/powersync.dart/tree/master/demos/supabase-todolist) |
+| **React Native / JavaScript** | [powersync-attachments](https://www.npmjs.com/package/@powersync/attachments) | [To-Do List demo app](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-native-supabase-todolist) |
+| **Flutter** | [powersync\_attachments\_helper](https://pub.dev/packages/powersync_attachments_helper) | [To-Do List demo app](https://github.com/powersync-ja/powersync.dart/tree/master/demos/supabase-todolist) |
-The example implementations above use [Supabase Storage](https://supabase.com/docs/guides/storage) as storage provider. For more information on the use of Supabase as storage provider, refer to:
-
-[Handling Attachments](/integration-guides/supabase-+-powersync/handling-attachments)
+The example implementations above use [Supabase Storage](https://supabase.com/docs/guides/storage) as storage provider.
+* For more information on the use of Supabase as the storage provider, refer to [Handling Attachments](/integration-guides/supabase-+-powersync/handling-attachments)
+* To learn how to adapt the implementations to use AWS S3 as the storage provider, see [this tutorial](/tutorials/client/attachments-and-files/aws-s3-storage-adapter)
Note: Attachment helper packages for [Kotlin](/client-sdk-references/kotlin-multiplatform) and [Swift](/client-sdk-references/swift) are planned. [Let us know](/resources/contact-us) if you require this for your project.
diff --git a/usage/use-case-examples/background-syncing.mdx b/usage/use-case-examples/background-syncing.mdx
index 01163cd4..f3d7d1c4 100644
--- a/usage/use-case-examples/background-syncing.mdx
+++ b/usage/use-case-examples/background-syncing.mdx
@@ -9,7 +9,7 @@ We have done an initial investigation into how background syncing could be accom
### Guide
-We assume you have followed the platform setup guide in the [workmanager README](https://github.com/fluttercommunity/flutter_workmanager/#platform-setup). Note we are running this in the context of our [Supabase Todo List Demo](https://github.com/powersync-ja/powersync.dart/tree/main/demos/supabase-todolist) app.
+We assume you have followed the platform setup guide in the [workmanager README](https://github.com/fluttercommunity/flutter_workmanager/#platform-setup). Note we are running this in the context of our [Supabase To-Do List Demo](https://github.com/powersync-ja/powersync.dart/tree/main/demos/supabase-todolist) app.
In `main.dart`:
diff --git a/usage/use-case-examples/custom-types-arrays-and-json.mdx b/usage/use-case-examples/custom-types-arrays-and-json.mdx
index 3e079477..9c3e7bbf 100644
--- a/usage/use-case-examples/custom-types-arrays-and-json.mdx
+++ b/usage/use-case-examples/custom-types-arrays-and-json.mdx
@@ -85,7 +85,7 @@ It's possible to sync rows dynamically based on the contents of array columns us
```yaml
bucket_definitions:
custom_todos:
- # Separate bucket per todo list
+ # Separate bucket per To-Do list
parameters: SELECT id AS list_id FROM lists WHERE owner_id = request.user_id()
data:
- SELECT * FROM todos WHERE bucket.list_id IN unique_identifiers
@@ -144,7 +144,7 @@ PowerSync treats JSON columns as text and provides transformation functions in S
```yaml
bucket_definitions:
my_json_todos:
- # Separate bucket per todo list
+ # Separate bucket per To-Do list
parameters: SELECT id AS list_id FROM lists WHERE owner_id = request.user_id()
data:
- SELECT * FROM todos WHERE json_extract(custom_payload, '$.json_list') = bucket.list_id
diff --git a/usage/use-case-examples/offline-only-usage.mdx b/usage/use-case-examples/offline-only-usage.mdx
index f94512da..4fb1cfa6 100644
--- a/usage/use-case-examples/offline-only-usage.mdx
+++ b/usage/use-case-examples/offline-only-usage.mdx
@@ -55,8 +55,8 @@ The following example implementations are available:
| Client framework | Link |
| ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| Flutter Todo List App (with Supabase) | [supabase-todolist-optional-sync](https://github.com/powersync-ja/powersync.dart/tree/main/demos/supabase-todolist-optional-sync) |
-| React Todo List App (with Supabase) | [react-supabase-todolist-optional-sync](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-supabase-todolist-optional-sync) |
+| Flutter To-Do List App (with Supabase) | [supabase-todolist-optional-sync](https://github.com/powersync-ja/powersync.dart/tree/main/demos/supabase-todolist-optional-sync) |
+| React To-Do List App (with Supabase) | [react-supabase-todolist-optional-sync](https://github.com/powersync-ja/powersync-js/tree/main/demos/react-supabase-todolist-optional-sync) |
### 2\. Clearing the upload queue
diff --git a/usage/use-case-examples/postgis.mdx b/usage/use-case-examples/postgis.mdx
index 4efcb67c..b766c573 100644
--- a/usage/use-case-examples/postgis.mdx
+++ b/usage/use-case-examples/postgis.mdx
@@ -21,7 +21,7 @@ The `geography` and `geometry` types are now available in your Postgres.
## Supabase Configuration Example:
-This example builds on the To-Do List example app in our [Supabase integration guide](/integration-guides/supabase-+-powersync).
+This example builds on the To-Do List demo app in our [Supabase integration guide](/integration-guides/supabase-+-powersync).
### Add custom type, array and PostGIS columns to the `todos` table