Skip to content
STACK IT FIRST
Install the skills
02 · Mobile · MVP · Tool

Expo + SQLite, local-first

One workflow, data on the device, no backend to run, and a sync layer only if you ever need one.
Agent fit5/5 MVP · Ship it Reviewed

The stack

Framework
Expo (managed workflow) + Expo Router
Data
expo-sqlite with Drizzle ORM
Hosting
EAS Update; a single store listing
Also
  • NativeWind
  • MMKV or AsyncStorage for settings
  • expo-file-system for exports
AGENTS.md + real projects on STACK IT FAST (opens in a new tab)

Why agents do well here

5/5
  • No backend means the entire app is one TypeScript project the agent can read and run end to end.
  • Drizzle over SQLite gives the agent a typed schema on the device, so local data has the same rigour as a server database.
  • A tool has one job, so the screens, the schema and the tests all fit in context together.

Avoid at this tier

  • A cloud backend before someone asks to see their data on a second device.
  • Native modules for storage; the Expo SDK already covers it.
  • Accounts; a tool that works offline should not need a login.

How it fits together

Most utilities never need a server. Keep the data on the phone in SQLite with a typed schema, and export to a file when someone wants their data elsewhere. If sync becomes a real request, add it as a separate feature rather than rebuilding the app around it.

Folder layout

app/              index.tsx, item/[id].tsx, settings.tsx, _layout.tsx
src/db/           schema.ts, migrations/, client.ts (expo-sqlite + Drizzle)
src/features/     <workflow>/ {screens, hooks, tests}

First five decisions

Lock these in before the agent writes the second feature. Each one removes a choice it would otherwise make differently every time.

  1. 01 Local SQLite as the only store
  2. 02 Drizzle migrations bundled with the app
  3. 03 No accounts
  4. 04 File export as the sync story
  5. 05 EAS Update for fixes

When to move on

Stay here until the product forces the next tier. You are ready for Growth when:

  • Users keep old versions for weeks after a release
  • A store rejection costs you a launch date
  • You need analytics, crash reporting and push that you own
  • The backend is your code, shared with a web product or not
Growth · Tool Expo + SQLite + optional sync Local-first stays the default; sync, accounts and paid tiers are added as separate features with their own boundary. Next tier

Same tier, other profiles