Thank you for your interest in contributing to paimon-cpp! This document explains how to get started.
If you find a bug or want to request a feature, please open an issue. Include as much detail as possible — steps to reproduce, expected vs. actual behavior, environment info, etc.
- Fork the repository and create a feature branch from
main. - Make your changes following the Code Style Guide.
- Add or update tests for the functionality you changed.
- Ensure all checks pass.
- Open a pull request against
main. Fill in the PR template.
Before submitting, please verify:
- Code compiles without warnings under
-Wall(enabled by default in the build system). -
pre-commit run --all-filespasses. - New / modified public APIs are marked with
PAIMON_EXPORT. - Every new file has the Apache 2.0 license header.
- Error handling uses
Status/Result<T>— no exceptions. - New utility code checks for existing helpers before reinventing (see the utility reference).
- Tests are added or updated for the changed functionality.
- PR description follows the template.
- C++17 compatible compiler (GCC recommended)
- CMake ≥ 3.16
- Python 3 (for linting scripts and pre-commit)
- git-lfs (the repository uses Git LFS for large files)
Please read the full Code Style Guide before writing code. Key highlights:
- Formatting: Google C++ Style base, 100-column limit, 4-space indent. Let clang-format handle it.
- Error handling: Use
Status/Result<T>and project macros (PAIMON_RETURN_NOT_OK,PAIMON_ASSIGN_OR_RAISE). No exceptions. - Naming: PascalCase for classes and methods, snake_case for variables, trailing
_for members. - Headers:
#pragma once, includes ordered by category, Apache 2.0 license header on every file. - Factory pattern: Use
static Create()+ private constructor when construction can fail. - Testing: Google Test,
ASSERT_*preferred overEXPECT_*, test files named*_test.cppnext to source.
We provide Dev Container configuration file templates for VS Code:
cd .devcontainer
cp Dockerfile.template Dockerfile
cp devcontainer.json.template devcontainer.jsonThen select Dev Containers: Reopen in Container from VS Code's Command Palette.
If you make improvements that could benefit all developers, please update the template files and submit a pull request.
By contributing to paimon-cpp, you agree that your contributions will be licensed under the Apache License, Version 2.0.