NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1351 most downloaded on PyPI
Build backend for CMake based projects
Last release 2 days ago
02 Oct 2026
Release timing varies
gaps range from 8 days to 6 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
4 years old
74 releases · first in 2022
One column per quarter.
This patch release improves performance and fixes two minor regressions from 1.1.0. Free-threaded builds work again on CMake versions between 3.30 and
This patch release improves performance and fixes two minor regressions from 1.1.0. Free-threaded builds work again on CMake versions between 3.30 and 4.1.2 (please update CMake to 4.1.2+, though). A checkout inside an ignored directory is again left out of the SDist. Wheel builds are also faster, especially on Windows, because package sources are no longer copied to a staging directory first.
Fixes:
Python_FIND_ABI for free-threaded builds on CMake 4.1.2+, since older versions fail to find Development.Module when it is set (#1597) by @henryiii in #1598Performance:
CI and testing:
windows-11-arm by @henryiii in #1590Full Changelog: v1.1.0...v1.1.1
Allow the setuptools-scm file_finders deprecation by @henryiii in #1568
Packages can now declare their own config-settings in a tool.scikit-build.config-setting table. This gives packages the opportunity to add a documented interface in place of raw CMake defines. The new scikit-build settings list command shows all the config-settings that a project accepts. New settings include cmake.fresh, if.not overrides, and sdist.resolve-symlinks = "error". import-names and import-namespaces (PEP 794) are filled from Python if set as dynamic. project.version is now kept exactly as written in the metadata (1.1+). Editable loaders expose their search paths, redirect mode gives a deterministic __path__ order, and you can set up a persistent install tree even without rebuild-on-import. Other bugs and performance issues are addressed.
Features:
scikit-build settings list lists supported config-settings by @henryiii in #1522scikit-build build requires accepts -C/--config-setting to pass config-settings to the backend hook, and --type {static,dynamic,both} to select the static build-system.requires, the dynamic hook output, or both by @henryiii in #1584import-names and import-namespaces (PEP 794) listed in project.dynamic are computed from the Python packages (#1536) by @henryiii in #1578project.version is kept as written in the Version metadata field and in SKBUILD_PROJECT_VERSION_FULL, so a calendar version such as 2024.01.05 keeps its leading zeros. Filenames stay normalized. Requires minimum-version 1.1 or unset by @henryiii in #1572Fixes:
tool.scikit-build.env) by @henryiii in #1575CMAKE_GENERATOR define when computing build requirements by @henryiii in #1557Py_GIL_DISABLED="0" as not free-threaded by @henryiii in #1574Python_FIND_ABI for free-threaded builds on CMake 3.30+ by @henryiii in #1532Python_LIBRARY hint in SABI mode on Windows by @henryiii in #1533CMAKE_ARGS defines by @henryiii in #1573-D CMAKE_BUILD_TYPE from CMAKE_ARGS by @r3wretrhy in #1543cmake over cmake3 when searching (#1514) by @henryiii in #1515abi3t template sets SOSABI as well as SOABI by @ngoldbaum in #1587fastjsonschema on Python 3.9 by @henryiii in #1524Performance:
.gitignore specs by ancestor by @henryiii in #1550Documentation:
llms.txt and markdown copies of pages by @henryiii in #1523find_spec before import by @henryiii in #1510CI and testing:
file_finders deprecation by @henryiii in #1568Internal:
unlink(missing_ok=True) for stale CMakeCache.txt removal by @henryiii in #1517Full Changelog: v1.0.3...v1.1.0
Packages can now declare their own config-settings in a
tool.scikit-build.config-setting table. This gives packages the opportunity to
add a documented interface in place of raw CMake defines. The new
scikit-build settings list command shows all the config-settings that a
project accepts. New settings include cmake.fresh, if.not overrides, and
sdist.resolve-symlinks = "error". import-names and import-namespaces
(PEP 794) are filled from Python if set as dynamic. project.version is now
kept exactly as written in the metadata (1.1+). Editable loaders expose their
search paths, redirect mode gives a deterministic __path__ order, and you can
set up a persistent install tree even without rebuild-on-import. Other bugs and
performance issues are addressed.
Features:
tool.scikit-build.config-setting for package-declared config-settings in
#1489cmake.fresh to configure from scratch in #1516if.not overrides in #1539scikit-build settings list lists supported config-settings in #1522scikit-build build requires accepts -C/--config-setting to pass
config-settings to the backend hook, and --type {static,dynamic,both} to
select the static build-system.requires, the dynamic hook output, or both
in #1584sdist.resolve-symlinks = "error" fails the SDist build if an included path
is a symlink, and lists each link with its target. This includes
sdist.force-include sources and the files under them. Directory links are
not followed. Requires minimum-version 1.1 or unset (#1581) in #1583import-names and import-namespaces (PEP 794) listed in project.dynamic
are computed from the Python packages (#1536) in #1578project.version is kept as written in the Version metadata field and in
SKBUILD_PROJECT_VERSION_FULL, so a calendar version such as 2024.01.05
keeps its leading zeros. Filenames stay normalized. Requires
minimum-version 1.1 or unset. In #1572paths attribute in #1567editable.rebuild = false is honored with
editable.rebuild-dir, so a persistent install tree can be used without
rebuild-on-import (#1576) in #1577Fixes:
tool.scikit-build.env)
in #1575CMAKE_GENERATOR define when computing build requirements in #1557Py_GIL_DISABLED="0" as not free-threaded in #1574Python_FIND_ABI for free-threaded builds on CMake 3.30+ in #1532Python_LIBRARY hint in SABI mode on Windows in #1533CMAKE_ARGS defines in #1573-D CMAKE_BUILD_TYPE from CMAKE_ARGS by @r3wretrhy in
#1543cmake over cmake3 when searching (#1514) in #1515if.cmake-wheel never matched a platform in #1538__path__ order: the CMake
install tree first, then the source tree, so importlib.resources no longer
depends on PYTHONHASHSEED (#1565) in #1566.gitignore does not apply inside a git submodule, matching git (#1582) in
#1585.gitignore scan to the walked subtree by @zklaus in #1542GetRequires in #1555--cmake-args with shlex in #1560abi3t template sets SOSABI as well as SOABI by @ngoldbaum in #1587variantlib build requirement to <0.1 by @CavRiley in #1571fastjsonschema on Python 3.9 in #1524Performance:
.gitignore specs by ancestor in #1550Documentation:
llms.txt and markdown copies of pages in #1523find_spec before import in #1510CI and testing:
file_finders deprecation in #1568Internal:
unlink(missing_ok=True) for stale CMakeCache.txt removal in #1517This patch release polishes the setuptools compatibility plugin: config_settings are now threaded through to the build command, the source tree stays
This patch release polishes the setuptools compatibility plugin: config_settings are now threaded through to the build command, the source tree stays clean in strict editable mode, and the SubCommand protocol is fully implemented.
Fixes:
SubCommand protocol by @henryiii in #1502config_settings to the build command by @henryiii in #1499Documentation:
CI and testing:
-C config-settings in downstream editable install by @henryiii in #1498Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v1.0.2...v1.0.3
Stop using deprecated build.util.project_wheel_metadata in #1494
This patch release fixes redirect editable installs so that PEP 302 import hooks (such as beartype.claw) that register a sys.path_hooks entry are honored for redirected modules.
Fixes:
Internal:
build.util.project_wheel_metadata in #1494Full Changelog: v1.0.1...v1.0.2
This patch release fixes two bugs: shared namespace packages were being truncated in redirect editable installs, and the wheel timestamp clamp could o
This patch release fixes two bugs: shared namespace packages were being truncated in redirect editable installs, and the wheel timestamp clamp could overflow on 32-bit time_t platforms.
Fixes:
time_t platforms by @henryiii in #1484Internal:
Full Changelog: v1.0.0...v1.0.1
…now error unless minimum-version is set, and the deprecated tool.scikit-build.metadata table warns if minimum-version is not set. The empty pyproject…
We've worked through over 100 issues and ran extensive review sweeps, fixing over 90 bugs and adding 40+ features! We've added support for PEP 803 (free-threaded stable ABI), PEP 808 (partially dynamic metadata), PEP 829 (.start files), and experimental PEP 817 (variants). Editable installs are much better, with lots of edge cases fixed, like namespace packages and resource discovery. For rebuilds, which are still experimental, loaders expose a manual rebuild(), inplace mode now supports rebuilds, and rebuilds can optionally target a persistent install tree (which removes several caveats). The setuptools and hatchling plugins are no longer experimental and Hatchling supports editable installs. There's a new unified scikit-build CLI, including an init command to scaffold new projects. Wheels can be reproducible. Dynamic metadata follows a spec with entry-point discovery and uses [[tool.dynamic-metadata]], and you can write your own plugins. There are new settings: an env table for setting environment variables, install.targets, force-include for SDists and wheels, sdist.resolve-symlinks, and a ${SKBUILD_<TREE>_DIR} prefix for targeting wheel trees; existing settings gained sdist.inclusion-mode = "explicit" and list-valued cmake.build-type. Imports are lazy on Python 3.15+ (PEP 810), making CLI and backend startup faster. Lots of documentation has been added and updated, along with new examples and samples. We've also polished f2py-cmake and cython-cmake.
As (almost) always, if you set a minimum-version, your build should be unaffected. Behavior changes to be aware of: SDists now resolve symlinks by default, with an sdist.resolve-symlinks setting providing "all", "external", "none", and "classic" modes. The old names of renamed configuration fields (cmake.minimum-version, ninja.minimum-version, cmake.verbose, and cmake.targets) now error unless minimum-version is set, and the deprecated tool.scikit-build.metadata table warns if minimum-version is not set. The empty pyproject extra was removed; installers like pip, build, and uv merely warn if you still request it.
Also see the announcement post.
Features:
env: settable environment variables in #1377 (replaces #1370, unreleased)install.targets for custom install targets in #1371sdist.force-include, wheel.force-include to map files to include in #1364; entries are served live in redirect editable installs in #1441wheel.reproducible allows building a reproducible wheel (with some setup) in #1389editable.rebuild-dir at a persistent install tree (opt-in) in #1375cmake.build-type now can be a list for multiple builds in #1386wheel.packages can now include single module files in #1395cmake.build-type honors CMAKE_BUILD_TYPE from the environment in #1372"explicit" SDist inclusion-mode (opt-in include) in #1249"external", "classic", and "none" (store directory symlinks) modes in #1434abi3.abi3t wheel tag, in #1269 and #1382Fixes:
= inside dict-style env var values like SKBUILD_CMAKE_DEFINE in #1311-Cwheel.packages=src/pkg) in #1323inherit with top-level fields in #1323if.state overrides when computing get_requires_for_build_* in #1322{root} correctly in templated settings such as build-dir in #1318cmake.define lists in #1306DynamicMetadataProtocol.dynamic_metadata signature in #1365dynamic_wheel reports with OR in #1437regex/template plugin settings instead of silently ignoring them in #1319vcs_versioning.overrides in mypy in #1388wheel.packages source is CMake-generated in #1440Path.as_posix() for including generated files in SDist/wheel by @shiftinv in #1381SOURCE_DATE_EPOCH to the ZIP timestamp range in #1423abi3t wheel tag in #1380CMAKE_OSX_DEPLOYMENT_TARGET in the wheel platform tag in #1338license-files to disable license collection in #1311 and #1322location = "source" generated files as UTF-8, don't crash on subdirectories inside the scripts install dir, and fully prune consecutive excluded directories in #1322__path__ in #1335importlib.resources.files() in redirect mode in #1279__init__.pxd/.pyx as package indicators by @vyasr in #1292rebuild() no longer hides the build output on failed rebuilds in #1318rebuild(), in #1400 and #1429wheel.install-dir for rebuilds in #1334SKBUILD_PROJECT_VERSION to four components in #1369-G Ninja and -G in CMAKE_ARGS, detect multi-config generators set via cmake.define.CMAKE_GENERATOR so the right --config is used, and apply full Ninja handling to Ninja Multi-Config in #1320 and #1352-D parsing in #1422x86_64 extension on macOS in #1404-DCMAKE_SYSTEM_PROCESSOR in the CMake args suppresses ARCHFLAGS handling on macOS, as documented, in #1320cmake_minimum_required(...) no longer break cmake.version = "CMakeLists.txt", and unparsable files fall back gracefully in #1319Union by @LecrisUT in #1272; read the toolchains reply, tolerate optional link fields, and restore missing Target.sources/InstallRule.type fields in #1311 and #1319SetupError in #1293wheel-free-setuptools extra in the plugin warning in #1413editable.mode for build_ext --inplace in #1432package_dir editable root, and free-threaded limited-API gate in #1428wheel/editable state in #1321Documentation:
compile_commands.json in #1447site-packages/bin or lib in #1393cmake.module entry point and metadata states in #1360-C instead of --config-settings in examples in #1451wheel.packages semantics (top-level, not a find/where) in #1407sdist.inclusion-mode name and dynamic-metadata field requirement in #1420cmake_minimum_required ranges in #1392CI and testing:
PermissionError from concurrent wheelhouse lock races, and clean up incomplete or old editable wheels in the wheelhouse, in #1283 and #1288Internal:
_editable_skbc_<name> in #1332pyproject extra in Note truncated.
We've fixed another issue in the new file inclusion mode on Windows. We now always normalize SDist names, even if minimum-version is set to 0.4 or old
We've fixed another issue in the new file inclusion mode on Windows. We now always normalize SDist names, even if minimum-version is set to 0.4 or older, due to the fact PyPI no longer accepts non-normalized SDist names. Please increase your minimum-version anyway, though! Finally, the debug logging for file inclusion now displays the exact rule that triggered the include/exclude
behavior.
Fixes:
as_posix for prefix matching for better Windows support by @henryiii in #1246<0.5 compat mode by @henryiii in #1247Internal:
Full Changelog: v0.12.1...v0.12.2
This fixes a regression on Windows when targeting 32-bit wheels on a 64-bit host. This reverts part of #1209 . We have added 32-bit testing on Windows
This fixes a regression on Windows when targeting 32-bit wheels on a 64-bit host. This reverts part of #1209. We have added 32-bit testing on Windows to our CI.
Fixes:
Documentation:
click-extra for admonitions by @henryiii in #1232Full Changelog: v0.12.0...v0.12.1
This release adds a new sdist.inclusion-mode setting, with a new default: ignored directories are no longer traversed unless a file is specifically al
This release adds a new sdist.inclusion-mode setting, with a new default: ignored directories are no longer traversed unless a file is specifically allowed inside of it via the base path. This should be faster and less surprising. The old behavior ("classic") and no gitignore ("manual") are also provided.
Features:
sdist.inclusion-mode by @henryiii in #1048Fixes:
pyproject.toml - currently applied to fail, by @LecrisUT in #1078_PYTHON_HOST_PLATFORM env variable by @ryanking13 in #1196Documentation:
sphinx-programoutput with new ANSI support by @henryiii in #1226CI and testing:
Internal:
log_level is better than log_cli_level by @henryiii in #1178typos by @henryiii in #1192Internal (ruff linting):
Full Changelog: v0.11.6...v0.12.0
This release adds known wheels for the riscv64 platform, and adjusts a command timeout to handle slow startup on Rosetta.
This release adds known wheels for the riscv64 platform, and adjusts a command timeout to handle slow startup on Rosetta.
Fixes:
Internal:
CI and testing:
Documentation:
Full Changelog: v0.11.5...v0.11.6
This release speeds up large directories (more directory changes/optimization planned for 0.12), and adds a warning about 3.13.4 being broken on Windo
This release speeds up large directories (more directory changes/optimization planned for 0.12), and adds a warning about 3.13.4 being broken on Windows.
Fixes:
.gitignore iteration speed by @silversquirl in #1103Documentation:
platform-machine table by @mabruzzo in #1096Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.11.4...v0.11.5
This release speeds up large directories (more directory changes/optimization planned for 0.12), and adds a warning about 3.13.4 being broken on Windows.
Fixes:
.gitignore iteration speed by @silversquirl in #1103Documentation:
Full Changelog: v0.11.4...v0.11.5
This release improves support for GraalPy and fixes a few other minor issues.
This release improves support for GraalPy and fixes a few other minor issues.
Fixes:
commandFragments is optional by @henryiii in #1092python -m scikit_build_core printout and a few CLI issues by @henryiii in #1091Internal:
Documentation:
Full Changelog: v0.11.3...v0.11.4
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
This release fixes some fields in the expanded supported dynamic-metadata fields from 0.11.2. It also now is tested on Python 3.14, including adding color to --help on the experimental commands (now documented).
Fixes:
_DICT_STR_FIELDS for dynamic metadata by @bilke in #1070CI and testing:
CMAKE_GENERATOR is set by @henryiii in #1066propose-downstream by @LecrisUT in #1067Documentation:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.11.2...v0.11.3
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
This release allows dynamic-metadata to reference other fields, which enables a new plugin, "template", and enables the fancy readme plugin to include the version. There are also a few fixes; Python_EXECUTABLE is now a proper CMake path, and using a renamed option from the command line or environment variable no longer triggers an error when the min required version is from before that was introduced.
Features:
Fixes:
CI and testing:
Docs:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.11.1...v0.11.2
Ignore deprecation message from cattrs on Python 3.14 alphas by @LecrisUT in #1020
<!-- Release notes generated using configuration in .github/release.yml at main -->
This release contains two small fixes for edge case issues.
Fixes:
CI and testing:
Internal:
Docs:
PYBIND11_NEWPYTHON -> PYBIND11_FINDPYTHON) by @henryiii in #1021Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.11.0...v0.11.1
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
This version adds support for PEP 639 (license expressions) and updates the default METADATA version 2.2. Support for Python 3.7 has been removed. You can use build.requires to inject build requirements using overrides.
Features:
cmake.root by @LecrisUT in #880SKBUILD_SABI_VERSION by @henryiii in #962cmake.define by @alexreinking in #921build.requires by @LecrisUT in #992cmake_install_target by @henryiii in #976Fixes:
editable.rebuild by @hauntsaninja in #968build-dir automatically by @henryiii in #916path_to_module should handle hidden files (e.g. .clang-tidy) correctly by @tae-jun in #987Internal:
format module that is used in the expansion of pyproject.toml by @LecrisUT in #998CI and testing:
simplest_c example by @LinZhihao-723 in #937tmt tests improvements by @LecrisUT in #899Docs:
sphinx-apidoc changed its mind by @LecrisUT in #996Development.SABIModule was requested by @jcfr in #957Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.10.7...v0.11.0
This version has three fixes related to advanced usages of overrides.
This version has three fixes related to advanced usages of overrides.
Fixes:
failed in overrides by @henryiii in #904Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.10.6...v0.10.7
This version has several fixes; the new remove key in 0.10 had a mistake making it unusable, this has been fixed along with the matching issue in the
This version has several fixes; the new remove key in 0.10 had a mistake making it unusable, this has been fixed along with the matching issue in the tests. Editable installs failed if there was a folder matching an extension name. Multiplexed paths were not supported for plugins, now they are. The downstream nox job is also now a bit better.
Fixes:
Docs:
if.platform-system example by @henryiii in #879CI and testing:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.10.5...v0.10.6
This version fixes an issue rebuilding if you have a build-dir set and are using isolated build environments. The cache is now correctly cleared if th
This version fixes an issue rebuilding if you have a build-dir set and are using isolated build environments. The cache is now correctly cleared if this occurs. An issue with a certain style of gitignore was also fixed.
Fixes:
sdist.exclude takes precedence over .gitignore by @alexreinking in #872Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.10.4...v0.10.5
This version fixes the logic for handling the sysconfig variables on Windows for the values that used to be only provided on UNIX. This mostly affects
This version fixes the logic for handling the sysconfig variables on Windows for the values that used to be only provided on UNIX. This mostly affects targeting the Stable ABI on Python 3.13. Editable install rebuilds now work if you have a wheel.install-dir set, too.
Fixes:
wheel.install-dir by @psalvaggio in #867Docs:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.10.3...v0.10.4
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
This release fixes an issue on Windows systems with non-utf-8 default encodings for Python <3.14 when reading gitignores with special characters.
Fixes:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.10.2...v0.10.3
This release fixes a regression with 0.10 where a manually included file in an sdist would get included twice, affecting some tools (like uv).
This release fixes a regression with 0.10 where a manually included file in an sdist would get included twice, affecting some tools (like uv).
Fixes:
include_spec by @abetlen in #857Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.10.1...v0.10.2
This is a quick fix release with two patches for specific situations.
This is a quick fix release with two patches for specific situations.
Fixes:
cmake.minimum-version logic issue by @henryiii in #853Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.10.0...v0.10.1
Hide deprecated options in README by @henryiii in #792
This version adds auto CMake version discovery, opt-in auto minimum-version, rebuild on failure support, quite a few new override options greatly expanding the static config options for builds, more powerful regexs, and more.
Also see the announcement post.
New features:
fail setting to instant-fail build by @henryiii in #824if.abi-flags (for free-threaded) by @henryiii in #819if.system-cmake and if.cmake-wheel by @henryiii in #826if.from-sdist for overrides by @henryiii in #812if.failed (retry) by @henryiii in #820if.scikit-build-version by @henryiii in #851cmake.targets and cmake.verbose to build.targets and build.verbose by @henryiii in #793result= by @henryiii in #818remove= postprocess to regex by @henryiii in #828Fixes:
get_requires_* by @henryiii in #840Tests:
test_cmake_config if CMAKE_GENERATOR is already set by @lorepirri in #847Internal:
Documentation:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.9.8...v0.10.0
This release backports a couple of fixes made during work towards 0.10.
This release backports a couple of fixes made during work towards 0.10.
Fixes:
'-' in version name by @henryiii in #834Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.9.9...v0.9.10
This release backports a fix made during work towards 0.10.
This release backports a fix made during work towards 0.10.
Fixes:
SKBUILD_PROJECT_VERSION by @henryiii in #829Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.9.8...v0.9.9
This version ships a few more small fixes. Multi-target builds were missing build arguments due to an exhausted generator. And some packages seem to h
This version ships a few more small fixes. Multi-target builds were missing build arguments due to an exhausted generator. And some packages seem to hard-code ${CMAKE_INSTALL_PREFIX} in the install() call, which is an anti-pattern, but we can set that variable too. More tests now run on Python 3.7.
Fixes:
CMAKE_INSTALL_PREFIX in their install commands by @henryiii in #786Tests:
ZipFile instead of zipfile.Path to enable more tests on Python 3.7 by @henryiii in #785Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.9.7...v0.9.8
This release makes a few small fixes, enabling better Fortran support and correct tags on MUSL. And releases now have Attestations on GitHub at .
This release makes a few small fixes, enabling better Fortran support and correct tags on MUSL. And releases now have Attestations on GitHub at https://github.com/scikit-build/scikit-build-core/attestations.
Fixes:
CC and CXX from sysconfig if not set by @henryiii in https://github.com/scikit-build/scikit-build-core/pull/782musllinux tag incorrect by @henryiii in https://github.com/scikit-build/scikit-build-core/pull/773DEBUG in non-PEP 517 usage by @henryiii in https://github.com/scikit-build/scikit-build-core/pull/779Documentation:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.9.6...v0.9.7
This release makes a few small fixes, enabling better Fortran support and correct tags on MUSL. And releases now have Attestations on GitHub at https://github.com/scikit-build/scikit-build-core/attestations.
Fixes:
CC and CXX from sysconfig if not set by @henryiii in #782musllinux tag incorrect by @henryiii in #773DEBUG in non-PEP 517 usage by @henryiii in
#779Documentation:
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
This release provides a fix for the experimental setuptools plugin leaking and affecting other setuptools plugins.
Fixes:
metadata.version.provider not set by @thewtex in #762cmake_* keywords present by @kiwifb in #768Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.9.5...v0.9.6
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
This release fixes building for the the Windows variant of free-threaded Python 3.13.
Fixes:
Documentation:
-C options can be prefixed with skbuild. by @KyleFromNVIDIA in #754CI and testing:
<!-- Release notes generated using configuration in .github/release.yml at main -->
<!-- Release notes generated using configuration in .github/release.yml at main -->
This version supports the newly available free-threading variant of Python 3.13b1 (mostly related to skipping the stable ABI). We test this via the manylinux/musllinux images. There's also a new feature requested by third-party packagers: the ability to pass args directly to the build tool.
Features:
build.tool-args by @henryiii in #733Fixes:
Documentation:
CI and testing:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.9.3...v0.9.4
This version ensures the Hatchling plugin correctly indicates editable mode is not yet supported, supports CMAKE_ARGS that have spaces, and has a bit
This version ensures the Hatchling plugin correctly indicates editable mode is not yet supported, supports CMAKE_ARGS that have spaces, and has a bit of other minor cleanup.
Fixes:
entrypoints.txt if none set by @henryiii in #729CMAKE_ARGS that may have spaces inside quotes by @vyasr in #727Docs:
CI and testing:
macos-13 and macos-14 explicitly by @henryiii in #724macos-latest is changing to macos-14 ARM runners by @henryiii in #725Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.9.2...v0.9.3
Quick fix for quick fix in 0.9.1; if cmake is a broken script (which can happen if you pip install outside an environment then enter an environment, t
Quick fix for quick fix in 0.9.1; if cmake is a broken script (which can happen if you pip install outside an environment then enter an environment, there was an unbound local error instead of ignoring the broken cmake script.
Fixes:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.9.1...v0.9.2
Quick fix for Pyodide (WebAssembly) builds.
Quick fix for Pyodide (WebAssembly) builds.
--version if -E capabilities fails by @henryiii in #717Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.9.0...v0.9.1
Quick fix for Pyodide (WebAssembly) builds.
Fixes:
--version if -E capabilities fails by @henryiii in #717This version adds the ability to inherit in override tables, matching a similar feature added to cibuildwheel 2.17's overrides. You can now write out
This version adds the ability to inherit in override tables, matching a similar feature added to cibuildwheel 2.17's overrides. You can now write out extra metadata to ${SKBUILD_METADATA_DIR}. A new Hatchling plugin is provided as an experimental feature (will likely be made a separate package in the future like the setuptools plugin).
The meaning of wheel.exclude has been changed to match on the wheel path, rather than the source path. We could not find any projects that would be affected by this change, so it was not added to the minimum-version protection policy. This now allows you to ignore CMake outputs as well.
Features:
cmake.define across overrides tables by @stubbiali in #564Fixes:
.git_archival.txt reproducible by @LecrisUT in #706cmake -E capabilities instead of cmake --version by @KyleFromNVIDIA in #675API changes:
extra_settings for SettingsReader by @henryiii in #697GetRequires args changed by @henryiii in #699from_file a little more powerful by @henryiii in #700Documentation:
cmakelists.md Windows SOABI suffix variable by @thewtex in #684ninja.make-fallback description in the README by @thewtex in #676CI and testing:
pybind11 test dependency by @LecrisUT in #691Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.8.2...v0.9.0
This version fixes a few small issues related to configuration. The wheel tag is fixed when wheel.platlib is False, inplace editable installs ignore b
This version fixes a few small issues related to configuration. The wheel tag is fixed when wheel.platlib is False, inplace editable installs ignore build-dir, and install-dir no longer affects the generate path.
Fixes:
wheel.platlib being false sets <abi>-<platform> as "none-any" by @jcfr in #655build-dir by @henryiii in #644install-dir shouldn't affect generate path by @henryiii in #654Documentation:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.8.1...v0.8.2
This version fixes two small issues with specific situations: if ninja/cmake is present but not executable, and ninja on Windows not respecting the bu
This version fixes two small issues with specific situations: if ninja/cmake is present but not executable, and ninja on Windows not respecting the build type.
Fixes:
CMAKE_BUILD_TYPE on Windows ninja by @henryiii in https://github.com/scikit-build/scikit-build-core/pull/640- vs _ in error message by @nbelakovski in https://github.com/scikit-build/scikit-build-core/pull/638Documentation:
cmake.args for defines by @LecrisUT in https://github.com/scikit-build/scikit-build-core/pull/620Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.8.0...v0.8.1
This version fixes two small issues with specific situations: if ninja/cmake is present but not executable, and ninja on Windows not respecting the build type.
Fixes:
CMAKE_BUILD_TYPE on Windows Ninja by @henryiii in #640- vs _ in error message by @nbelakovski in #638Documentation:
cmake.args for defines by @LecrisUT in #620This version replaces the cmake/ninja minimum-version config option with a more powerful free-form version field. Scikit-build-core will now respect C
This version replaces the cmake/ninja minimum-version config option with a more powerful free-form version field. Scikit-build-core will now respect CMAKE_EXECUTABLE for finding CMake. You can override based on the build state, allowing overrides for editable installs, for example. You can specify a build tag (AKA build number). And you can define CMake variables from environment variables.
Features:
build-tag by @henryiii in #612if.state to overrides by @henryiii in #600cmake.version and ninja.version by @henryiii in #602CMAKE_EXECUTABLE by @henryiii in #603Fixes:
Tests and internal:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.7.1...v0.8.0
Remove deprecated mypy setting (now defaults on) by @henryiii in #589
This is a quick fix for a downstream change in hatch-fancy-pypi-readme that broke our plugin wrapper.
Fixes:
CI and tests:
Docs:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.7.0...v0.7.1
This release features several large improvements to overrides: a new if.any group to allow selections based on any item being true, and a new if.env o
This release features several large improvements to overrides: a new if.any group to allow selections based on any item being true, and a new if.env option for selecting an override based on environment variables. You can now build pure Python packages with wheel.cmake = false, perfect for providing a slower pure Python version of a package on unsupported systems via overrides.
There's also a new inplace mode for editable installs, which has drawbacks but feels like the classic "--inplace" setting in setuptools and can enable some tooling that would otherwise not support modern editable installs to work. If you are using Cython to access .pxd files, modern ("redirect") editable installs now support that. And to help avoid collisions with a future user feature, config settings can now be passed with an optional namespace, skbuild., as well.
Features:
wheel.exclude by @henryiii in #560if.any by @henryiii in #548if.env by @henryiii in #549skbuild.) by @henryiii in #556Fixes:
.pxd files by @vyasr in #516CI:
Docs:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.6.1...v0.7.0
Editable package imports fix (regression in 0.6.0) by @henryiii in #546
Fixes:
CMAKE_ARGS and debug printout by @henryiii in #543Docs:
configuration.md by @0xTowel in #530Tests and internal:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.6.0...v0.6.1
Adding overrides by @henryiii in #514
Features:
importlib.resources in editable installs by @LecrisUT in #399Fixes:
DEBUG envvar by @henryiii in #527Tests and internal:
Docs:
pip by @LecrisUT in #513Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.5.1...v0.6.0
This release features overrides, a system similar to mypy and cibuildwheel's
overrides, allowing static configuration of special cases, like different
settings per operating system or Python version ranges. It also features
preliminary support for importlib.resources in editable mode.
Features:
importlib.resources in editable installs by @LecrisUT in #399Fixes:
DEBUG envvar by @henryiii in #527Tests and internal:
Docs:
pip by @LecrisUT in #513Add {build_type} and {state} to build-dir by @henryiii in #504
Features:
{build_type} and {state} to build-dir by @henryiii in #504Fixes:
setuptools_scm 8 writing change by @henryiii in #509build_type set in toml by @henryiii in #498Tests and internal:
Docs:
wheel.py.api -> wheel.py-api by @njzjz in #488SKBUILD_CMAKE_DEFINE env var by @aloisklink in #501Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.5.0...v0.5.1
Add option to run CMake during SDist creation by @henryiii in #454
Features:
Fixes:
Tests and internal:
Docs:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.4.8...v0.5.0
This release sees the addition of a generated schema, which has also been
contributed to SchemaStore, enabling tool.scikit-build to be understood by
most editors. There's also now a way to enable CMake during the SDist step, a
new regex plugin, and a mechanism to write metadata to a file without having to
depend on the plugin.
Features:
Fixes:
Tests and internal:
Docs:
This release focus on two fixes that correct some interference issues with other setuptools plugins. A few new features were added (opt-in only): the
This release focus on two fixes that correct some interference issues with other setuptools plugins. A few new features were added (opt-in only): the ability to select build targets, install components, and opt-in --strip (will be opt-out in 0.5 if the minimum-version is set to 0.5+ or unset).
Features:
Fixes:
Docs:
getting_started.md by @0xTowel in #439nanobind/pybind11 src & sp-dev by @henryiii in #429Tests and other:
target-version no longer needed by Black or Ruff by @henryiii in #419get_origin/get_args by @henryiii in #423Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.4.7...v0.4.8
This version fixes a unused variable message in 0.4.6, along with a debug logging improvement, and a few test fixes, including a regression in the rec
This version fixes a unused variable message in 0.4.6, along with a debug logging improvement, and a few test fixes, including a regression in the recent noxfile reworking.
SKBUILD_STATE unused message when building by @henryiii in #401Tests and CI:
NO_COLOR by @henryiii in #407noxfile.py added to mypy, two fixes by @henryiii in #408pyproject.toml by @henryiii in #402Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.4.6...v0.4.7
This release has one small new feature (access to ${SKBUILD_STATE} from CMake), and fixes an issue when adding read-only files on Windows with Python
This release has one small new feature (access to ${SKBUILD_STATE} from CMake), and fixes an issue when adding read-only files on Windows with Python 3.7. Some testing and docs infrastructure updates should make it easier for downstream packagers to ship scikit-build-core.
Fixes:
setuptools_scm by @henryiii in #390TemporaryDirectory bug by @henryiii in #391Tests:
network marker by @henryiii in #379CI:
not network for spec by @henryiii in #383Docs:
UseSWIG for swig by @henryiii in #377Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.4.5...v0.4.6
This version fixes issues with output being incorrectly interleaved with logging messages. Symlinks are now followed when making SDists. And finally,
This version fixes issues with output being incorrectly interleaved with logging messages. Symlinks are now followed when making SDists. And finally, SKBUILD_SOABI is now correctly set when cross-compiling on Windows (Warning! FindPython still does not report the correct SOABI when cross-compiling to ARM).
Fixes:
RUNENV debugging log output by @jameslamb in #357Tests:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.4.4...v0.4.5
This version fixes some issues cross-compiling to Windows ARM when making Limited API / Stable ABI extensions, and supports multiple config generators
This version fixes some issues cross-compiling to Windows ARM when making Limited API / Stable ABI extensions, and supports multiple config generators in editable mode.
Python_SABI_LIBRARY by @henryiii in #352Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.4.3...v0.4.4
This adds support for CPython 3.12.0b1, and improves Stable ABI / Limited API support (supported by an upcoming nanobind for Python 3.12). An editable
This adds support for CPython 3.12.0b1, and improves Stable ABI / Limited API support (supported by an upcoming nanobind for Python 3.12). An editable install fix allows running from any directory.
Fixes:
Other:
CMAKE_ARGS supports space separators by @henryiii in #339Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.4.2...v0.4.3
This is a quick followup to LICENSE file handing to closer match the current draft of PEP 639. It also removes the automatic optional Rich logging, wh
This is a quick followup to LICENSE file handing to closer match the current draft of PEP 639. It also removes the automatic optional Rich logging, which doesn't work well with Pip's subprocess piping, being cropped to a very narrow width regardless of terminal size.
Fixes:
License-file metadata entry & update default by @henryiii in #329Other:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.4.1...v0.4.2
A fix for LICENCE files being placed in the wrong place in the wheel. Now we follow hatchling's structure of placing them in *.dist-info/licenses.
A fix for LICENCE files being placed in the wrong place in the wheel. Now we follow hatchling's structure of placing them in *.dist-info/licenses.
Fixes:
Other:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.4.0...v0.4.1
An important fix/feature: LICENSE files were not being included in the wheel's metadata folder. You can configure the license file selection via a new
An important fix/feature: LICENSE files were not being included in the wheel's metadata folder. You can configure the license file selection via a new configuration option, and a reasonable default was added. You can now select a source directory for your CMakeLists.txt. A lot of work was done on the still experimental setuptools backend; it still should be seen as completely experimental while it is being finished.
Features:
cmake.source-dir for CMakeLists in subdirectories by @henryiii in #323LICENSE file option by @henryiii in #321Fixes:
LICENSE file by @henryiii in #321Setuptools plugin:
cmake_args by @henryiii in #314skbuild.setup compat by @henryiii in #315Other:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.3.3...v0.4.0
This version improves WebAssembly support (Pyodide) and fixes a reported bug in the new editable mode.
This version improves WebAssembly support (Pyodide) and fixes a reported bug in the new editable mode.
Fixes:
CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY by @henryiii in #303Other:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.3.2...v0.3.3
Some small fixes for edge cases. Several docs improvements, too.
Some small fixes for edge cases. Several docs improvements, too.
Fixes:
Docs:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.3.1...v0.3.2
This is a small release fixing a regression in some cases caused by adding Python_LIBRARY. This has been reverted on non-Windows platforms, since it i
This is a small release fixing a regression in some cases caused by adding Python_LIBRARY. This has been reverted on non-Windows platforms, since it is only needed on Windows.
Fixes:
Docs:
Other:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.3.0...v0.3.1
This version brings two new dynamic metadata plugins (wrappers for setuptools_scm & hatch-pypi-fancy-readme). Third-party packages can now add entry-p
This version brings two new dynamic metadata plugins (wrappers for setuptools_scm & hatch-pypi-fancy-readme). Third-party packages can now add entry-points declaring CMAKE_PREFIX_DIR and CMAKE_MODULE_DIR entries. Support has been added for requesting metadata without building. And experimental support was added for editable installs, including an option for automatic rebuilds.
Several fixes have been added as well, like SABI support, ARM cross-compiling support for FindPython, scripts entries now process shebang lines, and setting a build-dir with {wheel_tag} was not working before. The docs have been started, with a quickstart for common situations, a page on configuration, and some info on authoring a CMakeLists.
Features:
get_requires_for_dynamic_metadata by @henryiii in #235Fixes:
get_requires & fix some ninja paths by @henryiii in #250{wheel_tag} was not working by @henryiii in #262CMAKE_PREFIX_DIR and CMAKE_MODULE_DIR are passed in the init cache file to remove a unused variable warning by @henryiii in #272FORCE_COLOR) by @henryiii in #266Other things:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.2.2...v0.3.0
This release makes a small improvement to the wheel file permissions (in line with wheel 0.40). It also ensures the test suite will still pass in an e
This release makes a small improvement to the wheel file permissions (in line with wheel 0.40). It also ensures the test suite will still pass in an environment with SOURCE_DATE_EPOCH already set. A few internal changes are paving the way to 0.3.0.
Fixes:
Tests:
SOURCE_DATE_EPOCH set by @LecrisUT in #221Other things:
from_pyproject by @henryiii and @bennyrowland in #224Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.2.1...v0.2.2
This release fixes the tag for Windows ARM wheels, and has some internal refactoring to prepare for the next new features. A new {wheel_tag} value is
This release fixes the tag for Windows ARM wheels, and has some internal refactoring to prepare for the next new features. A new {wheel_tag} value is available for build-dir. Some basic setup was done on the docs, as well. Debug logging and test output has been improved a little, as well.
Changes:
{wheel_tag} for build-dir by @henryiii in #207CMAKE_SYSTEM_PROCESSOR by @henryiii in #207Fixes:
Other things:
cmake3 visible by @LecrisUT in #211Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.2.0...v0.2.1
This version adds local build directory support - you can now set build-dir and reuse build targets. This does not yet default to on, so please test i
This version adds local build directory support - you can now set build-dir and reuse build targets. This does not yet default to on, so please test it out. This can dramatically speed up rebuilds. If you want to mimic setuptools, you can set this to build/{cache_tag}. Or you can chose some other directory, like scikit-build classic's _skbuild. Along with this, we now have a native wheel writer implementation and support prepare_metadata_for_build_wheel.
Scikit-build-core now also contains a backport of FindPython from CMake 3.26, which fixes SOABI on PyPy and supports the Stable ABI / Limited API.
Features:
prepare_metadata_for_build_wheel by @henryiii in #191Tests:
Other things:
Full Changelog: https://github.com/scikit-build/scikit-build-core/compare/v0.1.6...v0.2.0
Your coding agent can read these notes before it upgrades. Set up the MCP server →