A personal project to explore chess engine integration, Docker orchestration, WebSocket communication, and UI augmentation via userscripts.
- Flask – API & WebSocket server
- Celery – Task queue for move analysis
- Redis – Celery task broker
- Stockfish – World-class open-source chess engine, compiled and run from
./engine
- Docker Compose – Container orchestration
- Greasemonkey Userscript – Injected UI overlay and utilities into Lichess
- The backend receives a FEN string and submits it to Celery.
- Celery passes it to the Stockfish engine, then returns the move evaluations.
- The results are broadcast back to the frontend via WebSockets.
-
Stockfish Connection
-
SVG Overlay Tools
Visual elements (arrows, dots) drawn over the Lichess board. -
Rating Spy
Asynchronously fetches opponent's rating history across game variants from the past 6 months. -
Eval Bar
Displays centipawn evaluation in a fixed horizontal bar at the bottom of the screen.
I am not responsible for how you use this tool. I advise you not to use this tool in rated or professional games. Using chess engines during competitive play on Lichess is a bannable offense.
Ensure you have the following installed:
- Docker & Docker Compose
- Python 3.8+ (if running backend locally)
- Redis (optional if not using Docker)
- A modern browser (e.g., Firefox or Chrome)
- Greasemonkey (Firefox)
Download the latest Stockfish binary (stockfish-ubuntu-x86-64
) from the official GitHub repository.
Place the extracted binaries in: ./engine/
Edit the config.py file in flaskapp
ENGINE_PATH = "/app/engine/stockfish/stockfish-ubuntu-x86-64"
PLAYER = "your_lichess_username"
docker compose up --build
let playerName = "lichessusername"
let svgType = "dot" // "dot" or "arrow"
let playerSpyEnabled = true
let evalBarEnabled = false