Download Latest Version v4.7.0 source code.zip (6.6 MB)
Email in envelope

Get an email when there's a new version of LightGBM

Home / v4.7.0
Name Modified Size InfoDownloads / Week
Parent folder
lightgbmlib_linux.jar 2026-07-18 3.3 MB
lightgbmlib_macos.jar 2026-07-18 1.9 MB
lightgbmlib_win.jar 2026-07-18 1.3 MB
lightgbm-4.7.0-py3-none-macosx_12_0_arm64.whl 2026-07-18 1.5 MB
lightgbm-4.7.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl 2026-07-18 3.3 MB
lightgbm-4.7.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl 2026-07-18 3.5 MB
lightgbm-4.7.0-py3-none-win_amd64.whl 2026-07-18 1.4 MB
lightgbm-4.7.0-r-cran.tar.gz 2026-07-18 1.7 MB
lightgbm-4.7.0.tar.gz 2026-07-18 1.8 MB
lightgbm.exe 2026-07-18 3.6 MB
lightgbm-4.7.0-py3-none-macosx_10_15_x86_64.whl 2026-07-18 1.9 MB
commit.txt 2026-07-18 41 Bytes
lib_lightgbm.dll 2026-07-18 3.9 MB
lib_lightgbm.dylib 2026-07-18 7.4 MB
lib_lightgbm.so 2026-07-18 9.8 MB
LightGBM-complete_source_code_tar_gz.tar.gz 2026-07-18 28.9 MB
LightGBM.4.7.0.nupkg 2026-07-18 7.6 MB
README.md 2026-07-18 18.5 kB
v4.7.0 source code.tar.gz 2026-07-18 6.3 MB
v4.7.0 source code.zip 2026-07-18 6.6 MB
Totals: 20 Items   95.9 MB 1

Highlights

The Python package now supports polars inputs, thanks to narwhals. Thanks to @borchero for the main implementation and to everyone who contributed design work, especially on https://github.com/lightgbm-org/LightGBM/issues/6204 (@maxzw @detrin @jmoralez @lcrmorin @Ic3fr0g @MarcoGorelli @kylebarron @vyasr).

Significantly improved GPU support including the first ROCm builds (https://github.com/lightgbm-org/LightGBM/pull/6086) and multi-GPU support for NVIDIA GPUs via NCCL (https://github.com/lightgbm-org/LightGBM/pull/6138). (@jeffdaily @shiyu1994 @StrikerRUS)

Improvements to distributed training / Dask. Lots of bugfixes in this area, still ongoing work, thanks especially to @wagner-austin for all the help.

Changes

💡 New Features

  • [python-package] allow access to eval result attributes by name @jameslamb (#7161)
  • [python-package] Allow to pass Arrow array & Polars series as position @maxzw (#7260)
  • [c++][python-package] Leverage Arrow PyCapsule Interface for Arrow interoperability (including polars support) @borchero (#7275)
  • [python-package] publish nightlies to pypi.anaconda.org @jameslamb (#7245)
  • [python-package] Add decision_function() to LGBMClassifier @CoderWota (#7159)
  • [CUDA] Multi-GPU for CUDA Version @shiyu1994 (#6138)
  • [python-package] scikit-learn fit() methods: add eval_X, eval_y, deprecate eval_set @lorentzenchr (#6857)
  • [CUDA] Add CUDA version of binary error metric @nicklamiller (#7070)
  • [c++] Add CPU version of standard R-squared metric @nicklamiller (#7008)
  • [python-package] Follow symlinks to lib_lightgbm in library-loading @gmhewett (#6977)
  • [ROCm] add support for ROCm/HIP device @jeffdaily (#6086)
  • [python-package][sklearn] Support PyArrow Table as an input in scikit-learn methods @StrikerRUS (#6910)
  • [ci] [dask] test lightgbm.dask on macOS @jameslamb (#6677)

🔨 Breaking

  • [ci] avoid overwriting installed 'build' in build-python.sh @jameslamb (#7356)
  • change default branch from 'master' to 'main' @jameslamb (#7287)
  • [CUDA] support CUDA 13, support user-supplied CUDA architecture list, update default GPU architectures @jameslamb (#7271)
  • [python-package] make some imports lazy: 'dask', 'graphviz', 'joblib', 'matplotlib', 'psutil' @jameslamb (#7340)
  • [python-package] Make Dataset.set_position() update self.position @maxzw (#7344)
  • [c++][python-package] Leverage Arrow PyCapsule Interface for Arrow interoperability (including polars support) @borchero (#7275)
  • [c++] Remove incorrect const modifier from Arrow-related C API @borchero (#7284)
  • [python-package] Bump minimum supported Python version to 3.10 @borchero (#7276)
  • [ci] [docs] update handling of artifacts, stop publishing zip archive of complete source code @jameslamb (#7080)
  • [c++] default to C++17 for most builds @jameslamb (#7016)
  • [ci] [C++] drop support for Visual Studio 2015 (fixes [#6803]) @jameslamb (#7022)
  • [R-package] [ci] drop support for R 3.x (fixes [#7023]) @jameslamb (#7038)
  • [CUDA] default to C++17 for CUDA builds @jameslamb (#7013)
  • [ci] Drop support for Python 3.7 and Python 3.8 @borchero (#6896)
  • [python-package] drop support for h2o datatable @jameslamb (#6894)
  • [python-package] Load parameters from model string @Samsagax (#6852)
  • [R-package] make finalize() in R6 classes private @jameslamb (#6833)

🚀 Efficiency Improvement

  • [CUDA] Multi-GPU for CUDA Version @shiyu1994 (#6138)

🐛 Bug Fixes

  • [c++] fail on incomplete binary file writes @wgu9 (#7348)
  • Fix calculation of percentiles for weighted training with regression objectives (including mape, quantile, and regression_l1) @JKDasondee (#7224)
  • [python-package] fix misleading feature name warning on sklearn 1.6+ predict() @FranciscoRMendes (#7232)
  • [python-package] Enable ruff rule B905 @borchero (#7278)
  • [cuda] Fix dense histogram offset issue for global-memory @maxwbuckley (#7261)
  • [python-package] fix misleading redundant parameter warnings in Booster.refit() @arjunprakash027 (#7124)
  • [c++] fix multithreading pragma in LeafSplits::Init() @jameslamb (#7200)
  • [ROCm] fix build, add rccl support @jeffdaily (#7185)
  • [ROCm] add ROCm support (pt. 2) @jeffdaily (#7039)
  • [python-package] plot_importance(): raise clearer exception when model has 0 splits @juanf-0gravity (#7160)
  • [python-package] [dask] [ci] fix predict() type hints, enforce mypy in CI @jameslamb (#7140)
  • [c++] fix socket timeout on POSIX systems @wagner-austin (#7137)
  • [C-API] Avoid C++ includes from arrow.h when including c_api.h @desertstsung (#6973)
  • [python-package] add PyArrow Table to get_data @suk1yak1 (#6911)
  • [python-package] Fix mypy checks in compat.py @borchero (#6898)
  • [swig] fix memory leak in swig interface @s-rwe (#6923)
  • [R-package] Ensure print.lgb.Booster() works when objective is not explicitly set @walkerjameschris (#6850)
  • prohibit use of regression_l1 objective with linear trees @jameslamb (#6859)

📖 Documentation

  • [docs] [python-package] Update pandas categorical feature encoding details @maxzw (#7250)
  • [docs] add 'darts' and 'nvForest' to list of external repositories @jameslamb (#7272)
  • [docs] add LightGBM-MoE to external repositories list @kyo219 (#7247)
  • [docs] add Michael Mayer to CODEOWNERS and docs @jameslamb (#7239)
  • [docs] Added an icon for the Winget package for when the relevant PR gets merged in Winget-pkgs. @DandelionSprout (#7110)
  • [docs] Add weight to LeafSplits->Init() docs @roychan (#7079)
  • [docs] update badges in README @StrikerRUS (#7057)
  • [docs] Update list of winning solutions @JAroyan (#7042)
  • [docs] add Ray Train API @sotagg (#7020)
  • [docs] add StackOverflow badge in README @StrikerRUS (#7026)
  • [docs] [python-package] document how to run Python tests @jameslamb (#6995)
  • [docs] Fix docs of Booster.update's return value is_finished @mlondschien (#6890)
  • [docs] add GBNet to External Repositories list @jameslamb (#6965)
  • [docs] fix link to "Parallel Algorithm for Decision Tree" paper @PriyadarshiAkshay (#6933)
  • [docs] document use of EffVer @jameslamb (#6905)
  • [docs][python] update types in docstring @StrikerRUS (#6897)
  • [docs] update Python-package installation guide @StrikerRUS (#6767)
  • [docs] add a note about DART in early_stopping docstring @jameslamb (#6846)

🧰 Maintenance

  • release v4.7.0 @jameslamb (#7129)
  • [python-package] Add pandas tests for categorical handling and dtype validation @maxzw (#7359)
  • [ci] add ppc64le C++ test job @asifsheikhibm (#7345)
  • [ci] remove lingering references to 'master' branch @jameslamb (#7353)
  • [ci] [R-package] use a Windows-specific download link for SWIG, stop using '<<-' in R code @jameslamb (#7364)
  • [python-package] remove unnecessary old import paths in compat.py @jameslamb (#7358)
  • [ci] Update pre-commit hooks @anjmon (#7351)
  • [ci]: Bump the ci-dependencies group with 3 updates @dependabot[bot] (#7349)
  • [python-package] remove unused 'cffi' fixture @jameslamb (#7341)
  • [python-package] remove dependency on typing_extensions.TypeGuard @jameslamb (#7339)
  • [ci] use pixi to manage end-of-life Python environments @jameslamb (#7328)
  • [ci]: Bump the ci-dependencies group with 2 updates @dependabot[bot] (#7329)
  • [python-package] [dask] remove an unnecessary check on Dask installation @jameslamb (#7332)
  • [R-package] clean up more autoconf / automake files @jameslamb (#7331)
  • [python-package] [ci] simplify test-skipping logic @jameslamb (#7297)
  • [ci] exclude more files from biome config @jameslamb (#7293)
  • normalize line endings to LF, enforce that with gitattributes @jameslamb (#7291)
  • [R-package] Skip compilation of Arrow-related C++ code @borchero (#7283)
  • [ci] [R-package] fix docs build, test pkgdown build in CI @jameslamb (#7268)
  • [python-package] Add official support for Python 3.14 @borchero (#7279)
  • [python-package] Bump minimum pyarrow version to v16.0.0 @borchero (#7280)
  • [python-package] Bump minimum pyarrow dependency version to v14.0.2 @borchero (#7277)
  • [ci]: Bump the ci-dependencies group with 3 updates @dependabot[bot] (#7252)
  • [ci] update to r-lib/actions v2.12.0, align 'pip' and 'python' to same interpreter in 'build-python.sh' @jameslamb (#7249)
  • [ci] cut some macOS jobs @jameslamb (#7223)
  • [c++] mark a few more read-only methods const @jameslamb (#7228)
  • [ci] adapt to scikit-learn ClassifierChain changes, fix {fs} install, work around pyarrow type-checking issues @jameslamb (#7236)
  • [ci] [R-package] drop 'icc' test job, update clang and GCC r-hub container jobs @jameslamb (#7222)
  • [ci] remove uses of azurecr.io for CI images @jameslamb (#7199)
  • [ci] enforce 'zizmor' checks in CI @jameslamb (#7218)
  • [ci]: Bump actions/download-artifact from 8.0.0 to 8.0.1 in the ci-dependencies group @dependabot[bot] (#7216)
  • [python-package] standardize variable naming for evaluation results @jameslamb (#7163)
  • [c++] remove unused ArrayArgs::CheckAllZero(), reduce macro scope in socket_wrapper @jameslamb (#7201)
  • [R-package] deprecate lgb.interprete() @jameslamb (#7148)
  • [python-package] Add tests on Booster.eval() handling of new validation sets @daguirre11 (#7167)
  • [cmake] move cmake_minimum_required to first line @jameslamb (#7210)
  • [ci] restore nightly-scipy testing, update nightly floors @jameslamb (#7213)
  • [ci] [dask] restore testing against new dask versions, fix {fs} install (again) @jameslamb (#7211)
  • [ci] install 'CMake' in R-package jobs for {fs} @jameslamb (#7209)
  • [ci] pin GitHub Actions to commit SHAs @jameslamb (#7192)
  • [docs] [ci] Update docs and source code for org change @jameslamb (#7188)
  • [ci]: Bump the ci-dependencies group with 3 updates @dependabot[bot] (#7174)
  • [python-package] fix test_numeric_split_direction to test all parameter combinations @wagner-austin (#7131)
  • [python-package] Added test for plot_metric ylim @daguirre11 (#7164)
  • [python-package] Added test for plot_split_value_histogram ylim @daguirre11 (#7165)
  • [python-package] [ci] use 'auditwheel' to check GLIBC versions for Linux wheels, update wheel tags @jameslamb (#7134)
  • [python-package] Add tests for some plotting functions @DeborahOlaboye (#7144)
  • [ci]: Bump release-drafter/release-drafter from 6.1.0 to 6.2.0 in the ci-dependencies group @dependabot[bot] (#7146)
  • [python-package] Added test for plot_importance(figsize) @daguirre11 (#7143)
  • [python-package] Added test for plotting.ylim @daguirre11 (#7142)
  • [python-package] use PEP 639 license metadata, bump toscikit-build-core>=0.11.0, use hatchling instead of setuptools @jameslamb (#7135)
  • [python-package] Add test for Booster.rollback_one_iter() @wagner-austin (#7133)
  • [python-package] cast numpy integer to float in plot_importance ax.text call @wagner-austin (#7130)
  • [python-package] enforce keyword-only args in more internal functions @jameslamb (#7111)
  • [ci] fail linting CI job if PowerShell ScriptAnalyzer failed @StrikerRUS (#7127)
  • [python-package] support all-0 sample weights in scikit-learn 1.9 @jameslamb (#7128)
  • [python-package] Add return type annotations to predict methods in sklearn module @wagner-austin (#7116)
  • [python-package] add Literal type annotation for order variable in _np2d_to_np1d @wagner-austin (#7118)
  • [python-package] Add DTypeLike annotation to fix dtype assignment in _np2d_to_np1d @wagner-austin (#7117)
  • [python-package] use positional args for np.arange in _InnerPredictor @wagner-austin (#7119)
  • [python-package] Add TypeGuard return type to _is_pyarrow_table() for mypy type narrowing @wagner-austin (#7115)
  • [ci]: Bump the ci-dependencies group with 3 updates @dependabot[bot] (#7120)
  • [ci] update pre-commit hooks, fix typos @jameslamb (#7108)
  • [ci] move GPU and NuGet jobs to GitHub Actions, remove Azure DevOps @jameslamb (#7106)
  • [python-package] fix mypy errors about sklearn_tags() @jameslamb (#7107)
  • [ci][tests] enable test_int32_max_sparse_contribs back @StrikerRUS (#7104)
  • [ci] move more Python jobs to GitHub Actions @jameslamb (#7096)
  • [python-package] Add test for converting a ctypes int64 pointer array to a NumPy array @nicklamiller (#7071)
  • [ci]: Bump actions/checkout from 5 to 6 in the ci-dependencies group @dependabot[bot] (#7095)
  • [ci] move creation of source archives to GitHub Actions @jameslamb (#7092)
  • [ci] skip conda installation in swig jobs @StrikerRUS (#7097)
  • [ci] move MPI jobs to GitHub Actions @jameslamb (#7089)
  • [ci] display real OS name in action names @StrikerRUS (#7090)
  • [ci] [R-package] implement efficiency suggestions from lintr 3.3.0-1 @jameslamb (#7091)
  • [ci] move Windows Python jobs to GitHub Actions @jameslamb (#7086)
  • [ci] resolve 'invalid spec' conda errors in Windows jobs @jameslamb (#7087)
  • [ci] [c++] update macOS x86_64 jobs to macOS-15, used std::tolower() for case changes @jameslamb (#7083)
  • [python-package] Added test for plotting.xlim @daguirre11 (#7077)
  • [ci] move macOS Python jobs to GitHub Actions @jameslamb (#7081)
  • [ci] generate valgrind suppressions in logs @jameslamb (#7068)
  • [ci] fix PR status checks for optional CI workflows @jameslamb (#7072)
  • [ci]: Bump the ci-dependencies group with 2 updates @dependabot[bot] (#7076)
  • [python-package][tests] enhance test_set_field_none_removes_field test @StrikerRUS (#7044)
  • [docs] [R-package] fix HTML generation errors in R docs, update to roxygen2 7.3.3 @jameslamb (#7074)
  • [ci] use GitHub built-in token, switch comment-triggered jobs to workflow dispatch (fixes [#7012]) @jameslamb (#7035)
  • [ci] move js and json linter biome to pre-commit @StrikerRUS (#7059)
  • [ci][c++] fixed build/header_guard errors from cpplint @StrikerRUS (#7055)
  • [ci] move mypy to pre-commit @StrikerRUS (#7062)
  • [ci] Add sha of cpplint commit to .git-blame-ignore-revs @StrikerRUS (#7061)
  • [ci][cmake] make cmake-lint more strict @StrikerRUS (#7060)
  • [ci][c++] fixed whitespace/indent_namespace errors from cpplint @StrikerRUS (#7056)
  • [ci][docs] use lychee GitHub actions for checking broken links @StrikerRUS (#7058)
  • [c++][ci] fix include_what_you_use errors from cpplint @StrikerRUS (#7052)
  • [ci][docs] fix link checking action by switching from linkchecker to lychee and update some links @StrikerRUS (#7027)
  • [ci] [swig] move SWIG jobs to GitHub Actions @jameslamb (#7024)
  • [ci] move C++ test jobs to GitHub Actions @jameslamb (#7033)
  • [ci] Revert fix recent conda and mamba matching error [#7047] @StrikerRUS (#7049)
  • [ci] update Ruff version in pre-commit @StrikerRUS (#7051)
  • [ci] stop skipping Arrow test at Appveyor @StrikerRUS (#7050)
  • [ci] move R-package artifact publishing to GitHub Actions @jameslamb (#7032)
  • [ci] fix recent conda and mamba matching error @StrikerRUS (#7047)
  • [R-package] small cleanup after R 3.x drop @StrikerRUS (#7043)
  • [ci] update actions/checkout calls @jameslamb (#7037)
  • [python-package] Add unit test for Dataset.set_field and no data @thomasjpfan (#7036)
  • [ci] skip conda setup on cpp-tests jobs @jameslamb (#7029)
  • [ci]: Bump actions/checkout from 4 to 5 in the ci-dependencies group @dependabot[bot] (#7019)
  • [ci] separate configs and scripts for linting and docs CI @jameslamb (#7003)
  • [python-package] Fix mypy checks in engine.py @borchero (#6900)
  • [ci] [c++] use 'pre-commit' to run 'cpplint', upgrade to 'cpplint' 2.0.2 @jameslamb (#7002)
  • [ci] [python-package] work around missing pyarrow manylinux nightlies @jameslamb (#7004)
  • [docs] [ci] automatically re-generate parameter docs via pre-commit @jameslamb (#7001)
  • [ci] use 'pre-commit' to run 'rstcheck' @jameslamb (#6989)
  • [ci] [python-package] skip ranking Dask tests on macOS @jameslamb (#6997)
  • [ci] use 'pre-commit' to run 'cmakelint' @jameslamb (#6993)
  • [ci] pin graphite2 in Python 3.9 environment @jameslamb (#6992)
  • [ci] update pre-commit versions, add some pixi things to config files @jameslamb (#6986)
  • [ci] combine pip installs in Python test scripts @jameslamb (#6981)
  • [ci] [CUDA] Switch to GitHub runner for GPU CI @letmaik (#6958)
  • [cpp] rename is_finished to produced_empty_tree in cpp and R code @StrikerRUS (#6970)
  • [docs] [ci] skip scikit-learn 1.7.1 in docs build, make tests compatible with pandas 3.0, use new Azure DevOps pool @jameslamb (#6979)
  • [ci] fix PowerShell linter @StrikerRUS (#6971)
  • [ci][python-package] Enforce and fix ruff flake8-pytest-style (PT) linting codes @nicklamiller (#6959)
  • [ci] stop testing on Windows Server 2019 @jameslamb (#6953)
  • [python-package] Add specific error messages to test_dask tests @nicklamiller (#6955)
  • [ci] [R-package] Add period after specified linter names in nolint comments @nicklamiller (#6950)
  • [R-package] Add specific error messages to test_Predictor and test_dataset @nicklamiller (#6931)
  • [ci] update to 1ES image pool @shiyu1994 (#6866)
  • [python-package] Add specific error messages to test_sklearn @nicklamiller (#6929)
  • [python-package] Add specific error messages to test_plotting @nicklamiller (#6927)
  • [python-package] Add more specific error messages to test_engine @nicklamiller (#6926)
  • [ci] skip NuGet creation @StrikerRUS (#6921)
  • [python-package] Add specific error messages to test_engine @nicklamiller (#6925)
  • [python-package] Add specific error messages to test_basic and test_dask tests @nicklamiller (#6893)
  • [ci] skip self-hosted Linux CI jobs @jameslamb (#6919)
  • [python-package] Add superfluous-else-raise (RET506) rule to Ruff @suk1yak1 (#6904)
  • [python-package] Add specific error messages to some test_basic tests @nicklamiller (#6887)
  • [python-package] enforce keyword args in internal functions @jameslamb (#6858)
  • [ci] [python-package] re-enable scikit-build-core binary stripping @jameslamb (#6872)
  • [ci] build aarch64 wheel builds on a real aarch64 machine @jameslamb (#6843)
  • [ci] consolidate R package installs into a CI script @jameslamb (#6808)
  • [ci] [R-package] add CI job using clang-20 @jameslamb (#6837)
  • bump development version to v4.6.0.99 @jameslamb (#6826)
Source: README.md, updated 2026-07-18