Versus a direct engine API
sqlite-net, Nuventra.NuvexaDB, Realm, LiteDB, and the other engines stay available. LocalStore is the host-selected adapter: one IStoreCollection<T> surface so application code does not take a dependency on SQL, NQL, or a vendor SDK. Use the engine package directly when you need that engine’s full surface.
| Need | LocalStore | Direct engine |
|---|---|---|
| Same CRUD if the backend changes | Yes | Rewrite the data layer |
| SQL / NQL / Realm queries | StoreFilter / StoreQuery; QueryAsync when QueryLanguage is Sql or Nql | Full engine language |
| Copy collections to another engine | AutoMigrate + Map<T>, or MigrateAsync | Write your own exporter |
| Relationships / schema migrations | Limited / none inside one engine | Engine-specific |
| Encrypted .nvx or SQLCipher | EncryptionKey on options | Engine-native APIs |
| Nuvexa Data Studio / NQL update | QueryAsync / INuvexaLocalStore | Nuventra.NuvexaDB |
Versus Android Room
Room is a compile-time SQLite mapper for Android. LocalStore is not a Room port: [StoreDao] generates a facade over IStoreCollection<T>, [StoreRaw] is not @Query with compile-time SQL validation, and there are no automatic schema migrations inside one engine. The resemblance is the host-picks-the-engine / app-uses-one-API shape, plus optional generated DAOs.
| Requirement | LocalStore | Android Room |
|---|---|---|
| Host-selected engine | Yes (10 backends) | SQLite only |
| Generated DAOs | Yes ([StoreDao] / [StoreRaw]) | Yes (@Dao / @Query) |
| Cross-platform MAUI | Android, iOS, Mac Catalyst, Windows | Android |
| Copy between engines | AutoMigrate + Map<T> | N/A |
| Schema migrations | No automatic migration inside one engine | Yes |
Versus sibling persistence plugins
| Need | Start with |
|---|---|
| Local documents / rows, host picks the engine | Plugin.Maui.LocalStore |
| Offline-first writes, queued sync, conflicts | Plugin.Maui.OfflineSync |
| Durable jobs, retry, dead letter | Plugin.Maui.JobQueue |
| Retry failed telemetry / orders / payments | Plugin.Maui.RetryQueue |
| Encrypted files (images, PDFs) | Plugin.Maui.FileVault |
| Embedded .nvx, NQL, Data Studio | Nuventra.NuvexaDB |
OfflineSync is a sync engine. JobQueue is a durable task queue that happens to use SQLite. FileVault encrypts files, not collections. NuvexaDB is the document engine LocalStore can host — use it directly when you want Data Studio and the full NuvexaDatabase surface, not a Room-style facade.
Embedded NoSQL engine that LocalStore can open as StoreBackend.Nuvexa. NuvexaDB
Queued sync and conflicts — not a local CRUD API. Plugin.Maui.OfflineSync
When to choose LocalStore
- You want Room-style local CRUD on MAUI without writing SQL or NQL on the shared path.
- The host must pick SQLite, NuvexaDB, Realm, LiteDB, SQLCipher, or another shipped engine.
- You may later copy collections with AutoMigrate + Map<T>, or run QueryAsync / a generated DAO.
- You need Android, iOS, Mac Catalyst, and Windows on net10.0.
- You accept that some engines fall back to JSON files on mobile, and that QueryLanguage is None there.
Stay on the engine SDK when you already standardized on sqlite-net or NuvexaDB and need that query language. Use OfflineSync when the question is conflicted sync. Use JobQueue when the question is durable work. Use FileVault when the artifact is a file, not a row.