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