A UCI chess engine written in pure C++.
Focused on search strength, clean architecture, and informative UCI output.
Elderviolet is a UCI-compatible chess engine implemented in pure C++ (no external dependencies).
It does not provide a GUI. To play or test the engine, connect it to a UCI GUI such as:
- Arena
- CuteChess / cutechess-cli
- BanksiaGUI
- ChessBase
Search & pruning:
- PVS
- Aspiration window
- LMR / LMP
- Null-move pruning
- Razor
- Futility pruning (incl. reverse futility)
- Mate distance pruning
Move ordering:
- Transposition table (TT) with mate score handling
- Killer moves
- History heuristic
Tactical filters:
- SEE pruning
- Full SEE fallback (
see_full.h)
Parallel:
- Lazy SMP
This repository is header-heavy and uses main.cpp as the entry point.
Example (single translation unit build):
cl /O2 /std:c++20 /EHsc main.cppg++ -O3 -std=c++20 main.cpp -o EldervioletTip: for local testing you can add native optimizations:
g++ -O3 -std=c++20 -march=native main.cpp -o EldervioletRun the engine in a GUI, or from a terminal.
Example UCI session:
uci
isready
ucinewgame
position startpos moves e2e4 e7e5
go depth 12
Common options (depending on your build) are typically:
Hash(MB)Threads
Key files in the repository root:
main.cpp— program entry pointEngine.h— engine coordination / high-level interfaceuci.h— UCI protocol handling and option parsingSearch.h— search (PVS, pruning, SMP)Evaluation.h— evaluationMoveGeneration.h— move generationPosition.h— board representation / stateAttack.h— attack tables / helpersTT.h— transposition tableZobristTables.h— hashing keys / tablessee_full.h— full SEE implementationtypes.h— core types / constantslogo.png— project logo
- The engine binaries (
*.exe) in this folder are build artifacts and may be platform/CPU specific (e.g. AVX2). - For strength testing, prefer running matches with
cutechess-cliand fixed settings.
MIT License (see LICENSE).
