Changelog
This page summarises changes, updates, and new features added to Lichess since 2020. Check out our open source repositories for the details of every change we've ever made.
May 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)
April 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
March 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
February 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
January 2026
Mobile updates
- Add team tournaments #2384
- Add study search sorting #2299
- Add broadcast improvements #2459
- Add log screen #2463
- Update chess openings db #2404
- Remove delay when entering analysis board #2471
- Clear shapes when loading new puzzle #2413 (thanks dnp314)
- Reset puzzle streak correctly when failing the first puzzle #2452 (thanks sam-baumann)
- Fix notification issues on iOS #2451
Site updates
- Add FIDE player photos 84dd433
- Add FIDE player rating history #18868
- Add Opera Mate puzzle theme with translation and icon #18936
- Add Morphy's Mate puzzle theme with translation and icon #18937
- Add Pillsbury's Mate puzzle theme with translation and icon #18939
- Add cover fees option to patron page #18968 (thanks dav1312)
- Patron page improvements #18945, #18950, #18956 (thanks dav1312)
- Broadcasts: Player improvements #18778
- Broadcasts: Player replacement takes precedence over fideTags #18782
- Broadcasts: Sync game height to vertical resizer #18785
- Broadcasts: Show points scored instead of results #18912
- Broadcasts: Add shared group leaderboard #18930, #18944
- Recap: Add patron slide #18840
- Increase variant tourney frequency #18461
- Clock logic improvements #18910
- Focus password input after toggling visibility #18978
- Convert forum reaction png to webp #19000
- Move column visibility logic to page-specific scopes #18958 (thanks dav1312)
- Add register link and spacing to anonDasher UI #18783 (thanks fmata89)
- Add study shortcuts #18833
- Add “Şahî” piece set #18836 (thanks TamerKaratekin)
- Make profile hamburger buttons turn blue when pressed on mobile #18834
- Update Corner Mate Icon #18935
- Fix infinity scrolling in study search #18771
- Fix chat height on tablets #18863
- Fix takeback push notification for correspondence games #18919
- Fix board editor #18931
- Fix castling premove to respect rookCastle preference #18587 (thanks rhowel33), #18824
- Fix PGN copy bug on Safari #18831
- Fix embedtv name #18896
- Broadcaster App: Refactor to use sqlite #98, #99, #100
- Lila-search: Completely overhauled study search #655
- Lila-search: Study with nested chapters #663
- Chess-openings: Add some A37 lines #259 (thanks jdart1)
- Chess-openings: Added some B45 lines #260 (thanks Chess4757)
- Chess-openings: Fix some Polish opening and related lines #261 (thanks jdart1)
- Chess-openings: French Defense: Advance Variation, Kupreichik Variation #263 (thanks xaverh)
- Chess-openings: C18 + C19 fixes #264 (thanks jdart1)
- Chess-openings: Added endgame variation for Semi-Tarrasch #265 (thanks Chess4757)
- Chess-openings: Add some C19 lines #266 (thanks jdart1)
- Chess-openings: Add C18, C54, and C65 lines #268 (thanks Chess4757)
- Database: Add Disco Chess to the related projects section #80 (thanks discochess)
API updates
- Alphabetical order for sidebar sections #593
- Update youtube attribute casing for streamers #591
- Add new .NET client to list #594 (thanks Dblike)
- Remove legacy API documentation endpoint #18812 (thanks meedoomostafa)
- Fix to show ranking - working as documented in the docs #18814 (thanks vivek-kasar38)
Accessibility updates
- NVUI: Fixes and tweaks #18974
- Broadcasts: Add localized round names for relay cards and BBBs #18794
- Recap i18n #18799, #18806
- Translate class quick codes feature #18929
- Translate variants and time controls #18906, #18918, #18927 (thanks dav1312)
- Translate variants for board editor #18984
- Fix speech in replay UI #18947
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.