Waterflow

Changelog

What changed in each version of Waterflow, newest first, and what to do when updating.

What operators and users notice in each version, newest first, and anything to do when updating. Each version is a tag in the repository, and Server admin links here when a newer one is out. How to update: Updates.

0.4.0

22 October 2026

MSaving is now Waterflow. The app, the website (https://waterflow-app.net; the old address still works) and the repository (https://github.com/LeeMinNguyeen/waterflow; GitHub forwards the old address, so git pull keeps working) all have the new name. Everyone stays signed in, with their choices.

Updating a server you run with Docker Compose: don’t press Update on Server admin this time. The server’s data moves to new names once. In the folder you cloned:

git pull
sh scripts/move-to-waterflow.sh

It stops the server, copies its data into the new names, and starts it again (with your own database or HTTPS, as before). The old copies stay until you remove them: it prints the commands. Already pressed Update? Run the same two lines: the update couldn’t start the new server next to the old one, and the script clears what it left. From now on, the commands say waterflow where they said msaving (docker compose logs waterflow), and backups are named waterflow-<time>.dump. Older backups restore as before.

On Google Cloud Run, update as usual. A server set up before 0.4.0 keeps its names, msaving where the guide now says waterflow:

source ~/msaving-cloud-run.sh
cd ~/msaving && git pull
gcloud builds submit --tag=$IMAGE:$(cat VERSION) --timeout=30m .
gcloud run deploy msaving --image=$IMAGE:$(cat VERSION) --region=$REGION
gcloud run jobs update msaving-jobs --image=$IMAGE:$(cat VERSION) --region=$REGION
  • Sign in in your own language. The screens before sign-in open in the language this browser last used, so someone who uses Waterflow in Vietnamese sees the sign-in screen in Vietnamese after signing out. A browser that has never been used with it still gets English.
  • Joining takes two steps. First the invite code and your language, then your username and password in that language. A wrong or expired code is caught on the first step.
  • Language is a dropdown everywhere you choose it: joining, setup, reset and Profile and security.

One migration (the server’s default name). No new settings.

0.3.1

22 October 2026

Pin an account from its ⋮ menu on Accounts. On a phone, the pin button covered the account’s balance. Each account’s ⋮ menu says Pin to the Overview or Unpin from the Overview, whichever applies, and a viewer gets the menu too.

No new settings and no migrations.

0.3.0

22 October 2026

  • Installments on a credit card. When you add or edit a purchase on a card, Pay in installments spreads it over the months you choose. Each statement bills one installment, starting with the statement the conversion date falls in (or one you pick), and the conversion fee goes all on the first bill or is split into each. The purchase still counts in full in the card’s balance; you choose whether the part not billed yet uses up the card’s limit. End early bills the rest on the next statement.
  • This month’s statement on a card. While last month’s statement still has something to pay, the card shows it and, next to it, this statement so far: what’s new in it, when it closes and when it’s due. Once last month’s is paid off, only this one shows. Pay is always there, for any amount.
  • Restore a backup from Server admin, or when setting up a new server, with the setup code. The server backs up what’s there, restarts and loads the backup; if loading fails, it puts back what was there. Everyone then signs in with the passwords from the backup’s day.
  • Accounts grouped by kind, each group with its total in the book’s currency. A group folds away with a click.
  • People are accounts, on their own page. Each person has their own balance, in the currency picked when adding them: lending to them is a transfer from your account to them, their paying you back a transfer from them, and a meal they paid for you an expense on them. Pick them like accounts, under “People”. People comes after Accounts in the menu (under More on phones), and a person opens their transactions. Money lent and Loan accounts linked to someone still count in their total.
  • Pin accounts to your Overview. It shows the accounts you pinned (the first 5 until you pin one) and the 5 latest transactions. On a wide screen, every page uses the whole width.
  • Pick a category from a folded list: open a group with its arrow, or type to search at any level.
  • New transactions fill themselves in. Type the amount of an expense or income, and the account, category and payee of your own recent ones of a close amount are filled in. Change anything as usual.
  • Saving closes the dialog with a short message that it worked. Every dialog’s buttons sit together at the bottom, and an amount no longer keeps a leading zero.

For operators: five new migrations, applied on start after a backup. No new settings. A restore from Server admin takes files up to 100 MB; on Google Cloud Run a request carries at most 32 MB, far more than a household’s backup.

0.2.0

21 October 2026

  • English first, Vietnamese second. New accounts are English unless the person picks Vietnamese when joining. The screens before sign-in are in English; sign-in has no language switch any more, while join, setup and reset keep one. Existing accounts keep their language.
  • A time on every transaction. The add dialog fills in the current time next to the date. Lists sort by date and time, and the edit history and the export show it. Transactions saved before have 00:00.
  • Remember this device for 30 days at two-step verification: next time on that device, only the password. A new password, turning two-step verification off, an admin’s reset link or Sign out other devices forgets it.
  • Light or dark, or the same as the device (the default), on Profile and security.
  • Server admin: Update now no longer shows an error once the update has started, the commands to update by hand show only when a newer version is out, and What’s new opens this page.

For operators: three new migrations, applied on start after a backup. A new setting, PROJECT_SITE_URL, which the compose file sets: the address What’s new opens.

0.1.5

21 October 2026

If your server uses Supabase (or any database whose owner isn’t a superuser), update now. 0.1.4 and older start once, then stop at every later start with permission denied to alter role. Nothing in the database was changed, and updating fixes it. On Google Cloud Run, a failed deploy never takes traffic.

No new settings and no migrations.

0.1.4

21 October 2026

  • Monthly bills for credit cards and loans. A card’s details show its statement balance and due date. A loan’s show its monthly installment, with a one-off installment fee on the first payment and the month’s interest when the loan has a rate. Pay saves the payment as a transfer from an account you pick.
  • Exchange rate failures say why. When no rates source answers, Server admin shows one line with the reason, for example a network that replaces HTTPS certificates. A failed daily job runs again an hour later, until it works.
  • Run it on Google Cloud Run with a Supabase database: the guide.

For operators: two new migrations, applied on start after a backup. A new setting, RUN_JOBS (on by default; Docker installs don’t need it). Your own Supabase goes through its session pooler. On Supabase, use 0.1.5 instead: 0.1.4 starts there only once.

0.1.3

21 October 2026

  • Signed-in devices on Profile and security: where you’re signed in, and signing out one device or all the others.
  • Sign out after inactivity: each user picks the time, 5 minutes by default, with a warning a minute before.
  • The daily jobs’ schedule on Server admin: each job’s time in your timezone, its last run, and the exchange rates on or off.
  • An old one-click update failure no longer stays on Server admin.

For operators: before updating, delete a .gitignore you made in the msaving folder yourself, since MSaving now ships its own. Three new migrations. The daily jobs no longer all run at every start: each runs at its time, and one missed while the server was off runs when it starts.

0.1.2

20 October 2026

The first round of feedback from the hobbyist test:

  • the edit history shows every edit, including one that changes only an amount or an account;
  • dates are typed and shown day first (DD-MM-YYYY) in both languages;
  • details by account kind: a note, a credit card’s limit, annual fee, statement and due days, an interest rate;
  • account and category details, with their transactions one button away;
  • setting an account’s balance from its edit dialog saves an adjustment for the difference;
  • other members’ changes show within seconds, and there’s a refresh button;
  • on phones, the pages are in a bar at the bottom.

While the server updates itself from Server admin, every page says so instead of showing errors. Four new migrations.

0.1.1

20 October 2026

A small maintenance release, also used to test updating from the web app. No database changes.

0.1.0

20 October 2026

The first release: MSaving as one Docker image and one compose file, built from source on your own machine. Books shared between people on the same server (owners, editors and viewers, invited by username), exchange rates from a free source with a public-domain fallback, and backups that work with your own database too.

Edit this page · Report a problem