chessground
Chess board UI developed for lichess.org. It has no chess logic inside so it can be used for chess variants.
10.1.1
3.2K downloads/mo
#4530 most downloaded on pub.dev
lichess-org/flutter-chessground
What this package is like to depend on
Last release 1 months ago
26 Jun 2026
Ships fairly regularly
a new release about every 6 weeks
Nearly every release is documented
notes for 73 of 73 stable releases
Nothing withdrawn
no release was ever pulled
3 years old
74 releases · first in 2023
17 releases in the last 12 months
see the full history below
Release timeline
74 releases · Jun 2023 to Jun 2026Releases
latest 60 of 74-
10.1.126 Jun 2026Release notes
Open source →- Fixed multitouch gesture handling: a second finger could start a new gesture (selecting or moving a piece) while another finger was still resting on the board. The board now tracks the number of active pointers and ignores any gesture while more than one finger is down, even after the finger that started the gesture has been lifted.
-
10.1.018 Jun 2026Release notes
Open source →- Add
ChessboardSettings.moveOnRelease: when enabled, a tap-to-move is committed on pointer release instead of pointer press, and a square target follows the finger so the destination can be adjusted before releasing. - Add
ChessboardColorScheme.copyWith. - Add Totoy piece set.
- Convert all assets to WebP format for better compression and faster loading.
- Add
-
10.0.305 Jun 2026Release notes
Open source →Fixed promotion that was not working when
ChessboardSettings.enableDropswas set to true (for crazyhouse chess variant). The promotion dialog now shows up correctly. -
10.0.204 Jun 2026Release notes
Open source →Fixed a bug where pieces from a finished move animation would disappear when the board was reparented (e.g. during an Android predictive-back gesture). The controller now commits a finished or interrupted animation to the static position instead of relying on the animation notifiers staying populated.
-
10.0.104 Jun 2026Release notes
Open source →Fixed a bug where tree shift after an animated capture would leave stale animation pieces.
-
10.0.003 Jun 2026Release notes
Open source →This is a major release with significant internal changes to the board rendering and interaction model, in order to improve performance during gameplay and to simplify the public API.
It replaces the widget-tree-driven board rendering with a CustomPainter-based approach to bypass Flutter's build and layout phases for frequent interactions (piece selection, moves).
New
ChessboardControlleris now the public API for driving the interactive board. Position updates, premoves, promotion, user-drawn shapes, and the atomic explosion animation are all managed through the controller instead of through widget rebuilds andGameDatacallbacks.StaticChessboardis now the single non-interactive board, with its ownStaticChessboardSettingsand support for shapes, square highlights, touched squares, and a board border.- New
ChessboardSettingsflags:enableDrops,enablePremoves, andcanPromoteToKing. - Faster hit-testing in
Chessboard(HitTestBehavior.opaque).
See the migration guide and the breaking changes below for details.
BREAKING CHANGES
-
The interactive
Chessboard()constructor now requires acontroller:parameter of typeChessboardControllerinstead of separatefen:,game:, andlastMove:parameters. See the migration guide for the before/after pattern. -
Callbacks (
onMove) have been removed fromGameDataand is now an optional parameter on theChessboardwidget itself. -
Premovabletypedef andGameData.premovablehave been removed. Premove state is now managed entirely byChessboardController. TheonSetPremovecallback has been removed fromChessboard. Enable or disable premoves viaChessboardSettings.enablePremoves(defaulttrue). See the migration guide for the before/after pattern. -
Position updates now go through the controller instead of rebuilding the
Chessboardwidget with a newfen. CallChessboardController.updatePosition(GameData game)to advance the board with animation,updatePosition(game, animate: false)to switch positions instantly (e.g. history navigation), andupdatePosition(game, resetPremove: true)to clear any pending premove when jumping to an arbitrary position. The positionfennow lives onGameData(alongsidelastMove, side to move, valid moves, etc.), so a single object describes the whole board state. Drag-and-drop moves are detected internally by the board, so the redundant translation of a dropped piece is suppressed automatically — the parent no longer passes alastDropargument. -
Chessboard.fixed()has been removed. For a non-interactive board, useStaticChessboard(which now acceptssettings,shapes,squareHighlights,onTouchedSquare, and renders an optional border). For a board that is interactive only some of the time (e.g. disabled at the end of a game), useChessboardand drive its controller with game data whoseplayerSideisPlayerSide.none. See the migration guide for the before/after pattern. -
squareHighlightshas been removed fromChessboard(). It is now a parameter ofStaticChessboard. -
explosionSquareshas been removed fromChessboard(). UseChessboardController.triggerExplosion()instead. -
Promotion is now handled fully inside the board. The
onPromotionSelectioncallback has been removed fromChessboard. ThepromotionMovefield andcanPromoteToKingflag have been removed fromGameData.canPromoteToKingis now a field onChessboardSettings. The board callsonMoveexactly once, after the user has selected a promotion piece, with a fully-resolvedNormalMove(promotion role already set). See the migration guide for details. -
DrawShapeOptionsno longer acceptsonCompleteShapeoronClearShapescallbacks. Shape state drawn by the user is now managed internally byChessboardController. See the migration guide for the before/after pattern. -
GameData.droppable(theDroppablerecord wrapper) has been removed. PassvalidDropSquaresdirectly onGameDatainstead, and setChessboardSettings(enableDrops: true)to activate the drop target. TheDroppabletypedef has been removed. See the migration guide for the before/after pattern.
-
9.0.011 Mar 2026Release notes
Open source →BREAKING CHANGES
-
BoardSettings.enableDropMoveshas been removed. UseGameData.droppableinstead. -
Add
DroppabletoGameData. For drop moves,Chessboardwill now only callonMoveif and only ifDroppable.validDropSquarescontains the target square. This makes the behavior consistent with normal moves. Note that dropping a pawn on the back rank does not triggeronMove, even ifvalidDropSquareswould allow it.
-
-
8.2.110 Mar 2026Release notes
Open source →- Fix top player promotion selector when
canPromoteToKingis true. - Preserve the piece animation behaviour even if the system is requesting the animations to be reduced or disabled.
- Fix top player promotion selector when
-
8.2.009 Mar 2026Release notes
Open source →- Add
canPromoteToKinginGameDatato allow promotion to king in variants like Antichess.
- Add
-
8.1.003 Mar 2026Release notes
Open source →- Add
explosionSquarestoChessboardto show explosion effect on specific squares, useful for variants like atomic chess.
- Add
-
8.0.114 Feb 2026Release notes
Open source →- Revert piece is deselected when the board is updated from the parent widget.
-
8.0.013 Feb 2026Release notes
Open source →- Add support for drop moves for crazyhouse chess variant.
### BREAKING CHANGES
{bool? isDrop}parameter of theonMovecallback has been renamed toviaDragAndDropto be more explicit.
-
7.4.214 Feb 2026Release notes
Open source →- Revert piece is deselected when the board is updated from the parent widget.
-
7.4.112 Feb 2026Release notes
Open source →- Ensure any piece is deselected when the board is updated from the parent widget.
-
7.4.008 Feb 2026 -
7.3.023 Nov 2025Release notes
Open source →- New piece sets: firi and xkcd,
- New board: purple,
- Fixed Staunty knights that were not correctly centered.
-
7.2.001 Oct 2025Release notes
Open source →- Add RhosGFX piece set.
- Do not update the square all the time while panning in board editor.
-
7.1.605 Aug 2025 -
7.1.525 Jun 2025 -
7.1.425 Jun 2025Release notes
Open source →- When piece shift method is set to
drag, the piece will awlays be deselected when the pointer is released, even if the piece is dropped on the same square.
- When piece shift method is set to
-
7.1.309 Jun 2025 -
7.1.203 Apr 2025Release notes
Open source →- Fix crash when calling
setStatein pointerUp, pointerMove or pointerCancel callbacks. - flip pieces instead of rotating to keep the shadows in the same direction.
- Fix crash when calling
-
7.1.131 Mar 2025 -
7.1.024 Mar 2025 -
7.0.004 Mar 2025Release notes
Open source →- Make the
huesetting apply only to the board background to avoid changing board highlights colors. - Update dependencies
- Update minimum Dart SDK version to 3.7.0 and minimum Flutter version to 3.29.0
- Make the
-
7.0.0-beta.117 Feb 2025 pre-releaseRelease notes
Open source →- Update dependencies
- Update minimum Dart SDK version to 3.7.0 and minimum Flutter version to 3.29.0
-
6.3.012 Jan 2025Release notes
Open source →- Added an
onTouchedSquarecallback toChessboard Chessboardnow supports highlighting arbitrary squares.StaticChessboardnow supports position change animations.
- Added an
-
6.2.320 Dec 2024 -
6.2.219 Dec 2024 -
6.2.119 Dec 2024Release notes
Open source →- Improved the color filter
- Values of hue and brightness are now precised in the documentation
BrightnessHueFilterwidget is now exposed.
-
6.2.019 Dec 2024 -
6.1.019 Nov 2024Release notes
Open source →- Added a new
DragTargetKindsettings to control the appearance of the drag target. - Detects if the drag is triggered with a mouse or a touch event, and adjust the drag settings accordingly to provide a better experience.
- Removed the
withValuesnot yet available in specified dart sdk version.
- Added a new
-
6.0.009 Nov 2024Release notes
Open source →Breaking changes:
- Removed
ChessboardEditorSettings. TheChessboardEditorwidget now takes aChessboardSettingsobject as a parameter.
New features:
- Add a new
bordersettings to show a border around the board.
Bug fixes:
- Fixed a timer not properly canceled when the board is disposed.
- Removed
-
5.3.031 Oct 2024Release notes
Open source →- Added a new
StaticChessboardwidget that is optimized for scrollable contexts. SolidColorChessboardBackgroundis now implemented withCustomPaintto improve performance when building a lot of boards.- Added a new board colorscheme:
ic.
- Added a new
-
5.2.011 Oct 2024Release notes
Open source →- Introduced a
ChessgroundImagessingleton to precache piece images. This is useful when using the same piece set in multiple places, and to avoid using the global flutter image cache, which can be unpredictable. It should prevent any "blinking" effect that could happen with theImagewidget when the image is reloaded from the cache.
- Introduced a
-
5.1.106 Sep 2024Release notes
Open source →- Reset animation state when the board is updated. This fixes potential issues where the board would display ghost pieces on some conditions.
-
5.1.005 Sep 2024 -
5.0.003 Sep 2024Release notes
Open source →- Added another
Chessboard.fixedconstructor that allows to set the board to a fixed position. - Premove state is now lifted up to the parent widget, in order to allow instant play of premoves.
- Promotion state is now lifted up to the parent widget, in order to allow more control over the promotion dialog.
- Add symmetric piece set (
PieceAssets.symmetric). ChessboardEditornow supports highlighting squares.- Flip
BoardSettings.dragFeedbackOffset.dyfor flipped pieces. Support displaying all pieces upside down based on side to move. - Fix: ensure the board background does not overflow the board.
Breaking changes:
Chessboardnow require agameparameter of typeGameDatainstead ofBoardData.- Added required parameters
pieceandpieceAssetstoPieceShape, removedrole. Added optionalopacityparameter. - Remove 'ChessboardState.opponentsPiecesUpsideDown' in favor of
ChessboardSettings.pieceOrientationBehavior.
- Added another
-
4.0.002 Aug 2024Release notes
Open source →New features:
- Add a
ChessboardEditorwidget, intended to be used as the basis for a board editor like lichess.org/editor. - Add the
writeFenhelper function.
Breaking changes:
- Requires an SDK version of at least 3.3.0.
- Chessground is now dependant on
dartchess. It is only used for the models, and not for the game logic, so Chessground can still be used with any chess library. Boardhas been renamed toChessboard, along with other classes.
Bug fixes:
- Fix arrow bad shape when new destination is the same as the origin: it now returns a circle.
- Fix unsetting premoves:
- When a premove is set, tapping on the same origin square will now unset it.
- dragging a piece to an invalid square will now unset the premove.
- dragging a piece off the board will now unset the premove.
- Add a
-
3.2.016 Jul 2024Release notes
Open source →- Add
pieceShiftMethodtoBoardSetttings, with possible values:either(default),drag, ortapTwoSquares.
- Add
-
3.1.211 Jul 2024Release notes
Open source →- Any simultaneous touch on the board will now cancel the current piece selection or drag.
-
3.1.110 Jul 2024Release notes
Open source →- Allow shapes to be drawn on a non-interactable board.
- Fix a bug where the board would be stuck after transitioning from a non-interactable board to an interactable one.
- Selecting a piece will now clear all shapes on the board.
- Add the
scaleproperty to allShapeclasses. Use a 0.8 scale for the shapes being drawn on the board to distinguish them from the already drawn ones.
-
3.1.008 Jul 2024Release notes
Open source →- Add an optional
scaleparameter to arrows (default isscale: 1.0, matching the previous behavior). - Implement
BoardData.copyWithmethod to allow updating the board data - Implement
BoardDataequality and hashcode operators - Implement
BoardSettingsequality and hashcode operators
- Add an optional
-
3.0.005 Jul 2024Release notes
Open source →Improve board interaction and add support for drawing shapes while playing.
Playing:
- pieces are now moved with pointer down events, instead of a tap events (pointer down followed by a pointer up event): this allows to move a piece faster
- premoves are not anymore cleared when selecting another piece: this matches lichess website behaviour and allow to prepare another move along with the premove that is currently set
Drawing shapes (experimental)
- drawing shapes is now possible while keeping the normal board play interaction (before it was either one or another mode)
- one can draw a shape by holding a finger to an empty square while using a second finger to draw a shape anywhere in the board
- a double tap on an empty square will clear all shapes at once
- to clear a single shape is still supported: draw the same shape again
-
2.6.402 Jul 2024Release notes
Open source →- Fix coordinates and board display on devices with RightToLeft Directionality.
-
2.6.323 May 2024 -
2.6.214 May 2024 -
2.6.112 Apr 2024 -
2.6.012 Apr 2024 -
2.5.006 Mar 2024 -
2.4.105 Mar 2024 -
2.4.019 Feb 2024 -
2.3.008 Feb 2024 -
2.2.126 Jan 2024 -
2.2.012 Jan 2024Release notes
Open source →- Improve quality of PNG files, fix wrong rendering of some piece set like "Cardinal". More info: https://github.com/lichess-org/flutter-chessground/pull/28.
- Piece cache size is now rounded to the nearest integer above the actual value.
-
2.1.027 Oct 2023Release notes
Open source →BoardData.sideToMoveis now optional with no default value, as well asBoardData.isCheckand constructor assertion will guarantee they are set when needed.
-
2.0.027 Oct 2023 -
1.6.104 Oct 2023 -
1.6.004 Oct 2023 -
1.5.326 Sep 2023