Documentation Index
Fetch the complete documentation index at: https://setup.despia.com/llms.txt
Use this file to discover all available pages before exploring further.
The PowerSync integration is fully built and production-ready. It will become publicly available when the Despia V4 editor launches shortly. To enable it for your app in the meantime, contact Despia customer support at support@despia.com.
Local SQLite operations work without any cloud setup. Sync is a separate layer you turn on with
db.powersync.connect({ token }) once you have an authenticated user.Two layers, one API
@despia/powersync exposes two layers under the same db object:
| Layer | Works offline | Requires PowerSync cloud setup | APIs |
|---|---|---|---|
| Local SQLite | Yes | No | init, query, get, execute, batch, transaction, watch, migrate, schema |
| Cloud sync | Yes, sync resumes later | Yes | db.powersync.connect, db.powersync.sync, db.powersync.status, db.powersync.events.status |
db.powersync.connect({ token }).
Installation
- Bundle
- CDN
Environment check
@despia/powersync requires the native bridge. Use active() to check whether the bridge is available before calling any database methods.
active() only checks bridge presence. It does not mean SQLite is initialized or sync is connected.
Why we built this
Despia apps run your existing web app inside a native Swift and Kotlin runtime. Most apps rely on fetching data from a remote API on every load. That works fine on a fast connection. It breaks on slow networks, fails completely offline, and adds latency to every interaction. We wanted local-first data that works the way web developers expect: query with SQL, write normally, get results instantly. No custom sync protocols. No manual conflict resolution. No arbitrary storage limits. So we integrated PowerSync, a production-proven sync engine, directly into the Despia runtime. The result: a native SQLite database on-device, a simple JavaScript API, and optional two-way sync with your backend.Cross-platform by design
PowerSync is built for both iOS and Android through a unified JavaScript SDK. Write your code once. It works identically on both platforms. No iOS-specific workarounds. No Android edge cases. The API is fully standardised so you can focus on building your app instead of handling platform differences.Fully on-device. No cloud dependencies for local data.
Local SQLite runs entirely through the native runtime. Your data lives on the device. Built on native SQLite. Both iOS and Android have SQLite built into the OS. PowerSync uses these native engines directly, no third-party database, no in-memory fallback, no storage quotas. Use any backend. When you turn on sync, PowerSync connects to your existing Postgres, MongoDB, or MySQL database through sync rules. Despia does not sit between you and your data. No per-user fees for local storage. The database is on the device. Storage scales with the device, not with your user count. Works offline completely. Once initial sync completes, the app operates without any network connectivity. Reads and writes work locally. Pending writes are uploaded when connectivity returns.How it works
You initialize the database with a schema and a schema version, then run migrations to set up the actual SQLite tables. Sync is a separate step that you only call when you have a token for the signed-in user.Live queries
Subscribe to a query and receive updates whenever the underlying data changes, including changes arriving from sync.Sync status
Check the current sync state and subscribe to changes:db.powersync.sync() is a trigger. Sync usually completes asynchronously, so read the result with db.powersync.status() or subscribe with db.powersync.events.status().
Startup lifecycle
Use this order on every app start. It guarantees that sync only begins after the schema is active and migrations are applied.init()gives native the latest schema and target schema version as pending state.schema()returns the last active schema, if native already has one cached.migrate()applies all pending SQL in one transaction.- Native promotes pending schema to active only after the migration reaches
schemaVersion. db.powersync.connect()starts sync only after active schema and credentials exist.
Use cases
Offline-first apps
Field service, logistics, and inspection apps that must work without connectivity. Data syncs when the device comes back online.
Instant UI
No loading spinners waiting for API responses. Every read hits local SQLite in milliseconds regardless of network conditions.
Real-time collaboration
Subscribe to live queries and reflect changes from other users the moment they arrive via sync.
Data-heavy apps
Store large datasets locally without hitting browser storage quotas. SQLite handles millions of rows efficiently.
Frequently asked questions
Does this work offline?
Does this work offline?
Yes. Queries and writes hit local SQLite. Once initial sync completes, the app works fully offline. Pending writes are queued and uploaded when connectivity returns.
Do I need a token to use the local database?
Do I need a token to use the local database?
No. Local SQLite operations (
init, query, get, execute, batch, transaction, watch, migrate) work without any token. You only need a token when you call db.powersync.connect({ token }) to start cloud sync.Where does the PowerSync App ID come from?
Where does the PowerSync App ID come from?
Native reads the static PowerSync app ID and instance URL from native config. You only pass a user-scoped JWT token to
db.powersync.connect({ token }). The token identifies the signed-in user, native owns the rest of the connection setup.What backends does PowerSync support?
What backends does PowerSync support?
PowerSync syncs with Postgres, MongoDB, and MySQL via sync rules you configure in the PowerSync dashboard. Despia handles the native bridge, the backend connection is between PowerSync and your database.
Does this work with Despia Local Server?
Does this work with Despia Local Server?
Yes. PowerSync is compatible with both Remote Hydration (default) and Local Server (
http://localhost). The database runs in the native layer regardless of how the web app is served.Is this App Store compliant?
Is this App Store compliant?
Yes. The database is compiled into the app binary. No executables are downloaded post-install. SQLite is a standard system framework on both iOS and Android.
How do I get access before the public release?
How do I get access before the public release?
The integration is fully built and ready. It will become publicly available when the V4 editor launches. In the meantime, contact support@despia.com to enable it on your app.
Resources
NPM Package
@despia/powersync
Reference
Full API, init, query, execute, batch, watch, migrate, sync
PowerSync
Backend setup, schema config, and sync rules