tokenmap
Your AI coding stats, visualized.
A GitHub-style contribution heatmap that shows how much you actually use AI coding tools. One command. Auto-detected. Shareable.
pip install tokenmap
tokenmap
That's it. It reads your local data and renders a heatmap — plus an estimated cost breakdown — right in your terminal.
By default tokenmap includes your Claude Code data (and auto-detects any other installed tools), uses the dark-green theme, shows the cost breakdown, and stays terminal-only. Pass --export png (or svg/csv) when you want a shareable file.
Supported Tools
| Tool | Data Source | What's Tracked |
|---|---|---|
| Claude Code | ~/.claude/stats-cache.json |
Tokens, models, sessions, costs |
| Codex CLI | ~/.codex/sessions/*.jsonl |
Tokens, models, session durations |
| OpenCode | ~/.local/share/opencode/ |
Tokens, models, messages |
| Cursor | Cursor API + local state.vscdb |
Tokens, models, usage events |
tokenmap auto-detects which tools you have installed. No configuration needed.
Install
pip install tokenmap
Requires Python 3.10+.
System Dependencies
For PNG export, you need Cairo installed:
# macOS
brew install cairo
# Ubuntu/Debian
sudo apt install libcairo2-dev
# Fedora
sudo dnf install cairo-devel
Usage
# Basic — Claude + any other auto-detected tools, cost breakdown, terminal only
tokenmap
# Add your name to the heatmap
tokenmap --user yourname
# Pick tools (Claude is always included unless you pass --no-claude)
tokenmap --codex # Claude + Codex
tokenmap --no-claude # everything detected EXCEPT Claude
tokenmap --no-claude --cursor # Cursor only
# Filter by date
tokenmap --year 2025
tokenmap --since 2026-01-01 --until 2026-01-31
tokenmap --since 2026-05-01 # from a date through today
# Filter to one model (substring match)
tokenmap --model claude-opus-4-7
tokenmap --model opus # every Opus variant
# Change the color theme (default is dark-green)
tokenmap --theme green
# Export a shareable file (off by default)
tokenmap --export png
tokenmap --export svg
tokenmap --export csv # per-day token + cost rows
tokenmap --out ~/Desktop/my-ai-usage.png # implies export, format from extension
# Copy PNG to clipboard (implies PNG export)
tokenmap --copy
# Dump raw stats as JSON (to stdout, or to a file with --out)
tokenmap --json
tokenmap --json --out stats.json
# Hide the cost breakdown (shown by default)
tokenmap --no-cost
# See all themes
tokenmap --list-themes
Themes
10 built-in themes — 5 light, 5 dark:
| Dark | Light |
|---|---|
dark-ember |
green |
dark-green (default) |
purple |
dark-purple |
blue |
dark-blue |
amber |
dark-mono |
mono |
Options
| Flag | Description | Default |
|---|---|---|
--user <name> |
Username shown on the heatmap | — |
--claude / --no-claude |
Include Claude Code data | on |
--codex |
Also include Codex data | off |
--opencode |
Also include OpenCode data | off |
--cursor |
Also include Cursor data | off |
--theme <name> |
Color theme | dark-green |
--export <fmt> |
Write a file: png, svg, or csv |
off (terminal only) |
--no-export |
Force terminal-only output (overrides --export/--out) |
— |
--out <path> |
Custom output path (implies export; format from extension) | — |
--copy |
Copy PNG to clipboard (implies PNG export) | — |
--year <year> |
Filter to a specific year | last 365 days |
--since <date> |
Start date, inclusive (YYYY-MM-DD) |
— |
--until <date> |
End date, inclusive (YYYY-MM-DD) |
— |
--model <name> |
Filter to models matching this name (substring) | all models |
--json |
Output raw stats as JSON (to stdout, or --out file) |
— |
--cost / --no-cost |
Show estimated cost breakdown by model | on |
--live-pricing / --no-live-pricing |
Fetch current model pricing (cached 24h; offline falls back to built-in table) | on |
--list-themes |
Show all available themes | — |
Programmatic Usage
from tokenmap import aggregate_multi, render_terminal, render_svg, compute_stats
from tokenmap.types import RenderOptions
# Load data from all detected tools
panels = aggregate_multi()
# Render to terminal
render_terminal(panels, RenderOptions(theme="dark-green", user="myname"))
# Generate SVG
svg_string = render_svg(panels, RenderOptions(theme="dark-green", user="myname"))
# Access raw stats
for panel in panels:
print(f"{panel.tool}: {panel.stats.total_tokens} tokens")
How It Works
tokenmap reads locally stored data from your AI coding tools. It never sends data anywhere — everything stays on your machine.
- Detect — scans for installed tool data directories
- Aggregate — merges token usage, sessions, and model stats across tools
- Render — generates a terminal heatmap + cost breakdown
- Export (optional) — with
--export, saves a high-res PNG/SVG with stats panel, or a CSV of per-day tokens + cost
Privacy
- All data is read locally from your filesystem
- Nothing is uploaded or transmitted
- Two optional network requests, both disable-able:
- Cursor's API (to fetch your own usage CSV, using your local auth token) — with a local-only fallback that reads Cursor's
state.vscdbon your machine when the API is unavailable. - A pricing lookup: a GET of LiteLLM's public pricing catalog (a static JSON file on GitHub) so cost estimates stay current for new models. No data about you is sent — it's a plain download, cached locally for 24 hours. Disable with
--no-live-pricing; offline, tokenmap falls back to its built-in pricing table.
- Cursor's API (to fetch your own usage CSV, using your local auth token) — with a local-only fallback that reads Cursor's
Attribution
This project is a Python port of tokenviz by Harsh Kedia. Original source: https://github.com/harshkedia177/tokenviz
Licensed under MIT. Original copyright retained.
License
MIT
Metadata
Release files for tokenmap 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tokenmap-0.1.4.tar.gz | 47.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tokenmap-0.1.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 97.3 kB
Release files / tokenmap-0.1.4.tar.gz
| Download URL | tokenmap-0.1.4.tar.gz |
|---|---|
| Size | 47.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d5d15a5f0e770b20299a1bc73485968188d71b4f95f05f8060f6338d9a9c1a77
|
|
BLAKE2b-256 checksum How to use checksums |
d410277a799a141f77e3340fb6ae06acdf2bb3720d4a86da779e28d09c86f945
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 17, 2026.
Transparency logRelease files / tokenmap-0.1.4-py3-none-any.whl
| Download URL | tokenmap-0.1.4-py3-none-any.whl |
|---|---|
| Size | 49.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d48cda82941e42c57e1ad76bbcf1c4421c552fcfb45b234d281f3a69d368166f
|
|
BLAKE2b-256 checksum How to use checksums |
22dbed3331b2dc5b0f9bfa096c3bd1be4f5a112aa4639934a9c1b3aa8177a601
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 17, 2026.
Transparency log