Changelog

Every release and what changed in it. Anything that alters where your data goes gets called out here as well as in the privacy policy.

0.2.6

9 September 2026

Released

Lunra tells you when there is a newer Lunra

One new thing here talks to the network: once per launch the app asks whether a newer version exists, sending the same platform and app version it already sends at registration. Nothing else changes in where your data goes.

Added
  • A notice when an update is available. A strip above the header names the new version and says what changed. Dismiss it and it stays away until the next version. On the direct download it downloads and installs right there, then offers a restart; on the App Store build it opens the store page.
  • A version that is no longer supported says so. If a release stops working with the service, the app shows one screen explaining that and offering the update, rather than failing quietly on import.

0.2.5

9 September 2026

Shipped as part of 0.2.6

Tell us what went wrong, from inside the app

A way to reach us without leaving Lunra, and an import screen that says less twice. Sending a report is the one new thing here that talks to the network, and it only does so when you press Send.

Added
  • Send feedback. A button at the bottom of the sidebar opens a short form for feedback or a bug report. What you type, an email address if you choose to give one, the app version, your operating system and the app’s device ID are sent to us. Nothing from your transactions is.
Changed
  • The import queue is one list. Each file appears once and carries its own outcome — where it is in the run, what stopped it, and Import anyway when it has been seen before — instead of a second copy of the row appearing underneath to say so.
  • An already-imported statement is named by its account and period, not by the file it came from. Only an import that saved transactions counts: a PDF whose earlier attempt failed or was abandoned imports normally now instead of being refused.
  • Possible duplicates get a proper chooser. The chip in the review table shows the decision it currently holds and opens a menu beside the row — Skip, Import anyway or Replace existing, each with a line on what it does — rather than a dialog in the middle of the screen with buttons that ran out of room.
  • Clicking a category on the dashboard opens its transactions for the same period the dashboard was showing.
Fixed
  • Picking Custom range on the dashboard flashed the page. Changing the range reloaded everything as if for the first time, so every chart with nothing in the current period swapped to its placeholder and back.
  • A PDF that could not be read left no trace. The debug log only began once the text was out; it now records why the reading failed as well.

0.2.4

3 September 2026

Released

The charts say more, and the list stops moving

A round of fixes to the two screens you spend the most time on. Nothing about your data, your imports or what the app sends over the network has changed.

Changed
  • Spending by Category has its ring back. The breakdown returns to a donut beside the list, with the period’s total in the middle and each category’s share on hover. Clicking a slice opens that category, the same as clicking its row.
  • Hovering a month tells you what the month cost. The total now leads the tooltip instead of trailing a list of every category in the range — a list that was mostly zeroes, and long enough to push the total out of sight behind a scrollbar that could not be reached. Only categories with spending in them are listed, largest first, and the rest are summarised on one line.
  • Opening a transaction opens it. The detail panel expands into place rather than appearing between one frame and the next.
Fixed
  • The category breakdown had lost its colours. The bar under each category was drawn as an inline element, which takes neither a height nor a background, so the whole list rendered as bare names and amounts.
  • Merchant names sat above the line. Rows were held to a common height by an invisible second line inside the merchant column, which pushed the name half a line above the date and the amount beside it.
  • Opening a transaction shunted the columns sideways. Everything from the category across slid over and came back a frame later, because expanding a row discarded every measured row height in the list rather than the one that had changed.

0.2.3

30 August 2026

Released

Imports stop creating accounts quietly

Lunra files every imported statement under an account, and until now it could invent a new one without ever saying so — which is how a card you already track ends up listed twice. This release makes that moment impossible to miss. Nothing about your data or what the app sends over the network has changed.

Added
  • A confirmation before an account is created. If an import does not match an account you already have, the review screen now says so in words, names the account it is about to create, and asks once more when you press Save & Import. Statements landing on an account Lunra already knows still import in a single click.
  • A pointer to the account you probably meant. Banks spell their own name differently from one statement to the next, which used to be enough to split one card into two accounts. When an existing account shares the statement’s last four digits, Lunra now offers it by name and switches to it in one click.
Changed
  • Empty pages read as empty. The dashboard and transactions pages used to print their own title above a panel that said much the same thing, leaving a heading stranded at the top of a blank screen. The panel now sits centred and speaks for itself.
  • Buttons line up with what sits beside them. Button heights were set by padding, so they came out a few pixels short next to a dropdown, and bordered buttons stood taller than plain ones. They now share one set of measurements with the rest of the controls, and the expense/income switch is rounded like every other switch in the app.

0.2.2

28 August 2026

Released

Honest loading, and the header finally knows what version it is

A round of fixes to what Lunra shows you while it is still working, plus a version number in the header that had been wrong since 0.1.0. Nothing about your data, your imports or what the app sends over the network has changed.

Changed
  • Each page now waits in its own shape. Every screen used to show the same shimmering placeholder built out of table rows, so Import promised a list and then produced a drop zone, and Settings promised one and then produced a column of sections. The placeholder now traces the layout of the page you are actually opening, and the content stops jumping when it arrives.
Fixed
  • The header said you were running 0.1.0. The version beside the app name was typed in when 0.1.0 was current and never moved, so it under-reported the app by three releases. It now reads the same source as the About section.
  • Unexplained padding above the header. Lunra was reserving a second strip of clearance for traffic lights that were never over the page, which doubled the gap at the top of every screen.
  • Opening no longer flashes an empty window. The launch screen paints the app mark straight away instead of a bare “Loading…”, and hands over once the database is ready.

0.2.1

27 August 2026

Released

Faster to open, and it looks like one app again

Lunra used to sit on a blank white window for a moment every time you opened it, under a title bar that ignored the dark theme entirely. Both are gone. Nothing about your data, your imports or what the app sends over the network has changed.

Changed
  • The window is dark from the first frame. The title bar no longer sits as a light strip above a dark app — the app’s own surface now runs all the way to the top edge, with the traffic lights on it.
  • Opening is quicker. The code the app has to read before it can draw anything is about a third of what it was. The charting and PDF libraries are now fetched when a chart or an import actually needs them, rather than on every launch.
Fixed
  • Every launch was re-running the whole database setup. Roughly forty statements replayed each time, several of which failed by design once they had already been applied. Lunra now records which version of its database layout it has and skips the work when it is already current.
  • Window size and position are restored again. The app remembered where you left the window but was not permitted to move it back, so it silently gave up and opened at the default size every time.

0.2.0

23 August 2026

Released

Anonymous usage events

Lunra now reports a short, fixed list of anonymous product events, so we can see which parts of the app actually get used. This changes what the app sends over the network, so it is spelled out here and in the privacy policy.

Added
  • Anonymous usage events. Twelve events in total — that the app was opened, that an import started and how it ended, that a filter changed, that a category was created, renamed, merged or deleted, and which link took you from the dashboard to your transactions.
  • Counts and fixed labels only. The events carry numbers, durations and labels from a short vocabulary we wrote. Never a merchant, an amount, a statement date, a category or account name, an institution, a file name, or anything you typed. Search reports that a search happened and roughly how long the query was, never the query itself.
  • No analytics SDK in the app. Events go to our own service and are forwarded from there, so no third-party analytics code runs inside Lunra and no analytics key ships in the binary. The full list and what it contains.
Changed
  • The privacy policy has been rewritten to describe exactly what the app now sends, and what it deliberately does not. There is no switch to turn the events off; blocking api.stackwire.app stops them, at the cost of the free statement allowance.

0.1.0

20 August 2026

Released

First beta build

The first public build, downloadable from the front page. Everything below is in it.

Added
  • PDF statement import. Drop in one file or a folder. Lunra detects the bank and the statement period, and skips statements it has already imported. Password-protected files prompt for the password and are unlocked in memory.
  • Receipt import. Reads photos as well as statements — JPG, PNG, WebP and HEIC.
  • Categorization that learns. Correct a merchant once and the rule is stored locally, then applied on the next import before the model is called.
  • Editable categories. Rename, merge, recolor, or add your own.
  • Dashboard and budgets. Spend, income and net across any range, with category breakdown, top merchants, monthly trend, and per-category budgets.
  • Recurring detection, savings insights and an annual digest.
  • Search and filters. Search from anywhere with ⌘K, and filter by date, category, account or amount.
  • Manual entry. For cash, splits and anything that has not posted yet.
  • Multi-currency. Foreign-currency rows are converted using published daily rates.
  • CSV export. Transactions, categories and rules all export.
  • Bring your own key. Add an Anthropic API key for unlimited imports, billed to you by Anthropic directly.
  • Free tier. Three statements a month parsed without a key, with nothing to set up.
  • Automatic updates. The build downloaded from this site checks for new versions and installs them itself. Settings has a manual check as well. The Mac App Store build updates through the store instead.