Your finances. Local, private, on all your devices.
A local-first personal finance app for Windows, macOS, Linux, Android and iPhone – no cloud, no account, no tracking. Your devices sync with each other, end-to-end encrypted, over your own Wi-Fi.
Download · Features · Installation · iPhone guide · Sync · Build from source · FAQ · Website
- Why ZCashflow?
- Features
- Screenshots
- Download
- Installation
- First steps
- Sync between devices
- Receipts, OCR & local AI
- Your data
- Keyboard shortcuts
- Build from source
- FAQ & troubleshooting
- Contributing
- License, author & support
| 🔒 Private by design | Everything is stored in a local SQLite database on your device. There is no server, no account, no analytics, no ads. |
| 🔁 All your devices, in sync | PC, laptop and phone sync live and end-to-end encrypted (Noise protocol) – only inside your own network, never through a cloud. |
| 🔮 Knows what's coming | Recurring payments, installments and savings goals feed a forecast: how much you'll have at the end of the month and how much you can safely spend per day. |
| 🧾 Receipts that type themselves | Snap a receipt – date, total and merchant are recognized on the device. Optionally refined by a local AI model. |
| ⚡ Two minutes a day | The Simple view is built for a daily routine: enter today's spending, drop today's receipts, done. |
| 🎨 Yours | Light, dark and midnight themes, 9 accent colors, 4 fonts, density, corner style, size, a privacy blur – and 7 languages. |
|
|
|
|
|
|
|
|
Also included: 7 languages (English, Deutsch, Español, Français, Italiano, Polski, Türkçe) · light / dark / midnight themes · accent colors, fonts, density, corner radius, interface size · privacy mode that blurs every amount (Ctrl+Shift+H) · custom title bar · command palette · system notifications · CSV export · full database backup · demo data to explore · factory reset with backup.
All builds are compiled by GitHub Actions straight from this repository. Get them from the latest release or from zsync.eu/zcashflow.
| Platform | File | Notes |
|---|---|---|
| 🪟 Windows 10 / 11 (x64) | ZCashflow_<version>_windows_x64-setup.exe |
Installer, no admin rights needed |
| 🍎 macOS 11+ (Apple Silicon M1–M4) | ZCashflow_<version>_macos_apple-silicon.dmg |
Not notarized → one extra step |
| 🐧 Debian / Ubuntu / Mint / Pop!_OS | ZCashflow_<version>_linux_amd64.deb |
|
| 🐧 Fedora / openSUSE / RHEL | ZCashflow_<version>_linux_x86_64.rpm |
|
| 🐧 Any Linux (Arch, EndeavourOS, Manjaro, …) | ZCashflow_<version>_linux_x86_64.AppImage |
Portable, no installation |
| 🤖 Android 7+ | ZCashflow_<version>_android.apk |
Signed, arm64 + armv7 |
| 📱 iPhone / iPad | ZCashflow_<version>_ios_unsigned.ipa |
Free install via SideStore → guide |
| 🔐 Checksums | SHA256SUMS.txt |
How to verify |
Which Linux file? Debian-based →
.deb, Fedora/openSUSE →.rpm, everything else (or if you're unsure) →.AppImage.
- Download
ZCashflow_<version>_windows_x64-setup.exe. - Double-click it. Choose your language and click through the installer – it installs for your user only, no administrator rights required.
- "Windows protected your PC" (SmartScreen)? The installer isn't signed with a paid code-signing certificate yet. Click More info → Run anyway.
- Start ZCashflow from the Start menu.
When you first use sync, Windows asks whether ZCashflow may communicate on networks – allow Private networks.
Uninstall: Settings → Apps → Installed apps → ZCashflow → Uninstall.
WebView2 is required and already part of Windows 10 (21H2+) and 11. On older systems the installer downloads it automatically.
- Download
ZCashflow_<version>_macos_apple-silicon.dmg, open it and drag ZCashflow into Applications. - The app isn't notarized by Apple (that requires a paid developer account), so macOS blocks the first start. Open Terminal and run:
xattr -cr /Applications/ZCashflow.app
- Start ZCashflow normally.
Alternative without Terminal
Try to open ZCashflow once (it gets blocked), then go to System Settings → Privacy & Security, scroll down and click Open Anyway next to the ZCashflow message. Confirm with your password.
If macOS says the app "is damaged and can't be opened", use the xattr command above – this message is shown for every unsigned download, the app is not actually damaged.
When you first use sync, allow incoming connections if macOS asks.
Intel Macs are not covered by the prebuilt download. You can build it yourself on an Intel Mac.
Debian, Ubuntu, Linux Mint, Pop!_OS, Zorin …
sudo apt install ./ZCashflow_<version>_linux_amd64.debFedora, openSUSE, RHEL, Rocky, Alma …
sudo dnf install ./ZCashflow_<version>_linux_x86_64.rpm # Fedora / RHEL
sudo zypper install ./ZCashflow_<version>_linux_x86_64.rpm # openSUSEArch, EndeavourOS, Manjaro and every other distribution – AppImage
chmod +x ZCashflow_<version>_linux_x86_64.AppImage
./ZCashflow_<version>_linux_x86_64.AppImageAppImage tips
- If it doesn't start, install FUSE 2:
sudo pacman -S fuse2(Arch) ·sudo apt install libfuse2(Debian/Ubuntu 22.04) ·sudo apt install libfuse2t64(Ubuntu 24.04+). - To get a menu entry, use Gear Lever or AppImageLauncher, or move the file to
~/Applications. - Runtime dependencies (usually preinstalled on desktops):
webkit2gtk-4.1,gtk3,libayatana-appindicator(optional).
Firewall (needed for sync). Most desktop distributions block incoming connections. Allow the sync port once:
sudo firewall-cmd --permanent --add-port=47811/tcp && sudo firewall-cmd --reload # Fedora, EndeavourOS, openSUSE (firewalld)
sudo ufw allow 47811/tcp # Ubuntu, Mint (ufw)ZCashflow shows exactly these commands, with a copy button, under Devices & sync.
- Open the release page on your phone and download
ZCashflow_<version>_android.apk. - Tap the downloaded file. Android asks whether your browser/file manager may install unknown apps – allow it once.
- Tap Install. If Google Play Protect shows a warning ("unknown developer"), choose More details → Install anyway. The APK is signed; the warning only appears because the app isn't distributed through the Play Store.
- Open ZCashflow.
Updating: install the newer APK over the old one – your data stays. (All releases are signed with the same key.)
Receipts: Take photo uses the camera; Android asks for permission the first time.
Apple only allows apps from the App Store – unless you sideload them with your own Apple ID. That's free and works with any Apple ID, but a free Apple ID signs apps for 7 days. SideStore takes care of that: it renews the signature automatically in the background, on the phone itself. After the one-time setup below, you don't need a computer anymore.
⏱ The setup takes about 15 minutes, once. You need: your iPhone/iPad, a USB cable, a computer (Windows, macOS or Linux) and an Apple ID.
Step 1 – Prepare an Apple ID
- You can use your normal Apple ID. Nothing in your iCloud changes – the app is only signed with it.
- Don't know your Apple ID email? On the iPhone: Settings → [your name] – the email under your name is your Apple ID.
- Don't know the password? Settings → [your name] → Sign-In & Security → Change Password – you only need your iPhone passcode.
- Prefer a separate Apple ID? Create one at account.apple.com. You can use the same phone number as for your main Apple ID.
Step 2 – Install SideStore with iloader (on your computer)
iloader installs SideStore and sets up everything it needs (pairing file, certificate).
- Install iloader:
- Windows / macOS: download it from the iloader releases. On Windows also install iTunes (or Apple Devices from the Microsoft Store) so the iPhone is recognized over USB.
- Linux: install
usbmuxdfirst, then iloader – e.g. on Arch/EndeavourOS:(Other distributions:sudo pacman -S usbmuxd yay -S iloader-bin
sudo apt install usbmuxd/sudo dnf install usbmuxd, then the AppImage/package from the iloader releases.)
- Connect the iPhone with the USB cable, unlock it and tap Trust on "Trust This Computer?" (enter your passcode).
- Open iloader and sign in with your Apple ID. Enter the verification code that appears on your iPhone.
- Click Install SideStore and wait until iloader reports success (1–3 minutes). The SideStore icon appears on your home screen.
Step 3 – Allow SideStore on the iPhone
These menu items only appear after SideStore has been installed:
- Settings → Privacy & Security → scroll to the very bottom → Developer Mode → On (iOS 16 and newer; on older versions skip this step). The iPhone restarts; after the restart tap Turn On and enter your passcode.
- Settings → General → VPN & Device Management → tap your Apple ID → Trust.
- Install LocalDevVPN from the App Store (free – just search for "LocalDevVPN"). SideStore needs it to install and refresh apps directly on the phone. Open it once and tap Connect (allow the VPN configuration). It's a local loopback – no traffic leaves your phone.
- Open SideStore and sign in with the same Apple ID.
Step 4 – Install ZCashflow
- On the iPhone, open the release page in Safari and download
ZCashflow_<version>_ios_unsigned.ipa(it lands in Files → Downloads). Alternatively send it to yourself via AirDrop, a messenger or a cloud drive and save it to Files. - Make sure LocalDevVPN is connected (VPN icon in the status bar).
- Open SideStore → My Apps → + (top left) and pick the
.ipa. - After a few seconds ZCashflow is on your home screen. 🎉
Updating, refreshing & limits
- Refresh: SideStore renews the 7-day signature in the background over Wi-Fi as long as LocalDevVPN can connect. You can also open SideStore and tap Refresh All at any time. If an app expires, it doesn't lose data – just refresh it.
- Update ZCashflow: download the new
.ipaand install it the same way (My Apps → +). Your data stays. - Limits of a free Apple ID: up to 3 sideloaded apps at once (SideStore counts as one), signatures last 7 days (renewed automatically).
- Sync on iPhone: sideloaded apps can't use Bonjour. ZCashflow therefore scans your Wi-Fi directly – allow Local Network access when iOS asks. See Sync.
iOS troubleshooting
| Problem | Fix |
|---|---|
| Developer Mode / your Apple ID under VPN & Device Management is missing | SideStore isn't installed yet – finish step 2 (iloader must report success). |
| iloader doesn't see the iPhone | Unlock it, tap Trust, try another cable/port. Linux: sudo systemctl start usbmuxd. Windows: install iTunes / Apple Devices. |
| SideStore: "VPN Connection Error: No utun interface detected – LocalDevVPN is not connected" | Open LocalDevVPN and tap Connect, then try again in SideStore. |
| "Untrusted Developer" when opening ZCashflow | Settings → General → VPN & Device Management → your Apple ID → Trust. |
| App won't open after a week | The signature expired. Connect LocalDevVPN, open SideStore → Refresh All. |
| "Maximum number of apps" | A free Apple ID allows 3 sideloaded apps – remove one in SideStore. |
Every release contains SHA256SUMS.txt. Compare the checksum of your file with the one listed:
sha256sum ZCashflow_* # Linux
shasum -a 256 ZCashflow_* # macOSGet-FileHash .\ZCashflow_*.exe -Algorithm SHA256 # Windows PowerShell- Onboarding – choose language, currency, theme and accent color, enter your current balances (as of today) and, optionally, salary and rent. Or click Try it with demo data first to explore six months of sample data (remove it later under Settings → Data).
- Pick your style – Simple for a quick daily routine, Full for every section. Switch any time in the title bar (on phones: top right).
- Add your fixed costs once – rent, subscriptions, insurance, salary under Recurring (or with Repeat right in the quick entry). From then on they're booked automatically and appear in the forecast.
- Starting mid-month? Use Catch up in the Simple view to go through the past days one by one – with your bank statement or receipts next to you.
- Balance off? Click the ✏️ next to Total balance and type what your banking app says. Past entries stay as history and no longer change today's balance.
ZCashflow syncs directly between your devices – no server involved. Connections are authenticated and encrypted with the Noise protocol (XX handshake, pairing uses a pre-shared code); only paired devices can exchange data.
Pair two devices (e.g. iPhone ↔ PC):
- Both devices on the same Wi-Fi, ZCashflow open on both.
- On the PC, make sure the firewall allows port 47811/tcp (see Linux; Windows/macOS ask on first use).
- On the phone open Devices & sync. The PC appears under On this network within a few seconds (tap Search if not).
- Tap Pair. The PC immediately shows a window "iPhone wants to connect" with a 6-digit code.
- Type the code on the phone – done. Both show Live, and every change appears on the other device within seconds.
From then on, devices reconnect automatically whenever they're on the same network – also after restarts or IP changes, and as soon as the app comes back to the foreground on the phone.
Roles: per paired device you can choose Full access, Read only (sees everything, can't change anything) or Receipts only (may only send receipt photos – handy for a family member's phone).
Pairing manually by address
If automatic discovery doesn't find the other device (e.g. guest networks with client isolation), use By address: type the IP shown on the other device under This device is reachable at (e.g. 192.168.1.23 or 192.168.1.23:47811) and tap Request code.
- Built-in OCR (
ocrs) works offline on every platform, no setup needed. - Tesseract (desktop, optional) is used automatically when installed and is often more accurate:
- Debian/Ubuntu:
sudo apt install tesseract-ocr tesseract-ocr-deu - Fedora:
sudo dnf install tesseract tesseract-langpack-deu - Arch:
sudo pacman -S tesseract tesseract-data-deu tesseract-data-eng - macOS:
brew install tesseract tesseract-lang - Windows: UB Mannheim installer (tick the languages you need)
- Debian/Ubuntu:
- Local AI refinement (optional): run Ollama or LM Studio, then enable it under Settings → Receipt recognition & AI (default address
http://localhost:11434). Pick a model; vision models likeqwen2.5vlorllavacan read the photo directly. Your data never leaves your machine.
| Location | |
|---|---|
| Windows | %APPDATA%\dev.zcashflow.app\ |
| macOS | ~/Library/Application Support/dev.zcashflow.app/ |
| Linux | ~/.local/share/dev.zcashflow.app/ |
| Android / iOS | App sandbox (removed when the app is uninstalled) |
zcashflow.db– the SQLite database;attachments/– receipt photos.- Backup: Settings → Data → Save backup writes a complete copy of the database. Export: Export as CSV for spreadsheets.
- Reset: Settings → Reset resets the appearance or deletes everything (optionally saving a backup first).
- Syncing devices is not a backup – deleting on one device deletes everywhere. Keep a backup.
| Shortcut | Action |
|---|---|
| Ctrl/⌘ + K | Search & quick entry (Coffee 3.50) |
| N | New transaction |
| Ctrl/⌘ + 1 … 9 | Jump to section |
| Ctrl/⌘ + B | Toggle sidebar |
| Ctrl/⌘ + , | Settings |
| Ctrl/⌘ + Shift + H | Hide / show all amounts |
| ? | Show all shortcuts |
Stack: Tauri 2 (Rust) · React 19 · TypeScript · Vite · Tailwind CSS 4 · TanStack Router & Query · Zustand · i18next · SQLite (rusqlite) · Noise protocol (snow) · mDNS · ocrs.
| Rust | stable, via rustup |
| Node.js | 22+ and pnpm 10 (npm i -g pnpm or corepack enable) |
| Linux | webkit2gtk-4.1, gtk3, librsvg, patchelf, build tools – e.g. Debian/Ubuntu:sudo apt install libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf build-essential curl wget file libssl-devArch: sudo pacman -S webkit2gtk-4.1 base-devel curl wget file openssl appmenu-gtk-module libappindicator-gtk3 librsvg |
| Windows | Microsoft C++ Build Tools ("Desktop development with C++") and WebView2 (preinstalled on Windows 10/11) |
| macOS | Xcode Command Line Tools: xcode-select --install |
See the Tauri prerequisites for details.
git clone https://github.com/TheHolyOneZ/ZCashflow.git
cd ZCashflow
pnpm install
pnpm tauri dev # run in development mode (hot reload)
pnpm tauri build # release build → src-tauri/target/release/bundle/Useful extras:
pnpm test # frontend tests (vitest)
pnpm typecheck # TypeScript
cd src-tauri && cargo test # backend tests
cd src-tauri && cargo clippy --all-targets -- -D warnings
ZC_DATA_DIR=/tmp/zc pnpm tauri dev # use a separate data folder (e.g. to run two instances side by side)Requirements: Android SDK + NDK 27, JDK 17, ANDROID_HOME / NDK_HOME / JAVA_HOME set, and the Rust targets:
rustup target add aarch64-linux-android armv7-linux-androideabi
pnpm tauri android init
pnpm android:setup # permissions + Wi-Fi multicast lock for sync
pnpm tauri android build --apk --target aarch64 --target armv7The APK lands in src-tauri/gen/android/app/build/outputs/apk/universal/release/. To sign it, put your keystore at src-tauri/gen/android/release.jks and a keystore.properties (keyAlias, password, storeFile) next to it before building.
rustup target add aarch64-apple-ios aarch64-apple-ios-sim
pnpm tauri ios init
pnpm tauri ios dev # simulator or connected deviceFor an unsigned IPA (to sideload), see the ios job in .github/workflows/build.yml – scripts/ios-unsigned.py disables code signing in the generated Xcode project.
You don't need every toolchain locally – GitHub builds everything:
- CI (
.github/workflows/ci.yml) runs typecheck, tests, build,cargo testand clippy on every push. - Build (
.github/workflows/build.yml):- Actions → Build → Run workflow builds selected platforms as artifacts.
- Pushing a version tag builds all platforms and creates a draft release with consistently named files and
SHA256SUMS.txt:git tag v1.0.0 && git push origin v1.0.0 - Android signing uses the repository secrets
ANDROID_KEYSTORE_B64(base64 of the keystore) andANDROID_KEY_PASSWORD.
src/ React frontend
app/ shell, title bar, router, command palette, shortcuts
features/ one folder per area (today, transactions, receipts, recurring, debts,
goals, budgets, accounts, devices, settings, onboarding, …)
components/ shared UI (selects, dialogs, inputs, charts)
locales/ de, en, es, fr, it, pl, tr
src-tauri/ Rust backend
src/domain/ business logic (transactions, recurring, forecast, insights, …)
src/sync/ LAN sync: discovery, pairing, Noise channel, row replication
src/ocr/ OCR engines and receipt parsing
migrations/ SQLite schema migrations
scripts/ Android/iOS build helpers
docs/ screenshots, mobile notes, roadmap
Is ZCashflow really free? Where's the catch?
It's free and open source under the GPL-3.0. There's no account, no subscription, no ads and no data collection. If you like it, you can buy me a coffee on Ko-fi.
Can ZCashflow connect to my bank?
No – by design. Banking APIs require a cloud service in between. You enter transactions yourself (it takes seconds with quick entry and Again chips) or let receipts fill them in. The Correct balance button keeps your balance in line with your bank.
The two devices don't find each other
- Same Wi-Fi? Guest networks often isolate devices – use your main network.
- PC firewall: allow port 47811/tcp (Devices & sync shows the exact command on Linux).
- iPhone: allow Local Network access (Settings → Privacy & Security → Local Network → ZCashflow).
- Still nothing? Use By address with the IP shown on the other device.
- "update both devices": both devices need the same ZCashflow version – update the older one.
My balance is wrong after catching up on past days
Click the ✏️ next to Total balance (or Accounts → Correct balance) and enter today's real balance. From then on, entries before that date are history and don't change today's balance.
Windows SmartScreen / macOS Gatekeeper / Play Protect warn me
The builds are not signed with paid certificates (Apple Developer Program, Windows code-signing). The warnings are expected; follow the steps in Installation. You can verify the checksums or build the app yourself.
How do I move to a new computer?
Either pair the new device with an existing one (everything syncs over), or copy a backup: Settings → Data → Save backup on the old device, then replace zcashflow.db in the data folder of the new one while ZCashflow is closed.
Bug reports, ideas and translations are welcome – please open an issue.
For code changes: fork, create a branch, make sure pnpm typecheck, pnpm test, cargo test and cargo clippy -- -D warnings pass, and open a pull request.
Translations live in src/locales/*.json. Copy en.json, translate the values (keep {{placeholders}} and the plural suffixes _one/_other, plus _few/_many where your language needs them), and register it in src/lib/i18n.ts. pnpm test checks completeness automatically.
ZCashflow is free software, licensed under the GNU General Public License v3.0 or later.
Made with ❤️ by TheHolyOneZ
🌐 More projects – zsync.eu · 🎮 Game modifications – zlogic.eu · ☕ Support on Ko-fi














