The official chess web-based app of BoldChess.com. It is a responsive web GUI for the Stockfish chess engine, offering analysis, evaluation, and graphical features.
Our mission is to create a modern, mobile-friendly, free, and open-source web-based chess app, powered by the advanced Stockfish chess engine.
- Load your chess position or game using FEN, PGN, or a move list.
- Set up pieces manually in edit mode.
- Browse game history using arrows or the mouse wheel.
- List and display all legal moves on the chessboard.
- Analyze positions and legal moves using the JavaScript version of Stockfish.
- Display an evaluation graph with visual indicators for blunders.
- Open a position or game in a new window via a URL.
- Play against the Stockfish engine, with the ability to set its rating according to your preference.
- Activate/Deactivate a special "Coach Mode" to view the best move and evaluation while playing.
- Customize the appearance of the chessboard.
- Draw arrows or highlight squares on the chessboard.
- Visualize relevant squares based on Stockfish's static evaluation.
- Dark interface with a pitch-black background for OLED screens, improving battery life and user experience.
- Support for PCs, tablets, smartphones, and touch devices.
- Chessboard
- All Moves With Evaluations
- History of Moves
- Evaluation Graph
- Static Evaluation
- Chessboard Editor
- To open your FEN or PGN, copy it to the clipboard and paste it into the input box above the chessboard.
- To browse the game, use the mouse wheel on the chessboard or the arrow buttons.
- To open or hide windows, click on the small icons at the top of the GUI.
- To play against the engine or set its difficulty level, click on the hamburger menu.
- To change the board styling, flip the board, or open it in a new window, click on the hamburger menu.
The application uses an optional .env file for configuration.
| Variable | Description | Default |
|---|---|---|
PORT |
The port the server will listen on. | 3000 |
This project uses Bun for dependency management and as a runtime.
-
Prerequisites:
- Ensure Bun is installed on your system.
-
Repository Setup:
- Clone the repository to your local machine.
- Navigate to the project directory.
-
Dependency Installation:
-
Install the project dependencies:
bun install
-
-
Local Server:
-
Start the local development server:
bun start
-
Access the application at
http://localhost:3000in a web browser.
-
We use Biome for linting and formatting.
-
Check for issues:
bun run lint
-
Fix issues:
bun run lint:fix
-
Format code:
bun run format
The app uses Stockfish 18 JS, which utilizes SharedArrayBuffer for multi-threaded performance.
To ensure the engine functions correctly, you must configure the following HTTP headers on your server:
- Cross-Origin-Opener-Policy (COOP): Set to
same-origin - Cross-Origin-Embedder-Policy (COEP): Set to
require-corp - Content-Security-Policy (CSP): Must allow
blob:URLs for the multi-part WASM architecturescript-src 'self' 'unsafe-inline' 'unsafe-eval' blob:connect-src 'self' blob:worker-src 'self' blob:
- COOP/COEP: These headers enable cross-origin isolation, which is required for
SharedArrayBufferto function. This allows Stockfish to use multiple threads for faster analysis.
app.use(helmet({
contentSecurityPolicy: {
directives: {
scriptSrc: ["'self'", "'unsafe-inline'", "'unsafe-eval'", "blob:"],
connectSrc: ["'self'", "blob:"],
workerSrc: ["'self'", "blob:"],
// ... other directives
},
},
crossOriginOpenerPolicy: { policy: "same-origin" },
crossOriginEmbedderPolicy: { policy: "require-corp" }
}));Read more about SharedArrayBuffer at the MDN documentation.
The application is designed for easy deployment in any standard Node.js/Bun environment.
Running the Server: The main entry point is server.js, which serves the static files in the public directory, eliminating the need for a build process. This simplifies deployment and development.
No Build Required: Reflecting the application's simplicity and the direct use of vanilla JavaScript, the 'build' script in package.json is intentionally minimal: echo 'No build required'. This is due to the architecture's focus on serving static assets without complex build processes or server-side rendering.
We welcome all developers to contribute by adding features or fixing bugs.
Please report issues via BitBucket Issues.
This project is licensed under the GNU AFFERO GENERAL PUBLIC LICENSE (AGPLv3). For more details, see the LICENSE.md file.