feat: bump protobuf floor to 6.x (off EOL), raise C++ standard to 20, and drop Win32 — target 1.23 (Q1/27 release)
Author: andifeCreated May 3, 2026Updated Sep 13, 2026
Labelstopic: buildprotobuf
Background
ONNX's vendored protobuf (FetchContent) already builds at v33.6 / runtime 6.33.6.
What's currently stale is the declared minimum that downstream consumers see,
and the C++ standard used at build time:
| File | Current | Possible change |
|---|---|---|
pyproject.toml |
protobuf>=4.25.1 |
protobuf>=6.30 |
requirements.txt |
protobuf>=4.25.1 |
protobuf>=6.30 |
requirements-min.txt |
protobuf==4.25.1 |
protobuf==6.30.0 |
INSTALL.md |
recommends 5.29.2 |
6.33.x to match vendored fetch |
CMakeLists.txt |
CMAKE_CXX_STANDARD 17 |
CMAKE_CXX_STANDARD 20 |
Motivation
Per Google's official support matrix:
- Protobuf C++ 4.x: EOL since 31 March 2025
- Protobuf C++ 5.x: EOL since 31 March 2026
- Protobuf C++ 6.x: Maintenance (EOL 31 March 2027) — the lowest still-supported line
On the C++ side, toolchain support for C++20 is now well established across all major platforms (GCC 10+, Clang 10+, MSVC 19.29+). The downstream coordination concern has also eased: onnxruntime has moved non-CUDA builds to C++20 (microsoft/onnxruntime#27178, merged March 2026), with CUDA builds retaining C++17 for now.
The vendored FetchContent build path already builds 6.33.6, so the protobuf
change would be purely about the declared floor that consumers see.
Potential impact
- Protobuf floor: drops declared support for system protobuf 4.x/5.x. Users
on those versions can fall back to the FetchContent path, which already builds
6.33.6. Wire format is unaffected — protobuf guarantees no wire-format changes across majors. - C++20 floor: drops very old toolchains (pre-GCC 10, pre-Clang 10, pre-MSVC 19.29), all of which are themselves out of mainstream support.
Source: onnx/onnx