Skip to content

foo123/sunfish.js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sunfish.js

JavaScript port of Sunfish Python Chess Engine

Example for node:

const sunfish = require('./sunfish.js');

function runCMD(cmd)
{
    sunfish.engine(cmd, (output) => console.log(output));
}

runCMD('uci');
runCMD('isready');
runCMD('position startpos moves e2e4');
runCMD('go depth 4');

Example for browser ran in web worker:

const sunfish = {engine: new Worker('./sunfish.js')};

function runCMD(cmd)
{
    sunfish.engine.postMessage(cmd);
}
sunfish.engine.onmessage = function(evt) {
    console.log(evt && evt.data ? evt.data : evt);
};

runCMD('uci');
runCMD('isready');
runCMD('position startpos moves e2e4');
runCMD('go depth 4');

Output:

id name sunfish 2023
uciok
readyok
bestmove e7e5

NNUE example for node:

  • Transform the NNUE model pickle from sunfish repo to JSON using the nnue/nnue-pickle-to-json.py tool (here tanh.pickle NNUE model is used).
const sunfish_nnue = require('./sunfish_nnue.js');

// NNUE json model
sunfish_nnue.nnue(JSON.parse(require('fs').readFileSync(require('path').join(__dirname, './nnue/models/tanh.json'))));

function runCMD(cmd)
{
    sunfish_nnue.engine(cmd, (output) => console.log(output));
}

runCMD('uci');
runCMD('isready');
runCMD('position startpos moves e2e4');
runCMD('go depth 4 wtime 10000 btime 10000');

Output:

id name sunfish nnue
uciok
readyok
bestmove d7d5

NNUE example for browser ran in web worker:

  • Transform the NNUE model pickle from sunfish repo to JSON using the nnue/nnue-pickle-to-json.py tool (here tanh.pickle NNUE model is used).
const sunfish_nnue = {engine: new Worker('./sunfish_nnue.js')};
const NNUE_JSON = {/*..*/}; // JSON of NNUE model

function loadNNUE(nnue_json)
{
    // string form of JSON needs to be sent
    sunfish_nnue.engine.postMessage({nnue:"string" === typeof nnue_json ? nnue_json : JSON.stringify(nnue_json)});
}
function runCMD(cmd)
{
    sunfish_nnue.engine.postMessage(cmd);
}
sunfish_nnue.engine.onmessage = function(evt) {
    console.log(evt && evt.data ? evt.data : evt);
};

loadNNUE(NNUE_JSON);
runCMD('uci');
runCMD('isready');
runCMD('position startpos moves e2e4');
runCMD('go depth 4');

Output:

nnueok
id name sunfish nnue
uciok
readyok
bestmove d7d5

About

JavaScript port of Sunfish Python Chess Engine

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published