About
The data
Every month, Lichess publishes a public dump of all the rated games played on the platform. You can browse these dumps on the Lichess database. They are large compressed PGN files, and some months contain well over a hundred million games, each one carrying the players ratings, the moves, timestamps, and the result.
Aggregation
Rather than downloading those files first, the aggregator streams the compressed dumps directly over HTTP and decompresses them on the fly, so it can work through terabytes of data with a small memory footprint. Games are parsed in parallel across CPU cores and grouped by month, opening family, and the rating range of each player. For every one of those combinations it keeps just the totals that matter: how many games were played, and how many ended in a white win, a black win, or a draw. A daily GitHub Actions workflow runs the whole process and picks up any new dump automatically. The code lives in the aggregator repository.
Storage and API
The aggregated data is tiny compared to the raw dumps: what would be terabytes of PGN becomes a small table where each row is a single combination of month, opening, and rating buckets. A Next.js backend exposes that table through cached REST endpoints covering monthly game counts, opening popularity, rating heatmaps, and more. You can try them from the API reference.
The site
This site is built with Next.js and React, using TanStack Query to fetch data and Recharts to draw the charts. The whole project is open source and contributions are welcome on GitHub.
LichessTrends is an independent project with no affiliation to Lichess.org. It simply builds on their open-data initiative.