A headless high-performance Go (Baduk/Weiqi) logic engine with move validation and scoring.
npm install gogame.jsgogame.js is a headless JavaScript Go (Baduk/Weiqi) library used for move generation/validation, capture detection, and area scoring - basically everything but the AI.
gogame.js has been extensively tested in Node.js and modern browsers.
bash
npm install gogame.js
`
Importing
$3
`javascript
import { Go } from 'gogame.js'
`
$3
`javascript
const { Go } = require('gogame.js')
`
Example Code
The code below plays a random game of Go on a 9x9 board:
`javascript
import { Go } from 'gogame.js'
const game = new Go(9)
while (!game.done) {
// Logic to select a legal coordinate
game.move('e5')
game.move('pass')
game.move('pass')
}
console.log(game.score())
`
User Interface
By design, gogame.js is a headless library and does not include user interface elements. It is intended to be used with a frontend board renderer.
API
$3
Creates a new game instance.
* size (Integer, default: 19): The dimensions of the board.
* komi (Float, default: 6.5): Points added to White's score.
$3
Returns a string containing an ASCII diagram of the current position.
`javascript
const game = new Go(9)
game.move('e5')
console.log(game.ascii())
// -> a b c d e f g h i
// 9 . . . . . . . . . 9
// 8 . . . . . . . . . 8
// 7 . . . . . . . . . 7
// 6 . . . . . . . . . 6
// 5 . . . . X . . . . 5
// 4 . . . . . . . . . 4
// 3 . . . . . . . . . 3
// 2 . . . . . . . . . 2
// 1 . . . . . . . . . 1
// a b c d e f g h i
`
$3
Returns a flat 1D array representation of the current position. Empty squares are null.
`javascript
const game = new Go(9)
game.board
// -> [null, null, 'B', null, ...]
`
$3
Clears the board.
`javascript
game.clear()
`
$3
Returns the piece on the square. Returns null if the square is empty.
`javascript
game.move('e5')
game.get('e5')
// -> 'B'
`
$3
Executes a move on the board.
* square: The algebraic notation (e.g., 'e5') or 'pass'.
* Returns: A move object on success, or null if the move is illegal (occupied, suicide, or superko).
`javascript
game.move('e5')
// -> { col: 'B', sq: 'e5', caps: 0, board: [...] }
`
$3
Calculates the current score based on Area rules.
* Returns: { B: Number, W: Number }
`javascript
game.score()
// -> { B: 12, W: 18.5 }
`
$3
Returns the current player whose turn it is ('B' or 'W').
$3
A boolean indicating if the game has ended via two consecutive passes.
Technical Specifications
$3
gogame.js uses a standard algebraic coordinate system where the X-axis is represented by letters (a-z) and the Y-axis by numbers (1-n).
$3
This library implements the Positional Superko rule. A move is illegal if it results in a board state that has occurred previously in the game.
$3
gogame.js` uses Area Scoring (Chinese/AGA standard), counting stones on the board plus surrounded empty intersections.