Getting Started

Requirements

Required:

  • C++23 compliant compiler (GCC 14+, Clang 18+, MSVC 2022+)
  • CMake 3.25+
  • Ninja (recommended build backend)

Quick Start

git clone https://github.com/apache/iceberg-cpp.git
cd iceberg-cpp
cmake -S . -B build -G Ninja
cmake --build build
ctest --test-dir build --output-on-failure

Build with CMake

Core Libraries

cmake -S . -B build -G Ninja -DCMAKE_INSTALL_PREFIX=/path/to/install -DICEBERG_BUILD_STATIC=ON -DICEBERG_BUILD_SHARED=ON
cmake --build build
ctest --test-dir build --output-on-failure
cmake --install build

Bundle Library (with vendored dependencies)

cmake -S . -B build -G Ninja -DCMAKE_INSTALL_PREFIX=/path/to/install -DICEBERG_BUILD_BUNDLE=ON
cmake --build build
cmake --install build

Bundle Library (with provided Apache Arrow)

cmake -S . -B build -G Ninja -DCMAKE_INSTALL_PREFIX=/path/to/install -DCMAKE_PREFIX_PATH=/path/to/arrow -DICEBERG_BUILD_BUNDLE=ON
cmake --build build
cmake --install build

CMake Build Options

OptionDefaultDescription
ICEBERG_BUILD_STATICONBuild static library
ICEBERG_BUILD_SHAREDOFFBuild shared library
ICEBERG_BUILD_TESTSONBuild tests
ICEBERG_BUILD_BUNDLEONBuild the battery-included library
ICEBERG_BUILD_RESTONBuild REST catalog client
ICEBERG_BUILD_REST_INTEGRATION_TESTSOFFBuild REST catalog integration tests
ICEBERG_BUILD_HIVEOFFBuild Hive (HMS) catalog client
ICEBERG_BUILD_SQL_CATALOGOFFBuild SQL catalog client
ICEBERG_SQL_SQLITEOFFBuild the SQLite connector for the SQL catalog
ICEBERG_SQL_POSTGRESQLOFFBuild the PostgreSQL connector for the SQL catalog
ICEBERG_SQL_MYSQLOFFBuild the MySQL connector for the SQL catalog
ICEBERG_ENABLE_ASANOFFEnable Address Sanitizer
ICEBERG_ENABLE_UBSANOFFEnable Undefined Behavior Sanitizer

Running Tests

Run all tests:

ctest --test-dir build --output-on-failure

Run a specific test suite:

ctest --test-dir build -R schema_test --output-on-failure

Build Examples

After installing the core libraries:

cd example
cmake -S . -B build -G Ninja -DCMAKE_PREFIX_PATH=/path/to/install
cmake --build build

If using provided Apache Arrow, include both paths:

cmake -S . -B build -G Ninja -DCMAKE_PREFIX_PATH="/path/to/install;/path/to/arrow"

The examples default to C++23.

Using the Library from C++20

To use iceberg-cpp from a C++20 application, build the library with ICEBERG_CXX20_COMPAT=ON. The library itself still requires C++23. Run these commands from the repository root:

cmake -S . -B build-compat -G Ninja -DICEBERG_CXX20_COMPAT=ON -DCMAKE_INSTALL_PREFIX=/path/to/compat-install
cmake --build build-compat
cmake --install build-compat

Then build the example against that installation:

cmake -S example -B example/build -G Ninja -DCMAKE_PREFIX_PATH=/path/to/compat-install -DICEBERG_EXAMPLE_CXX_STANDARD=20
cmake --build example/build

Your toolchain must support C++20 library features such as std::format. In this mode, base setters return base-class references, so call derived-specific methods separately instead of chaining them. Use matching headers and libraries; do not mix the default and compatibility packages in one program.

See Contributing for implementation and testing details.

Customizing Dependency URLs

If you experience network issues when downloading dependencies, you can override the download URLs using environment variables:

VariableDependency
ICEBERG_ARROW_URLApache Arrow tarball
ICEBERG_AVRO_URLApache Avro tarball
ICEBERG_AVRO_GIT_URLApache Avro git repository
ICEBERG_NANOARROW_URLNanoarrow tarball
ICEBERG_CROARING_URLCRoaring tarball
ICEBERG_UTF8PROC_URLutf8proc tarball
ICEBERG_NLOHMANN_JSON_URLnlohmann-json tarball
ICEBERG_CPR_URLcpr tarball

Example:

export ICEBERG_ARROW_URL="https://your-mirror.com/apache-arrow-22.0.0.tar.gz"
cmake -S . -B build -G Ninja