Synchro synchronizes PostgreSQL data with local SQLite databases in native applications. Applications can read and write local data offline, then synchronize through an authenticated HTTP adapter.
PostgreSQL owns server synchronization through the Synchro extension. Swift and Kotlin own local storage, change capture, durable queues, and synchronization. React Native wraps those native clients. The Go adapter handles HTTP and authentication without a separate synchronization service.
Follow the first-sync tutorial. It connects a client, changes a note offline, and verifies the change on the server and another client.
These guides describe the Synchro 0.4.0-rc.4 source and package interfaces.
Before that version is published, use the documented local-consumer installation.
Do not substitute an older published package into the current tutorial.
| Component | Supported environment |
|---|---|
| PostgreSQL extension and Go tools | PostgreSQL 18, Ubuntu 24.04, Linux x64 |
| Swift client | iOS 17 and current stable iOS, Swift 6 toolchain |
| Kotlin client | Android API 24 and current stable Android |
| React Native bridge | React Native 0.82.1 and 0.88.x, current stable iOS and Android |
macOS hosts Apple development and validation. It is not a supported PostgreSQL deployment target. See the support policy for dependency constraints and support boundaries.
| Goal | Guide |
|---|---|
| Understand component responsibilities | Architecture |
| Assign private and shared data | Scope modeling |
| Bundle an initial SQLite database | Portable seeds |
| Use the client SQL APIs | Application SQL limits |
| Apply a group of writes all together or not at all | Atomic write transactions |
| Assign scopes from application data | Assignment function |
| Configure and operate the server | Configuration |
| Implement or inspect protocol behavior | Wire protocol and client contract |
| Understand validation evidence | Testing evidence |
| Review the changes in each release | CHANGELOG.md |
| Prepare or recover a release | RELEASE.md |
Scopes are server-defined. Clients cannot supply arbitrary replication predicates. The server assigns scopes to each user from the default user scope, shared scopes, explicit grants, and an optional assignment function that reads application data. An atomic write transaction makes the server apply all of its synced mutations or none of them. Synchro does not provide a browser synchronization client or support server databases other than PostgreSQL.
The Makefile is the supported build, lint, and test entry point.
Use the local validation instructions before running integration tests.
Tests require disposable fixtures, not an application database.
The client overview identifies the native and bridge packages.
Report reproducible problems through GitHub Issues.
Include the version, platform, reproduction steps, and expected result.
Do not include credentials or private application data.
Keep pull requests focused and run the applicable Make checks.
Add a CHANGELOG.md entry under Unreleased for each change that applications or operators can observe.
Target ordinary development pull requests at dev.
master is the stable default branch and accepts checked release promotions and stable hotfixes.
Return stable hotfixes to dev so subsequent releases retain their corrections.
Synchro uses the MIT License.