Configuration Reference
All configuration for rind goes in the [tool.rind]
table of your pyproject.toml.
Core Package Options
These options are used when wrapping a core package. For standalone metapackages (dependency bundles without a core package), see Standalone Mode below.
core-path
Type: string (path)
Path to the directory containing your core package’s pyproject.toml.
This tells rind where to find the core package.
[tool.rind]
core-path = ".."
The core package’s pyproject.toml is used to:
Determine the version (using whatever versioning system the core uses)
Get the core package name (from
[project] name)Inherit metadata fields like authors, license, URLs (if
inherit-metadatais true)
Note
If core-path is not specified, rind operates in standalone mode where
all metadata must be provided directly in [project].
name
Type: string
The name of the metapackage. Required when using core-path. Must be different
from the core package name.
[tool.rind]
name = "mypackage"
In standalone mode, specify the name in [project] instead.
Inheritance Options
inherit-metadata
Type: boolean (default: true)
Whether to inherit metadata fields from the core package. When true, the following fields are inherited (unless overridden):
descriptionrequires-pythonlicenseauthorsurlsclassifierskeywords
[tool.rind]
# Inherit metadata (default)
inherit-metadata = true
# Or disable inheritance
inherit-metadata = false
Note
The inherited metadata is resolved and stored in the sdist’s pyproject.toml,
so wheels can be built from the sdist without access to the core package.
Dependency Options
include-extras
Type: list of strings
Extras from the core package to include as required dependencies in the
metapackage. These become part of the main Requires-Dist.
[tool.rind]
# Users of the metapackage automatically get these extras
include-extras = ["recommended", "performance"]
The resulting wheel will have:
Requires-Dist: mypackage-core[recommended,performance]==1.2.3
passthrough-extras
Type: list of strings
Extras from the core package to re-expose in the metapackage. These remain optional but are pinned to the same version.
[tool.rind]
passthrough-extras = ["test", "docs", "dev"]
The resulting wheel will have:
Provides-Extra: test
Requires-Dist: mypackage-core[test]==1.2.3; extra == 'test'
Provides-Extra: docs
Requires-Dist: mypackage-core[docs]==1.2.3; extra == 'docs'
Note that you can use ["*"] to pass through all extras from the core package:
[tool.rind]
passthrough-extras = ["*"]
This is particularly useful for existing packages transitioning to use rind.
By passing through all extras, the metapackage preserves full backward
compatibility - any code that previously depended on
mypackage[someextra] will continue to work unchanged with the new
metapackage structure.
Note
It’s fine if an extra appears in both include-extras and
passthrough-extras (either explicitly or via ["*"]). When a user
installs the passthrough extra, it will be a no-op since that extra’s
dependencies are already installed as part of the main package. This
means you don’t need to carefully exclude include-extras from your
passthrough list.
Metadata Overrides
Any field that can be inherited can also be overridden by specifying it
directly in [tool.rind]:
description
Type: string
Override the inherited description.
[tool.rind]
description = "My package with all recommended dependencies"
You can also override these in a [project] table, though [tool.rind]
takes precedence:
[project]
# These are checked after [tool.rind] but before inherited values
requires-python = ">=3.10"
[tool.rind]
# This takes highest precedence
description = "Override description"
Complete Example
Here’s a complete pyproject.toml for a metapackage:
[build-system]
requires = ["rind"]
build-backend = "rind"
[tool.rind]
# Path to core package directory (required)
core-path = ".."
# Meta-package identity
name = "mypackage"
description = "My package with batteries included"
# Make these extras required
include-extras = ["recommended", "performance"]
# Pass through all extras for backward compatibility
passthrough-extras = ["*"]
Standalone Mode
rind can also create metapackages without a core package. This is useful for creating curated dependency bundles (e.g., “my-data-science-stack”).
In standalone mode, omit core-path and specify all metadata directly in
[project]:
[build-system]
requires = ["rind"]
build-backend = "rind"
[project]
name = "my-data-science-stack"
version = "1.0.0"
description = "A curated collection of data science packages"
requires-python = ">=3.9"
dependencies = [
"pandas>=2.0",
"numpy>=1.24",
"matplotlib>=3.7",
]
[project.optional-dependencies]
ml = ["scikit-learn>=1.3", "tensorflow>=2.13"]
Key differences from core-package mode:
Version must be static (specified directly in
[project])No metadata inheritance (everything in
[project])No
include-extrasorpassthrough-extras(define extras directly)No automatic version pinning