LibreMoney (called LibreMoney until version 2.2) is a personal money ledger that keeps your figures encrypted with a passphrase only you know. Your browser does the encrypting, so the server only ever stores a locked file it can't read. It's made by the LibrePortal project.
On this page
- At a glance
- What it's good for
- Before you install: HTTPS
- Your passphrase is the only key
- Using it
- Backups and older copies
- Renamed from LibreLedger
- Upgrade encryption
- One ledger each
- Good to know
- Addresses and ports
- Settings
- In its config file
- Tools
- Works with
- Privacy and security
- What leaves this server
- What LibrePortal turns off
- Sources
- Under the hood
At a glance#
- What it is
- Encrypted Money Ledger Productivity ยท made by the LibrePortal project
- Where it opens
- LibreMoney
On its own port at
http://your-server:port, ormoney.your-domainonce you have a domain - Updates
- When you choose New versions wait for you to press Update
- Backups
- Included Part of the daily backup when that's switched on
- Copies
- As many as you like Run several copies, each with its own data
What it's good for#
LibreMoney is for keeping track of where your money goes, month by month, without handing your bank balances to a budgeting company. It's one page: your accounts and their balances at the top, then a ledger for each month with money in, money out and a running balance that carries from one month into the next. Bills and income that repeat, like rent or a salary, can be added to each new month for you. There are totals, a savings summary, a housing affordability check against your income, several budgets in one ledger, and CSV or PDF exports.
What makes it different is where the encryption happens. When you save, your browser locks the ledger with your passphrase before it leaves the page. The server keeps only that locked file and a few earlier copies of it. It never sees your passphrase, your figures or even your account names.
Before you install: HTTPS#
LibreMoney works best on HTTPS, and LibrePortal treats it as an app that needs it. Browsers only hand their built-in encryption to pages on https:// (or opened on the server itself), so if your server is still on plain http://, LibrePortal warns you before you install it, and the app's Open button shows a padlock instead of opening. Hover over it and it says why.
Turning on HTTPS for the server fixes that and takes a few minutes. You don't need a domain: I don't have a domain gives every app the same address over https://. With a domain and Traefik, LibreMoney gets its own address, ledger.<your domain>. Domains and HTTPS walks through both.
LibreMoney itself has a fallback
LibreMoney can also run on plain http://, using an encryption library it carries with it, and the lock screen says when it's doing that. The files are the same either way. It's slower to unlock, though, and on plain http:// anyone on the network path could tamper with the page itself, so LibrePortal's warning stands: turn HTTPS on.
To check: the WebUI blocks the Open button on plain http (CFG_LIBREMONEY_NEEDS_HTTPS=true), but LibreMoney has a built-in crypto fallback for http; confirm which behaviour is intended and update this section
Your passphrase is the only key#
There's no account and no sign-in. The first time you open LibreMoney, it asks you to create a passphrase (twice, to be sure) and press Create & open, and from then on the lock screen asks for it each time.
Lose the passphrase, lose the ledger
There's no reset and no recovery, by design. Nobody, not LibrePortal and not the server, can open your ledger without it. Write the passphrase down somewhere safe, or keep it in your password manager.
Because the first visitor to an empty LibreMoney chooses its passphrase, open it yourself as soon as the install finishes. That's also why LibrePortal installs it private: only your trusted places and your devices on the LibrePortal VPN can reach it. The server has no login of its own, so anyone who could reach it could download the locked file or save over it. They couldn't read it, but keep it private all the same.
Using it#
Start in Balances with the accounts you have and what's in them today. That total is where the ledger begins. Then add your repeating bills and income under Recurring, each with an amount and a schedule: monthly on a set day, every few weeks, or yearly. ๐ Add recurring drops them into a month as ordinary rows you can edit, and + Add month moves on to the next month with them filled in.
Everything saves as you go, encrypted, and Lock at the top clears the page and forgets the key until you type the passphrase again. Use it when you walk away from a shared computer.
The โฏ menu holds the rest:
- Export CSV and Export PDF write out your figures unencrypted, for a spreadsheet or your records. Treat those files with the same care as a bank statement.
- Backup downloads an encrypted copy of the ledger, and Restore loads one back.
- Change passphrase locks the ledger with a new passphrase from now on.
Backups and older copies#
There are two layers of safety net, and both stay encrypted.
LibreMoney keeps its own earlier copies on the server, in a backups folder beside the ledger: the ten most recent, plus the last one of each day for the past thirty days. LibrePortal's nightly backups then copy the ledger and all those earlier copies to your backup locations, like any other app, and restoring LibreMoney from its Backups tab puts the whole lot back as it was that night.
The Restore button in the app loads a file from your own device, such as one you saved earlier with Backup. Taking Backup now and then, before a big tidy-up for example, is the simplest way to have a copy you can bring back yourself.
To check: is there a way from the WebUI to restore one of LibreMoney's own dated server-side copies (data/backups/ledger-*.enc) without a shell? Upstream says: stop the server and copy it over ledger.enc
Old copies keep their old passphrase
Every copy is locked with the passphrase that was in use when it was saved. Change passphrase only affects saves from then on. If you ever restore an older copy, you'll need the passphrase you had at the time, so don't throw the old one away straight after changing it.
To move a ledger to another server, copy its file across (or use Backup here and Restore there) and unlock it with your passphrase.
Renamed from LibreLedger#
LibreMoney is the new name of LibreLedger. When your server updates, LibrePortal carries the app across by itself: the ledger files are not touched, the address and port stay the same, and your passphrase still opens everything. The old Download link still works too. On your phone, install the new LibreMoney app beside the old one, open it with the same server address, then remove the old LibreLedger app.
Upgrade encryption#
Old ledgers are locked under the app's earlier internal label. Open a ledger, choose โฏ โ Upgrade encryption and type your unlock password again, and LibreMoney re-locks it under the new label. It works only on a ledger you own that nobody else has open or shares. It checks the result before swapping it in, keeps the old copy until the check passes, and changes nothing about how you unlock. It's tidying, not extra security, so there's no hurry.
One ledger each#
LibreMoney holds one ledger per copy of the app. If each person in the house wants their own, with their own passphrase, make another copy with instances: each one gets its own data, its own address and its own backups.
Good to know#
- Updates wait for you. LibrePortal pins LibreMoney to an exact version and build, and nothing changes until you press Update, which takes a backup first. It only fetches that same version again; it can't move LibreMoney to a newer one yet.
- It's small. A standard-library Python server that stores one file, running read-only with no special permissions. It uses very little memory.
- Its source is public at git.libreportal.org, if you'd like to see exactly how the encryption works.
Addresses and ports#
LibreMoney has one port. LibrePortal picks a free port number for each when you install, so yours will differ from anyone else's. The Config tab's Network section shows them, and the app's Open button uses the right one.
| What it is | Who can reach it | With a domain |
|---|---|---|
| LibreMoney | Trusted places only | money.your-domain |
Settings#
In its config file#
LibreMoney's own settings aren't on the Config tab yet. They live in the app's config file, described here so you know they exist. How to change them.
| Setting | What it does | Starts as |
|---|---|---|
NameCFG_LIBREMONEY_DISPLAY_NAME |
What this app is called on your dashboards. Leave empty to use its usual name | Empty |
Show on the LibrePortal DashboardCFG_LIBREMONEY_SHOW_ON_DASHBOARD |
Whether this app gets a shortcut on the front page of the LibrePortal WebUI, separate from any Dashy dashboard Choices: true, false |
true |
Sign in automaticallyCFG_LIBREMONEY_GATE_AUTOLOGIN |
Behind the Authelia gate, open your own ledgers straight from your Authelia login (needs the gate and a domain). While on, LibreMoney moves to a network only Traefik can reach and its direct port answers on this server only. Turn off to get the shared login back Choices: true, false |
false |
Change Pushes To ntfyCFG_LIBREMONEY_NTFY |
on: tell your phone when someone changes the ledger, without saying what; off: never | Empty |
ntfy Address AdvancedCFG_LIBREMONEY_NTFY_URL |
The ntfy server to post to; empty is the ntfy app on this server | Empty |
Quiet Time AdvancedCFG_LIBREMONEY_NTFY_QUIET |
Seconds after a push before the next one can go | 600 |
Tools#
LibreMoney's Tools tab has 3 buttons for jobs you'd otherwise need a terminal for. Each one runs as a task, so you can watch it on the Tasks page and read what it did. More about Tools.
Everyone signs in with Authelia, then opens their own ledgers with an unlock password. The ledger from before is kept as it is. Takes a checked backup first.
Back to the shared passphrase and the direct port. Nothing is deleted: ledgers made while it was on are kept for next time.
Used by Rename a Person, not run by hand: moves one person's LibreMoney account and ledger memberships to a new name, after a checked backup.
Works with#
These are the other apps LibreMoney knows how to work with. Once it's installed, its page shows the same list with whether each one is connected. How this works.
- Change pushes to ntfy: Tells your phone when someone changes the ledger, without saying what.
- Grafana: Shows dashboards for the apps that have one. works with every app
- Prometheus: Collects metrics from the apps that can export them. works with every app
- Uptime Kuma: Watches your apps and shows when one goes down. works with every app
Privacy and security#
All clear LibreMoney keeps your money records encrypted on your own server and never contacts outside services, except notifications to an address you choose.
What leaves this server#
- Notifications to the ntfy address you set, if any
What LibrePortal turns off#
Nothing needed switching off.
Licence: AGPL-3.0. Audited: 21 October 2026. See the privacy of every app and the Promise.
Sources#
Under the hood#
- It runs this image:
git.libreportal.org/libreportal/libremoney:2.7.0@sha256:cfb98554904673e29f22064c96617c5da730013b07f426a06c6964082eac7a8c. The version is pinned, and moves only when you update it. - It can sit behind Authelia's sign-in once Authelia is installed.
- Its own project and documentation: git.libreportal.org/LibrePortal/LibreMoney
Ports, settings, tools and connections on this page are read from LibrePortal v0.10.96's app catalogue each time the guide is built.