// the find
Nozbe/WatermelonDB
🍉 Reactive & asynchronous database for powerful React and React Native apps ⚡️
WatermelonDB is a SQLite-backed database layer for React Native (and React web) that keeps queries off the JS thread and propagates changes through observable streams. It's built for apps that accumulate thousands of records where loading everything into Redux state becomes a performance problem. Mattermost and Rocket.Chat use it in production.
The lazy-loading architecture is the real win here — queries run on a native SQLite thread and only return data when components actually need it, which keeps app startup fast even with large datasets. The reactivity model via withObservables is genuinely elegant: you connect a component once and it stays in sync without manual subscription management. The offline-first sync protocol is well-documented with a clear push/pull contract that's backend-agnostic, which is rare. JSI support on both iOS and Android means the bridge overhead that kills most RN database solutions isn't a factor.
The sync protocol puts a surprising amount of responsibility on your backend — you have to implement the push/pull endpoints correctly, handle conflicts server-side, and ensure your backend can return per-table changesets. There's no turnkey backend. The schema migration system requires you to write migrations manually and keep version numbers in sync; it's easy to get into a broken state during development. Flow types are still the primary type system (the TypeScript support is bolted on and the examples show it's not first-class). The web adapter uses IndexedDB through an abstraction layer that's noticeably slower than the native SQLite path, so 'multiplatform' comes with a performance asterisk for web.