Installing Open Net Worth
There are three ways to run Open Net Worth. Pick one:
| Best for | You need | |
|---|---|---|
| A. Desktop app (recommended) | Using it on your own computer | Nothing else — it bundles everything |
B. Server with onw | An always-on machine you open from a browser or from the desktop app on other devices | A terminal |
| C. Docker | A home server or NAS that already runs Docker | Docker with Compose |
All three keep your data in one folder, ~/.open-net-worth/, outside the app itself. Updating
or reinstalling the app never touches it. There is no account to create and no .env file to
write.
Supported platforms
| Platform | Desktop app | Server (onw) | Docker |
|---|---|---|---|
| macOS | Apple Silicon only (signed and notarized) | Yes | Yes |
| Windows 10/11 | x64 | Yes (see the Windows note) | Yes |
| Linux | x86_64, AppImage or .deb | Yes | Yes |
Intel Macs and arm64 Linux have no desktop build yet — use the server or Docker there.
Option A: desktop app (recommended)
The desktop app bundles its own Python, the web interface and this help. You don’t install Python, Node or Docker.
macOS (Apple Silicon)
- Go to opennetworth.ai/download/mac and download the DMG.
- Open it and drag Open Net Worth into Applications.
- Open it from Applications.
Or install from Terminal (it checks the download’s checksum before installing):
curl -fsSL https://opennetworth.ai/install.sh | shWindows 10/11 (x64)
- Go to opennetworth.ai/download/windows and run the installer. It installs for your user only — no administrator prompt.
- The installer is not code-signed yet, so Windows SmartScreen may warn you. Click More info → Run anyway.
Or in PowerShell (checks the download against the release’s SHA256SUMS first):
irm https://opennetworth.ai/install.ps1 | iexTo refuse any installer without a valid signature, add -RequireSigned, or set
$env:ONW_REQUIRE_SIGNED = '1' before piping to iex.
Linux (x86_64)
Pick one:
- Terminal:
curl -fsSL https://opennetworth.ai/install.sh | sh— installs the AppImage to~/.local/bin/open-net-worthwith a launcher entry, nosudo, after checking its checksum. - AppImage: download it from opennetworth.ai/download/linux,
run
chmod +xon it, then run it. .deb: downloadOpen-Net-Worth-linux-amd64.debfrom the releases page, thensudo apt install ./Open-Net-Worth-linux-amd64.deb.
After installing
On first launch, click Get started, then choose where your book lives (Continue keeps the suggested folder; On your own server connects to a server you already run). Then follow Your first run.
To upgrade, the app updates itself (see Desktop app § Updates),
or re-run the terminal installer. To remove the app on macOS or Linux:
curl -fsSL https://opennetworth.ai/install.sh | sh -s -- --uninstall. Your book is never
removed.
Option B: run it as a server
The server is the same app as one process that serves both the API and the web interface on port 8080. You open it in a browser, or connect the desktop app to it from another computer.
macOS and Linux
-
Open a terminal and run the installer:
Terminal window curl -fsSL https://github.com/open-net-worth-ai/open-net-worth-releases/releases/latest/download/install-server.sh | shIt installs uv if you don’t have it, then installs
open-net-worthon uv’s own Python 3.12. You need no system Python or Node.js. The first install downloads a few hundred MB. It also adds~/.local/binto your shell’sPATHif it isn’t there yet. The terminal you ran it in can’t see that change, so the installer then shows thesourceline that reloads it, naming the file it changed:source ~/.zshenvfor zsh,source ~/.bashrcfor bash. Opening a new terminal works too. It finishes by listing the commands you’re likely to need next. -
Start it and open it in your browser:
Terminal window onw start --open -
Your browser opens
http://127.0.0.1:8080. Follow Your first run.
Add --autostart to the end of the installer command (… | sh -s -- --autostart) to also start
it at login and restart it if it crashes. Add --auto-upgrade instead to do that and also install
new versions automatically — see Upgrading.
Windows
The install-server.sh script is for macOS and Linux. On Windows, in PowerShell:
- Install uv:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" - Open a new PowerShell window and run
uv tool install --python 3.12 open-net-worth - Run
onw start --open
The onw command
| Command | What it does |
|---|---|
onw start | Run the app. --open opens your browser once it’s up; --port 9000 or --host 0.0.0.0 override the defaults (127.0.0.1:8080). It stays in that terminal until you press Ctrl+C. --background frees the terminal and keeps it running until onw stop or a reboot; --autostart runs it as the boot service, which also starts it at login and restarts it after a crash; --auto-upgrade installs new versions automatically (Upgrading). |
onw stop | Stop it, however you started it, once any save or import in progress has finished (it waits up to a minute). A reply Lucius is writing is cut off, as with Ctrl+C. If it runs as the boot service, this tells you to use onw autostart uninstall, because the service would only start it again. |
onw restart | Restart it the way it was running: in its terminal, in the background or as the boot service. It waits for a save or import in progress, as onw stop does, and says when it’s back. |
onw status | Show whether it’s running, its URL and version, the working folder, the boot service, where the log is, and how an upgrade is going or why it failed. If it isn’t running, it says so and exits with an error code, so scripts can check it too. It looks at the server for this working folder on this machine. For Docker, use docker compose ps. |
onw logs | Show the end of its log. --follow (-f) keeps showing what’s added until you press Ctrl+C; --lines 200 (-n) shows more. |
onw autostart on | Turn autostart on: the app starts now, by itself at every login, and again after a crash. It uses a launchd agent on macOS, a systemd user service on Linux, and a Task Scheduler task on Windows, with no sudo or admin. The same as onw start --autostart. |
onw autostart off | Turn it off: the app stops and won’t start by itself again. Your book isn’t touched. |
onw autostart | Say whether it’s on, and whether auto-upgrade is on. onw autostart status does the same. The older names install, uninstall and stop still work. |
onw upgrade | Update to the newest release. A running server installs it and restarts once it’s idle (Upgrading). --check only says whether one is out. |
onw reset-password | Set a new password if you’ve forgotten it — see I lost my password. |
onw mcp | Let another AI app (Claude Desktop, Cursor…) use your book — see Connect AI apps. |
onw version | Print the installed version. |
onw help | List the commands. onw help start shows one command’s options, the same as onw start --help. |
Every command exits with 0 when it worked, 1 when it didn’t (for onw status, when the app isn’t running), 2 when the command was typed wrong, and 130 when you press Ctrl+C. Scripts can rely on that.
On macOS and Linux, onw autostart logs go to ~/.open-net-worth/logs/.
To use this server from the desktop app on another computer, choose On your own server at setup — see Desktop app § Connect to a server. Before you open it from another device, read A note on network access.
Option C: Docker
-
Download the Compose file into an empty folder:
Terminal window curl -fsSLO https://github.com/open-net-worth-ai/open-net-worth-releases/releases/latest/download/docker-compose.yml -
Pick a password (at least 8 characters) and start it:
Terminal window AUTH_PASSWORD='pick a password' docker compose up -dIn Windows PowerShell, use
curl.exein step 1, and for step 2:$env:AUTH_PASSWORD='pick a password'; docker compose up -d. -
Open http://localhost:8080 and sign in with that password. First run continues from there.
The password is required under Docker — Compose refuses to start without it. Docker’s networking hides the fact that your browser is on the same machine, so without a password nothing could ever operate the app. Your first run § Docker explains this and what to do if you started without one.
To make the password stick, put AUTH_PASSWORD=... in a .env file next to
docker-compose.yml; Compose reads it on every up. It only sets the password the first time —
change it later in Settings → Security.
What the Compose file does:
- Pulls
ghcr.io/open-net-worth-ai/open-net-worth, pinned to the release the file came with (setONW_VERSION=x.y.zto run another one). The image also haslatestand0.1tags that move to each new release — see Upgrading. - Publishes port 8080 on
127.0.0.1only, so other devices on your network can’t reach it until you change that line (the comment beside it explains the risk).PORT=9000picks another port. - Keeps your data in a Docker volume named
open-net-worth-data, which survivesdocker compose down(onlydocker compose down -vdeletes it). - Restarts the app after a crash or reboot (
restart: unless-stopped).
To update, download the new Compose file and run docker compose pull && docker compose up -d —
see Upgrading. To use a Claude or ChatGPT subscription from inside
the container, see Connecting an AI provider.
From source (developers)
For people working on the code. In a checkout of the source, with Python 3.12+ and Node.js 22+ installed (macOS or Linux):
make setup startmake setup creates .venv, installs dependencies and the onw command, builds the web
interface and this help, and migrates the database. make start runs it on
http://127.0.0.1:8080. make autostart runs setup, then onw autostart on.
CONTRIBUTING.md covers the two-process dev mode (uvicorn --reload + npm run dev) and the
test gate.
make seed fills an empty book with a fabricated example — about two and a half years of
accounts, transactions, holdings and a budget — so you can look around first. It refuses to run
on a book that already holds data.
A note on network access
On the machine running Open Net Worth, you’re trusted without a password — any browser or
program on that machine (localhost) can use it. That’s deliberate for a single-person app.
A password matters once you open it from anywhere else: another device on your network, a reverse proxy, or Docker (whose networking hides that you’re on the same machine).
Until a password is set, the server only opens on its own machine, so nobody else on the network can claim it first. Opening it from another device shows Set a password first: go to the computer it runs on, set one in Settings → Security, then click I’ve set it, sign in.
Forgot it? See I lost my password. Exposing it beyond your own machine is covered in Exposing it beyond localhost.
Troubleshooting
onw: command not foundafter installing —~/.local/binisn’t on yourPATHyet. Open a new terminal, or runuv tool update-shelland then open a new terminal.AUTH_PASSWORD is required for a Docker install— Compose stopped on purpose. Run theupcommand withAUTH_PASSWORD=...in front, or add it to a.envfile.- Port 8080 is already in use — start on another port:
onw start --port 9000, orPORT=9000 docker compose up -d. - The app won’t start — see The backend won’t start.
Related
- Your first run — what happens the first time you open the app.
- Desktop app — background mode, start at login, watched folders, updates.
- Upgrading — updating each kind of install.
- Where your files live — what’s in
~/.open-net-worth/. - Environment variables — optional overrides, such as
ONW_ROOTto keep your data elsewhere.
Guides and comparisons
Longer write-ups on the Open Net Worth blog:
- How to Self-Host a Personal Finance App: 3 Install Routes: the three install routes compared
- Self-Hosted Personal Finance: Apps, Tradeoffs and Setup: what self-hosting your finances involves