A beautifully crafted, open-source expense tracking app built entirely with Kotlin & Jetpack Compose.
Expense Manager is a fully functional Android app for personal finance tracking. It follows modern Android design and development best practices, making it both a useful daily-driver and a reference project for developers looking to learn production-grade Compose architecture.
π§ Work in progress β actively maintained and accepting contributions.
| Home Screen | Analysis Screen | Transaction Screen | Category Chart Screen |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| Transaction Create | Account Create | Budget Create | Dark Theme |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
- Multi-account management β create and organise transactions across Checking, Savings, Cash, Credit Card, and custom accounts
- Budget tracking β set monthly budgets with flexible customisation options and track spending against your targets
- Transaction management β log income, expenses, and transfers between accounts with category tagging, notes, and timestamps
- CSV export β export your transaction data for use in spreadsheets or other tools (PDF export coming soon)
- Multi-currency support β switch display currencies in the UI (full conversion support is planned)
- Trend analysis β visualise your spending patterns across daily, weekly, and monthly timeframes
- Category breakdown β interactive pie chart showing where your money goes, grouped by category
- Income vs. Expense summaries β at-a-glance totals with colour-coded indicators
The transaction list has been rebuilt from the ground up with a focus on usability and polish:
- Income / Expense summary cards β gradient-backed cards at the top showing period totals with glowing accent indicators
- Account filter pills β horizontally scrollable chips for quick filtering by account
- Type filter tabs β segmented control (All / Expense / Income) with animated selection and count badges
- Collapsible search β tap-to-reveal search bar with clear button for fast transaction lookup
- Date-grouped layout β transactions grouped by date with daily net totals in each header
- Swipe-to-reveal actions β gesture-driven Edit and Delete actions on each row (spring-animated, no external library)
- Staggered entrance animations β header, cards, and groups animate in sequentially on load
- Empty state β friendly messaging when filters return no results
- Floating Action Button β quick-access button for adding new transactions
Each transaction row has been refined for better visual hierarchy and interaction:
- Rounded icon container β 44dp badge with category-tinted background and subtle border
- Colour-coded amount prefix β
+for income (green),βfor expenses (red) for instant scanning - Transfer arrow indicator β clear
βflow between From β To accounts on transfer transactions - Notes preview β single-line muted note text beneath the subtitle
- Swipe actions β integrated Edit / Delete reveal with spring physics animation
- Smooth content transitions β
animateContentSize()for expanding/collapsing notes - Backward-compatible API β all new callbacks (
onEdit,onDelete,onClick) default tonull, so existing call sites remain unchanged
- Full Material 3 design system with dynamic color support
- Complete Dark Theme implementation
Expense Manager is structured as a multi-module project following clean architecture principles.
| Layer | Libraries / Tools |
|---|---|
| UI | Jetpack Compose, Material 3 |
| Navigation | Compose Navigation |
| State management | ViewModel, Kotlin Flow, Coroutines |
| Persistence | Room, DataStore |
| Background work | WorkManager |
| Dependency injection | Koin |
| Code style | Spotless |
| Language | 100% Kotlin |
- Android Studio Hedgehog (2023.1.1) or later
- JDK 17+
- Android SDK with minimum API 21
# Clone the repository
git clone https://github.com/nkuppan/expensemanager.git
cd expensemanager
# Build the debug variant
./gradlew assembleDebug
# Install on a connected device
./gradlew installDebugexpensemanager/
βββ app/ # Application module (entry point)
βββ core/
β βββ common/ # Shared utilities, colour resources, extensions
β βββ data/ # Repository implementations, data sources
β βββ database/ # Room database, DAOs, entities
β βββ datastore/ # DataStore preferences
β βββ model/ # Domain models
βββ feature/
β βββ transaction/ # Transaction list, create/edit, item components
β βββ account/ # Account management
β βββ budget/ # Budget tracking
β βββ analysis/ # Charts and analytics
β βββ category/ # Category management
βββ docs/ # Documentation and screenshots
Contributions are welcome and encouraged! Whether it's a bug fix, new feature, or documentation improvement β every PR helps.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Please feel free to file an issue for bugs, suggestions, or feature requests.
- PDF export for transaction reports
- Full multi-currency conversion with live exchange rates
- Recurring transactions (auto-generated on schedule)
- Biometric app lock
- Widget for home screen balance overview
- Cloud sync/backup
Expense Manager is distributed under the terms of the Apache License (Version 2.0). See the LICENSE file for details.
Copyright 2023 Naveen Kumar Kuppan
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0








