# What changed in lightgbm

> 97 changes in lightgbm 3 to 4 from its official release notes, upgrade guides and advisories: 30 breaking, 3 deprecations, 38 new APIs and options. Each one cited. Sources checked 2026-10-28. HTML: https://unstale.sh/pypi/lightgbm/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## lightgbm 4

### Breaking changes

- The Arrow-related C API removes an incorrect const modifier, affecting the API signature. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- Most builds now default to C++17. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- CUDA builds now default to C++17. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- The Python package drops support for h2o datatable inputs. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- The minimum supported Python version is now 3.10. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- Using the regression_l1 objective with linear trees is prohibited. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- Booster.attr() was removed. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The Booster handle attribute was made private. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The is_reshape argument was removed from Booster.predict. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- Booster.set_attr() was removed. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The early_stopping_rounds argument was removed from cv(); use the early-stopping callback instead. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The verbose_eval argument was removed from cv(). (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The R package removed support for passing parameters through ... in lgb.Dataset(). (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- Dataset.feature_penalty was removed from the Python package. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The Dataset handle attribute was made private. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The Python package removed fobj in favor of passing a custom objective function in params. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The R package removed lgb.unloader(). (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- Support for macOS Mojave (10.14) was dropped. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- Installation using pip's --install-option is no longer supported. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The R predict interface renames data to newdata and uses type to select prediction types. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The project dropped its support promise for Python 3.6, although installation may still technically work. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The Python package enforces a minimum Python version of 3.6. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The Python package removed setup.py and switched to PEP 517 / 518 builds. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- Support for Solaris was dropped. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The early_stopping_rounds argument was removed from train(); use the early-stopping callback instead. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The evals_result argument was removed from train(). (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The learning_rates argument was removed from train(). (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The verbose_eval argument was removed from train(). (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)

### Deprecations

- The eval_set parameter in scikit-learn fit() methods is deprecated in favor of eval_X and eval_y. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)

### New APIs and options

- A CUDA version of the binary error metric is available. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- CUDA builds add multi-GPU support for training with NVIDIA GPUs. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- CUDA 13 is supported; users can supply a CUDA architecture list, and the default GPU architectures have been updated. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- Evaluation result attributes can be accessed by name. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- LGBMClassifier adds decision_function(). (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- Parameters can now be loaded from a model string. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- The Python package accepts Polars Series as input, including as positional data, through Arrow interoperability. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- A CPU version of the standard R-squared metric is available. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- LightGBM adds support for ROCm/HIP devices, including ROCm builds. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- Scikit-learn fit() methods add eval_X and eval_y parameters for validation data; eval_set is deprecated. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- Adds validate_features to refit. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- Adds a method for setting a leaf output on a Booster. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- Dask training supports custom objective functions. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- CVBooster models can be saved and loaded. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The manylinux_2_28 Linux wheels support GPU automatically; pass device="gpu" to use the OpenCL-based GPU build. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The C API, Python package, and R package expose the number of bins for features. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- Adds a configurable threshold for how much evaluation metrics must improve to count as improved for early stopping. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- Adds eval_train_metric to lgb.cv(). (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The R lightgbm() interface promotes objective and init_score to top-level arguments. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- Adds the fitted n_iter_ attribute to the scikit-learn API. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- Adds nrounds as an alias for num_iterations. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- Quantized training is available on CPU and can greatly improve training speeds. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)

### Behavior and default changes

- PyArrow Tables are supported as inputs to scikit-learn methods. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- Imports of dask, graphviz, joblib, matplotlib, and psutil are lazy, changing when those dependencies are imported. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- Alias warnings are suppressed when verbosity is less than zero. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- Label checks are no longer performed when loading a dataset from a binary file because labels are ignored in that case. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- Loading a dataset from a binary file now emits additional warnings. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- Boosting types are decoupled. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- All callbacks are now pickleable, improving interoperability with tools such as Ray and Dask. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- Warnings are logged for the number of bins of categorical features. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The R lightgbm() interface promotes the thread count to a top-level argument and defaults it to the number of cores. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The Python package supports pandas nullable types. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The Python package no longer requires scikit-learn as a hard dependency. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)

### Tooling

- LightGBM supports building with C++17. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- The Python package exports inline type hints with py.typed for code using LightGBM. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)

### Fixes and other changes

- Dataset.set_position() now updates self.position. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- Percentile calculation is fixed for weighted training with regression objectives, including mape, quantile, and regression_l1. (4.7.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.7.0)
- Adds the fitted n_estimators_ attribute to the scikit-learn API. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)
- Warning wording was improved, changing the messages developers may see. (4.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v4.0.0)

## lightgbm 3

### Breaking changes

- The init-score parameter was removed. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- The R package requires R 3.5 or newer. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)

### Deprecations

- lgb.prepare() is deprecated. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- lgb.prepare2() is deprecated. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)

### New APIs and options

- auc-mu is available as a metric. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- Extremely randomized trees are available. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- Saved model files include feature importance information. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- The Python scikit-learn API exposes feature_name_. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- Interaction constraints are available, including an interface in the R package. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- Models expose a way to get possible maximum and minimum values. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- The scikit-learn interface exposes an attribute for the number of features used. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- The Python interface can output a model to a pandas DataFrame. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- Path smoothing is available as a new feature. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- An option can disable shape checking during prediction. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- Logs can be redirected to the Python console. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- The Python cv function accepts return_cvbooster, allowing callers to request a CVBooster. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- The Python predict interface accepts start_iteration. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- A static library build option is available. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- The Python interface allows callers to specify a tree's orientation. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- XE_NDCG_MART is implemented for ranking tasks. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)

### Performance

- Monotone constraints have an improved fast method and support splits penalization. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- Both row-wise and col-wise multi-threading are supported. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- Single prediction is optimized. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)

### Behavior and default changes

- Bagging is decoupled from num_threads. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- JSON dumps include feature information and feature importance. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- TreeSHAP supports sparse data. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)

### Fixes and other changes

- The Python scikit-learn fit() interface passes init_model to train(). (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- The scikit-learn API handles RandomState objects. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
- Feature names support UTF-8 characters again. (3.0.0) — [release notes](https://github.com/lightgbm-org/LightGBM/releases/tag/v3.0.0)
