README.md

September 20, 2026 · View on GitHub

Kharcha

Kharcha

India's Zero-Friction UPI Expense Tracker for Android.

Latest Release License Website



Kharcha 0.18ms Parse Demo
Incoming UPI alert parsed on-device in 0.18ms via embedded Rust engine


Kharcha is a native Android expense tracker built for India's UPI ecosystem. Every payment from GPay, PhonePe, Paytm, or CRED is captured, categorized, and added to your ledger automatically — no manual entry.

Kotlin + Rust, fully offline, zero cloud, zero AI. Parsing and dedupe run in a deterministic Rust core (kharcha-core); the Compose app only stores what Rust decides. Your money data never leaves the device.

by Akash Priyadarshi · github.com/AkashPriyadarshii · akashpriyadarshi.vercel.app

🌐 Website: kharcha.github.io

Why Kharcha

Manual logging is friction; cloud sync is a trust tax. Kharcha kills both:

  • Every UPI debit auto-appears — SMS + push notifications, parsed in Rust.
  • No doubles. Triple-signal dedupe: ref + 5-min window + content hash.
  • Zero AI. Categorization is a local rule map. Deterministic, auditable.
  • Offline by design. No internet permission in the product. No account, no Supabase, no Firebase.
  • P2P contact resolution — phone-number VPAs (9876543210@paytm) resolved to your contacts' names, 100% offline.

📲 Download

Latest releasev0.1.2
APKkharcha-v0.1.2-arm64-v8a.apk (~34 MB)
RequirementsAndroid 12+ (arm64-v8a)

Install: build or grab the APK → open it → allow "Install unknown apps" → done.

✨ Features

  • Automated UPI & SMS Capture — notifications + SMS banking alerts, multi-part join, real-time.
  • Pan-Indian Bank Coverage — SBI, HDFC, ICICI, Axis, Kotak, PNB, BOB, Canara, Union, IDFC FIRST, IndusInd, Federal, Yes Bank + all major UPI apps.
  • Smart Spam Filter — OTPs, recharge promos, collect requests, failed/pending alerts, loan offers, EMI promos rejected in Rust before parsing.
  • P2P Contact Names — phone-number VPAs resolved to device contacts offline via ContactsContract.
  • Auto Wallets — bank/account masks in messages auto-create wallets; message balance updates them.
  • Monthly Budgets — per-category caps with progress bars, over-limit turns red.
  • Rules Engine (zero AI) — normalize + longest-pattern match, learned rules beat builtin. Teach a category from any transaction; it remembers the merchant.
  • 220 merchant logos — word-boundary match, longest key wins. Emoji fallback for the rest.
  • Rolling spend hero — 300ms animated ticker on every new capture.
  • Home widget — month spend + 1-tap log, refreshed on each insert.
  • Shareable month cards — PNG export via system share sheet.
  • Manual entry — quick-add for anything the phone can't see.
  • CSV export — to Downloads, PII-hashable.
  • Biometric app lock — fingerprint/face gate on launch.
  • Batch reparse — SMS backlog drain in one call via parse_captures.

🛠 Tech Stack

ConcernChoice
Core engineRust (kharcha-core), UniFFI bindings, 60/60 tests (24 unit + 36 parity)
AppKotlin + Jetpack Compose, Android 12+ (minSdk 32)
Local DBRoom (SQLite) — the only store
NativeJNA, BiometricPrompt, NotificationListenerService, ContactsContract
Networknone

🏗 Layout

kharcha-core/   Rust: parser, dedupe, categorize, money, filter, split (crate + UniFFI)
android-app/    Kotlin Compose: screens, Room, capture funnel, build → APK
docs/           state, design, plan, handoff, changelog

📝 Notes

  • Device-tested (Realme RMX5061, Android 16): live SMS_RECEIVED insert, auto-learn, dedupe, notify, widget refresh, share PNG verified on-device.
  • Self-send SIM-to-SIM never broadcasts to third-party apps on ColorOS — live path needs a genuine bank sender.
  • Auto-update: release tag + kharcha-armv8a-release.apk asset, version bump gates it.

Source-available. All rights reserved. Public for viewing only — no use, reproduction, or derivative works permitted. See LICENSE for full terms.