Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

JaydenRoberts

Members
  • Joined

  • Last visited

Everything posted by JaydenRoberts

  1. It's been a while since I last posted here — sorry for the gap. Here's a catch-up covering v1.4.1 through v1.4.6. v1.4.5 (26 AUG) — BACKUP, EXPORT, AND A SAFETY NET FOR UPGRADES This is the headline release, and it's a big one for data safety. You can now export your own data from Settings — a full database backup, a full JSON export, or your transactions as CSV. More importantly: whenever a future update needs to change the database structure, Tally now takes a snapshot first and verifies it can be read back before touching anything. If that snapshot can't be produced and verified, Tally refuses to start rather than migrate your data unprotected. Snapshots are rotated automatically so the backup folder doesn't grow forever, and any partial file from an interrupted run gets cleaned up on the next start. There's a new Backup & Restore guide in the docs covering how to restore a snapshot by hand: https://github.com/jaydenroberts/tally/blob/main/docs/backup-restore.md Also in this release: the twelve-month trend chart was disagreeing with the headline spend figure for any month containing a debt payment — that's fixed, and as a result, if you record debt payments, those months on your trend chart will now read higher than before. The old figures were too low (a debt payment was being counted as spending when it shouldn't have been). Your headline income/spend numbers are unchanged, this only affects the chart. Spending/income totals are also now worked out from an explicit list of what counts, rather than a list of what to exclude, so a new transaction type can't silently get miscounted until every calculation is updated by hand. Known limitation carried forward: income and spending are still split by whether an amount is positive or negative rather than by its actual type, so a refund still shows as income rather than reducing spending. Fixing that properly needs the import pipeline to label rows first — tracked for later. v1.4.6 (25 SEP) — PLATFORM AND DEPENDENCY UPDATE, NOTHING VISIBLE CHANGED This one's under the hood. Almost every commit in this release is a dependency or platform bump — no application logic changed. The only first-party edits are the version number itself and a new version field on the health endpoint. The reason to update anyway: the interpreter and every major library were getting old, and the published image now passes a clean vulnerability scan with no fixable critical or high findings and no waivers. What moved: Python goes from 3.11 to 3.14 on the server, and the frontend build image from Node 20 to 26. In the browser bundle, React goes from 18 to 19, the router from 6 to 7, and the Vite build tool from 6 to 8. On the backend, FastAPI, Starlette, Pydantic, SQLAlchemy, bcrypt, pandas, axios, pytest, and both AI provider SDKs (OpenAI and Anthropic) all moved up. The HTTP client underneath the AI SDKs changed too: both SDKs dropped plain httpx for httpx2, which is pinned above the versions affected by two published advisories. New in this release, and genuinely useful for bug reports: the container now tells you which version it's running. The health endpoint reports it, and the image carries a Docker healthcheck that calls it. Because the latest tag gets republished every release, there was previously no way to tell which build a running container was actually on. Four things to know before you update: - pip is gone from the finished image. If you've ever run something like docker exec -it tally pip install <package> to add a Python package by hand, that will stop working. Stock Tally doesn't need it for anything; if you were relying on it for a personal customisation, you'll need to build your own image with that package added at build time instead. - The Python interpreter is now 3.14, up from 3.11. This changes nothing about how you use Tally, but if you've built any external script or automation against the container's Python directly, check it against 3.14 rather than assuming 3.11 behaviour. - The web interface is now built on React 19, up from 18. Nothing about the workflow changes — this is here so that if you notice anything render slightly differently, you know why. - An API request with no login token now returns 401 instead of 403. This comes from the FastAPI upgrade and applies to every authenticated endpoint. The web interface is unaffected — it already sent you to the login page on a 401. But if you've got a monitoring check or a script that tests for 403 on an unauthenticated call, switch it to expect 401. One thing worth planning for: on first start after updating, Tally writes an automatic snapshot of your database to /data/backups/pre-1.4.6.db, roughly the same size as your database. That's the v1.4.5 safety net doing its job. If it can't write that snapshot — no space, or the data path isn't writable — the container will refuse to start rather than carry on unprotected. So make sure your appdata share has room before you update. There's no database structure change in this release, so there's nothing to migrate; the snapshot is belt-and-braces. There's no automated test suite for the interface yet, so before this went out every page was driven through a real browser against the released image with the console open, on a database seeded with accounts, transactions, budgets, savings goals, debts and recurring entries. No errors, and every figure on screen matched the API. That's not the same as a human eyeballing every pixel, so if something looks off after updating, it's worth a bug report — this release's whole point is that a problem has very few likely causes, since nothing else changed. Also refreshed alongside this release: the Community Applications template. It drops a volume that hadn't done anything for several versions, exposes the backup and AI settings that were previously undocumented, and fixes a default that quietly gave new installs a shorter AI chat memory than intended. Note the default host port for NEW installs is now 8092 rather than 8091 — if you already have Tally installed, nothing changes for you and your existing port is kept. SECURITY — IF YOU'RE ON v1.4.1 OR OLDER, UPDATE. HERE'S WHY. Two fixes worth being direct about, both already shipped: v1.4.1.1 fixed an unauthenticated path-traversal hole in the static file server. The single-page-app fallback route was serving any file path it was handed without checking that the file actually lived inside the app's static directory — a crafted request could read files outside it, including the application database. That's now fixed: requested paths are resolved and confirmed to stay inside the static root before being served. v1.4.4.1 closed a set of vulnerabilities in third-party libraries Tally depends on — a denial-of-service weakness in the multipart form parser, an algorithm-confusion risk in the JWT library, a header-injection/request-routing weakness in the HTTP client, and a version pin on the PDF text-extraction library. No app behaviour changed, just the dependency versions. If your container is still on v1.4.1 or earlier, update it — this post is the first time I'm flagging either one here. WHAT ELSE LANDED SINCE v1.4.0 Import matching got smarter across a couple of releases: it's now merchant-aware (so a bank row can't validate the wrong manual estimate just because the amount and date happened to line up), uncertain matches get surfaced for you to confirm instead of guessed at, debt payments reconcile against your estimates the same way ordinary spending does, and the review step now shows what will merge versus what's genuinely new before you commit. AI chat conversations now persist — a session sidebar to reopen past chats, automatic titles, delete when you're done with one. Recurring transactions generate on a daily timer now instead of only at startup, so a long-running instance doesn't need a restart to catch up on due entries. And v1.4.2 was a broad security-and-correctness audit pass: CORS locked down to an explicit allow-list, login rate-limiting, the container no longer runs as root, password changes now invalidate existing sessions, plus a large batch of money-accuracy fixes (deleting a transaction linked to a debt payment or savings goal now correctly reverses that money, transfers and debt payments no longer distort your income/expense totals, and more). Full line-by-line detail is in the changelog if you want it. UPGRADING Community Applications: open the Tally entry and hit Update. Or manually: docker pull jaydenroberts/tally:latest and recreate the container. This is safe and in-place from any 1.4.x version — database migrations run automatically, no manual steps. v1.4.6 doesn't change the database structure, so there's nothing to migrate for this one, though it will still write the safety snapshot described above. And as of v1.4.5 the upgrade protects itself: if a future version needs to change the database structure, it snapshots and verifies first, and won't proceed if that fails. NEW ENVIRONMENT VARIABLES SINCE v1.4.0 All optional, all with sensible defaults — nothing breaks if you don't set them: ALLOWED_ORIGINS — comma-separated list of origins allowed to call the API from a browser. Only needed if you access Tally from a hostname other than the default local one. MAX_UPLOAD_BYTES — max size of a statement file you can upload through the import wizard. Defaults to 10 MB. CHAT_HISTORY_TURNS — how many prior turns of a conversation get replayed as context to the AI. Defaults are provider-aware (30 for hosted APIs, 10 for local Ollama). No new ones in v1.4.6, though several existing ones are now surfaced in the Community Applications template that previously weren't — the backup settings in particular. ONE DEPLOYMENT NOTE — SINGLE-TENANT BY DESIGN Worth stating clearly, since Tally has an owner/viewer role system: those roles limit what actions a user can take, not what data they can see. Any authenticated user, owner or viewer, can see all accounts and transactions in the instance. That's deliberate rather than an oversight — I built Tally for my own family, where everyone under the login set already shares the same finances. It does mean it isn't suited to running as a general multi-user service. I don't run mine on the open internet, and my recommendation is to keep yours on your LAN or behind a private tunnel or VPN. LINKS Full release notes: https://github.com/jaydenroberts/tally/releases/tag/v1.4.5 and https://github.com/jaydenroberts/tally/releases/tag/v1.4.6 Docs: https://github.com/jaydenroberts/tally/tree/main/docs Issues: https://github.com/jaydenroberts/tally/issues STILL ACTIVE, MORE COMING This is still actively worked on — it's not a dump-and-abandon project. There's more on the way, including cleaning up the income/refund handling mentioned above. I'd genuinely like to hear from anyone running this: what's awkward to use day to day, what you wish it did that it doesn't, and especially what bank statement formats are giving the importer trouble — that's the area most dependent on seeing real-world files I don't have. Bug reports are welcome too, same as always. Post here or open an issue.
  2. Hey all — a big one just landed. Tally v1.4.0 is live on DockerHub (jaydenroberts/tally:1.4.0 / :latest). The Headline: The UI has been completely overhauled — rebuilt on a consistent design system, with unified headers/navigation on every page, a refreshed component set on the Dracula theme, and a proper mobile pass so it actually works well on a phone now (foldables included). What else is new: - Staged import wizard — CSV/PDF imports are now a guided, reviewable flow with a 5-minute undo. - Reconciliation — jot spends down manually for an instant budget view; the bank import matches and verifies them automatically. "Needs review" finally means something useful. - Smarter CSV handling — separate credit/debit columns detected and mapped for you. - Local AI — the assistant now runs against Ollama or any OpenAI-compatible endpoint, fully on-prem. No cloud dependency. - Quality-of-life — paginated transaction list, multi-select + bulk delete, timezone fixes, and a pile of mobile/layout polish. Updating: Community Applications → Tally → Update. Clean in-place update — your data carries over. Still self-hosted, still MIT, still no telemetry. Repo: https://github.com/jaydenroberts/tally — issues and feedback welcome, and thanks to everyone testing and reporting. 🙌 Docs get a full refresh in the next point release to cover the new import/reconciliation flow.
  3. Tally v1.2.0 is out — the biggest update since launch. Quick recap for anyone new: Tally is a self-hosted personal finance app for households, packaged as a single Docker container. Dracula theme, no cloud, no subscriptions, your data stays on your server. What's new in 1.2.0 The theme of this release is everything connects. Transactions, savings goals, debts, and account transfers can all be linked to each other now, so your numbers actually reflect reality rather than being a flat list of rows. Savings allocation — split a paycheck across multiple savings goals in one step, linked back to the source transaction Savings withdrawal linking — spend from a goal and link the transaction so the balance stays accurate Debt payment linkage — link an expense to a debt; Tally records the payment, updates the balance, and auto-categorises it Transfer workflow — record money moving between your own accounts as a transfer (excluded from budget calculations) Transfer pair linking — retroactively link two existing transactions as a transfer pair Inline category editing — click the category on any transaction row to change it, no modal needed Bulk category update — select multiple transactions and reclassify them in one action Sortable transaction columns — click Date, Account, Amount, or Status to sort Closed account status — mark accounts as closed rather than deleting them; hidden by default with a collapsible section to reopen Mobile navigation — hamburger menu + slide-in drawer on small screens Admin account recovery — locked out? Set RECOVERY_TOKEN in your container env and call the recovery endpoint. No email or SMTP required Full documentation — 12-page docs covering every feature, shipped in the repo A few fixes worth calling out: PDF import now selects the largest table by row count (fixes multi-page bank statements where page 1 is an account summary), and Cr/Dr (compared to simple +/-), amount suffixes now parse correctly. What's live on GitHub now: docs/ — 12 pages, all linked from the README via a table README features list updated for v1.2.0 (transfers, savings linking, debt linking, mobile nav, closed accounts, inline editing) RECOVERY_TOKEN added to the config table The docs integrate as plain GitHub markdown — no Pages setup, no build step. Anyone who lands on the repo can click straight through from the README table to any guide. How to Install Unraid Community Applications — search for Tally in the Apps tab DockerHub — jaydenroberts/tally:1.2.0 / jaydenroberts/tally:latest GitHub + full release notes — https://github.com/jaydenroberts/tally/releases/tag/v1.2.0 Documentation — https://github.com/jaydenroberts/tally/tree/main/docs Upgrading Just pull the new image and restart the container — startup migrations run automatically, no manual database steps. Let me know if you hit any issues. Happy to help with import quirks, bank statement formats, or anything else.
  4. No problem at all. Glad you like it!
  5. That's a fair point, and you're right to flag it. To clarify though, the statement in the original post is still accurate. The core app (accounts, transactions, budgets, debt, imports) has no external connections and no telemetry. That hasn't changed. The AI chat feature added in v1.1.0 is opt-in. Whether it makes external connections depends on which provider you configure: Anthropic / OpenAI — yes, requests go out to their APIs. Your financial data is included in those requests. Ollama (local) — no external connections at all. If you're running Ollama on your server, everything stays on your hardware end-to-end. Also, if you don't set the AI_PROVIDER env var, the chat page is simply unavailable and the app behaves exactly as before.
  6. Just pushed a new update — v1.1.0 adds an AI chat interface to Tally. What's new You can now ask questions about your finances in plain language from a dedicated /chat page. The AI can browse your transactions, check budgets, review account balances, and (if you give it write access) log contributions, payments, and transactions directly. Responses stream in real time. It's built around a persona system — each user gets assigned a persona by the owner that controls what the AI can see and do: full access — all transactions, accounts, budgets, categories summary access — totals only, no raw data (good for family members) readonly — full visibility, no writes Write permission is a separate toggle on top of access level Multi-provider — works with Anthropic (Claude), OpenAI (GPT), or any OpenAI-compatible endpoint. If you're running Ollama locally on your server you can point Tally straight at it and keep everything on-prem. New environment variables (all optional — chat is simply unavailable if not configured): Variable Example AI_PROVIDER anthropic / openai AI_API_KEY your API key AI_MODEL claude-sonnet-4-6, gpt-4o, llama3.2 AI_BASE_URL http://ollama:11434/v1 (Ollama only) Upgrading from v1.0.0 Pull the new image: docker pull jaydenroberts/tally:latest Recreate your container with the AI env vars added (or leave them out to skip the chat feature entirely) Sign out and back in once — the login response was updated to embed the full persona object Full release notes and Docker run example at: https://github.com/jaydenroberts/tally/releases/tag/v1.1.0 As always, bug reports and feedback welcome at https://github.com/jaydenroberts/tally/issues
  7. [Support] Tally — Self-Hosted Personal Finance GitHub: https://github.com/jaydenroberts/tally Docker Hub: https://hub.docker.com/r/jaydenroberts/tally Tally is a self-hosted personal finance app for households. Track accounts, transactions, budgets, savings goals, and debt — all in a single Docker container with no cloud dependency, no subscription, and no external connections. Your financial data stays on your hardware. Key Features: Accounts & Transactions — track balances across multiple account types; manual entry or bank statement import CSV & PDF Import — import bank statements with an automatic reconciliation algorithm (±3 day window, amount tolerance matching) Budgets — monthly budget tracking with verified/estimated split progress bars Savings Goals — contribution logging with projection math and deadline tracking Debt Tracker — two-phase payoff projection (0% period → amortisation), interest-free warnings, avalanche/snowball/fixed strategies Recurring Transactions — automatic generation on startup with daily/weekly/fortnightly/monthly/yearly frequencies Role System — owner and viewer roles; owner manages users, viewer has read-only access Dracula Theme — consistent dark UI throughout Technical Notes: Single Docker container — multi-stage build (Node 20 Alpine → Python 3.11 Slim) FastAPI backend + React 18 SPA + SQLite with WAL mode JWT authentication (configurable token expiry) No telemetry, no external connections, no cloud dependency Data persisted to /data volume; bank statements optionally mounted read-only at /financial-data Installation: The Unraid template is available via Community Applications. Full installation instructions, environment variable reference, and a docker-compose example are in the README on GitHub. Development Transparency: AI tooling was used to assist with development tasks in this project. All architecture decisions, feature design, and code are human-directed and reviewed before inclusion. How to Request Support: Please use this thread for Unraid-specific setup questions, path mapping, or template issues. When reporting a problem, please include: A brief description of the issue The relevant section of your Unraid Docker log for Tally Which install method you used (CA template, manual Docker, or docker-compose)

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.