(updated)
|
min. read

Product Update: September 2025

Kobie Botha

Hey all!

September is a shoulder season in many parts of the world, and that aligns with a big upgrade coming to the heart of PowerSync — Sync Streams, an evolution of our current Sync Rules system. In this edition I’ve compiled some juicy Sync Stream updates for you. 

Product updates shipped in September:

  • PowerSync Service
    • Sync Streams are in early alpha! This is a step change in the flexibility of the overall PowerSync system. See this edition’s Feature Story below.
    • Since Sync Streams is a re-design of a core part of PowerSync, we took the opportunity to fix some long-standing issues with sync behavior. You can opt-out of individual fixes using the new config flags. 
  • Client SDKs
    • Our Kotlin SDK now has support for Room and SQLDelight! Can’t decide which one to use? Use Room if you already have a Room database, else use SQLDelight.
    • We shipped a demo showing how to use SQLite FTS5 with our Swift SDK.
  • PowerSync Cloud

Community feed

  • Amine (@gimyboya on Discord) who is based in Malaysia joined our Product Success Engineering team! Our PSE team’s goal is to help developers build on PowerSync, with Amine bolstering support for our customers in the Asia-Pacific region.
  • Community PRs:
  • Simon Binder recounts his Rust-powered odyssey to turbocharge our SQLite extension, yielding 5x React Native speedups and streamlined SDK logic.
  • Matthew Weidner summarizes his work to use PowerSync for collaborative text editing and presence. No CRDTs were harmed during this project.
  • Since announcing our public proposals in August, we have two new ones: incremental reprocessing and syncing binary data.

Feature story: Sync Streams in early alpha

One of our biggest releases ever — Sync Streams — is now available as an early alpha. I wrote about Sync Streams last month, and in this edition, I want to give a status update and add more color on their usage:

Sync Streams allow for more dynamic syncing, while not compromising on existing offline-first capabilities (i.e. “sync everything upfront” when the client connects). It vastly improves the usability of PowerSync for many use cases, especially on the web. It’s awesome to see this validated already – one of our early adopters told us: “We are actually very bullish on Sync Streams … we’re expecting [them] to give us more control”.

One of my favorite use cases for Sync Streams is component-level subscriptions. With the current Sync Rules system, updating client parameters requires reconnecting the client at the top level of the application. Since this would typically be triggered by user actions happening at the bottom of the component hierarchy, it’s a bit hacky. Sync Streams enable fine-grained and just-in-time sync subscriptions at the component level.

Client parameters in Sync Rules are also super tricky to manage across multiple tabs, while Sync Streams automatically handle multiple subscriptions across tabs. Icing feature: configurable TTLs create a warm cache for data from recently-unsubscribed streams, reducing latency when re-subscribing.

Sync Streams are available today in our JavaScript (Web + React Native), Flutter/Dart and Kotlin SDKs. We’re slow rolling the announcements while we iterate on early feedback. See this channel on our Discord server for instructions.

Heads up: There’s currently one glaring known issue which is that the config fix for ISO 8601 timestamps break the JS SDK, i.e. new %%Date(syncedValue)%% will throw an exception, so either cast or set %%timestamps_iso8601%% to %%false%% in your config.

If you’ve made it this far, I’ll mention that we’re currently deep into a rebuild of the PowerSync Dashboard, and it uses Sync Streams. Availability will be announced on our Discord server first, soon™️