- Welcome to Victor Zheng's Website/
- Articles/
- Chess/
- ChessTools.org - helping chess players, organizers, & arbiters/
ChessTools.org - helping chess players, organizers, & arbiters

Table of Contents
Over the past year, I have been working on a suite of tools for chess enthusiasts: players, organizers, arbiters, and researchers. The website was started when I was an Exec on the Hart House Chess Club’s board as a fun way for me to apply my computer science knowledge to assist in organizing chess tournaments. These tools eventually became tools which I personally now use for organizing events, delivering lessons, or in chess administration circles.
The site’s goal is to provide a useful tool for chess enthusiasts, coaches, players, organizers, and arbiters of all backgrounds. By offering accessible, easy to use tools, the site contributes to chess analysis, teaching, and enjoyment.
For me, chess lacks the digital revolution that so many other sports and professions have profited from. Since the 1950s people have been studying how to effectively delivery a chess-playing machine. Claude provided the landmark paper explaining Shannon’s Number over 75 years ago, and yet universal chess tools aren’t available to the wider audience of chess players.
Why No Chess Tools Software Exist Today #
Lichess.org does an amazing job with some of their tools but they also don’t provide everything. There are two areas which Lichess does not tackle: geographical areas and in-person oriented chess.
Tools to assist in Canadian-centric chess don’t currently exist and likely lichess will never implement due to their geographically global focus.
Tools which chess organizers want also likely won’t be implemented by Lichess as they are primarily an online-focused platform. Chess-com and other for-profit institutions would also likely not invest effort into creating universally usable chess tools for the wider community. Therefore, this is where chesstools.org can come in as an open-source, community-driven platform.
![]() |
|---|
| Conversion of FEN to PNG |
Technical Goals and System Design #
The main technical goals of the site are to provide open-source, easy-to-use tools which all chess players would enjoy. At first, I started by implementing a UI for our FEN to PNG project. I realized that there were other tools that we had worked on and therefore it would make sense to make it fully available as a domain under “chesstools” umbrella.
An important consideration for design was to ensure that services were isolated. I didn’t want one service going down affecting the rest by clogging CPU resources or network bandwidth.
The API for instance runs on a dedicated server, the GIF generator runs out of a serverless function in Heroku, and the CFC rating processor runs on a server in Racknerd. The UI runs by itself alongside the FEN to PNG service on a Digitalocean server.
The idea of services connected to one UI is similar to many “conversion softwares” such as png to jpeg convertors such as this one where the underlying architecture consists of many services running by themselves.
For simplicity of enabling services to be deployed on different servers I created subdomains for some services such as the API (api.chesstools.org) which allow DNS servers to cache the domains and allow for quicker loads then a subdirectory format such as chesstools.org/api.
![]() |
|---|
| Ratings estimator estimates the performance of users after a tournament. |
Tools Included #
The tools I have included including a ratings predictor for FIDE/CFC, CFC ratings generator, a simple analysis, a FEN to PGN convertor, a GIF generator, and an API for retrieving the latest ratings. I have also included the references and the those who created the initial implementation.
- Ratings API which enables users to retrieve the latest ratings from the Chess Federation of Canada, United States Chess Federation, and FIDE (International Chess Federation). A cron job runs monthly to update the ratings and to update the /health endpoint. I chose a MongoDB server because the data itself is not that relational and I wanted quick development. A redis cache was added for simple caching. I also implemented this using FastAPI which I read is an industry standard. Credit to Cássio Fernando for the initial scraper implementation.
- FEN to PNG generator which allows for creating PNG images given a position. Credit goes to Ahmed Khalf for creating the backend library.
- GIF Generator which enables users to generate a GIF of a game from lichess.org. Credit to Aurélien Hervé who created the basis for inspiration.
- CFC Ratings Processor which allows organizers to generate a list of players for CFC tournaments containing their latest ratings. The main benefit is in speeding up tournament organization times. Credit to Ahmed Khalf who also contributed to the original CLI implementation.
- Rating Estimator which estimates users’ CFC or FIDE rating based on the formulas provided by the governing bodies. It is especially useful for calculating rating performances for title norms.
- Analysis which runs Stockfish is included because it’s pretty standard to have an analysis tool in a suite of “chesstools”. I don’t think it’s the best tool for analysis as Lichess.org is quite good but I included it for completeness.
- ChessBoard builder which allows reconstruction of positions and export of positions to FEN. It can be used to quickly generate board positions which can then be downloaded using the FEN to PNG tool.
- A computer engine which allows users to play against a computer of various levels. The computer in this case is Stockfish running stockfish.js.
![]() |
|---|
| Chess API for fetching the latest ratings of players |
How to Contribute #
I have gotten some great feedback from various people online and I think there are some areas which I would love to get more help with. In particular, I would love to assist high-school students who are interested in computer science and who play in the many chess tournaments organized in Canada. I think the next 10 years are going to matter a lot for defining the future of chess in Canada and we need the best minds to help.
There are many ways to get involved but the easiest would be to create a pull-request in the repository here.
![]() |
|---|
| GIF generator |
Areas still to do #
I’ve listed these todos straight from the GitHub repo containing these todos.
- Ability to visualize Canadian chess players from CFC ratings list.
- Ability to visualize chess players from FIDE ratings lists.
- Link with the CFC viewer so that users can find the cfc id
- Testing infrastructure
- CI/CD infrastructure
- Monitoring and observability tools
![]() |
|---|
| Analysis site |
![]() |
|---|
| Ratings processor assists organizers in processing ratings |





