Vizier Get in touch

In developmentC11 · Bitboards

Vizier

A UCI chess engine in portable C11, with bitboards, no dependencies, and a search you can read.

Perft

Count every legal move, then check the count.

Perft walks the tree of legal moves to a fixed depth and counts the positions at the bottom. The totals for a few standard positions are published, so a move generator either matches them or has a bug. Vizier’s is checked this way. Pick a position and count it yourself.

rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1

Twenty moves each side. The tree grows fast.

DepthPublishedCounted hereTime
120——
2400——
38,902——
4197,281——
54,865,609——

It all runs in your browser, nothing is sent anywhere.

The published counts are the standard perft results every engine author checks against. The counting is done by a small JavaScript move generator written for this page. It isn’t Vizier’s C code and isn’t connected to it.

The search

The standard techniques, written out plainly.

Underneath is a bitboard board, with magic bitboards for the sliding pieces and Zobrist hashing for positions. On top of that:

  1. ID · PVS

    Iterative deepening

    It searches one move deep, then two, then three, so a best move is always ready. Principal variation search looks hard at the expected best line and checks the rest with a narrow window.

  2. TT

    Transposition table

    Positions are keyed by a Zobrist hash, so one reached by a different move order isn’t searched twice.

  3. qsearch

    Quiescence search

    At the edge of the search it keeps following captures, so it doesn’t judge a position halfway through a trade.

  4. null move · LMR

    Pruning

    Null-move pruning gives the opponent a free move to see if a line is already won. Late moves in the list get searched less deeply.

  5. killer · history

    Move ordering

    Moves that caused cutoffs before are tried first, which is what makes the pruning pay off.

UCI

Any chess interface can drive it.

Vizier reads standard UCI on stdin and answers on stdout. It’s the engine that comes with ChessViz, and it works with any other UCI GUI too. It’s portable C11, so it builds anywhere there’s a C compiler.

# what an interface sends
uci          # the engine names itself, then uciok
isready      # readyok
position startpos moves e2e4 e7e5
go depth 12  # info lines as it deepens, then bestmove

Capabilities

What it does.

Chess programmers who want an engine they can study.

  1. 01

    Magic-bitboard move generation checked against published perft counts

  2. 02

    Iterative deepening PVS with a transposition table and quiescence search

  3. 03

    Null-move pruning, late-move reductions, and killer and history heuristics

  4. 04

    Portable C11 that builds anywhere and works with any UCI GUI

Specification

What it’s built with, and when.

Pulled from the repository each time this site is built.

State
In development
Discipline
Applications
Shape
Installed software
Last change
Jul 2026
  • C11
  • Bitboards
  • UCI

Next

Get Vizier

Ask about availability, a build for your platform, or a license.

This site isn't finished. Anything on it may still change, and none of it is binding until the site is live.