Configuration
All configuration options for rivet
rivet looks for configuration in the following locations (in order of priority):
.rivet/config.json— in the project root or any parent directoryrivet.json— in the project root or any parent directory.rivet.json— hidden file variant
If no config file is found, rivet uses sensible defaults.
Default config
{
"$schema": "https://oxrelease.dev/schema.json",
"releaseDir": ".rivet",
"changelog": true,
"generatePackagesChangelog": true,
"generateGlobalChangelog": false,
"updateInternalDependencies": "patch",
"baseBranch": "main",
"access": "public",
"syncCargoToml": false,
"fixed": [],
"linked": [],
"preMode": []
}Options
releaseDir
Default: ".rivet"
The directory where release files, pre-release state, and the release plan are stored.
{ "releaseDir": ".rivet" }You can change this if you prefer a different name:
{ "releaseDir": ".changes" }changelog (legacy)
Default: true
Setting this to false disables all changelog generation, regardless of the more specific flags below. This exists for backward compatibility.
{ "changelog": false }generatePackagesChangelog
Default: true (monorepo only)
Generate individual CHANGELOG.md files per workspace package. This option only applies
to monorepos — in single-package projects the setting is ignored and a root-level
CHANGELOG.md is always produced.
{ "generatePackagesChangelog": false }generateGlobalChangelog
Default: false (monorepo only)
Generate a single CHANGELOG.md at the project root aggregating all package changes.
This option only applies to monorepos — in single-package projects the setting is
ignored and a root-level CHANGELOG.md is always produced.
{ "generateGlobalChangelog": true }updateInternalDependencies
Default: "patch"
Controls when internal dependency ranges are updated for workspace packages that depend on each other.
| Value | Behavior |
|---|---|
"always" | Always update ranges |
"patch" | Update when dependency got at least a patch |
"minor" | Update only for minor or major |
"major" | Update only for major |
"never" | Never update |
{ "updateInternalDependencies": "minor" }baseBranch
Default: "main"
The base branch of your repository. Used for changelog integration.
{ "baseBranch": "main" }access
Default: "public"
The default npm access level for publishing. Can be overridden per-package via publishConfig.access in package.json.
| Value | Description |
|---|---|
"public" | Publicly accessible on npm |
"restricted" | Restricted (requires authentication) |
{ "access": "restricted" }syncCargoToml
Default: false
When enabled, rivet also bumps the version in Cargo.toml files that are found alongside package.json. This is useful for Rust projects that also publish npm packages (e.g., napi-rs projects).
{ "syncCargoToml": true }fixed
Default: []
Groups of packages that always share the same version. When any package in a fixed group is bumped, all packages in that group are bumped to the same new version (the highest current version + the highest bump type in the group).
Supports glob patterns and ! negation:
{
"fixed": [
["@scope/core", "@scope/utils"],
["@scope/design-system", "@scope/theme"],
["@scope/*", "!@scope/standalone"]
]
}If @scope/core is bumped to 1.3.0 and @scope/utils is at 1.2.0, both end up at 1.3.0.
linked
Default: []
Groups of packages that share the same bump type. When a package in a linked group receives a bump, all packages in that group get the highest bump type found in the group. Each keeps its own version number.
This is a unique rivet feature — it sits between "completely independent" and "always the same version" (fixed groups).
Supports glob patterns and ! negation:
{
"linked": [
["@scope/hooks", "@scope/utils"],
["@scope/ui/*", "!@scope/ui-legacy"]
]
}If @scope/hooks gets a minor bump and @scope/utils gets a patch, both are treated as minor. Each increments from its own current version.
preMode
Default: []
Pre-release mode configuration. Packages listed here automatically produce pre-release versions during bump. See the Pre-releases page for full details.
{
"preMode": [
{
"tag": "beta",
"packages": ["@scope/experimental-*", "@scope/new-feature"]
},
{
"tag": "alpha",
"packages": ["@scope/early-access-*"]
}
]
}Different packages can have different pre-release tags. A package can only be in one pre-mode at a time.
Creating config
# Interactive wizard
rivet init
# Specify custom release directory
rivet init --release-dir .changes
# Skip wizard, use defaults
rivet init --non-interactive
# Overwrite existing config
rivet init --force