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
- MongoDB deprecated the Atlas Device SDKs, Realm included, in September 2024. They reached end of life on 30 September 2025. MongoDB's page says the on-device database continues as an open-source project.
- In April 2026, a member of the Realm team wrote in #7094: “There is no longer anyone being paid to work on Realm.”
- The last releases are realm 20.2.0 (August 2025) and @realm/react 0.20.0 (October 2025).
- The platforms keep moving. React Native 0.82 and later run only on the new architecture (React Native blog). App Store Connect has required Xcode 26 since 28 April 2026 (Apple). From 1 February 2027, Google Play blocks app updates without 16 KB page support (Android Developers).
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
- You need sync: PowerSync (your own backend) or Ditto (device to device).
- No sync, the app is on realm v20, and a release is blocked now: afterdb now, then plan a move to SQLite.
- No sync, and you have time for a rewrite: op-sqlite (bare React Native) or expo-sqlite (Expo).
The hard part: the data already on phones
Moving to SQLite takes more than a new library:
- Translate the schema. Links, lists, embedded objects and backlinks become tables and keys.
- Rewrite Realm queries in SQL, and check that they return the same rows. Realm has quirks a naive port changes:
[c]folds only ASCII and Latin-1 letters. - Replace live objects,
useQueryanduseObjectwith reactive queries. - Copy the data already on your users' phones during an update. That means one release that ships both Realm and SQLite, and a later one without Realm. If the realm is encrypted, you need the Realm key to read it and a SQLCipher key to write the new database.
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.