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
stevensJourney
stevensJourney previously approved these changes Sep 17, 2025
Copy link
Contributor

@stevensJourney stevensJourney left a comment

Choose a reason for hiding this comment

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

Left some questions, but overall this looks very cool.

stevensJourney
stevensJourney previously approved these changes Sep 17, 2025
Copy link
Contributor

@stevensJourney stevensJourney left a comment

Choose a reason for hiding this comment

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

🚀

@simolus3 simolus3 merged commit 828e1cc into main Sep 17, 2025
5 checks passed
@simolus3 simolus3 deleted the room branch September 17, 2025 15:22
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.

3 participants