Updated 2024-09-11
The Problem
A key bottleneck in database-centric mobile and desktop app development is making data accessible.
Backend engineers often spend a lot of time on APIs and backend functionality that enables apps to access data.
App developers may then be held back as they wait for required API functionality before they can ship app functionality.
While there are an increasing number of ways to solve this bottleneck, user expectations have evolved in ways that present a new challenge for app development:
- Users expect apps that are always available.
- Users expect apps that feel instant to use.
This leads to two additional major requirements:
- Always available → data must be available even when users are offline or have poor network connectivity.
- Feels instant to use → data updates must be streamed to users in real-time when they’re online, and the user’s own local data updates should be applied optimistically.
This necessitates increasing the scope and complexity of the APIs, the backend app and app code of modern apps:
All this leads to a complex system design that takes a lot of care to build (to ensure reliable data integrity and correct handling of edge cases) and becomes difficult to maintain and update.
PowerSync: Plug-and-play offline-first and real-time data
By providing a plug-and-play sync system for apps with SQL backends, PowerSync reduces the scope, cost and complexity of building offline-first apps with real-time data:
For a more detailed overview of the architecture of PowerSync and how it accomplishes this, refer to the PowerSync architecture overview here.
What does PowerSync mean for app developers and backend engineers?
For app developers:
PowerSync simplifies data management: Developers can work directly with the local in-app database provided by the PowerSync SDK, and the SDK takes care of automatically syncing with the backend database even if network connectivity is not immediately available. When users are online, the SDK streams data updates in real-time.
Example of how developers would update data in using PowerSync:
await db.execute('UPDATE users SET name=? WHERE id=?, ['My name', user_id]);
The PowerSync SDK takes care of keeping the local database in sync with the backend.
For backend engineers:
PowerSync provides a shortcut to building and maintaining a robust data sync and real-time streaming system. PowerSync can connect to existing SQL databases to automatically sync data to SQLite client databases with a strong consistency model.
This allows developers to move extremely fast with app development, enabling them to deliver modern apps in record time and with record predictability.
Try it free
PowerSync is free for all new users while we're in beta, and our planned pricing plans are available here. We also intend to release a version that can be self-hosted in the near future. Update May 31, 2024: our Open Edition has been released (a free, source-available, self-hosted version of PowerSync).
PowerSync is designed to be framework agnostic, with current support for Web, React Native, Flutter, Kotlin Multiplatform and Swift.
We'd love to get your feedback! Join our Discord to chat about PowerSync and Supabase.