Repository navigation
Releases
v0.3.8 — share your month
On 0.3.6 or 0.3.7? Press Update in Burnmeter: it installs this release in one click. On 0.3.5 or older? Download BurnmeterSetup.exe below and run it once.
Added
- Share your month. A Share button in the top bar draws a card of your usage: what
your tokens would have cost at API list prices, set against what your plan costs, with a
bar per day. Pick the last 30 days, this month, last month or all time. Copy it, save it
as a PNG or post it on X. It holds totals only (no project names, prompts or code).
Nothing leaves your machine unless you click Post on X, which opens a draft post on
x.com with the card's text.
Changed
- The license file is the plain AGPL-3.0 text, so GitHub shows the license. The
commercial-license notice moved toLICENSING.md. Pull requests now ask for a one-time
CLA, and the tests run on Windows, macOS and Linux.
v0.3.7 — opens on your figures at once, first install fixed, 12/24/48 h windows
On 0.3.6? Press Update in Burnmeter: it installs this release in one click. On 0.3.5 or older? Download BurnmeterSetup.exe below and run it once.
Added
- The burn-rate gauge reads 12, 24 and 48 hours. Its windows went from 5 minutes to
6 hours; they now also cover the last half day, day and two days.
Fixed
- Burnmeter opens on your figures at once. Every launch read what changed in your
logs and rebuilt the report before showing anything: 45 s behind a loading card on the
maker's PC. It now keeps its newest report on disk and opens on it in under a second,
marked "as of 02:45 · updating…", until the fresh one is in (48 s on that PC). Until
then the needle, today and this 5-hour block read "…", since they'd be from your last
visit. - A fresh install shows something at once. Burnmeter reads every log once after
it's installed, and the page waited on that read: after 45 s it gave up and showed
"failed to load: signal is aborted without reason" until the read was done, minutes
later on a big history. It now opens on a loading screen that counts the logs and GB
read and the time left, shows your last 24 hours while the rest is read, and fills in
the totals, charts and older chats when it's done. On the maker's PC (7.9 GB of Claude
Code logs): the loading screen in 4 s, the last 24 hours in 12–16 s, everything in
about 2 min. - The first read is twice as fast. Each log line was decoded four times, now once:
the maker's 7.9 GB took 66 s to read instead of 145 s, with the same records. - Quitting during the first read keeps what was read. It's saved every minute, so
the next start goes on from there instead of starting over. - The statusline doesn't tie up the server during a first read. Each call waited
for the read to finish; the CLI now works it out itself until it's done.
v0.3.6 — one-click update fixed, every chat, live chats
On 0.3.5? Its Update button cannot install this release; that is the bug fixed here. Download BurnmeterSetup.exe below and run it once. From 0.3.6 on, Update installs new versions in one click.
Fixed
- One-click update now runs the installer. In 0.3.5 the Update button closed
Burnmeter and nothing else happened. The update command reached Windows' cmd with
its quotes escaped, so cmd could find neither the installer nor the app to reopen.
The fix ships in this version, so 0.3.5 has to install 0.3.6 once by hand: run
BurnmeterSetup.exefrom this release. Updates from 0.3.6 on are one click. - The Chats page reaches every chat. It stopped at 60 rows with no way to see the
rest (60 of 195 on the maker's PC). It now shows 60 and a "Show all" button, and
"Most $" ranks every chat, not only the newest 200. The table also fills the window:
a later style rule held it to 320 px, about four rows. Costs of $10,000 and up are no
longer cut off ("$10,4…"). - The live card shows every chat that's running. It had one row per model, so four
chats on Opus 5.5 made one row, named after whichever chat wrote last and costed at
all four. It's now "Live chats", with a row and a rate for each chat. - Chat titles are back on Windows. The Claude desktop app moved its session list to
%LOCALAPPDATA%\Claude-Data, so Chats, Recent activity and the live card showed
folder names ("repo", "ClaudeWorkspace") instead of the titles in the app. Burnmeter
reads the new place too. - Pro sync says why it stopped. A refused push or pull used to fail silently. The
Pro bar now shows when this device last synced, or why it couldn't: no Pro plan,
an unverified email, the daily quota, the network, or a session that ended. - A killed server's build worker kept running for minutes at 1.2–1.8 GB, and its
temp files were never deleted. The worker now exits with its server. - The gauge's "your typical" label read "ypical"; it now stays on the canvas.
- The macOS release gets its versioned dmg (
Burnmeter-0.3.6.dmg) as well.
Changed
- Pro sync pushes only what changed. It pushed every 60 s. It now checks every
10 minutes, pushes a changed snapshot (and one every 6 hours), never twice within
5 minutes, and doesn't pull while the window is hidden. The device name travels
inside the encrypted snapshot only. "Online" means synced in the last 25 minutes. - Firebase gets a key derived from your Pro password, not the password. An
account made before 0.3.6 moves over at its next sign-in. Firebase then signs the
account's other devices out, and they need 0.3.6 to sign back in. - Electron 45, with a hardened shell. A splash shows while the server starts,
the server is restarted if it stops, and navigation, permissions and page content
are locked to the local dashboard.npm auditwent from 18 findings to 0.
Added
firestore.rules, which keep sync to verified Pro accounts, cap a snapshot at
256 KiB and allow one update per device every 5 minutes, with 50 tests that run on
Google's rules engine. They take effect once deployed (docs/FIRESTORE_RULES.md).
v0.3.5 — Claude 5.5 pricing and output-token fixes
This release corrects the cost figures again, mostly downward. v0.3.4 billed the Claude 5.5 models at older rates and missed a third of the output tokens. On the maker's logs, all-time spend went from $42,141 to $35,447, and October from $16,276 to $8,976.
Updating from v0.3.4: the update button in v0.3.4 does nothing, so download and run BurnmeterSetup.exe once. This release fixes the button for the next update. The first launch re-reads all logs once, which takes about 5 minutes on a large history.
Downloads: Windows BurnmeterSetup.exe. macOS Burnmeter.dmg is attached by CI a few minutes after publishing; it is unsigned (right-click → Open).
Fixed
- Claude 5.5 models were billed at older rates. Opus 5.5 was priced as Opus 5,
so its cache reads, the bulk of a Claude Code bill, cost 2.5x. Sonnet 5.5 cache
reads cost 2x, and Haiku 5.5 was billed at Haiku 4.5 rates (10x). Model ids now
match exactly. Haiku 5.5 prompts over 100K tokens bill at its higher tier, fast
mode bills at 2x, and an unknown version is still flagged. On the maker's logs,
October fell from $16,276 to $8,976. - Output tokens were under-counted by a third. Claude Code logs a response's
usage as it streams. Only the last line has the full count, and v0.3.4 kept the
first. The lines of one response are now merged at their highest values. On the
maker's logs, output tokens rose from 122.8M to 179.2M. With both fixes,
all-time spend went from $42,141 to $35,447. - Days, weeks and months follow the local clock. "Today" used to reset at UTC
midnight, which is 03:00 at UTC+3, so it disagreed with the activity heatmap. - A device that stopped syncing kept adding to the fleet. A Mac last synced in
July still added its July burn rate, "today" and month to "All devices". An old
snapshot now adds nothing to those three, and its card and chips show "—". - One-click update did nothing in the installed app. It ran
burnmeter-server.exe -m burnmeter _update, which exited at once, and the
dashboard still said "✓ Updated" after 150 s. The app now downloads and runs the
release installer for the version the dashboard offered./api/healthreports
progress and failure, and a failed update can be retried from the pill. - Scanning another log tree wiped the shared parse cache. This happened when
running the tests or passing a second--projects-dir, and the next launch then
re-read every log, which takes minutes on a big history. Entries for other trees
are now kept, and an unchanged cache is not rewritten. The Codex cache works the
same way. - Tool counts grew with uptime. A build served from the parse cache added each
multi-line response's tool calls again, which inflated the per-tool numbers and
grew the cache file on every rebuild. - The Chats "goal" column showed "Tool loaded." or image notes. Claude Code
also logs request copies, meta lines and compaction summaries as user messages.
The goal is now the first message the user typed. The model in use now comes
first in the models column. - A forked or resumed session counted its tool errors twice. Errors are now
de-duplicated per tool call. - Cache savings price each call at the rates it actually paid, including fast
mode and Haiku 5.5's long prompts. - Smaller fixes:
- Model names keep their minor version ("Opus 5.5", not "Opus 5").
- Model names and timestamps from synced devices are escaped before they reach
the page. - The dashboard skips its charts instead of breaking when Chart.js can't load.
- A log line stamped outside the OS clock's range no longer takes down the report.
- The cache card counts cache writes as input, so its hit rate matches the rest
of the dashboard. It read 100.0% next to 98.2% on the Insights page. - Chat costs and durations are no longer cut off: "$3,33…" now reads "$3,339",
and a chat resumed over weeks shows its span in days. - The pace next to the burn gauge now uses the needle's own measure. It used to
project a block's first minutes over all 5 hours, and could read "10.4×" next
to a needle in the yellow.
Changed
- Charts work offline. Chart.js 4.4.7 is now bundled, so the dashboard loads
nothing from a CDN. - The statusline is instant while Burnmeter runs. It asks the app instead of
rebuilding the report: 0.5 s, against about 65 s on the maker's history. Without
the app it reads only the last 26 hours, in about 9 s. It then blanks what
26 hours can't show: the pace dot (⚪), "P90+", and the block when that day has
no 5-hour pause. The line is now in English:
🟠 Opus 5.5 $4.20/h · block 4h24m · 0 err/24h · cache 97% · today $32. - The parse cache version was bumped, so the first launch after upgrading does one
full re-read.
v0.3.4 — your numbers were wrong; here is the correction
This release changes the cost figures Burnmeter shows you. They were wrong, in both directions.
An audit of the pricing path found three independent errors that had been partly cancelling each other out, which is why nothing looked obviously broken. On the maker's own 30-day history the dashboard reported $13,097 where the true cost was $12,218.
Fixed — cost accuracy
- Sonnet 5 was billed at Sonnet 4.x rates (+50%). Prices were looked up by family name, so a newer model inherited its predecessor's rate.
- Fable 5.1 cache reads were billed at 4x the real rate ($1.00 vs $0.25 per million). Cache reads dominate agentic sessions.
- 1-hour cache writes were billed at the 5-minute rate. Claude Code writes most of its cache with the 1h TTL, which costs 2.0x input instead of 1.25x — this one made the app report less than reality (69% of writes in a heavy month).
- Missing OpenAI tiers:
gpt-6-astrawas charged half its real rate, and the three GPT-5.6 tiers collapsed into one row —gpt-5.6-lunawas reported at roughly 25x its actual price.gpt-5.5-proandgpt-5.4-nanowere also wrong.
Price rows are now per model version, verified against the providers' live pricing pages. A model whose version isn't in the table is still costed, but the app now says so — the models card names it, shows the spend involved, and dates the last price check. Nothing is silently guessed any more.
Fixed — security
POST /api/update accepted a custom header as proof the request came from your own dashboard. That holds for ordinary cross-origin requests, but not against DNS rebinding: a page you have open can point its own domain at 127.0.0.1, at which point the browser treats it as same-origin and its JavaScript can set any header — enough to trigger an install and relaunch. The same gap left your usage data readable the same way: project paths, branch names, chat titles, per-session cost, and for Pro users the decrypted cross-device snapshot.
Every /api/* request now validates the Host header. Serving on a LAN deliberately still works, and BURNMETER_ALLOWED_HOSTS covers a reverse proxy.
Fixed — first run and layout
- A brand-new install no longer grades usage that doesn't exist. It used to show a red "Cache hit 0.0% — low" verdict beside "No usage data yet"; it now reads "Waiting for your first session".
- A long project folder name no longer pushes the cost column out of view.
Note on upgrading
The first launch after this update re-reads your history once (about 40 seconds on a large one) because cost records now carry the cache TTL split. Subsequent launches are normal.
🤖 Generated with Claude Code
v0.3.1 — live data never freezes
Fix: the dashboard no longer freezes after long uptime (PC + Mac).
One hung report fetch (e.g. a laptop sleep/resume leaving a dead socket) could silently wedge the 10-second refresh loop forever — the app looked alive but every number was frozen until you clicked something. v0.3.1 makes the loop un-wedgeable:
- Every request now has a hard timeout — a dead socket recovers within seconds
- A stuck poll is automatically taken over by the next tick (never blocks the loop)
- The app force-refreshes on wake-from-sleep, screen unlock, window focus/restore, and network reconnect
- Idle dashboards now fully repaint at least once a minute (time-decaying numbers like burn windows never look stale)
- macOS: opted out of App Nap, which could suspend the whole meter in the background
- Server hardening: stalled connections can no longer leak threads; silent background-rebuild failures are now logged
🤖 Generated with Claude Code
v0.3.0 — Chats, real Alerts, Insights
Burnmeter v0.3.0 — Chats, real Alerts, Insights
New
- Chats — a new section showing what every conversation cost: chat title, its goal
(the first prompt), project, duration, models used, tokens, $ and cache hit — sorted by
recency or cost. "What was that $40 session?" now has a one-glance answer. - Alerts got real: configure Slack / webhook / email destinations right in the app and
fire a test — the alert engine (rate-limit walls, heavy burn, spending pace) now has a
door. Plus a Spending spikes card (days that broke your pattern) and the Errors card
moved to its natural home. - Cost per commit in Projects: what each git commit burned, with your median $/commit.
- Insights — the old Trends tab, renamed to match what it actually holds.
Download
- Windows:
BurnmeterSetup.exebelow. macOS: https://burnmeter.dev
v0.2.1 — Sidebar account + instant first paint
Burnmeter v0.2.1 — account in the sidebar + instant first paint
New
- Account chip in the sidebar: your avatar, name and plan (PRO pill) now live at the
bottom of the sidebar — one click to manage devices and sync. Signed out? The same spot
is your Sign-in door.
Fixed
- The window could open black on a cold start until relaunched — first paint is now
guaranteed (plus automatic recovery if the page ever fails to load).
Download
- Windows:
BurnmeterSetup.exebelow. macOS: https://burnmeter.dev
v0.2.0 — The new desktop app (Electron)
Burnmeter v0.2.0 — the new desktop app
Burnmeter's Windows app is now built on a modern shell:
New
- Premium window: frameless dark titlebar with integrated window controls, draggable
top bar, no white flash, remembers its position/size. - True single-instance: launching again focuses the running window.
- Tray-first lifecycle: closing the window keeps the meter collecting in the tray.
- Same local-first engine underneath — your data never leaves your machine.
Updating from an older version
Use "Check for updates" as usual. One-time note: after this update installs, the app
may not reopen by itself — launch Burnmeter from the Start menu once. Future updates
relaunch automatically.
Download
- Windows:
BurnmeterSetup.exebelow (SmartScreen: More info → Run anyway — unsigned for now). - macOS: https://burnmeter.dev (pip path; native app coming).
v0.1.75 — Premium UI: fold-fill, tidy tables, clean names
Burnmeter v0.1.75 — premium UI pass
Improved
- Tall and maximized windows now fill with data — Recent activity, the live-model
panel, and the Projects table grow with your window instead of leaving a dead void
below the fold. Small windows are unchanged. - Recent activity table stays tidy: long chat titles ellipsize instead of pushing
the token/$ columns off the card (no more horizontal scrollbar), and up to 20 rows
show in the all-devices view. - Model names render cleanly everywhere (e.g. "Sonnet 5" instead of a raw model id).
- Removed a duplicated KPI sparkline; subtle card hover polish.
Download
- Windows:
BurnmeterSetup.exebelow. macOS: https://burnmeter.dev