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.
A live version is only available for the BoldChess.com paid members. As this is an open-source project, anyone can run it locally without overloading our servers.
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.
Install the project dependencies:
bun install
Start the local development server:
bun start
Access the application at http://localhost:3000 in 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:
same-originrequire-corpblob: URLs for the multi-part WASM architecture
script-src 'self' 'unsafe-inline' 'unsafe-eval' blob:connect-src 'self' blob:worker-src 'self' blob:SharedArrayBuffer to 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.
This project is licensed under the GNU AFFERO GENERAL PUBLIC LICENSE (AGPLv3).