# moneymanagerex/android-money-manager-ex architecture

> Architecture diagram of the GitHub repository moneymanagerex/android-money-manager-ex, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/moneymanagerex/android-money-manager-ex
- Repository: https://github.com/moneymanagerex/android-money-manager-ex

## Overview

Money Manager Ex for Android is a personal-finance app for managing accounts and transactions, budgets, currencies, investments, scheduled transactions, and reports. The usual user workflow is to open a database, work with financial records, then review summaries or export/synchronize data. The graph preserves these distinct product areas and the storage and service layers. Relationships are limited to calls or dependencies visible in excerpts and the source index, plus documented README context; unsampled UI-to-domain routes are not asserted.

Main entry points: [`app/src/main/java/com/money/manager/ex/servicelayer/AccountService.java`](https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/servicelayer/AccountService.java) (Account Services), [`app/src/main/java/com/money/manager/ex/database/MmxOpenHelper.java`](https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/database/MmxOpenHelper.java) (SQLite Database), [`app/src/main/java/com/money/manager/ex/sync/PocketBaseSyncEngine.java`](https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/sync/PocketBaseSyncEngine.java) (Cloud Sync), [`app/src/main/java/com/money/manager/ex/budget/BudgetService.java`](https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/budget/BudgetService.java) (Budget Service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workspace["Database Workspace"]
  node_workspace_ui["Database Workspace"]
  node_file_storage["Database Files"]
  node_settings["App Settings<br/>[AppSettings.java]"]
  node_database[("SQLite Database<br/>[MmxOpenHelper.java]")]
end

subgraph group_finance["Finance Management"]
  node_account_ui["Accounts and Transactions"]
  node_account_service["Account Services"]
  node_account_repo["Account Repository"]
  node_account_model["Account Model<br/>[Account.java]"]
  node_currency["Currency Services"]
  node_investments["Investment Portfolio"]
  node_price_service["Price Updates"]
end

subgraph group_insights["Planning and Reports"]
  node_budget_ui["Budget Management"]
  node_budget_service["Budget Service<br/>[BudgetService.java]"]
  node_budget_repo["Budget Repositories"]
  node_reports["Financial Reports"]
  node_scheduled["Scheduled Transactions"]
  node_recurring_service["Recurring Service"]
end

subgraph group_platform["App Services"]
  node_sync["Cloud Sync"]
  node_sync_manager["Sync Manager<br/>[SyncManager.java]"]
  node_money["Money Arithmetic<br/>[Money.java]"]
end

subgraph group_exchange["External Exchange"]
  node_provider["Rate Provider"]
  node_cloud["PocketBase Service"]
end

node_user(("Finance User"))

node_user -.->|"opens database"| node_workspace_ui
node_workspace_ui -.->|"selects files"| node_file_storage
node_file_storage -->|"replaces database"| node_database
node_user -.->|"manages records"| node_account_ui
node_account_service -->|"saves accounts"| node_account_repo
node_account_service -->|"creates account"| node_account_model
node_account_repo -.->|"persists records"| node_database
node_currency -->|"loads accounts"| node_account_service
node_user -.->|"plans spending"| node_budget_ui
node_budget_service -->|"loads budgets"| node_budget_repo
node_budget_service -->|"queries totals"| node_database
node_user -.->|"reviews finances"| node_reports
node_user -.->|"schedules transactions"| node_scheduled
node_recurring_service -->|"uses recurrence"| node_scheduled
node_user -.->|"tracks portfolio"| node_investments
node_price_service -.->|"requests rates"| node_provider
node_user -.->|"starts sync"| node_sync_manager
node_sync_manager -.->|"coordinates sync"| node_sync
node_sync -->|"reads and writes"| node_database
node_sync -->|"pushes changes"| node_cloud
node_account_service -->|"calculates balances"| node_money

click node_workspace_ui "https://github.com/moneymanagerex/android-money-manager-ex/tree/master/app/src/main/java/com/money/manager/ex/home"
click node_file_storage "https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/core/docstorage/FileStorageHelper.java"
click node_settings "https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/settings/AppSettings.java"
click node_database "https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/database/MmxOpenHelper.java"
click node_account_ui "https://github.com/moneymanagerex/android-money-manager-ex/tree/master/app/src/main/java/com/money/manager/ex/account"
click node_account_service "https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/servicelayer/AccountService.java"
click node_account_repo "https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/datalayer/AccountRepository.java"
click node_account_model "https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/domainmodel/Account.java"
click node_currency "https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/currency/CurrencyService.java"
click node_budget_ui "https://github.com/moneymanagerex/android-money-manager-ex/tree/master/app/src/main/java/com/money/manager/ex/budget"
click node_budget_service "https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/budget/BudgetService.java"
click node_budget_repo "https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/datalayer/BudgetRepository.java"
click node_reports "https://github.com/moneymanagerex/android-money-manager-ex/tree/master/app/src/main/java/com/money/manager/ex/reports"
click node_scheduled "https://github.com/moneymanagerex/android-money-manager-ex/tree/master/app/src/main/java/com/money/manager/ex/scheduled"
click node_recurring_service "https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/servicelayer/RecurringTransactionService.java"
click node_investments "https://github.com/moneymanagerex/android-money-manager-ex/tree/master/app/src/main/java/com/money/manager/ex/investment"
click node_price_service "https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/investment/prices/FreeCurrencyExchangeRateAPIService.java"
click node_sync "https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/sync/PocketBaseSyncEngine.java"
click node_sync_manager "https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/sync/SyncManager.java"
click node_cloud "https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/sync/PocketBaseApiService.java"
click node_money "https://github.com/moneymanagerex/android-money-manager-ex/blob/master/money/src/main/java/info/javaperformance/money/Money.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_workspace_ui,node_file_storage,node_settings,node_database,node_user toneBlue
class node_account_ui,node_account_service,node_account_repo,node_account_model,node_currency,node_investments,node_price_service toneAmber
class node_budget_ui,node_budget_service,node_budget_repo,node_reports,node_scheduled,node_recurring_service toneMint
class node_sync,node_sync_manager,node_money toneRose
class node_provider,node_cloud toneIndigo
```

## Components

### Database Workspace

- [Database Workspace](https://github.com/moneymanagerex/android-money-manager-ex/tree/master/app/src/main/java/com/money/manager/ex/home): `app/src/main/java/com/money/manager/ex/home`
- [Database Files](https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/core/docstorage/FileStorageHelper.java): `app/src/main/java/com/money/manager/ex/core/docstorage/FileStorageHelper.java`
- [App Settings](https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/settings/AppSettings.java): `app/src/main/java/com/money/manager/ex/settings/AppSettings.java`
- [SQLite Database](https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/database/MmxOpenHelper.java): `app/src/main/java/com/money/manager/ex/database/MmxOpenHelper.java`

### Finance Management

- [Accounts and Transactions](https://github.com/moneymanagerex/android-money-manager-ex/tree/master/app/src/main/java/com/money/manager/ex/account): `app/src/main/java/com/money/manager/ex/account`
- [Account Services](https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/servicelayer/AccountService.java): `app/src/main/java/com/money/manager/ex/servicelayer/AccountService.java`
- [Account Repository](https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/datalayer/AccountRepository.java): `app/src/main/java/com/money/manager/ex/datalayer/AccountRepository.java`
- [Account Model](https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/domainmodel/Account.java): `app/src/main/java/com/money/manager/ex/domainmodel/Account.java`
- [Currency Services](https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/currency/CurrencyService.java): `app/src/main/java/com/money/manager/ex/currency/CurrencyService.java`
- [Investment Portfolio](https://github.com/moneymanagerex/android-money-manager-ex/tree/master/app/src/main/java/com/money/manager/ex/investment): `app/src/main/java/com/money/manager/ex/investment`
- [Price Updates](https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/investment/prices/FreeCurrencyExchangeRateAPIService.java): `app/src/main/java/com/money/manager/ex/investment/prices/FreeCurrencyExchangeRateAPIService.java`

### Planning and Reports

- [Budget Management](https://github.com/moneymanagerex/android-money-manager-ex/tree/master/app/src/main/java/com/money/manager/ex/budget): `app/src/main/java/com/money/manager/ex/budget`
- [Budget Service](https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/budget/BudgetService.java): `app/src/main/java/com/money/manager/ex/budget/BudgetService.java`
- [Budget Repositories](https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/datalayer/BudgetRepository.java): `app/src/main/java/com/money/manager/ex/datalayer/BudgetRepository.java`
- [Financial Reports](https://github.com/moneymanagerex/android-money-manager-ex/tree/master/app/src/main/java/com/money/manager/ex/reports): `app/src/main/java/com/money/manager/ex/reports`
- [Scheduled Transactions](https://github.com/moneymanagerex/android-money-manager-ex/tree/master/app/src/main/java/com/money/manager/ex/scheduled): `app/src/main/java/com/money/manager/ex/scheduled`
- [Recurring Service](https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/servicelayer/RecurringTransactionService.java): `app/src/main/java/com/money/manager/ex/servicelayer/RecurringTransactionService.java`

### App Services

- [Cloud Sync](https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/sync/PocketBaseSyncEngine.java): `app/src/main/java/com/money/manager/ex/sync/PocketBaseSyncEngine.java`
- [Sync Manager](https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/sync/SyncManager.java): `app/src/main/java/com/money/manager/ex/sync/SyncManager.java`
- [Money Arithmetic](https://github.com/moneymanagerex/android-money-manager-ex/blob/master/money/src/main/java/info/javaperformance/money/Money.java): `money/src/main/java/info/javaperformance/money/Money.java`

### External Exchange

- **Rate Provider**
- [PocketBase Service](https://github.com/moneymanagerex/android-money-manager-ex/blob/master/app/src/main/java/com/money/manager/ex/sync/PocketBaseApiService.java): `app/src/main/java/com/money/manager/ex/sync/PocketBaseApiService.java`

### Other components

- **Finance User**

## Connections

- Finance User → Database Workspace: opens database
- Database Workspace → Database Files: selects files (evidence: `app/src/main/java/com/money/manager/ex/core/docstorage/FileStorageHelper.java`)
- Database Files → SQLite Database: replaces database (evidence: `app/src/main/java/com/money/manager/ex/core/docstorage/FileStorageHelper.java`)
- Finance User → Accounts and Transactions: manages records
- Account Services → Account Repository: saves accounts (evidence: `app/src/main/java/com/money/manager/ex/servicelayer/AccountService.java`)
- Account Services → Account Model: creates account (evidence: `app/src/main/java/com/money/manager/ex/servicelayer/AccountService.java`)
- Account Repository → SQLite Database: persists records
- Currency Services → Account Services: loads accounts (evidence: `app/src/main/java/com/money/manager/ex/currency/CurrencyService.java`)
- Finance User → Budget Management: plans spending
- Budget Service → Budget Repositories: loads budgets (evidence: `app/src/main/java/com/money/manager/ex/budget/BudgetService.java`)
- Budget Service → SQLite Database: queries totals (evidence: `app/src/main/java/com/money/manager/ex/budget/BudgetService.java`)
- Finance User → Financial Reports: reviews finances
- Finance User → Scheduled Transactions: schedules transactions
- Recurring Service → Scheduled Transactions: uses recurrence (evidence: `app/src/main/java/com/money/manager/ex/servicelayer/RecurringTransactionService.java`)
- Finance User → Investment Portfolio: tracks portfolio
- Price Updates → Rate Provider: requests rates
- Finance User → Sync Manager: starts sync
- Sync Manager → Cloud Sync: coordinates sync (evidence: `app/src/main/java/com/money/manager/ex/sync/PocketBaseSyncEngine.java`)
- Cloud Sync → SQLite Database: reads and writes (evidence: `app/src/main/java/com/money/manager/ex/sync/PocketBaseSyncEngine.java`)
- Cloud Sync → PocketBase Service: pushes changes (evidence: `app/src/main/java/com/money/manager/ex/sync/PocketBaseSyncEngine.java`)
- Account Services → Money Arithmetic: calculates balances (evidence: `app/src/main/java/com/money/manager/ex/servicelayer/AccountService.java`)
