Skip to content

Configuration

Cursus is configured via .cursus/config.toml in your repository root. Run cursus init to generate a starting configuration interactively.

Top-level settings.

KeyTypeDefaultDescription
disable_dependency_cycle_warningsboolfalseSuppress warnings about circular dependencies between two or more packages during publish. Self-loops (a package listing itself as a dependency) are never warned about.
ignorelist of strings[]Glob patterns matching package names to exclude from all Cursus operations. Matching packages are dropped before version bumps, publish, and changelog generation. Cursus warns if a pattern matches nothing.

Cargo workspace configuration.

KeyTypeDefaultDescription
enabledboolfalseEnable Cargo package manager support
pathstringSubdirectory containing the Cargo workspace, relative to the git root
[cargo]
enabled = true
path = "rust/"

npm/pnpm workspace configuration.

KeyTypeDefaultDescription
enabledboolfalseEnable npm package manager support
pathstringSubdirectory containing the npm workspace, relative to the git root
lock_commandstringOverride the lock file update command. Auto-detected from the lock file present; only needed for unsupported package managers
accessstring"restricted"npm publish access level: "public" or "restricted"
[npm]
enabled = true
access = "public"
lock_command = "pnpm install --lockfile-only"

Git lifecycle management.

KeyTypeDefaultDescription
enabledboolfalse (derived true when [github].enabled)Enable git operations (commit, tag, push)
strategystring"push" ("branch" when github enabled)Release strategy: "push" or "branch"
release_branch_prefixstring"cursus-release/"Prefix for release branch names (branch strategy only)
tag_formatstring"auto"Tag naming: "auto", "prefixed", or "simple"
extra_fileslist[]Additional file paths to stage before committing
prepare_commit_messagestring"ci(release): version packages"Commit message used for the prepare step
publish_private_packageslist[]Private package names that receive git tags and GitHub Releases without registry publish
signed_commitsstring"auto"Whether to create the prepare commit via the GitHub Git Data API for a Verified badge. "auto": enabled when GITHUB_ACTIONS=true and a token is present. "force": enabled whenever a token is present (experimental). "off": always use the local git binary.

Tag formats:

FormatSingle packageMulti-package
autov1.2.3my-package@1.2.3
prefixedmy-package@1.2.3my-package@1.2.3
simplev1.2.3v1.2.3
[git]
strategy = "branch"
tag_format = "prefixed"
extra_files = ["docs/VERSION"]
publish_private_packages = ["my-github-action"]

GitHub integration for releases, pull requests, and asset uploads.

KeyTypeDefaultDescription
enabledboolfalseEnable GitHub integration
ownerstringauto-detectedGitHub repository owner
repostringauto-detectedGitHub repository name
build_commandstring""Shell command to build release artifacts
artifactstable of tables{}Per-package artifact maps: [github.artifacts.<package-name>] sections mapping display names to file paths
pull_request_titlestring"Release updates"Title for release pull requests (branch strategy only)

owner and repo are auto-detected from your Git remote URL if not specified.

[github]
enabled = true
build_command = "cargo make release"
pull_request_title = "chore: release updates"
[github.artifacts.cursus]
"cursus-linux-x86_64" = "target/x86_64-unknown-linux-musl/release/cursus"
"cursus-macos-aarch64" = "target/aarch64-apple-darwin/release/cursus"

Settings that control the prepare step.

KeyTypeDefaultDescription
dependency_bumpstring"auto"How to bump packages that depend on a bumped package

Dependency bump values:

ValueBehaviour
autoPropagates major upstream bumps as major; all others as patch
matchBump dependents by the same level as the dependency
patchAlways bump dependents by patch
minorAlways bump dependents by minor
majorAlways bump dependents by major
[prepare]
dependency_bump = "auto"

Link package versions so they always stay in sync.

KeyTypeDefaultDescription
enabledboolEnable linked versions. If true with no groups, all packages are linked
groupslist[]Groups of packages that share a version

Each group has:

KeyTypeDescription
packageslistGlob patterns matching package names

When any package in a linked group is bumped, all packages in the group receive the same version — the highest bump wins.

[linked-versions]
enabled = true
[[linked-versions.groups]]
packages = ["my-core-*"]
[[linked-versions.groups]]
packages = ["my-plugin-*"]
[global]
disable_dependency_cycle_warnings = false
ignore = ["internal-*"]
[cargo]
enabled = true
[npm]
enabled = true
access = "public"
lock_command = "pnpm install --lockfile-only"
[git]
strategy = "branch"
tag_format = "auto"
[github]
enabled = true
build_command = "cargo make release"
pull_request_title = "chore: release updates"
[github.artifacts.cursus]
"linux-x86_64" = "target/x86_64-unknown-linux-musl/release/cursus"
"macos-aarch64" = "target/aarch64-apple-darwin/release/cursus"
[prepare]
dependency_bump = "auto"
[linked-versions]
enabled = true
[[linked-versions.groups]]
packages = ["my-*"]

Cursus reads the following environment variables in addition to the config.toml settings:

VariableDescription
CURSUS_LOCALEOverride the locale used for user-visible messages. Accepts a BCP 47 language tag (e.g. en, fr, zh-TW). If unset, the system locale is detected automatically with en as the fallback.
CARGO_REGISTRY_TOKENToken for publishing to crates.io (Cargo adapter). Equivalent to cargo login.
NODE_AUTH_TOKENToken for publishing to the npm registry (npm adapter). Equivalent to npm login for token-based auth.
GH_TOKEN / GITHUB_TOKENToken for GitHub API operations (releases, PRs, asset uploads). Checked in this order.

config.toml must not exceed 256 KiB. This limit exists to prevent excessive memory use when loading configuration. In practice, even large monorepo configurations are well under this limit.