Skip to content

relizy / loadRelizyConfig

Function: loadRelizyConfig() ​

loadRelizyConfig(options?): Promise<ResolvedRelizyConfig>

Defined in: src/core/config.ts:248

Parameters ​

options? ​

baseConfig? ​

ResolvedRelizyConfig

configFile? ​

string

overrides? ​

{ ai?: { extraGuidelines?: string | { global?: string; providerRelease?: string; slack?: string; twitter?: string; }; fallback?: "raw" | "fail"; language?: string; provider?: AIProviderName; providerRelease?: { enabled?: boolean; }; providers?: { ai-sdk?: { model?: ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...; reasoning?: ... | ... | ... | ... | ... | ... | ... | ... | ...; }; claude-code?: { apiKey?: ... | ...; model?: ... | ...; oauthToken?: ... | ...; }; }; social?: { slack?: { enabled?: ... | ... | ...; }; twitter?: { enabled?: ... | ... | ...; }; }; systemPromptOverrides?: { providerRelease?: string; slack?: string; twitter?: string; }; }; bump?: { capZeroMajor?: boolean; clean?: boolean; dependencyTypes?: ("dependencies" | "peerDependencies" | "devDependencies" | undefined)[]; preid?: string; type?: ReleaseType; yes?: boolean; }; changelog?: { formatCmd?: string; includeCommitBody?: boolean; rootChangelog?: boolean; }; commitlint?: { customRules?: {[key: string]: { } | undefined; }; defaultIgnores?: boolean; helpUrl?: string; ignores?: ({ [match]?: ... | ...; [matchAll]?: ... | ...; [replace]?: ... | ...; [search]?: ... | ...; [split]?: ... | ...; compile?: ... | ...; dotAll?: ... | ... | ...; exec?: ... | ...; flags?: ... | ...; global?: ... | ... | ...; hasIndices?: ... | ... | ...; ignoreCase?: ... | ... | ...; lastIndex?: ... | ...; multiline?: ... | ... | ...; source?: ... | ...; sticky?: ... | ... | ...; test?: ... | ...; unicode?: ... | ... | ...; unicodeSets?: ... | ... | ...; } | { } | undefined)[]; packages?: (string | undefined)[]; rules?: {[key: string]: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, unknown] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., unknown] | undefined; body-breaking-change?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-changelog-lint?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-leading-blank?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-markdown?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-no-headings?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; header-format?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; header-max-length?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]; no-breaking?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; scope-enum?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; scope-matches-files?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; scope-required?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ... | ... | ...]; subject-case?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; subject-full-stop?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; subject-meaningful?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]; type-enum?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]; }; scopes?: (string | undefined)[]; title?: boolean; }; cwd?: string; detectRewrittenTags?: boolean; excludeAuthors?: (string | undefined)[]; from?: string; hideAuthorEmail?: boolean; hooks?: { before:bump?: string | { }; before:changelog?: string | { }; before:commit-and-tag?: string | { }; before:provider-release?: string | { }; before:publish?: string | { }; before:push?: string | { }; before:release?: string | { }; before:slack?: string | { }; before:social?: string | { }; before:twitter?: string | { }; error:bump?: string | { }; error:changelog?: string | { }; error:commit-and-tag?: string | { }; error:provider-release?: string | { }; error:publish?: string | { }; error:push?: string | { }; error:release?: string | { }; error:slack?: string | { }; error:social?: string | { }; error:twitter?: string | { }; generate:changelog?: { }; success:bump?: string | { }; success:changelog?: string | { }; success:commit-and-tag?: string | { }; success:provider-release?: string | { }; success:publish?: string | { }; success:push?: string | { }; success:release?: string | { }; success:slack?: string | { }; success:social?: string | { }; success:twitter?: string | { }; }; logLevel?: "error" | "silent" | "warning" | "normal" | "default" | "debug" | "trace" | "verbose"; monorepo?: { ignored?: (string | undefined)[]; ignorePackageNames?: (string | undefined)[]; includePrivates?: boolean; packages?: (string | undefined)[]; versionMode?: VersionMode; }; newVersion?: string; noAuthors?: boolean; onRewrittenTag?: OnRewrittenTag; prComment?: { mode?: PrCommentMode; }; projectName?: string; publish?: { access?: "public" | "restricted"; args?: (string | undefined)[]; buildCmd?: string; otp?: string; packageManager?: PackageManager; packages?: (string | undefined)[]; private?: boolean; registries?: ({ access?: ... | ... | ...; exclusive?: ... | ... | ...; name?: ... | ...; otp?: ... | ...; packageFilter?: ... | ...; registry?: ... | ...; tag?: ... | ...; token?: ... | ...; } | undefined)[]; registry?: string; safetyCheck?: boolean; safetyCheckTimeout?: number; skipExistingVersions?: boolean; tag?: string; token?: string; }; release?: { changelog?: boolean; clean?: boolean; commit?: boolean; gitTag?: boolean; noVerify?: boolean; prComment?: boolean; providerRelease?: boolean; publish?: boolean; push?: boolean; social?: boolean; }; repo?: { domain?: string; provider?: GitProvider; repo?: string; token?: string; }; safetyCheck?: boolean; scopeMap?: {[key: string]: string | undefined; }; signTags?: boolean; social?: { changelogUrl?: string; slack?: { changelogFormat?: SlackChangelogFormat; channel?: string; credentials?: { token?: ... | ...; }; enabled?: boolean; noAuthors?: boolean; noPackages?: boolean; onlyStable?: boolean; postMaxLength?: number; template?: string; webhookUrl?: string; }; twitter?: { credentials?: { accessToken?: ... | ...; accessTokenSecret?: ... | ...; apiKey?: ... | ...; apiKeySecret?: ... | ...; }; enabled?: boolean; onlyStable?: boolean; postMaxLength?: number; template?: string; }; }; templates?: { changelogTitle?: string; commitBody?: string; commitMessage?: string; emptyChangelogContent?: string; slackMessage?: string; tagBody?: string; tagMessage?: string; twitterMessage?: string; }; to?: string; tokens?: { ai?: { claude-code?: { apiKey?: ... | ...; oauthToken?: ... | ...; }; }; github?: string; gitlab?: string; registry?: string; slack?: string; twitter?: { accessToken?: string; accessTokenSecret?: string; apiKey?: string; apiKeySecret?: string; }; }; types?: {[key: string]: false | { semver?: SemverBumpType; title?: string; } | undefined; }; }

overrides.ai? ​

{ extraGuidelines?: string | { global?: string; providerRelease?: string; slack?: string; twitter?: string; }; fallback?: "raw" | "fail"; language?: string; provider?: AIProviderName; providerRelease?: { enabled?: boolean; }; providers?: { ai-sdk?: { model?: ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...; reasoning?: ... | ... | ... | ... | ... | ... | ... | ... | ...; }; claude-code?: { apiKey?: ... | ...; model?: ... | ...; oauthToken?: ... | ...; }; }; social?: { slack?: { enabled?: ... | ... | ...; }; twitter?: { enabled?: ... | ... | ...; }; }; systemPromptOverrides?: { providerRelease?: string; slack?: string; twitter?: string; }; }

AI-powered changelog and release notes configuration

overrides.ai.extraGuidelines? ​

string | { global?: string; providerRelease?: string; slack?: string; twitter?: string; }

Extra directives appended to the built-in system prompts. A string applies to every target; an object adds directives per target, appended after the global ones.

Examples

ts
'Always use emojis in the changelog'
ts
{ global: 'Keep package names in English.', slack: 'Mention the owning team.' }

overrides.ai.fallback? ​

"raw" | "fail"

Behavior when the provider call fails.

  • raw: fall back to the unmodified changelog body.
  • fail: re-throw the error.

Default

ts
'raw'

overrides.ai.language? ​

string

Output language (ISO 639-1 code or plain English name).

Default

ts
'en'

overrides.ai.provider? ​

AIProviderName

AI provider name

Default

ts
'claude-code'

overrides.ai.providerRelease? ​

{ enabled?: boolean; }

Enable AI rewriting for GitHub/GitLab release notes.

overrides.ai.providerRelease.enabled? ​

boolean

Enable AI for this target

Default

ts
false

overrides.ai.providers? ​

{ ai-sdk?: { model?: ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...; reasoning?: ... | ... | ... | ... | ... | ... | ... | ... | ...; }; claude-code?: { apiKey?: ... | ...; model?: ... | ...; oauthToken?: ... | ...; }; }

Provider-specific options, keyed by provider name.

overrides.ai.providers.ai-sdk? ​

{ model?: ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...; reasoning?: ... | ... | ... | ... | ... | ... | ... | ... | ...; }

overrides.ai.providers.ai-sdk.model? ​

... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ...

Language model: an instance from a provider package (e.g. openai('gpt-5-mini') from @ai-sdk/openai), or a model id of the Vercel AI Gateway (e.g. 'openai/gpt-5-mini').

See

https://ai-sdk.dev/providers/ai-sdk-providers

overrides.ai.providers.ai-sdk.reasoning? ​

... | ... | ... | ... | ... | ... | ... | ... | ...

Reasoning effort, for the models that support it. Not sent when unset: the default of the provider applies.

overrides.ai.providers.claude-code? ​

{ apiKey?: ... | ...; model?: ... | ...; oauthToken?: ... | ...; }

overrides.ai.providers.claude-code.apiKey? ​

... | ...

Anthropic API key. Fallback env: RELIZY_ANTHROPIC_API_KEY, ANTHROPIC_API_KEY.

overrides.ai.providers.claude-code.model? ​

... | ...

Model id or alias (e.g. haiku, sonnet, opus, or a versioned id).

Default

ts
'haiku'

overrides.ai.providers.claude-code.oauthToken? ​

... | ...

Claude Code OAuth token. Fallback env: RELIZY_CLAUDE_CODE_OAUTH_TOKEN, CLAUDE_CODE_OAUTH_TOKEN.

overrides.ai.social? ​

{ slack?: { enabled?: ... | ... | ...; }; twitter?: { enabled?: ... | ... | ...; }; }

Enable AI rewriting for social media posts.

overrides.ai.social.slack? ​

{ enabled?: ... | ... | ...; }

Slack-specific AI activation

overrides.ai.social.slack.enabled? ​

... | ... | ...

Enable AI for this target

Default

ts
false

overrides.ai.social.twitter? ​

{ enabled?: ... | ... | ...; }

Twitter-specific AI activation

overrides.ai.social.twitter.enabled? ​

... | ... | ...

Enable AI for this target

Default

ts
false

overrides.ai.systemPromptOverrides? ​

{ providerRelease?: string; slack?: string; twitter?: string; }

Full replacement of the built-in system prompts. When set, the extraGuidelines and base prompts are ignored for that target.

overrides.ai.systemPromptOverrides.providerRelease? ​

string

overrides.ai.systemPromptOverrides.slack? ​

string

overrides.ai.systemPromptOverrides.twitter? ​

string

overrides.bump? ​

{ capZeroMajor?: boolean; clean?: boolean; dependencyTypes?: ("dependencies" | "peerDependencies" | "devDependencies" | undefined)[]; preid?: string; type?: ReleaseType; yes?: boolean; }

Bump config

overrides.bump.capZeroMajor? ​

boolean

Cap commit-detected major bumps to minor while the current version is in the 0.x.y range (semver §4, initial development), so a breaking change does not graduate a 0.x package to 1.0.0 automatically.

Set to false to opt out: a breaking commit then bumps 0.x.y straight to 1.0.0. This only affects commit-based detection; explicit CLI release types (--major, --premajor, …) are never capped. Once the package reaches 1.x, this option is a no-op.

Default

ts
true

overrides.bump.clean? ​

boolean

Check if there are any changes to commit before bumping.

Default

ts
true

overrides.bump.dependencyTypes? ​

("dependencies" | "peerDependencies" | "devDependencies" | undefined)[]

Include dependencies when bumping.

Default

ts
['dependencies']

overrides.bump.preid? ​

string

Prerelease identifier (e.g. 'beta', 'alpha')

overrides.bump.type? ​

ReleaseType

Release type (e.g. 'major', 'minor', 'patch', 'prerelease', 'prepatch', 'preminor', 'premajor')

Default

ts
'release'

overrides.bump.yes? ​

boolean

Skip confirmation prompt about bumping packages

Default

ts
true

overrides.changelog? ​

{ formatCmd?: string; includeCommitBody?: boolean; rootChangelog?: boolean; }

Changelog config

overrides.changelog.formatCmd? ​

string

Command to format the changelog (e.g. prettier --write CHANGELOG.md).

overrides.changelog.includeCommitBody? ​

boolean

Include commit body in the changelog.

Default

ts
true

overrides.changelog.rootChangelog? ​

boolean

Generate changelog at root level with all changes

Default

ts
true

overrides.commitlint? ​

{ customRules?: {[key: string]: { } | undefined; }; defaultIgnores?: boolean; helpUrl?: string; ignores?: ({ [match]?: ... | ...; [matchAll]?: ... | ...; [replace]?: ... | ...; [search]?: ... | ...; [split]?: ... | ...; compile?: ... | ...; dotAll?: ... | ... | ...; exec?: ... | ...; flags?: ... | ...; global?: ... | ... | ...; hasIndices?: ... | ... | ...; ignoreCase?: ... | ... | ...; lastIndex?: ... | ...; multiline?: ... | ... | ...; source?: ... | ...; sticky?: ... | ... | ...; test?: ... | ...; unicode?: ... | ... | ...; unicodeSets?: ... | ... | ...; } | { } | undefined)[]; packages?: (string | undefined)[]; rules?: {[key: string]: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, unknown] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., unknown] | undefined; body-breaking-change?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-changelog-lint?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-leading-blank?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-markdown?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-no-headings?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; header-format?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; header-max-length?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]; no-breaking?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; scope-enum?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; scope-matches-files?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; scope-required?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ... | ... | ...]; subject-case?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; subject-full-stop?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; subject-meaningful?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]; type-enum?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]; }; scopes?: (string | undefined)[]; title?: boolean; }

Commit message linter (relizy commitlint) config

See

https://relizy.dev/commitlint/

overrides.commitlint.customRules? ​

{[key: string]: { } | undefined; }

Rules written as functions, keyed by name. Their level is set in rules and defaults to error.

overrides.commitlint.defaultIgnores? ​

boolean

Ignore merge commits, fixup!, squash! and amend! commits, and the release commits of relizy.

Default

ts
true

overrides.commitlint.helpUrl? ​

string

URL printed with the errors, e.g. the commit guidelines of the team.

overrides.commitlint.ignores? ​

({ [match]?: ... | ...; [matchAll]?: ... | ...; [replace]?: ... | ...; [search]?: ... | ...; [split]?: ... | ...; compile?: ... | ...; dotAll?: ... | ... | ...; exec?: ... | ...; flags?: ... | ...; global?: ... | ... | ...; hasIndices?: ... | ... | ...; ignoreCase?: ... | ... | ...; lastIndex?: ... | ...; multiline?: ... | ... | ...; source?: ... | ...; sticky?: ... | ... | ...; test?: ... | ...; unicode?: ... | ... | ...; unicodeSets?: ... | ... | ...; } | { } | undefined)[]

Messages to ignore, in addition to the default ones: a regular expression tested against the header, or a function receiving the raw message.

overrides.commitlint.packages? ​

(string | undefined)[]

Glob patterns of directories to treat as workspace packages for the scopes, in addition to monorepo.packages, e.g. apps that are never released.

Example

ts
['apps/*']

overrides.commitlint.rules? ​

{[key: string]: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, unknown] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., unknown] | undefined; body-breaking-change?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-changelog-lint?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-leading-blank?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-markdown?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; body-no-headings?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; header-format?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; header-max-length?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]; no-breaking?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; scope-enum?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; scope-matches-files?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; scope-required?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ... | ... | ...]; subject-case?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; subject-full-stop?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]; subject-meaningful?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]; type-enum?: CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]; }

Level and value of the built-in and custom rules.

Example

ts
{ 'header-max-length': ['error', 200], 'scope-required': ['error', 'when-bumping'] }

overrides.commitlint.rules.body-breaking-change? ​

CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]

A breaking change is only declared with ! in the header or a BREAKING CHANGE: footer, as relizy bumps the major version wherever breaking change: appears.

Default

ts
'error'

overrides.commitlint.rules.body-changelog-lint? ​

CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]

The commit, rendered as in the changelogs, passes the lint of the changelogs.

Default

ts
'error'

overrides.commitlint.rules.body-leading-blank? ​

CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]

A blank line separates the header from the body.

Default

ts
'error'

overrides.commitlint.rules.body-markdown? ​

CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]

The markdown of the body is valid: code blocks closed, links with a URL.

Default

ts
'error'

overrides.commitlint.rules.body-no-headings? ​

CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]

The body has no markdown headings, which would break the changelog.

Default

ts
'error'

overrides.commitlint.rules.header-format? ​

CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]

The header follows type(scope)!: subject.

Default

ts
'error'

overrides.commitlint.rules.header-max-length? ​

CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]

Maximum length of the header.

Default

ts
['error', 500]

overrides.commitlint.rules.no-breaking? ​

CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]

Breaking changes are not allowed.

Default

ts
'off'

overrides.commitlint.rules.scope-enum? ​

CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]

The scope is a workspace package, a scopeMap key or one of commitlint.scopes.

Default

ts
'error'

overrides.commitlint.rules.scope-matches-files? ​

CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]

The scope designates a package touched by the commit.

Default

ts
'warn'

overrides.commitlint.rules.scope-required? ​

CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ... | ... | ...]

The scope is required ('always'), forbidden ('never'), or required on the commits bumping a version ('when-bumping').

Default

ts
['off', 'always']

overrides.commitlint.rules.subject-case? ​

CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]

The subject starts with a lowercase letter.

Default

ts
'error'

overrides.commitlint.rules.subject-full-stop? ​

CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., undefined]

The subject does not end with a period.

Default

ts
'error'

overrides.commitlint.rules.subject-meaningful? ​

CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]

The subject describes the change, with a minimum of words or characters.

Default

ts
['error', { minWords: 2, minLength: 15 }]

overrides.commitlint.rules.type-enum? ​

CommitlintRuleLevel | readonly [CommitlintRuleLevel | undefined] | readonly [CommitlintRuleLevel | undefined, ... | ...] | readonly [CommitlintRuleLevel | undefined, ... | ... | ..., ... | ...]

The type is one of the relizy types, or one of the extra types given as value.

Default

ts
'error'

overrides.commitlint.scopes? ​

(string | undefined)[]

Scopes allowed in addition to the workspace packages (short name, full name or folder) and the scopeMap keys. In standalone mode, scopes are free unless this list is set.

Example

ts
['ci', 'deps', 'release']

overrides.commitlint.title? ​

boolean

In the CI of a pull/merge request, also lint its title, which becomes the commit message of a squash merge. Overridden by --title and --no-title.

Default

ts
false

overrides.cwd? ​

string

Current working directory

Default

ts
process.cwd()

overrides.detectRewrittenTags? ​

boolean

Detect when the resolved from tag points to a commit that is no longer reachable from to (typically because the history was rebased after the tag was created). When enabled, relizy explains the situation and either prompts or auto-corrects, avoiding bloated changelogs and over-bumping.

Default

ts
true

overrides.excludeAuthors? ​

(string | undefined)[]

overrides.from? ​

string

Start tag

overrides.hideAuthorEmail? ​

boolean

overrides.hooks? ​

{ before:bump?: string | { }; before:changelog?: string | { }; before:commit-and-tag?: string | { }; before:provider-release?: string | { }; before:publish?: string | { }; before:push?: string | { }; before:release?: string | { }; before:slack?: string | { }; before:social?: string | { }; before:twitter?: string | { }; error:bump?: string | { }; error:changelog?: string | { }; error:commit-and-tag?: string | { }; error:provider-release?: string | { }; error:publish?: string | { }; error:push?: string | { }; error:release?: string | { }; error:slack?: string | { }; error:social?: string | { }; error:twitter?: string | { }; generate:changelog?: { }; success:bump?: string | { }; success:changelog?: string | { }; success:commit-and-tag?: string | { }; success:provider-release?: string | { }; success:publish?: string | { }; success:push?: string | { }; success:release?: string | { }; success:slack?: string | { }; success:social?: string | { }; success:twitter?: string | { }; }

Hooks config

overrides.hooks.before:bump? ​

string | { }

overrides.hooks.before:changelog? ​

string | { }

overrides.hooks.before:commit-and-tag? ​

string | { }

overrides.hooks.before:provider-release? ​

string | { }

overrides.hooks.before:publish? ​

string | { }

overrides.hooks.before:push? ​

string | { }

overrides.hooks.before:release? ​

string | { }

overrides.hooks.before:slack? ​

string | { }

overrides.hooks.before:social? ​

string | { }

overrides.hooks.before:twitter? ​

string | { }

overrides.hooks.error:bump? ​

string | { }

overrides.hooks.error:changelog? ​

string | { }

overrides.hooks.error:commit-and-tag? ​

string | { }

overrides.hooks.error:provider-release? ​

string | { }

overrides.hooks.error:publish? ​

string | { }

overrides.hooks.error:push? ​

string | { }

overrides.hooks.error:release? ​

string | { }

overrides.hooks.error:slack? ​

string | { }

overrides.hooks.error:social? ​

string | { }

overrides.hooks.error:twitter? ​

string | { }

overrides.hooks.generate:changelog? ​

{ }

overrides.hooks.success:bump? ​

string | { }

overrides.hooks.success:changelog? ​

string | { }

overrides.hooks.success:commit-and-tag? ​

string | { }

overrides.hooks.success:provider-release? ​

string | { }

overrides.hooks.success:publish? ​

string | { }

overrides.hooks.success:push? ​

string | { }

overrides.hooks.success:release? ​

string | { }

overrides.hooks.success:slack? ​

string | { }

overrides.hooks.success:social? ​

string | { }

overrides.hooks.success:twitter? ​

string | { }

overrides.logLevel? ​

"error" | "silent" | "warning" | "normal" | "default" | "debug" | "trace" | "verbose"

Set log level

Default

ts
'default'

overrides.monorepo? ​

{ ignored?: (string | undefined)[]; ignorePackageNames?: (string | undefined)[]; includePrivates?: boolean; packages?: (string | undefined)[]; versionMode?: VersionMode; }

Monorepo config

overrides.monorepo.ignored? ​

(string | undefined)[]

Glob patterns (relative to cwd, POSIX separators) of package directories to ignore - matched the same way as packages. Ignored packages are excluded from bump, changelog, publish, provider-release and pr-comment.

In unified/selective mode, commits whose changed files all live inside ignored packages are also excluded from the root version bump and the root changelog (a breaking change in an ignored package no longer bumps the whole repository).

Prefer this over ignorePackageNames for path-based configuration consistent with packages. Both options are honored and merged together.

Default

ts
[]

overrides.monorepo.ignorePackageNames? ​

(string | undefined)[]

Package names to ignore.

Deprecated

Use ignored (path globs) instead, for consistency with packages. Both options are still honored and merged together.

Default

ts
[]

overrides.monorepo.includePrivates? ​

boolean

Include private packages (with "private": true in package.json) in bump and changelog operations. Private packages remain excluded from publish, provider-release, and pr-comment regardless of this flag.

Default

ts
false

overrides.monorepo.packages? ​

(string | undefined)[]

Glob pattern matching for packages to bump.

overrides.monorepo.versionMode? ​

VersionMode

Version mode for the monorepo.

overrides.newVersion? ​

string

overrides.noAuthors? ​

boolean

overrides.onRewrittenTag? ​

OnRewrittenTag

Strategy applied when a rewritten/orphaned from tag is detected. Defaults to prompt interactively, or ephemeral when non-interactive (--yes / no TTY / CI).

  • prompt: interactive selection.
  • ephemeral: use the reachable equivalent commit for this run only.
  • rebind: move the local tag onto the equivalent commit (no push).
  • error: throw and stop.

overrides.prComment? ​

{ mode?: PrCommentMode; }

PR comment configuration

overrides.prComment.mode? ​

PrCommentMode

PR comment mode

Default

ts
'append'

overrides.projectName? ​

string

Project name Useful for tweet and slack posts

overrides.publish? ​

{ access?: "public" | "restricted"; args?: (string | undefined)[]; buildCmd?: string; otp?: string; packageManager?: PackageManager; packages?: (string | undefined)[]; private?: boolean; registries?: ({ access?: ... | ... | ...; exclusive?: ... | ... | ...; name?: ... | ...; otp?: ... | ...; packageFilter?: ... | ...; registry?: ... | ...; tag?: ... | ...; token?: ... | ...; } | undefined)[]; registry?: string; safetyCheck?: boolean; safetyCheckTimeout?: number; skipExistingVersions?: boolean; tag?: string; token?: string; }

Publish config

overrides.publish.access? ​

"public" | "restricted"

NPM access level (e.g. public or restricted)

overrides.publish.args? ​

(string | undefined)[]

overrides.publish.buildCmd? ​

string

Command to build your packages before publishing (e.g. pnpm build)

overrides.publish.otp? ​

string

NPM OTP (e.g. 123456)

overrides.publish.packageManager? ​

PackageManager

Package manager (e.g. pnpm, npm, yarn or bun)

overrides.publish.packages? ​

(string | undefined)[]

Glob pattern matching for packages to publish

overrides.publish.private? ​

boolean

overrides.publish.registries? ​

({ access?: ... | ... | ...; exclusive?: ... | ... | ...; name?: ... | ...; otp?: ... | ...; packageFilter?: ... | ...; registry?: ... | ...; tag?: ... | ...; token?: ... | ...; } | undefined)[]

Additional registries to publish to, on top of registry (if set). Entries without packageFilter apply to every package (mirroring); entries with packageFilter only apply to packages matching one of the glob patterns. Fully additive: leaving this unset preserves the single-registry behavior.

overrides.publish.registry? ​

string

NPM registry URL (e.g. https://registry.npmjs.org/)

overrides.publish.safetyCheck? ​

boolean

Skip safety check

Default

ts
true

overrides.publish.safetyCheckTimeout? ​

number

Maximum time in milliseconds for the registry authentication safety check before it is aborted. Prevents the release from hanging indefinitely when the registry (or a proxy) never answers.

Default

ts
15000

overrides.publish.skipExistingVersions? ​

boolean

Skip a package (per registry) instead of failing when its version already exists on the registry. Makes re-running a release idempotent: a retried job whose version is already published (e.g. a canary rerun on the same commit, or a partially completed publish) succeeds and only publishes what is missing, rather than crashing on the registry's "cannot overwrite" error. When disabled (the default), that situation still fails, but with a clear error message instead of the raw registry error.

Default

ts
false

overrides.publish.tag? ​

string

NPM tag (e.g. latest)

overrides.publish.token? ​

string

NPM token (e.g. 123456) - supported for npm, pnpm and bun (injected via .npmrc). Yarn is not supported (it uses .yarnrc.yml).

overrides.release? ​

{ changelog?: boolean; clean?: boolean; commit?: boolean; gitTag?: boolean; noVerify?: boolean; prComment?: boolean; providerRelease?: boolean; publish?: boolean; push?: boolean; social?: boolean; }

Release config

overrides.release.changelog? ​

boolean

Generate changelog files (CHANGELOG.md)

Default

ts
true

overrides.release.clean? ​

boolean

Determine if the working directory is clean and if it is not clean, exit

Default

ts
false

overrides.release.commit? ​

boolean

Commit changes and create tag

Default

ts
true

overrides.release.gitTag? ​

boolean

Create tag

Default

ts
true

overrides.release.noVerify? ​

boolean

Skip git verification while committing by using --no-verify flag

Default

ts
true

overrides.release.prComment? ​

boolean

Post release announcements to social media platforms

Default

ts
false

overrides.release.providerRelease? ​

boolean

Publish release to your repository (github or gitlab)

Default

ts
true

overrides.release.publish? ​

boolean

Publish release to your registry

Default

ts
true

overrides.release.push? ​

boolean

Push changes to your repository (commit and tag(s))

Default

ts
true

overrides.release.social? ​

boolean

Post release announcements to social media platforms

Default

ts
false

overrides.repo? ​

{ domain?: string; provider?: GitProvider; repo?: string; token?: string; }

Repo config

overrides.repo.domain? ​

string

Git domain (e.g. github.com)

overrides.repo.provider? ​

GitProvider

Git provider (e.g. github or gitlab)

Default

ts
'github'

overrides.repo.repo? ​

string

Git repository (e.g. user/repo)

overrides.repo.token? ​

string

Git token

overrides.safetyCheck? ​

boolean

Global safety check. The safety check will verify if tokens or others required for release are set (depends on the release options)

Default

ts
true

overrides.scopeMap? ​

{[key: string]: string | undefined; }

overrides.signTags? ​

boolean

overrides.social? ​

{ changelogUrl?: string; slack?: { changelogFormat?: SlackChangelogFormat; channel?: string; credentials?: { token?: ... | ...; }; enabled?: boolean; noAuthors?: boolean; noPackages?: boolean; onlyStable?: boolean; postMaxLength?: number; template?: string; webhookUrl?: string; }; twitter?: { credentials?: { accessToken?: ... | ...; accessTokenSecret?: ... | ...; apiKey?: ... | ...; apiKeySecret?: ... | ...; }; enabled?: boolean; onlyStable?: boolean; postMaxLength?: number; template?: string; }; }

Social media configuration

overrides.social.changelogUrl? ​

string

URL to full changelog (e.g., https://example.com/changelog) This URL will be included in social media posts to allow users to view the complete changelog

overrides.social.slack? ​

{ changelogFormat?: SlackChangelogFormat; channel?: string; credentials?: { token?: ... | ...; }; enabled?: boolean; noAuthors?: boolean; noPackages?: boolean; onlyStable?: boolean; postMaxLength?: number; template?: string; webhookUrl?: string; }

Slack configuration

overrides.social.slack.changelogFormat? ​

SlackChangelogFormat

Changelog rendering of the Slack message.

  • summary: commit titles only, in a single section capped at postMaxLength.
  • full: commit bodies and PR/issue links included, rendered as rich text blocks (one per changelog section). Commit bodies follow changelog.includeCommitBody. Can be overridden with the --slack-format CLI flag.

Default

ts
'summary'

overrides.social.slack.channel? ​

string

Slack channel ID or name (e.g., "#releases" or "C1234567890"). Required when using token-based authentication. Ignored (with warning) when webhookUrl is set — the channel is baked into the webhook URL.

overrides.social.slack.credentials? ​

{ token?: ... | ...; }

Slack credentials (optional - falls back to environment variables)

overrides.social.slack.credentials.token? ​

... | ...

Slack Bot Token or User OAuth Token (starts with xoxb-). Required scopes: chat:write (and chat:write.public for public channels without bot invite). Env fallback: SLACK_TOKEN, RELIZY_SLACK_TOKEN. Ignored when social.slack.webhookUrl is set (webhook takes priority).

overrides.social.slack.enabled? ​

boolean

Enable Slack posting

Default

ts
false

overrides.social.slack.noAuthors? ​

boolean

Hide the contributors block in Slack messages. If config.noAuthors is true globally, contributors are always hidden regardless of this setting.

Default

ts
false

overrides.social.slack.noPackages? ​

boolean

Hide the packages block (list of bumped packages with their before → after versions).

Default

ts
false

overrides.social.slack.onlyStable? ​

boolean

Skip Slack posting for prerelease versions (alpha, beta, rc, etc.) Only stable versions will be posted to Slack

Default

ts
true

overrides.social.slack.postMaxLength? ​

number

Maximum length (in characters) of the changelog rendered inside the Slack message. When exceeded, summary drops the last commits, full cuts the changelog where the limit is reached (even inside a commit body) with an ellipsis; the commits left out entirely are announced with an "… and N more changes" line. Defaults to 2500 in summary format (Slack's section limit is 3000) and to no limit in full format, where the message is only bounded by Slack's 50 blocks.

overrides.social.slack.template? ​

string

Custom message template Available variables: , , , , ,

overrides.social.slack.webhookUrl? ​

string

Slack Incoming Webhook URL. When set, takes priority over token-based auth. Env fallback: SLACK_WEBHOOK_URL, RELIZY_SLACK_WEBHOOK_URL. See: https://api.slack.com/messaging/webhooks

overrides.social.twitter? ​

{ credentials?: { accessToken?: ... | ...; accessTokenSecret?: ... | ...; apiKey?: ... | ...; apiKeySecret?: ... | ...; }; enabled?: boolean; onlyStable?: boolean; postMaxLength?: number; template?: string; }

Twitter configuration

overrides.social.twitter.credentials? ​

{ accessToken?: ... | ...; accessTokenSecret?: ... | ...; apiKey?: ... | ...; apiKeySecret?: ... | ...; }

Twitter credentials (optional - falls back to environment variables)

overrides.social.twitter.credentials.accessToken? ​

... | ...

Twitter Access Token

overrides.social.twitter.credentials.accessTokenSecret? ​

... | ...

Twitter Access Token Secret

overrides.social.twitter.credentials.apiKey? ​

... | ...

Twitter API Key (Consumer Key)

overrides.social.twitter.credentials.apiKeySecret? ​

... | ...

Twitter API Secret (Consumer Secret)

overrides.social.twitter.enabled? ​

boolean

Enable Twitter posting

Default

ts
false

overrides.social.twitter.onlyStable? ​

boolean

Skip Twitter posting for prerelease versions (alpha, beta, rc, etc.) Only stable versions will be posted to Twitter

Default

ts
true

overrides.social.twitter.postMaxLength? ​

number

Maximum length of the tweet

Default

ts
280

overrides.social.twitter.template? ​

string

Custom message template Available variables: , , , ,

Default

ts
'📣 {{projectName}} {{newVersion}} is out!\n\n{{changelog}}\n\n{{releaseUrl}}\n{{changelogUrl}}'

overrides.templates? ​

{ changelogTitle?: string; commitBody?: string; commitMessage?: string; emptyChangelogContent?: string; slackMessage?: string; tagBody?: string; tagMessage?: string; twitterMessage?: string; }

Templates config

overrides.templates.changelogTitle? ​

string

Changelog section title template Available variables: , ,

Default

ts
'{{oldVersion}}...{{newVersion}}'

overrides.templates.commitBody? ​

string

Commit message body template. When defined, it is passed as the commit body.

Default in unified/selective modes: undefined (no body). Default in independent mode (when commitMessage and commitBody are not customized): ''.

Same variables as commitMessage.

overrides.templates.commitMessage? ​

string

Commit message template (title).

Default in unified/selective modes: 'chore(release): bump version to '. Default in independent mode (when not customized): 'chore(release): bump packages'.

Available variables:

  • — in independent mode, comma-separated list of bumped name@version (legacy behavior); otherwise the new version.
  • — number of bumped packages.
  • — comma-separated list of bumped package names.
  • — comma-separated list of bumped name@version.
  • — version from the root package.json.

overrides.templates.emptyChangelogContent? ​

string

Empty changelog content

Default

ts
'No relevant changes for this release'

overrides.templates.slackMessage? ​

string

Slack message template (optional - if not provided, uses rich blocks format) Available variables: , , , ,

Default

ts
undefined

overrides.templates.tagBody? ​

string

Not used with "independent" version mode

Default

ts
'v{{newVersion}}'
Available variables: {{newVersion}}

overrides.templates.tagMessage? ​

string

Tag message template

Default

ts
'Bump version to {{newVersion}}'
Available variables: {{newVersion}}

overrides.templates.twitterMessage? ​

string

Twitter message template Available variables: , , , ,

Default

ts
'📣 {{projectName}} {{newVersion}} is out!\n\n{{changelog}}\n\n{{releaseUrl}}\n{{changelogUrl}}'

overrides.to? ​

string

End tag

overrides.tokens? ​

{ ai?: { claude-code?: { apiKey?: ... | ...; oauthToken?: ... | ...; }; }; github?: string; gitlab?: string; registry?: string; slack?: string; twitter?: { accessToken?: string; accessTokenSecret?: string; apiKey?: string; apiKeySecret?: string; }; }

API tokens configuration

overrides.tokens.ai? ​

{ claude-code?: { apiKey?: ... | ...; oauthToken?: ... | ...; }; }

AI provider credentials

overrides.tokens.ai.claude-code? ​

{ apiKey?: ... | ...; oauthToken?: ... | ...; }

overrides.tokens.ai.claude-code.apiKey? ​

... | ...

overrides.tokens.ai.claude-code.oauthToken? ​

... | ...

overrides.tokens.github? ​

string

GitHub token for creating releases Environment variables: GITHUB_TOKEN, GH_TOKEN, RELIZY_GITHUB_TOKEN

overrides.tokens.gitlab? ​

string

GitLab token for creating releases Environment variables: GITLAB_TOKEN, GITLAB_API_TOKEN, CI_JOB_TOKEN, RELIZY_GITLAB_TOKEN

overrides.tokens.registry? ​

string

registry token for publishing Environment variables: NPM_TOKEN, RELIZY_NPM_TOKEN, NODE_AUTH_TOKEN

overrides.tokens.slack? ​

string

Slack bot token for posting messages Environment variables: SLACK_TOKEN, RELIZY_SLACK_TOKEN

overrides.tokens.twitter? ​

{ accessToken?: string; accessTokenSecret?: string; apiKey?: string; apiKeySecret?: string; }

Twitter API credentials for posting tweets Environment variables: TWITTER_API_KEY, TWITTER_API_KEY_SECRET, TWITTER_ACCESS_TOKEN, TWITTER_ACCESS_TOKEN_SECRET Or with RELIZY_ prefix: RELIZY_TWITTER_API_KEY, etc.

overrides.tokens.twitter.accessToken? ​

string

overrides.tokens.twitter.accessTokenSecret? ​

string

overrides.tokens.twitter.apiKey? ​

string

overrides.tokens.twitter.apiKeySecret? ​

string

overrides.types? ​

{[key: string]: false | { semver?: SemverBumpType; title?: string; } | undefined; }

Returns ​

Promise<ResolvedRelizyConfig>

Released under the MIT License.