Chego is a Go module that implements the rules of chess (board representation, legal move generator, position state management, etc.).
To use chego in your chess server, run go get:
go get github.com/treepeck/chego
Here is a simple example:
package main
import (
"fmt"
"github.com/treepeck/chego"
)
func play(p *chego.Position, m chego.Move) {
moved := p.GetPieceFromSquare(1 << m.From())
captured := p.GetPieceFromSquare(1 << m.To())
p.MakeMove(m, moved, captured)
}
func main() {
l := &chego.MoveList{} // To store generated legal moves.
p := chego.ParseFen(chego.InitialPos)
chego.GenLegalMoves(*p, l)
// Prints "Number of legal moves: 20"
fmt.Printf("Number of legal moves: %d\n", l.Len)
// Scholar's mate.
play(p, chego.NewMove(chego.SF3, chego.SF2, chego.MoveNormal))
play(p, chego.NewMove(chego.SE5, chego.SE7, chego.MoveNormal))
play(p, chego.NewMove(chego.SG4, chego.SG2, chego.MoveNormal))
play(p, chego.NewMove(chego.SH4, chego.SD8, chego.MoveNormal))
// Re-generate legal moves.
chego.GenLegalMoves(*p, l)
// Prints "Is checkmate: true" since the king is under attack and there are
// no legal moves to save it.
fmt.Printf(
"Is checkmate: %t\n",
chego.GenChecksCounter(p.Bitboards, 1^p.ActiveColor) > 0 && l.Len == 0,
)
}Copyright (c) 2025-2026 Artem Bielikov
This project is available under the Mozilla Public License, v. 2.0.
See the LICENSE file for details.