Hy everyone!
Last month happen initial public development release of my Chess engine VeryChess. This version establishes the core engine architecture, UCI compatibility, and a basic but functional search and evaluation. Strength is experimental and will improve in future versions.
VeryChess is a UCI chess engine written in C++20, targeting native compiled binaries for macOS (ARM64 primary), Linux, and Windows. It's a classical alpha-beta engine with hand-crafted evaluation - no neural networks, no third-party dependencies, standard library only.
Estimated strength something near 2200-2300 I guess. This is only first public version, pretty stable, but a lot of performance and strength improvements ahead.
It is Free for usage, but not an Open Source
Official WEB-page of the engine: https://verychess.org
Here you can track releases, download version for usage and also I perform some local tournaments for testing and comparing.
Some technical details if you are interested.
Architecture / Board representation
- Bitboards - one 64-bit integer per [color][piece-type], plus per-color and total occupancy.
- Incremental Zobrist hashing updated on every make/unmake.
- Compact 32-bit move encoding: from | to<<6 | flag<<12, with flags for quiet/capture/double-push/en passant/castling/promotion.
- Attack tables precomputed at startup: knight/king/pawn lookups; sliding pieces (rook/bishop/queen) use a classical fill algorithm over rank/file/diagonal masks - not magic bitboards.
Move generation
- Pseudo-legal generation with separate capture-only generation for quiescence.
- Legality enforced lazily: moves are made, then rejected if they leave the own king in check.
- Validated via perft - exposed both as a CLI subcommand and a UCI debug command, with Kiwipete and other standard positions in the bench set.
Search algorithms
- PVS (Principal Variation Search): full window on first move, null-window scout on the rest.
- Transposition table: probe for cutoffs (non-PV), best-move ordering; depth+age replacement.
- Null-move pruning: R=2–3, disabled in PV / in check / zugzwang-risk (no non-pawn material).
- Late move reductions: reduces late quiet moves, re-searches if they beat alpha.
- Quiescence search: captures-only with stand-pat, avoids the horizon effect.
- Check extensions: +1 ply when a move gives check.
- Mate-distance pruning: tightens the alpha/beta window.
- Move ordering: TT move → MVV-LVA captures → 2 killer moves → history heuristic.
- Draw detection in search: 50-move rule + repetition via the hash history.
Evaluation
Hand-crafted, integer (centipawn), symmetric, returned from the side-to-move's perspective (eval.cpp):
- Material + piece-square tables.
- Phase awareness - separate king PST for middlegame vs endgame, switched on non-pawn material; endgame adds king-centralization and a king-driving term for K+piece vs K mates.
- Bishop pair bonus, simple knight mobility.
- King safety - open-file penalties near a castled king plus a non-linear attacker-weight table over inner/outer king zones.
UCI / functionality
- Commands: uci, isready, ucinewgame, position (startpos/fen + moves), go (depth/movetime/wtime-btime-inc/movestogo/infinite), stop, quit, plus debug perft.
- Time management with soft/hard limits derived from the clock; time checked every 2048 nodes for low overhead.
- Hash option: configurable TT size, default 64 MB, 1 MB–64 GB.
- Standard UCI info output (depth, seldepth, score cp/mate, nodes, nps, time, pv).
Characteristics summary
- Style: classical alpha-beta engine, correctness-first, performance-conscious.
- Strengths: complete modern search-pruning toolkit, clean cache-friendly bitboard design, zero dependencies, fully cross-platform, interruptible threaded search.
- Current limitations / growth areas: single-threaded search (no SMP), classical (non-magic) sliding attacks, untapered hand-crafted eval, no opening book or endgame tablebases, no NNUE.
New engine: VeryChess 0.1.0
Moderator: Ras
-
TerryTET
- Posts: 2
- Joined: Mon Jun 15, 2026 2:59 pm
- Full name: Oleh Sych
-
TerryTET
- Posts: 2
- Joined: Mon Jun 15, 2026 2:59 pm
- Full name: Oleh Sych
Re: New engine: VeryChess 0.1.0
Hi all,
Today new version of VeryChess engine is released: version 0.2.0
The only change it have (but significant change is) - support multi-thread search. Comparing to the previous version if we run it with 4 threads it's ELO ~100 points higher.
New version as usually published on the web site https://verychess.org.
Also I did a small round-robin tournament to benchmark new version (8 rounds, 7 engines), and all the results are here: https://verychess.org/tournaments/veryc ... 0test.html
Today new version of VeryChess engine is released: version 0.2.0
The only change it have (but significant change is) - support multi-thread search. Comparing to the previous version if we run it with 4 threads it's ELO ~100 points higher.
New version as usually published on the web site https://verychess.org.
Also I did a small round-robin tournament to benchmark new version (8 rounds, 7 engines), and all the results are here: https://verychess.org/tournaments/veryc ... 0test.html
Code: Select all
Result:
-----------------------------------------------------------------------------------
# name games wins draws losses score elo + -
1. (A) Stockfish 16 48 45 3 0 46.5 521 168 127
2. (A) HIARCS 15.2 48 39 4 5 41.0 353 125 110
3. (B) GreKo 10.3.1 48 22 6 20 25.0 -24 90 86
4. VeryChess 0.2.0 48 16 7 25 19.5 -114 88 86
5. (B) Jazz 501 (x86_64) 48 14 3 31 15.5 -178 90 93
6. VeryChess 0.1.0 48 9 10 29 14.0 -200 84 87
7. (B) Natwarlal v0.14 48 5 3 40 6.5 -359 94 112
Cross table:
-----------------------------------------------------------------------------------
# name score games 1 2 3 4 5 6 7
1. (A) Stockfish 16 46.5 48 x 1=111=1= 11111111 11111111 11111111 11111111 11111111
2. (A) HIARCS 15.2 41.0 48 0=000=0= x 11111111 1111111= 11111111 11111111 11111111
3. (B) GreKo 10.3.1 25.0 48 00000000 00000000 x 0=110111 0=011111 ==111=1= 11111111
4. VeryChess 0.2.0 19.5 48 00000000 0000000= 1=001000 x 01110=01 =11==010 111=1111
5. (B) Jazz 501 (x86_64) 15.5 48 00000000 00000000 1=100000 10001=10 x 110001=1 01111001
6. VeryChess 0.1.0 14.0 48 00000000 00000000 ==000=0= =00==101 001110=0 x 1=101=10
7. (B) Natwarlal v0.14 6.5 48 00000000 00000000 00000000 000=0000 10000110 0=010=01 x
Tech:
-----------------------------------------------------------------------------------
Tech (average nodes, depths, time/m per move, others per game), counted for computing moves only, ignored moves with zero nodes:
# name nodes/m NPS depth/m time/m moves time #fails
1. (A) Stockfish 16 19026K 4092366 58.1 4.6 50.1 232.8
2. (A) HIARCS 15.2 6275K 1436676 30.5 4.4 50.5 220.5
3. (B) GreKo 10.3.1 8023K 1715119 14.4 4.7 63.0 294.7
4. VeryChess 0.2.0 57778K 12193412 20.9 4.7 62.9 298.2
5. (B) Jazz 501 (x86_64) 10955K 2507997 14.5 4.4 60.9 266.0 1
6. VeryChess 0.1.0 17311K 3609411 19.4 4.8 62.4 299.2
7. (B) Natwarlal v0.14 5274K 1215280 13.0 4.3 59.0 256.1 2
all --- 17844K 3999719 23.3 4.6 58.4 266.8 3