# cef62/claude-usage-monitor architecture

> Architecture diagram of the GitHub repository cef62/claude-usage-monitor, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/cef62/claude-usage-monitor
- Repository: https://github.com/cef62/claude-usage-monitor

## Overview

Claude Usage Monitor is a Tauri desktop app that surfaces Claude plan usage in a macOS menu bar or Windows tray and popover. The workflow polls Claude using Claude Code’s stored login, builds a snapshot with quota history and pace forecasts, then presents it and evaluates alerts. Settings, history, and logs persist locally; the tray also exposes update and configuration actions. The README documents additional UI and alert capabilities. Some Rust wiring and website internals were not sampled, so uncertain links are omitted.

Main entry points: [`src-tauri/src/tray.rs`](https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/tray.rs) (Tray and menus), [`src-tauri/src/poll.rs`](https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/poll.rs) (Poll coordinator), [`src/App.tsx`](https://github.com/cef62/claude-usage-monitor/blob/main/src/App.tsx) (Usage popover), [`src-tauri/src/usage.rs`](https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/usage.rs) (Credentials and API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Popover UI"]
  node_app["Usage popover<br/>[App.tsx]"]
  node_ipc["Tauri IPC<br/>[ipc.ts]"]
  node_format["Quota presentation<br/>[format.ts]"]
  node_about["About panel<br/>[About.tsx]"]
  node_quota["Snapshot types<br/>[quota.ts]"]
end

subgraph group_monitoring["Usage monitoring"]
  node_poll["Poll coordinator<br/>[poll.rs]"]
  node_usage["Credentials and API<br/>[usage.rs]"]
  node_history["Quota history<br/>[history.rs]"]
  node_forecast["Pace forecast<br/>[forecast.rs]"]
  node_alerts["Alert evaluation<br/>[alerts.rs]"]
end

subgraph group_desktop["Desktop experience"]
  node_tray["Tray and menus<br/>[tray.rs]"]
  node_icon["Tray icon<br/>[icon.rs]"]
  node_update["Application updates<br/>[update.rs]"]
end

subgraph group_state["Local state"]
  node_settings[("User settings<br/>[settings.rs]")]
  node_log[("Local log<br/>[log.rs]")]
end

subgraph group_web["Project website"]
  node_website["Guide and downloads"]
end

node_user(("Desktop user"))
node_claude{{"Claude usage API"}}
node_codeauth["Claude Code login"]
node_releases{{"GitHub releases"}}
node_notify{{"OS notifications"}}

node_user -->|"opens menu"| node_tray
node_user -->|"opens popover"| node_app
node_user -->|"visits"| node_website
node_app -->|"requests snapshot"| node_ipc
node_app -->|"formats display"| node_format
node_app -->|"renders"| node_about
node_app -->|"uses snapshot types"| node_quota
node_ipc -.->|"invokes snapshot"| node_poll
node_poll -->|"fetches usage"| node_usage
node_usage -.->|"reads token"| node_codeauth
node_usage -->|"requests quotas"| node_claude
node_poll -->|"updates samples"| node_history
node_poll -->|"computes forecast"| node_forecast
node_forecast -->|"reads samples"| node_history
node_forecast -->|"uses quotas"| node_usage
node_poll -->|"records polling"| node_log
node_tray -->|"reads snapshot"| node_poll
node_tray -->|"loads settings"| node_settings
node_tray -->|"evaluates alerts"| node_alerts
node_tray -->|"updates icon"| node_icon
node_tray -->|"opens log"| node_log
node_tray -->|"offers update actions"| node_update
node_alerts -.->|"delivers alerts"| node_notify
node_user -->|"requests update"| node_update
node_update -->|"checks releases"| node_releases
node_user -->|"receives warnings"| node_notify

click node_app "https://github.com/cef62/claude-usage-monitor/blob/main/src/App.tsx"
click node_ipc "https://github.com/cef62/claude-usage-monitor/blob/main/src/lib/ipc.ts"
click node_format "https://github.com/cef62/claude-usage-monitor/blob/main/src/lib/format.ts"
click node_about "https://github.com/cef62/claude-usage-monitor/blob/main/src/About.tsx"
click node_quota "https://github.com/cef62/claude-usage-monitor/blob/main/src/lib/quota.ts"
click node_poll "https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/poll.rs"
click node_usage "https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/usage.rs"
click node_history "https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/history.rs"
click node_forecast "https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/forecast.rs"
click node_alerts "https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/alerts.rs"
click node_tray "https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/tray.rs"
click node_icon "https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/icon.rs"
click node_update "https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/update.rs"
click node_settings "https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/settings.rs"
click node_log "https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/log.rs"
click node_website "https://github.com/cef62/claude-usage-monitor/tree/main/site/src/pages"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_ipc,node_format,node_about,node_quota,node_user toneBlue
class node_poll,node_usage,node_history,node_forecast,node_alerts toneAmber
class node_tray,node_icon,node_update,node_claude toneMint
class node_settings,node_log toneRose
class node_website,node_codeauth,node_releases,node_notify toneIndigo
```

## Components

### Popover UI

- [Usage popover](https://github.com/cef62/claude-usage-monitor/blob/main/src/App.tsx): `src/App.tsx`
- [Tauri IPC](https://github.com/cef62/claude-usage-monitor/blob/main/src/lib/ipc.ts): `src/lib/ipc.ts`
- [Quota presentation](https://github.com/cef62/claude-usage-monitor/blob/main/src/lib/format.ts): `src/lib/format.ts`
- [About panel](https://github.com/cef62/claude-usage-monitor/blob/main/src/About.tsx): `src/About.tsx`
- [Snapshot types](https://github.com/cef62/claude-usage-monitor/blob/main/src/lib/quota.ts): `src/lib/quota.ts`

### Usage monitoring

- [Poll coordinator](https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/poll.rs): `src-tauri/src/poll.rs`
- [Credentials and API](https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/usage.rs): `src-tauri/src/usage.rs`
- [Quota history](https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/history.rs): `src-tauri/src/history.rs`
- [Pace forecast](https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/forecast.rs): `src-tauri/src/forecast.rs`
- [Alert evaluation](https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/alerts.rs): `src-tauri/src/alerts.rs`

### Desktop experience

- [Tray and menus](https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/tray.rs): `src-tauri/src/tray.rs`
- [Tray icon](https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/icon.rs): `src-tauri/src/icon.rs`
- [Application updates](https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/update.rs): `src-tauri/src/update.rs`

### Local state

- [User settings](https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/settings.rs): `src-tauri/src/settings.rs`
- [Local log](https://github.com/cef62/claude-usage-monitor/blob/main/src-tauri/src/log.rs): `src-tauri/src/log.rs`

### Project website

- [Guide and downloads](https://github.com/cef62/claude-usage-monitor/tree/main/site/src/pages): `site/src/pages`

### Other components

- **Desktop user**
- **Claude usage API**
- **Claude Code login**
- **GitHub releases**
- **OS notifications**

## Connections

- Desktop user → Tray and menus: opens menu (evidence: `README.md`)
- Desktop user → Usage popover: opens popover (evidence: `README.md`)
- Desktop user → Guide and downloads: visits (evidence: `README.md`)
- Usage popover → Tauri IPC: requests snapshot (evidence: `src/App.tsx`)
- Usage popover → Quota presentation: formats display (evidence: `src/App.tsx`)
- Usage popover → About panel: renders (evidence: `src/App.tsx`)
- Usage popover → Snapshot types: uses snapshot types (evidence: `src/App.tsx`)
- Tauri IPC → Poll coordinator: invokes snapshot
- Poll coordinator → Credentials and API: fetches usage (evidence: `src-tauri/src/poll.rs`)
- Credentials and API → Claude Code login: reads token
- Credentials and API → Claude usage API: requests quotas (evidence: `src-tauri/src/usage.rs`)
- Poll coordinator → Quota history: updates samples (evidence: `src-tauri/src/poll.rs`)
- Poll coordinator → Pace forecast: computes forecast (evidence: `src-tauri/src/poll.rs`)
- Pace forecast → Quota history: reads samples (evidence: `src-tauri/src/forecast.rs`)
- Pace forecast → Credentials and API: uses quotas (evidence: `src-tauri/src/forecast.rs`)
- Poll coordinator → Local log: records polling (evidence: `src-tauri/src/poll.rs`)
- Tray and menus → Poll coordinator: reads snapshot (evidence: `src-tauri/src/tray.rs`)
- Tray and menus → User settings: loads settings (evidence: `src-tauri/src/tray.rs`)
- Tray and menus → Alert evaluation: evaluates alerts (evidence: `src-tauri/src/tray.rs`)
- Tray and menus → Tray icon: updates icon (evidence: `src-tauri/src/tray.rs`)
- Tray and menus → Local log: opens log (evidence: `src-tauri/src/tray.rs`)
- Tray and menus → Application updates: offers update actions (evidence: `src-tauri/src/tray.rs`)
- Alert evaluation → OS notifications: delivers alerts
- Desktop user → Application updates: requests update (evidence: `README.md`)
- Application updates → GitHub releases: checks releases (evidence: `README.md`)
- Desktop user → OS notifications: receives warnings (evidence: `README.md`)
