A lightweight, privacy-first, beautifully simple expense tracker for iOS.
Completely offline. Zero tracking. Instant logging. Seamless Apple Pay automation.
English • 简体中文 • 繁體中文 • 日本語 • Français • Español
https://testflight.apple.com/join/Ea4FgKEF
Most expense tracker apps nowadays are bloated with social feeds, complex financial account integrations, loan advertisements, subscription paywalls, and aggressive telemetry.
Expense goes back to the fundamentals: a distraction-free, elegant, lightning-fast ledger that respects your time and your personal privacy. Weighing in at just a few megabytes, Expense is a truly "small yet beautiful" native utility crafted purely with Swift & SwiftUI.
- One-tap entry: Open the app, type the amount on a custom tactile keypad, tap a category icon, and you're done. No endless confirmation dialogs or clutter.
- Fixed-decimal & flexible input modes: Tailor the number entry to your preference, including fixed 2-decimal mode for rapid speed.
- Smart Category Sorting: Category icons dynamically reorder based on your real-world frequency of use, putting your favorite choices right under your thumb.
- Build a ledger that mirrors your actual lifestyle.
- Assign any name and choose from hundreds of categorized native Apple emojis.
- Reorder, rename, or delete existing categories anytime. Renaming automatically cascades across past records seamlessly.
- Turn every transaction into an effortless, automatic ledger entry.
- Built with iOS App Intents and Siri Shortcuts, Expense integrates directly with Apple Wallet.
- Whenever you pay with Apple Pay, an iOS Personal Automation can instantly trigger in the background—logging the merchant, amount, and date without opening the app.
- Check out the Automation Setup Guide to set it up in under 2 minutes.
- Zero tracking: No third-party SDKs, no ad frameworks, no analytics trackers, no account registration, and no remote backend servers.
- Runs 100% locally: All your financial entries live exclusively on your device's sandboxed storage.
- You own your data: Period.
- iCloud sync & backup: Keep your data safe across your Apple devices with private iCloud Documents & Key-Value storage. Auto-backup checks daily in the background.
- One-click export: Export clean, standard CSV spreadsheets (Excel/Numbers compatible) or human-readable JSON archives at any time.
- Smart JSON Restore: Seamlessly import backups from the iOS Files app or iCloud with intelligent deduplication and category merging.
- Built with pure native SwiftUI, with zero bulky third-party dependencies.
- The entire binary package is under 5 MB, conserving storage and launching virtually instantaneously.
| Daily & Monthly Ledger | Tactile Keypad Entry | Category Customization | Data & iCloud Control |
|---|---|---|---|
| Calendar-style grouped expenses | Clean custom number pad & quick notes | Curated native Apple emoji catalog | CSV / JSON export & iCloud sync |
- macOS 15.0+ (Sequoia) with Xcode 27.0+ installed
- iOS 18.0+ device or simulator
- Clone this repository:
git clone https://github.com/WinchellWang/expense.git cd expense - Open the project in Xcode:
open Expense.xcodeproj
- Select your target device or simulator and press
Cmd + Rto build and run.
Expense supports native App Intents for background logging. To automate Apple Pay transactions:
- Open the Apple Shortcuts app on your iPhone.
- Go to the Automation tab and create a Personal Automation.
- Choose Transaction (Apple Pay) as the trigger.
- Add the Expense "Add Expense" action, mapping the transaction amount and merchant into the intent.
- Set it to Run Immediately without confirmation.
For step-by-step instructions with localized screenshots and tips, please read the Automation Guide.
Expense automatically adapts to your system language with native translations:
- 🇺🇸 English (Default)
- 🇨🇳 简体中文 (Simplified Chinese)
- 🇭🇰 / 🇹🇼 繁體中文 (Traditional Chinese)
- 🇯🇵 日本語 (Japanese)
- 🇫🇷 Français (French)
- 🇪🇸 Español (Spanish)
Contributions, bug reports, and feature suggestions are warmly welcome! Feel free to:
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.