∅ Infographic · Pass-Move Pruning

Explain Chess Engine
Null Move Pruning

If passing your turn still leaves you winning, the position is so good you can cut off the whole subtree — most positions aren't zugzwang.

📅 June 30, 2026⏱ 9 min read🏷️ R=2 · Fail-High · Zugzwang
Null move pruning (NMP): at a non-PV node with depth ≥ 3, give the opponent an extra move (side flips, no piece moved). Search at depth d − R − 1 (typically R=2). If score ≥ β, real moves would fail high too — return β without searching moves. Based on zugzwang is rare in middlegames. Endgames with zugzwang need guards.

Concept

Pass Move Test

Position P

Side to move considers real moves…

∅ →
Null position

Opponent moves twice. Still winning? → prune all moves at P.

Algorithm

When to Try NMP

1
Guards pass? Not in check, has non-pawn material, depth ≥ 3, not PV node.
2
Make null move — flip side, increment ply, hash key unchanged (usually).
3
Search −search(d − 1 − R, −β, −β + 1) null window.
4
Fail-high? score ≥ β → return β (cutoff). Else search real moves normally.
if (depth >= 3 && !pvNode && hasNonPawnMaterial && !inCheck) { makeNullMove(); score = -search(depth - 3, -beta, -beta + 1); // R=2 unmakeNullMove(); if (score >= beta) return beta; }

Guards

When NMP Is Disabled

Zugzwang endgamesOnly kings/pawns — passing can be mandatory loss.
In checkMust respond; null move illegal conceptually.
PV / rootNever prune principal variation nodes.
Verification searchRe-search suspicious cutoffs at reduced R or disable NMP.

More search pruning

Search AlgorithmFutility Pruning

Related: Late Move Reduction · Razoring · All Blogs