A native iOS client for Actual Budget — the open-source, self-hosted personal finance app. Local-first, privacy-focused budgeting with CRDT-based sync.
- Zero-based budgeting — Assign every dollar to a category with goals and progress bars
- Fast transaction entry — Calculator toolbar, auto-category rules, under 10 seconds
- Offline-first — All data in SQLite on your device. Works without internet
- Encrypted sync — CRDT-based sync with your own server. Optional AES-256-GCM encryption
- Privacy mode — Blur all amounts with one tap
- Scheduled transactions — Recurring transactions with status tracking
- Account reconciliation — Match your balances with bank statements
- Light & dark theme — Follows your system preference
- Multi-language — English and Spanish (i18n with react-i18next)
- Native iOS — Swipe gestures, context menus, haptic feedback
- iOS 15+
- An Actual Budget server (self-hosted)
- Node.js 18+
- Expo CLI
- Xcode 15+ (for iOS builds)
git clone https://github.com/cubancodepath/actual-expo.git
cd actual-expo
npm install# Start Expo dev server
npm start
# Build and run on iOS simulator (development variant)
npm run ios
# Build and run production variant on simulator
npm run ios:prod
# Start local Actual Budget server
docker-compose up# Unit tests (Vitest)
npm test
# Type checking
npx tsc --noEmit
# E2E tests (Maestro — requires app running in simulator)
npm run e2e| Layer | Technology |
|---|---|
| Framework | Expo 55 / React Native 0.83 |
| Navigation | Expo Router (file-based) |
| State | Zustand 5 |
| Database | expo-sqlite (raw SQL) |
| Sync | CRDT with Merkle tree diff (ported from Actual's loot-core) |
| Encryption | AES-256-GCM via @noble/ciphers |
| Crash reporting | Sentry |
| i18n | react-i18next |
| Testing | Vitest + Maestro |
src/
├── accounts/ # Account CRUD (raw SQL)
├── budgets/ # Budget calculations, to-budget
├── categories/ # Category queries
├── crdt/ # HLC timestamps, Merkle tree
├── db/ # SQLite connection, schema, migrations
├── encryption/ # AES-256-GCM, PBKDF2 key derivation
├── goals/ # Goal engine (schedule, savings, spending)
├── payees/ # Payee queries
├── rules/ # Auto-categorization rule engine
├── schedules/ # Recurring transactions, recurrence logic
├── services/ # Auth, budget files, encryption service
├── stores/ # Zustand stores
├── sync/ # Full sync, encoder, undo system
├── transactions/ # Transaction CRUD, queries, split logic
├── presentation/ # UI components, hooks, theme, navigation
└── i18n/ # Internationalization config
app/ # Expo Router file-based routes
├── (public)/ # Login, onboarding
├── (files)/ # Budget file selection
└── (auth)/ # Main app (tabs, modals, settings)
Contributions are welcome! Please open an issue or submit a pull request.
- Actual Budget — The open-source budgeting platform
- Actual Budget GitHub — Upstream project
MIT





