Lichess Accessibility

I wanted to play chess with somebody who used a screen reader, without requiring a screen reader myself; some sites, like QuintenC’s Playroom have a rather poor visual interface for anyone who would like the play the game visually. Lichess is an free and open-source website for chess players; it bridges this gap by having two “modes” on the site: standard mode and accessibility mode.

Accessibility Mode

Accessibility mode is far from perfect on That said, the idea to separate the sites into different modes was a good call. It stops the inevitable “this would work well for screen readers but cause visual issues” shenanigans, or, vice-verse “this looks great but it might be weird with a screen reader”. This way all the things which affect the visual interface are in one place, and all things which affect the non-visual user interface (NVUI) are written in another.

In my quest to play chess with visual and non-visual players with both having optimal experiences, I tried Lichess with my friend from She pointed out that the method to interface with the board previously was rather poor. This is because it required an “enter” at the end of each command and the commands tended to read out a row or column of a chessboard not just an individual square.

For example, to list all pieces (or lack thereof) on the e file, I would type the command:

s e

Although this seems good in theory, and it’s great when you need an entire file, there was no way to get only one square. In addition, imagine typing to navigate around the board:

s e1
s f1
s e2

For the inexperienced player, it seems to be more convenient to bind some keys and have the user bounce to various buttons, which they can push to say “I want to move this piece”. This is what I was told anyway. So I want to work making a system so you could use the following basic keys:

  • left/right/up/down arrow: move on the board.
  • k/q/r/b/n/p: move to next piece represented by its character in chess notation.
  • shift + k/q/r/b/n/p: move back to the last piece represented by its character in chess notation.
  • click/enter/space: select piece to move.
  • click/enter/space again: move piece here.
  • m: show where I can move with this piece.
  • shift+m: show where I can capture with this piece.
  • 1-8: move to rank 1-8; stay on same file.
  • shift + 1-8: move to file a-h; stay on same rank.

This gives a pretty solid basis for playing the game. One caveat is after you have moved a pawn all the way to the farthest rank, only the destination tile will accept your promotion choice. Therefore, all the other keys still work on other square, but if you are on the destination square of a promotion q/r/b/n will promote your piece, not jump you to the next/previous one.

This pull request was merged earlier this month:

More To Come

Next thing I want to do is implement the analysis board. Right now it is not accessible whatsoever.

Help Me

If you are a screen reader user or know about accessibility and want to help make Lichess an awesome chess site for sighted and unsighted players alike, then send me an email at and I’ll BCC you once I start testing the analysis board.

Happy hacking, y’all!