3.4.0 (Aug 4, 2026)
XGBoost 3.4.0 completes the vector-leaf implementation for the hist tree method,
revises the quantile regression and mean absolute error (MAE) objectives, removes
column-split support, and fixes issues across multiple components.
Vector Leaf and Multi-output Models
The vector-leaf implementation for the hist tree method is now feature-complete and
classified as experimental rather than work in progress. Key changes include:
Categorical features on CPU and GPU, DART, monotonic and interaction constraints, and
min_child_weight. (#12305, #12299, #12276, #12340, #12341, #12294, #12325, #12296)Distributed training and Dask multi-label estimators, including AUC and SHAP support, plus tree dumping and DataFrame conversion. (#12292, #12369, #12313, #12314, #12293)
Batched split application, reduced-gradient sampling, shared histogram building and split evaluation, additional validation, and external-memory fixes. (#12365, #12321, #12397, #12387, #12336, #12330, #12320, #12312)
Quantile Regression and Absolute Error
Quantile regression and mean absolute error now use smooth approximations instead of line searches to determine leaf values. (#12391, #12386, #12373, #12346)
Breaking Changes and Deprecations
Column-split support has been removed. (#12333, #12363, #12354)
The federated learning plugin is no longer included in Python binary wheels. (#12376)
The random-forest wrappers are deprecated. Use
num_parallel_treedirectly for random-forest models. (#12324, #12342)The deprecated
XGDMatrixCreateFromFilefunction has been removed. (#12297)The CUDA asynchronous memory pool is now recommended for external-memory training. (#12337)
Build and Platform
The default xgboost binaries for the Python and JVM packages are now built with CUDA 13.3 on Linux and Windows. Python users who need CUDA 12.9 can install xgboost-cu12 from PyPI or build from source. (#12384, #12394)
Both the xgboost and xgboost-cpu packages support Windows on AArch64. (#12394)
Optimizations
Bug Fixes
The following fixes affect all interfaces. Interface-specific fixes are listed in the corresponding package sections.
Fix an issue where
min_child_weightcould produce an empty root node. Also, this release fixes its interaction withmax_delta_step. (#12322, #12296)Preserve tiny positive Hessians during GPU quantization. (#12266)
Fix learning-to-rank pair sampling when continuing training. (#12332)
Fix GPU SHAP on CUDA SM120. (#12368)
Fix the recoder’s handling of UTF-8 data and pandas nullable categorical indexes, and add overflow checks. (#12371)
Python Package
Migrate Python package builds to scikit-build-core and include license files in both installed packages and wheel metadata. (#12219, #12349, #12280)
trees_to_dataframe()now uses pandasNAfor unavailable vector-leaf values instead of a mix ofnp.nanandNone. (#12293)Correct scikit-learn input tags and raise
ValueErrorwhenqidis omitted fromscore(). (#12383, #12335)Pass Graphviz keyword arguments through
to_graphviz(). (#12359)Fix shape reporting for empty array-interface results and SciPy CSC input handling. (#12381, #12378)
Fix
allreduce()always returning a flattened one-dimensional array. (#12377)Code cleanup. (#12331)