PowerSync is a sync engine for building local-first apps with instantly-responsive UI/UX and simplified state transfer. Syncs between SQLite on the client-side and Postgres, MongoDB or MySQL on the server-side.
This is the PowerSync client SDK for Kotlin Mutliplatform. This SDK currently supports Android and iOS as targets.
See a summary of features here.
This SDK is currently in a beta release it is suitable for production use, given you have tested your use case(s) extensively. If you find a bug or issue, please open a GitHub issue. Questions or feedback can be posted on our community Discord - we'd love to hear from you.
-
- This is the Kotlin Multiplatform SDK implementation.
-
- SupabaseConnector.kt An example connector implementation for Supabase (Postgres). The backend
connector provides the connection between your application backend and the PowerSync managed database. It is used to:
- Retrieve a token to connect to the PowerSync service.
- Apply local changes on your backend application server (and from there, to your backend database).
- SupabaseConnector.kt An example connector implementation for Supabase (Postgres). The backend
connector provides the connection between your application backend and the PowerSync managed database. It is used to:
The easiest way to test the PowerSync KMP SDK is to run one of our demo applications.
Demo applications are located in the demos/
directory. See their respective README's for testing instructions:
-
demos/hello-powersync: A minimal example demonstrating the use of the PowerSync Kotlin Multiplatform SDK and the Supabase connector.
-
demos/supabase-todolist: A simple to-do list application demonstrating the use of the PowerSync Kotlin Multiplatform SDK and the Supabase connector.
-
demos/android-supabase-todolist: A simple to-do list application demonstrating the use of the PowerSync Kotlin Multiplatform SDK and the Supabase connector in an Android application.
The PowerSync Kotlin Multiplatform SDK is currently in a beta release. It can be used in production if you’ve tested your use cases.
Current limitations:
- Integration with SQLDelight schema and API generation (ORM) is not yet supported.
- Supports only a single database file.
Future work/ideas:
- Improved error handling.
- Attachments helper package.
- Management of DB connections on each platform natively.
- Supporting additional targets (JVM, Wasm).
Add the PowerSync Kotlin Multiplatform SDK to your project by adding the following to your build.gradle.kts
file:
kotlin {
//...
sourceSets {
commonMain.dependencies {
api("com.powersync:core:$powersyncVersion")
}
//...
}
}
If want to use the Supabase Connector, also add the following to commonMain.dependencies
:
implementation("com.powersync:connector-supabase:$powersyncVersion")
We recommend using Cocoapods (as opposed to SMP) for iOS targets. Add the following to the cocoapods
config in your build.gradle.kts
cocoapods {
//...
pod("powersync-sqlite-core") {
linkOnly = true
}
framework {
isStatic = true
export("com.powersync:core")
}
//...
}
Note: The linkOnly
attribute is set to true
and framework is set to isStatic = true
to ensure that the powersync-sqlite-core
binaries are only statically linked.
This repo uses ktlint to handle formatting and linting. If you would like the IDE to automatically format your code and show linting errors install the ktlint plugin. Then in Settings go to Tools -> Ktlint -> Select Distract free (recommended) mode.
It will automatically use the rules set in the .editorconfig
file.
Our full SDK reference contains everything you need to know to get started implementing PowerSync in your project.
For example projects built with PowerSync and Kotlin Multiplatform, see our Demo Apps / Example Projects gallery. Most of these projects can also be found in the demos/
directory.