Changelog
This page summarises changes, updates, and new features added to Lichess over time. Check out our open source repositories for the details of every change we've ever made.
August 2026
At a glance
- New theme options on the website - select your name/the ⚙️ icon on the top bar and then Theme to try them:
- An all-new special light theme with a custom background image. In the Theme menu, set it to Light and toggle on Background image to try it.
- Adjustable background image opacity for background image themes, making many parts more readable in both light and dark styles.
- Customise how round the website is, from straight to very round edges on nearly every part of the user interface.

- Major mobile app improvements:
- Get notifications for broadcasts for tournaments and FIDE players you follow.
- Sign in by email, which resolved common sign-in issues. If you or your friends had issues signing into the app in the past, now is the time to try it again.
- Play against Maia offline, an engine designed to mimic human play.
- Go even darker with the AMOLED black theme. Being pure black, it complete turns off the pixels, saving you battery life on AMOLED screens.

- Analysing correspondence games on web is more convenient: copy sub-variations, prune to the main line, both accessible from the right-click menu on moves.
- We now include computer annotations in imported games you download from the website.
General
- Draws are now forced when there is insufficient material to deliver checkmate (#821 by johndoknjas for online, #3565 by Mohamadmourad for the over the board mode of the app)
Web
Playing (web)
- User experience enhancements:
- You can now leave a quick pairing queue by pressing Esc (#21351) by Simek
- The keyboard move entry box is now kept clear of the outer coordinates (#21320) by Pushkal-Gupta
- In Chess960, the board editor now keeps castling rights for rooks which are set up in the corner squares (#21276) by Pushkal-Gupta
- Visual enhancements:
- The Claim victory button is even more attractive, now being in green (#21387) by alexanderhu77
- The crosstable (your results against another player) is now top-aligned (#21264) by anthonyleeper
- Reduced and reorganised side content on tournament pages, with a calendar visual tweak (#21273) by Simek
- Aligned the post-match buttons (#21217) by Simek.
Watching (web)
- Lichess Titled Arenas now show players’ real names if they are happy to have public profiles (#21367) by Thibault
- In broadcasts, filtering boards by team now puts the filtered-out boards at the bottom (#21335) by allanjoseph98
- The broadcast players list now has a placeholder notice while empty (#21140) by Simek
- The broadcast side panel now comes before the main content in the page structure, improving screen-reader order as well as brightness controls in the transparent theme (#21396) by Simek
Learning, analysis and puzzles (web)
- The how-to screencasts in the analysis settings help dialog are now shown to everyone and autoplays the short clips (#21372, #21442) by Jon B. Gamble
- You can now copy sub-variations on right-click (#21278) by johndoknjas
- You can now “prune [the move list] to main line” in correspondence games on right-click (#21207) by Jon B. Gamble
- Imported games can now be downloaded with computer analysis annotations (#21137) by alexanderhu77
- “Continue from here” no longer stores the FEN ready for re-use in your browser (#21353) by NicholasOssine
- When a Puzzle Storm or Racer run ends with a puzzle still on the board, it now shows in grey with a clock icon (unfinished rather than failed), and is left out of the filter for failed puzzles (#21361) by Zinkelburger
- Studies:
- Other visual enhancements:
- The game review chart now shows “0.0” instead of “0” for evaluations, keeping it consistent (#21285) by johndoknjas
- Removed the evaluation bar’s tick at 100% height (#21330) by Simek
- Removed redundant gaps in the one-column mobile analysis view (#21323) by Simek
- Moved the embedding tips link onto the input label (#21305) by Simek
- Spacing tweaks for the evaluation bar (#21300) by Simek
- The annotation guide now matches the colours of the analysis result (#21292) by Simek
- The server-side analysis message now stretches in its tab (#21291) by Simek
- Small visual tweaks for the opening explorer view including a sticky header and different icons by opening database (#21173) by Simek
- The layout grid no longer reserves space for empty areas in analysis and studies (#21364) by Jon B. Gamble
- Added missing translations - both of which we had and were not using:
- The Share tab is now hidden when sharing is disabled, reducing clutter (#21270) by Simek
Community and social (web)
- FIDE player inactivity is now tracked per time control, making sorting smarter on the FIDE players’ list (#21368) by thenlevy
- Everyone can now write localised times and dates in the forum (#21431) by SergioGlorias
- URLs containing
*,$and'are now properly linked in direct messages and team announcement, also fixing it for some on-site links (#21148) by alexanderhu77 - Teams:
- Blogs:
- Blog images now use the image description field as alternative text, improving accessibility (#21415) by alexanderhu77
- Previews are more useful when writing blogs posts, showing you YouTube videos among other things (#21267) by Jon B. Gamble
- Blog posts - as well as pages like this changelog, can now be more richly presented with the
<kbd>,<video>(intended more for images, despite the name),<center>,<details>and<summary>HTML tags (#21116) by Jon B. Gamble
- Other visual enhancements:
General (web)
- You can now customise how round you’d like the website - do this from your profile at the top or ⚙️, then Theme and set the Roundness (#21099, #21120, #21119, #21124, #21164, #21183, #21186, #21174, #21187) by Simek, and has been applied to:
- Themes and backgrounds:
- New transparent light theme with a background image (#21358, #21429, #21234, #21254, #21235, #21216, #21202) by Simek
- Made board brightness adjustable in the transparent theme (#21253) by Simek
- Made background image opacity adjustable (#21206) by Simek
- Usability tweaks for setting these in #21268 by Jon B. Gamble
- Other visual enhancements:
- The language menu is now identified with an icon and properly translated (#21430) by SergioGlorias
- Linked preferences options are now marked more prominently (#21434) by SergioGlorias
- Small tweaks to the sizing and alignment of buttons with icons (#21306) by Simek
- The source code page no longer shows commit messages and opens links in a new tab (#21418) by Simek, with more spacing between sections (#21331) by Simek
Mobile app
General (app)
- You can now sign in by email instead of just authenticating with the in-app browser. This is subtly different and resolves a range of issues people have had with logging in. (#3546) by veloce - your username is included in the email (#3562) by veloce, and the server side is in place (#21139) by Thibault
- New AMOLED (pure black) background. On AMOLED screens, this will completely turn off the pixels, saving a small amount of battery life. (#3557) by HaonRekcef
- Text now scales with the system font size (#3556) by HaonRekcef
Playing (app)
- Better Chess960 support in the board editor through a specific mode that respects castling and more (#3581) by HaonRekcef
- Improved tournament layout for tablets in landscape mode, so the featured game is no longer enormous! (#3534) by tom-anders
Watching (app)
- Broadcast notifications arrived in the app: get a push notification when a FIDE player you follow starts playing, or when a tournament you are following starts a new round (#3297, plus #21277 and #21293 on web) by julien4215
- You can now filter boards in broadcasts by team, in the time for the Olympiad (#3582) by allanjoseph98
- Pinned notices for broadcasts is now visible on the Boards tab (#3579) by HaonRekcef
Learning, analysis and puzzles (app)
- Practice mode improvements (#3614) by veloce:
- Use the human-like Maia engine in the app
- Better battery management (no longer running in the background if you leave the app)
- Analysis gets the move-times chart tab you have on the website (#3553) by Gamah
- Game phase accuracies (by Opening/Middlegame/Endgame) now load as soon as the server analysis has finished (#3604) by HaonRekcef
- You can now create new study chapters (#3532) by tom-anders
- Options to show threat, open in the board editor and “continue from here” are now available in games within broadcasts and studies (#3571) by HaonRekcef
- The analysis board now shows the players’ rating change (+/-) from the game you are analysing (#3560) by HaonRekcef
- Moved the analysis board moved to the bottom of the menu (#3578) by HaonRekcef
Community and social (app)
- Your own chat messages no longer count towards unread counts (#3570) by HaonRekcef
Issues fixed
Fixed on both web and app
- After one forced variation in a study, all subsequent moves stayed in variations. The broadcasts side of this was fixed in July, and studies are now covered too (#21059) - fixed in #21175 by Thibault
Fixed on web
- Study chapters - often used in blogs, sometimes did not render on mobile browsers (#21238) - fixed in pgn-viewer #77 by Jon B. Gamble
- Blog images stopped being resized correctly - fixed in #21249 by Jon B. Gamble
- Fixed flickering on the board editor when drawing shapes (#21318) by Pushkal-Gupta
- Moving the volume slider for “Speech” sounds said the words lots of times in quick succession (#19013) - fixed in #21348 by alexanderhu77
- Computer analysis failed for very long games (#21284) - fixed in #21297 by alexanderhu77
- The analysis board disappeared on PGN import (#21299) - fixed in #21302 by WilliamDann
- Practice with the computer hung after a few moves (#20803) - fixed in #21421 by Jon B. Gamble
- In variants, an already-castled king could be given a premove to castle onto the rook (which was disallowed anyway when the move came to be) - fixed in #21392 by dikshyantacharya
- Inserting a game to a study after a repeating position incorrectly numbered moves (#18873) - fixed in #21214 by alexanderhu77
- Miniboards in the lobby showed the wrong last-move squares for games in progress (#21269) - fixed in scalachess #873 and lila #21317 by johndoknjas
- Dropdown filters on player insights were obscured (#21438) - fixed in #21439 by Simek
- Clicking on a move annotation in the PGN viewer’s move list did nothing (#72) - fixed in #75 by joelynli0110
- When material was shown, the analysis board ignored the outside coordinates preference - fixed in #21422 by Pushkal-Gupta
- Hovering over a user’s name in puzzles did not open the content properly (#21282) - fixed in #21384 by Jon B. Gamble
- The lobby showed the create correspondence game button to anonymous players, who cannot use it - fixed in #21416 by Jon B. Gamble
- Arena side bar interactions were broken (regression from 0e692f5) - fixed in #21395 by allanjoseph98
- The study chapter settings button did not respond to clicks (regression from 074e306) - fixed in #21379 by allanjoseph98
- Study manage elements could not be focused or operated with the keyboard - fixed in #21355 by Simek
- The voice input bar overlapped the material difference display (#21034) - fixed in #21041 by alexanderhu77
- The voice bar grew too large and shifted the move list down - fixed in #21159 by Simek
- Tree interrupt nodes had the wrong border colour - fixed in #21308 by Simek
- The loading animation was off-centre on forum infinite scroll (#20240) - fixed in #21296 by glitchfl
- Sticky blog posts were missing their icon (#21313) - fixed in #21315 by Simek
- Broadcast team scores were wrong when a pairing was duplicated (#21242) - fixed in #21244 by PawelPlutaUek20
- Blog markdown tables had issues (#21201) - fixed in #21245 by Jon B. Gamble
- The bot editor UI did not allow viewing and editing parameters - fixed in #20949 by Jon B. Gamble
- Lobby graph view plots juddered (#21101) - fixed in #21236 by JoeJoeflyn
- The sticky header overlapped popover boards (i.e. boards you see when hovering the mouse over) (#21196) - fixed in #21198 by Simek
- The featured rounds of broadcasts only applied to the main tournament in a group and dropped off for others - fixed in #21188 by fitztrev
- The explorer triggered redundant redraws of the analysis (#20535) - fixed in #21182 by alexanderhu77
- The analysis settings dialog layout was broken on mobile (#21007) - fixed in #21178 by Jon B. Gamble
- The new UI roundness caused assorted display issues, which were promptly resolved:
- Assorted global roundness problems, including the openings search and lobby elements - fixed in #21189 by Simek
- Forum warning and Markdown text boxes did not use the global roundness - fixed in #21149 by Simek
- The chat message input was clipped at higher roundness values - fixed in #21176 by Simek
- Button racks in mouseovers as well as internal tools displayed incorrectly (raised in feedback on #21158) - fixed in #21160 by Simek
- Inbox elements had hardcoded roundness, and the submit button kept its blue box shadow - fixed in #21131 by Simek
- The CNM toggle background leaked at browser zoom - fixed in #21130 by Simek
- The select search highlight was invisible in light mode - fixed in #21123 by Simek
- The simuls top nav entry overflowed its container - fixed in #21118 by Simek
- The on-page settings menu’s dropdown corners were not properly rounded in the transparent theme - fixed in #21230 by Simek
- The light transparent theme had several small display issues (forum topic) - fixed in #21394 by Simek
- The transparent theme broke in the on-page settings menu - fixed in #21134 by Jon B. Gamble
- UI roundness was not stored for signed-out users (#21153) - fixed in #21154 by PawelPlutaUek20
- The on-page settings menu’s board/pieces toggle button had a hard-coded, sometimes incorrect label - fixed in #21141 by Simek
Fixed on the app
- Added the next chapter button in studies that are not interactive lessons, matching the web experience (#3544) by HaonRekcef
- Move sounds now play instantly in bullet games. Previously, the sounds in bullet where not played instantly if played with tap-to-move or on the opponent’s move. (#3605) by HaonRekcef
- The puzzle history list kept a stale “solved”/“incorrect” state until the app was restarted (#3549) - fixed in #3554 by Mohamadmourad
- Studies with illegal FENs failed to load - fixed in #3545 by HaonRekcef
- Loading a broadcast game without accuracy/ACPL crashed, e.g. a one-ply game - fixed in #3574 by Assios
- Material notation was hidden behind the chessboard on large foldables (#3145) - fixed in #3558 by HaonRekcef
- Profiles without a name or bio had extra top spacing (#3528) - fixed in #3539 by marcoxmediran
- Exporting very long games as GIF often failed due to timeouts (#3391) - fixed in #3511 by dev-shady
Technical and other changes
Technical changes
API
- Warn users about rating-history OAuth changes (#668) by allanjoseph98
- add study visibility to study json view (#21360) by tom-anders
- Rating history: Allow OAuth user requests to force compute as well (#21365) by allanjoseph98
lila
- Boards were moved from PNG to WebP but later pulled back for 2D to acommodate users of old Safari browsers. (added in #21304, reverted in #21413) by SergioGlorias
- Conversion to WebP done and still retained for 3D, which notably is optional and not used in embeds (boards in #21309, pieces in #21311) by SergioGlorias
- Remove Handset icon from various files following the removal of voice chat (#21219) by SergioGlorias
- ui(build): automatically apply CSS prefixes based on browserslist (#21452) by Simek
- Migrate bloom-filter (#21444) by lenguyenthanh
- Revert “Migrate bloom-filter” (#21451) by Thibault. Per analysis in Discord: “
--add-opens=java.base/java.lang=ALL-UNNAMEDapplies to the entire java.lang package where every classpath dependency can reflect into private details of all core classes. It would broaden the reach of a compromised dependency, allows new dependencies to form on undocumented jdk internals that may change, and creates a hidden jvm startup requirement for every deployment path. This may bee too much for a Bloom-filter optimization.”
- Revert “Migrate bloom-filter” (#21451) by Thibault. Per analysis in Discord: “
- fix: only irc post homepage-scheduled BBBs (#21432) by fitztrev
- Dont queue spurious sass task on startup & rebuilds (#21404) by Jon B. Gamble
- Add tests for GameExt.computeMoveTimes (#21402) by Aybavs
- update browser compatibility checks (#21398) by SergioGlorias
- workspace: bump pnpm, update AGENTS file (#21407) by Simek
- Fix memory leak in event stream bus subscriptions (#21427) by alexanderhu77
- Remove PeerJS from COPYING.md (#21428) by alexanderhu77
- irc markdown helpers for spoiler + quote (#21419) by fitztrev
- bbb event and tournament log diffs (#21400) by fitztrev
- Create CLAUDE.md (#21410) by alexanderhu77
- Reapply 51b62e0838ce44ced9e6c36a654f01cc78be2c65 (#21393) by SergioGlorias
- Typecheck sources correctly after .d.ts changes in –watch mode (#21386) by Jon B. Gamble
- Remove abandoned tree code (#21382) by Jon B. Gamble
- move warning argument inside of Diagnostic type (#21381) by Jon B. Gamble
- detect and report abortive stockfish exit (#21362) by Jon B. Gamble
- ui/build just call tsc 7 and be done (#21374) by Jon B. Gamble
- workspace: prune CodeQL caches earlier (#21346) by Simek
- cleanup theme colordefs (#21373) by Jon B. Gamble
- workspace: bump dev dependencies, match NixOS availability (#21370) by Simek
- Fix scope of apiMany, integer division in apiBatchSelect (#21359) by Zinkelburger
- add client context to dialog opts, accessible as dlg.ctx (#21349) by Jon B. Gamble
- use enter not space to trigger clean rebuild (#21350) by Jon B. Gamble
- workspace: cache XMLLint APT packages to avoid installation each run (#21345) by Simek
- workspace: bump few workflow actions to latest release (#21344) by Simek
- workspace: add
workspace-checkto CI, fix dependencies order (#21343) by Simek - Remove unused npm dependencies (#21341) by alexanderhu77
- Remove unused uciChar table (#21325) by alexanderhu77
- Remove unused TypeScript exports (#21327) by alexanderhu77
- Fix broken CSS bundle keys (#21332) by alexanderhu77
- Remove Unused SCSS Mixins and Placeholders (#21321) by alexanderhu77
- Remove an unused stylesheet (#21314) by alexanderhu77
- Add scss watch for sources outside of ‘ui’ directory (#21294) by Jon B. Gamble
- ui(editor): move to snabbdom elements, add missing form related ones (#21252) by Simek
- workspace: bump lint tools, add few lint rules, fix new warnings (#21241) by Simek
- Improve CaptchaApi.solve style and efficience (#21228) by lenguyenthanh
- Add logger configs for reactivemongo in dev mode (#21229) by lenguyenthanh
- dont pubsub from an unstable snabbdom node’s insert hook (#21200) by Jon B. Gamble
- Reduce reactivemongo-pekko max thread count to 16 (#21191) by lenguyenthanh
- workspace: move agents instruction to universal file (#21190) by Simek
- workspace: bump dev tools, match versions available for NixOS (#21166) by Simek
- docs: update mobile repository link in CONTRIBUTING.md (#21177) by Om22210564
- ui(lib): tweak TS config for test to address in editor warning (#21165) by Simek
- use openingexplorer’s internal endpoint to access opening data (#21162) by fitztrev
- fix server build (#21132) by Jon B. Gamble
- ui(lobby): migrate pools and playing views to tag elements (#21112) by Simek
- fix fishnet analysis on developer deploys (#21115) by Jon B. Gamble
- Bump lila and lila-search to remove rc versions (#21122) by lenguyenthanh
- ui(lobby): migrate list view to tag elements, remove unused util (#21110) by Simek
- ui(lobby): migrate correspondence view to tag elements (#21109) by Simek
- learn: guard the board.change handler against a missing ground (#21108) by daviddokrao
- use url param for dasher board zoom slider (#21169) by Jon B. Gamble
- dasher: key the svg board thumbnail on the extension, not the name (#21117) by daviddokrao
- Add the notification field to the recap firebase message (#21111) by julien4215
Mobile
- A new PR template was introduced (#3567) by HaonRekcef
- Update stockfish, better report engine errors, and migrate to SPM (#3584) by veloce
- Replace stalled flutter_linkify package (#3504) by ishaan-jindal
Misc.
- Bump and align pgn-viewer dependencies and configs with lila, fix new lint warnings (#76) by Simek
- stockfish-web: use podman/docker emcc on targets wanting a specifc emsdk version (#25) by Jon B. Gamble
- chess-openings: Add B21 Smith-Morra Gambit Accepted, Fianchetto Defense lines (#386) by zl050
- dart-multistockfish: Improve engine lifecycle and diagnostics (#12) by veloce
- dart-multistockfish: Quit on timeout (#10) by nikhilpim
- lila-db-seed: docker: add support for different password for privileged users (#88) by fitztrev
- lila-db-seed: set lichess user as verified (#87) by fitztrev
- lila-db-seed: seed team updates (#86) by fitztrev
- lila-docker: add lila preview site stack (#221) by fitztrev
- lila-docker: Update scalachess stuff in readme (#220) by johndoknjas
- lila-docker: Fix lila-ws under sbt 2 (#216) by daviddokrao
- lila-docker: fix
api_docsnot starting up (#219) by Simek - lila-openingexplorer: fix http method in openings import script (#336) by fitztrev
- lila-ws: sbt clean up (#908) by lenguyenthanh
- lila-ws: Use reactivemongo pekko-noshaded flavor (#902) by lenguyenthanh
- liplay: Switch given syntax for Trampoline ExecutionContext (#42) by lenguyenthanh
- liplay: Rename netty event loop’s name (#41) by lenguyenthanh
Maintenance
- stockfish-web: update sf_dev to dev-20260829-8bc5caa2 (#29) by niklasf
- dart-multistockfish: Migrate plugin to Swift Package Manager (#11) by veloce
- lila-docker: bump rust images to 1.95 required by
lila-engineandlila-gif(#218) by Simek - lila-engine: bump required rust version to 1.95 (#64) by Simek
- lila-openingexplorer: docker multi arch github action (#335) by fitztrev
- lila-ws: Set universal target static (#904) by lenguyenthanh
- lila-ws: Revert to RC20 (#901) by johndoknjas
Other changes
API
- We have had to impose tighter limits for unauthenticated use of broadcast endpoints. You are encouraged to use an OAuth token. Anonymous requests will soon be heavily rate limited, and might be blocked in the near future. (#21283) by Thibault
- Some practice thresholds can now be overridden, as the Lichess Tools browser extension wanted (#21170) by Jon B. Gamble
Web
- Further formalised Firefox 115 ESR+ as a requirement (#21258)
- Removed voice chat functionality, which had just 2 users at any time on average across the entire website.
- Removed branded sign-in for Take Take Take (#21161) by ornicar
Broadcast organiser tools
- Broadcast relays now show a readable error message instead of the raw HTTP code (#21193) by SergioGlorias
- Broadcast organisers now get a message advising them to contact the team if they can no longer make changes (#21195) by SergioGlorias
- The delay input now displays time in a friendlier format (#21194) by SergioGlorias
Moderation
- Blog curation moves good posts to an approval model, with reliable authors having their posts automatically considered good (#21290) by Thibault
- Appeal journey, improved in close collaboration with moderators:
- Word filters:
Payment Portal
A new portal has been made by brollin to securely take payment details and pay out winners of our tournaments such as Titled Arenas, saving the admin team time and effort. This is currently in a private repository.
User survey
We are running a large-scale User Survey for the first time in our history. We are reaching users by direct message, supported by brollin for the sending mechanism (#20688) and fitztrev for data retrieval.
July 2026
At a glance
- See your accuracy by phase (Opening/Middlegame/Endgame) in computer analysis

- Colours come to game analysis in the app, makes it easier to scan

- Better experience for correspondence players, both in move confirmation and in moving between your games
- We now inform you by DM if we have done something based on your reports
- Many visual tweaks, some newly-translatable text, and many bugs fixed
Web
Playing (web)
- User experience enhancements:
- Auto-switch now works between human and computer correspondence games - prioritising human games first (#21063) by alexanderhu77
- Made it so that having an ongoing game against the computer doesn’t prevent you from using the lobby challenge buttons. (#20933) by johndoknjas
- Focus is now on the “Now playing” tab on the home page when a real-time game is in progress (#20931) by johndoknjas
- Show pending moves in move list and update material balance in games with move confirmation enabled (#20904) by alexanderhu77
- Premove improvements:
- If the opponent in-between cannot capture the friendly piece in-between (whilst simultaneously getting out of the way), Lichess will now cancel the premove - prevents premoves like Qb3 & Qa2 in this example (#20843) by johndoknjas
- If a friendly pawn is on the destination square but it can be en passant captured, forbid the premove if the enemy pawn will then be blocking the path (#20826) by johndoknjas
- Visual enhancements:
- Made move destination dots crisper (#20936) by Simek
- Rearranged 4-column desktop lobby to emphasise feed (#20885) by Jon B. Gamble
- Changed heading on bots page for better visuals and readability (#21033) by superuser-does
- Delays for takeback offers are now separate for each player (#20969) by johndoknjas
- Updated the Rapid Increment Swiss time control from 7+2 to 8+2 (#20930 - follow the link for the thoughtful statistical analysis) by Frederico-Messa
Learning, analysis and puzzles (web)
- Added accuracy by phase to computer analysis display - see the quality of Opening/Middlegame/Endgame play at a glance! #20842 by XavierAgostino
- Studies:
- We now Force variation when the source plays a new move if synced with the source (#20839) by makeitworkrohit
- Aligned evaluation gauge and analysis panel with the board, polish practice dropdown (#20913) by BilgeGates
- Small appearance and style tweaks for study sidebar (#20875) by Simek
- Small visual tweaks for study create view from the game. Alter study buttons appearance, tweak alignment, add empty list placeholder. (#20860) by Simek
- Visual enhancements:
- Updated puzzle history appearance for Puzzle Storm and Racer (#21094) by Simek
- Improved readability on moves with type assigned (#21037) by Simek
- Difficult form for puzzles can now wrap (#21102) by Simek
- Centred evaluation and logo elements on mobile analysis (#21086) by AbhinavSajeev1
- Insights: do not display empty details sections, visual tweaks (#21051) by Simek
- Puzzle sidebar spacing visual adjustments (#20833) by Simek
- You can now hover on move evaluations for an indication of strength applied to computer analysis (#20914) by Jon B. Gamble
- Live annotation is now shown in studies when it is optionally enabled (#20893) by Jon B. Gamble
- Mobile views now get a first/last move button (#20874) by Simek
- The local evaluation gauge will not ignore server evaluation again (#20886) by Jon B. Gamble
Community and social (web)
- We now inform users by Lichess DM after an action is taken based on a report (commit)
- Teams:
- Team leaders can now send 8 messages per week, up from 7 (2b0a45a)
- External links inside round brackets with no blanks included in a team message were not hyperlinked but plain text (#20975) - updated so they now link out (in #21035) by thibault
- More Team Battle updates are permitted as long as they don’t change the start date (#20995) by benediktwerner
- Automated messages for tournament winners’ payouts (#21004) by fitztrev
- Users who had been marked for an offence and appealed, may now withdraw their appeals (#21061) by brollin
- Forum:
- Other visual enhancements:
- Small tweaks for user page buttons and dropdown (#20733) by Simek
- Improve inbox chat colors on old browsers (#20868) by Jon B. Gamble
- Define textcomplete dropdown shared style, appearance tweaks (#20834) by Simek
- Reduce slightly the follow/favourite icon size in the FIDE player view (#20992) by Simek
Watching (web)
- We reload the broadcast chapter before promoting game to main line, so that the chapter contains the new node of the game (c27e55a d10bb39)
- Variations in broadcasts are no longer forced when at the chapter root (#21072) by allanjoseph98
- You can now add
?pov=blackto broadcast game URLs to show them from Black’s perspective (79c95ea) by Thibault
General (web)
- The search box (top-right) now stays open after clicking it (#21095) by alexanderhu77
- Antichess World Cup 2025 trophy added (#20763, #20880, #20879) by acwc-trophy-poster-9000
- The font within the notification badge is now vertically centred (#20942, #20955) by Jon B. Gamble
- Better compatibility with older browsers:
- Translate more of the “contact” page (#21058) by yafred
Mobile app
Playing (app)
- The app now shows the arena tournament that game was/is played in (#3412) by HaonRekcef
- The clock tool’s last used time preference is stored (#3405) by dev-shady
Learning, analysis and puzzles (app)
- Added colour to the game analysis summary (#3477) by tom-anders
- Added game phase accuracies (Opening/Middlegame/Endgame) to server analysis summary (#3464) by tom-anders
- Made offline puzzle count configurable (#3454) by wernerhp
- Added “flip board” button to puzzle screen (#3448) by assassinaj602
- The app now stores your study sort order in preferences (#3223) by nirajk14
Community and social (app)
- Send notification to the mobile app for users following FIDE players (#20627) by julien4215
- Use Sentence case for messages and chat (#3478) by r4khul
General (app)
- Support many more preferences while signed out of the app (#3316) by MichaelSpece
- Improve app bar and menus. Among other things, this means the time control is properly aligned on every Android device now (#3459 by veloce , #3461 by Matrix9494
- Moves added to a broadcasted game are now in italics like elsewhere (#3170) by MaartenD
- Add a tooltip on long press for long player names (#3420) by someone who later deleted their GitHub account
- Add translations for short performance labels (#3436) by Matrix9494
- Show server outage/maintenance information (#3488) by veloce
- Add mobile notification for the end year recap (getting it ready already!) (#21050) by julien4215
Issues fixed
Fixed on both web and app
- Illegal values entered for a study tag could be submitted (#18656) - fixed by #20896 by alexanderhu77
- PGN imports were auto-drawn under certain conditions (fixed in #20927) by allanjoseph98
- In broadcasts, after one forced variation all subsequent moves stayed in variations (#21059) - fixed by #21067 by allanjoseph98
Fixed on web
- Pressing the Spacebar revealed the solution when reviewing mistakes (#20571) - fixed by #20859 by alexanderhu77
- Rated/casual buttons were not highlighted in green after mobile press - fixed in #21032 by johndoknjas
- The specified list of players in classes’ Swiss tournaments did not work (#20961) - fixed in #20980 by yafred
- Board oversized on Firefox for Android (#20844) - fixed in #21027 by Jon B. Gamble
- Puzzle racer track and scores did not display (forum, forum, forum) - fixed in #21085 by fitztrev
- A takeback rewound to the wrong move ply if the offering player moved again before it was accepted - fixed in #21044 by johndoknjas
- Study chapters kept stale default names and numbering after deletions or renames (#18969) - fixed in #20977 by alexanderhu77
- Ongoing analysis did not work for correspondence variants (forum thread) - fixed in #20985 by Jon B. Gamble
- Broadcast mainlines remained forced variations instead of being promoted (#20963) - fixed in #20965 by allanjoseph98
- The homepage donate button disappeared when the TV game changed (#20958) - fixed in #20970 by alexanderhu77
- Broadcast group selectors sometimes did not have a tournament name (#21019) - fixed in #21020) by allanjoseph98
- The analysis board settings dialog was broken on mobile browsers (#20923) - fixed in #20937 by Jon B. Gamble and #20935 by Simek
- Blog cards showed corner artifacts and the homepage carousel clipped card shadows - fixed by #20881 by brianhliou
- The top bar patron link UI was broken in short screen mode - fixed in #20882 by thibault
- The lobby went slightly off-screen on Firefox mobile (#20177) - fixed in #20769 by markoub
- Lobby filter appearance regressed after the visual and accessibility tweaks (regression from #20355) - fixed in #20858 by Simek
- The puzzle racer copy-to-clipboard input showed a blank value (value bind changed in #20777) - fixed in #20824 by fitztrev
- British English spelling was inconsistent on the contact page (“monetising” vs “monetizing”) (forum topic) - fixed in #21029 by yafred
- Eliminated more “shadow stacking” looks for nested elements (#20899) by Simek
- An attempt was made to add styles for native selects, if browser supports
base-select(#20982) by Simek
Fixed on the app
- Imported games did not show player names (#3485) - fixed in #3498 by GalaxyPhoenix716
- In interactive studies the opponent’s pieces could be moved when an explicit comment required tapping “Next” - fixed in #3499 by tom-anders
- A socket bug left a stale client reconnecting forever in the background - fixed in #3493 by veloce
- The strings to use for the game history display mode options were not translated even though translations existed (#3479) - fixed in #3492 by assassinaj602
- “Back to tournament” was not working (#2521) - fixed in #3426 by veloce
- Tapping a challenge notification opened the home screen instead of the challenge, and challenge notifications could be shown twice when the app was in the background - fixed by #3237 by julien4215
- The keyboard closed when typing any character in the chat screen (#3368) - fixed in #3417 by someone who later deleted their GitHub account
- Message bubbles had incorrect text padding and timestamp display - fixed by #3403 by vinayak-vikram
- Rematch did not work for finished correspondence games (#2089) - fixed in #3310 by twesk
- Rematch offers for correspondence games depended on the opponent being online (#1183) - fixed in #3310 by twesk
- iOS VoiceOver on the Create Game screen: “Time control” and “Variant” labels were not grouped with their inputs (#3328) - fixed in #3406 by madhaviGit
Technical changes
API
- Add phases to game export json (831767a)
- Update
StudyPgnexample + introduceBroadcastPgnschema. (#666) by ddobbelaere - Update broadcast grouping descriptions and example (#663) by tors42
- Fix
orientationparameter inPOST /api/study/{studyId}/import-pgn. (#665) by ddobbelaere - Document
flairanddescriptionparameters ofPOST /api/study. (#664) by ddobbelaere - document POST /bookmark/{gameId} (#655) by jadddon
- give mobile app access to study modification endpoints (#21045) by tom-anders
- Add permissions for Relay Stream (#21017) by SergioGlorias
- add round spotlight API endpoint (#20929) by fitztrev
- add tournament manager calendar API endpoint (#20895) by fitztrev
- add event calendar API endpoint (#20890) by fitztrev
lila
- Crowdin translations are now a proper GitHub action:
- set up crowdin integration using github action (#20908) by fitztrev
- crowdin sync updates (#20915) by fitztrev
- show trans-lint errors at the end of output (#21002) by fitztrev
- Don’t run crowdin GH actions on forks (#21005) by allanjoseph98
- guard
translation/destfiles against non-Crowdin changes (#21071) by fitztrev - refactor preview workflows (#21113) by fitztrev
- improve css with Simek’s flex: 1 suggestion for columns (#20959) by Jon B. Gamble
- github actions: move docker build + publish to separate workflows (#21100) by fitztrev
- lint: add consistent type assertions rule, avoid casting (#21097) by Simek
- ui: remove unused piece opacity attribute (#21098) by Simek
- Update .scala-steward.conf follow pekko migration (#21092) by lenguyenthanh
- prevent deploy of workflow_dispatch run (#21089) by fitztrev
- build docker images on PR label (#21088) by fitztrev
- fix lint and asset build (#21090) by fitztrev
- Remove reactivemongo shaded dependency (#21084) by lenguyenthanh
- Sanity check for cloud eval (it’s a jungle out there) (#20920) by Jon B. Gamble
- Inlining scala steward (#21076) by lenguyenthanh
- workspace: enable consistent returns lint rule (#21074) by Simek
- ui(storm): refactor to use tag helpers, small tweaks (#21073) by Simek
- Move players download URL to a config value (#21069) by fitztrev
- update github action step versions (#21070) by fitztrev
- Correct and tune reactivemongo’s pekko config (#21065) by lenguyenthanh
- ui(racer): refactor views to use element tags (#21054) by Simek
- workspace: bump scalafmt to get some recent performance optimizations (#21057) by Simek
- ui: add table tag helpers, migrate one example view (#21049) by Simek
- ui: allow nested children arrays in tag helpers (#21031) by Simek
- ui: add
optgrouptag, replace per module helpers (#21030) by Simek - Add Bravebot to crawlerMatcher regex (#21023) by SergioGlorias
- ui: use
onInserthook helper in few more places (#21026) by Simek - ui: replace
iconClsandiconTagwith commoniconcustom element (#21024) by Simek - Add ‘kagi-fetcher’ and ‘kagibot’ to crawlerMatcher (#21018) by SergioGlorias
- ui: add custom HTML element helpers for Snabbdom (experiment) (#20916) by Simek
- workspace: update pnpm to the latest version available for NixOS (#21012) by Simek
- switch fishnet auth from body to bearer (#21001) by niklasf
- ui: do not convert numbers to strings for snabbdom render (#20964) by Simek
- workspace: bump OXC tools, fix new errors, reformat files (#20962) by Simek
- Fix AnnotatorTest to pass real opening data (analyse & fishnet) (#20986) by khemssharma
- remove redundant guards (#20983) by Jon B. Gamble
- Improve Event.oldJson performance and allocation (#20981) by lenguyenthanh
- Stack safe
String.safeJsonValue(#20972) by lenguyenthanh - ui: small view code tweaks, few more
onInserthelper uses (#20925) by Simek - ui: enforce context notation for media queries (#20940) by Simek
- ui(puzzle): small tweaks and cleanup of view code (#20922) by Simek
- fix build (#20943) by Jon B. Gamble
- ui: fix format after recent code changes (#20917) by Simek
- ui: reuse
onInserthelper in few more places (#20907) by Simek - ui: analyse code clean and redability tweaks (#20889) by Simek
- ui[analysis]: remove unused Snabbdom module, small code tweaks (#20900om/Simek)
- Fix invalid links in documentation (#20897) by alexanderhu77
- Remove ‘unnecessary type conversion’ rule from linter config (#20822) by Jon B. Gamble
- workspace: fix dependencies check script, align node types (#20887) by Simek
- Update snabbdom dependency (#20871) by paldepind
- fix pre-commit (#20877) by Jon B. Gamble
- ui: render site message body in fragment instead of paragraph (#20861)m/Simek)
- delete unused toggle (#20857) by allanjoseph98
- Remove ElementBuilderLike implicit class (#20854) by lenguyenthanh
- Migrate from ui/build color mixing to modern css color syntax (#20848) by Jon B. Gamble
- ui: few code tweaks stashed earlier, or based on IDE static analysis (#20845) by Simek
- Remove unused twirl sbt plugin (#20835) by lenguyenthanh
- don’t add a fake TV in development builds if there’s a real one (#20941) by Jon B. Gamble
- Bump liplay 3.0.4 (#20840) by lenguyenthanh
- Bump liplay 3.1.0 (#20851) by lenguyenthanh
- Bump liplay 3.2.0 RC3 to revert usages of Handler (#21039) by lenguyenthanh
- Migrate to pekko 1.6.0 (#20966) by lenguyenthanh
Mobile
- Add missing type to mobile broadcast notifications (#21066) by julien4215
- Remove friends carousel sort (it is done server-side) (#3388) by veloce
- Fix typos in documentation (#3494) by alexanderhu77
- docs: fix two broken links (#3486) by ZayanKhan-12
- add some _stopwatch.stop() to coordinates training (#3428) by someone who later deleted their GitHub account
- Removing circular dependencies of auth_controller and tab_scaffold (#3443) by GalaxyPhoenix716
- [codex] Upload debug APK from manual builds (#3392) by MichaelSpece
- Prevent the following carousel from making unauthenticated network requests (#3430) by someone who later deleted their GitHub account
- chore(logging): pass exceptions as args to Logger (#3424) by lsaudon
- Add a comment to clarify code on conversation screen (#3444) by julien4215
- Add query parameters to getOnlineBots API call (#3263) by ComradeRamen
- chore: replace sizeOf by heightOf or widthOf (#3408) by lsaudon
- Remove pin on file_picker package (#3398) by julien4215
- Add preview flavor (#3396) by julien4215
Misc.
- lila-gif: add totoy and papercut piece sets (#230) by niklasf
- lila-ws: Evalcache mate sanity (#884) by allanjoseph98
- pgn-viewer: inherit background color from move type when active (#74) by Simek
- pgn-viewer: Show starting comments before moves in variations (#70) by Jon B. Gamble
- Database exports now include draw offer comments (32ee1fa)
- database: export puzzle “day” field for daily puzzles (#93) by allanjoseph98
- chess-openings: add some C54 lines (#384) by jdart1
- chess-openings: Add a C89 line (#385) by jdart1
- chess-openings: add some QGD Orthodox lines (#383) by jdart1
- chess-openings: Add E54 line (#382) by Chess4757
- chess-openings: add some Tarrasch and Semi-Tarrasch lines (#378) by jdart1
- chess-openings: add some QGA lines (#377) by jdart1
- chess-openings: add some B14 lines (#376) by jdart1
- chess-openings: add some D03 lines (#375) by jdart1
- chess-openings: Add a Delayed Alapin line and a C09 line (#374) by jdart1
- chess-openings: Add C47 line (#373) by Chess4757
- chess-openings: Add Basque Opening A45 line (#372) by Chess4757
- chess-openings: Add some A41 lines (#371) by Chess4757
- chess-openings: Add QGD and QGA lines (#370) by jdart1
- chess-openings: add some A37 lines (3 Knights Variation) (#369) by jdart1
- chess-openings: Add a D31 line (#367) by Chess4757
- chess-openings: Added A35 Keres-Parma System (#365) by Mega-Noob-1337
- chess-openings: Added A80 Barcza Variation (#364) by Mega-Noob-1337
- chess-openings: add some A25 and A29 lines (#361) by jdart1
- chess-openings: Added E01 Tarrasch defense line (#360) by Chess4757
- chess-openings: Add some B22 lines (#358) by Chess4757
- chess-openings: feat: integrate English Opening transpositions to Catalan, Neo-Grünfeld, and Tarrasch (#357) by AyushSinha2603
- chess-openings: add some QGA and QGD lines (#355) by jdart1
- chess-openings: Fix Pterodactyl Defense lines (#351) by fynsta
- database: Update index.html.tpl (#94) by Bonifratz
- database: Add chess openings tab (#84) by cakiki
- fishnet: remove auth from body (#298) by niklasf
- fishnet: debounce progress reports (#297) by niklasf
- lila-db-seed: Feature seeded blog posts so homepage carousel has content (#84) b.com/philipmk42)
- lila-db-seed: add Event seeder (#83) by fitztrev
- lila-fishnet: remove client key from body (#628) by lenguyenthanh
- lila-fishnet: Read fishnet key from bearer (#625) by lenguyenthanh
- lila-openingexplorer: Add admin api route to update cf_masters_game (#327) by cakiki
- liplay: Revert handler (#40) by thibault
- liplay: Handler removal follow up (#38) by lenguyenthanh
- liplay: Migrate akka to pekko (#35) by lenguyenthanh
- liplay: Fix compilation warnings (#31) by lenguyenthanh
- liplay: Remove java inject dependency (#27) by lenguyenthanh
- liplay: Remove akka http dependency left over (#25) by lenguyenthanh
- liplay: Remove unused and unimplemented Router.withPrefix (#20) by lenguyenthanh
- liplay: Remove unused imports (#19) by lenguyenthanh
- liplay: Remove code unused (round 6?) (#18) by lenguyenthanh
- liplay: More unused code (#17) by lenguyenthanh
- liplay: Remove Reflect config helpers (#16) by lenguyenthanh
- liplay: Remove core inject package (#10) by lenguyenthanh
- liplay: Remove unused code round 3 (#9) by lenguyenthanh
- papers: Update code for bread emoji (#10) by lenguyenthanh
- scalachess: Fix DestinationsBench: rebuild Position per invocation (#867) by lenguyenthanh
- scalachess: Improve move generator performance and allocations (#866) by lenguyenthanh
- stockfish-web: wasm-cli: just use built-in readline history, cleanly handle engine shutdown (#23) by niklasf
Maintenance
- chessground: upgrade pnpm to v11, align lint stack with lila (#392) by Simek
- Upgrade stockfish to latest versions
- lila-db-seed: add devenv
seedcommand to run seeder (#82) by fitztrev - lila-fishnet: Grouping scala-steward patch update (#629) by lenguyenthanh
- lila-fishnet: Set universal target ouput static (#627) by lenguyenthanh
- lila-fishnet: Bump dependencies (#626) by lenguyenthanh
- lila-openingexplorer: prepare docker image (#325) by fitztrev
- lila-search: Bump deps (#844) by lenguyenthanh
- lila-search: Grouping scala-steward patch update (#843) by lenguyenthanh
- lila-search: Bump play-ws 3.0 (#832) by lenguyenthanh
- lila-search: Support jitpack sbt 2 (#833) by lenguyenthanh
- lila-search: Bump fs2-data 1.14.1 (#831) by lenguyenthanh
- liplay: Bump netty-reactive-streams-http 3.1.0-M1 (#26) by lenguyenthanh
- liplay: Re-introduce build-info plugin (#8) by lenguyenthanh
- stockfish-web: implement –pgo (#24) by niklasf
- stockfish-web: verify bench in ci (#21) by niklasf
June 2026
Mobile App
- Add home friends widget (#3156) by HaonRekcef
- Add new "Move on release" board setting (#3356), (#99) by veloce
- Add delay clock modes and unify local clock setup UI (#3122) by Matrix9494
- Add spectator chat for games (#3131) by tom-anders
- Add board editor deep link support (#3330) by CloudyDino
- Add broadcast team results (#3288) by HaonRekcef
- Add several
ref.mountedchecks for safety (#3269) by ghost - Add support for sharing PGN on iOS (#3255) by veloce
- Add Totoy piece set (#97) by kokokosal
- Sync study
promoteVariationwith the server (#3280) by tom-anders - Navigate to user profile on spectator name tap (#3240) by adharshio
- Display the different lines in the variation bar (#3176) by HaonRekcef
- Implement socket resend on open (#3387) by veloce
- Use refresh icon for 'New Streak' button in puzzle streak (#3375) by Zinkelburger
- Replace
SizedBoxwithConstrainedBoxinEngineLinesto display bigger fonts (#3379) by JacekJanur - Link usernames in the analysis summary table to user profiles (#3340) by CloudyDino
- Show opening name in broadcast and study opening explorer (#3320) by CloudyDino
- Refine analysis appbar header format for finished games (#3319) by CloudyDino
- Localize chess mode labels (#3279) by Matrix9494
- Show player age relative to the broadcast tournament date (#3308) by CloudyDino
- Polish app bar scroll behavior (#3300) by Matrix9494
- Localize 'Good move, but there's better' verdict (#3307) by CloudyDino
- Clamp displayed centipawn evaluations to +/-99 pawns (#3306) by CloudyDino
- Mirror lila's
translateDurationfortoDaysHoursMinutes(#3311) by CloudyDino - Show a toast when a user does not accept challenges (#3312) by CloudyDino
- Better localize broadcast player tab (#3286) by HaonRekcef
- Improve broadcast team screen (#3298) by HaonRekcef
- Guard Crowdin pull jobs by repository owner (#3246) by lsaudon
- Remove unused files and exports (#3253) by ghost
- Explicitly tell the Play Store we support various screens (#3178) by ghost
- Use a system auth session to login (#3270) by veloce
- Localize speed and variant labels (#3249) by Matrix9494
- Add script to convert SVGs to WebP format (#101) by SergioGlorias
- Convert PNG pieces to WebP (#100) by SergioGlorias
- Boards: Replace PNG assets with WebP format for improved performance and reduce file size (#98) by SergioGlorias
- Send the same data to Unified Push than the one sent to Firebase Messaging (#20497) by julien4215
- Add mobile callback URL to app associations (#5) by fitztrev
- Remove dead code (#3386) by lsaudon
- Don't use a dialog for opponent left actions (#3385) by veloce
- Remove
flutter_secure_storage_linuxoverride, fix is upstream (#3376) by lsaudon - Update
lichessFlagSrcto use WebP format for flag assets (#3352) by SergioGlorias - Sort language picker by native name (#3354) by CloudyDino
- Replace PNG images with WebP format for federation logos (#3353) by SergioGlorias
- Replace PNG Stockfish icon with WebP format (#3351) by SergioGlorias
- Replace PNG logos with WebP format (#3350) by SergioGlorias
- Replace PNG broadcast image with WebP format for improved performance and fix radio tower (#3349) by SergioGlorias
- Automatically expand the current children node (#3185) by HaonRekcef
- Small tweak to a few files (#3228) by ghost
- Guard async callbacks with ref.mounted to prevent use-after-dispose (#3329) by CloudyDino
- Chore: Remove unused code (#3299) by lsaudon
- Chore: Update Flutter 3.44.3 & deps, use private named parameters (#3377) by lsaudon
- Chore(iOS): Add Swift Package Manager (#9) by lsaudon
- Fix UserTV advancing to next game (#3395) by HaonRekcef
- Fix a race condition in evaluation_service (#3370) by ghost
- [Codex] Fix manual iOS build workflow (#3366) by MichaelSpece
- Fix list length when lichess account is filtered out (#3373) by HaonRekcef
- Fix bug where the check indicator was not showing up when spectating a game by adding an optional position parameter to
ReadOnlyBoardParams(#3331) by OddSteak - Fix crash in perf stats columns when a perf has zero games (#3332) by CloudyDino
- Fix OTB clock continuing to run after game-ending move (#3347) by CloudyDino
- Fix 2 bugs in evaluation_service, with tests (#3327) by ghost
- Fix game GIFs (#3305) by HaonRekcef
- Fix connectivity log printing function reference instead of result (#3309) by lsaudon
- Fix isTyping displaying if different user is typing (#3313) by HaonRekcef
- Fix parsing of ongoing games in team results (#3277) by HaonRekcef
- Fix: Prevent eval string wrapping on tablet via FittedBox (#3216) by algojogacor
- Fix last move highlights in offline games (#3257) by Matrix9494
- Fix promotion in Crazyhouse (#96) by HaonRekcef
Site
- Add copy-to-clipboard button to FEN field in board editor (#20777) by Zinkelburger
- Add Helix editor flair (#20680) by brabli
- Add mobile OAuth callback route (#20591) by fitztrev
- Give visible hint about hover help (#20792) by Jon B. Gamble
- Persist computer setup color (#20751) by markoub
- Move analysis settings from action menu to new dialog and account prefs (#20644) by Jon B. Gamble
- Show daily puzzle banner when viewing puzzle via
Puzzle.show(#20709) by fitztrev - Display reason (and culprit) when game is aborted (#20518) by yafred
- Reduce top edge of button and hover box shadows a bit (#20805) by Jon B. Gamble
- Make help popups full device width on mobile (#20759) by Jon B. Gamble
- Disable suggestions on ublog and forum body edit/reply forms (#20742) by Jon B. Gamble
- Use theme-aware SVG favicon (#20727) by markoub
- Use icons instead of flair assets for UI elements (#20692) by fitztrev
- Favour openings whose names begin with the user's search query (#20683) by johndoknjas
- Unset bio on Kid mode (#20671) by fitztrev
- Use the parent's evaluation of a pv move when auto-annotating, if available. (#20639) by johndoknjas
- Don't draw heavy box shadows in transparent theme (#20592) by Jon B. Gamble
- Friendlier ceval engine names (#20547) by Jon B. Gamble
- Re-enable selection quoting in forums (#20549) by Jon B. Gamble
- Update change/cancel patron copy (#20567) by brollin
- [#19359] Always load evaluation chart on analysis completion (#20075) by ElCresp0
- Appeal: Explicit date display when writing
in ... months(#20527) by kraktus - Rename Budapest Defense to Budapest Gambit + polishing (#342) by Mega-Noob-1337
- Rename Stafford Gambit continuations after acceptance (#336) by AyushSinha2603
- Flags WebP (#20697) by SergioGlorias
- Update profanity filter (#20690) by ddugovic
- Use stockfish-web 0.4.0 (upstream WASM in sf_dev, faster start) (#20638) by niklasf
- Premoves: Friendly on dest with piece in between (#20806) by johndoknjas
- Dismiss promotion choice when rewinding round moves (#20750) by markoub
- Actionable messages on broken color strings (#20795) by Jon B. Gamble
- Do not prefer evals that have greater depth but less nodes (#20721) by johndoknjas
- When the number of anon spectators changes, update the spectator list as well (rather than only the count). (#20673) by johndoknjas
- Force chessground sync with the latest step from lila-ws (#20656) by Jon B. Gamble
- Unset transp box-shadow without raising unrelated selector specificity (#20654) by Jon B. Gamble
- Broadcasts: Always calculate team points for "Teams" tab locally (#20745) by allanjoseph98
- Broadcasts: Check score group parallelism when computing team leaderboards (#20517) by allanjoseph98
- Broadcasts: Count only finished relay team matches (#20731) by markoub
- Broadcasts: Fix color of results in player's games screen in events with custom scoring (#20561) by [allanjoseph98](https://github.com/allanjoseph98
- Broadcasts: Fix contributors being able to unset grouping fields of official broadcasts (#20581) by allanjoseph98
- Broadcasts: Fix calendar
mselectclipped by box overflow (#20725) by kwyj1bo - chess-openings: Add A00 Schuehler Gambit (#350) by Mega-Noob-1337
- chess-openings: Add D00 Duthilleul Gambit (#349) by Mega-Noob-1337
- chess-openings: Add some B90 lines (#339) by Chess4757
- chess-openings: Add Neo-Catalan transposition to King's Indian Attack: Yugoslav Varia... (#335) by AyushSinha2603
- chess-openings: Add some A12 lines (#331) by Chess4757
- chess-openings: Add various opening lines with .. c6 and .. Bg4 (#327) by jdart1
- chess-openings: Add D00 Pfrang Gambit (#338) by Mega-Noob-1337
- chess-openings: Add some C50 lines and a C55 line (#337) by jdart1
- UI: Add missing board contrast filter in transparent theme (#20623) by Simek
- UI: Fix move expiration text blur in picture theme (#20622) by Simek
- UI: Fix daily feed form emoji overflow (#20636) by Simek
- UI: Apply custom cursor only over main board in board editor (#20801) by Simek
- UI: Only expand toggle box padding when toggle is enabled (#20767) by Simek
- UI: Use form3 native checkboxes in simul form (#20766) by Simek
- UI: Toggle box element visual tweaks (#20737) by Simek
- UI: Fix broken hover style of cmn toggle in picture theme (#20735) by Simek
- UI: Keep ceval pv-board popup visible with 5 multipv lines (#20556) by BilgeGates
- UI: Visual tweaks for the rating history time range slider (#20625) by Simek
- UI: Small readability tweaks for the user rating history chart (#20624) by Simek
- UI: Align Learn and Practice stages page layouts (#20732) by Simek
- UI: Show play duration in hours on hover in user page (#20764) by Simek
- UI: Add links to Webmasters page for easier instruction sharing (#20739) by Simek
- UI: Unify optional properties type definitions (#20821) by Simek
- UI: Remove duplicate mobile helper (#20820) by Simek
- UI: Re-enable few Stylelint rules, fix warnings, style tweaks (#20812) by Simek
- UI: Small type/code arrange tweaks for UI bits (#20809) by [Simek]
- Add Take Take Take branded auth flows (#20791) by brynjagr
- Property handle #0 when embedding a study chapter in a blog post (#20594) by yafred
- Live client analysis: never annotate the best move as bad (#20577) by johndoknjas
- Coerce undefined to boolean to fix study engine property (#20816) by Jon B. Gamble
- Update profanity filter (false positive - hangi) (#20707) by ddugovic
- Tweak profanity filter (fix lichess-org/lila#20614) (#20616) by ddugovic
- Fix: Piece maneuver arrows settings defaulted back to off (#20807) by raymondzh
- Fix Simul page layout on Safari (#20613) by PawelPlutaUek20
- [Embed] Adapt automove if first ply is not 1 (#20602) by yafred
- Fix playability thresholds for LFYM, practice, and study practice (#20598) by Jon B. Gamble
- Fix embedded puzzle start button sizing (#20716) by markoub
- Fix: Start ceval after reload data in analysis board (#20713) by PawelPlutaUek20
- Fix rematch challenge for mobile and after cancel/decline (#20645) by twesk
- Fix: "Opening explorer" always loading after a cached move (#20610) by PawelPlutaUek20
- Fix: Prevent rating chart slider year labels from overlapping content below. (#20655) by kwyj1bo
- Fix mobile scrolling for FIDE player tables (#20522) by Mheet
- Fix "Yates Variation" parent (#346) by Mega-Noob-1337
- Fix analysis settings defaults (#20743) by Jon B. Gamble
- Fix analysis settings on mobiles with hover & coarse pointer (Samsung, etc) (#20746) by Jon B. Gamble
API
- Add GET /api/puzzle/many batch endpoint (#20779) by Zinkelburger
- Add ceval engine output to browser extension API (#20772) by Jon B. Gamble
- Docs: Add broadcast round form
teamCustomScoring(#650) by allanjoseph98 - Docs: Add litchee (Rust) to the API clients list (#651) by obazin
- Don't throttle ceval for extension API (#20813) by Jon B. Gamble
- Fix 500 error for
/api/puzzle/batch/{angle}endpoint (#20532) by fitztrev
Accessibility
Internationalization
- Translate mobile pages (#20595) by fitztrev
- Preload preferences i18n for broadcast embed (#20776) by wesselvankessel
- Preload preferences i18n for embedded analysis (#20749) by markoub
- Sort language options alphabetically by name instead of code (#20660) by kwyj1bo
- Use translation key for 'Anonymous' in spectator list. (#20674) by johndoknjas
Miscellaneous
- Add sbt-bloop plugin back to project/plugins.sbt (#20814) by Jon B. Gamble
- Add username and HTTP version to debug dialog (#20662) by fitztrev
- Add automod.quality to generated blog posts (#78) by Jon B. Gamble
- Support logging for requests to elasticsearch (#808) by lenguyenthanh
- Twilio + Zulip integration (#2) by fitztrev
- Facilitate manual tsc and get rid of editor squigglies in test sources (#20771) by Jon B. Gamble
- Use reusable workflow for preview deploys (#20817) by fitztrev
- Reduce usage of
any, several simple cases (#20786) by Simek - Improve PeerJS voice chat types (#20783) by Simek
- Strongly typed socket communication for simul (#20785) by Simek
- IRC lichessLink markdown to use
net.baseUrl(#20762) by fitztrev - Migrate to sbt 2.0.0 (#20703) by lenguyenthanh
- Eval comparison cleanups (#20708) by johndoknjas
- Remove unused flair images (#20694) by fitztrev
- Change LiconType from a union of 123 string literals to a string alias. (#20648) by Jon B. Gamble
- Tackle slop DMCA reports by disallowing /study/search endpoint from being indexed (#20668) by superuser-does
- Read Firebase config from JSON file (#20672) by fitztrev
- Puzzle finisher: Make puzzle update fire-and-forget (#20637) by fitztrev
- Interpret file rename overwrites as change events (#20534) by Jon B. Gamble
- Local analysis pre-req #1: Fix dynamic i18n fetch mechanism (#20519) by Jon B. Gamble
- Local analysis pre-req #2: Improve tree node typing (#20510) by Jon B. Gamble
- Local analysis pre-req #3: Deconflict analysis function names (#20525) by Jon B. Gamble
- Local analysis pre-req #4: Simplify and harden ceval (#20540) by Jon B. Gamble
- Query string code golf (#20599) by fitztrev
- Use reusable action for deploy (#7) by fitztrev
- Merge scala2 into scala3 (#19) by lenguyenthanh
- Simplify meta build and workflow (#10) by lenguyenthanh
- Migrate sbt-plugin to sbt-2 and remove load of stuff (#8) by lenguyenthanh
- Force jitpack to download and use sbt 2.0.0 (#852) by lenguyenthanh
- Improve stack safety for some of Node's functions (#851) by lenguyenthanh
- Prevent repeating dashes in slugs (#172) by fitztrev
- Bypass tight looped atomic writes in Search::Worker::clear. (#17) by Jon B. Gamble
- liplay: Scalafmt with lichess config (#1) by lenguyenthanh
- liplay: Fix more compilation warnings (#2) by lenguyenthanh
- liplay: Update CI workflow to ignore specific paths (#3) by SergioGlorias
- liplay: Remove unused dependencies and code (#4) by lenguyenthanh
- liplay: Support build with jitpack (#5) by lenguyenthanh
- liplay: Add snapshot tests for routes compiler (#6) by lenguyenthanh
- liplay: Remove more unused code round 2 (#7) by lenguyenthanh
- Lint: Add
typescript/prefer-optional-chainrule, fix warnings (#20788) by Simek - Lint: Add
typescript/no-unnecessary-type-conversionrule, fix typo (#20787) by Simek - Lint: Re-enable two lint rules, fix warnings (#20784) by Simek
- Workspace: Add two performance oriented lint checks (#20811) by Simek
- Workspace: Add few import related lint rules (#20810) by Simek
- Workspace: Add few lint rules, fix warnings (#20753) by Simek
- Workspace: Add object-shorthand rule, fix warnings (#20661) by Simek
- Workspace: Disable SBT v2 banner (#20768) by Simek
- Workspace: Update pnpm and OXC tools to latest in NixOS registry (#20634) by Simek
- Update Node.js version to 24.15.0 (#20642) by SergioGlorias
- Update Snabbdom dependency (#69) by paldepind
- Update
sf_devtodev-20260609-415ff793with upstream WASM support (#18) by niklasf - Remove unused code for notifications (#20626) by julien4215
- Remove any existing handlers before adding new ones. (#20620) by johndoknjas
- Remove SBT_OPTS env from GitHub Action (#20590) by fitztrev
- Bump dependencies (#806) by lenguyenthanh
- Bump scala 3.8.4 (#11) by lenguyenthanh
- Bump logs dependencies (#9) by lenguyenthanh
- Bump playframework-lila 3.23 (#20797) by lenguyenthanh
- Bump scalachess 17.5.7 (#20796) by lenguyenthanh
- Fix sbt implicit warnings (#20778) by lenguyenthanh
- Fix unreachable tip in run_ui_build (#211) by thiasbu
- Fix wrong vapid public key (#212) by julien4215
- Fix deploy scripts and workflow after sbt 2 (#807) by lenguyenthanh
- Fix: Include stalemates and insufficient-material claims in Draw searches (#786) by GeorgePatrascan
- Fix compilation warnings (#12) by lenguyenthanh
May 2026
Mobile App
- Add broadcast team screen (#3205) by HaonRekcef
- Add tournament description (#3195) by HaonRekcef
- Improve PGN loading speeds (#3188) by HaonRekcef
- Faster game screen (#3230) by veloce
- Add iOS broadcasts widget (#3007) by r3econ
- Add quick rematch with friends (#2985) by MaartenD
- Add alphabetical sort toggle to puzzle openings screen (#3045) by adharshio
- Add a tab indicator to analysis bottom tabs to make them more discoverable (#3090) by tom-anders
- Add numbers to the broadcast game filters (#3082) by HaonRekcef
- Improve puzzle history screen timing and grouping (#3175) by fahadahmed32
- Allow aligning the board on the right in tablet landscape mode (#3070) by tom-anders
- Add "small board" option (again), reduce "small screen" detection threshold (#3157) by tom-anders
- Add PGN labels tab on broadcast game screen (#3010) by MaartenD
- Add ECO code on openings explorer (#3120) by MaartenD
- Delay engine move until piece animation completes part 2 (#3166) by eloiblt
- Support requesting server analysis for study chapter (#3048) by tom-anders
- Display added moves after game in Italic (#3031) by MaartenD
- Delete blocked private messages (#3030) by MaartenD
- Update country list to the same as server (#3104) by SergioGlorias
- Show 0.0 on engine evaluation gauge in neutral positions (#2879) by flcsezz
- Be sure to properly cancel and dispose the
Retrotimer (#3088) by freebeartogoodhome - Add some mounted checks before
setState, after usingawait(#3144) by freebeartogoodhome - Refactor
online_friendsandfriend_screento prevent a hang (#3135) by freebeartogoodhome - Replace generic analysis board header (#3189) by HaonRekcef
- Update
MediaQueryin some files to avoid unnecessary rebuilds (#3095) by freebeartogoodhome - Small cleanup of misused set literals (#3085) by freebeartogoodhome
- Make it clear when socket is disconnected during a game (#3167) by veloce
- Implement separate function for editor board clearing logic (#3153) by fahadahmed32
- Simplify
significantColorsinimage.dart(#3165) by freebeartogoodhome - Change two typos in variable names (#3159) by freebeartogoodhome
- Deeplink support for player stats in tournament (#3217) by fahadahmed32
- Correct
debugPrinttypo inwatchTvWidget(#3215) by freebeartogoodhome - Minor changes to
_formDatainedit_profile_screen(#3203) by freebeartogoodhome - Replace connectivity
DebouncerwithThrottlerinConnectivityChangesNotifier(#3202) by YairAndrade1 - Make viewer badge less visible + Zen Mode respected while playing (#3081) by HaonRekcef
- Compress and add new FIDE federation images (#3220) by SergioGlorias
- Add
ServerAnalysisMixin(#3068) by tom-anders - Remove
BuildContextfrombuildRoutesignatures across the app (#3147) by freebeartogoodhome - Remove Firebase stubs (#3149) by julien4215
- Small fix to
broadcast_list_tile(#3214) by freebeartogoodhome - Small fix for
live_tv_channels_screen(#3213) by freebeartogoodhome - Fix: Broadcast games screen result display when points scored is 0.5 and not a draw (#3250) by allanjoseph98
- Fix: 2 bugs in evaluation_service (#3231) by freebeartogoodhome
- Fix: Broadcasts result showing "½" when points scored was 0 (#3247) by allanjoseph98
- Fix: Android login issues (#3236) by freebeartogoodhome
- Fix: Zen Mode toggle not persisting across games (#3233) by goutham80808
- Fix:
showTenthsin duration.dart (#3244) by HaonRekcef - Fix: handle drop moves in crazyhouse TV (#3225) by tom-anders
- Fix variant handling in explorer and tablebase (#3173) by Matrix9494
- Fix: Markdown line break for broadcast overview (#3196) by HaonRekcef
- Fix: Add site PGN label to broadcasts PGN labels (#3192) by MaartenD
- Fix: Game not found in opening explorer (#3006) by MaartenD
- Fix account menu on iOS transparent background (#3103) by veloce
- Fix: Restore Android sign-in by routing OAuth callback through a trampoline activity (#3091) by veloce
- Fix: Use spacing parameter instead of custom spacing (#3172) by tom-anders
- Fix: Add event pgnlabel to broadcast PGN labels (#3169) by MaartenD
- Fix: Remove site and event from broadcast pgnlabels (#3138) by MaartenD
- Fix: Apply piece notation font and padding scroll in
move_liststacked mode (#3132) by lsaudon - Fix correspondence clock reset issue (#3005) by MaartenD
- Fix: Opening Explorer not recognize right move book off FEN (#3084) by MaartenD
- Fix: FEN import ignores side to move (#3117) by MaartenD
- Fix: Promotion correspondence with confirm overlay issue (#3119) by MaartenD
- Fix move list padding in scroll view (#3107) by lsaudon
- Fix iOS daily puzzle widget with Clear or Tinted icons (#3112) by veloce
- Fix best move arrow not shown when engine lines set to zero (#3100) by MaartenD
- Fix
gestures_exclusionssendingnullto Android (#3097) by freebeartogoodhome
Site
- Add Totoy piece set (#20477) by kokokosal
- Add live move annotations using local eval (#20453) by Tebro
- Add new FIDE feds (#20436) by allanjoseph98
- Add etiquette button for new forum topics (#20414) by AaronTimony
- Add placeholder to forum post and reply text areas (#20413) by AaronTimony
- Different default orders for different study groups (#20478) by johndoknjas
- Play explosion sound on atomic variant captures in analysis (#20366) by Berat121
- Apply background to active puzzle vote buttons immediately upon clicking (#20433) by fitztrev
- Prevent material diff from blocking header dropdown hover (#20407) by Berat121
- Broadcasts: Always compute and send player ranks (#20543) by allanjoseph98
- Broadcasts: Grouping form ease of life features (#20505) by allanjoseph98
- Broadcasts: Add regulations fields to
RelayTourand related components (#20468) by SergioGlorias - Broadcasts: Show flags and translate team names in
RelayTeamLeaderboard(#20398) by allanjoseph98 - Broadcasts: Fix custom scoring issues (#20542) by allanjoseph98
- UI: Only highlight active filters icon in lobby view (#20515) by Simek
- UI: Add powertip horizontal nudge logic on collision (#20503) by Simek
- UI: Improve
ublogaction buttons (#20489) by Simek - UI: Remove debug logs and guard download API path in gamesDownload (#20480) by borkwo
- UI: Improve explorer config selectors appearance (#20450) by Simek
- UI: Move history hover state tweak for light mode (#20393) by Simek
- UI: Use
fenColorhelper instead of inline checks (#20457) by Simek - UI: Few more legacy icon tag replacements (#20432) by Simek
- UI: Do not use deprecated
e.which, replace with modern equivalents (#20418) by Simek - UI: Introduce
LiconType, use icon helpers in more places (#20401) by Simek - UI: Introduce
plyColorandplyOpponentColorhelpers (#20394) by Simek - UI: Small visual tweaks for the bots page (#20387) by Simek
- UI: Small lib code tweaks (#20465) by Simek
- UI: Small improvements for team page, introduce
box-borderedhelper (#20553) by Simek - UI: Small improvements for team list page (#20554) by Simek
- UI: Small visual tweaks for round table and child elements (#20504) by Simek
- UI: Tweak lint setup, fix dependency cycles (#20384) by Simek
- UI: Fix lobby timeline time shift on hydration and overflow (#20516) by Simek
- UI: fix meta + digit key strokes, avoid throwing on unset key (#20431) by Simek
- UI: Visual and
a11ytweaks for lobby filters (#20355) by Simek - Revert mousetrap binding change (#20467) by PawelPlutaUek20
- Some tweaks to
isShouting(#20481) by johndoknjas - Fix alpha 2 codes for Bahrain (#20574) by allanjoseph98
- Fix take sound on non captures (#20512) by johndoknjas
- Fix: Handle focus-within of the forum reactions in Safari (#20484) by PawelPlutaUek20
- Fix: Relay/Study player federation error (#20434) by allanjoseph98
- Fix temporary accuracy spikes during game review computation (#20415) by johndoknjas
- Fix: prevent turn order desync caused by duplicate PGN variations (#20352) by kwyj1bo
- Fix:
can't access property "compute", this.protocol is undefined(#20353) by PawelPlutaUek20 - Fix: Autoplay repeatedly attempts to move even when
preventGoingToNextMove()is true (#20546) by rojuslukauskas - chess-openings: Add some Stafford Gambit C42 lines (#332) by Chess4757
- chess-openings: Add contributing instructions (#321) by cakiki
- chess-openings: Add some D02 lines (#326) by Chess4757
- chess-openings: Add some D05 lines, and a related E14 line (#324) by jdart1
- chess-openings: Add missing D72 and D73 entries in
d.tsv(#323) by jaylawl - chess-openings: Add B10 line (#319) by Chess4757
- chess-openings: B77 fixes (#322) by Chess4757
- chess-openings: Update C78 Møller Variation and Neo-Arkhangelsk Variation (#318) by Panthee
- chess-openings: Rename "Sicilian Defense: Najdorf Variation, Freak Attack" to Petronić Attack (#314) by cmgchess
- chess-openings: Replace endash with hyphen (#325) by cakiki
API
- Add puzzle
lastMoveand relay playerongoingproperties (#645) by fitztrev - Add accuracy param to Games export methods (#172) by AbdeChk
- Allow use of an explorer config endpoint with a path (#20455) by fitztrev
- Document grouping field in broadcast
POSTform (#648) by allanjoseph98 - Document broadcast
showTeamScoresproperty (#641) by allanjoseph98 - Return http validation error for unsupported upload file types (#20557) by fitztrev
- Remove TakeTakeTake oauth permission on push endpoints (#20460) by julien4215
- Refactor some code in PushApi.scala (#20452) by julien4215
- Fix hostnames used by Scalar's "Test Request" UI (#639) by fitztrev
Accessibility
- NVUI: Implement colour aware sorting or start files from h when Black (#20376) by nicvagn
- NVUI: Play sound when low on time (#20347) by nicvagn
- NVUI: Fix typo (#20568) by yafred
- Better handling of voice input loading (#20382) by PawelPlutaUek20
Internationalization
- i18n: Align
usernamevsuser namein login field description (#20448) by Simek - i18n: Add strings for rating inputs in lobby (#20357) by Simek
Miscellaneous
- api-demo: Use scoped chessground npm package (#11) by yafred
- api-demo: Setup Oxlint and fix warnings, fix TSC errors, add checks workflow (#10) by Simek
- api-demo: Update dependencies, setup cleanup and tweaks (#9) by Simek
- api-demo: Modernize dev and build (#8) by yafred
- broadcaster: Build for ubuntu/debian arm (#102) by fitztrev
- chessground: Move resize observer to bindDocument to allow unbind on destroy (#387) by ornicar
- dartchess: Add lazy parsing for multi-game PGN strings + tests (#54) by HaonRekcef
- dartchess: Remove FIC (#55) by veloce
- flutter-chessground: Complete rewrite to improve rendering performance (#94) by veloce
- hermes: Add social category (#6) by brollin
- hermes: Don't save updatedBy, updatedAt when reordering (#5) by brollin
- lichess-org.github.io: Fix: exclude
/@/<user>/*(e.g. blog posts) (#4) by tom-anders - lichess-org.github.io: Allow deep links for user profile, user tv, and lichess tv (#2) by tom-anders
- lila-gif: Adjust check gradient to match the gradient in-game (#224) by ezberlin
- lila-gif: Improve text antialiasing (#226) by niklasf
- lila-fishnet: sbt 2 (#597) by lenguyenthanh
- lila-fishnet: Bump deps (#596) by lenguyenthanh
- lila-search: Don't use
circe.forProduct11when decoding nested field names (#784) by Jon B. Gamble - lila-search: Update project refs in readme (#783) by Jon B. Gamble
- lila-search: Add smithyFormat (#782) by lenguyenthanh
- lila-search: sbt 2.0.0-RC12 (#778) by lenguyenthanh
- lila-search: Bump deps sbt-tpolecat and fix patmat (#781) by lenguyenthanh
- lila-ws: Avoid one more unnecessary social graph subscribe (#850) by niklasf
- scalachess: Attacks: make table init
[@static](/@/static)to fix init-order NPE (#840) by lenguyenthanh - scalachess: Enable warning as error and fix all warnings (#837) by lenguyenthanh
- scalachess: Tiebreak: Round (almost) all average values (#832) by allanjoseph98
- scalachess: Fix typo in release instructions (#829) by MoinJulian
- lint: fix dependency cycle (#20383) by PawelPlutaUek20
- lint: add no-inferrable-types rule (#20358) by Simek
- lint: replace and add few more rules (#20359) by Simek
- Workspace: upgrade pnpm to 11, bump dev dependencies (#20487) by Simek
- Workspace upgrade to TypeScript 6, bump ApexCharts for the compatibility (#20410) by Simek
- Workspace: setup
manypkg/climonorepo integrity tool, fix warnings (#20408) by Simek - Workspace: Update dependencies, match Node types version (#20385) by Simek
- Mobile: Update GitHub actions and pin to commit sha (#3134) by gameroman
- Mobile: Upgrade deps and use pubspec.yaml for actions test (#3108) by lsaudon
- Add
.venvto gitignore. (#20570) by johndoknjas - Add playwright tests (#20479) by fitztrev
- GitHub actions updates (#20544) by fitztrev
- Uncomment variants in test (#20513) by johndoknjas
- Revert sbt-plugin upgrade (#20523) by yafred
- Fix type comparison (#20482) by tors42
- Pin play-ws to version 2 in scala-steward config (#20445) by lenguyenthanh
- Replace all
<i>with<icon>- closes #20403 (#20417) by ornicar - Small tweaks for Lichess icons generation (#20411) by Simek
- Cleanup redundant code (#20399) by nicvagn
April 2026
Mobile App updates
- Add new account menu #3077
- Add iOS Daily Puzzle widget #2965
- Add search to puzzle themes #2948
- Add open imported games feature #3043
- Add "or invite a lichess user" button to the "share challenge link" dialog #2881
- Add share button to tournament screen #2928 (thanks CloudyDino)
- Add flip board to studies #2903 (thanks freebeartogoodhome)
- Add configurable home time controls #2890 (thanks glitchfl)
- Add deep link support for tv, user profile and user tv #2999
- Add intent filter for sharing PGN files #3039
- Make settings / inbox more discoverable #3065
- Make it easier to find the request server analysis button #3064
- Implement puzzle navigation #2975
- Share broadcast player #2998
- Replay Failed Puzzles from Dashboard #1446 (thanks CloudyDino)
- Delay engine move until piece animation completes #3061 (thanks RobertKuszmar)
- Show spectator count and names during game #2951 (thanks adharshio)
- Highlight current user row in tournament standings #2927 (thanks CloudyDino)
- Handle broadcast deep links with
#players/{playerId}fragment #2896 (thanks wesselvankessel) - Update chess openings db #2994
- Link to daily puzzle screen from puzzle widget #2984
- Start from custom position (FEN) in over the board game #2947
- Change the order of resign and undo move buttons #2946
- iOS Blog feed widget layout improvements #2936
- Disable blog feed widget content when kid mode is active #2935
- Support explicit study chapter in deep links #2907
- Allow malformed utf-8 in pgn #3038
- Ignore shared URLs in file processor #3037
- Do not refresh providers unnecessarily when app state changes #3025
- Only display * for ongoing games #2996, #3050
- Internationalise iOS widgets #2978
- Explain why the rating filter is disabled #3032 (thanks CloudyDino)
- Place deleteOldEntries in a transaction #3027 (thanks freebeartogoodhome)
- Remove enableOnBackInvokedCallback from AndroidManifest #3023 (thanks Matrix9494)
- Move over_the_board preferences to OTB directory #3020 (thanks freebeartogoodhome)
- Remove unused const in two files #2960 (thanks freebeartogoodhome)
- Only enable "Challenge a friend" when online #2904 (thanks freebeartogoodhome)
- Prevent http requests we know will fail #2897 (thanks freebeartogoodhome)
- Docs: add documentation for publishing releases to f-droid #2371
- Fix: dispose TextEditingController and remove listener in MessageInput #3060 (thanks freebeartogoodhome)
- Fix deep link loop for imported games with anonymous players #3046 (thanks berenbums)
- Fix small typo in recent_games debug message #3040 (thanks freebeartogoodhome)
- Fix draft chat message cleared when user returns to board #2980 (thanks MaartenD)
- Fix: show standard points when custom points match standard value in broadcast player results #2943 (thanks CloudyDino)
- Fix: show puzzle storm-only days in user activity #2932 (thanks sviluppatoredisoftware)
- Fix bottom nav staying visible when opening deep links #2929 (thanks CloudyDino)
- Fix last edited PGN header not saved on share (#2850) #2911 (thanks CloudyDino)
- Fix: Challenge opponent again via clicking on name after game finished #2894 (thanks MaartenD)
- Fix: invalidate ongoingGamesProvider so accepted challange visible in carousel #2892 (thanks MaartenD)
- Fix antichess stalemate variant outcome #2889 (thanks CloudyDino)
- Fix the over the board clock switching before promotion piece is selected #2888 (thanks glitchfl)
- Fix now it saves skip state immediately in Puzzle Streak #2887 (thanks glitchfl)
- Fix issue when logging in with 2FA (switch back to
singleTop) #3080 - Fix: order upcoming tournaments by start time first #3078
- Fix puzzle nav bug on long press #3062
- Fix errors in tv app link tests #3051
- Fix infinite loop triggered by imported game deeplinks #3036
- Fix relay group link #2997
- Fix deep link route transition #2986
- Fix puzzle widget theme sync #2983
- Fix puzzle widget layout on iPad #2982
- Fix show solution giving wrong answer in puzzle #2972
- Fix challenge title if unliminited time #2952
- Fix kid mode state problem #2930
Site updates
- Add button to add puzzle to study #20284
- Add F-Droid badge on mobile page #20188
- Add googly eye flair #20170
- Add Chess960 support to study chapter creation #20224 (thanks p-alik)
- Add search for profile flags #20296
- Improve onboarding UX #20289
- Use webp on mobile page #20191
- Prevent player from resigning when they cannot lose #20172
- Keep start of game chat buttons around for a move longer #20248
- Replace hcaptcha & singlePost with Turnstile #20274
- Automate account confirmation #20319
- Defer AudioContext creation in sound init via setTimeout(0) #20201 (thanks Ijtihed)
- Persist explorer player-tab color across refresh #20270 (thanks CZapin2015)
- NixOS development environment setup #20210 (thanks p-alik)
- Don't use puzzle storm font for "%" #20257
- Immediately update the chess 960 position id in
onChange#20264 - Have the esc key unfocus textboxes in a number of places. #20291
- Only apply the 'packed' class to trophies when an overflow is close to happening #20301
- Update lichobile deprecation message #20306
- Tweak email confirmation help page #20335
- Break ties on leaderboards by comparing whose position will stay longer #20341
- Broadcasts: Add search for tiebreak options #20295
- Broadcasts: Support chess-results.com source links #20231
- UI: Remove redundant body prefix from scrollbar selectors #20190 (thanks Ijtihed)
- UI: avoid image and meta tags overflow in blogs card #20324
- UI: refresh and align appearance of Learn and Practice pages #20294, #20328, #20329
- UI: refactor FAQ page, use semantic tags, visual improvements #20259
- UI: learn Classes interfaces improvements #20239
- UI: distribute evenly study edit panel buttons #20238
- UI: hide empty wiki box in studies #20237
- UI: small tweaks and fixes for storm puzzle #20236
- UI: introduce
box-paddingSCSS variable #20234 - UI: A11y contrast tweaks mainly for light theme #20182
- UI: small tweaks for friends box #20181
- UI: Move clock hint to top of fieldset as it's a general instruction #20173
- UI: Fix string student.releaseDesc1 so HTML element is not escaped #20168
- UI: tweaks for opening wiki data render #20152
- Fix: piece disappearing when using keyboardSubmit #20326 (thanks PawelPlutaUek20)
- Fix: login-username-tabindex #20320 (thanks bananaMonkey13)
- Fix: new streak button #20304 (thanks PawelPlutaUek20)
- Fix: show lichess logo on auth pages #20275 (thanks Sama-004)
- Fix: game search analysed filter silently drops all other filters #20256 (thanks wesselvankessel)
- Fix: spacing on user_tag button #20233 (thanks xcjackpan)
- Fix: missing extraCgConfig when no showResults #20179 (thanks PawelPlutaUek20)
- Fix: iOS Safari auto-zoom on auth form inputs #20153 (thanks brynjagr)
- Fix: chat size change #20171
- Fix: check whether variant is 960 when computing dests in analysis #20272
- Chess-openings: Added B07 line #316 (thanks Chess4757)
- Chess-openings: Add B30 anti-Sveshnikov starting position. #315 (thanks jdart1)
- Chess-openings: E14 and related fixes #311 (thanks jdart1)
- Chess-openings: E81 change #308 (thanks Chess4757)
- Chess-openings: Added Sicilian defense, Portland attack #307 (thanks Chess4757)
- Chess-openings: Added E57, E88, E81 and E71 lines #304 (thanks Chess4757)
- Chess-openings: Add some E11 lines #300 (thanks jdart1)
- Chess-openings: C.tsv -- Ruy Lopez Steinitz Defense: transposition from Philidor Defense #298 (thanks Panthee)
- Chess-openings: Added B77 and B78 lines #297 (thanks Chess4757)
- Chess-openings: Added B13 lines #294 (thanks Chess4757)
- Chess-openings: Add a C83 line #293 (thanks jdart1)
- Chess-openings: Added D36, D53, D41, and D43 lines #292 (thanks Chess4757)
- Chess-openings: Added a C24 line #291 (thanks Chess4757)
- Chess-openings: Hyperaccelerated Fianchetto -> Hyperaccelerated Dragon #290 (thanks LesCyclopes)
- Chess-openings: Added the Carlsen Variation of the QGD #289 (thanks Chess4757)
- Chess-openings: Snyder Variation -> Czerniak Attack #287 (thanks LesCyclopes)
- Fishnet: Update to rust 1.95 for cfg_select #295
- Lila-search: Advanced study search #769, #770
- Lila-search: Remove lila-maven #773
- Lila-search: Small improvements #768
- Lila-search: Disable scaladoc task as it fails #762
- Lila-search: Update dependencies and fix deprecation #761
- Lila-search: Update scala 3.8.3 #755
- Lila-search: Use
gameindex again #754 - Stockfish-web: Add opt-in relaxed SIMD path for NNUE evaluation #16 (thanks ohone)
API updates
- API Docs: Don't include '200' in api docs for /top/ endpoint. #635
- API Docs: Document "mode" in /api/study/{studyId}/import-pgn #634
- API Docs: Remove deprecated broadcast fields #630
Accessibility updates
- NVUI: Add touchscreen support in analysis view and puzzle view #20169
- NVUI: Add a toggle eval button below the board #20216
- NVUI: Fix small viewport issues because of disable blind mode button #20161
- A11y contrast tweaks, mainly for light theme #20182, #20287
Translation updates
- Add support for under age and Elo tournaments in i18n and regex patterns #20193
- Add HTML checks to i18n linting #20199 (thanks Ijtihed)
March 2026
Mobile App updates
- More variant support #2705
- Add Crazyhouse support #2662
- Open PGN files from file explorer, messages, in the App on Android #2671, #2720
- Add arrows support to imported pgn on the analysis board #2731
- Open link in app by adding
android:autoVerify="true"to AndroidManifest.xml #2740 (thanks llsant) - Implement lichess announces notifications #2786
- Allow all chess variants when creating a correspondence game #2761
- Show tenths of a second in analysis board if under 1 minute #2732, support clockTenths preference from the website #2758, #19799
- Support opening and creating challenge links #2828, #2827, #20101
- IOS Blog Feed Widget #2834 (thanks r3econ)
- Add "Next to play" side choice for games from position #2715 (thanks lacostej)
- Load custom position (FEN) when playing against the computer #2832 (thanks r3econ)
- Enable access to analysis board during casual and practice games against computer #2838 (thanks karansuthardev)
- Clock tool: Add low time warning animation #2788 (thanks r3econ)
- Color game results in analysis board #2751 (thanks lacostej)
- Add more Annotations Symbols for studies #2730
- Puzzle Dashboard Improvements #2690 (thanks r3econ)
- Remove streamers from Kid Mode #2856 (thanks freebeartogoodhome)
- Remove blogs from Kid Mode #2847 (thanks karansuthardev)
- Pull to Refresh in User Screen #2803 (thanks r3econ)
- Add tip to home screen when nnue files are outdated #2708
- Add app version to About screen #2755 (thanks lacostej)
- Add search to HTTP logs #2852 (thanks r3econ)
- Add search to app logs #2833 (thanks r3econ)
- Persist App Logs with 7-day TTL, Pagination, and Infinite Scroll #2808 (thanks r3econ)
- Add white options for knight odds and reorder to prefer pure odds over move+odds #2772 (thanks ComradeRamen)
- Update contact screen and user app bar with circle avatars #2840
- Place 'From Position' Variant at the bottom of the List #2799 (thanks r3econ)
- Add variant Description in Variant Picker #2780 (thanks r3econ)
- Add variant icons in choice picker #2760 (thanks r3econ)
- Broadcasts: support
customScoringand multi time-control stats #2718 - Update guidance on version numbers in bug.yml #2872 (thanks da5nsy)
- Fix: Correspondence next game button cycles the first two games #2877 (thanks MaartenD)
- Fix: Learn from your mistakes can get stuck / keep loading after a computer analysis #2859 (thanks sviluppatoredisoftware)
- Fix: Slow loading Puzzle Themes for offline users #2854 (thanks freebeartogoodhome)
- Fix: Bottom overflow in tournaments #2809 (thanks r3econ)
- Fix: Layout Problem in the HTTP Logs Screen #2802 (thanks r3econ)
- Fix: Add request timeout to prevent indefinite loading #2777 (thanks lacostej)
- Fix: Eliminate leading zero in the clock tool #2765 (thanks r3econ)
- Fix: Round the rating for average opponent #2764 (thanks r3econ)
- Fix: Register socket listeners before awaiting first connection #2762 (thanks lacostej)
- Fix: Puzzle text label overflow #2759 (thanks r3econ)
- Fix: Loading animation grey logo + increase animation duration #2702
- Fix: Align Flutter version config and document requirements #2717 (thanks lacostej)
- Fix: Hide "Show threat" button when king is in check, checkmate, or stalemate #2710
- Fix: Incorrect circle color in Tournament Player Details #2845
- Fix: Correspondence challenge creation #2825
- Fix: Enable wakelock in TV and broadcast screen #2812
- Fix: Crazyhouse premoves, Fix drop moves #2811, #2783, #2744
- Fix: Cancel any pending lobby seek when accepting a challenge #2795
- Fix: Analysis chart touch #2794
- Fix: Chat messages disappearing when a move is made #2792
- Fix: OAuth 2.0 PKCE flow and fallback to system browser #2787
- Fix: Crashes on some old 32-bit devices. #2749
- Fix: Allow king promotions in antichess #2739
- Fix: Preselect analysis/boardEditor variant in OTB and offline computer #2733
- Fix: OTB position rule when initialFen is provided (#2728) #2729
- Fix: Do not use saved standalone analysis in opening explorer #2727
- Fix: Add variant ending to the controller and UI in offline game screen #2721
- Flutter-chessground: Allow promotion to king, needed for Antichess #87, Fix top player promotion selector if canPromoteToKing is enabled #89
- Flutter-chessground: Add
validDropSquaresto GameData to fix invalid drop moves in crazyhouse #90 - Flutter-chessground: Implement atomic explosions #85
- Flutter-chessground: Fixed board animations when (remove animations) is on #86 (thanks Ahmed-M-Hany)
- Flutter-sound-effect: Fix: release audio session when app is backgrounded #7 (thanks lacostej)
- Dartchess: Fix
Crazyhouse.isGameOverandisCheckmatewhen the only legal moves are drop moves #53 - Dartchess: Add explosion squares #52
Site updates
- April fools: Add googly eyes to knights #19821
- Using the opening explorer now requires being logged in because we can't defend anon requests against DDoS cc9d8d9
- Add support for TakeTakeTake OAuth client e8e5e5b, 10dc65e, 7449f0d, bdcb62b
- Better support OAuth client sign-up/sign-in 733916c, b60caf5, 3e12f15, 648e8e4, fd9562a, 9692a6b, 9686270, af4b4e0, 9692a6b, a333e60
- Account closure now requires 2FA 60340fd
- Redesign login and signup pages #19812 (thanks brynjagr)
- Support crazyhouse drop moves in conditional premoves #19803
- Deeplink to player on tournament list, profile 6924652, f4738dd
- Disable opening explorer in embedded analysis board 724234e
- Expose public puzzle JS API 8762c84
- Use forum post id as the uri fragment, rather than number #19809
- If name only exists for white/black, allow using it as chapter title #20076
- Add Guinea's chess federation to /fide #19852 (thanks patrickwayodi)
- Chore: add SVGO and config, disable problematic rules, optimize SVG assets #19822 (thanks Simek)
- Broadcasts: Consistent board players sections styling #19840 (thanks Simek)
- Broadcasts: Add timezone search bar #19846
- Broadcasts: Bold game score in the player tooltip #19824 (thanks Simek)
- Broadcasts: Fix players photo size in the tooltips on Safari #19806 (thanks Simek)
- Broadcasts: Fix possible select options overflow on tour page #19761 (thanks Simek)
- Broadcasts: Fix source log overflow #19723 (thanks Simek)
- Broadcasts: Add time control category override for rounds #19788
- Broadcasts: Fix broken API doc link #19724 (thanks Qb1Le)
- Broadcasts: Players table style fixes #19713 (thanks Simek)
- Broadcasts: Don't calculate ratingDiffs for games of non-FIDE players #19832
- Ui: Small tweaks for ceval settings menu #20098 (thanks Simek)
- Ui: Align markdown edit mode appearance with actual post #20091 (thanks Simek)
- Ui: add result outline around board in puzzle history #19857 (thanks Simek)
- Ui: align new login/register form with Lichess design, small visual tweaks #19856 (thanks Simek)
- Ui: Consistent mini board size on homepage on 2col layout #19848 (thanks Simek)
- Ui: use regular buttons in learn popups, small display tweaks #19847 (thanks Simek)
- Ui: Use more
z-indexand alter coloring of even game rows on user profile so first row match tab background #19845 (thanks Simek) - Ui: refresh donate button styling, add icon to match mobile #19844 (thanks Simek)
- Ui: update blog rack buttons, use green button for tour join, other consistency tweaks #19839 (thanks Simek)
- Ui: small tweaks and fixes for impersonate mode #19825 (thanks Simek)
- Ui: unify appearance of buttons, button based components and "metal" effect #19814 (thanks Simek)
- Ui: assorted changes/code cleanup in
lib#19795 (thanks Simek) - Ui: a11y and visual tweaks for editor buttons, improve readability #19789 (thanks Simek)
- Fix: formatting after readonly changes #19779 (thanks Simek)
- Ui: use user board and pieces for editor screenshots #19771 (thanks Simek)
- Ui: de-duplicate tournament show page styles #19764 (thanks Simek)
- Ui: adjust spacing on the team list #19751 (thanks Simek)
- Ui: support themes in shepherd.js and tweak the popover appearance #19746, #19747 (thanks Simek)
- Ui: show provisional rating message directly in lobby dialog #19745 (thanks Simek)
- Ui: sort and group TS imports on format #19741 (thanks Simek)
- Ui: improve study search chapter dialog #19733
- Ui: improve movetime chart tooltip #19731 (thanks Simek)
- Ui: remove commented out styles without a context #19698 (thanks Simek)
- Ui: do not apply hover style for disabled radio inputs #19697 (thanks Simek)
- Ui: don't link to self on /opening details page #19695 (thanks Simek)
- Ui: move new patrons section up and add missing hover style on patrons page #19681 (thanks Simek)
- Ui: add class to tutor header containers with selects, allow overflow #19679 (thanks Simek)
- Fix: Missing destroy in eval cache #20134 (thanks PawelPlutaUek20)
- Fix: Add missing cleanup to the explorerCtrl destroy method #20133 (thanks PawelPlutaUek20)
- Fix: Study board shows wrong orientation after manual flip #20130 (thanks rog-42)
- Fix: Loading when another tab started ceval #20124 (thanks PawelPlutaUek20)
- Fix: Disable mobile tap highlight on chessboard #20118 (thanks dkaaads)
- Fix: /signup broken in RTL languages #20111, #20113 (thanks PawelPlutaUek20)
- Fix: PGN viewer menu background in transparent theme #20093 (thanks Simek)
- Fix: metal background for few non-interactive elements, style cleanup #20071 (thanks Simek)
- Fix: forum message content overflow #20069 (thanks Simek)
- Fix: relay tour horizontal overflow on mobile #19854 (thanks Simek)
- Fix: disable click away listener on study topics dialog #19765 (thanks PawelPlutaUek20)
- Fix: shield icon position in tournament header #19748 (thanks Simek)
- Fix: import cycles in various modules #19742 (thanks Simek)
- Fix: mchat scroll bar track color in dark theme #19722 (thanks Simek)
- Fix: chat overflow on very long, single word, messages on certain pages #19721 (thanks Simek)
- Fix: user tournaments page overflow #19674 (thanks Simek)
- Fix: forum posts overflow with long links #19672 (thanks Simek)
- Fix:
toDatehelper, add tests #19671 (thanks Simek) - Fix: string date formatter #19670 (thanks PawelPlutaUek20)
- Fix: Unexpected form submission in new chapter form when pressing enter #20112
- Fix: Missing GDPR button for forever closed accounts #20062
- Fix: Remove backdrop filter on site header for 3d boards #20055
- Fix: scrolling on mobile for profile games tabs #19760 (thanks Simek)
- Fix: Study board editor buttons prevent form submission #19842
- Fix: streamer subscription toggle button after refactor #19818
- Fix: Consistent scrolling through moves on Mac #19687
- Fix: Persist the chat/forum access preference on team creation #19668
- Fix: wikibooks should not always be active on analysis 59cc2c2
- Fix: Filter out blocked players from challenge suggestions 4012b2d
- Fix: Hide topnav search from auth pages cf66a03
- Fix: Let anon mobile users cancel their challenges 9942df5
- Fix: don't break tournament UI when team is missing from battle 81d38d4
- Fix: Never put forum posts from blocked users in timeline e0b080b
- Workspace: new lint rules, warnings and fixes #20059, #19792, #19774, #19752, #19734, #19694, #19658 (thanks Simek)
- Workspace: update Node and PNPM to the latest, tweak Copilot instructions #19793 (thanks Simek)
- Chore: reformat crowdin.yml file #19775 (thanks Simek)
- Security: don't treat external stream titles as HTML 0d50026
- Prevent asterisks in registration email #20082
- Chore(security): update github actions and pin to commits sha #20108 (thanks gameroman)
- Chessground: enable handling drag hover on JS side on Safari #19708, #377 (thanks Simek)
- Chessground: Update actions in workflows #385 (thanks Simek)
- Chessground: Bump dependencies, fix new lint warnings, switch lint stack to OXC tools #383, #384 (thanks Simek)
- Chessground: Fix
visibility: hiddencauses rendering artifacts on WebKitGTK #382 (thanks jshnaidman) - Scalachess: Add Arranz System tiebreaker implementation #813, #816
API Updates
- Opening explorer endpoints have changed and require authentication ac27c30
- Add new API endpoint to stream game chat 9733851, 3cef9c9, 5c7d0f8
- Add puzzle initial position to some API endpoints e7aa350
- Add endpoint to replace a chapter's moves #20119, #626
- Open bookmark api to preference:write oauth scope 5820514
- Broadcasts: increase max broadcast streams. anon = 4 user = 8 verified = 16 fbb6b38
- Chore(security): update github actions and pin to commits sha #625 (thanks gameroman)
Accessibility updates
- Fix: NVUI - board becomes unresponsive after layout change #20074 (thanks Diogo1457)
- Don't hide lobby in blind mode #20128
Translation updates
- Improve source strings based on translator feedback & general review #20126
- Add missing engine settings values #19692 (thanks Simek)
- Update Chinese language representation to simplified #19855 (thanks visualdenniss), 3f3e88e
February 2026
Mobile updates
- Add offline play and practice versus computer #2585, #2591, #2594, #2624, #2678, #2680
- Add Stockfish 18 #2627
- Add animated native splash logo (Android 12+) #2674
- Add broadcast server analysis summary #2610
- Add FEN sharing for opening explorer positions #2632 (thanks r3econ)
- Add PGN sharing to opening explorer #2664 (thanks r3econ)
- Add Puzzle Dashboard strengths and improvement areas #2651 (thanks r3econ)
- Add “unlimited” switch in OTB config bottom sheet for unlimited time game #2344 (thanks nirajk14)
- Improve user activity widget #2618 (thanks r3econ)
- Allow to choose color for rated challenges #2598
- Allow to share games opened from player results or app links #2608
- Allow split-screen on older android versions #2609
- Allow opening PGN files with multiple games #2656
- Make it possible to share FEN of the position in opening explorer #2632 (thanks r3econ)
- Display player names, titles and rating for imported games #2647
- Show broadcast tiebreaks in bottom sheet #2604
- Re-add color to broadcast player results #2601
- Improve broadcast deeplinks #2597
- Use
BroadcastPlayerWidgetwhere possible #2602 - Remove padding in analysis board for phones that are not too small #2641
- Add unit tests verifying app link route resolution #2626 (thanks r3econ)
- Add a test that verifies that
lichess.org/gameidopens analysis #2669 (thanks r3econ) - Fix broadcast round eval gauge #2595
- Fix app logs preference #2596
- Fix Puzzle Storm restart buttons #2600 (thanks G1Joshi)
- Fix Telegram URL in profile #2648 (thanks mistmuth)
- Fix engine evaluation issues #2650
Site updates
- Add Epaulette Mate puzzle theme with translation and icon #19401
- Add Swallow’s Tail Mate puzzle theme with translation and icon #19402
- Add tooltip for semantic dates, that shows the date is in UTC #19277
- Add hover effect to hidden topnav buttons #19299, #19309
- Add infinite scroll to inbox contacts list #19339 (thanks realJimJin)
- Add green success flash for blogs on create/edit/delete #19355
- Add blindfold mode toggle button #19555
- Add ‘h’ shortcut to toggle board menu. #19602
- Add overflow for
.boxelements where needed #19636 - Add trophy image for CWC 2025 #19305 (thanks visualdenniss)
- Add hover styles to checkbox element #19318 (thanks Simek)
- Add board menu toggle for spectators on mobile #19354 (thanks realJimJin)
- Add focus outline to radio tabs, update sidenav and header outline #19368 (thanks Simek)
- Broadcasts: Team leaderboard changes and more #19334
- Broadcasts: Fix player JSON types #19343
- Broadcasts: More player and team JSON fixes #19364
- Broadcasts: Ensure only 1 xhr request per tab load on team leaderboard #19365
- Broadcasts: Add
fideTCmigration script #19391 - Broadcasts: Skip calculating player stats until at least one game is finished #19619
- Broadcasts: Remove empty-like tag values from source PGN #19622
- Broadcasts: Improve and align player display #19633 (thanks Simek)
- Broadcasts: Avoid DOM traversal in relay round select #19394 (thanks Simek)
- Broadcasts: Fix round info text cutoff at certain widths #19350 (thanks realJimJin)
- Broadcasts: Fix and improve tour selects #19392 (thanks Simek)
- Broadcasts: Fix tour tabs keyboard navigation #19396 (thanks Simek)
- Broadcasts: Fix some inputs in creation form #19516
- Broadcasts: Fix voice chat display and update document title #19523
- Study: Add keyboard navigation to study view tabs #19397 (thanks Simek)
- Study: Add divider, simplify study chapters tabs, #19411 (thanks Simek)
- Study: Add keyboard shortcuts for edit study, edit chapter, create chapter, and to search for chapters in a study #19577, #19601
- Study: Fix ‘d’ and ‘g’ shortcuts not working #19570
- Schedule hourly Rapid Arena with Increment #19321 (thanks Frederico-Messa)
- Extend disconnect timeout with imbalance #19258
- Enable fast keyboard move typing #19656
- Implement game stream by oauth origin #19263
- Implement dynamic default insights metric #19273
- Update registration email hint #19420
- Make report game link error message neutral #19483 (thanks SE-Doctor)
- Refactor forum post layout for mobile #19271 (thanks Sama-004)
- Scroll extra to daily feed items #19280
- Scroll extra if the site header might be shown #19293
- Shift top 50 and top 100 trophies up a bit on the perf page #19308
- Space out trophy and username on perf page #19310
- Adjust required horizontal move swiping delta #19324
- Replace println with logger.info in FidePlayerSync #19331 (thanks realJimJin)
- More visible NVUI button #19557
- Restore daily puzzle title styling #19599
- Do not show opponent left counter in zen mode #19418
- Prevent puzzle reports from single-move PVs and low-depth searches #19446
- Remove verification for streamer online check #19540
- Remove unused chapter ‘variant’ prop #19276 (thanks PawelPlutaUek20)
- Standardise checkbox/toggle UX on multiboard and study share #19281 (thanks nkc-137)
- Streamline markdown textarea tabs appearance #19314 (thanks Simek)
- Enhance user plan update with color unlock notification #19323 (thanks zonalraid45)
- Update KOTH WC 2023 trophy with correct icon #19330 (thanks visualdenniss)
- Do not use links for trophies without
href#19335 (thanks Simek) - Show scoresheet scrollbar in Chromium browsers #19349 (thanks realJimJin)
- Order language entries #19569 (thanks itsbilolbek)
- Improve form elements focus styling #19317 (thanks Simek)
- Improve mselect focus state, keyboard navigation and a11y #19369 (thanks Simek)
- Improve lobby dialog keyboard navigation and a11y #19370 (thanks Simek)
- Improve
transitionmixin, support multiple props #19376 (thanks Simek) - Improve copy-me button styling #19381 (thanks Simek)
- Improve alignment of user activity timeline entries #19386 (thanks Simek)
- Improve copy-me component when target is link #19487 (thanks Simek)
- Improve markdown editor styles, align more with lichess #19649 (thanks Simek)
- Improve blog cards hover appearance #19650 (thanks Simek)
- Improve lobby buttons animations #19547 (thanks Simek)
- Improve readability in picture background mode #19552 (thanks Simek)
- Improve Puzzle Themes page appearance #19565 (thanks Simek)
- Improve team tournament table for mobile #19574 (thanks Simek)
- Improve videos reveal node readability in picture bg mode #19613 (thanks Simek)
- Improve openings tree appearance #19616 (thanks Simek)
- Various select-related tweaks #19413 (thanks Simek)
- Small visual tweaks for forum #19427 (thanks Simek)
- Visual tweaks for Zen mode #19562 (thanks Simek)
- Allow opening user menu w keyboard, update links outline #19428 (thanks Simek)
- Allow focusing home lobby tabs by keyboard #19461 (thanks Simek)
- Allow keyboard interaction with menu bar #19479 (thanks Simek)
- Don’t allow focusing disabled fbt buttons #19481 (thanks Simek)
- Only show sitting warning when player is in a losing position #19435 (thanks JustinAWei)
- Extend sitting feedback fix to
SitResignand equal-material positions #19447 (thanks JustinAWei) - Cancel stale premoves on game reload #19437 (thanks JustinAWei)
- Match user profile side height with chart #19443 (thanks Simek)
- Use default text size in board control menu #19549 (thanks Simek)
- Align advanced search form appearance #19550 (thanks Simek)
- Tweak tournament table to fit more content, fix box border radius #19618 (thanks Simek)
- Tweak
kbdappearance, add dark theme support #19627 (thanks Simek) - Tweak spacing on the Learn page, more concise display on mobile #19648 (thanks Simek)
- Tweak tournament streamers link appearance #19469 (thanks Simek)
- Visual tweaks for the video page #19498 (thanks Simek)
- Remove commented-out dead code #19448 (thanks JustinAWei)
- Remove dead linkPopup.ts, duplicated in dialogs.ts #19452 (thanks JustinAWei)
- Remove padding from team name in tournament #19470 (thanks Simek)
- Remove useless Bookmark class #19499 (thanks OwenKrawecki)
- Deduplicate tournament/swiss pagination into shared lib module #19450 (thanks JustinAWei)
- Deduplicate tournament/swiss search into shared pagination module #19515 (thanks JustinAWei)
- Use shared shuffle from lib/algo instead of local duplicate #19510 (thanks JustinAWei)
- Extract shared WikiBooks HTML transforms into lib/wikiBooks #19511 (thanks JustinAWei)
- Extract shared redirectFirst into lib/view/pagination #19512 (thanks JustinAWei)
- Convert close buttons from
<a>to<button>for keyboard accessibility #19513 (thanks JustinAWei) - Avoid querying the same DOM element multiple times #19514 (thanks JustinAWei)
- Move redirectFirst to lib/tournament #19522 (thanks JustinAWei)
- Prevent stretching of player tip photo #19583 (thanks Simek)
- Hide default Edge password input reveal icon #19585 (thanks Simek)
- Use faded accent color for
tabs-horizborder when hovered #19614 (thanks Simek) - Make Lobby display mode and filters keyboard accessible #19615 (thanks Simek)
- Separate eval gauge from mini boards #19626 (thanks Simek)
- Fix checkbox checkmark positioning #19270 (thanks nkc-137)
- Fix tablesort CSS #19272
- Fix study chapter scroll after DOM recreation when the variants differ #19274 (thanks PawelPlutaUek20)
- Fix board editor castling rights bug #19286 (thanks PawelPlutaUek20)
- Fix WebKit WASM bug #19298
- Fix subnav icons alignment #19313 (thanks Simek)
- Fix markdown textarea shift on “Write” tab focus #19327 (thanks Simek)
- Fix lobby view toggle not updating immediately #19336 (thanks realJimJin)
- Fix rating range sliders moving together in lobby settings #19348 (thanks realJimJin)
- Fix study button data-count badge clipped by overflow #19351 (thanks realJimJin)
- Fix practice mode not using figurine notation for best move #19352 (thanks realJimJin)
- Fix patron currency change page reloading #19372 (thanks realJimJin)
- Fix range input focus outline #19375 (thanks Simek)
- Fix missing props module in the lobby package #19379 (thanks PawelPlutaUek20)
- Fix toggle-box keyboard nav and styling #19395 (thanks Simek)
- Fix viewport width issue on Chrome mobile browser #19400 (thanks sobhihamadi)
- Fix puzzles not working correctly #19425 (thanks PawelPlutaUek20)
- Fix using correct Android app ID in StaticContent.scala #19431 (thanks Tarek-9)
- Fix patron donations in BGN currency not supported, but still present #19433 (thanks Ivan-Shaml)
- Fix
.fbtanchors color #19442 (thanks Simek) - Fix keyboard interactions for puzzles #19484 (thanks Simek)
- Fix misleading import alias in swiss search #19449 (thanks JustinAWei)
- Fix event listener accumulation and unsafe DOM traversal #19451 (thanks JustinAWei)
- Fix focus order on the homepage #19460 (thanks Simek)
- Fix location flag alignment in user profile #19468 (thanks Simek)
- Fix impossible to select challenge reason #19508 (thanks PawelPlutaUek20)
- Fix closed accounts not being displayed when listing blocked accounts #19551
- Fix boxes compositing context in picture background mode #19575 (thanks Simek)
- Fix game view overflow on very small mobile devices #19576 (thanks Simek)
- Fix incorrect size of power tips when calculating position #19581 (thanks Simek)
- Fix game result alignment on player profile #19584 (thanks Simek)
- Fix user inbox text overflow #19598 (thanks Simek)
- Fix chapter titles not taking names from PGN, add default name
true#19624 (thanks Zinkelburger) - Lichobile: End-of-life notice #2583 (thanks jas14)
- Lila-ws: Replace
printlnwith properloggerin RoundCrowd #810 (thanks realJimJin) - Lila-ws: Fix grammar in README #809 (thanks realJimJin)
- Op1: Update README to fix a typo #1 (thanks andrewkornder)
- Pgn-viewer: Set Pane type on corresponding class member #52 (thanks dragunovartem99)
- Pgn-viewer: Fix disabled elements not firing mouse events #61 (thanks PawelPlutaUek20)
- Pgn-viewer: Fix
cg-custom-belowposition #62 (thanks PawelPlutaUek20) - Scalachess: Fix tiebreak direct encounter calculation and other tweaks #804
API updates
- API Docs: Fix current game response schema and examples #605
- API Docs: Add oneOf for other Game endpoints that can be pgn or ndjson #607
- API Docs: Document broadcast team leaderboard endpoint #608
- API Docs: Add
fideTCforRelayTour.playerresponse #611 - API Docs: Relay players updates #612
- API Docs: Describe user preference fields #616 (thanks bryghtlabs-richard)
- API Docs: Update api-player-top-nb-perfType.yaml #617 (thanks SE-Doctor)
- API Docs: Update lichess-api.yaml #618 (thanks SE-Doctor)
Accessibility updates
- NVUI: Allow ceval on tournament landing page #19664
- NVUI: Fix
renderPlayer#19416 - Translate common broadcast group names #19268
- Translate FIDE Federation names #19399
- Broadcast i18n tweaks and additions #19295
January 2026
Mobile updates
- Add password protected tournaments #2544
- Add hint for customizable home screen widgets #2571
- Add
teamfield to player profile in broadcasts #2511 - Add player search to broadcasts #2543
- Allow broadcast viewers to share currently viewed round #2512
- Improve broadcast standings a0e04fb
- Add button to upload PGN on “Load position” screen #2448 (thanks ChrompyCoder)
- Add GIF export dialog #2566 (thanks mistmuth)
- Add support to deep link ply and orientation in analysis #2536 (thanks AC-BOSS)
- Make ongoing OTB games persistent #2470
- Merge semantics for welcome message #2520 (thanks Septic-H)
- Simplify evaluation service #2554
- Fix localization for puzzle game ID display #2559 (thanks DejoeNithin)
- Fix multiple analysis session issues #2496
- Fix YouTube streamer API #2510
- Fix bug that prevented to access games offline #2519
- Fix immersive mode and gesture exclusion for puzzle and game screens #2572, #2590
- Remove duplicate analysis button #2497
- Add missing translations #2582
- Use auto-size text for conditional premove hint #2583
Site updates
- Redesign game setup dialog #18913, #19099, #19120
- Add Class teams #19196
- Add Stockfish 18 #14, 7bab98c
- Add visual motifs for analysis #19037, #19100, #19192 , #19221, #19244
- Add piece maneuver arrows for top engine line #19218, a472e98
- Add clock times and move glyphs to GIF exports #19154, #19182, #202, #207 (thanks Prog-Jacob)
- Add markdown tag for localized date + times in homepage feed #19049, #19239
- Add board contrast slider #19195 (thanks Simek)
- Improve online bots list b67961c
- Make reusable challenge links accessible from challenge screen #19153
- Improve eval gauge readability #19186 (thanks Simek)
- Standardize checkbox/toggle UX on a few forms #19046 (thanks nkc-137)
- Set “accuracy” as the default “Insights” metric #19197 (thanks Frederico-Messa)
- Allow FEN strings with underscores in setup URLs #19174
- Expand deep-linking for lobby game creation #19127
- Broadcasts: Add team leaderboard #19107, #19235
- Broadcasts: Add average rating to team stats #19253
- Broadcasts: Add button to toggle orphan board warning #19021
- Broadcasts: Improve score groups #19252
- Broadcasts: Fix player rating diffs #19267
- Broadcasts: Fix 2d chat live board when 3d pieces selected #19168 (thanks PawelPlutaUek20)
- Broadcasts: Fix stream embed alignment #19175 (thanks PawelPlutaUek20)
- Study: Add Crazyhouse layout #19043
- Study: Use
ChapterNametag for imported PGNs #19018 - Study: Show liked unlisted studies #19079
- Study: Scroll other members to appropriate chapter #19189
- Board editor: Support Chess960 #19090
- Board editor: Tweak Chess960 textbox #19122
- Board editor: Add button to generate random Chess960 position #19157
- Board editor: Fix ‘chess’ compatibility #19210
- Board editor: Rename “castling” and “en passant” to be more clear #19200 (thanks ariemoii)
- Include moves being proposed to be taken back in chat notification #19095
- Stop recommending your own liked or authored blog posts #19074
- Change icons of Corner, Morphy’s and Pillsbury’s Mate puzzle themes #19019
- Prefer eval if it’s the only one which can accommodate selected PV number #19044
- Add berserk tags to non-JSON PGN export #19202 (thanks FitzgeraldKrudde)
- Add Python logo flair #19167 (thanks ReallyFloppyPenguin)
- Add flag of Bashkortostan #18858 (thanks MeRuslan)
- Update some flags to shiny style #19060, #19077
- Shrink FIDE player list “follow” button horizontally to the star #19091
- Limit forum topic “unsticky” button size #19104
- Sort names from A to Z initially, instead of Z to A #19248
- Support playing out multiple engine moves on mobile devices #19059
- Scroll to selected language in menu #19086
- Prevent accidental double posts from clicking reply twice in forum #19087
- Rework YouTube link parsing #18979 (thanks Ivan-Shaml)
- Hide the player name, not the clock in broadcasts #19016 (thanks PawelPlutaUek20)
- Fix jagged edge of move destination radial gradient #19020 (thanks ChaseNelson)
- Fix Practice exercises not finishing #19144, #19149 (thanks PawelPlutaUek20)
- Fix overflow on mini-boards #19155 (thanks YassineHaouzane)
- Fix number menu tab UI quirks #19193 (thanks Simek)
- Fix lobby tournament section header border #19214 (thanks Simek)
- Fix some font icon glyphs #19215 (thanks Simek)
- Fix analysis threat visualization to support MultiPV #19008
- Fix “Learn” section board setup level #19003
- Fix forum sticky query #19094
- Fix minor profile link bug #19159
- Fix lint warning #19172 (thanks PawelPlutaUek20)
- Migrate lint stack to Oxlint + Oxfmt #19179 (thanks Simek)
- Add user agent brands in Diagnotics #19137
- Database: Fix typo on webpage #81 (thanks mnahinkhan)
- Chess-openings: Add D12 and D15 lines #269 (thanks jdart1)
- Chess-openings: Add more A07 lines #270 (thanks Chess4757)
- Chess-openings: Add Caro-Kann Defense: Tartakower Variation, Perlis Line #273 (thanks sergi-nda)
- Chess-openings: Add more A37 lines #275 (thanks jdart1)
- Chess-openings: Add Four Knights Game: Naroditsky Variation #276 (thanks LesCyclopes)
- Chess-openings: Add McDonnell Attack, Toilet Variation #277 (thanks LesCyclopes)
- Chess-openings: Add Albin Countergambit, Spassky Variation #278 (thanks LesCyclopes)
- Chess-openings: Add Sicilian Defense: Closed, Carlsen Variation #281 (thanks LesCyclopes)
- Chess-openings: Add Sicilian Defense: Alapin Variation, Anti-Alapin Gambit #282 (thanks LesCyclopes)
- Chess-openings: Add Réti Opening: Advance Variation, Navara Gambit #283 (thanks LesCyclopes)
- Chess-openings: Add Sicilian Defense: Dragon Variation, Hungarian Dragon #284 (thanks LesCyclopes)
- Chess-openings: Add Sicilian Dragon, Yugoslav Attack, Chinese Dragon #285 (thanks LesCyclopes)
- Lila-search: Remove using nested chapter flag #677
- Scalachess: Remove idChess.com from
SiteIsStrictRegex#793
API updates
- API Docs: Fix internal links for new documentation renderer #601 (thanks GhadiSaab)
- API Docs: Bump scalar #606 (thanks marclave)
Accessibility updates
- NVUI: Add more translations #19129
Previous years
Distant past
We started to maintain this less technical changelog only 10 years after Lichess saw the light of day, so there is plenty more history in the commit logs of all the source repositories.