Budgets that know the pace
A tick on each bar marks where today falls in the period. Ahead of it, the bar turns dark, and Saldo says what you can still spend each day.
Open source · Local-first · Self-hostable
Saldo tracks spending period by period, with budgets, goals and a forecast. It works offline, with no account. When you want sync, it uses a server you run.
No telemetryNo bank connectionAndroid and iOS, built from source
What it is
Everything lives in a database on your phone. Saldo opens offline, and nothing waits for a network.
Sign in with a passkey to a Saldo server you run. Every device on the account converges, offline edits included.
No telemetry, no analytics, no crash reporting. The code is MIT licensed, and all of it is on GitHub.
Features
Every feature works on the phone alone. Nothing sits behind a subscription.
A tick on each bar marks where today falls in the period. Ahead of it, the bar turns dark, and Saldo says what you can still spend each day.
Set money aside towards a figure and, if you like, a date.
Set aside €200.00 a month to get there. You're €136.24 ahead.
Three periods ahead, from your recurring entries and the median of the last six.
Change one occurrence, this one and the following, or all of them.
This entry is recurring
A calendar month, a week, a pay cycle from payday, a year, or a range you pick.
Your month runs from Sep 27 to Oct 26
From a day you choose to the day before, next month
Import the CSV that Spendee exports. Saldo detects the format, shows a preview, and skips the rows it already has. Other apps work with a column mapping.
1,236 to import · 12 duplicates · 0 errors
Export everything, any time. Restore a backup onto a phone.
Screens
Sample data for one September. Swipe or use the arrows.
$ claude mcp add --transport http saldo \
https://saldo.example.com/mcp Self-hosting
The Saldo server is a web app and a Postgres database, in Docker. It adds sync between your devices, a web app for the big screen, and an MCP endpoint for your AI client.
# from docs/self-hosting.md $ git clone https://github.com/saliougaye/saldo.git $ cd saldo $ export PUBLIC_URL=https://saldo.example.com $ export WEBAUTHN_RP_ID=saldo.example.com $ export JWT_SECRET="$(openssl rand -base64 48)" $ export SETTINGS_ENCRYPTION_KEY="$(openssl rand -base64 32)" $ export POSTGRES_PASSWORD="$(openssl rand -base64 24)" $ docker compose -f apps/web/docker/docker-compose.yml \ up -d --build
FAQ
No. Choose “Only on this phone” on the first screen: no account, nothing to set up. You can connect a server later from Profile, without losing anything.
Yes. Export your transactions from Spendee as CSV and import the file. Saldo detects the Spendee format, shows a preview, and skips the rows it already has.
Not yet. You build the app and sideload it, with the guides for Android and iOS. On iOS with a free Apple ID, the app stops opening after seven days until you install it again.
No. You enter transactions, or you import them from a CSV.
The app keeps working on the phone. It syncs again when the server answers. Edits made offline merge, and the last write wins.
Nothing. There is no telemetry, no analytics and no crash reporting. Your server talks only to your devices.
Saldo is free and open source. Read the code, build the app, and add a server when you need one.