Split group expenses, 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.
| Home (light) | Home (dark) |
|---|---|
![]() |
![]() |
| Group detail | Pending summary |
![]() |
![]() |
- People & groups β Manage a global people pool from Profile; create groups with emoji icons and members
- Flexible splits β Equal, exact amounts, or percentage, with live validation; choose who is included per expense
- Balances & settlements β Live balances across groups, smart settlement suggestions, and editable settlement records
- Insights β Group expense total and member-share pie chart on group detail
- Currency β App-wide default for home summary and new groups; each group has its own currency
- Appearance β System, light, or dark theme (saved and applied before first frame)
- Backup β Export and import a local database backup (non-web platforms)
- 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
| Layer | Technology |
|---|---|
| Framework | Flutter 3.44 / Dart 3.12 |
| State management | Riverpod 3 |
| Database | Drift 2.34 (SQLite) |
| Architecture | Feature-first + service / repository |
| Charts | fl_chart |
| 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 runlib/
βββ main.dart / app.dart
βββ core/
β βββ constants/ # currencies, group emojis, assets
β βββ theme/
β βββ utils/ # money formatting
βββ database/
β βββ tables.dart
β βββ app_database.dart
β βββ app_database.g.dart
βββ repositories/ # user, group, expense, settlement
βββ services/ # split engine, balance
βββ providers/ # Riverpod streams and derived state
βββ features/
β βββ onboarding/
β βββ home/
β βββ groups/ # create, edit, detail
β βββ expenses/
β βββ settlements/
β βββ profile/ # appearance, currency, people, data & backup
β βββ legal/
β βββ about/
βββ shared/widgets/
All money amounts are stored as integer cents.
| Table | Purpose |
|---|---|
Users |
Global people pool (id, name, colorIndex, isCurrentUser) |
AppSettings |
Single row: default currencyCode, themeMode |
Groups |
Group name, emoji, currencyCode |
GroupMembers |
Group β user membership |
Expenses |
Group expenses (amountCents, paidById, splitType, note, date) |
ExpenseSplits |
Per-user split amounts |
Settlements |
Recorded payments between members |
flutter pub get
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)
- Localization
CI, PR checks, releasing, and GitHub secrets are documented in CONTRIBUTING.md.




