Open Source Developer Tools Jul 16, 2026 10 min de lecture

jameskokoska/Cashew: Open-Source Flutter Budget Tracker for All Platforms

B
Bright Coding
Auteur
jameskokoska/Cashew: Open-Source Flutter Budget Tracker for All Platforms
Advertisement

jameskokoska/Cashew: Open-Source Flutter Budget Tracker for All Platforms

Developers who want to track personal finances without surrendering data to proprietary cloud services face a persistent gap: most polished budget apps are closed-source, ad-supported, or locked behind subscriptions. jameskokoska/Cashew fills this space as a fully open-source, cross-platform budget and expense tracker built with Flutter. With 4,476 GitHub stars, active maintenance through March 2026, and distribution across iOS, Android, and the web, it offers a rare combination of user-friendly design and complete code transparency. This article examines what makes Cashew technically interesting, how to build and deploy it, and whether it fits your stack.

What is jameskokoska/Cashew?

jameskokoska/Cashew is a budget and expense management application created by developer James Kokoska, with development starting in September 2021. The project is licensed under the GNU General Public License v3.0, ensuring that all source code remains freely available, modifiable, and redistributed under the same terms.

Technically, Cashew is a Flutter application that leverages Drift (formerly moor) as its SQL persistence layer and Firebase for backend services including authentication and cloud synchronization. This architecture choice matters: Flutter enables true cross-platform deployment from a single Dart codebase, while Drift provides type-safe, SQLite-backed local storage with the option for custom SQL when needed. Firebase integration adds Google authentication and Google Drive backup capabilities without requiring developers to operate their own backend infrastructure.

The repository's health signals are solid. With 743 forks, the project has attracted meaningful community interest beyond passive stargazing. The last commit date of March 9, 2026 indicates active maintenance. Notably, the app has received external validation through features on Google Play's editorial "New Apps We Love" (November 2023), multiple YouTube reviews including "The Best Free and Open Source Apps in 2024," and inclusion in the Material You Apps List.

The maintainer's stance on contributions is unusually direct: pull requests are currently not accepted due to licensing and profit-sharing concerns, since the application generates revenue. This creates a centralized development model where feature requests flow through GitHub issues rather than community code contributions.

Key Features

Cashew's feature set targets users who need granular control over financial tracking without sacrificing usability. The budget management system supports custom time periods beyond standard monthly cycles—critical for one-time events like travel budgets. Users can create category spending limits per budget, selectively assign transactions to specific budgets, and review historical budget performance for trend analysis. The goals system extends this with dedicated spending and saving targets that track progress against specific purchases.

Transaction handling distinguishes Cashew through type-aware behavior. Beyond simple income/expense logging, the app supports upcoming transactions (payable when ready), subscriptions, repeating entries, debts (borrowed), and credit (lent). Each type carries distinct UI semantics—lent transactions track collection status, for instance. Custom categories with searchable icons and automatic title-to-category mapping based on transaction history reduce repetitive data entry.

Multi-currency support operates with real-time conversion rates, displaying both original and converted amounts. Account switching on the homepage triggers instantaneous recalculation across all displayed data. For security, biometric lock and Google login are available, with the latter enabling seamless cross-device synchronization.

The UI follows Material You design principles with system-adaptive accent colors, light/dark mode, and customizable home screen widgets. Data visualization includes interactive graphs for spending pattern analysis. The responsive layout adapts between mobile and web presentations without separate code paths.

Backup and automation round out the feature set: Google Drive backup, CSV and Google Sheets import, app-link-based transaction creation with pre-filled data, and notification reminders for budget goals and due dates.

Use Cases

Self-Hosted Personal Finance for Privacy-Conscious Developers Developers who refuse to store financial data on third-party servers can build Cashew from source, audit the Dart code for network behavior, and deploy the PWA to their own infrastructure. The Firebase dependency is optional for core functionality—local Drift storage operates independently.

Cross-Platform Household Budgeting Families needing synchronized access across iPhones, Android devices, and web browsers benefit from Cashew's single-codebase deployment. Google authentication enables shared household accounts without password management complexity.

Freelancer Project Budgeting with Custom Periods Freelancers running multiple concurrent projects can leverage custom time period budgets to isolate per-project expenses, track client-related spending against specific limits, and use the goals feature to accumulate tax reserves.

Open-Source Financial App Research Developers studying Flutter state management, Drift database patterns, or Firebase integration have access to a production-grade codebase with 4+ years of iterative refinement. The bundled modified packages (implicitly_animated_reorderable_list, sliding_sheet) demonstrate real-world package maintenance when upstream dependencies are abandoned.

Migration from Proprietary Budget Tools Users exiting subscription-based services can import historical data via CSV or Google Sheets, preserving transaction history while gaining full data ownership under GPL-3.0.

Installation & Setup

Building Cashew requires standard Flutter tooling plus platform-specific SDKs. The README provides exact commands for each target platform.

Prerequisites:

  • Flutter SDK (stable channel)
  • Dart SDK (bundled with Flutter)
  • Android SDK (for Android builds)
  • macOS with Xcode (for iOS builds)
  • Firebase CLI (for Firebase deployment)

Android Release Build:

# From repository root
flutter build appbundle --release

This generates an Android App Bundle for Google Play distribution. The --release flag enables code obfuscation and optimization. The Android SDK must be properly configured with ANDROID_SDK_ROOT environment variable.

iOS Release Build:

flutter build ipa

This requires macOS and Xcode with valid signing certificates. The output .ipa file is suitable for TestFlight or App Store submission.

Firebase Deployment (PWA):

firebase deploy

Deploys the web build to Firebase Hosting. Requires prior firebase login and project initialization.

GitHub Release Process:

# Create annotated tag matching pubspec.yaml version
git tag <version>
git push origin <version>

After pushing the tag, create the release at https://github.com/jameskokoska/Cashew/releases/new and upload the built binaries.

Windows Development Scripts: The repository includes convenience batch files:

  • deploy_and_build_windows.bat — deploys to Firebase and builds Android APK + App Bundle
  • open_release_builds.bat — opens build output directory
  • update_translations.bat — downloads latest translations and runs generation script

Wireless Android Development:

Advertisement
adb tcpip 5555
adb connect <PHONE_IP>

Obtain the phone IP from Settings > About Phone > Status Information > IP Address. This enables debugging without USB tethering.

Real Code Examples

The README documents several implementation patterns that reveal architectural decisions.

Platform Detection Wrapper:

// From functions.dart — always use this instead of dart:io Platform
getPlatform()

The Platform class from dart:io is unavailable on web builds. Cashew implements a wrapper function that abstracts platform detection across all targets. This pattern prevents conditional import complexity from leaking into business logic.

Navigation Routing:

// From functions.dart — handles platform-specific routing
pushRoute(context, page)

This wrapper manages PageRouteBuilder configuration and platform-adaptive transitions. Using it consistently ensures the app behaves correctly on iOS (Cupertino-style transitions) and Android/Material platforms without explicit platform checks in every navigation call.

Database Migration Workflow:

# 1. Modify schema in tables.dart, then bump version:
# int schemaVersionGlobal = ...+1

# 2. Generate database code
cd .\budget\
dart run build_runner build

# 3. Export schema dump (replace [schemaVersion] with actual value)
dart run drift_dev schema dump lib\database\tables.dart drift_schemas\drift_schema_v[schemaVersion].json

# 4. Generate step-by-step migrations
dart run drift_dev schema steps drift_schemas/ lib\database\schema_versions.dart

# 5. Implement migration in tables.dart await stepByStep(...)

This demonstrates production Drift usage with schema versioning, JSON schema dumps for testing, and automated migration step generation. The explicit version bumping and schema export prevent silent migration failures in production.

Translation Generation:

# Run from repository root
budget\assets\translations\generate-translations.py

The Python↗ Bright Coding Blog script processes translation data from a linked Google Sheets document, generating Dart localization files. Restart the application to load updated translations.

Advanced Usage & Best Practices

For developers extending Cashew, several patterns from the README merit attention. The wallet/account terminology split indicates ongoing UI modernization: frontend displays use "Accounts" while the data layer retains "Wallets" for backward compatibility. Similarly, "Goals" replaced "Objectives" in the UI without database migration. When contributing custom features (via issue proposals, not PRs), respect this naming convention to avoid data layer inconsistency.

The long-term loan implementation reveals sophisticated financial modeling: loans create goals, but the goal total is calculated dynamically from transaction polarity rather than stored directly. A $100 lent transaction records as negative (expense); repayments record as positive (income). The remaining balance derives from signed summation. This approach maintains auditability—every cent traces to actual transactions rather than derived state.

For self-hosters, note that Firebase is deeply integrated for authentication and sync. Removing Firebase requires replacing Google Login, Cross-Device Sync, and Google Drive Backup with alternatives. The Drift local database operates independently, but cloud features would need reimplementation.

Performance-conscious developers should monitor the build_runner step during schema changes—Drift's code generation is thorough but can slow CI pipelines. The schema dump JSON files should be committed for migration testing but may grow large with frequent schema iterations.

Comparison with Alternatives

Feature jameskokoska/Cashew Actual Budget Firefly III
License GPL-3.0 Proprietary (open core) AGPL-3.0
Primary Language Dart/Flutter Kotlin/Java PHP↗ Bright Coding Blog/Laravel↗ Bright Coding Blog
Self-Hostable Yes (build from source) Limited (cloud default) Yes (Docker↗ Bright Coding Blog)
Mobile Native Apps iOS, Android (single codebase) Android only Progressive Web App
Offline-First Yes (Drift/SQLite) Yes Requires server
Multi-Currency Yes, with live rates Yes Yes
Contribution Model Issues only (no PRs) Restricted Open PRs welcome
Backend Dependency Firebase (optional for core) Proprietary cloud Self-hosted server

Actual Budget offers superior bank synchronization through Plaid integration but lacks iOS support and full source availability. Firefly III provides more comprehensive double-entry accounting but requires server administration and offers no native mobile experience. Cashew occupies a middle ground: genuinely cross-platform, fully open-source, and operable without self-managed infrastructure while remaining buildable from source for the paranoid.

FAQ

Is jameskokoska/Cashew free to use? Yes, the GPL-3.0 license permits free use, modification, and distribution. The maintainer operates paid app store listings, but source builds incur no cost.

Can I contribute code? No—pull requests are not accepted due to licensing and revenue-sharing concerns. Submit feature requests and bug reports through GitHub issues.

Does it work without Firebase? Core budgeting functions work offline with local Drift storage. Google login, sync, and Drive backup require Firebase.

How current is the currency conversion data? The README notes "up-to-date conversion rates" without specifying a provider. Users requiring specific rate sources should verify implementation in the codebase.

Is there an API for automated transaction import? App links support pre-filled transaction creation. See the FAQ website's Automation section for URL scheme documentation.

What Flutter version is required? The README does not specify a Flutter version constraint. Check pubspec.yaml environment constraints in the repository.

How do I update translations locally? Run budget\assets\translations\generate-translations.py and restart the application.

Conclusion

jameskokoska/Cashew delivers a credible open-source alternative in the personal finance space, distinguished by its Flutter-based cross-platform reach, Drift-powered local-first architecture, and genuine production polish validated by app store editorial features. The centralized contribution model and Firebase dependencies create trade-offs that self-hosters and privacy absolutists must evaluate against their requirements.

For developers already in the Flutter ecosystem, Cashew offers a reference-quality codebase for state management, database migration patterns, and Material You implementation. For end users seeking to escape subscription fatigue, it provides full data ownership under GPL-3.0 with no feature-gating.

The project rewards hands-on exploration: build the PWA, inspect the Drift schema, and determine whether the architecture aligns with your trust model. Start at the source: https://github.com/jameskokoska/Cashew.

Advertisement
Advertisement

Commentaires 0

Aucun commentaire pour l'instant. Soyez le premier à réagir !

Laisser un commentaire

Advertisement