This document maps the current public include tree. It is a guide to what each header is for, not a generated symbol reference.
Use scid/database/scidbase.h first.
scidBaseT is the database session facade. It owns one open database session and coordinates:
Prefer this facade over lower-level codec access.
Sort criteria accepted by createSortCache(), listGames() and sortedPosition() are compact field codes followed by + or -. Common codes include d for game date, y for year, e for event, s for site, n for round, w for white, b for black, o for ECO, r for result, m for move count, W for white Elo and B for black Elo.
Use these headers when working with chess games and database-owned game workflows:
game.h: editable game model, PGN writing, tags, comments, variations and encoded game conversiongameview.h: lightweight read-only cursor over encoded movesUse Game when you need mutation. Use GameView when you need fast read-only inspection of encoded moves. Use scid/core/position.h for standalone board state, move generation and FEN/UCI position support.
Use these headers when working with game lists, tags and names:
indexentry.h: per-game metadata recordindex.h: collection of index entriesnamebase.h: mapping between name IDs and player/event/site/round stringstree.h: opening-tree result statisticsmatsig.h: material signaturesMost consumers should retrieve metadata through scidBaseT instead of owning Index or NameBase directly. Game and index metadata dates use the compact scid/core/date.h value type, and game results use the compact scid/core/game_result.h value type. Database ECO metadata is stored as a compact EcoCode integer; presentation and opening-book classification live outside the database library.
Use these headers for result sets and searches:
hfilter.h: filter storage and filtered iterationsearchpos.h: position search over a database sessionHFilter is a handle-like object over filter storage. Filters are owned either by the database session or by caller-owned filter storage. Be careful not to use an HFilter after the underlying filter has been deleted.
Use these headers for PGN parsing and encoding:
pgnparse.h: parse PGN into Gamepgn_encode.h: encode PGN outputMost consumers should start with pgnparse.h.
These headers are public today because current consumers and tests need them, but they should be treated as lower-level building blocks:
bytebuf.h: transient byte buffer views and encoded tag helperscommon.h: database file-format aliases and compatibility assertionsmisc.h: assorted utility functionsBoard constants, primitive chess types, square helpers, attack tables, position state, position hashing and shared status codes live in core headers:
scid/core/primitives.h: scalar aliases and primitive chess encodingsscid/core/board.h: board constants, piece helpers, square helpers and direction helpersscid/core/date.h: compact game-date value type and PGN date helpersscid/core/error.h: shared errorT definitionsscid/core/fullmove.h: compact move representation with SAN-related informationscid/core/game_result.h: game result value type, display strings and scoring helpersscid/core/hash.h: Zobrist position hash helpersscid/core/movelist.h: generated move records and fixed-capacity move listsscid/core/move_predicates.h: move validation predicatesscid/core/position.h: board state, move generation and FEN/UCI position supportscid/core/square_moves.h: square movement lookup tables and helpersscid/core/square_collections.h: square list and set helpersscid/core/attacks.h: precomputed king and knight attack tablesscid/core/dstring.h: deprecated dynamic string helper still used by some board-output pathsThese headers are useful when extending the library, but they are not the best starting point for application code.
The codec interface and concrete codec headers are internal implementation details. They exist so scidBaseT can work with memory, PGN, SCID4 and SCID5 representations through one storage boundary.
Open databases through scidBaseT::open() instead of constructing storage implementations directly.
The public include tree is broader than the ideal long-term consumer API. This is partly because the library still exposes some compatibility and lower-level types needed by existing workflows.
For new consumer code, prefer this order:
scidbase.hgame.hpgnparse.hhfilter.h