Skip to content

What it is

GitHub answers most questions about the present and almost none about the past.

The traffic API serves fourteen days and forgets. The activity feed keeps the last three hundred events, and none older than thirty days. The notification inbox drops every notification after three months, read or not, unless it was saved. Job logs are deleted after ninety days by default. The star list will tell you when each star was given, but since July 2026 only to a repository’s admins and collaborators, and only if you ask before the list gets long enough to be expensive to walk. None of it is archived anywhere unless you archive it.

ghchronicle sweeps those surfaces on a schedule and writes every observation as a point stamped with the date the thing actually happened, so a year from now the question “how fast were we merging in July” still has an answer.

Terminal window
ghchronicle -config config.yaml

It is one static Go binary with no runtime dependencies, and it pushes to every store it supports, so it runs wherever it can reach them: a server, a container, a scheduled workflow.

WordWhat it means here
familyOne collector, named in the configuration: actions, stars, issues. There are 34
groupA named set of families, for switching a whole area on or off: ci, security, audience. There are 8
measurementOne kind of row in the store, named gh_*: gh_star, gh_workflow_run. There are 95
pointOne row: a measurement, its tags, its fields and the date the thing happened
sweepOne pass over the families that are due, which is what the process does on a loop
backfillA run with -backfill, which walks the history instead of the increment

ghchronicle -groups prints the groups with their families, and ghchronicle -config config.yaml -list prints the repositories a sweep would cover.

Written and maintained by
MIT licenceRelease history