NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #4727 most downloaded on pub.dev
Chess board UI developed for lichess.org. It has no chess logic inside so it can be used for chess variants.
Last release 9 days ago
29 Sep 2026
Ships fairly regularly
a new release about every 2 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
3 years old
76 releases · first in 2023
One column per quarter.
Removed dependency on Flutter's material library.
Add CustomShape: a Shape that draws an arbitrary widget on a square.
CustomShape: a Shape that draws an arbitrary widget on a square.Fixed multitouch gesture handling: a second finger could start a new gesture (selecting or moving a piece) while another finger was still resting on t
Add ChessboardSettings.moveOnRelease: when enabled, a tap-to-move is committed on pointer release instead of pointer press, and a square target follow
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.ChessboardColorScheme.copyWith.Fixed promotion that was not working when ChessboardSettings.enableDrops was set to true (for crazyhouse chess variant). The promotion dialog now show
Fixed promotion that was not working when ChessboardSettings.enableDrops was set to
true (for crazyhouse chess variant). The promotion dialog now shows up correctly.
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)
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.
Fixed a bug where tree shift after an animated capture would leave stale animation pieces.
Fixed a bug where tree shift after an animated capture would leave stale animation pieces.
See the migration guide and the breaking changes below for details.
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).
ChessboardController is 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 and GameData callbacks.StaticChessboard is now the single non-interactive board, with its own
StaticChessboardSettings and support for shapes, square highlights, touched
squares, and a board border.ChessboardSettings flags: enableDrops, enablePremoves, and
canPromoteToKing.Chessboard (HitTestBehavior.opaque).See the migration guide and the breaking changes below for details.
The interactive Chessboard() constructor now requires a controller: parameter
of type ChessboardController instead of separate fen:, game:, and lastMove:
parameters. See the migration guide for the before/after pattern.
Callbacks (onMove) have been removed from GameData and is now an optional
parameter on the Chessboard widget itself.
Premovable typedef and GameData.premovable have been removed. Premove state
is now managed entirely by ChessboardController. The onSetPremove callback
has been removed from Chessboard. Enable or disable premoves via
ChessboardSettings.enablePremoves (default true). See the
migration guide for the before/after pattern.
Position updates now go through the controller instead of rebuilding the
Chessboard widget with a new fen. Call
ChessboardController.updatePosition(GameData game) to advance the board with
animation, updatePosition(game, animate: false) to switch positions instantly
(e.g. history navigation), and updatePosition(game, resetPremove: true) to
clear any pending premove when jumping to an arbitrary position. The position
fen now lives on GameData (alongside lastMove, 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 a lastDrop
argument.
Chessboard.fixed() has been removed. For a non-interactive board, use
StaticChessboard (which now accepts settings,
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), use Chessboard and drive its controller with game data whose playerSide is
PlayerSide.none. See the migration guide for the before/after pattern.
squareHighlights has been removed from Chessboard(). It is now a parameter of
StaticChessboard.
explosionSquares has been removed from Chessboard(). Use
ChessboardController.triggerExplosion() instead.
Promotion is now handled fully inside the board. The onPromotionSelection
callback has been removed from Chessboard. The promotionMove field and
canPromoteToKing flag have been removed from GameData. canPromoteToKing
is now a field on ChessboardSettings. The board calls onMove exactly once,
after the user has selected a promotion piece, with a fully-resolved
NormalMove (promotion role already set). See the
migration guide for details.
DrawShapeOptions no longer accepts onCompleteShape or onClearShapes
callbacks. Shape state drawn by the user is now managed internally by
ChessboardController. See the migration guide for the
before/after pattern.
GameData.droppable (the Droppable record wrapper) has been removed.
Pass validDropSquares directly on GameData instead, and set
ChessboardSettings(enableDrops: true) to activate the drop target.
The Droppable typedef has been removed. See the
migration guide for the before/after pattern.
BoardSettings.enableDropMoves has been removed. Use GameData.droppable instead.
BoardSettings.enableDropMoves has been removed. Use GameData.droppable
instead.
Add Droppable to GameData. For drop moves, Chessboard will now only call onMove
if and only if Droppable.validDropSquares contains the target square.
This makes the behavior consistent with normal moves.
Note that dropping a pawn on the back rank does not trigger onMove, even if validDropSquares would allow it.
Fix top player promotion selector when canPromoteToKing is true.
canPromoteToKing is true.Add canPromoteToKing in GameData to allow promotion to king in variants like Antichess.
canPromoteToKing in GameData to allow promotion to king in variants
like Antichess.Add explosionSquares to Chessboard to show explosion effect on specific squares, useful for variants like atomic chess.
explosionSquares to Chessboard to show explosion effect on specific
squares, useful for variants like atomic chess.Revert piece is deselected when the board is updated from the parent widget.
Add support for drop moves for crazyhouse chess variant.
### BREAKING CHANGES
{bool? isDrop} parameter of the onMove callback has been renamed to viaDragAndDrop to be more
explicit.Revert piece is deselected when the board is updated from the parent widget.
Ensure any piece is deselected when the board is updated from the parent widget.
- Update dartchess to 0.12.0
Fixed Staunty knights that were not correctly centered.
Do not update the square all the time while panning in board editor.
Fix promotion selection order if player on top promotes
Fix promotion selection order if player on top promotes
Fix board image background not aligned with pieces on tablets.
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 squ
drag, the piece will awlays be deselected
when the pointer is released, even if the piece is dropped on the same square.Make board annotations always on top of shapes.
Fix crash when calling setState in pointerUp, pointerMove or pointerCancel callbacks.
setState in pointerUp, pointerMove or pointerCancel
callbacks.- Update dartchess to 0.11.0
Expose 'BoardShapeWidget' class.
Make the hue setting apply only to the board background to avoid changing board highlights colors.
hue setting apply only to the board background to avoid changing
board highlights colors.Update minimum Dart SDK version to 3.7.0 and minimum Flutter version to 3.29.0
Added an onTouchedSquare callback to Chessboard
onTouchedSquare callback to ChessboardChessboard now supports highlighting arbitrary squares.StaticChessboard now supports position change animations.- Fix board editor color filter
Fix default value of brightness
Values of hue and brightness are now precised in the documentation
BrightnessHueFilter widget is now exposed.Add the possibility to change board colors
Added a new DragTargetKind settings to control the appearance of the drag target.
DragTargetKind settings to control the appearance of the drag
target.withValues not yet available in specified dart sdk version.Removed ChessboardEditorSettings. The ChessboardEditor widget now takes a ChessboardSettings object as a parameter.
ChessboardEditorSettings. The ChessboardEditor widget now takes a
ChessboardSettings object as a parameter.border settings to show a border around the board.Added a new StaticChessboard widget that is optimized for scrollable contexts.
StaticChessboard widget that is optimized for scrollable
contexts.SolidColorChessboardBackground is now implemented with CustomPaint to improve
performance when building a lot of boards.ic.Introduced a ChessgroundImages singleton to precache piece images. This is useful when using the same piece set in multiple places, and to avoid using
ChessgroundImages singleton 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 the Image
widget when the image is reloaded from the cache.Reset animation state when the board is updated. This fixes potential issues where the board would display ghost pieces on some conditions.
Dragging a piece to the same square will now keep the piece selected.
Added another Chessboard.fixed constructor that allows to set the board to a fixed position.
Chessboard.fixed constructor that allows to set the board to a
fixed position.PieceAssets.symmetric).ChessboardEditor now supports highlighting squares.BoardSettings.dragFeedbackOffset.dy for flipped pieces.
Support displaying all pieces upside down based on side to move.Chessboard now require a game parameter of type GameData instead
of BoardData.piece and pieceAssets to PieceShape, removed role. Added optional
opacity parameter.ChessboardSettings.pieceOrientationBehavior.Add a ChessboardEditor widget, intended to be used as the basis for a board editor like lichess.org/editor.
ChessboardEditor widget, intended to be used as the basis for a board editor like lichess.org/editor.writeFen helper function.dartchess. It is only used for the models,
and not for the game logic, so Chessground can still be used with any chess
library.Board has been renamed to Chessboard, along with other classes.Add pieceShiftMethod to BoardSetttings, with possible values: either (default), drag, or tapTwoSquares.
pieceShiftMethod to BoardSetttings, with possible values: either (default), drag, or tapTwoSquares.Any simultaneous touch on the board will now cancel the current piece selection or drag.
Allow shapes to be drawn on a non-interactable board.
scale property to all Shape classes. Use a 0.8 scale for the
shapes being drawn on the board to distinguish them from the already drawn
ones.Add an optional scale parameter to arrows (default is scale: 1.0, matching the previous behavior).
scale parameter to arrows (default is scale: 1.0, matching the previous behavior).BoardData.copyWith method to allow updating the board dataBoardData equality and hashcode operatorsBoardSettings equality and hashcode operatorsImprove board interaction and add support for drawing shapes while playing.
Improve board interaction and add support for drawing shapes while playing.
Fix coordinates and board display on devices with RightToLeft Directionality.
Improve coordinates display on the board.
Fix borderRadius settings not being applied to the board highlights.
borderRadius settings not being applied to the board highlights.Fix BoardSettings copyWith method.
copyWith method.Add 2 new settings: borderRadius and boxShadow.
borderRadius and boxShadow.Add a new shape type: piece (useful to show promotion hints).
Don't clip board: fix annotations display on edge.
Deprecate BoardTheme and export Background.
BoardTheme and export Background.Remove handling of android gestures exclusion.
Upgrade fast_immutable_collections to version 10.0.0.
Improve quality of PNG files, fix wrong rendering of some piece set like "Cardinal". More info: https://github.com/lichess-org/flutter-chessground/pul
BoardData.sideToMove is now optional with no default value, as well as BoardData.isCheck and constructor assertion will guarantee they are set when ne
BoardData.sideToMove is now optional with no default value, as well as
BoardData.isCheck and constructor assertion will guarantee they are set when
needed.BoardData.sideToMove is now a required parameter.
BoardData.sideToMove is now a required parameter.Fix missing blindfoldMode to BoardSettings.copyWith
Your coding agent can read these notes before it upgrades. Set up the MCP server →