{"_id":"@chessle/chess.js-extended","_rev":"4-737d436700fb049f8026268f0ee13e26","name":"@chessle/chess.js-extended","dist-tags":{"latest":"0.1.0"},"versions":{"0.0.1":{"name":"@chessle/chess.js-extended","version":"0.0.1","keywords":["chess","stockfish","browser","chess-engine","webassembly","position-evaluation","chess-analysis"],"author":{"name":"Chessle"},"license":"GPL-3.0","_id":"@chessle/chess.js-extended@0.0.1","maintainers":[{"name":"willlamerton","email":"william.lamerton@gmail.com"}],"homepage":"https://github.com/Chessle-Apps/chess.js-extended#readme","bugs":{"url":"https://github.com/Chessle-Apps/chess.js-extended/issues"},"dist":{"shasum":"15206359470574d6a3ae96c89b95f332acb6d966","tarball":"https://registry.npmjs.org/@chessle/chess.js-extended/-/chess.js-extended-0.0.1.tgz","fileCount":15,"integrity":"sha512-le/ooilB7I+UYGm9BtZqmkUVLTxqjIR0riW7sY8CveixxiOxJ79sFQKdFmoUftnKUIP8XlY/Z8M3+EdVzTrc2Q==","signatures":[{"sig":"MEUCIQDbBFY1SaRsxRZOgEWMO64TWxbpt7wfAyvsY5mw7A6EmAIgK5Cv4pa9kbHmflc6ncavgWcduN6GlIZKRv+Jl9NwkcI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8044812},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/esm/index.js","browser":"dist/index.js","gitHead":"24c3c67568678fc2c374a25c92b3ef8821647704","scripts":{"dev":"tsc --watch","build":"pnpm run clean && pnpm run build:cjs && pnpm run build:esm","clean":"rm -rf dist","prebuild":"node generate-bundle.js","build:cjs":"tsc","build:esm":"tsc --project tsconfig.esm.json"},"_npmUser":{"name":"willlamerton","email":"william.lamerton@gmail.com"},"_npmVersion":"10.8.3","description":"A powerful browser-only chess engine package that bundles Stockfish for position evaluation and analysis on top of chess.js","directories":{},"_nodeVersion":"22.9.0","dependencies":{"chess.js":"^1.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","typescript":"5.7.3","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/chess.js-extended_0.0.1_1750090150015_0.5143345436495133","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@chessle/chess.js-extended","version":"0.0.2","keywords":["chess","stockfish","browser","chess-engine","webassembly","position-evaluation","chess-analysis"],"author":{"name":"Chessle"},"license":"GPL-3.0","_id":"@chessle/chess.js-extended@0.0.2","maintainers":[{"name":"willlamerton","email":"william.lamerton@gmail.com"}],"homepage":"https://github.com/Chessle-Apps/chess.js-extended#readme","bugs":{"url":"https://github.com/Chessle-Apps/chess.js-extended/issues"},"dist":{"shasum":"391c2384e610cf24be1714a163ec2fefe8be3dee","tarball":"https://registry.npmjs.org/@chessle/chess.js-extended/-/chess.js-extended-0.0.2.tgz","fileCount":15,"integrity":"sha512-cfZjE7A38DtF1V/iix/9hUC08zQpXeOeFAwfh+J3sIb3wnQ02wlkaJ+5G4cQ5juCUyTZVT1amTxmnVJMq7Es7g==","signatures":[{"sig":"MEYCIQDsO/PSctcDi/S9RuEFvv0kui95u0iEyEVJLnCvBKe5zAIhAM3tsz/gYp2eQz0a6e6YXkT12cnqA8wHWbGvFzutRqXH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8044829},"main":"dist/index.js","_from":"file:chessle-chess.js-extended-0.0.2.tgz","types":"dist/index.d.ts","module":"dist/esm/index.js","browser":"dist/index.js","scripts":{"dev":"tsc --watch","build":"pnpm run clean && pnpm run build:cjs && pnpm run build:esm","clean":"rm -rf dist","prebuild":"node generate-bundle.js","build:cjs":"tsc","build:esm":"tsc --project tsconfig.esm.json"},"_npmUser":{"name":"willlamerton","email":"william.lamerton@gmail.com"},"_resolved":"/tmp/e9acb65dca59cc402f111f8ecfca5cf0/chessle-chess.js-extended-0.0.2.tgz","_integrity":"sha512-cfZjE7A38DtF1V/iix/9hUC08zQpXeOeFAwfh+J3sIb3wnQ02wlkaJ+5G4cQ5juCUyTZVT1amTxmnVJMq7Es7g==","_npmVersion":"10.8.2","description":"A powerful browser-only chess engine package that bundles Stockfish for position evaluation and analysis on top of chess.js","directories":{},"_nodeVersion":"20.19.2","dependencies":{"chess.js":"^1.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","typescript":"5.7.3","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/chess.js-extended_0.0.2_1750094929700_0.24715551594743101","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@chessle/chess.js-extended","version":"0.0.3","keywords":["chess","stockfish","browser","chess-engine","webassembly","position-evaluation","chess-analysis"],"author":{"name":"Chessle"},"license":"GPL-3.0","_id":"@chessle/chess.js-extended@0.0.3","maintainers":[{"name":"willlamerton","email":"william.lamerton@gmail.com"}],"homepage":"https://github.com/Chessle-Apps/chess.js-extended#readme","bugs":{"url":"https://github.com/Chessle-Apps/chess.js-extended/issues"},"dist":{"shasum":"6fd2fa3b8f1d01a7632d76ac36058b6a7d09b163","tarball":"https://registry.npmjs.org/@chessle/chess.js-extended/-/chess.js-extended-0.0.3.tgz","fileCount":15,"integrity":"sha512-bteuPO2QUJuT5vVPiMGcMYyvVzIM3d238srPPilbExquacrYU89UnDmvhQNjb2vvmQoKmZ0BtXgYSI0IjC/zBA==","signatures":[{"sig":"MEUCIFWSoR55xXfOD0K5zcwJG+JmZ5YIvmysSoKoAAWo6T/nAiEAw42Iso/72dZO11QRVpRMqAUmbPMlcnTdjQWcJq+getU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8044829},"main":"dist/index.js","_from":"file:chessle-chess.js-extended-0.0.3.tgz","types":"dist/index.d.ts","module":"dist/esm/index.js","browser":"dist/index.js","scripts":{"dev":"tsc --watch","build":"pnpm run clean && pnpm run build:cjs && pnpm run build:esm","clean":"rm -rf dist","prebuild":"node generate-bundle.js","build:cjs":"tsc","build:esm":"tsc --project tsconfig.esm.json"},"_npmUser":{"name":"willlamerton","actor":{"name":"willlamerton","type":"user","email":"william.lamerton@gmail.com"},"email":"william.lamerton@gmail.com"},"_resolved":"/tmp/5aaf42601f03ba0720e4009b33ffd0c0/chessle-chess.js-extended-0.0.3.tgz","_integrity":"sha512-bteuPO2QUJuT5vVPiMGcMYyvVzIM3d238srPPilbExquacrYU89UnDmvhQNjb2vvmQoKmZ0BtXgYSI0IjC/zBA==","_npmVersion":"10.8.2","description":"A powerful browser-only chess engine package that bundles Stockfish for position evaluation and analysis on top of chess.js","directories":{},"_nodeVersion":"20.19.2","dependencies":{"chess.js":"^1.4.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","typescript":"5.7.3","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/chess.js-extended_0.0.3_1750282419934_0.7024744238916283","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@chessle/chess.js-extended","version":"0.1.0","description":"A powerful browser-only chess engine package that bundles Stockfish for position evaluation and analysis on top of chess.js","main":"dist/index.js","module":"dist/esm/index.js","types":"dist/index.d.ts","browser":"dist/index.js","keywords":["chess","stockfish","browser","chess-engine","webassembly","position-evaluation","chess-analysis"],"author":{"name":"Chessle"},"license":"GPL-3.0","homepage":"https://github.com/Chessle-Apps/chess.js-extended#readme","bugs":{"url":"https://github.com/Chessle-Apps/chess.js-extended/issues"},"dependencies":{"chess.js":"^1.4.0"},"devDependencies":{"@types/node":"^20","@typescript-eslint/eslint-plugin":"^8.36.0","@yarnpkg/esbuild-plugin-pnp":"3.0.0-rc.15","esbuild":"^0.25.6","eslint":"^8.57.1","jsdom":"^26.1.0","tsx":"^4.19.3","typescript":"5.7.3","vitest":"^3.2.4"},"scripts":{"prebuild":"node scripts/bundle-stockfish.mjs","build":"pnpm run lint && pnpm run test:run && pnpm run clean && node build.mjs","dev":"node build.mjs --watch","clean":"rm -rf dist","lint":"eslint . --ext .ts","test":"vitest","test:run":"vitest run","test:watch":"vitest watch","test:coverage":"vitest run --coverage"},"_id":"@chessle/chess.js-extended@0.1.0","_integrity":"sha512-qIWrH3GfN8ODE3R7WMDIp37qgh+CCKvKsiR3N2b6yV9r85fAbMKE9UoIcS4Dd/yDFlTfO0LHoXSNBQkwsfCjEg==","_resolved":"/tmp/503c57aede4420d3cefd2f67a13dbed8/chessle-chess.js-extended-0.1.0.tgz","_from":"file:chessle-chess.js-extended-0.1.0.tgz","_nodeVersion":"20.19.3","_npmVersion":"10.8.2","dist":{"integrity":"sha512-qIWrH3GfN8ODE3R7WMDIp37qgh+CCKvKsiR3N2b6yV9r85fAbMKE9UoIcS4Dd/yDFlTfO0LHoXSNBQkwsfCjEg==","shasum":"b3341ef910bd31b35ce2a6acc15873cec161a254","tarball":"https://registry.npmjs.org/@chessle/chess.js-extended/-/chess.js-extended-0.1.0.tgz","fileCount":4,"unpackedSize":2791401,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDBrO5FQFqT701m6Dh0n9wEqtQcWiieilX6djR+iIcvwgIgMYtzK1KCFEspad5luUQPlbomr/hfwVk4Biyfllm4MuM="}]},"_npmUser":{"name":"willlamerton","email":"william.lamerton@gmail.com"},"directories":{},"maintainers":[{"name":"willlamerton","email":"william.lamerton@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/chess.js-extended_0.1.0_1752414462625_0.7135641914915112"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-16T16:09:09.921Z","modified":"2025-07-13T13:47:43.129Z","0.0.1":"2025-06-16T16:09:10.247Z","0.0.2":"2025-06-16T17:28:49.921Z","0.0.3":"2025-06-18T21:33:40.156Z","0.1.0":"2025-07-13T13:47:42.920Z"},"bugs":{"url":"https://github.com/Chessle-Apps/chess.js-extended/issues"},"author":{"name":"Chessle"},"license":"GPL-3.0","homepage":"https://github.com/Chessle-Apps/chess.js-extended#readme","keywords":["chess","stockfish","browser","chess-engine","webassembly","position-evaluation","chess-analysis"],"description":"A powerful browser-only chess engine package that bundles Stockfish for position evaluation and analysis on top of chess.js","maintainers":[{"name":"willlamerton","email":"william.lamerton@gmail.com"}],"readme":"# chess.js-extended\n\nA powerful browser-only chess engine package that extends chess.js with built-in Stockfish evaluation capabilities. This package bundles Stockfish for position evaluation and analysis directly in the browser using Web Workers and WebAssembly.\n\n## Features\n\n- 🚀 **Built on chess.js**: All standard chess.js functionality included\n- 🧠 **Stockfish Integration**: Bundled Stockfish engine for position evaluation\n- 🌐 **Browser-Only**: Designed specifically for browser environments with Web Worker support\n- ⚡ **WebAssembly Support**: Automatically uses WASM when available for better performance\n- 🎯 **Position Evaluation**: Get numerical evaluations and mate scores\n- 📈 **Multi-PV Analysis**: Get multiple principal variations for deeper insight\n- 🔍 **Suggested Lines**: Get full suggested lines of play in SAN format\n- ⚙️ **Flexible Options**: Configure search depth, time limits, and more\n- 📦 **Multiple Formats**: CommonJS and ES Module builds included\n\n## Installation\n\n```bash\npnpm install @chessle/chess.js-extended\n```\n\n## Quick Start\n\n```typescript\nimport { ChessEngine } from \"@chessle/chess.js-extended\";\n\nconst engine = new ChessEngine();\n\n// Make some moves\nengine.move(\"e4\");\nengine.move(\"e5\");\nengine.move(\"Nf3\");\n\n// Evaluate the position\nconst lines = await engine.evaluatePosition();\n\nif (lines.length > 0) {\n  const bestLine = lines[0];\n  console.log(`Evaluation: ${bestLine.evaluation}`);\n  console.log(`Best move: ${bestLine.line[0]}`);\n  console.log(`Suggested line: ${bestLine.line.join(\" \")}`);\n}\n```\n\n## Dual-Mode API: Promise and Streaming\n\n`ChessEngine` offers two distinct modes for analysis to suit different use cases: a simple **Promise-based** mode for one-shot evaluations and a powerful **Streaming API** for continuous analysis.\n\n**Important:** A single `ChessEngine` instance can only perform one analysis at a time. Attempting to start a new evaluation or analysis while one is already in progress will result in an error.\n\n### 1. Promise-Based Analysis (One-Shot)\n\nThe `evaluatePosition()` method is perfect for when you need a single, final evaluation of the current board state. It returns a promise that resolves once Stockfish has completed its analysis.\n\n```typescript\nimport { ChessEngine } from \"@chessle/chess.js-extended\";\n\nconst engine = new ChessEngine();\nengine.load(\"rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2\");\n\nasync function getEvaluation() {\n  console.log(\"Evaluating position...\");\n  const lines = await engine.evaluatePosition({ depth: 18 });\n  console.log(\"Evaluation complete.\");\n\n  if (lines.length > 0) {\n    const bestLine = lines[0];\n    console.log(`Evaluation: ${bestLine.evaluation}`);\n    console.log(`Best move: ${bestLine.line[0]}`);\n  }\n}\n\ngetEvaluation();\n```\n\n### 2. Streaming Analysis (Continuous)\n\nThe streaming API is ideal for applications that need to display real-time engine analysis, such as a live chessboard UI.\n\n- `startAnalysis(options)`: Begins an infinite analysis of the current position.\n- `on('analysis', callback)`: Listens for analysis updates. The callback receives an array of the latest `AnalysisLine` objects as the engine deepens its search.\n- `stopAnalysis()`: Sends the `stop` command to Stockfish, which will then emit a final `bestmove` and terminate the analysis.\n\n```typescript\nimport { ChessEngine } from \"@chessle/chess.js-extended\";\n\nconst engine = new ChessEngine();\nengine.load(\"r1bqkbnr/pp1ppppp/2n5/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R w KQkq - 2 3\");\n\n// 1. Listen for analysis updates\nengine.on(\"analysis\", (lines) => {\n  console.clear();\n  console.log(\"Current Analysis:\");\n  lines.forEach((line) => {\n    console.log(`- ${line.line.join(\" \")} (Eval: ${line.evaluation})`);\n  });\n});\n\n// 2. Start the analysis\nconsole.log(\"Starting continuous analysis...\");\nengine.startAnalysis({ multiPV: 3 });\n\n// 3. Stop the analysis after a few seconds\nsetTimeout(() => {\n  console.log(\"Stopping analysis...\");\n  engine.stopAnalysis();\n  console.log(\"Analysis stopped.\");\n}, 5000);\n```\n\n## API Reference\n\n### ChessEngine Class\n\nThe `ChessEngine` class extends the standard chess.js `Chess` class with evaluation capabilities.\n\n#### Constructor\n\n```typescript\nconst engine = new ChessEngine();\n```\n\n#### Properties\n\n- `lines: AnalysisLine[]` - An array of the most recent final analysis lines from the last completed `evaluatePosition` call.\n\n#### Methods\n\n##### evaluatePosition(options?)\n\nEvaluates the current position using Stockfish and returns a single result.\n\n```typescript\nawait engine.evaluatePosition(options?: StockfishOptions): Promise<AnalysisLine[]>;\n```\n\n##### startAnalysis(options?)\n\nStarts a continuous, infinite analysis of the current position. Use the `on('analysis', ...)` method to receive updates.\n\n```typescript\nengine.startAnalysis(options?: StockfishOptions): void;\n```\n\n##### stopAnalysis()\n\nStops a running analysis that was started with `startAnalysis()`.\n\n```typescript\nengine.stopAnalysis(): void;\n```\n\n##### on(event, listener)\n\nSubscribes to engine events. Currently, only the `analysis` event is supported.\n\n```typescript\nengine.on('analysis', (lines: AnalysisLine[]) => void): void;\n```\n\n##### off(event, listener)\n\nUnsubscribes from engine events.\n\n```typescript\nengine.off('analysis', (lines: AnalysisLine[]) => void): void;\n```\n\n### StockfishOptions Interface\n\n```typescript\ninterface StockfishOptions {\n  /** Search depth (default: 15) */\n  depth?: number;\n  /** Thinking time in milliseconds */\n  time?: number;\n  /** Exact time to think in milliseconds */\n  movetime?: number;\n  /** Number of nodes to search */\n  nodes?: number;\n  /** Number of principal variations to search for (default: 1) */\n  multiPV?: number;\n  /** Skill level of the engine (0-20) */\n  skillLevel?: number;\n  /** Contempt value for the engine (-100 to 100) */\n  contempt?: number;\n  /** Number of threads to use (1-512) */\n  threads?: number;\n  /** Hash table size in MB (1-32768) */\n  hash?: number;\n  /** Custom Stockfish worker URL (optional) */\n  stockfishUrl?: string;\n}\n```\n\n### AnalysisLine Interface\n\n```typescript\ninterface AnalysisLine {\n  /** The evaluation of the position (e.g., 0.5, -1.2, \"M5\", \"M-3\") */\n  evaluation: number | string;\n  /** The suggested sequence of moves in SAN format */\n  line: string[];\n}\n```\n\n## Usage Examples\n\n### Basic Position Evaluation\n\n```typescript\nimport { ChessEngine } from \"chess.js-extended\";\n\nconst engine = new ChessEngine();\nengine.load(\"rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1\");\n\nconst lines = await engine.evaluatePosition();\nif (lines.length > 0) {\n  console.log(`Position evaluation: ${lines[0].evaluation}`);\n  // Output: Position evaluation: 0.15\n}\n```\n\n### Multi-PV Analysis\n\nGet the top 3 best moves and their evaluations.\n\n```typescript\nconst lines = await engine.evaluatePosition({ multiPV: 3 });\n\nlines.forEach((line, index) => {\n  console.log(\n    `Rank ${index + 1}: ${line.line.join(\" \")} (Eval: ${line.evaluation})`,\n  );\n});\n// Output:\n// Rank 1: Nc6 ... (Eval: 0.15)\n// Rank 2: c5 ... (Eval: 0.20)\n// Rank 3: e6 ... (Eval: 0.22)\n```\n\n### Time-Limited Analysis\n\n```typescript\n// Analyze for exactly 5 seconds\nconst lines = await engine.evaluatePosition({ movetime: 5000 });\nif (lines.length > 0) {\n  console.log(`Timed evaluation: ${lines[0].evaluation}`);\n}\n```\n\n### Configuring Engine Parameters\n\nYou can fine-tune the engine's performance and playing style by providing additional options.\n\n```typescript\nconst lines = await engine.evaluatePosition({\n  skillLevel: 10, // Set skill level to 10 (0-20)\n  contempt: 20, // Set contempt to 20 (-100-100)\n  threads: 4, // Use 4 threads\n  hash: 128, // Use 128MB of hash memory\n});\n\nif (lines.length > 0) {\n  console.log(`Evaluation with custom parameters: ${lines[0].evaluation}`);\n}\n```\n\n### Getting the Best Move and Line\n\n```typescript\nconst lines = await engine.evaluatePosition();\n\nif (lines.length > 0) {\n  const bestLine = lines[0];\n  console.log(`Best move: ${bestLine.line[0]}`);\n  engine.move(bestLine.line[0]);\n\n  console.log(`Principal variation: ${bestLine.line.join(\" \")}`);\n  // Output: Principal variation: Nf3 Nc6 Bc4 Bc5\n}\n```\n\n### Handling Mate Scores\n\n```typescript\n// Load a position with checkmate\nengine.load(\"rnb1kbnr/pppp1ppp/4p3/8/6Pq/5P2/PPPPP2P/RNBQKBNR w KQkq - 1 3\");\n\nconst lines = await engine.evaluatePosition();\nif (lines.length > 0) {\n  console.log(`Evaluation: ${lines[0].evaluation}`);\n  // Output: Evaluation: M-1 (mate in 1 for black)\n}\n```\n\n### Using All chess.js Methods\n\nSince `ChessEngine` extends `Chess`, you have access to all standard chess.js functionality:\n\n```typescript\nconst engine = new ChessEngine();\n\n// Standard chess.js methods work as expected\nconsole.log(engine.ascii());\nconsole.log(engine.moves());\nconsole.log(engine.inCheck());\nconsole.log(engine.isGameOver());\n\n// Make moves\nengine.move(\"e4\");\nengine.move({ from: \"e7\", to: \"e5\" });\n\n// Undo moves\nengine.undo();\n\n// Get FEN\nconsole.log(engine.fen());\n\n// And then evaluate\nconst lines = await engine.evaluatePosition();\n```\n\n## Browser Compatibility\n\nThis package requires:\n\n- Web Worker support\n- WebAssembly support (recommended, falls back to JavaScript if unavailable)\n- Modern browser with ES6+ support\n\n## Performance Notes\n\n- **WebAssembly**: Automatically detected and used when available\n- **Web Workers**: Stockfish runs in a separate thread to avoid blocking the main thread\n- **Memory Management**: Worker instances are properly cleaned up after analysis\n- **Timeout Protection**: Analysis automatically times out after 30 seconds to prevent hanging\n\n## Error Handling\n\n```typescript\ntry {\n  const lines = await engine.evaluatePosition();\n  if (lines.length > 0) {\n    console.log(lines[0].evaluation);\n  }\n} catch (error) {\n  if (error.message.includes(\"browser environment\")) {\n    console.log(\"This package only works in browsers\");\n  } else if (error.message.includes(\"worker failed\")) {\n    console.log(\"Stockfish failed to load\");\n  }\n}\n```\n\n## Common Evaluation Values\n\n- **Positive numbers**: Advantage for White (e.g., `+1.5` = White is ahead by 1.5 pawns)\n- **Negative numbers**: Advantage for Black (e.g., `-0.8` = Black is ahead by 0.8 pawns)\n- **Mate scores**: `M3` = mate in 3, `M-2` = mate in 2 for opponent\n- **Zero**: Equal position\n\n## License\n\nGPL-3.0 - See [LICENSE](LICENSE) file for details.\n\n## Contributing\n\nThis package is part of the Chessle project. Contributions welcome!\n\n## Related Packages\n\n- [chess.js](https://github.com/jhlywa/chess.js) - The core chess library this extends\n- [Stockfish](https://stockfishchess.org/) - The powerful chess engine bundled within\n","readmeFilename":"README.md"}