(updated)
|
min. read

PowerSync Update: December 2024

Kobie Botha

We expect 2025 to be a breakout year for sync engines, driven by growing demand for zero-latency apps and simpler state management. We have some exciting plans to share, but first, let’s look at how PowerSync evolved this past month.

New Sync Rules Functions

In November, we released three new Sync Rules functions, %%substring(text, start, length)%%, %%json_each(data)%% and %%json_keys(data)%%. In December, community member Jorge S (@hyperion) also added two additional functions:

  • %%uuid_blob%%: converts a UUID string to bytes. The ID can then be transformed to base64 (e.g. %%base64(uuid_blob(id))%%) for more performant querying on clients.
  • %%iif(x,y,z)%%: adds if/else support that returns y if x is true, otherwise returns z.

Thank you, Jorge!

Read the docs

MongoDB Connector in Beta

MongoDB is by far the most popular NoSQL database [1], so supporting it has been key to our vision of prioritizing developer choice as a backend database-agnostic sync engine. In December, we advanced our MongoDB connector to Beta status, meaning that it’s now ready for production use.

Read the announcement post

Swift Client SDK in Beta

This Beta release introduces a Swift-native wrapper around the core of our Swift SDK generated from our Kotlin Multiplatform SDK. This delivers a more intuitive, Swift-friendly interface with improved type-safety. Other challenges were also addressed, such as introducing multi-threading support for transactions.

Read the release notes

SolidJS Hooks for PowerSync Queries

Community member Joakim C kindly shared his %%powersync-solid%% project that implements PowerSync hooks for SolidJS. We’ve added this project under the Notable Community Projects section in our docs. Thanks, Joakim!

Visit the repo

New Tutorial Section In Docs

We've released a new Tutorials section in our docs, which already contains some helpful guides, such as:

New Tutorial: Improve Supabase Connector Performance

The demos in our %%powersync-js%% monorepo provide a minimal working example but are not necessarily optimized for performance, and can therefore be improved.

This tutorial demonstrates how to improve the Supabase backend connector’s performance by implementing two batching strategies that reduce the number of database operations for processing uploads to Supabase.

See the tutorial

New Tutorial: Use AWS S3 for Attachment Storage

This tutorial covers how to use AWS S3 for handling attachments in our React Native To-Do List example app.

See the tutorial

New Tutorial: Using our Attachment Helper for PDF Attachments

The current version of our React Native To-Do List example app implements a %%PhotoAttachmentQueue%% class which enables photo attachments (specifically JPEG) to be synced. This tutorial will guide you on the changes needed to support PDF attachments instead.

See the tutorial

New Tutorial: How to Perform a Cascading Delete

Since PowerSync utilizes SQLite views on the client-side instead of standard tables, SQLite features like constraints, foreign keys, or cascading deletes are not available. Currently, there is no direct support for cascading deletes on the client. However, you can achieve this in two different ways, one of which is covered in this tutorial.

See the tutorial

New Tutorial: Generating Development Tokens for Self-Hosted Instances

Development tokens are useful for:

  • Getting started quickly without implementing full authentication configuration
  • Sanity-checking your Sync Rules configuration (whether they were applied correctly)
  • Temporarily impersonating a specific user to debug specific issues

This tutorial shows how.

See the tutorial

Community Focus

Contributions

Thank you to these contributors!

Developer Case Study: Aspen Square

Chris Primavera joined us to discuss how Aspen Square uses PowerSync in their property operations management app.

Read the developer case study

That's it for the December update, happy coding!

Subscribe to receive updates

Thank you! Your submission has been received.
Oops! Something went wrong while submitting the form. Please try again.