scikit-build-core
Build backend for CMake based projects
What it is and what it does
Scikit-build-core is a modern Python build backend that replaces setuptools for projects using CMake to compile native extensions. Instead of writing thousands of lines of setuptools/distutils configuration, you write a simple CMakeLists.txt and configure the build in pyproject.toml. It automatically manages CMake and Ninja as build dependencies, handles cross-compilation for Apple Silicon and Windows ARM, and supports C++, Fortran, and other languages.
The package targets scientific computing but works for any CMake-based project. It includes features like reproducible builds, editable mode with optional auto-rebuild, WebAssembly support, and free-threaded Python 3.13+ compatibility. Configuration is flexible via pyproject.toml, command-line options, or environment variables, with sensible defaults that avoid slow generator search and verbose logging.
Use it for:
- Building scientific packages with C/C++ extensions that need cross-platform compilation and Fortran support.
- Creating Python packages with complex native code where CMake tooling is already established.
- Developing WebAssembly packages for Pyodide or Emscripten without setuptools boilerplate.
- Maintaining reproducible builds for distribution, with opt-in SDist and wheel reproducibility.
- Migrating from classic Scikit-build while gaining modern Python packaging standards and better error messages.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
A build backend that uses CMake to compile Python extension modules and packages, replacing setuptools-based build systems with a modern, standards-compliant approach.
Yes. Scikit-build-core is production-stable (Development Status 5), actively maintained, has no known vulnerabilities, and low install friction. It is the right choice if your project uses CMake and you want to avoid setuptools complexity. Install it as a build-system requirement in pyproject.toml, not as a runtime dependency—it does not affect end users.
Install
scikit-build-core on PyPI
pip
pip install scikit-build-coreuv
uv add scikit-build-corepoetry
poetry add scikit-build-coreInstalling scikit-build-core
Before you install
Low installation friction with only six runtime dependencies (packaging, pathspec, tomli, typing-extensions, importlib-resources, exceptiongroup). Active maintenance with a release 33 days ago. Designed as a build-time tool, so it does not burden runtime environments.
License in practice
Apache-2.0 permissive license allows use in commercial and proprietary projects with minimal restrictions, requiring only license and copyright notice attribution.
Quickstart
# In pyproject.toml
[build-system]
requires = ["scikit-build-core"]
build-backend = "scikit_build_core.build"
[project]
name = "my_package"
version = "0.0.1"
Requires CMake 3.15 or later and Python 3.8+; system C/C++ compiler and CMake must be available or will be installed as build dependencies.
Verify before relying
- Actual build performance and caching behavior compared to alternative approaches in real-world projects.
- Completeness of Hatchling and Setuptools integration backends and their stability relative to the native pyproject builder.
- Practical experience with the experimental auto-rebuild-on-import feature for development workflows.
Package facts
| License | Apache-2.0 (permissive) |
| Python support | supports the current Python release (>=3.8) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 6 — exceptiongroup, importlib-resources, packaging, pathspec, tomli, typing-extensions |
| Maintenance | actively maintained — 33 days since the last release |
| First released | |
| Downloads | 11,249,544/month — #1,404 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: scikit_build_core-1.0.3-py3-none-any.whl
Tags
More Scientific/Engineering packages
NumPy provides an N-dimensional array object…
permissive · top 100 on PyPI
pandaspandas provides fast, flexible data structures…
permissive · top 100 on PyPI
scipyscipy provides numerical algorithms for…
permissive · top 100 on PyPI
scikit-learnscikit-learn provides a comprehensive Python…
permissive · top 1,000 on PyPI
dilldill extends Python's pickle module to…
permissive · top 1,000 on PyPI
multiprocessMultiprocess is an enhanced fork of Python's…
permissive · top 1,000 on PyPI
scikit-buildscikit-build bridges setuptools and CMake to…
permissive · top 5,000 on PyPI
cmakeDistributes CMake 4.4.2 as a Python package,…
permissive · top 5,000 on PyPI
mesonMeson is a build system that reads declarative…
permissive · top 5,000 on PyPI
hatch-cythonA Hatch build hook that integrates Cython…
permissive · top 15,000 on PyPI
cmeelcmeel is a PEP 517 build backend that packages…
permissive · top 5,000 on PyPI
conanConan is a decentralized, open-source package…
permissive · top 5,000 on PyPI
buildBuilds Python packages in isolated…
permissive · top 1,000 on PyPI
ninjaDistributes the Ninja 1.13.0 build system as…
permissive · top 1,000 on PyPI
pytest-cmakeIntegrates Pytest with CMake build systems,…
permissive · top 15,000 on PyPI
SConsSCons is a Python-based build system that…
permissive · top 5,000 on PyPI