Chess Tier: a rank system for

Tristrum Tuttle
5 min readNov 7, 2021


Chess is one of my favorite board games, and recently I have been playing A LOT of online chess. Earlier this summer when I was dealing with some bad anxiety stemming from a concussion, chess puzzles helped distract me and provided reassurance that I wasn’t losing my mind. More recently, I have been trying to improve my chess skills so that I can consistently beat my dad (an equally avid chess player).

Despite everything I love about chess, there is one thing I don’t love: my rating.

My main issue with my rating isn’t that I wish it were higher. My main issue with my rating is that it changes after every game. Rating fluctuations are normal (you can’t win em all), but I want to focus on my long term improvement instead of seeing my rating change after each game. In games like Rocket League, CSGO, and League of Legends all players are assigned a rating internally (often referred to as an MMR for Match Making Rating), but that rating is never shown to players themselves. Instead, players are shown a “tier” that represents all players in the same range of ratings. You are probably familiar with some game that uses this type of system — most likely one with tier names like “Bronze”, “Silver”, “Gold” and “Diamond”. Why doesn’t or any other online chess platform use a tier system?

I did some research to see if anyone had developed a tier system for online chess ratings, and I found a few forum posts discussing the idea but no implemented tools or extensions. So I created Chess Tier, a chrome extension that replaces your rating with a tier!

Introducing Chess Tier

Before I could dive into writing code, I did some research to determine how many tiers I should use, and how many players should ideally be assigned to each tier. Luckily, provides up-to-date data on the ratings of all its users right on the website. I found a great article from which outlined the tier system used in League of Legends and compared it to the tier systems used in other games. Based on this research, I initially decided to use six tiers with the following percentages of players (in order from lowest tier to highest tier):

  • 🔔 Bronze (~25% of players)
  • 🥄 Silver (~25% of players)
  • ⚜ Gold (~25% of players)
  • ⚔️ Platinum (~15% of players)
  • 💎 Diamond (~7% of players)
  • 👑 Champion (~3% of players)

This distribution of players is slightly negatively skewed: 50% of the players fall into the first two tiers, while the remaining 50% of players are divided amongst four tiers. I chose this distribution because doesn’t separate active and inactive players in their global rating data, which skews the global rating distribution towards lower ratings.

Chess Tier compared to other esports using data from

After bucketing the ratings into six tiers, I realized there was way too large a jump from one tier to the next. In some cases, a grandmaster could be just one or two tiers above a casual player. I decided to split each tier into four “sub-tiers”, i.e. Bronze I, Bronze II, and so on. This is a pretty common solution different esports use to keep the tiers competitive, while not having to come up with additional tier names (aluminum tier? any takers?).

Even with these improvements, I still felt like the system didn’t provide enough variety for competitive players. Being above 1900 in Rapid was enough to place you in the highest “Champion” tier using the player rating distribution. I did some research and found this dataset of ratings mapped to US Chess Federation (USCF) ratings. Chess Federation ratings are only assigned to players that have participated in at least one official USCF chess tournament, so its rating distribution is skewed towards players that are more competitive. With this data, I was able to make a new tier system that assigns players to the tier they would have relative to the USCF player distribution. The USCF tiers can be optionally turned on in the extension, and provide a more competitive tier system for advanced chess players. I’m only Silver II in the USCF tier system, which hurts my ego as much as it supports my credibility.

Another challenge I ran into is that different time controls have totally incomparable ratings — my rating for 5 minute “blitz” games is about 200 points lower than my rating for 10 minute “rapid” games. Luckily, the data and the USCF mappings were already separated by time control, so I was able to make different tier ranges for each time control.

I’m not too familiar with chrome extensions, but I had a ton of fun coding this extension in vanilla JavaScript (I considered using jQuery but determined it wasn’t necessary). I added a settings popup using basic HTML (shoutout to the w3schools Toggle Switch tutorial), used the nifty API to persist settings, and that was it!

After releasing the extension, I posted it on some chess forums for feedback. The main piece of feedback I received was that the tier system was still too skewed towards lower rated players. To address these concerns, I added an additional tier above champion:

  • 🔮 Legendary (~0.5% of players)

With this addition, even titled players can enjoy Chess Tier and try to climb the ranks!

Check out the Chess Tier chrome extension in the chrome web store!

The code for this project can be found here on GitHub.

Big thank you to my amazing fiancé Monica for proof reading this article and to everyone that provided feedback on the extension ❤