Help for Realm® apps

Leaving Realm® in 2026: your options

If your React Native app stores its data in Realm, you have to choose: keep it running, or move to something else. This page compares the options as of 9 November 2026, with sources. We maintain one of them, afterdb, and we say where it does not fit.

Updated 9 November 2026.

Where Realm stands

If a build already fails, start with Realm build errors in 2026.

The options at a glance

Versions and dates read from npm on 9 November 2026.

Option License Latest release on npm Encryption at rest Sync Migration effort
Keep Realm with afterdb (ours) Apache-2.0 @pomwik/afterdb 20.3.0, 8 Nov 2026 Realm encryption, unchanged No (no Device Sync) Two lines in package.json, no code change, if the app is on realm v20 without sync
op-sqlite MIT 19.0.5, 5 Nov 2026 SQLCipher, as a build option No High: rewrite the data layer
expo-sqlite MIT 58.0.15, 31 Oct 2026 (Expo SDK 58) SQLCipher, as a plugin option (not in Expo Go) No High: rewrite the data layer; bare React Native apps also need expo
WatermelonDB MIT 0.28.0, 7 Apr 2025 Not built in Sync protocol; you write the backend High, plus a maintenance risk
PowerSync Client SDK Apache-2.0; sync service Apache-2.0 since 3 Nov 2026 @powersync/react-native 1.35.11 (latest tag), 9 Nov 2026; a 2.x line is also published SQLCipher through op-sqlite Yes: Postgres, MongoDB, MySQL, SQL Server; cloud or self-hosted High for a local-only app; a guide exists for apps leaving Atlas Device Sync
Ditto Proprietary (Ditto Binary License) @dittolive/ditto 5.2.0, 27 Oct 2026 No, per Ditto's FAQ Yes: device to device (Bluetooth LE, local network, Wi-Fi) and an optional server High: different data model and query language

When each one fits

Keep Realm with afterdb

Fits if your app is on realm v20, does not use Device Sync, and you need to keep shipping through React Native, Expo, Xcode and Google Play updates now. You change two lines in package.json and no code:

"realm": "npm:@pomwik/afterdb@20.3.0",
"@realm/react": "npm:@pomwik/afterdb-react@0.20.1"

The limits: the engine is the upstream binary, unchanged, so engine bugs stay. No Device Sync and no old architecture. Tested on Android emulators and the iPhone simulator, not yet on real devices. One company maintains it: us. Treat it as a bridge, and plan your exit.

Apps on realm 10, 11 or 12 must first remove sync and move to v20. We have not tested that move. The npm deprecation message on those versions points to realm@community, which installs 20.1.0, without the 16 KB support added in 20.2.0.

Sources: afterdb on GitHub and its compatibility matrix.

op-sqlite

Fits bare React Native apps and Expo dev builds that want SQLite directly. It does not run in Expo Go. Encryption with SQLCipher is a build option set in package.json, and it is not available on the web. Its README lists reactive queries and full-text search. Asked about stability, the maintainer answered that it is production ready (op-sqlite #342). PowerSync's 2.x line builds on it.

Sources: op-sqlite on GitHub, installation docs.

expo-sqlite

Fits Expo apps. It runs in Expo Go, except with SQLCipher. To encrypt, turn on the useSQLCipher plugin option and rebuild. Watch out: without SQLCipher, PRAGMA key does nothing and raises no error. Drizzle ORM adds live queries and migrations bundled with the app. Bare React Native apps need to install expo first.

Sources: expo-sqlite docs, Drizzle with expo-sqlite.

WatermelonDB

The latest stable release is 0.28.0, from April 2025, and the last commit on master is from August 2025. An issue that asks whether the project is abandoned (#1963) has no answer from the maintainer. A user reports that 0.28.0 does not build on React Native 0.88.0 (#1969, October 2026). Encryption is not built in, and its sync protocol needs a backend you write. A fork, NitromelonDB, started in August 2026. Fits only if you accept that maintenance risk.

PowerSync

Fits if you need sync with your own backend database: Postgres, MongoDB, MySQL or SQL Server, in PowerSync's cloud or self-hosted. The client SDK is Apache-2.0, and the sync service moved from FSL to Apache-2.0 on 3 November 2026. PowerSync has a guide for apps leaving Atlas Device Sync with MongoDB, and Realm and PowerSync can run side by side during the move. The guide does not cover the .realm files already on phones. You can also use it without sync, by not calling connect(). Expo Go works only with its JavaScript adapter.

Sources: React Native SDK docs, migration guide from Atlas Device Sync, powersync-service.

Ditto

Fits if you need sync between nearby devices (Bluetooth LE, local network, Wi-Fi), with an optional server. It is proprietary. Its FAQ says that Ditto does not encrypt its local database at rest: it points to the operating system's encryption and suggests encrypting sensitive fields yourself. It does not run in Expo Go.

Sources: Ditto FAQ, React Native install guide.

A simple way to decide

The hard part: the data already on phones

Moving to SQLite takes more than a new library:

SQLite also changes some values without warning: NaN becomes NULL and -0 becomes 0.

We do this as a service. We convert .realm files to SQLite and check every object, with a SHA-256 hash per object and per table. The conversion tool is open source in the afterdb repository and tested on desktop (Node).

Need help choosing? Send your versions and your plans for a free 15-minute check. We reply within 12 hours. After that, a fixed-price diagnostic, fixes under a support agreement, or a migration to SQLite with every object checked.