--- warning: DO NOT CHANGE THIS MANUALLY, THIS IS GENERATED BY https://github.com/duckdb/community-extensions repository, check README there title: aixchess excerpt: | DuckDB Community Extensions Efficiently query large chess game collections extension: name: aixchess description: Efficiently query large chess game collections version: 0.3.0 language: C++ build: cmake license: GPL-3.0 excluded_platforms: "wasm_mvp;wasm_eh;wasm_threads" opt_in_platforms: "windows_arm64;" requires_toolchains: rust maintainers: - thomas-daniels repo: github: thomas-daniels/aix ref: 907b5107601ebe95bb4e567e0a3f4ad03afeff27 docs: hello_world: | -- Count en passant moves played in Lichess games from January 2013 WITH lichess_2013_01 AS ( FROM 'hf://datasets/thomasd1/aix-lichess-database/low_compression/aix_lichess_2013-01_low.parquet' ), en_passant_move_count AS ( SELECT SUM( move_details(movedata).filter(lambda m: m.is_en_passant).length() ) AS nb_ep_moves FROM lichess_2013_01 ) FROM en_passant_move_count; -- Result: 3496 extended_description: | Aix enables efficient storage and querying of large chess game collections. A game's moves are encoded in a binary representation, and this extension [provides scalar functions](https://github.com/thomas-daniels/aix/blob/main/docs/functions.md) to decode and query these games directly within DuckDB. See the [GitHub repository](https://github.com/thomas-daniels/aix) or [blog post](https://thomasd.be/2026/02/01/aix-storing-querying-chess-games.html) for more details. extension_star_count: 31 extension_star_count_pretty: 31 extension_download_count: 895 extension_download_count_pretty: 895 image: '/images/community_extensions/social_preview/preview_community_extension_aixchess.png' layout: community_extension_doc --- ### Compatibility Matrix This table covers all DuckDB releases that have not reached [end-of-life](https://duckdb.org/release_calendar), including LTS releases, and shows the 2 most recent patch releases of each. Older patch releases are not listed, but the extension may be available for them as well.
| Platform | 1.4.4 | 1.4.5 | 1.5.5 | 1.5.6 | 2.0.0 | | :--- | :---: | :---: | :---: | :---: | :---: | | Linux AMD64 | ✅ | ❌ | ✅ | ✅ | ✅ | | Linux ARM64 | ✅ | ❌ | ✅ | ✅ | ✅ | | macOS AMD64 | ✅ | ❌ | ✅ | ✅ | ❌ | | macOS ARM64 | ✅ | ❌ | ✅ | ✅ | ✅ | | Windows AMD64 | ✅ | ❌ | ✅ | ✅ | ✅ | | Windows ARM64 | ✅ | ❌ | ✅ | ✅ | ✅ | | WebAssembly | ❌ | ❌ | ❌ | ❌ | ❌ | ### Installing and Loading ```sql INSTALL {{ page.extension.name }} FROM community; LOAD {{ page.extension.name }}; ``` {% if page.docs.hello_world %} ### Example ```sql {{ page.docs.hello_world }}``` {% endif %} {% if page.docs.extended_description %} ### About {{ page.extension.name }} {{ page.docs.extended_description }} {% endif %} ### Added Functions | function_name | function_type | description | comment | examples | |-----------------------------------|---------------|----------------------------------------------------------------------------------------|---------|----------| | board_at_position | scalar | Returns the board at a given position as a struct. | NULL | NULL | | clocks_to_move_times | scalar | Transform clocks (of one player) into move times, given the clock times and increment. | NULL | NULL | | eval_to_centipawns | scalar | Returns eval if it is a centipawn evaluation, NULL if mate. | NULL | NULL | | eval_to_mate | scalar | Returns moves to mate if eval is mate, NULL if centipawn evaluation. | NULL | NULL | | fen_at_position | scalar | Returns the FEN at a given position. | NULL | NULL | | matches_subfen | scalar | Returns true if any position matches a given sub-FEN. | NULL | NULL | | move_details | scalar | Returns a list of details for all moves in the game. | NULL | NULL | | move_details_at | scalar | Returns the details of a given move in the game. | NULL | NULL | | moved_pieces | scalar | Returns the moved pieces in order as a string. | NULL | NULL | | moved_pieces_list | scalar | Returns the moved pieces in order as a list. | NULL | NULL | | piece_counts_at_position | scalar | Returns the piece counts at a given position. | NULL | NULL | | pieces_at_position | scalar | Returns the squares where the pieces are at a given position. | NULL | NULL | | recompress | scalar | Recompresses a game at a given compression level. | NULL | NULL | | scoutfish_query | scalar | Returns true if a game matches a Scoutfish query. | NULL | NULL | | scoutfish_query_plies | scalar | Returns the list of plies matching a Scoutfish query. | NULL | NULL | | time_control_lichess | scalar | Returns the Lichess time control name for given initial time and increment. | NULL | NULL | | to_pgn | scalar | Represents the game as a PGN string. | NULL | NULL | | to_uci | scalar | Represents the game as a UCI string. | NULL | NULL | | winning_chances_lichess | scalar | Converts an evaluation to winning chances using the Lichess formula. | NULL | NULL | | list_eval_to_centipawns | macro | Apply eval_to_centipawns to all items in a list. | NULL | NULL | | list_eval_to_mate | macro | Apply eval_to_mate to all items in a list. | NULL | NULL | | list_winning_chances_lichess | macro | Apply winning_chances_lichess to all items in a list. | NULL | NULL | | is_valid_movedata | scalar | NULL | NULL | NULL | | clocks_to_move_times__check_nulls | scalar | NULL | NULL | NULL | | matches_fen | scalar | NULL | NULL | NULL | | move_details_ext | scalar | NULL | NULL | NULL | | move_details_ext_at | scalar | NULL | NULL | NULL | ### Overloaded Functions This extension does not add any function overloads. ### Added Types This extension does not add any types. ### Added Settings | name | description | input_type | scope | aliases | typed_value | |----------------|---------------------------------------------------------|------------|--------|---------|-------------| | temp_directory | Set the directory to which temporary files are written. | VARCHAR | GLOBAL | [] | post.db.tmp |