Split shared expenses by scene, track who owes what, and settle up β fully offline.
SceneSplit is a Flutter expense-splitting app for trips, roommates, dinners, and events. No account, no cloud β everything stays on your device.
Get SceneSplit from Google Play, or download the latest builds for all supported platforms from GitHub Releases.
| Home (light) | Home (dark) |
|---|---|
![]() |
![]() |
| Scene detail | Pending summary |
![]() |
![]() |
Play Store feature graphic, device captures, and phone mockups: see store/play/README.md (binaries are local / gitignored).
- People & scenes β Global people pool from Profile; create scenes (trips, dinners, shared activities) with emoji icons and members
- Person detail β Per-person balances across scenes, per-currency will-give / gets, who-owes-whom, expense shares, and settle
- Flexible splits β Equal, exact amounts, or percentage, with live validation; choose who is included per expense
- Multi-payer bills β An expense can be paid by one or more people (equal or exact amounts)
- Balances & settlements β Live balances; who-owes-whom follows shared expenses (AβB offsets); editable settlement records
- Share balances β Export Who Owes Whom (plus expense share totals) as an image for WhatsApp and other apps
- Insights β Scene expense breakdown pie; tap a member to see which expenses make up their share
- Currency β App-wide default for home summary and new scenes; each scene has its own currency; locale-aware formatting
- Language β English, Spanish, French, German, Portuguese (Brazil), Hindi, Arabic, and Japanese (system or Profile override)
- Appearance β System, light, or dark theme (saved and applied before first frame)
- Backup β Export and import a local database backup (non-web platforms)
- Share app β Localized pitch with store / web links from Profile and About
- Legal & about β In-app privacy policy, terms of service, and app version
- Offline-first β All data stored locally with Drift (SQLite); no sign-in required
See CHANGELOG.md for release history.
| Layer | Technology |
|---|---|
| Framework | Flutter 3.44 / Dart 3.12 |
| State management | Riverpod 3 |
| Database | Drift 2.34 (SQLite) |
| Localization | Flutter gen-l10n |
| Architecture | Feature-first + service / repository |
| Charts | fl_chart |
| Analytics | Mixpanel (AnalyticsService) |
| Navigation | Material navigation (go_router listed for future use) |
- Flutter SDK (3.44.5 stable or compatible)
- Dart SDK
^3.12.2
flutter pub get
dart run build_runner build --delete-conflicting-outputs # only after schema changes
flutter runOptional demo data (debug / empty DB): Profile β Load demo data, or:
flutter run --dart-define=SEED_DEMO=truelib/
βββ main.dart / app.dart
βββ core/
β βββ constants/ # currencies, scene emojis, assets, links
β βββ l10n/ # context.l10n helpers, error localization
β βββ theme/
β βββ utils/ # money formatting, share balance image
βββ database/
β βββ tables.dart
β βββ app_database.dart
β βββ app_database.g.dart
βββ l10n/ # ARB sources + generated AppLocalizations
βββ repositories/ # user, group, expense, settlement
βββ services/ # split engine, balance, analytics, backup
βββ providers/ # Riverpod streams and derived state
βββ features/
β βββ onboarding/
β βββ home/
β βββ groups/ # create, edit, scene detail (UI: βscenesβ)
β βββ expenses/
β βββ settlements/
β βββ profile/ # people, person detail, language, data & backup
β βββ legal/
β βββ about/
βββ shared/widgets/
βββ dev/ # debug demo seeder
All money amounts are stored as integer cents. Table names still use Groups internally; the UI calls them scenes.
| Table | Purpose |
|---|---|
Users |
Global people pool (id, name, colorIndex, isCurrentUser) |
AppSettings |
Single row: currencyCode, themeMode, localeCode |
Groups |
Scene name, emoji, currencyCode |
GroupMembers |
Scene β user membership |
Expenses |
Scene expenses (amountCents, splitType, note, date) |
ExpensePayers |
Who paid (one or more), with per-payer amountCents |
ExpenseSplits |
Per-user split amounts |
Settlements |
Recorded payments between members |
flutter pub get
dart format lib test
flutter analyze
flutter test
dart run build_runner build --delete-conflicting-outputs
flutter runSee AGENTS.md for dependency pins, architecture conventions, and codegen notes.
- Backend sync
- Multi-currency with exchange rates
- Receipt scanning
- Export (PDF / CSV)
CI, PR checks, releasing, and GitHub secrets are documented in CONTRIBUTING.md.




