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:

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_tree directly for random-forest models. (#12324, #12342)

  • The deprecated XGDMatrixCreateFromFile function 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

  • Reduce allocations in the JSON text parser. (#12317)

  • Skip per-tree depth computation for single-row prediction. (#12307)

  • Avoid rebuilding the regular expression when parsing the device parameter. (#12306)

  • Extend the depth bucket used by GPU Quadrature TreeSHAP. (#12290)

Bug Fixes

The following fixes affect all interfaces. Interface-specific fixes are listed in the corresponding package sections.

  • Fix an issue where min_child_weight could produce an empty root node. Also, this release fixes its interaction with max_delta_step. (#12322, #12296)

  • Preserve tiny positive Hessians during GPU quantization. (#12266)

  • Fix compatibility with RMM 26.08. (#12316, #12269)

  • 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 pandas NA for unavailable vector-leaf values instead of a mix of np.nan and None. (#12293)

  • Correct scikit-learn input tags and raise ValueError when qid is omitted from score(). (#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)

R Package

  • Fix early_stopping_rounds handling in xgboost(). (#12370)

  • Remove an obsolete 32-bit Windows thread_local workaround. (#12352)

  • Test and lint fixes. (#12309, #12259)

JVM Packages

  • Fix potential resource leaks in native error paths and make floating-point serialization locale-independent. (#12286, #12235)

  • Update the Maven Central publishing plugin and release tooling, including support for local testing. (#12255, #12254, #12253)

Documentation and Demos

CI and Maintenance