Skip to content

Releases

v0.3.8 — share your month

Choose a tag to compare

@cihanatak cihanatak released this 01 Nov 16:46
1642b3f

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 to LICENSING.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

Choose a tag to compare

@cihanatak cihanatak released this 01 Nov 00:16
3f252ac

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

Choose a tag to compare

@cihanatak cihanatak released this 30 Oct 08:21
a2719fe

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.exe from 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 audit went 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

Choose a tag to compare

@cihanatak cihanatak released this 29 Oct 19:26
3f0a781

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/health reports
    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

Choose a tag to compare

@cihanatak cihanatak released this 06 Sep 18:03

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-astra was charged half its real rate, and the three GPT-5.6 tiers collapsed into one row — gpt-5.6-luna was reported at roughly 25x its actual price. gpt-5.5-pro and gpt-5.4-nano were 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

Choose a tag to compare

@cihanatak cihanatak released this 10 Jul 21:18

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

Choose a tag to compare

@cihanatak cihanatak released this 08 Jul 00:03

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

v0.2.1 — Sidebar account + instant first paint

Choose a tag to compare

@cihanatak cihanatak released this 07 Jul 23:04

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

v0.2.0 — The new desktop app (Electron)

Choose a tag to compare

@cihanatak cihanatak released this 07 Jul 21:49

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.exe below (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

Choose a tag to compare

@cihanatak cihanatak released this 07 Jul 00:50

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