Skip to content

Conversation

simolus3
Copy link
Contributor

@simolus3 simolus3 commented Aug 22, 2025

This adds a Room integration package for PowerSync.

This works by making the PowerSync SDK run queries against the connection pool managed for Room databases, which ensures that we have no conflict due to multiple write connections.

This uses the new update hooks implemented in the core extension to query for updates after each transaction from the PowerSync SDK. These updates are automatically forwarded to Room (so a sync from PowerSync automatically updates Flows in Room).
Because we can't install a general update listener on Room databases, the other direction is more complicated. The best approach I could come up with here is to create a Room flow listening on all tables explicitly, and then call powersync_update_hook('get') to forward these writes to PowerSync.

One remaining issue is that the driver APIs exposed by Room are async-only. Using runBlocking to turn them works, but is a bit hacky and not particularly efficient. I will open an API for asynchronous transactions as a medium-term workaround.

Base automatically changed from refactor-drivers to main September 9, 2025 17:54
@simolus3 simolus3 marked this pull request as ready for review September 10, 2025 10:10

To also transfer local writes to PowerSync, you need to

1. Create triggers on your Room tables to insert into `ps_crud` (see the PowerSync documentation on

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to link the docs. This?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants