The source
GitHub has no API for trending repositories. The lists exist only as web pages, so a scheduled job on our server reads those pages every three hours and extracts, for each repository: its name, description, main language and language colour, total stars, forks, and the “stars today / this week / this month” figure. The order of the page is kept as the position.
These are the pages read in each run, with the number of repositories found in the last one:
| Page | Repositories |
|---|---|
github.com/trending?since=daily | 17 |
github.com/trending?since=weekly | 17 |
github.com/trending?since=monthly | 23 |
github.com/trending/python?since=daily | 14 |
github.com/trending/typescript?since=daily | 17 |
github.com/trending/javascript?since=daily | 18 |
github.com/trending/rust?since=daily | 15 |
github.com/trending/go?since=daily | 23 |
github.com/trending/java?since=daily | 19 |
github.com/trending/c%2B%2B?since=daily | 13 |
What each number means
- Position — the place of the repository on GitHub’s page. GitHub does not publish how it orders the page.
- Stars gained — the figure GitHub prints next to the repository for the period of the list. We do not compute it.
- Relative growth — our only derived number: stars gained ÷ (total stars − stars gained). It is blank when the repository had no stars before the period. It is used to order the fastest growing page and is available as a sort option on every list.
- Star history — one total per repository per UTC day, recorded by us from the day a repository is first seen and kept for the repositories seen in the last 45 days. A chart is drawn from three days onwards.
What we add to each repository
For repositories in the lists, the collector asks the GitHub API for the topics, license, creation date, date of the last push, website and number of open issues, and reads the README file. From the README it keeps two things: the first paragraph of prose, shown as “First paragraph of the README”, and an install command, only if the README contains a line such as pip install, npm install, npx, cargo install, brew install, go install or docker run that names the project or its owner. Clone instructions and local set-up steps are not shown as install commands.
These facts are refreshed at most once every 24 hours per repository, and the number of repositories read per run is limited by GitHub’s API quota. A repository that has just entered a list can therefore appear for a while with its description only. At the moment 55 of the 145 repositories in the lists have these facts.
Topic pages
The AI agents, MCP and LLM pages group repositories by a written rule applied once, in the collector: a match on the repository’s GitHub topics, or on whole words in its description. Loose words such as “tool”, “model” or “agent” alone never classify a repository. The exact terms are listed in the questions at the end of each topic page.
Archive
After each run the main daily list is stored under the current UTC date, replacing the earlier reading of the same day. The archive therefore has one list per day, the last one read that day, starting on the collector’s first day.
When something goes wrong
- If the main daily page cannot be read or contains no repository, the run stores nothing. The previous lists stay, with their own collection time.
- If only a secondary page fails, its previous list is kept and a notice is attached to the collection; notices appear under the collection time.
- If a list comes back with fewer than half the repositories it had before, a notice is attached as well.
- On every page, a warning is displayed when the collection time is more than 24 hours in the past.
What this site does not do
It does not rate repositories, detect purchased stars, or judge quality. It does not summarise READMEs with a language model. It does not track repositories that never reach a GitHub trending page. Avatars are loaded from GitHub by your browser; see the privacy page.