Hi, everyone Today, Renjie Liu and I had a discussion with some of the iceberg-cpp contributors—Gang Wu, Junwang Zhao, and David Li—about ways to advance the project. We came up with some great ideas, so I'm sharing them here to gather more feedback.
## Background The community continues to show interest in a C++ implementation of Iceberg. Some users are interested in C++ bindings with a well-designed API for data types and manifests, but they have their own runtime and I/O, so they prefer a binding that exclude these components. However, there are also users who require an all-in-one solution. The iceberg-cpp project aims to provide a well-designed interface for users to plug in file I/O, readers, writers, and other components while offering a default implementation in other modules. Luckily, we now have iceberg-rust, which is not fully feature-complete but undergoing rapid development. We can develop a C++ binding based on iceberg-rust and establish a robust C++ API within the iceberg-cpp project. The C++ project will define public interfaces and offer various build targets for users to choose from. The overall process will be similar to how pyiceberg interacts with iceberg-rust. ## Plan 1. Use cxx[^1] to build cpp bindings for iceberg-rust which exposes core APIs. The binding will support different build profiles that users can choose to use fileio from iceberg-rust or not. 2. iceberg-cpp will define public interfaces and types for cpp users. After this separation, iceberg-rust can focus on implementing features and exposing them through simpler, more direct bindings. Meanwhile, iceberg-cpp will be responsible for designing, testing, and maintaining the user-level APIs, allowing users to select the parts they need or plug in their own file I/O components. ## Conclusion We believe this design combines the best parts of two projects and helps us iterate iceberg-cpp more quickly. Welcome to leave your comments here! [^1]: https://cxx.rs/ Xuanwo https://xuanwo.io/