Configuration¶
[tool.repomatic] configuration¶
Downstream projects can customize workflow behavior by adding a [tool.repomatic] section in their pyproject.toml. These options control the defaults for the corresponding CLI commands.
The [tool.repomatic] section is powered by Click Extra’s pyproject.toml configuration. Click Extra handles CWD-first discovery (walking up to the VCS root), key normalization (kebab-case to snake_case), and typed dataclass schemas (nested sub-tables, opaque dict fields, strict validation).
[tool.repomatic]
pypi-package-history = ["old-name", "older-name"]
awesome-template.sync = false
bumpversion.sync = false
cache.max-age = 14
dev-release.sync = false
gitignore.sync = false
labels.sync = false
mailmap.sync = false
setup-guide = false
uv-lock.sync = false
dependency-graph.output = "./docs/assets/dependencies.mmd"
dependency-graph.all-groups = true
dependency-graph.all-extras = true
dependency-graph.no-groups = []
dependency-graph.no-extras = []
dependency-graph.level = 0
gitignore.location = "./.gitignore"
gitignore.extra-categories = ["terraform", "go"]
gitignore.extra-content = '''
junit.xml
# Claude Code
.claude/
'''
exclude = ["skills", "workflows/debug.yaml", "zizmor"]
labels.extra-files = ["https://example.com/my-labels.toml"]
labels.extra-file-rules = "docs:\n - docs/**"
labels.extra-content-rules = "security:\n - '(CVE|vulnerability)'"
nuitka.enabled = false
nuitka.entry-points = ["mpm"]
nuitka.extra-args = [
"--include-data-files=my_pkg/data/*.json=my_pkg/data/",
]
nuitka.unstable-targets = ["linux-arm64", "windows-arm64"]
test-plan.file = "./tests/cli-test-plan.yaml"
test-plan.timeout = 120
test-plan.inline = "- args: --version"
workflow.sync = false
workflow.source-paths = ["extra_platforms"]
Option |
Type |
Default |
|---|---|---|
bool |
|
|
bool |
|
|
str |
|
|
int |
|
|
int |
|
|
int |
|
|
int |
|
|
str |
|
|
bool |
|
|
bool |
|
|
int |
(none) |
|
list[str] |
|
|
list[str] |
|
|
str |
|
|
bool |
|
|
list[str] |
|
|
list[str] |
|
|
str |
|
|
list[str] |
|
|
list[str] |
|
|
str |
(see example) |
|
str |
|
|
bool |
|
|
list[str] |
|
|
str |
|
|
str |
|
|
list[str] |
|
|
bool |
|
|
bool |
|
|
bool |
|
|
bool |
|
|
list[str] |
|
|
list[str] |
|
|
list[str] |
|
|
list[str] |
|
|
bool |
|
|
str |
|
|
list[dict[str, str]] |
|
|
list[dict[str, str]] |
|
|
dict[str, list[str]] |
{} |
|
dict[str, dict[str, str]] |
{} |
|
dict[str, list[str]] |
{} |
|
str |
|
|
str |
(none) |
|
int |
(none) |
|
bool |
|
|
list[str] |
(none) |
|
bool |
|
awesome-template.syncType: bool | Default:
trueWhether awesome-template sync is enabled for this project.
bumpversion.syncType: bool | Default:
trueWhether bumpversion config sync is enabled for this project.
cache.dirType: str | Default:
""Override the binary cache directory path.
cache.github-release-ttlType: int | Default:
604800Freshness TTL for cached single-release bodies (seconds).
cache.github-releases-ttlType: int | Default:
86400Freshness TTL for cached all-releases responses (seconds).
cache.max-ageType: int | Default:
30Auto-purge cached entries older than this many days.
cache.pypi-ttlType: int | Default:
86400Freshness TTL for cached PyPI metadata (seconds).
changelog.locationType: str | Default:
"./changelog.md"File path of the changelog, relative to the root of the repository.
dependency-graph.all-extrasType: bool | Default:
trueWhether to include all optional extras in the graph.
dependency-graph.all-groupsType: bool | Default:
trueWhether to include all dependency groups in the graph.
dependency-graph.levelType: int | Default: (none)
Maximum depth of the dependency graph.
dependency-graph.no-extrasType: list[str] | Default:
[]Optional extras to exclude from the graph.
dependency-graph.no-groupsType: list[str] | Default:
[]Dependency groups to exclude from the graph.
dependency-graph.outputType: str | Default:
"./docs/assets/dependencies.mmd"Path where the dependency graph Mermaid diagram should be written.
dev-release.syncType: bool | Default:
trueWhether dev pre-release sync is enabled for this project.
docs.apidoc-excludeType: list[str] | Default:
[]Glob patterns for modules to exclude from
sphinx-apidoc.
docs.apidoc-extra-argsType: list[str] | Default:
[]Extra arguments appended to the
sphinx-apidocinvocation.
docs.update-scriptType: str | Default:
"./docs/docs_update.py"Path to a Python script run after
sphinx-apidocto generate dynamic content.
excludeType: list[str] | Default:
[]Additional components and files to exclude from repomatic operations.
gitignore.extra-categoriesType: list[str] | Default:
[]Additional gitignore template categories to fetch from gitignore.io.
gitignore.extra-contentType: str | Default: (see example)
Additional content to append at the end of the generated
.gitignorefile.
gitignore.locationType: str | Default:
"./.gitignore"File path of the
.gitignoreto update, relative to the root of the repository.
gitignore.syncType: bool | Default:
trueWhether
.gitignoresync is enabled for this project.
includeType: list[str] | Default:
[]Components and files to force-include, overriding default exclusions.
labels.extra-content-rulesType: str | Default:
""Additional YAML rules appended to the content-based labeller configuration.
labels.extra-file-rulesType: str | Default:
""Additional YAML rules appended to the file-based labeller configuration.
labels.extra-filesType: list[str] | Default:
[]URLs of additional label definition files (JSON, JSON5, TOML, or YAML).
labels.syncType: bool | Default:
trueWhether label sync is enabled for this project.
mailmap.syncType: bool | Default:
trueWhether
.mailmapsync is enabled for this project.
notification.unsubscribeType: bool | Default:
falseWhether the unsubscribe-threads workflow is enabled.
nuitka.enabledType: bool | Default:
trueWhether Nuitka binary compilation is enabled for this project.
nuitka.entry-pointsType: list[str] | Default:
[]Which
[project.scripts]entry points produce Nuitka binaries.
nuitka.extra-argsType: list[str] | Default:
[]Extra Nuitka CLI arguments for binary compilation.
nuitka.unstable-targetsType: list[str] | Default:
[]Nuitka build targets allowed to fail without blocking the release.
pypi-package-historyType: list[str] | Default:
[]Former PyPI package names for projects that were renamed.
setup-guideType: bool | Default:
trueWhether the setup guide issue is enabled for this project.
skills.locationType: str | Default:
"./.claude/skills/"Directory prefix for Claude Code skill files, relative to the repository root.
test-matrix.excludeType: list[dict[str, str]] | Default:
[]Extra exclude rules applied to both full and PR test matrices.
test-matrix.includeType: list[dict[str, str]] | Default:
[]Extra include directives applied to both full and PR test matrices.
test-matrix.removeType: dict[str, list[str]] | Default: {}
Per-axis value removals applied to both full and PR test matrices.
test-matrix.replaceType: dict[str, dict[str, str]] | Default: {}
Per-axis value replacements applied to both full and PR test matrices.
test-matrix.variationsType: dict[str, list[str]] | Default: {}
Extra matrix dimension values added to the full test matrix only.
test-plan.fileType: str | Default:
"./tests/cli-test-plan.yaml"Path to the YAML test plan file for binary testing.
test-plan.inlineType: str | Default: (none)
Inline YAML test plan for binaries.
test-plan.timeoutType: int | Default: (none)
Timeout in seconds for each binary test.
uv-lock.syncType: bool | Default:
trueWhether
uv.locksync is enabled for this project.
workflow.source-pathsType: list[str] | Default: (none)
Source code directory names for workflow trigger
paths:filters.
workflow.syncType: bool | Default:
trueWhether workflow sync is enabled for this project.
[tool.X] bridge and tool runner¶
repomatic run also bridges the gap for tools that can’t read pyproject.toml natively: write your config in [tool.<name>] and repomatic translates it to the tool’s native format at invocation time. See the tool runner page for the full list of supported tools, config resolution precedence, binary caching, and a tutorial.