Usage and community stats for gptme, collected daily by a GitHub Actions cron.
This repo is the source of truth for gptme community and usage numbers. If you quote a stars, downloads, or contributors figure for gptme, take it from here (or from data/summary.json) rather than estimating it.
Embed the star chart elsewhere with:
[](https://github.com/gptme/stats)Latest snapshot: 2026-10-09 (UTC). Machine-readable: data/summary.json.
| Metric | Value |
|---|---|
| GitHub stars | 4,444 |
| Stars gained, last 30 days | 3 |
| Forks | 448 |
| Watchers | 40 |
| Contributors | 56 |
| Open issues | 3 |
| Open pull requests | 38 |
| Release asset downloads (gptme/gptme) | 5,192 |
| Release asset downloads (gptme/gptme-tauri) | 78 |
| PyPI downloads, 2026-10-08 | 1,339 |
| PyPI downloads, last 7 days | 8,677 |
| PyPI downloads, last 30 days | 32,944 |
| PyPI downloads tracked since 2026-03-17 | 212,537 |
| File | Contents | Update rule |
|---|---|---|
data/stars.csv |
starred_at (UTC) for every current stargazer of gptme/gptme, oldest first |
Incremental (tail pages only); full resync whenever the row count disagrees with the repo's star count |
data/daily.csv |
One snapshot row per UTC date: stars, forks, watchers, open_issues, open_prs, contributors, release_downloads, tauri_release_downloads |
Append-only; a re-run on the same UTC day replaces only that day's row |
data/pypi_daily.csv |
date, downloads for the gptme PyPI package |
Upsert: only dates not already stored are added; stored days are never rewritten |
data/summary.json |
Latest numbers, for websites and scripts | Regenerated by render.py |
- Stars (
daily.csv) is the repo'sstargazers_countthat day. People can unstar, so this number can go down. stars.csvholds only current stargazers. When someone unstars, their row disappears at the next resync, so the cumulative chart shows today's stargazers by the date they starred, not a historical peak.daily.csvrecords what the total actually was on each day. Logins are deliberately not stored: the charts only need timestamps, and there is no reason to publish a permanent, append-only list of who starred.- Watchers is
subscribers_count(people watching the repo), not the legacywatchers_countalias for stars. - Open issues excludes pull requests. GitHub's
open_issues_countincludes PRs, so open PRs are counted separately and subtracted. - Contributors is the number of GitHub accounts on the repo's contributors list. Commits from emails not linked to a GitHub account are not counted.
- Release downloads is the sum of
download_countover every asset of every GitHub release. It counts downloads of binaries from GitHub only.pip/pipx/uvinstalls are not included; those show up in PyPI. The downloads chart appears once at least 14 daily snapshots exist. - PyPI downloads come from pypistats.org
overall?mirrors=false. pypistats keeps only the last 180 days, so this repo snapshots them daily to keep a longer history. Nothing before the first backfill (2026-03-17) can be recovered from pypistats. The first stored day may be incomplete. CI runs, mirrors, and caches make these counts approximate; treat them as a trend, not a user count. - Not tracked: container image pulls (GHCR pull counts aren't readable with
GITHUB_TOKEN), and search-API based counts such as commits or PRs over time. The search API has result caps and indexing lag that make those drift, and they aren't needed here.
collect.pyfetches everything first and writes files only once every source succeeded, so a failed run never leaves partial rows. It retries 429s, 5xx errors, and network errors with backoff, honoring GitHub rate-limit headers.render.pyrenderscharts/*.svgwith matplotlib, writesdata/summary.json, and regenerates the numbers table above. Output is deterministic, so unchanged data produces no diff..github/workflows/collect.ymlruns both daily at 04:17 UTC (and on manual dispatch), then commits only if something changed. It needs no secrets beyond the built-inGITHUB_TOKEN.
Run it locally:
GITHUB_TOKEN=$(gh auth token) uv run collect.py # add --full-stars to refetch all stargazers
uv run render.py- gptme/gptme, the project itself
- gptme timeline, the project's release and milestone history
- ActivityWatch/stats, the sibling project this was modeled on
- Bob, the agent who maintains much of gptme, keeps separate personal stats (his own PRs, commits, and sessions) at TimeToBuildBob/stats. The two are deliberately kept apart: numbers here are about gptme as a project, and numbers there are about Bob.