Hacker Newsnew | past | comments | ask | show | jobs | submit | ThomasCM's commentslogin

This is the first large-scale analysis of Grandmaster activity across Chess.com and Lichess from 2008 to 2025, based on years of data collection and millions of games. I explored which platform top chess players prefer and how Chess.com and Lichess have evolved over the years.

All data comes from my project ChessMonitor, which maintains one of the largest chess databases in the world. Feel free to check it out! :)


Shameless plug: f you're looking for a similar way to compare your online rating with the FIDE rating, take a look at my project: https://www.chessmonitor.com/

Like the author, I also use regression, but extended to non-title players. More information: https://www.chessmonitor.com/blog/2023-elo-calculation


Having a quick look at ChessMonitor, it looks like much of the analysis tools mirror what can be found on Lichess (unsure about Chess.com). Is the value providing the aggregate analysis between Lichess and Chess.com? Or is there functionality past what can be found on the respective sites?


Chess.com Insights are similar to what my project is doing. However, Lichess has nothing similar. They do have something called "Chess Insights" but it's not really comparable IMHO.

That said, there are also some unique features like "Openings" which allows you to quickly identify your best/worst openings.


Where have I seen this UI before? :)


Both features are already on my TODO list. That doesn't mean they are coming soon, though... ;)


That is where some of the inspiration came from. Years ago, I was an avid Dota player and always loved Dotabuff (and OpenDota, too).


Thanks for the feedback! Always good to hear from chess players with a FIDE rating that it's working :)

If anyone wants more info on how this works, check out this post with more details: https://www.chessmonitor.com/blog/2023-elo-calculation


I’d suggest fitting an isotonic regression instead. I think it’s a reasonable expectation that online and FIDE ratings are monotonically related but it seems unlikely to me that they are linearly related even though it may be an ok approximation for players in a particular rating range.

I suspect that the online population — especially at lower ratings — is significantly different to the over the board population. I also expect — especially in the FIDE case — that ratings stratify the players into hobbyists, serious amateurs, professionals, etc and so different FIDE rating ranges are likely to scale to online ratings differently.

All of the above should be implicitly accounted for in an isotonic regression so long as monotonicity holds globally. You can easily do it with sklearn and I suspect it may give you better results.


Thanks, I'll look into this!


Hi everyone, author here. Please let me know if you have feedback or questions.


Ahh, this is super nice!

One thing I'd love to know or see is common mistakes I make or the type of mistake/trap I fall into in the pivotal moments of games (some kind of fork/pin combo for me I suspect) ... and/or repeated mistakes I've made in the same position.


I'm currently not doing Stockfish evaluations (everything is based on simple win/loss-rate) but I hope I'm able to integrate this in the future. Then I can show much more in-depth statistics like the one you mention.


The scroll feature to rewind/forward moves on a game, with syncing the state in the URL, is just awesome.

Do you mind sharing how it's done? I just published a library [1] that deals with syncing complex state in the URL, and I'd love to hear more about actual use-cases in the wild.

[1] https://github.com/47ng/next-usequerystate


Thanks, I just like it when all state is in the URL and you can just bookmark it. Also using the browser back/forward button should work well thanks to that. I'll check out your library!

My code for that is rather simple. I'm using Next.js and the code looks something like this (a little simplified):

  const router = useRouter(); // get the router/location object
  const information = useFetch({ position: router.query.position }); // fetch information from the server
  
  function changeChessPosition(newPosition) { // called when position changes
      router.replace({ query: { postition: newPosition } }); // replaces the state in the URL
  }
In addition, I have some caching in place so that each position is only downloaded once and the change function looks a little more complicated in my case as there are multiple values that can be change for each page.


It seems like Lichess already has most of the features on the site; they have a better UI on ChessMonitor though.

The main killer feature I see is combining multiple accounts. Are there any other features didn't notice?


There are many similar features. Overall the UI on ChessMonitor is much more focused on statistics.

Another key feature Lichess does not have, is the Openings page. It is very powerful when used correctly. You can look at your openings and immediately see for which openings you might need to consume more theory (or which you should not play at all).

Here is an example: https://www.chessmonitor.com/u/cdPiOkUArRJ7shVNJcT3/openings...


Would like to see Chess960 variant stats.

Classic chess are way too predictable and players who've managed to learn popular openings have an advantage. Chess960 fixes that.

And due to comparably low popularity of Chess960 I often play it with Stockfish. It has several difficulty levels which are a convenient tool for practice.

So it would be nice to include games with bots (checkbox?) on ChessMonitor as well.


I'm aware of Chess960, but this will probably never be supported on ChessMonitor for three reasons: First, Chess960 basically tries to prevent players from preparing (by having a random starting position) which does not align well with providing statistics. Second, it would require major UI and storage changes on ChessMonitor (like adding an option to select the starting position to compare games). And third, Chess960 is simply not as popular amongst non-professional chess players.


How many combinations are there for Chess960?

I'm wondering whether people could also prepare for it if it became popular.


There's 960 of them. Hence, the name.

Slight nuance: the 960 figure includes the regular starting position, and there's some variation in different tournaments about what would happen if the classical starting position were selected. So, at least in some tournaments, it's actually Chess959. But I guess that has less of a ring to it.


This is the most beautiful site I've seen in years.

My only criticism is the search box's height seems to be a few pixels shorter than the search button.

Do you write about design or development anywhere, or have a GitHub profile? I didn't see anything linked in your profile here.


Surprisingly, storing a game (with all moves) can take less space than encoding a single board. This is because you can effectively encode a move in a single byte (as there are less than 255 moves possible in each position). Applying compression to the resulting binary string will allow you to reduce the space even more.

Check out this great blog post of Lichess for more information: https://lichess.org/blog/Wqa7GiAAAOIpBLoY/developer-update-2...

And shameless plug: Using this encoding, I'm storing millions of games on https://www.chessmonitor.com/ There you can link your Chess.com or Lichess account and view all kind of statistics of your games.


That is a beautifully designed website. I don't think I've ever used an OAuth authentication flow as smooth as the one that your site uses to access my Lichess credentials (same as my HN name, btw, in case you want to beat me at a correspondence game).

ChessMonitor is practically a work of art!


I created an account just to see that flow, and it did not disappoint! How's it this fast?


Thanks for your feedback!

I guess OAuth is relatively fast as I don't have a middleman (like Auth0) in there. It's just Passport.js.


ChessMonitor looks very nice, I like how you can link to a particular opening:

https://www.chessmonitor.com/u/XqaFNTHcR61WpiMfOhEY/games?po...


Heh, I guess there are board states that are not possible to reach through a valid sequence of moves, but I guess otherwise it's not possible that games are more compressable by definition, since any valid board state could be represented as a sequence of moves.

This does raise the question of the efficiency of reverse engineering a series of minimal moves for some board state.


Are you saying that, to encode a valid position, ignoring the cost to encode both the starting position and the move definitions, you can encode the move sequence using less information than encoding a single position?


Yes, ignoring compression each (half-)move takes up one byte. So if you want to store a sequence of 10 (half-)moves it would take only 10 bytes.


Average game length seems to be around 80 half moves though.

https://chess.stackexchange.com/questions/2506/what-is-the-a...

I'd expect that ordering moves by popularity at each half move index, using say the above dataset, would allow you to select lower indexed values at each step, allowing a nice context based arithmetic compression to really shrink them well.


Yes, in contrast to storing the board (which can be a fixed size), this depends on the length of the game of course.

That said, there are some optimizations you can apply that will compress moves even further (for example the order of the moves as explained in the Lichess blog post is important). In the end it's a tradeoff between (de)serializing the game fast and reducing the size (even more).


It seems, then, if you wanted to efficiently store lots of positions, it would be smart to store a large list of openings, a large list of following sequences, and then your positions can be stored as a list of sequence ids.


I created a website to analyze chess games. By connecting your Chess.com/Lichess account you can access all kind of statistics related to your chess games. You can even link more than one account.


Shameless plug: In case you want to track your chess progress and see more statistics on your openings (win rates, etc.), I'm developing a website where you can link your accounts to view stats for all of your games. It's free and currently in Beta: https://www.chessmonitor.com/

Here is an example for the current world champion: https://www.chessmonitor.com/u/kcc58R9eeGY09ey5Rmoj


I'm getting major dotabuff vibes from the UI. I assume you drew inspiration from them?


Yes, I've played Dota myself and always loved dotabuff. That's where some of the inspiration came from.


I use ChessMonitor all the time, it's a great site, thanks so much!


I'm currently developing this: https://www.chessmonitor.com/

It stores your games and gives you an explorer for your games similar to what openingtree does.

Here is an example for the current world champion: https://www.chessmonitor.com/u/kcc58R9eeGY09ey5Rmoj/explorer


Wow that is awesome! Great work!


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: