Skip to content

Use stockfish chess engine in your React Native application

License

Notifications You must be signed in to change notification settings

loloof64/ReactNativeStockfish

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@loloof64/react-native-stockfish

Use stockfish chess engine in your React Native application.

Installation

npm install @loloof64/react-native-stockfish

Usage

import {
  useStockfish
} from '@loloof64/react-native-stockfish';

// ...

const [stockfishOutput, setStockfishOutput] = useState('');
  const {startStockfish, stopStockfish, sendCommandToStockfish} = useStockfish({
    onOutput: useCallback((output: string) => {
      setStockfishOutput((prev) => prev + output);
    }, []),
    onError: useCallback((error: string) => {
      setStockfishOutput((prev) => `${prev}\n###Err\n${error}\n###`);
    }, [])
  });

// ...

startStockfish();

// ...

sendCommandToStockfish('go movetime 1000');

// ...

stopStockfish();

Testing example project

Get started with the project:

$ yarn

Run the example app on iOS:

$ yarn example ios

Run the example app on Android:

$ yarn example android

Contributing

See the contributing guide to learn how to contribute to the repository and the development workflow.

Changing Stockfish source files

If you need to upgrade Stockfish source files, create a folder stockfish inside cpp folder, copy the src folder from the stockfish sources into the new stockfish folder.

In stockfish/src/main.cpp replace the name of function main with stockfish_core.

Also you need to make some more adaptive works :

Adapting streams

  • copy the cpp/fixes folder inside the cpp/stockfish folder

  • replace all calls to cout << #SomeContent# << endl by fakeout << #SomeContent# << fakeendl (And ajust also calls to cout.rdbuf() by fakeout.rdbuf()) But do not replace calls to sync_cout.

  • copy folder cpp/fixes inside the stockfish folder

  • add include to ../fixes/fixes.h in all related files (and adjust the include path accordingly)

  • proceed accordingly for cin : replace by fakein

  • and the same for cerr: replace by fakeerr

  • in misc.h replace

#define sync_cout std::cout << IO_LOCK
#define sync_endl std::endl << IO_UNLOCK

with

#define sync_cout fakeout << IO_LOCK
#define sync_endl fakeendl << IO_UNLOCK

and include ../../fixes/fixes.h

Adapting NNUE

In file CMakeLists.txt replace the names of big and small NNUE by the ones you can find in file cpp/stockfish/src/evaluate.h. Also replace those values in the file loloof64-react-native-stockfish.podspec, as well as in the file android/CMakeLists.txt.

License

MIT


Made with create-react-native-library

Credits

Using sources of Stockfish 17.