3.1.3 Patch Release (Jan 08 2026)
Scikit-learn 1.8 compatibility fix (#11858)
Add ARM CUDA wheels for PyPI. (#11827) Add nccl as dep for aarch64. (#11753)
[R] Fix off-by-one bug: nrounds=0 resulted in 2 iterations #11856
[R] Fix mingw warnings, winbuilder check warnings, memory safety issues. (#11859, #11847, #11830, #11906)
Avoid overflow in rounding estimation. (#11910)
Workaround compiler issue on Windows, affects the use of max_delta_step with CUDA. (#11916)
3.1.2 Patch Release (Nov 20 2025)
3.1.1 Patch Release (Oct 22 2025)
3.1.0 (2025 Sep 22)
We are delighted to share the latest 3.1.0 update for XGBoost.
Categorical Re-coder
This release features a major update to categorical data support by introducing a re-coder. This re-coder saves categories in the trained model and re-codes the data during inference, to keep the categorical encoding consistent. Aside from primitive types like integers, it also supports string-based categories. The implementation works with all supported Python DataFrame implementations. (#11609, #11665, #11605, #11628, #11598, #11591, #11568, #11561, #11650, #11621, #11611, #11313, #11311, #11310, #11315, #11303, #11612, #11098, #11347) See Auto-recoding (Data Consistency) for more information. (#11297)
In addition, categorical support for Polars data frames is now available (#11565).
Lastly, we removed the experimental tag for categorical feature support in this release. (#11690)
External Memory
We continue the work on external memory support on 3.1. In this release, XGBoost features an adaptive cache for CUDA external memory. The improved cache can split the data between CPU memory and GPU memory according to the underlying hardware and data size. (#11556, #11465, #11664, #11594, #11469, #11547, #11339, #11477, #11453, #11446, #11458, #11426, #11566, #11497)
Also, there’s an optional support (opt-in) for using nvcomp and the GB200
decompression engine to handle sparse data (requires nvcomp as a plugin) (#11451,
#11464, #11460, #11512, #11520). We improved the memory usage of
quantile sketching with external memory (#11641) and optimized the predictor for
training (#11548). To help ensure the training performance, the latest XGBoost
features detection for NUMA (Non-Uniform Memory Access) node (#11538, #11576) for checking cross-socket data
access. We are working on additional tooling to enhance NUMA node performance. Aside from
features, we have also added various documentation improvements. (#11412,
#11631)
Lastly, external memory support with text file input has been removed (#11562). Moving forward, we will focus on iterator inputs.
Multi-Target/Class Intercept
Starting with 3.1, the base-score (intercept) is estimated and stored as a vector when the model has multiple outputs, be it multi-target regression or multi-class classification. This change enhances the initial estimation for multi-output models and will be the starting point for future work on vector-leaf. (#11277, #11651, #11625, #11649, #11630, #11647, #11656, #11663)
Features
Removing Deprecated Features
This version removes some deprecated features, notably, the binary IO format, along with features deprecated in 2.0.
Binary serialization format has been removed in 3.1. The format has been formally deprecated in 1.6. (#11307, #11553, #11552, #11602)
Removed old GPU-related parameters including
use_gpu(pyspark),gpu_id,gpu_hist, andgpu_coord_descent. These parameters have been deprecated in 2.0. Use thedeviceparameter instead. (#11395, #11554, #11549, #11543, #11539, #11402)Remove deprecated C functions:
XGDMatrixCreateFromCSREx,XGDMatrixCreateFromCSCEx. (#11514, #11513)XGBoost starts emit warning for text inputs. (#11590)
Optimizations
Fixes
Fix static linking C++ libraries on macOS (#11522)
Rename param.hh/cc to hist_param.hh/cc to fix xcode build (#11378)
[sycl] Fix build with updated compiler (#11618)
[sycl] Various fixes for fp32-only devices. (#11527, #11524)
Fix compilation on android older than API 26 (#11366)
Fix loading Gamma model from 1.3. (#11377)
Python Package
Support mixing Python metrics and built-in metrics for the skl interface. (#11536)
CUDA 13 Support for PyPI with the new
xgboost-cu13package. (#11677, #11662)Remove wheels for manylinux2014. (#11673)
Initial support for building variant wheels (#11531, #11645, #11294)
Minimum PySpark version is now set to 3.4 (#11364). In addition, the PySpark interface now checks the validation indicator column type and has a fix for None column input. (#11535, #11523)
[dask] Small cleanup for the predict function. (#11423)
R Package
Now that most of the deprecated features have been removed in this release, we will try to bring the latest R package back to CRAN.
JVM Packages
Documents
Changes for general documentation:
CI and Maintenance
Code cleanups. (#11367, #11342, #11658, #11528, #11585, #11672, #11642, #11667, #11495, #11567)
Various cleanup and fixes for tests. (#11405, #11389, #11396, #11456)
Support CMake 4.0 (#11382)
Various CI updates and fixes (#11318, #11349, #11653, #11637, #11683, #11638, #11644, #11306, #11560, #11323, #11617, #11341, #11693)