diff --git a/.github/workflows/release-stats.yml b/.github/workflows/release-stats.yml index 2d3e25ec..cc82f00f 100644 --- a/.github/workflows/release-stats.yml +++ b/.github/workflows/release-stats.yml @@ -57,7 +57,7 @@ jobs: set -euo pipefail files=( docs/assets/release-downloads-by-platform.svg - docs/assets/release-downloads-by-version.svg + docs/assets/release-downloads-monthly.svg docs/assets/release-downloads.md docs/assets/release-downloads-history.jsonl ) @@ -71,7 +71,13 @@ jobs: mkdir -p "${tmp}/$(dirname "${f}")" cp "${f}" "${tmp}/${f}" done - git checkout -- "${files[@]}" + for f in "${files[@]}"; do + if git ls-files --error-unmatch "${f}" >/dev/null 2>&1; then + git checkout -- "${f}" + else + rm -f "${f}" + fi + done if git fetch origin release-stats-data:refs/remotes/origin/release-stats-data; then git checkout -B release-stats-data refs/remotes/origin/release-stats-data @@ -81,10 +87,19 @@ jobs: fi for f in "${files[@]}"; do + mkdir -p "$(dirname "${f}")" cp "${tmp}/${f}" "${f}" done git add "${files[@]}" + # Drop superseded charts so the data branch does not keep stale SVGs. + for stale in \ + docs/assets/release-downloads-by-version.svg \ + docs/assets/release-downloads-weekly.svg; do + if [ -f "${stale}" ]; then + git rm -f "${stale}" + fi + done if git diff --cached --quiet; then echo "Release stats already up to date." exit 0 diff --git a/README.md b/README.md index 63e8104a..0863c26e 100644 --- a/README.md +++ b/README.md @@ -124,12 +124,13 @@ Release download counts aggregated from [`bitdynamics-ab/canton-devkit`](https://github.com/bitdynamics-ab/canton-devkit/releases) and [`bitdynamics-ab/homebrew-canton-devkit`](https://github.com/bitdynamics-ab/homebrew-canton-devkit/releases) -(merged by tag). Charts refresh daily via +(merged by tag). The monthly chart is derived from daily cumulative +snapshots (GitHub exposes only current totals). Charts refresh daily via [`release-stats.yml`](.github/workflows/release-stats.yml); checksum files are excluded from the counts. Exact numbers: [release-downloads.md](https://github.com/bitdynamics-ab/canton-devkit/blob/release-stats-data/docs/assets/release-downloads.md). -Total downloads per release over time +Monthly release downloads All-time downloads per platform diff --git a/docs/assets/release-downloads-by-platform.svg b/docs/assets/release-downloads-by-platform.svg index ae2f60a5..9a99a163 100644 --- a/docs/assets/release-downloads-by-platform.svg +++ b/docs/assets/release-downloads-by-platform.svg @@ -2,12 +2,12 @@ All-time downloads per platform macOS (arm64) - -29 + +62 Linux (amd64) - -30 + +53 Windows (amd64) - -4 + +18 diff --git a/docs/assets/release-downloads-by-version.svg b/docs/assets/release-downloads-by-version.svg deleted file mode 100644 index 815e425d..00000000 --- a/docs/assets/release-downloads-by-version.svg +++ /dev/null @@ -1,76 +0,0 @@ - - -Total downloads, by release - -0 - -3 - -6 - -9 - -12 - -15 - - -v0.1 -v0.2 -v0.3 -v0.4 -v0.5 -v0.6 -v0.7 -v0.8 -v0.8.1 -v0.9.0 -v0.10.0 -v0.10.1 -v0.11.0 -v0.12.0 -v0.12.1 -v0.12.2 -v0.13.0 -v0.14.0 -v0.15.0 -v0.15.1 -v0.15.2 -v0.15.3 -v0.15.4 -v0.15.5 -v0.15.6 -v0.16.0 -v0.16.1 -Release tag (oldest -> newest) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Total downloads - diff --git a/docs/assets/release-downloads-history.jsonl b/docs/assets/release-downloads-history.jsonl index 21fed6e4..e7772eff 100644 --- a/docs/assets/release-downloads-history.jsonl +++ b/docs/assets/release-downloads-history.jsonl @@ -1,5 +1,71 @@ {"date":"2026-07-04","total":26,"byPlatform":{"macOS (arm64)":15,"Linux (amd64)":7,"Windows (amd64)":4,"Debian (.deb)":0},"byVersion":{"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":1,"v0.8.1":0,"v0.9.0":5,"v0.10.1":11}} {"date":"2026-07-10","total":30,"byPlatform":{"macOS (arm64)":19,"Linux (amd64)":7,"Windows (amd64)":4,"Debian (.deb)":0},"byVersion":{"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":1,"v0.8.1":0,"v0.9.0":5,"v0.10.1":11,"v0.12.1":1,"v0.12.2":0,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1}} -{"date":"2026-07-28","total":31,"byPlatform":{"macOS (arm64)":8,"Linux (amd64)":23,"Windows (amd64)":0,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":0,"v0.4":0,"v0.5":0,"v0.6":0,"v0.7":2,"v0.8":0,"v0.8.1":0,"v0.9.0":1,"v0.10.0":0,"v0.10.1":1,"v0.11.0":0,"v0.12.0":0,"v0.12.1":0,"v0.12.2":15,"v0.13.0":0,"v0.14.0":0,"v0.15.0":0,"v0.15.1":3,"v0.15.2":0,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0}} -{"date":"2026-07-29","total":31,"byPlatform":{"Windows (amd64)":0,"macOS (arm64)":8,"Linux (amd64)":23,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":0,"v0.4":0,"v0.5":0,"v0.6":0,"v0.7":2,"v0.8":0,"v0.8.1":0,"v0.9.0":1,"v0.10.0":0,"v0.10.1":1,"v0.11.0":0,"v0.12.0":0,"v0.12.1":0,"v0.12.2":15,"v0.13.0":0,"v0.14.0":0,"v0.15.0":0,"v0.15.1":3,"v0.15.2":0,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0}} -{"date":"2026-07-30","total":63,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":29,"Linux (amd64)":30,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0}} +{"date":"2026-07-30","total":32,"byPlatform":{"macOS (arm64)":21,"Linux (amd64)":7,"Windows (amd64)":4,"Debian (.deb)":0},"byVersion":{"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":1,"v0.8.1":0,"v0.9.0":5,"v0.10.1":11,"v0.12.1":1,"v0.12.2":0,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":1,"v0.15.2":1,"v0.15.3":0,"v0.15.4":0,"v0.15.5":0,"v0.15.6":0,"v0.16.0":0,"v0.16.1":0}} +{"date":"2026-07-31","total":63,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":29,"Linux (amd64)":30,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":0}} +{"date":"2026-08-01","total":63,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":29,"Linux (amd64)":30,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":0}} +{"date":"2026-08-02","total":63,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":29,"Linux (amd64)":30,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":0}} +{"date":"2026-08-03","total":63,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":29,"Linux (amd64)":30,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":0}} +{"date":"2026-08-04","total":63,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":29,"Linux (amd64)":30,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":0}} +{"date":"2026-08-05","total":64,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":30,"Linux (amd64)":30,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":0}} +{"date":"2026-08-06","total":66,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":31,"Linux (amd64)":31,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":2}} +{"date":"2026-08-07","total":66,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":31,"Linux (amd64)":31,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":2,"v0.16.4":0,"v0.16.5":0}} +{"date":"2026-08-08","total":67,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":32,"Linux (amd64)":31,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":2,"v0.16.4":0,"v0.16.5":1,"v0.17.0":0}} +{"date":"2026-08-09","total":67,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":32,"Linux (amd64)":31,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":2,"v0.16.4":0,"v0.16.5":1,"v0.17.0":0}} +{"date":"2026-08-10","total":67,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":32,"Linux (amd64)":31,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":2,"v0.16.4":0,"v0.16.5":1,"v0.17.0":0}} +{"date":"2026-08-11","total":68,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":32,"Linux (amd64)":32,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":2,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":0}} +{"date":"2026-08-12","total":68,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":32,"Linux (amd64)":32,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":2,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":0}} +{"date":"2026-08-13","total":69,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":33,"Linux (amd64)":32,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":2,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":1}} +{"date":"2026-08-14","total":70,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":34,"Linux (amd64)":32,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":2,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2}} +{"date":"2026-08-15","total":70,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":34,"Linux (amd64)":32,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":2,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":0}} +{"date":"2026-08-16","total":71,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":35,"Linux (amd64)":32,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":2,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":1}} +{"date":"2026-08-17","total":71,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":35,"Linux (amd64)":32,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":2,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":1,"v0.17.3":0}} +{"date":"2026-08-18","total":71,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":35,"Linux (amd64)":32,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":2,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":1,"v0.17.3":0}} +{"date":"2026-08-19","total":73,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":36,"Linux (amd64)":33,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":2,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":1,"v0.17.3":2,"v0.17.4":0}} +{"date":"2026-08-20","total":76,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":38,"Linux (amd64)":34,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":2,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":1,"v0.17.3":2,"v0.17.4":3}} +{"date":"2026-08-21","total":76,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":38,"Linux (amd64)":34,"Debian (.deb)":0},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":2,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":1,"v0.17.3":2,"v0.17.4":3}} +{"date":"2026-08-22","total":77,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":38,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":1,"v0.17.3":2,"v0.17.4":3}} +{"date":"2026-08-23","total":77,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":38,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":1,"v0.17.3":2,"v0.17.4":3}} +{"date":"2026-08-24","total":77,"byPlatform":{"Windows (amd64)":4,"macOS (arm64)":38,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":15,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":1,"v0.17.3":2,"v0.17.4":3}} +{"date":"2026-08-25","total":81,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":38,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":0}} +{"date":"2026-08-26","total":81,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":38,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":0}} +{"date":"2026-08-27","total":82,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":39,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":1}} +{"date":"2026-08-28","total":82,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":39,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":1}} +{"date":"2026-08-29","total":82,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":39,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":1}} +{"date":"2026-08-30","total":82,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":39,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":1}} +{"date":"2026-08-31","total":82,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":39,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":1}} +{"date":"2026-09-01","total":82,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":39,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":1}} +{"date":"2026-09-02","total":82,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":39,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":1}} +{"date":"2026-09-03","total":82,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":39,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":1}} +{"date":"2026-09-04","total":82,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":39,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":1}} +{"date":"2026-09-05","total":84,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":41,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":3}} +{"date":"2026-09-06","total":84,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":41,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":3}} +{"date":"2026-09-07","total":84,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":41,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":3}} +{"date":"2026-09-08","total":84,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":41,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":3}} +{"date":"2026-09-09","total":84,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":41,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":3}} +{"date":"2026-09-10","total":85,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":42,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":4}} +{"date":"2026-09-11","total":85,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":42,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":4}} +{"date":"2026-09-12","total":85,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":42,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":4}} +{"date":"2026-09-13","total":85,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":42,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":4}} +{"date":"2026-09-14","total":85,"byPlatform":{"Windows (amd64)":8,"macOS (arm64)":42,"Linux (amd64)":34,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":2,"v0.17.2":2,"v0.17.3":2,"v0.17.4":5,"v0.17.5":4}} +{"date":"2026-09-15","total":100,"byPlatform":{"Windows (amd64)":13,"macOS (arm64)":47,"Linux (amd64)":39,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":5,"v0.17.4":8,"v0.17.5":7,"v.0.18.0":0}} +{"date":"2026-09-16","total":100,"byPlatform":{"Windows (amd64)":13,"macOS (arm64)":47,"Linux (amd64)":39,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":5,"v0.17.4":8,"v0.17.5":7,"v.0.18.0":0}} +{"date":"2026-09-17","total":100,"byPlatform":{"Windows (amd64)":13,"macOS (arm64)":47,"Linux (amd64)":39,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":5,"v0.17.4":8,"v0.17.5":7,"v0.18.0":0}} +{"date":"2026-09-18","total":100,"byPlatform":{"Windows (amd64)":13,"macOS (arm64)":47,"Linux (amd64)":39,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":5,"v0.17.4":8,"v0.17.5":7,"v0.18.0":0}} +{"date":"2026-09-19","total":100,"byPlatform":{"Windows (amd64)":13,"macOS (arm64)":47,"Linux (amd64)":39,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":5,"v0.17.4":8,"v0.17.5":7,"v0.18.0":0}} +{"date":"2026-09-20","total":101,"byPlatform":{"Windows (amd64)":13,"macOS (arm64)":47,"Linux (amd64)":40,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":5,"v0.17.4":8,"v0.17.5":7,"v0.18.0":1}} +{"date":"2026-09-21","total":103,"byPlatform":{"Windows (amd64)":13,"macOS (arm64)":48,"Linux (amd64)":41,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":5,"v0.17.4":8,"v0.17.5":7,"v0.18.0":3}} +{"date":"2026-09-22","total":106,"byPlatform":{"Windows (amd64)":13,"macOS (arm64)":49,"Linux (amd64)":43,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":5,"v0.17.4":8,"v0.17.5":7,"v0.18.0":6}} +{"date":"2026-09-23","total":107,"byPlatform":{"Windows (amd64)":13,"macOS (arm64)":50,"Linux (amd64)":43,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":5,"v0.17.4":8,"v0.17.5":7,"v0.18.0":7}} +{"date":"2026-09-24","total":109,"byPlatform":{"Windows (amd64)":13,"macOS (arm64)":51,"Linux (amd64)":44,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":5,"v0.17.4":8,"v0.17.5":7,"v0.18.0":9}} +{"date":"2026-09-25","total":109,"byPlatform":{"Windows (amd64)":13,"macOS (arm64)":51,"Linux (amd64)":44,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":5,"v0.17.4":8,"v0.17.5":7,"v0.18.0":9}} +{"date":"2026-09-26","total":109,"byPlatform":{"Windows (amd64)":13,"macOS (arm64)":51,"Linux (amd64)":44,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":5,"v0.17.4":8,"v0.17.5":7,"v0.18.0":9}} +{"date":"2026-09-27","total":110,"byPlatform":{"Windows (amd64)":13,"macOS (arm64)":51,"Linux (amd64)":45,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":5,"v0.17.4":8,"v0.17.5":7,"v0.18.0":10}} +{"date":"2026-09-28","total":110,"byPlatform":{"Windows (amd64)":13,"macOS (arm64)":51,"Linux (amd64)":45,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":5,"v0.17.4":8,"v0.17.5":7,"v0.18.0":10}} +{"date":"2026-09-29","total":111,"byPlatform":{"Windows (amd64)":13,"macOS (arm64)":51,"Linux (amd64)":46,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":5,"v0.17.4":8,"v0.17.5":7,"v0.18.0":11}} +{"date":"2026-09-30","total":111,"byPlatform":{"Windows (amd64)":13,"macOS (arm64)":51,"Linux (amd64)":46,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":5,"v0.17.4":8,"v0.17.5":7,"v0.18.0":11}} +{"date":"2026-10-01","total":113,"byPlatform":{"Windows (amd64)":13,"macOS (arm64)":53,"Linux (amd64)":46,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":5,"v0.17.4":8,"v0.17.5":8,"v0.18.0":12}} +{"date":"2026-10-02","total":114,"byPlatform":{"Windows (amd64)":13,"macOS (arm64)":53,"Linux (amd64)":47,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":5,"v0.17.4":8,"v0.17.5":8,"v0.18.0":13}} +{"date":"2026-10-03","total":114,"byPlatform":{"Windows (amd64)":13,"macOS (arm64)":53,"Linux (amd64)":47,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":5,"v0.17.4":8,"v0.17.5":8,"v0.18.0":13,"v0.18.1":0}} +{"date":"2026-10-04","total":130,"byPlatform":{"Windows (amd64)":18,"macOS (arm64)":59,"Linux (amd64)":52,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":8,"v0.17.4":11,"v0.17.5":11,"v0.18.0":16,"v0.18.1":4}} +{"date":"2026-10-05","total":131,"byPlatform":{"Windows (amd64)":18,"macOS (arm64)":60,"Linux (amd64)":52,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":8,"v0.17.4":11,"v0.17.5":11,"v0.18.0":16,"v0.18.1":5}} +{"date":"2026-10-06","total":134,"byPlatform":{"Windows (amd64)":18,"macOS (arm64)":62,"Linux (amd64)":53,"Debian (.deb)":1},"byVersion":{"v0.1":0,"v0.2":0,"v0.3":1,"v0.4":3,"v0.5":4,"v0.6":1,"v0.7":3,"v0.8":0,"v0.8.1":0,"v0.9.0":6,"v0.10.0":0,"v0.10.1":12,"v0.11.0":0,"v0.12.0":0,"v0.12.1":1,"v0.12.2":16,"v0.13.0":1,"v0.14.0":1,"v0.15.0":1,"v0.15.1":4,"v0.15.2":1,"v0.15.3":0,"v0.15.4":1,"v0.15.5":1,"v0.15.6":6,"v0.16.0":1,"v0.16.1":0,"v0.16.2":1,"v0.16.3":3,"v0.16.4":0,"v0.16.5":1,"v0.17.0":1,"v0.17.1":5,"v0.17.2":5,"v0.17.3":8,"v0.17.4":11,"v0.17.5":11,"v0.18.0":17,"v0.18.1":7}} diff --git a/docs/assets/release-downloads-monthly.svg b/docs/assets/release-downloads-monthly.svg new file mode 100644 index 00000000..2cb34d0e --- /dev/null +++ b/docs/assets/release-downloads-monthly.svg @@ -0,0 +1,30 @@ + + +Monthly downloads (last 6 months) + +0 + +7 + +14 + +22 + +29 + +37 + + +2026-07 +2026-08 +2026-09 +2026-10 +Month (oldest -> newest) + + + + + + +Downloads + diff --git a/docs/assets/release-downloads.md b/docs/assets/release-downloads.md index 6bd4744c..556f13bf 100644 --- a/docs/assets/release-downloads.md +++ b/docs/assets/release-downloads.md @@ -1,45 +1,22 @@ -**Total downloads:** 63 across 27 releases. +**Total downloads:** 134 across 39 releases. -### Downloads per version +### Monthly downloads -| Version | Downloads | +| Month | Downloads | |---|---| -| v0.16.1 | 0 | -| v0.16.0 | 1 | -| v0.15.6 | 6 | -| v0.15.5 | 1 | -| v0.15.4 | 1 | -| v0.15.3 | 0 | -| v0.15.2 | 1 | -| v0.15.1 | 4 | -| v0.15.0 | 1 | -| v0.14.0 | 1 | -| v0.13.0 | 1 | -| v0.12.2 | 15 | -| v0.12.1 | 1 | -| v0.12.0 | 0 | -| v0.11.0 | 0 | -| v0.10.1 | 12 | -| v0.10.0 | 0 | -| v0.9.0 | 6 | -| v0.8.1 | 0 | -| v0.8 | 0 | -| v0.7 | 3 | -| v0.6 | 1 | -| v0.5 | 4 | -| v0.4 | 3 | -| v0.3 | 1 | -| v0.2 | 0 | -| v0.1 | 0 | +| 2026-10 | 23 | +| 2026-09 | 29 | +| 2026-08 | 19 | +| 2026-07 | 37 | ### Downloads per platform | Platform | Downloads | |---|---| -| macOS (arm64) | 29 | -| Linux (amd64) | 30 | -| Windows (amd64) | 4 | +| macOS (arm64) | 62 | +| Linux (amd64) | 53 | +| Windows (amd64) | 18 | diff --git a/scripts/release-stats-monthly.jq b/scripts/release-stats-monthly.jq new file mode 100644 index 00000000..663ca9a1 --- /dev/null +++ b/scripts/release-stats-monthly.jq @@ -0,0 +1,37 @@ +# Monthly download counts from cumulative daily snapshots. +# +# Input: JSON array of { date, total, ... } (use jq -s on a JSONL history file). +# Output: [ { month: "YYYY-MM", downloads: N }, ... ] oldest first. +# Missing calendar months between the first and last observed delta month are filled with 0. +# The first snapshot is baseline only and contributes no delta. Negative steps clamp to 0. + +def year_month: + .[0:7]; + +def month_index: + ((.[0:4] | tonumber) * 12) + (.[5:7] | tonumber); + +def from_month_index: + ((. - 1) / 12 | floor) as $y + | ((. - 1) % 12 + 1) as $m + | ($m | tostring | if length == 1 then "0\(.)" else . end) as $mm + | "\($y)-\($mm)"; + +sort_by(.date) +| . as $rows +| [ range(1; length) + | { month: ($rows[.].date | year_month), + idx: ($rows[.].date | year_month | month_index), + delta: ([($rows[.].total - $rows[.-1].total), 0] | max) } ] +| group_by(.month) +| map({ month: .[0].month, idx: .[0].idx, downloads: (map(.delta) | add) }) +| . as $observed +| if ($observed | length) == 0 then [] + else + ($observed | map(.idx) | min) as $first + | ($observed | map(.idx) | max) as $last + | ($observed | map({(.month): .downloads}) | add) as $by_month + | [ range($first; $last + 1) + | from_month_index as $m + | { month: $m, downloads: ($by_month[$m] // 0) } ] + end diff --git a/scripts/release-stats.sh b/scripts/release-stats.sh index 9e3b32a6..ba1e8880 100755 --- a/scripts/release-stats.sh +++ b/scripts/release-stats.sh @@ -19,9 +19,9 @@ # direct downloads of mirrored assets are counted too. # # Outputs (into docs/assets/): -# release-downloads-by-version.svg — per-version total downloads over time (line) +# release-downloads-monthly.svg — new downloads per calendar month (line; last 6 months) # release-downloads-by-platform.svg — all-time total downloads per platform (bars, no .deb) -# release-downloads.md — per-version + per-platform summary tables +# release-downloads.md — monthly + per-platform summary tables # release-downloads-history.jsonl — appended daily snapshot (total + per platform + per version) # # Environment: @@ -156,10 +156,11 @@ nice_max() { # Line chart renderer. # $1 = output file # $2 = chart title -# $3 = JSON: { labels: [..], series: [ {name, color, values:[..]} ] } +# $3 = x-axis caption +# $4 = JSON: { labels: [..], series: [ {name, color, values:[..]} ] } # ------------------------------------------------------------------------ render_line_chart() { - local out="$1" title="$2" data="$3" + local out="$1" title="$2" xlabel="$3" data="$4" local W=760 H=380 local ml=56 mr=180 mt=48 mb=64 # margins (mr wide for legend) @@ -167,10 +168,12 @@ render_line_chart() { pw=$(( W - ml - mr )) ph=$(( H - mt - mb )) - local labels n maxv + local n maxv step n="$(printf '%s' "${data}" | jq '.labels | length')" maxv="$(printf '%s' "${data}" | jq '[.series[].values[]] | max // 0')" maxv="$(nice_max "${maxv}")" + # Thin x labels when the series is long so tick text stays readable. + step=$(awk -v n="$n" 'BEGIN{ if (n <= 12) print 1; else print int((n + 11) / 12) }') { printf '\n' \ @@ -195,7 +198,7 @@ render_line_chart() { printf '\n' \ "$ml" $(( mt + ph )) $(( ml + pw )) $(( mt + ph )) - # X labels + # X labels (every `step`-th tick, always including the last) local idx=0 lbl xx while IFS= read -r lbl; do if [ "$n" -gt 1 ]; then @@ -203,12 +206,14 @@ render_line_chart() { else xx=$(awk -v ml="$ml" -v pw="$pw" 'BEGIN{printf "%.1f", ml + pw/2}') fi - printf '%s\n' \ - "$xx" $(( mt + ph + 20 )) "$(svg_escape "${lbl}")" + if [ $(( idx % step )) -eq 0 ] || [ "$idx" -eq $(( n - 1 )) ]; then + printf '%s\n' \ + "$xx" $(( mt + ph + 20 )) "$(svg_escape "${lbl}")" + fi idx=$(( idx + 1 )) done < <(printf '%s' "${data}" | jq -r '.labels[]') - printf 'Release tag (oldest -> newest)\n' \ - $(( ml + pw/2 )) $(( H - 12 )) + printf '%s\n' \ + $(( ml + pw/2 )) $(( H - 12 )) "$(svg_escape "${xlabel}")" # Series: polylines + points local si=0 sname scolor @@ -296,17 +301,46 @@ render_bar_chart() { echo "wrote ${out}" } -# --- View 1: per-version total downloads over time ------------------------ -by_version_data="$(printf '%s' "${model}" | jq ' - (.releases | map(select(.total > 0))) as $releases - | { labels: [ $releases[].tag ], - series: [ { name: "Total downloads", +# --- Append today's snapshot to the history file -------------------------- +# One row per UTC day: { date, total, byPlatform, byVersion }. Re-running on +# the same day replaces that day's row (idempotent), so the file stays clean +# and ordered. Must run before the monthly chart so today's totals are included. +# This accumulates the time series the GitHub API can't provide. +HISTORY_FILE="${OUT_DIR}/release-downloads-history.jsonl" +snapshot_date="${SNAPSHOT_DATE:-$(date -u +%Y-%m-%d)}" + +today_row="$(printf '%s' "${model}" | jq -c --arg d "${snapshot_date}" ' + { date: $d, + total: .grandTotal, + byPlatform: .totalsByPlatform, + byVersion: ( [ .totalsByVersion[] | { (.tag): .total } ] | add // {} ) }')" + +touch "${HISTORY_FILE}" +{ + jq -c --arg d "${snapshot_date}" 'select(.date != $d)' "${HISTORY_FILE}" 2>/dev/null || true + printf '%s\n' "${today_row}" +} | jq -s -c 'sort_by(.date) | .[]' > "${HISTORY_FILE}.tmp" +mv "${HISTORY_FILE}.tmp" "${HISTORY_FILE}" +echo "updated ${HISTORY_FILE} (snapshot ${snapshot_date})" + +# --- Monthly download counts from history deltas -------------------------- +# GitHub only exposes cumulative asset.download_count. Diff consecutive +# snapshots, clamp negatives (recount / methodology changes), then sum by +# calendar month. The first snapshot is baseline only — it contributes no delta. +monthly_rows="$(jq -s -f "${script_dir}/release-stats-monthly.jq" "${HISTORY_FILE}")" + +# Chart shows only the trailing window so x-axis labels stay readable as +# the history file grows; the markdown table below keeps the full series. +by_month_data="$(printf '%s' "${monthly_rows}" | jq ' + .[-6:] as $months + | { labels: [ $months[].month ], + series: [ { name: "Downloads", color: "#2563eb", - values: [ $releases[].total ] } ] - } + values: [ $months[].downloads ] } ] + } ')" -render_line_chart "${OUT_DIR}/release-downloads-by-version.svg" \ - "Total downloads, by release" "${by_version_data}" +render_line_chart "${OUT_DIR}/release-downloads-monthly.svg" \ + "Monthly downloads (last 6 months)" "Month (oldest -> newest)" "${by_month_data}" # --- View 2: all-time total downloads per platform (bars, no .deb) ------- platform_bars="$(printf '%s' "${model}" | jq ' @@ -324,12 +358,15 @@ render_bar_chart "${OUT_DIR}/release-downloads-by-platform.svg" \ "$(printf '%s' "${model}" | jq -r '.grandTotal')" \ "$(printf '%s' "${model}" | jq -r '.releases | length')" - echo "### Downloads per version" + echo "### Monthly downloads" echo - echo "| Version | Downloads |" + echo "| Month | Downloads |" echo "|---|---|" - printf '%s' "${model}" | jq -r ' - (.totalsByVersion | reverse)[] | "| \(.tag) | \(.total) |"' + if [ "$(printf '%s' "${monthly_rows}" | jq 'length')" -eq 0 ]; then + echo "| — | 0 (need at least two daily snapshots) |" + else + printf '%s' "${monthly_rows}" | jq -r 'reverse[] | "| \(.month) | \(.downloads) |"' + fi echo echo "### Downloads per platform" echo @@ -340,24 +377,3 @@ render_bar_chart "${OUT_DIR}/release-downloads-by-platform.svg" \ echo } > "${OUT_DIR}/release-downloads.md" echo "wrote ${OUT_DIR}/release-downloads.md" - -# --- Append today's snapshot to the history file -------------------------- -# One row per UTC day: { date, total, byPlatform, byVersion }. Re-running on -# the same day replaces that day's row (idempotent), so the file stays clean -# and ordered. This accumulates the time series the GitHub API can't provide. -HISTORY_FILE="${OUT_DIR}/release-downloads-history.jsonl" -snapshot_date="${SNAPSHOT_DATE:-$(date -u +%Y-%m-%d)}" - -today_row="$(printf '%s' "${model}" | jq -c --arg d "${snapshot_date}" ' - { date: $d, - total: .grandTotal, - byPlatform: .totalsByPlatform, - byVersion: ( [ .totalsByVersion[] | { (.tag): .total } ] | add // {} ) }')" - -touch "${HISTORY_FILE}" -{ - jq -c --arg d "${snapshot_date}" 'select(.date != $d)' "${HISTORY_FILE}" 2>/dev/null || true - printf '%s\n' "${today_row}" -} | jq -s -c 'sort_by(.date) | .[]' > "${HISTORY_FILE}.tmp" -mv "${HISTORY_FILE}.tmp" "${HISTORY_FILE}" -echo "updated ${HISTORY_FILE} (snapshot ${snapshot_date})" diff --git a/scripts/release-stats_test.sh b/scripts/release-stats_test.sh new file mode 100755 index 00000000..a74df594 --- /dev/null +++ b/scripts/release-stats_test.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash +# Regression checks for monthly aggregation in scripts/release-stats-monthly.jq. +set -euo pipefail + +script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +jq_filter="${script_dir}/release-stats-monthly.jq" +tmp="$(mktemp -d)" +trap 'rm -rf "${tmp}"' EXIT + +assert_eq() { + local name="$1" got="$2" exp="$3" + got="$(printf '%s' "${got}" | jq -c .)" + exp="$(printf '%s' "${exp}" | jq -c .)" + if [ "${got}" != "${exp}" ]; then + echo "FAIL: ${name}" >&2 + echo " got: ${got}" >&2 + echo " expected: ${exp}" >&2 + exit 1 + fi +} + +# Same-month deltas sum; baseline snapshot excluded. +cat > "${tmp}/history.jsonl" <<'EOF' +{"date":"2026-07-06","total":10} +{"date":"2026-07-20","total":12} +{"date":"2026-07-28","total":15} +{"date":"2026-08-05","total":18} +EOF +assert_eq "monthly aggregation" \ + "$(jq -s -f "${jq_filter}" "${tmp}/history.jsonl")" \ + '[{"month":"2026-07","downloads":5},{"month":"2026-08","downloads":3}]' + +# Gap fill: July and September observed → August appears as 0. +cat > "${tmp}/history-gap.jsonl" <<'EOF' +{"date":"2026-07-06","total":10} +{"date":"2026-07-10","total":14} +{"date":"2026-09-02","total":20} +EOF +assert_eq "gap fill" \ + "$(jq -s -f "${jq_filter}" "${tmp}/history-gap.jsonl")" \ + '[{"month":"2026-07","downloads":4},{"month":"2026-08","downloads":0},{"month":"2026-09","downloads":6}]' + +# Negative cumulative correction clamps that step to zero. +cat > "${tmp}/history-clamp.jsonl" <<'EOF' +{"date":"2026-08-03","total":20} +{"date":"2026-08-04","total":17} +{"date":"2026-08-05","total":19} +EOF +assert_eq "negative delta clamp" \ + "$(jq -s -f "${jq_filter}" "${tmp}/history-clamp.jsonl")" \ + '[{"month":"2026-08","downloads":2}]' + +# Single snapshot → no monthly points yet. +printf '%s\n' '{"date":"2026-08-03","total":20}' > "${tmp}/history-one.jsonl" +assert_eq "single snapshot" \ + "$(jq -s -f "${jq_filter}" "${tmp}/history-one.jsonl")" \ + '[]' + +# Chart window: last 6 months only (full series may be longer). +window="$(printf '%s' '[{"month":"M1","downloads":1},{"month":"M2","downloads":2},{"month":"M3","downloads":3},{"month":"M4","downloads":4},{"month":"M5","downloads":5},{"month":"M6","downloads":6},{"month":"M7","downloads":7},{"month":"M8","downloads":8}]' | jq -c '.[-6:] | { labels: [.[].month], values: [.[].downloads] }')" +assert_eq "chart last-6 window" \ + "${window}" \ + '{"labels":["M3","M4","M5","M6","M7","M8"],"values":[3,4,5,6,7,8]}' + +bash -n "${script_dir}/release-stats.sh" + +echo "OK: release-stats monthly aggregation"