Skip to content

Contributing

We welcome contributions to Apache Iceberg C++. For general Iceberg contribution guidelines, see the official guide. Contributors using AI-assisted tools must follow the AI-assisted contribution guidelines.

For build and installation instructions, see Getting Started.

Coding Standard

The project follows the same coding standard as Apache Arrow (a variant of the Google’s C++ Style Guide)

Naming Conventions

Element Style Examples
Classes / Structs PascalCase TableScanBuilder, PartitionSpec
Factory methods PascalCase CreateNamespace(), ExtractYear()
Accessors / Getters snake_case name(), type_id(), partition_spec()
Variables snake_case file_io, schema_id
Constants k + PascalCase kHeaderContentType, kMaxPrecision

General Practices

  • Prefer smart pointers (std::unique_ptr, std::shared_ptr) for memory management
  • Use Result<T> for error propagation
  • Write Doxygen-style comments (/// \brief ...) for all public APIs
  • Do not remove public methods without a deprecation cycle:
[[deprecated("Use new_method() instead. Will be removed in a future release.")]]
void old_method();

Development Environment

Code Formatting

Formatting is enforced via .clang-format (Google base, ColumnLimit: 90). Set up pre-commit to run it automatically:

pip install pre-commit
pre-commit install

To run all hooks manually on the entire codebase:

pre-commit run -a

Dev Containers

We provide Dev Container templates for VS Code:

cd .devcontainer
cp Dockerfile.template Dockerfile
cp devcontainer.json.template devcontainer.json

Then select Dev Containers: Reopen in Container from the Command Palette.

Submitting Changes

Workflow

  1. Fork the repository on GitHub
  2. Create a feature branch from main:
    git checkout -b feature/your-feature-name
    
  3. Make your changes following the coding standards
  4. Add or update tests for any behavioral changes
  5. Ensure all tests pass and pre-commit run -a is clean
  6. Push to your fork and open a Pull Request

Commit Messages

Follow Conventional Commits:

feat: add support for S3 file system
fix: resolve memory leak in table reader
docs: update API documentation
test: add unit tests for schema validation
refactor(rest): simplify auth token handling

Pull Request Checklist

  • Clear problem/solution description
  • Linked issue(s) when applicable
  • Tests for behavioral changes
  • Passing CI checks (tests, pre-commit, license header, sanitizers)

Getting Help

The Apache Iceberg community follows the Apache Way and the Apache Foundation Code of Conduct.