# Hatchling A [hatchling][] plugin is being developed for scikit-build-core. This is currently in a highly experimental state, but feedback is welcome. :::{warning} This plugin is experimental, and will probably be moved to a separate package. If using it, it is highly recommended to upper-cap scikit-build-core until it moves. ::: :::{versionadded} 0.9 ::: ## Basic usage To use the plugin, make sure hatchling and scikit-build-core are in your `build-system.requires`. A recent version of hatchling is best; you need 1.23 to get `cmake` and `ninja` auto-added if needed, and 1.24 if you want to write out custom scripts, metadata, or shared data. You need a `tool.hatch.build.targets.wheel.hooks.scikit-build` section to activate the plugin. Currently, you need at least the `experimental` option to use the plugin, which means you acknowledge that this might move in the next release of scikit-build-core. It was added in 0.9. ```toml [build-system] requires = ["hatchling", "scikit-build-core~=0.9.0"] build-backend = "hatchling.build" [project] name = "hatchling_example" version = "0.1.0" [tool.hatch.build.targets.wheel.hooks.scikit-build] experimental = true ``` :::{note} Note that this is equivalent: ```toml [tool.hatch.build.targets.wheel.hooks.scikit-build] [tool.scikit-build] experimental = true ``` ::: ## Options Most of scikit-build-core's configuration can be used with hatchling if it is applicable. Things like metadata and wheel options generally are not applicable, unless they pertain to setting the tag (which scikit-build-core controls). You can specify settings in either `tool.hatch.build.targets.wheel.hooks.scikit-build` or `tool.scikit-build` or via environment variables. You cannot use config-settings, as that's not supported by hatchling for plugins. Key limitations: - You need to leave `cmake.wheel` on. No `wheel.platlib = False` builds. - Using cmake in SDist step is not supported yet. - Editable installs are not supported yet. - `scikit-build.generate` and `scikit-build.metadata` is not supported. - `${SKBUILD_HEADER_DIR}` is not supported, request support in Hatching if needed. - Anything in `${SKBUILD_METADATA_DIR}` must be placed in an `extra_metadata` folder. ## Writing CMakeLists.txt The hatchling version is available as `${SKBUILD_HATCHLING}`. [hatchling]: https://hatch.pypa.io