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.
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.
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.