{"config":{"lang":["en"],"separator":"[\\s\\-,:!?=\\[\\]()<>{}\"/\\\\]+|\\.(?!\\d)|&[lg]t;","pipeline":["stopWordFilter"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"docs":[{"location":"","title":"Renovate documentation","text":"<p>Automated dependency updates. Multi-platform and multi-language.</p>"},{"location":"#why-use-renovate","title":"Why use Renovate?","text":"<ul> <li> <p> Automatic updates</p> <p>Get pull requests to update your dependencies and lock files.</p> </li> <li> <p> On your schedule</p> <p>Reduce noise by scheduling when Renovate creates PRs.</p> </li> <li> <p> Works out of the box</p> <p>Renovate finds relevant package files automatically, including in monorepos.</p> </li> <li> <p> How you like it</p> <p>You can customize Renovate's behavior with configuration files.</p> </li> <li> <p> Share your configuration</p> <p>Share your configuration with ESLint-like config presets.</p> </li> <li> <p> Out with the old, in with the new</p> <p>Get replacement PRs to migrate from a deprecated dependency to the community suggested replacement, works with most managers, see issue 14149 for exceptions.</p> </li> <li> <p> Open source</p> <p>Renovate is licensed under the GNU Affero General Public License (<code>AGPL-3.0-only</code>).</p> </li> </ul>"},{"location":"#supported-platforms","title":"Supported Platforms","text":"<p>Renovate works on these platforms:</p> <ul> <li>Azure DevOps</li> <li>AWS CodeCommit</li> <li>Bitbucket Cloud</li> <li>Bitbucket Server</li> <li>Forgejo</li> <li>Gerrit (experimental)</li> <li>Gitea</li> <li>GitHub (.com and Enterprise Server)</li> <li>GitLab (.com and CE/EE)</li> </ul>"},{"location":"#who-uses-renovate","title":"Who Uses Renovate?","text":"<p>A non-exhaustive list of companies and projects using Renovate can be seen below:</p> <p></p> List of companies and projects that use Renovate <ul> <li>Prisma</li> <li>Netlify</li> <li>Envoy</li> <li>Cond\u00e9 Nast</li> <li>Microsoft</li> <li>Atlassian</li> <li>Sourcegraph</li> <li>Mozilla</li> <li>Deloitte</li> <li>Telus</li> <li>Yarn</li> <li>HashiCorp</li> <li>Automattic</li> <li>Algolia</li> <li>eBay</li> <li>Cypress</li> <li>Red Hat</li> <li>Financial Times</li> <li>Uber</li> <li>Buildkite</li> </ul>"},{"location":"#ways-to-run-renovate","title":"Ways to run Renovate","text":"<p>You can run Renovate as:</p> <ul> <li>an Open Source npm package</li> <li>a pre-built Open Source image on GitHub Container Registry</li> <li>a pre-built Open Source image on Docker Hub</li> </ul> <p>Or you can use the Mend Renovate App which is hosted by Mend.</p> <p>Install the Mend Renovate app for GitHub Check out our tutorial</p>"},{"location":"about-us/","title":"About us","text":"<p>Renovate was created by Mend staff and they continue to work on Renovate.</p> <p>More than 1000 outside contributors helped improve Renovate.</p>"},{"location":"about-us/#special-thanks","title":"Special thanks","text":"<p>We want to highlight the work of these awesome people. Thank you for your time and effort!</p>"},{"location":"about-us/#maintainers","title":"Maintainers","text":"<p>Renovate is maintained by:</p> <ul> <li>@viceice</li> <li>@secustor</li> <li>@jamietanna</li> </ul>"},{"location":"about-us/#maintainers-for-features","title":"Maintainers for features","text":"<p>Next up, we have these people who help maintain parts of Renovate:</p> <ul> <li>@zharinov focused on parsing, Gradle and Maven</li> <li>@secustor worked on Terraform and Helm</li> <li>@fgreinacher worked on NuGet</li> <li>@Turbo87 has helped in multiple areas, especially Cargo</li> <li>@Churro worked on the <code>gradle</code> manager and added support for OSV vulnerabilities</li> </ul>"},{"location":"about-us/#valuable-contributions","title":"Valuable contributions","text":"<p>We want to highlight these valuable contributions, even if they are one-offs. Some features made a lot of people happy, and efficient!</p> <ul> <li>@rarkins created Renovate and maintained it through to August 2025</li> <li>@JamieMagee was an active maintainer for years, contributing many features</li> <li>@HonkingGoose worked on the documentation and helped manage the community</li> <li>@ikesyo regularly helpful</li> <li>@astellingwerf reviews PRs</li> <li>@danports worked on the Flux manager, and other managers. Feel free to ping <code>@danports</code> for any Flux-related issue or PR</li> <li>@shegox worked on the Go manager, and improved our docs</li> <li>@setchy focused on Bitbucket Cloud and replacement features</li> <li>@cgrindel created the <code>bazel-module</code> manager</li> <li>@RahulGautamSingh refactored a lot of code and worked on performance improvements like reduced cloning during updates and onboarding</li> <li>@Gabriel-Ladzaretti S3 repo cache, child process refactoring, others</li> <li>@not7cd improved the <code>pip-compile</code> manager</li> <li>@squidfunk for creating and maintaining the Material for MkDocs framework, that we use to build our docs, and for helping us with problems with the framework, or our docs</li> <li>The MkDocs project for making the static site generator, that we use to build our docs</li> </ul>"},{"location":"about-us/#renovate-development","title":"Renovate development","text":"<p>The source code for Renovate is available on GitHub at <code>renovatebot/renovate</code>. This is where we do most of the development.</p>"},{"location":"about-us/#getting-more-paid-help","title":"Getting more paid help","text":"<p>If you need more assistance than what this project offers, you have two options:</p> <ol> <li>Become a Mend.io customer, such as by buying Renovate Enterprise, or</li> <li>Hire an experienced Renovate contributor privately for consulting. Mend.io staff do not offer this service, but one of our volunteer maintainers, <code>@secustor</code>, does</li> </ol>"},{"location":"about-us/#about-these-docs","title":"About these docs","text":"<p>The Renovate docs are built from Markdown files in our <code>renovatebot/renovate</code> repository. Most of the source files can be found in the <code>docs/usage/</code> directory.</p> <p>We use MkDocs and Material for MkDocs to build our docs.</p>"},{"location":"bazel/","title":"Bazel","text":"<p>Renovate upgrades dependencies in Bazel <code>WORKSPACE</code> files and <code>MODULE.bazel</code> files.</p>"},{"location":"bazel/#how-it-works","title":"How it works","text":"<ol> <li>Bazel support is enabled automatically</li> <li>Renovate searches the repository for any <code>WORKSPACE</code> and <code>MODULE.bazel</code> files</li> <li>Renovate extracts the dependencies it finds from the files (see below for the supported dependency declarations)</li> <li>Renovate updates old dependencies to the latest version</li> </ol>"},{"location":"bazel/#bazel-module-modulebazel-support","title":"Bazel module (<code>MODULE.bazel</code>) support","text":""},{"location":"bazel/#bazel-registry-discovery","title":"Bazel registry discovery","text":"<p>Renovate searches Bazel registries to find new Bazel module versions. You customize the registries your Bazel workspace uses by including <code>--registry</code> entries in your <code>.bazelrc</code> files. Renovate checks the workspace's <code>.bazelrc</code> files for custom registry entries. If no registries are found, Renovate defaults to the Bazel Central Registry.</p> <p>Here are some important points about Renovate's Bazel registry searches. Renovate:</p> <ul> <li>uses all <code>--registry</code> values found in a workspace's <code>.bazelrc</code> file</li> <li>uses any files that are transitively imported by a <code>.bazelrc</code> file</li> <li>only uses <code>--registry</code> values that are not associated with a configuration</li> <li>queries the registries in the order that they are found in the <code>.bazelrc</code> file</li> </ul>"},{"location":"bazel/#example-multiple-bazelrc-files","title":"Example: multiple <code>.bazelrc</code> files","text":"<p>In this example, there is a <code>.bazelrc</code> file which imports another file called <code>.registry.bazelrc</code>. Both files have <code>--registry</code> values:</p> .bazelrc<pre><code>import .registry.bazelrc\nbuild --registry=https://raw.githubusercontent.com/bazelbuild/bazel-central-registry/main\n</code></pre> .registry.bazelrc<pre><code>build --registry=https://example.com/custom_registry\n</code></pre> <p>The final registry list is:</p> <ol> <li><code>&lt;https://example.com/custom_registry&gt;</code></li> <li><code>&lt;https://raw.githubusercontent.com/bazelbuild/bazel-central-registry/main&gt;</code></li> </ol>"},{"location":"bazel/#example-registry-entries-using-bazel-configuration","title":"Example: registry entries using Bazel configuration","text":"<p>In this example, a <code>.bazelrc</code> file has registry values with and without a configuration:</p> .bazelrc<pre><code>build:ci --registry=https://internal.server/custom_registry\nbuild --registry=https://raw.githubusercontent.com/bazelbuild/bazel-central-registry/main\n</code></pre> <p>In this case the <code>https://internal.server/custom_registry</code> is ignored. The final registry list is:</p> <ol> <li><code>&lt;https://raw.githubusercontent.com/bazelbuild/bazel-central-registry/main&gt;</code></li> </ol>"},{"location":"bazel/#supported-bazel-module-declarations","title":"Supported Bazel module declarations","text":""},{"location":"bazel/#bazel_dep","title":"<code>bazel_dep</code>","text":"<p>Renovate updates the <code>version</code> value for a <code>bazel_dep</code> declaration.</p> <pre><code>bazel_dep(name = \"cgrindel_bazel_starlib\", version = \"0.15.0\")\n</code></pre> <p>In the example above, Renovate evaluates the <code>0.15.0</code> version against the repository's registries. If Renovate finds a newer version, it updates <code>0.15.0</code> to match that version.</p>"},{"location":"bazel/#git_override","title":"<code>git_override</code>","text":"<p>If Renovate finds a <code>git_override</code>, it ignores the related <code>bazel_dep</code> entry and instead evaluates the <code>commit</code> value at the specified <code>remote</code>. When using <code>git_override</code>, the <code>version</code> parameter on the <code>bazel_dep</code> is optional.</p> <pre><code>bazel_dep(name = \"cgrindel_bazel_starlib\", version = \"0.15.0\")\n\ngit_override(\n    module_name = \"cgrindel_bazel_starlib\",\n    commit = \"fb47f0e9f7c376a7700fc9fe3319231ae57880df\",\n    remote = \"https://github.com/cgrindel/bazel-starlib.git\",\n)\n\nbazel_dep(name = \"rules_foo\")\ngit_override(\n    module_name = \"rules_foo\",\n    remote = \"https://github.com/foo/rules_foo.git\",\n    commit = \"8a1e9abe415eda7cd7f2a744fdac7499ce42cdca\",\n)\n</code></pre> <p>If the primary branch has a newer commit than in the list, Renovate updates the <code>commit</code> value.</p>"},{"location":"bazel/#single_version_override","title":"<code>single_version_override</code>","text":"<p>The <code>single_version_override</code> is a declaration with many purposes. Renovate only evaluates two attributes from this declaration: <code>version</code> and <code>registry</code>.</p> <p>If a <code>version</code> is specified, it overrides the version in the <code>bazel_dep</code>. In the following example, Renovate notices that the version is pinned to <code>1.2.3</code>. This results in <code>rules_foo</code> being ignored for update evaluation. When using <code>single_version_override</code>, the <code>version</code> parameter on the <code>bazel_dep</code> is optional.</p> <pre><code>bazel_dep(name = \"rules_foo\", version = \"1.2.4\")\n\nsingle_version_override(\n  module_name = \"rules_foo\",\n  version = \"1.2.3\",\n)\n\nbazel_dep(name = \"rules_bar\")\n\nsingle_version_override(\n  module_name = \"rules_bar\",\n  version = \"1.2.3\",\n)\n</code></pre> <p>If a <code>registry</code> is specified, Renovate uses the specified registry URL to check for a new version. In the following example, Renovate only uses the <code>https://example.com/custom_registry</code> registry to discover <code>rules_foo</code> versions. Any registry values specified in the repository's <code>.bazelrc</code> files are ignored for the <code>rules_foo</code> module.</p> <pre><code>bazel_dep(name = \"rules_foo\", version = \"1.2.3\")\n\nsingle_version_override(\n  module_name = \"rules_foo\",\n  registry = \"https://example.com/custom_registry\",\n)\n</code></pre>"},{"location":"bazel/#archive_override-and-local_path_override","title":"<code>archive_override</code> and <code>local_path_override</code>","text":"<p>If Renovate finds an <code>archive_override</code> or a <code>local_path_override</code>, it ignores the related <code>bazel_dep</code>. Because these declarations lack versionable attributes, Renovate does not update them. When using <code>archive_override</code> and <code>local_path_override</code>, the <code>version</code> parameter on the <code>bazel_dep</code> is optional.</p> <pre><code>bazel_dep(name = \"rules_foo\", version = \"1.2.3\")\n\narchive_override(\n  module_name = \"rules_foo\",\n  urls = [\n    \"https://example.com/archive.tar.gz\",\n  ],\n)\n\nbazel_dep(name = \"rules_bar\")\n\narchive_override(\n  module_name = \"rules_bar\",\n  urls = [\n    \"https://example.com/archive.tar.gz\",\n  ],\n)\n</code></pre>"},{"location":"bazel/#multiple_version_override","title":"<code>multiple_version_override</code>","text":"<p>Renovate ignores <code>multiple_version_override</code>. <code>multiple_version_override</code> does not affect the processing of version updates for a module.</p>"},{"location":"bazel/#lockfile-support","title":"Lockfile support","text":"<p>Renovate updates the <code>MODULE.bazel.lock</code> file after modifying dependencies in <code>MODULE.bazel</code>. When Renovate changes a <code>bazel_dep</code> version, it runs <code>bazel mod deps</code> to regenerate the lockfile.</p> <p>For this to work:</p> <ol> <li>Your repository must already have a <code>MODULE.bazel.lock</code> file</li> <li>Bazelisk must be available in the environment, or Renovate must be configured to install tools via containerbase (<code>binarySource=install</code>)</li> </ol> <p>Renovate uses Bazelisk, which determines the correct Bazel version from the <code>.bazelversion</code> file in your repository.</p> <p>If no <code>MODULE.bazel.lock</code> file exists, Renovate skips the lockfile update step.</p>"},{"location":"bazel/#git_repository","title":"<code>git_repository</code>","text":"<p>If Renovate finds a <code>git_repository</code>, it evaluates the <code>commit</code> value at the specified <code>remote</code>. <code>remote</code> is limited to github repos: <code>https://github.com/&lt;owner&gt;/&lt;repo&gt;.git</code></p> <pre><code>git_repository(\n    name = \"rules_foo\",\n    remote = \"https://github.com/fooexample/rules_foo.git\",\n    commit = \"8c94e11c2b05b6f25ced5f23cd07d0cfd36edc1a\",\n)\n</code></pre>"},{"location":"bazel/#legacy-workspace-files","title":"Legacy <code>WORKSPACE</code> files","text":"<p>Renovate extracts dependencies from the following repository rules:</p> <ul> <li><code>container_pull</code></li> <li><code>oci_pull</code></li> <li><code>git_repository</code></li> <li><code>go_repository</code></li> <li><code>maven_install</code></li> <li><code>http_archive</code></li> <li><code>http_file</code></li> </ul> <p>It also recognizes when these repository rule names are prefixed with an underscore. For example, <code>_http_archive</code> is treated the same as <code>http_archive</code>.</p>"},{"location":"bazel/#git_repository-legacy","title":"<code>git_repository</code> (legacy)","text":"<p>Renovate updates any <code>git_repository</code> declaration that has the following:</p> <ol> <li><code>name</code></li> <li><code>remote</code> matching <code>https://github.com/&lt;owner&gt;/&lt;repo&gt;.git</code></li> <li><code>tag</code> using a valid SemVer</li> </ol> <p>e.g.:</p> <pre><code>git_repository(\n    name = \"build_bazel_rules_typescript\",\n    remote = \"https://github.com/bazelbuild/rules_typescript.git\",\n    tag = \"0.6.1\",\n)\n</code></pre> <p>Renovate uses the list of tags on the remote repository (GitHub) to detect a new version.</p>"},{"location":"bazel/#http_archive-and-http_file","title":"<code>http_archive</code> and <code>http_file</code>","text":"<p>Renovate updates any <code>http_archive</code> or <code>http_file</code> declaration that has the following:</p> <ol> <li><code>name</code></li> <li><code>url</code> matching <code>https://github.com/&lt;owner&gt;/&lt;repo&gt;/releases/download/&lt;semver&gt;/&lt;repo&gt;.tar.gz</code></li> <li><code>sha256</code></li> </ol> <p>e.g.:</p> <pre><code>http_archive(\n    name = \"io_bazel_rules_go\",\n    url = \"https://github.com/bazelbuild/rules_go/releases/download/0.7.1/rules_go-0.7.1.tar.gz\",\n    sha256 = \"341d5eacef704415386974bc82a1783a8b7ffbff2ab6ba02375e1ca20d9b031c\",\n)\n</code></pre> <p>Renovate uses the list of releases that it finds at the <code>url</code> to detect a new version.</p>"},{"location":"bazel/#maven_install","title":"<code>maven_install</code>","text":"<p>By default, Maven dependencies are extracted in the context of Gradle versioning scheme. To change it, configure <code>packageRules</code> like this:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchManagers\": [\"bazel\"],\n      \"matchDatasources\": [\"maven\"],\n      \"versioning\": \"maven\"\n    }\n  ]\n}\n</code></pre>"},{"location":"bazel/#future-work","title":"Future work","text":"<p>We welcome contributions or feature requests to support more patterns or use cases.</p>"},{"location":"bicep/","title":"Bicep","text":"<p>Renovate supports upgrading API versions in <code>resource</code> references. Upgrading <code>module</code> versions is not supported.</p>"},{"location":"bicep/#how-it-works","title":"How it works","text":"<ol> <li>Renovate searches for <code>.bicep</code> files.</li> <li>Renovate parses the files for <code>resource</code> types and API versions.</li> <li>Renovate looks up the latest version in the Azure/bicep-types-az repository.</li> </ol>"},{"location":"bicep/#known-issues","title":"Known issues","text":"<p>API version updates of nested resources are not supported.</p> <p>The API version of the <code>blobServices</code> resource below for example, will not be upgraded:</p> <pre><code>resource storageAccount 'Microsoft.Storage/storageAccounts@2022-05-01' = {\n  name: 'test'\n  kind: 'StorageV2'\n  sku: {\n    name: 'Standard_LRS'\n  }\n  location: location\n\n  resource blobServices 'blobServices@2022-05-01' = {\n    name: 'default'\n  }\n}\n</code></pre>"},{"location":"bicep/#future-work","title":"Future work","text":"<ul> <li>Support versioned nested resource API version upgrades.</li> <li>Support module version upgrades.<ul> <li>Public registry module references.</li> <li>Private registry module references.</li> <li>Template spec module references.</li> <li>Module aliases support.</li> </ul> </li> </ul>"},{"location":"bot-comparison/","title":"Bot comparison","text":"<p>This page explains the key differences between Renovate and Dependabot, to help you choose a bot. We're trying to be as objective as possible, so this is not a \"versus\" or anti-Dependabot page.</p> <p>If you see anything wrong on this page, please let us know by creating a Discussion, or edit this page with a PR.</p>"},{"location":"bot-comparison/#table-of-features","title":"Table of features","text":"Feature Renovate Dependabot Dependency Dashboard Yes No Grouped updates Yes, use community-provided groups, or create your own Yes, create <code>groups</code> manually or handled automatically by dependabot Upgrades common monorepo packages at once Yes Yes Officially supported platforms Azure, Bitbucket, Forgejo, Gitea, GitHub, GitLab, SCM-Manager, see full list GitHub and Azure DevOps Supported languages List for Renovate List for Dependabot Show changelogs Yes Yes Compatibility score badges Four badges showing: Age, Adoption, Passing, Confidence One badge with overall compatibility score Built-in to GitHub No, requires app or self-hosting Yes Scheduling By default, Renovate runs as often as it is allowed to, read Renovate scheduling to learn more Yes: <code>daily</code>, <code>weekly</code>, <code>monthly</code>, <code>quarterly</code>, <code>semiannually</code>, <code>yearly</code> or <code>cron</code> License GNU Affero General Public License MIT License Programming language of project TypeScript Ruby Project pulse <code>renovatebot/renovate</code> pulse <code>dependabot-core</code> pulse Contributor graph <code>renovatebot/renovate</code> contributor graph <code>dependabot-core</code> contributor graph"},{"location":"bot-comparison/#hosted-app","title":"Hosted app","text":"<p>This section explains the key differences between the Mend Renovate app and the GitHub-native Dependabot.</p> <p>Even if you're going to self-host a bot, read the hosted app section first, because many features and concepts are similar. Then read the self-hosted section.</p>"},{"location":"bot-comparison/#dependency-dashboard","title":"Dependency Dashboard","text":"<p>One big feature of Renovate is the Dependency Dashboard, which is enabled by default. Read the Key concepts, Dependency Dashboard page to learn more.</p> <p>Dependabot does not have a similar feature.</p>"},{"location":"bot-comparison/#grouped-updates","title":"Grouped updates","text":"<p>Renovate comes with community-provided groupings of dependencies. So Renovate groups common dependencies into a single PR, out-of-the-box.</p> <p>Dependabot can group dependencies into a single PR too, but you must set your own <code>groups</code> first.</p>"},{"location":"bot-comparison/#upgrades-common-monorepo-packages-at-once","title":"Upgrades common monorepo packages at once","text":"<p>Renovate has a <code>group:monorepos</code> preset, that upgrades common monorepo packages in a single PR.</p> <p>Dependabot does not update common monorepo packages in a single PR.</p>"},{"location":"bot-comparison/#supported-platforms","title":"Supported platforms","text":"<p>Platform means the Git-hosting site or program, for example GitHub, GitLab or Azure.</p> <p>Renovate works on multiple platforms, including GitHub. Read the list of Renovate platforms to learn more.</p> <p>The official Dependabot program only works on GitHub. If you're an advanced user, you may use the <code>dependabot-core</code> repository as a base to build your own Dependabot, which you can run on other platforms.</p>"},{"location":"bot-comparison/#supported-languages","title":"Supported languages","text":"<ul> <li>Renovate's supported managers</li> <li>Dependabot's supported repositories and ecosystems</li> </ul>"},{"location":"bot-comparison/#show-changelogs","title":"Show changelogs","text":"Feature Renovate Dependabot Link to GitHub release Yes, to specific release tag Yes, to \"releases landing page\" Link to GitHub's comparing changes UI Yes Yes Release notes Yes Yes Links to issues Yes Yes Upstream <code>CHANGELOG</code> file No Yes Recent commits No Yes Link to individual commits No Yes"},{"location":"bot-comparison/#compatibility-score-badges","title":"Compatibility score badges","text":"<p>Renovate shows four Merge Confidence badges in its PRs:</p> <ul> <li>Age: The age of the package</li> <li>Adoption: The percentage of this package's users (within Renovate) which are using this release</li> <li>Passing: The percentage of updates which have passing tests for this package</li> <li>Confidence: The confidence level for this update</li> </ul> <p>Read the Merge Confidence badges page to learn more.</p> <p>Dependabot shows one compatibility score badge in its PRs. This score tells you how many other repositories have passing CI tests for the proposed update. Read the GitHub Docs, Dependabot's compatibility scores to learn more about Dependabot's badge.</p>"},{"location":"bot-comparison/#built-in-to-github-vs-app","title":"Built-in to GitHub vs app","text":"<p>Renovate needs app installation or self-hosting.</p> <p>Dependabot is built-in to GitHub.</p>"},{"location":"bot-comparison/#scheduling","title":"Scheduling","text":"<p>You can set a schedule for Renovate, per dependency, manager, or even a global schedule. Read Renovate scheduling to learn more.</p> <p>Dependabot has four options that apply at a language level:</p> <ul> <li><code>schedule.interval</code></li> <li><code>schedule.day</code></li> <li><code>schedule.time</code></li> <li><code>schedule.timezone</code></li> </ul>"},{"location":"bot-comparison/#license","title":"License","text":"<p>Renovate uses the GNU Affero General Public License.</p> <p>Dependabot uses the MIT License.</p> <p>Neither license is relevant to the end user though if consuming through an App/SaaS.</p>"},{"location":"bot-comparison/#programming-language-of-project","title":"Programming language of project","text":"<p>Renovate uses TypeScript.</p> <p><code>dependabot-core</code> uses Ruby.</p>"},{"location":"bot-comparison/#self-hosting-a-bot","title":"Self-hosting a bot","text":"<p>This section explains how to self-host each bot.</p>"},{"location":"bot-comparison/#self-hosting-renovate","title":"Self-hosting Renovate","text":"<p>You can self-host Renovate on all officially supported platforms.</p> <p>If you decide to self-host Renovate, read the items from the Self-hosting Renovate reading list.</p> <p>Available Renovate distributions:</p> <ul> <li>npm package (CLI)</li> <li>Docker images</li> <li>GitHub Action</li> <li>GitLab Runner</li> <li>Mend Renovate On-Premises</li> <li>Mend Remediate (commercial offering)</li> <li>Forking Renovate app</li> </ul>"},{"location":"bot-comparison/#self-hosting-dependabot","title":"Self-hosting Dependabot","text":"<p>You can self-host Dependabot on other platforms than GitHub but none are officially supported.</p>"},{"location":"bot-comparison/#as-a-github-actions-workflow-on-github","title":"As a GitHub Actions workflow on GitHub","text":"<p>You can run Dependabot as a GitHub Actions workflow on hosted and self-hosted runners. Learn more by reading the:</p> <ul> <li>GitHub Blog, Dependabot on GitHub Actions and self-hosted runners is now generally available</li> <li>GitHub Docs, About Dependabot on GitHub Actions runners</li> </ul>"},{"location":"bot-comparison/#dependabot-core","title":"<code>dependabot-core</code>","text":"<p>If you want to customize Dependabot, or self-host on another platform, you can use <code>dependabot-core</code>. Quote from the <code>dependabot-core</code> readme:</p> <p>It [<code>dependabot-core</code>] currently supports opening Pull Requests against repositories hosted on GitHub, Github Enterprise, Azure DevOps, GitLab, BitBucket, and AWS CodeCommit.</p>"},{"location":"bot-comparison/#dependabot-script","title":"<code>dependabot-script</code>","text":"<p>The Dependabot team has a community-maintained collection of scripts to start self-hosting Dependabot: <code>dependabot-script</code> but the repository has included a message warning that the scripts are broken since March 2023.</p>"},{"location":"bot-comparison/#dependabot-gitlabdependabot","title":"<code>dependabot-gitlab/dependabot</code>","text":"<p>There's also a community-maintained Dependabot for GitLab: <code>dependabot-gitlab/dependabot</code>.</p>"},{"location":"calling-aws-services/","title":"Calling AWS Services from Renovate","text":"<p>When one of Renovate's inbuilt datasources interacts with AWS services, Renovate uses the AWS SDK for JavaScript. This allows you to provide credentials and configuration to it, as if you were interacting with other tools, like the <code>aws</code> CLI.</p> <p>For example:</p> <ul> <li>Set the region via the <code>AWS_REGION</code> environment variable or your <code>~/.aws/config</code> file</li> <li>Provide credentials via the <code>AWS_ACCESS_KEY_ID</code> and <code>AWS_SECRET_ACCESS_KEY</code> environment variables or your <code>~/.aws/credentials</code> file</li> <li>Select the profile to use via <code>AWS_PROFILE</code> environment variable</li> </ul> <p>Tip</p> <p>Read the AWS Developer Guide - Configuring the SDK for JavaScript for more information on these configuration options.</p>"},{"location":"community-tools/","title":"Community Tools","text":"<p>This page lists community-maintained tools that extend or complement Renovate. These tools are not officially supported by the Renovate team, but may be useful for your workflow.</p> <p>Note</p> <p>If you have a community tool you'd like to add to this page, please open a pull request.</p>"},{"location":"community-tools/#renovate-operator-kubernetes","title":"Renovate Operator (Kubernetes)","text":"<p>The Renovate Operator lets you run Renovate on Kubernetes in a native way. It wraps the Renovate CLI in a Kubernetes operator and adds features like:</p> <ul> <li>CRD-based scheduling with declarative cron syntax</li> <li>Parallel execution with configurable concurrency control</li> <li>Auto-discovery of repositories</li> <li>Built-in web dashboard for monitoring and management</li> <li>Webhook API for on-demand runs</li> <li>Prometheus metrics and health checks</li> </ul>"},{"location":"community-tools/#renovate-pretty-log","title":"<code>renovate-pretty-log</code>","text":"<p><code>renovate-pretty-log</code> is a set of utilities to provide a richer, local-only view, for your Renovate debug logs.</p> <p>The project is maintained by Renovate maintainer Jamie Tanna.</p>"},{"location":"community-tools/#renovate-pretty-log-tui","title":"<code>renovate-pretty-log-tui</code>","text":"<p><code>renovate-pretty-log-tui</code> is a Terminal User Interface (TUI) to provide a richer, local-only view, for your Renovate debug logs.</p> <p></p> <p>It also provides more advanced searching and filtering:</p> <p></p> <p>And can be used to surface issues in repository runs more visually:</p> <p></p>"},{"location":"community-tools/#html-exports","title":"HTML exports","text":"<p>There are some additional utilities in the project, including the ability to generate a single-page HTML view of the logs:</p> <pre><code>renovate-pretty-log -path /path/to/debug.log -html &gt; report.html\n</code></pre> <p>You can see a live example of what this looks like from one of Renovate's own runs.</p>"},{"location":"community-tools/#renovate-config-debugger","title":"Renovate Config Debugger","text":"<p>The Renovate Config Debugger shows what Renovate does with a config before you commit it. It runs Renovate's own code in the browser, so the config never leaves the page.</p> <p></p> <ul> <li>Runs the full config pipeline, parsing, migration, validation and preset resolution, and shows the intermediate result of each stage</li> <li>Expands <code>extends</code> into the full preset tree</li> <li>Shows per-option provenance: which default, preset or config layer set a value</li> <li>Simulates a hypothetical update and shows which <code>packageRules</code> match and why</li> <li>Loads a repository and runs Renovate's managers over its package files to list the extracted dependencies</li> <li>Is also available as a CLI, MCP server and Docker image for self-hosting</li> </ul> <p>The project is maintained by Renovate maintainer Sebastian Poxhofer ( @secustor ). The blog post Renovate: It was a packageRule all along walks through debugging a config with it.</p>"},{"location":"config-migration/","title":"Config Migration","text":"<p>As part of continuous improvement and refinement, the Renovate maintainers often rename, remove or combine configuration options.</p> <p>When the Renovate maintainers change configuration options, they add \"config migration\" code. The migration code allows \"legacy\" config from users to keep working. Config migration works by migrating legacy config internally, before the config is used. If done right, config migration \"just works\" silently and legacy configs continue working indefinitely. The only sign that \"config migration\" is needed is the debug message in the Renovate logs, noting the old and newly migrated configs.</p>"},{"location":"config-migration/#enabling-config-migration-pull-requests","title":"Enabling config migration pull requests","text":"<p>Even though Renovate allows you to keep using \"legacy config\", we recommend you update the configuration names in your config regularly. Using the latest names:</p> <ul> <li>makes it easier for you to understand the config</li> <li>helps you find the documentation for the config</li> </ul> <p>Renovate can create a config migration Pull Request, to migrate legacy config in your configuration file. To get automated config migration Pull Requests from Renovate: set the <code>configMigration</code> config option to <code>true</code>.</p> <p>Config migration PRs are disabled by default. But we recommend you enable config migration PRs, because:</p> <ul> <li>the config migration PR \"tells\" you something changed</li> <li>up-to-date terms help you search the Renovate documentation</li> <li>up-to-date terms help you, and us, debug problems quicker</li> </ul>"},{"location":"config-migration/#config-migration-scenarios","title":"Config migration scenarios","text":"<p>The scenarios for config migration are:</p> <ul> <li>No config migration needed</li> <li>Config migration needed, and enabled</li> <li>Config migration needed, but disabled</li> <li>Config migration needed, but there is a previously closed migration PR</li> </ul>"},{"location":"config-migration/#no-config-migration-needed","title":"No config migration needed","text":"<p>Renovate takes no action.</p>"},{"location":"config-migration/#config-migration-needed-and-enabled","title":"Config migration needed, and enabled","text":"<p>Renovate will:</p> <ol> <li>Create a Config Migration PR</li> <li>If the Dependency Dashboard issue is enabled, then Renovate puts a link to the Config Migration PR on the dashboard</li> </ol>"},{"location":"config-migration/#config-migration-needed-but-disabled","title":"Config migration needed, but disabled","text":"<p>If config migration is needed, but disabled then Renovate adds a checkbox to the Dependency Dashboard (if the dashboard exists). This is known as \"on-demand\" config migration, because migration PRs are only created at the request of the user by ticking the checkbox.</p> <p>The checkbox looks like this:</p> <pre><code>- [ ] Select this checkbox to let Renovate create an automated Config Migration PR.\n</code></pre> <p>When you select the checkbox:</p> <ol> <li>Renovate creates a config migration PR</li> <li>Renovate replaces the checkbox with a link to the Config Migration PR</li> </ol> <p>For example:</p> <pre><code>See Config Migration PR: #1.\n</code></pre>"},{"location":"config-migration/#config-migration-needed-but-there-is-a-closed-migration-pr","title":"Config migration needed, but there is a closed migration PR","text":"<p>In this case, it does not matter if Config Migration is enabled, or not. Renovate will:</p> <ul> <li>Add a checkbox to the Dependency Dashboard issue (if enabled)</li> <li>When you select the checkbox on the dashboard, Renovate will:<ol> <li>Delete the old config migration branch</li> <li>Create a new config migration PR</li> <li>Replace the checkbox with a link to the new PR in the Dependency Dashboard issue</li> </ol> </li> </ul>"},{"location":"config-overview/","title":"Renovate configuration overview","text":"<p>Each time Renovate runs on a repository it reads the configuration files listed below and creates a final config. This final config describes what Renovate will do during its run.</p> <p>The final config is internal to Renovate, and is not saved or cached for a later run. But you can always find the final config in Renovate's logs.</p> <p>Renovate reads the configuration files in this order (from top to bottom):</p> <ol> <li>Default config</li> <li>Global config<ul> <li>File config</li> <li>Additional file config</li> <li>Environment config</li> <li>CLI config</li> </ul> </li> <li>Inherited config</li> <li>Resolved presets referenced in config</li> <li>Repository config</li> </ol> <p>Items with a higher number override items that have lower numbers. If the item has the <code>mergeable</code> property, it will merge with lower numbers instead.</p> <p>Note</p> <p>If you use a Mend-hosted app, please read Mend-hosted Apps Configuration after reading this page.</p>"},{"location":"config-overview/#types-of-config","title":"Types of config","text":""},{"location":"config-overview/#default-config","title":"Default config","text":"<p>Every Renovate config option has a default value/setting. That default value/setting may even be <code>null</code>. You can find the default values on the Renovate docs website.</p> <p>For example:</p> <ul> <li>The default value for <code>onboarding</code> is <code>true</code></li> <li>The option <code>labels</code> lacks a default value, which means that no labels will be added to Renovate's PRs</li> </ul> <p>The default config is loaded first, and may be superseded/overridden by the configuration types listed below.</p>"},{"location":"config-overview/#global-config","title":"Global config","text":"<p>Global config means: the config defined by the person or team responsible for running the deployment of Renovate.</p> <p>Global config can contain config which is \"global only\" as well as any configuration options which are valid in Inherited config or Repository config.</p> <p>Previously, this may have been referred to as \"bot config\", because it is the config passed to Renovate by the person running it. We no longer use \"bot\" terminology, so it is now called \"global self-hosted configuration\".</p> <p>If you are an end user of Renovate, for example if you're using the Mend Renovate App, then you don't need to care as much about any global config. As a end-user you can not change some settings because those settings are global-only. If you are an end user, you can skip the rest of this \"Global config\" section and proceed to \"Inherited config\".</p> <p>Global config can be read from a file, environment variable, or CLI parameters. You must configure at least one of these for Renovate to have the information it needs to run. For example: you may need to give Renovate the correct credentials.</p>"},{"location":"config-overview/#file-config","title":"File config","text":"<p>Renovate first tries to read the global config from a file. By default Renovate checks for a <code>config.js</code> file in the current working directory. But you can override this by defining <code>RENOVATE_CONFIG_FILE</code> in env, for example: <code>RENOVATE_CONFIG_FILE=/tmp/my-renovate-config.js</code>.</p> <p>By default Renovate allows the config file to be missing and does not error if it cannot find it. But if you have configured <code>RENOVATE_CONFIG_FILE</code> and the path you specified is not found then Renovate will error and exit, because it assumes you have a configuration problem. If the file is found but cannot be parsed then Renovate will also error and exit.</p> <p>Global config files can be <code>.js</code> or <code>.json</code> files. You may use synchronous or asynchronous methods inside a <code>.js</code> file, including even to fetch config information from remote hosts.</p>"},{"location":"config-overview/#additional-file-config","title":"Additional file config","text":"<p>Renovate tried to read an additional config file only if the env var <code>RENOVATE_ADDITIONAL_CONFIG_FILE</code> is set, for example: <code>RENOVATE_ADDITIONAL_CONFIG_FILE=/tmp/my-additional-renovate-config.js</code>.</p> <p>By default Renovate allows the config file to be missing and does not error if it cannot find it. But if you have configured <code>RENOVATE_ADDITIONAL_CONFIG_FILE</code> and the path you specified is not found then Renovate will error and exit, because it assumes you have a configuration problem. If the file is found but cannot be parsed then Renovate will also error and exit.</p> <p>Global config files can be <code>.js</code> or <code>.json</code> files. You may use synchronous or asynchronous methods inside a <code>.js</code> file, including even to fetch config information from remote hosts.</p> <p>Warning</p> <p>Do not name the additional config file <code>config.js</code> as it is reserved for file config.</p>"},{"location":"config-overview/#environment-config","title":"Environment config","text":"<p>Global config can be defined using environment variables. The config options that you can use in environment variables all have the prefix <code>RENOVATE_</code>. For example, <code>RENOVATE_PLATFORM=gitlab</code> is the same as setting <code>\"platform\": \"gitlab\"</code> in File config.</p> <p>Usually there's a clear mapping from configuration option name to the corresponding Environment config name. But we recommend you still check the documentation for the field <code>env</code> for each option to make sure. If the configuration option lacks a <code>env</code> field, the config option also lacks a Environment config variable name.</p> <p>A special case for Environment config is the <code>RENOVATE_CONFIG</code> \"meta\" config option. The <code>RENOVATE_CONFIG</code> option accepts a stringified full config, for example: <code>RENOVATE_CONFIG={\"platform\":\"gitlab\",\"onboarding\":false}</code>. Any additional Environment config variables take precedence over values in <code>RENOVATE_CONFIG</code>. For mergeable options, like <code>hostRules</code>, <code>packageRules</code> or <code>registryAliases</code>, the values are combined instead: lists are appended to the list in <code>RENOVATE_CONFIG</code>, and objects are merged into the object in <code>RENOVATE_CONFIG</code>, with the Environment config variable winning for keys that exist in both.</p>"},{"location":"config-overview/#environment-variable-examples","title":"Environment variable examples","text":"<p>Warning</p> <p>Make sure to escape any punctuation. Be extra careful if you're passing stringified values.</p> <p>Boolean:</p> <ul> <li><code>RENOVATE_ONBOARDING=true</code></li> </ul> <p>String:</p> <ul> <li><code>RENOVATE_BASE_DIR=/tmp/something</code></li> <li><code>RENOVATE_BASE_DIR=\"/tmp/some thing\"</code></li> </ul> <p>Number:</p> <ul> <li><code>RENOVATE_PR_HOURLY_LIMIT=1</code></li> </ul> <p>List with numbers or strings:</p> <ul> <li><code>RENOVATE_LABELS=\"abc,def,label with space\"</code></li> </ul> <p>Objects, or lists with objects:</p> <ul> <li><code>RENOVATE_CONFIG=\"{platform\\\":\\\"gitlab\\\",\\\"onboarding\\\":false}\"</code></li> <li><code>RENOVATE_PACKAGE_RULES=\"[{matchHost:\\\"gitlab\\\",token:\\\"$SOME_TOKEN\\\"}]\"</code></li> </ul> <p>Tip</p> <p>Use \"stringify\" (Example online service) for strings and objects.</p>"},{"location":"config-overview/#experimental-variables","title":"Experimental variables","text":"<p>Renovate has \"experimental\" environment variables, which start with <code>RENOVATE_X_</code>. These variables are experimental, can be changed at any time, and are not parsed as part of regular configuration. Read the Self-hosted experimental environment variables docs to learn more.</p>"},{"location":"config-overview/#logging-variables","title":"Logging variables","text":"<p>Finally, there are some special environment variables that are loaded before configuration parsing because they are used during logging initialization:</p> <ul> <li><code>LOG_CONTEXT</code>: a unique identifier used in each log message to track context</li> <li><code>LOG_FILE</code>: used to enable file logging and specify the log file path</li> <li><code>LOG_FILE_FORMAT</code>: defaults to \"json\", but can be changed to a \"pretty\" human-readable output</li> <li><code>LOG_FILE_LEVEL</code>: log file logging level, defaults to <code>debug</code></li> <li><code>LOG_FORMAT</code>: defaults to a \"pretty\" human-readable output, but can be changed to \"json\"</li> <li><code>LOG_LEVEL</code>: most commonly used to change from the default <code>info</code> to <code>debug</code> logging</li> </ul>"},{"location":"config-overview/#cli-config","title":"CLI config","text":"<p>The final way to configure Global config is through CLI parameters. For example, the CLI parameter <code>--platform=gitlab</code> is the same as setting <code>\"platform\": \"gitlab\"</code> in File config or <code>RENOVATE_PLATFORM=gitlab</code> in Environment config.</p> <p>CLI config is read last and takes precedence over Environment and File config. For example, if you configure conflicting values in Environment, File config and CLI config, then the CLI config will be merged last and \"win\" if values conflict.</p> <p>It is important that you:</p> <ul> <li>Always provide a value, even if the field is boolean (e.g. <code>--onboarding=true</code> and not <code>--onboarding</code>), and</li> <li>Prefer <code>=</code> notation over spaces, e.g. <code>--onboarding=true</code> instead of <code>--onboarding true</code></li> </ul>"},{"location":"config-overview/#inherited-config","title":"Inherited config","text":""},{"location":"config-overview/#use-cases","title":"Use cases","text":"<p>The primary purpose of Inherited config is to allow for default settings of an organization/group. Two main use cases for Inherited config are:</p> <ul> <li>Controlling onboarding settings within an org (e.g. disabling onboarding, making config optional)</li> <li>Defining default config settings for repos within an org</li> </ul> <p>We recommend that organizations use shared presets instead of Inherited config, if possible. But default settings through Inherited config are useful if:</p> <ul> <li>You want to avoid setting Repository config in each repo, or</li> <li>You onboarded many repos prior to having a shared org config, and don't want to retrospectively edit each repo's config</li> </ul>"},{"location":"config-overview/#how-its-found","title":"How it's found","text":"<p>If <code>inheritConfig</code> is <code>true</code> in Global config then Renovate will look for Inherited config before processing each repository.</p> <p>The repository and file name which Renovate looks for can be configured using the other <code>inheritConfig*</code> settings documented in Global config. Default values are <code>{{parentOrg}}/renovate-config</code> for repository name (<code>inheritConfigRepoName</code>) and <code>org-inherited-config.json</code> for file name (<code>inheritConfigFileName</code>).</p> <p>Note: For Azure DevOps, <code>{{parentOrg}}</code> is the Project the repo belongs to, and for Bitbucket, the <code>{{parentOrg}}</code> is the Workspace of the repo, as shown in the table below.</p> Repo Inherited config file location GitHub {parentOrg} / renovate-config / org-inherited-config.json Bitbucket {parentWorkspace} / renovate-config / org-inherited-config.json Azure DevOps {parentProject} / renovate-config / org-inherited-config.json <p>If found, Inherited config will be merged on top (i.e. override) Global config. Avoid putting any global-only setting in a Inherited config, as doing so will result in an error.</p> <p>Inherited config may use all Repository config settings, and any Global config options which have the \"supportsInheritConfig\" property in the docs.</p> <p>For information on how the Mend Renovate App supports Inherited config, see the dedicated \"Mend Renovate App Config\" section toward the end of this page.</p>"},{"location":"config-overview/#presets-handling","title":"Presets handling","text":"<p>If the inherited config contains <code>extends</code> presets, then Renovate will:</p> <ol> <li>Resolve the presets</li> <li>Add the resolved preset config to the beginning of the inherited config</li> <li>Merge the presets on top of the global config</li> </ol>"},{"location":"config-overview/#you-can-not-ignore-presets-from-inherited-config","title":"You can not ignore presets from inherited config","text":"<p>You can not use <code>ignorePresets</code> in your repository config to ignore presets within inherited config. This is because inherited config is resolved before the repository config.</p>"},{"location":"config-overview/#repository-config","title":"Repository config","text":"<p>Repository config is the config loaded from a config file in the repository. Alternative file names are supported, but the default is <code>renovate.json</code>. If Renovate finds more than one configuration file in the same repository, then Renovate will use the first configuration file it finds and ignores the other(s).</p>"},{"location":"config-overview/#config-precedence","title":"Config precedence","text":"<p>Once Repository config is loaded, it is merged over the top of the previously loaded Global and Inherited config, meaning it takes precedence over them. Presets referenced with an \"extends\" config are resolved first and take lower precedence over regular/raw config in the same file or config object.</p>"},{"location":"config-overview/#onboarding","title":"Onboarding","text":"<p>When Renovate processes a repository, one of the first decisions it makes is \"Does this repository need to be onboarded?\". By default, Renovate will create an \"Onboarding PR\" with a default config if a repository does not have a Repository config file committed to the default branch.</p>"},{"location":"config-overview/#onboarding-config","title":"Onboarding Config","text":"<p>When Renovate creates an Onboarding PR it will propose a Repository config file to be merged. By default, it is essentially an empty config with only the Renovate JSON schema referenced, but you can change this behavior if desired.</p> <p>If you configure <code>onboardingConfig</code> in either Global config or Inherited config then Renovate will use that config directly instead of the default.</p> <p>If you self-host Renovate in GitLab using <code>renovate-runner</code>, the CI will contain a default RENOVATE_ONBOARDING_CONFIG that will merge with your own configuration settings. For example, the CI by default contains:</p> <pre><code>RENOVATE_ONBOARDING_CONFIG: '{\"$$schema\": \"https://docs.renovatebot.com/renovate-schema.json\", \"extends\": [\"config:recommended\"] }'\n</code></pre> <p>If you want to change the <code>extends</code> in your own configuration, you need to override the variable in your own <code>.gitlab-ci.yml</code>:</p> <pre><code>variables:\n  RENOVATE_ONBOARDING_CONFIG: '{\"$$schema\":\"https://docs.renovatebot.com/renovate-schema.json\",\"extends\":[\"platform&gt;organization/repo:renovate-config\"]}'\n</code></pre> <p>Your <code>renovate.js</code> where you run Renovate cannot contain any <code>extends</code> definition, it will pick the <code>extends</code> from the <code>RENOVATE_ONBOARDING_CONFIG</code> variable. For example, your config can look like this:</p> <pre><code>module.exports = {\n  // ...\n  onboardingConfig: {\n    argocd: {\n      managerFilePatterns: ['application\\\\.yaml$'],\n    },\n  },\n};\n</code></pre> <p>The resulting onboarding config will be:</p> <pre><code>{\n  '$schema': 'https://docs.renovatebot.com/renovate-schema.json',\n  'argocd': { 'managerFilePatterns': [\"/application\\\\.yaml$/\"] },\n  'extends': ['platform&gt;organization/repo:renovate-config'],\n}\n</code></pre> <p>Alternatively if you follow Renovate's naming convention for shared presets then it can automatically detect those instead. If the repository <code>{{parentOrg}}/renovate-config</code> has a <code>default.json</code> file then this will be treated as the organization's default preset and included in the Onboarding config. Additionally for platforms which support nested Organization/Group hierarchies, Renovate will \"hunt\" up such hierarchies for a <code>renovate-config</code> repository with default config and stop when it finds the first.</p> <p>Note</p> <p>Renovate will also check for a <code>renovate.json</code> file if it cannot find a <code>default.json</code> file in a preset, however this option is deprecated and not recommended.</p> <p>If a default config is not found in a <code>renovate-config</code> repository within the Organization, Renovate will also check for the presence of a <code>renovate-config.json</code> file within a <code>.{{platform}}</code> repository parallel to the current repository. For example if the repository being onboarded is <code>abc/def</code> on a GitHub platform then Renovate will look for the existence of an <code>abc/.github</code> repository containing a <code>renovate-config.json</code> file.</p>"},{"location":"config-overview/#changing-default-behavior","title":"Changing default behavior","text":"<p>Default onboarding behavior for an Organization can be changed either in Global or Inherited config.</p> <p>For example, if you set <code>onboarding=false</code> then Renovate will not onboard repositories, and skip any repositories without a Repository config. In other words, users need to manually push a valid Repository config file to activate Renovate on the repository.</p> <p>If you set <code>onboarding=false</code> plus <code>requireConfig=optional</code> then it means Renovate will skip onboarding and proceed to run on a repository, even if Renovate does not find any Repository config.</p>"},{"location":"config-overview/#shared-presets","title":"Shared Presets","text":""},{"location":"config-overview/#overview","title":"Overview","text":"<p>The concept of shared configuration is covered in detail on the Presets page, so please read that first.</p>"},{"location":"config-overview/#use-of-presets-in-global-config","title":"Use of Presets in Global config","text":"<p>Presets should be used cautiously in Global config as they often lead to misunderstandings.</p>"},{"location":"config-overview/#globalextends","title":"globalExtends","text":"<p>Sometimes you may not wish to put all settings within the Global config itself and instead commit it to a repository which is then referenced from the Global config. In such cases, use <code>globalExtends</code> instead of <code>extends</code> so that it is resolved immediately and used as part of Global config.</p>"},{"location":"config-overview/#extends","title":"extends","text":"<p>If you use <code>extends</code> within Global config then it's important to note that these are not resolved/expanded during Global config processing and instead are passed through unresolved to be part of Repository config. Passing <code>extends</code> through to be part of Repository config has two major consequences:</p> <ul> <li>It allows repository users to be able to use <code>ignorePresets</code> to ignore all or part of the <code>extends</code> presets, and</li> <li>Presets defined within <code>extends</code> in Global config will take higher precedence that \"regular\" Global config, because it's resolved later</li> </ul>"},{"location":"config-overview/#using-a-centralized-config","title":"Using a centralized config","text":"<p>Using \"centralized\" configs through Renovate presets is important in order to be able to:</p> <ul> <li>Save time by not repeating yourself in every repo with the same config, and</li> <li>Being able to change settings across an entire Organization or groups of repositories in one place</li> </ul> <p>Once you've created a centralized preset config, there are multiple ways you can pass it through to repositories:</p> <ul> <li>Defining it in Global config (either <code>globalExtends</code> or <code>extends</code>)</li> <li>Using it as your Inherited config, or referencing it from Inherited config using <code>extends</code></li> <li>Ensuring it's referenced in Onboarding config so that it's committed as part of the Repository config</li> </ul> <p>The above possibilities go from least to most transparent when it comes to end users.</p> <p>Global config may be invisible to developers without log access, meaning they could be confused by any settings you apply - via presets or directly - within Global config. For example the developers wonder why Renovate is behaving differently to its documented default behavior and may even think it's a bug.</p> <p>Inherited config is visible to developers (it's within a repository they can see) although it's implicitly applied so without log access and if they're not aware to look for an Inherited config repository then they may again be a little confused as to why default behavior has changed.</p> <p>The recommended approach for using a centralized preset is to explicitly \"extend\" it from every repository, which can be achieved easily if it's part of your <code>onboardingConfig</code>. By having your centralized preset part of each Repository config <code>extends</code>, it has these two benefits:</p> <ul> <li>You still have the ability to change shared settings in a single location</li> <li>Any user viewing the repo can see the preset being extended and trace it back to understand which config is applied</li> </ul>"},{"location":"config-overview/#other","title":"Other","text":"<p>The below contains edge cases which you should avoid if possible, and likely don't need to use. They are included here because they can cause \"exceptions\" to some of the previously mentioned rules of config.</p>"},{"location":"config-overview/#optimize-for-disabled","title":"Optimize for Disabled","text":"<p>The <code>optimizeForDisabled</code> option was designed for an edge case where a large percentage of repos are disabled by config. If this option is set to <code>true</code>, Renovate will use a platform API call to see if a <code>renovate.json</code> exists and if it contains <code>\"enabled\": false</code>. If so, the repository will be skipped without a clone necessary. If the file is not present or does not disable Renovate, then Renovate continues as before (having \"wasted\" that extra API call).</p>"},{"location":"config-overview/#force-config","title":"Force config","text":"<p>We recommend you avoid the <code>force</code> config option, if possible.</p> <p>It can be used to \"force\" config over the top of other config or rules which might be merged later, so at times can cause confusion - especially if it's defined in Global config and overriding settings in Repository config.</p>"},{"location":"config-presets/","title":"Shareable Config Presets","text":"<p>This page describes how to configure your shared presets. Read the Key concepts, presets page to learn more about presets in general.</p> <p>Shareable config presets must use the JSON, JSONC or JSON5 formats, other formats are not supported.</p> <p>Tip</p> <p>Describe what your preset does in the <code>\"description\"</code> field or add comments as Renovate supports <code>JSONC</code> syntax within its preset files.</p>"},{"location":"config-presets/#extending-from-a-preset","title":"Extending from a preset","text":"<p>To use a preset put it in an <code>extends</code> array within your Renovate config. Presets can be nested.</p>"},{"location":"config-presets/#preset-hosting","title":"Preset Hosting","text":"<p>Presets should be hosted in repositories, which usually means the same platform host as Renovate is running against.</p> <p>Alternatively, Renovate can fetch preset files from an HTTP server.</p> <p>Warning</p> <p>We deprecated npm-based presets. We plan to drop the npm-based presets feature in a future major release of Renovate.</p> <p>You can set a Git tag (like a SemVer) to use a specific release of your shared config.</p>"},{"location":"config-presets/#preset-file-naming","title":"Preset File Naming","text":"<p>Presets are repo-hosted, and you can have one or more presets hosted per repository. If you omit a file name from your preset (e.g. <code>github&gt;abc/foo</code>) then Renovate will look for a <code>default.json</code> file in the repo. If you wish to have an alternative file name, you need to specify it (e.g. <code>github&gt;abc/foo//alternative-name.json5</code>).</p> <p>Warning</p> <p>We've deprecated using a <code>renovate.json</code> file for the default preset file name in a repository. If you're using a <code>renovate.json</code> file to share your presets, rename it to <code>default.json</code>.</p>"},{"location":"config-presets/#github","title":"GitHub","text":"name example use preset resolves as filename Git tag GitHub default <code>github&gt;abc/foo</code> <code>default</code> <code>https://github.com/abc/foo</code> <code>default.json</code> Default branch GitHub with preset name <code>github&gt;abc/foo:xyz</code> <code>xyz</code> <code>https://github.com/abc/foo</code> <code>xyz.json</code> Default branch GitHub with preset name (JSONC) <code>github&gt;abc/foo:xyz.jsonc</code> <code>xyz</code> <code>https://github.com/abc/foo</code> <code>xyz.jsonc</code> Default branch GitHub with preset name (JSON5) <code>github&gt;abc/foo:xyz.json5</code> <code>xyz</code> <code>https://github.com/abc/foo</code> <code>xyz.json5</code> Default branch GitHub with preset name and path <code>github&gt;abc/foo//path/xyz</code> <code>xyz</code> <code>https://github.com/abc/foo</code> <code>path/xyz.json</code> Default branch GitHub default with a tag <code>github&gt;abc/foo#1.2.3</code> <code>default</code> <code>https://github.com/abc/foo</code> <code>default.json</code> <code>1.2.3</code> GitHub with preset name with a tag <code>github&gt;abc/foo:xyz#1.2.3</code> <code>xyz</code> <code>https://github.com/abc/foo</code> <code>xyz.json</code> <code>1.2.3</code> GitHub with preset name and path with a tag <code>github&gt;abc/foo//path/xyz#1.2.3</code> <code>xyz</code> <code>https://github.com/abc/foo</code> <code>path/xyz.json</code> <code>1.2.3</code> GitHub with subpreset name and tag <code>github&gt;abc/foo:xyz/sub#1.2.3</code> <code>sub</code> <code>https://github.com/abc/foo</code> <code>xyz.json</code> <code>1.2.3</code>"},{"location":"config-presets/#gitlab","title":"GitLab","text":"name example use preset resolves as filename Git tag GitLab default <code>gitlab&gt;abc/foo</code> <code>default</code> <code>https://gitlab.com/abc/foo</code> <code>default.json</code> Default branch GitLab with preset name <code>gitlab&gt;abc/foo:xyz</code> <code>xyz</code> <code>https://gitlab.com/abc/foo</code> <code>xyz.json</code> Default branch GitLab with preset name (JSONC) <code>gitlab&gt;abc/foo:xyz.jsonc</code> <code>xyz</code> <code>https://gitlab.com/abc/foo</code> <code>xyz.jsonc</code> Default branch GitLab with preset name (JSON5) <code>gitlab&gt;abc/foo:xyz.json5</code> <code>xyz</code> <code>https://gitlab.com/abc/foo</code> <code>xyz.json5</code> Default branch GitLab default with a tag <code>gitlab&gt;abc/foo#1.2.3</code> <code>default</code> <code>https://gitlab.com/abc/foo</code> <code>default.json</code> <code>1.2.3</code> GitLab with preset name with a tag <code>gitlab&gt;abc/foo:xyz#1.2.3</code> <code>xyz</code> <code>https://gitlab.com/abc/foo</code> <code>xyz.json</code> <code>1.2.3</code> GitLab with preset name and path with a tag <code>gitlab&gt;abc/foo//path/xyz#1.2.3</code> <code>xyz</code> <code>https://gitlab.com/abc/foo</code> <code>path/xyz.json</code> <code>1.2.3</code> GitLab with subpreset name and tag <code>gitlab&gt;abc/foo:xyz/sub#1.2.3</code> <code>sub</code> <code>https://gitlab.com/abc/foo</code> <code>xyz.json</code> <code>1.2.3</code>"},{"location":"config-presets/#gitea","title":"Gitea","text":"name example use preset resolves as filename Git tag Gitea default <code>gitea&gt;abc/foo</code> <code>default</code> <code>https://gitea.com/abc/foo</code> <code>default.json</code> Default branch Gitea with preset name <code>gitea&gt;abc/foo:xyz</code> <code>xyz</code> <code>https://gitea.com/abc/foo</code> <code>xyz.json</code> Default branch Gitea with preset name (JSON5) <code>gitea&gt;abc/foo:xyz.json5</code> <code>xyz</code> <code>https://gitea.com/abc/foo</code> <code>xyz.json5</code> Default branch Gitea default with a tag <code>gitea&gt;abc/foo#1.2.3</code> <code>default</code> <code>https://gitea.com/abc/foo</code> <code>default.json</code> <code>1.2.3</code> Gitea with preset name with a tag <code>gitea&gt;abc/foo:xyz#1.2.3</code> <code>xyz</code> <code>https://gitea.com/abc/foo</code> <code>xyz.json</code> <code>1.2.3</code> Gitea with preset name and path with a tag <code>gitea&gt;abc/foo//path/xyz#1.2.3</code> <code>xyz</code> <code>https://gitea.com/abc/foo</code> <code>path/xyz.json</code> <code>1.2.3</code> Gitea with subpreset name and tag <code>gitea&gt;abc/foo:xyz/sub#1.2.3</code> <code>sub</code> <code>https://gitea.com/abc/foo</code> <code>xyz.json</code> <code>1.2.3</code>"},{"location":"config-presets/#forgejo","title":"Forgejo","text":"name example use preset resolves as filename Git tag Forgejo default <code>forgejo&gt;abc/foo</code> <code>default</code> <code>https://codeberg.org/abc/foo</code> <code>default.json</code> Default branch Forgejo with preset name <code>forgejo&gt;abc/foo:xyz</code> <code>xyz</code> <code>https://codeberg.org/abc/foo</code> <code>xyz.json</code> Default branch Forgejo with preset name (JSON5) <code>forgejo&gt;abc/foo:xyz.json5</code> <code>xyz</code> <code>https://codeberg.org/abc/foo</code> <code>xyz.json5</code> Default branch Forgejo default with a tag <code>forgejo&gt;abc/foo#1.2.3</code> <code>default</code> <code>https://codeberg.org/abc/foo</code> <code>default.json</code> <code>1.2.3</code> Forgejo with preset name with a tag <code>forgejo&gt;abc/foo:xyz#1.2.3</code> <code>xyz</code> <code>https://codeberg.org/abc/foo</code> <code>xyz.json</code> <code>1.2.3</code> Forgejo with preset name and path with a tag <code>forgejo&gt;abc/foo//path/xyz#1.2.3</code> <code>xyz</code> <code>https://codeberg.org/abc/foo</code> <code>path/xyz.json</code> <code>1.2.3</code> Forgejo with subpreset name and tag <code>forgejo&gt;abc/foo:xyz/sub#1.2.3</code> <code>sub</code> <code>https://codeberg.org/abc/foo</code> <code>xyz.json</code> <code>1.2.3</code>"},{"location":"config-presets/#self-hosted-git-current-git-server","title":"Self-hosted Git / current Git server","text":"<p>Note</p> <p>If you're self-hosting your platform, for instance a GitHub Enterprise Server instance, you'll want to use <code>local&gt;</code> to look up presets on the current Git server.  You can also use <code>local&gt;</code> if you're running on <code>github.com</code>, and this will work as if you had written <code>github&gt;</code>. This can make your presets more portable if you run across many different Git platforms.</p> <p>For instance, if you have <code>platform=github</code> and <code>endpoint=https://github.company.com</code>:</p> name example use preset resolves as filename Git tag Local default <code>local&gt;abc/foo</code> <code>default</code> <code>https://github.company.com/abc/foo</code> <code>default.json</code> Default branch Local with preset path <code>local&gt;abc/foo:xyz</code> <code>xyz</code> <code>https://github.company.com/abc/foo</code> <code>xyz.json</code> Default branch Local with preset path (JSON5) <code>local&gt;abc/foo:xyz.json5</code> <code>xyz</code> <code>https://github.company.com/abc/foo</code> <code>xyz.json5</code> Default branch Local with preset name and path <code>local&gt;abc/foo//path/xyz</code> <code>xyz</code> <code>https://github.company.com/abc/foo</code> <code>path/xyz.json</code> Default branch Local default with a tag <code>local&gt;abc/foo#1.2.3</code> <code>default</code> <code>https://github.company.com/abc/foo</code> <code>default.json</code> <code>1.2.3</code> Local with preset name with a tag <code>local&gt;abc/foo:xyz#1.2.3</code> <code>xyz</code> <code>https://github.company.com/abc/foo</code> <code>xyz.json</code> <code>1.2.3</code> Local with preset name and path with a tag <code>local&gt;abc/foo//path/xyz#1.2.3</code> <code>xyz</code> <code>https://github.company.com/abc/foo</code> <code>path/xyz.json</code> <code>1.2.3</code> Local with subpreset name and tag <code>local&gt;abc/foo:xyz/sub#1.2.3</code> <code>sub</code> <code>https://github.company.com/abc/foo</code> <code>xyz.json</code> <code>1.2.3</code> <p>Tip</p> <p>You can't combine the path and sub-preset syntaxes. This means that anything in the form <code>provider&gt;owner/repo//path/to/file:subsubpreset</code> is not supported. One workaround is to use distinct files instead of sub-presets.</p>"},{"location":"config-presets/#example-configs","title":"Example configs","text":"<p>An example of a small rule is <code>:preserveSemverRanges</code>, which has the description \"Preserve (but continue to upgrade) any existing SemVer ranges.\". It simply sets the configuration option <code>rangeStrategy</code> to <code>replace</code>.</p> <p>An example of a full config is <code>config:recommended</code>, which is Renovate's default configuration. It mostly uses Renovate config defaults but adds a few smart customizations such as grouping monorepo packages together.</p> <p>Note</p> <p>The <code>:xyz</code> naming convention (with <code>:</code> prefix) is shorthand for the <code>default:</code> presets. For example: <code>:xyz</code> is the same as <code>default:xyz</code>.</p>"},{"location":"config-presets/#how-to-use-preset-configs","title":"How to Use Preset Configs","text":"<p>By default, Renovate App's onboarding PR suggests the <code>[\"config:recommended\"]</code> preset. If you're self hosting, and want to use the <code>config:recommended</code> preset, then you must add <code>\"onboardingConfig\": { \"extends\": [\"config:recommended\"] }</code> to your self-hosted config.</p> <p>Read the Full Config Presets page to learn more about our <code>config:</code> presets.</p> <p>A typical onboarding <code>renovate.json</code> looks like this:</p> <pre><code>{\n  \"extends\": [\"config:recommended\"]\n}\n</code></pre> <p>Here's an example of using presets to change Renovate's behavior. You're happy with the <code>config:recommended</code> preset, but want Renovate to create PRs when you're not at the office. You look at our <code>schedule:</code> presets, and find the <code>schedule:nonOfficeHours</code> preset. You put <code>schedule:nonOfficeHours</code> in the <code>extends</code> array of your <code>renovate.json</code> file, like this:</p> <pre><code>{\n  \"extends\": [\"config:recommended\", \"schedule:nonOfficeHours\"]\n}\n</code></pre>"},{"location":"config-presets/#preset-parameters","title":"Preset Parameters","text":"<p>If you browse the \"default\" presets, you will see some that have parameters, e.g.:</p> <pre><code>{\n  \"labels\": {\n    \"description\": \"Apply labels &lt;code&gt;{{arg0}}&lt;/code&gt; and &lt;code&gt;{{arg1}}&lt;/code&gt; to PRs\",\n    \"labels\": [\"{{arg0}}\", \"{{arg1}}\"]\n  },\n  \"assignee\": {\n    \"description\": \"Assign PRs to &lt;code&gt;{{arg0}}&lt;/code&gt;\",\n    \"assignees\": [\"{{arg0}}\"]\n  }\n}\n</code></pre> <p>Here is how you would use these in your Renovate config:</p> <pre><code>{\n  \"extends\": [\":labels(dependencies,devops)\", \":assignee(renovate-tests)\"]\n}\n</code></pre> <p>In short, the number of <code>{{argx}}</code> parameters in the definition is how many parameters you need to provide. Parameters must be strings, non-quoted, and separated by commas if there are more than one.</p> <p>If you find that you are repeating config a lot, you might consider publishing one of these types of parameterized presets yourself. Or if you think your preset would be valuable for others, please contribute a PR to the Renovate repository, see Contributing to presets.</p> <p>Also, the entire parameter string is available as <code>{{args}}</code>. It includes everything between parentheses, verbatim, without the parentheses themselves. If you want to include a comma in the parameter value, you need to use <code>{{args}}</code> instead of <code>{{arg0}}</code>.</p>"},{"location":"config-presets/#github-hosted-presets","title":"GitHub-hosted Presets","text":"<p>To host your preset config on GitHub:</p> <ul> <li>Create a new repository. Normally you'd call it <code>renovate-config</code> but it can be named anything</li> <li>Add configuration files to this new repo for any presets you want to share. For the default preset, <code>default.json</code> will be checked. For named presets, <code>&lt;preset-name&gt;.json</code> will be loaded. For example, loading preset <code>library</code> would load <code>library.json</code>. No other files are necessary.</li> <li> <p>In other repos, reference it in an extends array like <code>\"github&gt;owner/name\"</code>, for example:</p> <pre><code>{\n  \"extends\": [\"github&gt;renovate-tests/renovate-config\"]\n}\n</code></pre> </li> </ul> <p>From then on Renovate will use the Renovate config from the preset repo's default branch. You do not need to add it as a devDependency or add any other files to the preset repo.</p>"},{"location":"config-presets/#gitlab-hosted-presets","title":"GitLab-hosted Presets","text":"<p>For a private GitLab repository Renovate requires at least <code>Reporter</code> level access.</p> <p>To host your preset config on GitLab:</p> <ul> <li>Create a new repository on GitLab. Normally you'd call it <code>renovate-config</code> but it can be named anything</li> <li>Add a <code>default.json</code> to this new repo containing the preset config. No other files are necessary</li> <li>In other repos, reference it in an extends array like <code>\"gitlab&gt;owner/name\"</code>, e.g. <code>\"gitlab&gt;renovate-tests/renovate-config\"</code></li> </ul>"},{"location":"config-presets/#gitea-hosted-presets","title":"Gitea-hosted Presets","text":"<p>To host your preset config on Gitea:</p> <ul> <li>Create a new repository on Gitea. Normally you'd call it <code>renovate-config</code> but you can use any name you want</li> <li>Add a <code>default.json</code> to this new repository containing the preset config. No other files are necessary</li> <li>In other repositories, reference it in an extends array like <code>\"gitea&gt;owner/name\"</code>, e.g. <code>\"gitea&gt;renovate-tests/renovate-config\"</code></li> </ul>"},{"location":"config-presets/#forgejo-hosted-presets","title":"Forgejo-hosted Presets","text":"<p>To host your preset config on Forgejo:</p> <ul> <li>Create a new repository on Forgejo. Normally you'd call it <code>renovate-config</code> but you can use any name you want</li> <li>Add a <code>default.json</code> to this new repository containing the preset config. No other files are necessary</li> <li>In other repositories, reference it in an extends array like <code>\"forgejo&gt;owner/name\"</code>, e.g. <code>\"forgejo&gt;renovate-tests/renovate-config\"</code></li> </ul>"},{"location":"config-presets/#local-presets","title":"Local presets","text":"<p>Renovate also supports local presets, e.g. presets that are hosted on the same platform as the target repository. This is especially helpful in self-hosted scenarios where public presets cannot be used. Local presets are specified either by leaving out any prefix, e.g. <code>owner/name</code>, or explicitly by adding a <code>local&gt;</code> prefix, e.g. <code>local&gt;owner/name</code>. Renovate will determine the current platform and look up the preset from there.</p>"},{"location":"config-presets/#relative-preset-references","title":"Relative preset references","text":"<p>Presets can reference other presets from the same repository with a relative path. Renovate resolves the relative reference to the source, repository and tag of the preset which contains the reference. This means you can move or fork a preset repository, or pin it to a tag, without editing the references inside the presets.</p> Syntax Resolves relative to <code>./x</code> the directory of the preset file with the reference <code>../x</code> the parent directory of the preset file with the reference <code>/x</code> the root of the preset repository <p>For example, take a preset repository with this layout:</p> <pre><code>default.json\nsystem/registries.json\nsecurity/base.json\n</code></pre> <p>The <code>default.json</code> file can reference the other presets like this:</p> <pre><code>{\n  \"extends\": [\"./system/registries\", \"/security/base\"]\n}\n</code></pre> <p>If a repository extends <code>github&gt;org/repo#v2.0.0</code>, then Renovate resolves the two references to <code>github&gt;org/repo//system/registries#v2.0.0</code> and <code>github&gt;org/repo//security/base#v2.0.0</code>. The tag <code>v2.0.0</code> is inherited, so all presets are read from the same tag.</p> <p>Note</p> <p>Relative references only work inside presets. Renovate does not accept them in a repository's own <code>renovate.json</code>, in an inherited config, or in <code>globalExtends</code>. The <code>renovate-config-validator</code> accepts relative references in any file, so a relative reference in a repository's own config only fails when Renovate runs, and not during validation.</p> <p>Some more things to know about relative references:</p> <ul> <li>You can not add a <code>#tag</code> to a relative reference, because the tag is always inherited from the referencing preset</li> <li>A relative reference always points to a preset file, you can not reference a sub-preset key inside a file with a relative reference, this is the same limitation as for the <code>//path</code> syntax</li> <li>Relative references are supported for <code>github</code>, <code>gitlab</code>, <code>gitea</code>, <code>forgejo</code> and <code>local</code> presets</li> <li>Parameters are supported, for example <code>./group(eslint)</code>, and the parameters may contain a Handlebars template like <code>./group({{ env.TEAM }})</code></li> <li>References whose path contains a Handlebars template, like <code>./{{ env.SOME_VAR }}/base</code>, are not rewritten, so they fail to resolve</li> <li>The <code>ignorePresets</code> entries of a preset may also use the relative form, Renovate resolves them in the same way as the <code>extends</code> entries of that preset</li> <li>A reference which resolves to the <code>default</code> preset at the root of the repository, like <code>/default</code>, is resolved to the plain repository form such as <code>github&gt;org/repo#v2.0.0</code></li> </ul> <p>Note</p> <p>Relative references inside an <code>onboardingConfig</code> are canonicalized as well, including the inherited tag. This means an onboarded repository gets an absolute preset string like <code>github&gt;org/repo//system/registries#v2.0.0</code>, which resolves from that repository.</p>"},{"location":"config-presets/#ignoring-relative-references","title":"Ignoring relative references","text":"<p>Renovate matches <code>ignorePresets</code> entries against the preset string which it resolved, and not against the relative reference which is written inside the preset. This means you must always use the absolute form, including the inherited tag.</p> <p>Take the repository from above. A repository which extends that catalog can skip <code>security/base.json</code> like this:</p> <pre><code>{\n  \"extends\": [\"github&gt;org/repo#v2.0.0\"],\n  \"ignorePresets\": [\"github&gt;org/repo//security/base#v2.0.0\"]\n}\n</code></pre> <p>This works at any depth, so a preset which is only reached through another preset, for example a <code>/security/base</code> reference inside <code>system/registries.json</code>, is skipped in the same way.</p> <p>Using the relative form does not work, because the references are already resolved when the <code>ignorePresets</code> entries are matched:</p> <pre><code>{\n  \"extends\": [\"github&gt;org/repo#v2.0.0\"],\n  \"ignorePresets\": [\"/security/base\"]\n}\n</code></pre> <p>To find the absolute string of a preset, run Renovate with <code>LOG_LEVEL=debug</code> and read the <code>visitedPresets</code> field of the <code>Resolved shallow config, without merging internal presets</code> message. It lists every merged preset in its absolute form.</p> <p>A preset may also ignore the presets which it pulls in itself, and may use the relative form for that:</p> <pre><code>{\n  \"extends\": [\"./system/registries\"],\n  \"ignorePresets\": [\"/security/base\"]\n}\n</code></pre> <p>Note</p> <p>Renovate uses the <code>ignorePresets</code> of the repository config when there is one, and only falls back to the <code>ignorePresets</code> of a preset otherwise. A preset can therefore only ignore its own references when the repository which extends it does not set <code>ignorePresets</code>.</p> <p>If a relative reference can not be resolved, for example because it escapes the repository root, then Renovate keeps the raw reference. Use that raw string to neutralize it:</p> <pre><code>{\n  \"extends\": [\"github&gt;org/repo#v2.0.0\"],\n  \"ignorePresets\": [\"../oops\"]\n}\n</code></pre> <p>Warning</p> <p>A relative reference which cannot be resolved causes a configuration error in every repository which extends the preset. Preset authors should therefore validate their preset repository in CI, for example with the <code>renovate-config-validator</code> CLI.</p>"},{"location":"config-presets/#fetching-presets-from-an-http-server","title":"Fetching presets from an HTTP server","text":"<p>If your desired platform is not yet supported, or if you want presets to work when you run Renovate with <code>--platform=local</code>, you can specify presets using HTTP URLs:</p> <pre><code>{\n  \"extends\": [\n    \"http://my.server/users/me/repos/renovate-presets/raw/default.json?at=refs%2Fheads%2Fmain\"\n  ]\n}\n</code></pre> <p>Parameters are supported similar to other methods:</p> <pre><code>{\n  \"extends\": [\n    \"http://my.server/users/me/repos/renovate-presets/raw/default.json?at=refs%2Fheads%2Fmain(param)\"\n  ]\n}\n</code></pre> <p>Note</p> <p>Renovate warns about HTTP requests to internal hosts (loopback, private ranges, and similar) by default, and can be set to block them - see <code>internalHostAccess</code>. Because a preset's response becomes configuration, fetching presets from an internal host needs a deliberate grant from the self-hosted administrator: a <code>hostRules</code> entry in their own configuration setting <code>allowInternal=true</code>, scoped with a <code>hostType</code> or a URL-prefix <code>matchHost</code>. This applies to <code>npm:</code> presets too, where the scoped grant names the registry, for example <code>{ \"matchHost\": \"https://registry.corp/\", \"hostType\": \"npm\", \"allowInternal\": true }</code>.</p>"},{"location":"config-presets/#templating-presets","title":"Templating presets","text":"<p>You can use Handlebars templates to be flexible with your presets. This can be handy when you want to include presets conditionally.</p> <p>Note</p> <p>The template only supports a small subset of options, but you can extend them via <code>customEnvVariables</code>.</p> <p>Read the templates section to learn more.</p>"},{"location":"config-presets/#example-use-case","title":"Example use-case","text":"<p>The following example shows a self-hosted Renovate preset located in a GitLab repository called <code>renovate/presets</code>.</p> <pre><code>{\n  \"extends\": [\"local&gt;renovate/presets\"]\n}\n</code></pre> <p>Usually you want to validate the preset before you put it in your Renovate configuration Here is an example of how you can use templating to validate and load the preset on a branch level:</p> <pre><code>// config.js\nmodule.exports = {\n  customEnvVariables: {\n    GITLAB_REF: process.env.CI_COMMIT_REF_NAME || 'main',\n  },\n  extends: ['local&gt;renovate/presets#{{ env.GITLAB_REF }}'],\n};\n</code></pre>"},{"location":"config-presets/#contributing-to-presets","title":"Contributing to presets","text":"<p>Have you configured a rule that could help others? Please consider contributing it to the Renovate repository so that it gains higher visibility and saves others from reinventing the same thing.</p> <p>Create a discussion to propose your preset to the Renovate maintainers. The maintainers can also help improve the preset, and let you know where to put it in the code. If you are proposing a \"monorepo\" preset addition then it's OK to raise a PR directly as that can be more efficient than a GitHub Discussion.</p>"},{"location":"config-presets/#grouporganization-level-presets","title":"Group/Organization level presets","text":"<p>Whenever repository onboarding happens, Renovate checks for a a default config to extend. Renovate will check for a repository called <code>renovate-config</code> with a <code>default.json</code> file in the parent user/group/org of the repository. On platforms that support nested groups (e.g. GitLab), Renovate will check for this repository at each level of grouping, from nearest to furthest, and use the first one it finds. On all platforms, it will then look for a repository named like <code>.{{platform}}</code> (e.g. <code>.github</code>) with a <code>renovate-config.json</code>, under the same top-level user/group/org.</p> <p>If found, that repository's preset will be suggested as the sole extended preset, and any existing <code>onboardingConfig</code> config will be ignored/overridden. For example the result may be:</p> <pre><code>{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"extends\": [\"local&gt;myorgname/.github:renovate-config\"]\n}\n</code></pre>"},{"location":"config-presets/#npm-hosted-presets","title":"npm-hosted presets","text":"<p>Warning</p> <p>Using npm-hosted presets is deprecated, we recommend you do not follow these instructions and instead use a <code>local</code> preset.</p> <p>If you manage multiple repositories using Renovate and want the same custom config across all or most of them, then you might want to consider publishing your own preset config so that you can \"extend\" it in every applicable repository. That way when you want to change your Renovate configuration you can make the change in one location rather than having to copy/paste it to every repository individually.</p> <p>Let's say that your username on npm and elsewhere is \"fastcore\". In that case, you can choose between publishing your preset config package as <code>@fastcore/renovate-config</code> or <code>renovate-config-fastcore</code>. Let's assume you choose <code>renovate-config-fastcore</code> as the package name.</p> <p>You then need to publish the <code>renovate-config-fastcore</code> package where the <code>package.json</code> has the field <code>renovate-config</code> and then put your config under the field <code>default</code>. For example:</p> <pre><code>{\n  \"name\": \"renovate-config-fastcore\",\n  \"version\": \"0.0.1\",\n  \"renovate-config\": {\n    \"default\": {\n      \"extends\": [\"config:recommended\", \"schedule:nonOfficeHours\"]\n    }\n  }\n}\n</code></pre> <p>Then in each of your repositories you can add your Renovate config like:</p> <pre><code>{\n  \"extends\": [\"fastcore\"]\n}\n</code></pre> <p>Any repository including this config will then adopt the rules of the default <code>library</code> preset but schedule it on weeknights or weekends.</p> <p>If you prefer to publish using the namespace <code>@fastcore/renovate-config</code> then you would use the <code>@</code> prefix instead:</p> <pre><code>{\n  \"extends\": [\"@fastcore\"]\n}\n</code></pre>"},{"location":"config-validation/","title":"Config Validation","text":"<p>You can check your Renovate configuration with a standalone program called <code>renovate-config-validator</code>. All <code>renovate</code> distributions include this program.</p>"},{"location":"config-validation/#default-behavior","title":"Default behavior","text":"<p>When you run <code>renovate-config-validator</code> with no arguments it will check:</p> <ul> <li>all default locations (if files exist)</li> <li>the <code>RENOVATE_CONFIG_FILE</code> environment variable</li> </ul> <p>For example:</p> <pre><code>$ npx --yes --package renovate -- renovate-config-validator\n INFO: Validating renovate.json\n INFO: Config validated successfully\n</code></pre> <p>If you want to run <code>renovate-config-validator</code> while using a custom filename for your renovate config file, you will need to pass the filename as cli argument.</p>"},{"location":"config-validation/#strict-mode","title":"Strict mode","text":"<p>By default, the validator program fails with a non-zero exit code if there are any validation warnings or errors. You can pass the <code>--strict</code> flag to make it fail if a scanned config needs migration:</p> Strict mode validation<pre><code>$ npx --yes --package renovate -- renovate-config-validator --strict\n INFO: Validating renovate.json\n WARN: Config migration necessary\n       \"oldConfig\": {\n         \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n         \"extends\": [ \"config:base\" ]\n       },\n       \"newConfig\": {\n         \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n         \"extends\": [ \"config:recommended\" ]\n       },\n</code></pre>"},{"location":"config-validation/#pass-file-to-check-as-cli-arguments","title":"Pass file to check as CLI arguments","text":"<p>You can pass the file you want to check to the <code>renovate-config-validator</code> program with a CLI argument. This can be handy to check a config file with a non-default name, like when you're using preset repositories. For example:</p> <pre><code>$ npx --yes --package renovate -- renovate-config-validator first_config.json\n INFO: Validating first_config_.json\n INFO: Config validated successfully\n</code></pre> <p>Note</p> <p>If you specify the filename, <code>renovate-config-validator</code> treats the file(s) as global self-hosted configuration instead of repo-level configuration. If this isn't intentional - for instance if you're validating a shared config preset or a non-standard filename - make sure you specify <code>--no-global</code>, i.e. <code>renovate-config-validator --no-global go-presets.json</code>.</p>"},{"location":"config-validation/#providing-global-configuration","title":"Providing global configuration","text":"<p>If <code>renovate-config-validator</code> detects a <code>config.js</code>, or any global self-hosed environment variables, they will be set as global configuration.</p> <p>For instance, if you had a <code>config.js</code>:</p> <pre><code>module.exports = {\n  // to mirror the Mend-hosted Renovate\n  globalExtends: ['global:safeEnv'],\n};\n</code></pre> <p>And a <code>renovate.json</code>:</p> <pre><code>{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"env\": {\n    \"GONOSUMDB\": \"off\"\n  }\n}\n</code></pre> <p>The <code>renovate-config-validator</code> would allow this to pass.</p>"},{"location":"config-validation/#validate-your-config-automatically","title":"Validate your config automatically","text":"<p>You can create a pre-commit hook to validate your configuration automatically. Go to the <code>renovatebot/pre-commit-hooks</code> repository for more information.</p>"},{"location":"config-validation/#validation-of-renovate-config-change-prs","title":"Validation of Renovate config change PRs","text":"<p>Tip</p> <p>Using the Mend-hosted apps? Push a branch to <code>renovate/reconfigure</code> for feedback (via status check), and if there's a PR, Renovate will add comments to it!</p> <p>Renovate can validate configuration changes in Pull Requests when you use a special branch name.</p> <p>Follow these steps to validate your configuration:</p> <ol> <li>Create a new Git branch that matches the <code>{{branchPrefix}}reconfigure</code> pattern. For example, if you're using the default prefix <code>renovate/</code>, your branch name must be <code>renovate/reconfigure</code>.</li> <li>Commit your updated Renovate config file to this branch, and push it to your Git hosting platform.</li> </ol> <p>The next time Renovate runs on that repo it will:</p> <ol> <li>Search for a branch that matches the special reconfigure pattern.</li> <li>Check for a config file in the reconfigure branch. Renovate can even find a renamed configuration file (compared to the config file in the default branch).</li> <li>Add a passing or failing status to the branch, depending on the outcome of the config validation run.</li> <li>If there's an open pull request with validation errors from the reconfigure branch then Renovate comments in the PR with details.</li> <li>Validate each commit the next time Renovate runs on the repository, until the PR is merged.</li> </ol> <p>Note</p> <p>The reconfigure branch must be pushed to the source repository that Renovate runs against, not a fork.</p>"},{"location":"configuration-options/","title":"Configuration Options","text":"<p>This document describes all the configuration options you may use in a Renovate configuration file. Any config you define applies to the whole repository (e.g. if you have a monorepo).</p> <p>A <code>subtype</code> in the configuration table specifies what type you're allowed to use within the main element.</p> <p>If a config option has a <code>parent</code> defined, it means it's only allowed to configure it within an object with the parent name, such as <code>packageRules</code> or <code>hostRules</code>.</p> <p>When an array or object configuration option is <code>mergeable</code>, it means that values inside it will be added to any existing object or array that existed with the same name.</p> <p>Tip</p> <p>This documentation corresponds with the JSON schema in <code>docs.renovatebot.com/renovate-schema.json</code>.</p> <p>Note</p> <p>Config options with <code>type=string</code> are always non-mergeable, so <code>mergeable=false</code>.</p>"},{"location":"configuration-options/#locations-for-configuration-filenames","title":"Locations for configuration filenames","text":"<p>You can store your Renovate configuration file in one of these locations:</p> <ol> <li><code>renovate.json</code></li> <li><code>renovate.jsonc</code></li> <li><code>renovate.json5</code></li> <li><code>.github/renovate.json</code></li> <li><code>.github/renovate.jsonc</code></li> <li><code>.github/renovate.json5</code></li> <li><code>.gitlab/renovate.json</code></li> <li><code>.gitlab/renovate.jsonc</code></li> <li><code>.gitlab/renovate.json5</code></li> <li><code>.renovaterc</code></li> <li><code>.renovaterc.json</code></li> <li><code>.renovaterc.jsonc</code></li> <li><code>.renovaterc.json5</code></li> <li><code>package.json</code> (within a <code>\"renovate\"</code> section)</li> </ol> <p>Also, be sure to check out Renovate's shareable config presets to save yourself from reinventing any wheels. Shareable config presets work with JSON and JSON5 file formats.</p> <p>If you have any questions about the config options, or want to get help/feedback about a config, go to the discussions tab in the Renovate repository and start a new \"Request Help\" discussion. We will do our best to answer your question(s).</p> <p>Or in a custom file present within the <code>configFileNames</code>.</p> <p>When Renovate runs on a repository, it tries to find the configuration files in the order listed above. Renovate first checks all the files in the <code>configFileNames</code> array before checking from the above file list. Renovate stops the search after it finds the first match.</p> <p>Warning</p> <p>Storing the Renovate configuration in a <code>package.json</code> file is deprecated and support may be removed in the future.</p> <p>Note</p> <p>Renovate supports <code>JSONC</code> for <code>.json</code> files and any config files without file extension (e.g. <code>.renovaterc</code>). We also recommend you prefer using a <code>.jsonc</code> file if you want to add comments to your configuration, instead of a <code>.json5</code> file. Using an explicit <code>.jsonc</code> file is preferred over using a <code>.json</code> file with comments, as it can cause issues with editors and syntax highlighting.</p> <p>Renovate always uses the config from the repository's default branch, even if that configuration specifies <code>baseBranchPatterns</code>. Renovate does not read/override the config from within each base branch if present.</p>"},{"location":"configuration-options/#abandonmentthreshold","title":"<code>abandonmentThreshold</code>","text":"<p>Flags packages that have not been updated within this period as abandoned.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type string cli <code>--abandonment-threshold</code> env <code>RENOVATE_ABANDONMENT_THRESHOLD</code> <p>The <code>abandonmentThreshold</code> option allows Renovate to flag packages as abandoned when they haven't received updates for a specified period of time.</p> <p>Renovate adds an <code>isAbandoned</code> boolean property to the package lookup result when:</p> <ul> <li><code>abandonmentThreshold</code> is defined (not <code>null</code>)</li> <li>The package has a <code>mostRecentTimestamp</code> timestamp available from the datasource</li> </ul> <p>The <code>mostRecentTimestamp</code> timestamp represents the release date of the highest version, but only if that version also has the most recent timestamp among all releases. This ensures abandonment detection is based on normal package release patterns.</p> <p>If a package's most recent release date plus the <code>abandonmentThreshold</code> duration is in the past, the package is marked as abandoned (<code>isAbandoned: true</code>).</p> <p>This option accepts time duration strings like <code>1 year</code>, <code>6 months</code>, <code>90 days</code>, etc.</p> <p>Example usage:</p> <pre><code>{\n  \"abandonmentThreshold\": \"2 years\"\n}\n</code></pre> <p>You can also apply this setting selectively using <code>packageRules</code>:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"npm\"],\n      \"abandonmentThreshold\": \"1 year\"\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#addlabels","title":"<code>addLabels</code>","text":"<p>Labels to add to Pull Request.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type array subType string mergeable true supportsTemplating true cli <code>--add-labels</code> env <code>RENOVATE_ADD_LABELS</code> default <code>[]</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>The <code>labels</code> field is non-mergeable, meaning that any config setting a list of PR labels will replace any existing list. If you want to append labels for matched rules, then define an <code>addLabels</code> array with one (or more) label strings. All matched <code>addLabels</code> strings will be attached to the PR.</p> <p>Consider this example:</p> <pre><code>{\n  \"labels\": [\"dependencies\"],\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"/eslint/\"],\n      \"labels\": [\"linting\"]\n    },\n    {\n      \"matchDepTypes\": [\"optionalDependencies\"],\n      \"addLabels\": [\"optional\"]\n    }\n  ]\n}\n</code></pre> <p>With the above config:</p> <ul> <li>Optional dependencies will have the labels <code>dependencies</code> and <code>optional</code></li> <li>ESLint dependencies will have the label <code>linting</code></li> <li>All other dependencies will have the label <code>dependencies</code></li> </ul> <p>If you want to use dynamic labels, you can use templates such as this example using <code>depName</code> for <code>addLabels</code>:</p> <pre><code>{\n  \"addLabels\": [\"{{depName}}\"]\n}\n</code></pre> <p>Note</p> <p>Keep your labels within the maximum character limit for your Git hosting platform. Renovate usually truncates labels to 50 characters, except for GitLab, which has a 255 character limit.</p>"},{"location":"configuration-options/#additionalbranchprefix","title":"<code>additionalBranchPrefix</code>","text":"<p>Additional string value to be appended to <code>branchPrefix</code>.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string default <code>\"\"</code> supportsTemplating true env <code>RENOVATE_ADDITIONAL_BRANCH_PREFIX</code> previouslyKnownAs <pre><code>[\"managerBranchPrefix\"]\n</code></pre> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>By default, the value for this config option is an empty string. Normally you don't need to set this config option.</p> <p>Here's an example where <code>additionalBranchPrefix</code> can help you. Say you're using a monorepo and want to split pull requests based on the location of the package definition, so that individual teams can manage their own Renovate pull requests. This can be done with this configuration:</p> <pre><code>{\n  \"additionalBranchPrefix\": \"{{parentDir}}-\"\n}\n</code></pre>"},{"location":"configuration-options/#additionalreviewers","title":"<code>additionalReviewers</code>","text":"<p>Additional reviewers for Pull Requests (in contrast to <code>reviewers</code>, this option adds to the existing reviewer list, rather than replacing it).</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type array subType string mergeable true cli <code>--additional-reviewers</code> env <code>RENOVATE_ADDITIONAL_REVIEWERS</code> default <code>[]</code> <p>This option adds to the existing reviewer list, rather than replacing it like <code>reviewers</code>.</p> <p>Use <code>additionalReviewers</code> when you want to add to a preset or base list, without replacing the original. For example, when adding focused reviewers for a specific package group.</p> <p>Please note that Reviewers are only added during creation of a PR, but are not modified afterwards.</p>"},{"location":"configuration-options/#assignautomerge","title":"<code>assignAutomerge</code>","text":"<p>Assign reviewers and assignees even if the PR is to be automerged.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> cli <code>--assign-automerge</code> env <code>RENOVATE_ASSIGN_AUTOMERGE</code> <p>By default, Renovate will not assign reviewers and assignees to an automerge-enabled PR unless it fails status checks. By configuring this setting to <code>true</code>, Renovate will instead always assign reviewers and assignees for automerging PRs at time of creation.</p>"},{"location":"configuration-options/#assignees","title":"<code>assignees</code>","text":"<p>Assignees for Pull Request (either username or email address depending on the platform).</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type array subType string cli <code>--assignees</code> env <code>RENOVATE_ASSIGNEES</code> default <code>[]</code> <p>Must be valid usernames on the platform in use. Teams are not supported, and Renovate passes <code>team:</code> entries to the platform unchanged. To request a review from a team, use <code>reviewers</code> instead.</p>"},{"location":"configuration-options/#assigneesfromcodeowners","title":"<code>assigneesFromCodeOwners</code>","text":"<p>Determine assignees based on configured code owners and changes in PR.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> cli <code>--assignees-from-code-owners</code> env <code>RENOVATE_ASSIGNEES_FROM_CODE_OWNERS</code> <p>If enabled Renovate tries to determine PR assignees by matching rules defined in a CODEOWNERS file against the changes in the PR.</p> <p>Read the docs for your platform for details on syntax and allowed file locations:</p> <ul> <li>GitHub Docs, About code owners</li> <li>GitLab, Code Owners</li> <li>Bitbucket, Set up and use code owners</li> </ul>"},{"location":"configuration-options/#assigneessamplesize","title":"<code>assigneesSampleSize</code>","text":"<p>Take a random sample of given size from <code>assignees</code>.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type integer cli <code>--assignees-sample-size</code> env <code>RENOVATE_ASSIGNEES_SAMPLE_SIZE</code> <p>If configured, Renovate will take a random sample of given size from assignees and assign them only, instead of assigning the entire list of <code>assignees</code> you have configured.</p>"},{"location":"configuration-options/#autoapprove","title":"<code>autoApprove</code>","text":"<p>Set to <code>true</code> to automatically approve PRs.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> supportedPlatforms azure, gerrit, gitlab cli <code>--auto-approve</code> env <code>RENOVATE_AUTO_APPROVE</code> previouslyKnownAs <pre><code>[\"azureAutoApprove\"]\n</code></pre> <p>Setting this to <code>true</code> will automatically approve the PRs.</p> <p>You can also configure this using <code>packageRules</code> if you want to use it selectively (e.g. per-package).</p>"},{"location":"configuration-options/#autoreplaceglobalmatch","title":"<code>autoReplaceGlobalMatch</code>","text":"<p>Control whether replacement regular expressions are global matches or only the first match.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>true</code> cli <code>--auto-replace-global-match</code> env <code>RENOVATE_AUTO_REPLACE_GLOBAL_MATCH</code> <p>Setting this to <code>false</code> will replace only the first match during replacements updates.</p> <p>Disabling this is useful for situations where values are repeated within the dependency string, such as when the <code>currentVersion</code> is also featured somewhere within the <code>currentDigest</code>, but you only want to replace the first instance.</p> <p>Consider this example:</p> <pre><code>FROM java:8@sha256:0e8b2a860\n</code></pre> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"java\"],\n      \"replacementName\": \"eclipse-temurin\",\n      \"replacementVersion\": \"11\"\n    }\n  ]\n}\n</code></pre> <p>With the above replacement scenario, the current dependency has a version of <code>8</code>, which also features several times within the digest section.</p> <p>When using the default <code>autoReplaceGlobalMatch</code> configuration, Renovate will try to replace all instances of <code>8</code> within the dependency string with the <code>replacementVersion</code> value of <code>11</code>. This will replace more than is intended and will be caught during replacement validation steps, resulting in the replacement PR to not be created.</p> <p>When setting <code>autoReplaceGlobalMatch</code> configuration to <code>false</code>, Renovate will only replace the first occurrence of <code>8</code> and will successfully create a replacement PR.</p>"},{"location":"configuration-options/#automerge","title":"<code>automerge</code>","text":"<p>Whether to automerge branches/PRs automatically, without human intervention.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> cli <code>--automerge</code> env <code>RENOVATE_AUTOMERGE</code> <p>By default, Renovate raises PRs but leaves them to someone or something else to merge them. By configuring this setting, you allow Renovate to automerge PRs or even branches. Using automerge reduces the amount of human intervention required.</p> <p>Usually you won't want to automerge all PRs, for example most people would want to leave major dependency updates to a human to review first. You could configure Renovate to automerge all but major this way:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchUpdateTypes\": [\"minor\", \"patch\", \"pin\", \"digest\"],\n      \"automerge\": true\n    }\n  ]\n}\n</code></pre> <p>Also note that this option can be combined with other nested settings, such as dependency type. So for example you could choose to automerge all (passing) <code>devDependencies</code> only this way:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDepTypes\": [\"devDependencies\"],\n      \"automerge\": true\n    }\n  ]\n}\n</code></pre> <p>Note</p> <p>Branches creation follows <code>schedule</code> and the automerge follows <code>automergeSchedule</code>.</p> <p>Note</p> <p>On Azure there can be a delay between a PR being set as completed by Renovate, and Azure merging the PR / finishing its tasks. Renovate tries to delay until Azure is in the expected state, but it will continue if it takes too long. In some cases this can result in a dependency not being merged, and a fresh PR being created for the dependency.</p> <p>Note</p> <p>By default, Renovate will not assign reviewers and assignees to an automerge-enabled PR unless it fails status checks. By configuring <code>assignAutomerge</code> setting to <code>true</code>, Renovate will instead always assign reviewers and assignees for automerging PRs at time of creation.</p> <p>Automerge and GitHub branch protection rules</p> <p>You must select at least one status check in the Require status checks to pass before merging section of your branch protection rules on GitHub, if you match all three conditions:</p> <ul> <li><code>automerge=true</code></li> <li><code>platformAutomerge=true</code>, Renovate defaults to <code>true</code></li> <li>You use GitHub's Require status checks to pass before merging branch protection rule</li> </ul> <p>If you don't select any status check, and you use platform automerge, then GitHub might automerge PRs with failing tests!</p>"},{"location":"configuration-options/#automergecomment","title":"<code>automergeComment</code>","text":"<p>PR comment to add to trigger automerge. Only used if <code>automergeType=pr-comment</code>.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string default <code>\"automergeComment\"</code> cli <code>--automerge-comment</code> env <code>RENOVATE_AUTOMERGE_COMMENT</code> <p>Use this only if you configure <code>automergeType=\"pr-comment\"</code>.</p> <p>Example use:</p> <pre><code>{\n  \"automerge\": true,\n  \"automergeType\": \"pr-comment\",\n  \"automergeComment\": \"bors: r+\"\n}\n</code></pre>"},{"location":"configuration-options/#automergeschedule","title":"<code>automergeSchedule</code>","text":"<p>Limit automerge to these times of day or week.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type array subType string cli <code>--automerge-schedule</code> default <pre><code>[\"at any time\"]\n</code></pre> <p>Use the <code>automergeSchedule</code> option to define times of week or month during which Renovate may automerge its PRs. The default value for <code>automergeSchedule</code> is \"at any time\", which functions the same as setting a <code>null</code> schedule. To configure this option refer to <code>schedule</code> as the syntax is the same.</p> <p>Warning</p> <p>When <code>platformAutomerge</code> is enabled, Renovate enqueues the platform PR automerge at time of creation, so the schedule specified in <code>automergeSchedule</code> cannot be followed. If it's essential that automerging only happens within the specific <code>automergeSchedule</code> time window, then you need to set <code>platformAutomerge</code> to <code>false</code> and instead rely on Renovate's automerge instead of the platform one.</p>"},{"location":"configuration-options/#automergestrategy","title":"<code>automergeStrategy</code>","text":"<p>The merge strategy to use when automerging PRs. Used only if <code>automergeType=pr</code>.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string allowedValues <pre><code>[\"auto\", \"fast-forward\", \"merge-commit\", \"rebase\", \"rebase-merge\", \"squash\"]\n</code></pre> default <code>\"auto\"</code> supportedPlatforms azure, bitbucket, forgejo, gitea, github cli <code>--automerge-strategy</code> env <code>RENOVATE_AUTOMERGE_STRATEGY</code> <p>The automerge strategy defaults to <code>auto</code>, so Renovate decides how to merge pull requests as best it can. If possible, Renovate follows the merge strategy set on the platform itself for the repository.</p> <p>If you've set <code>automerge=true</code> and <code>automergeType=pr</code> for any of your dependencies, then you may choose what automerge strategy Renovate uses by setting the <code>automergeStrategy</code> config option. If you're happy with the default behavior, you don't need to do anything.</p> <p>On supported platforms, <code>automergeStrategy</code> also applies when using platform-native automerge.</p> <p>You may choose from these values:</p> <ul> <li><code>auto</code>, Renovate decides how to merge</li> <li><code>fast-forward</code>, \"fast-forwarding\" the main branch reference, no new commits in the resultant tree</li> <li><code>merge-commit</code>, create a new merge commit</li> <li><code>rebase</code>, rewrite history as part of the merge, but usually keep the individual commits</li> <li><code>rebase-merge</code>, create a new merge commit, but rebase the commits prior merging (azure-only)</li> <li><code>squash</code>, flatten the commits that are being merged into a single new commit</li> </ul> <p>Platforms may only support some of these merge strategies.</p> <p>If the chosen automerge strategy is not supported on your platform then Renovate stops automerging. In that case you'll have to set a supported automerge strategy.</p>"},{"location":"configuration-options/#automergetype","title":"<code>automergeType</code>","text":"<p>How to automerge, if enabled.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string allowedValues <pre><code>[\"branch\", \"pr\", \"pr-comment\"]\n</code></pre> default <code>\"pr\"</code> cli <code>--automerge-type</code> env <code>RENOVATE_AUTOMERGE_TYPE</code> <p>This setting is only applicable if you opt in to configure <code>automerge</code> to <code>true</code> for any of your dependencies.</p> <p>Automerging defaults to using Pull Requests (<code>automergeType=\"pr\"</code>). In that case Renovate first creates a branch and associated Pull Request, and then automerges the PR on a subsequent run once it detects the PR's status checks are \"green\". If by the next run the PR is already behind the base branch it will be automatically rebased, because Renovate only automerges branches which are up-to-date and green. If Renovate is scheduled for hourly runs on the repository but commits are made every 15 minutes to the main branch, then an automerge like this will keep getting deferred with every rebase.</p> <p>Tip</p> <p>If you have no tests but still want Renovate to automerge, you need to add <code>\"ignoreTests\": true</code> to your configuration.</p> <p>If you prefer that Renovate more silently automerge without Pull Requests at all, you can configure <code>\"automergeType\": \"branch\"</code>. In this case Renovate will:</p> <ul> <li>Create the branch, wait for test results</li> <li>Rebase it any time it gets out of date with the base branch</li> <li>Automerge the branch commit if it's: (a) up-to-date with the base branch, and (b) passing all tests</li> <li>As a backup, raise a PR only if either: (a) tests fail, or (b) tests remain pending for too long (default: 25 hours, see <code>prNotPendingHours</code>)</li> </ul> <p>Note that <code>\"automergeType\": \"branch\"</code> only works with GitHub merge queues or GitLab merge trains if Renovate is on the merge queue's bypass list, because the merge queue does not allow pushing directly to the base branch otherwise. If the push is rejected, Renovate falls back to creating a PR.</p> <p>The final value for <code>automergeType</code> is <code>\"pr-comment\"</code>, intended only for users who already have a \"merge bot\" such as bors-ng and want Renovate to not actually automerge by itself and instead tell <code>bors-ng</code> to merge for it, by using a comment in the PR. If you're not already using <code>bors-ng</code> or similar, don't worry about this option.</p>"},{"location":"configuration-options/#azureworkitemid","title":"<code>azureWorkItemId</code>","text":"<p>The id of an existing work item on Azure Boards to link to each PR.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type integer default 0 supportedPlatforms azure cli <code>--azure-work-item-id</code> env <code>RENOVATE_AZURE_WORK_ITEM_ID</code> <p>When creating a PR in Azure DevOps, some branches can be protected with branch policies to check for linked work items. Creating a work item in Azure DevOps is beyond the scope of Renovate, but Renovate can link an already existing work item when creating PRs.</p>"},{"location":"configuration-options/#azureworkitemtype","title":"<code>azureWorkItemType</code>","text":"<p>The work item type Renovate uses for its issues (e.g. the Dependency Dashboard) on Azure DevOps.</p> Name Value scopes repo type string default <code>\"Issue\"</code> supportedPlatforms azure cli <code>--azure-work-item-type</code> env <code>RENOVATE_AZURE_WORK_ITEM_TYPE</code> <p>The work item type Renovate uses when creating its issues (such as the Dependency Dashboard) on Azure DevOps.</p> <p>Azure DevOps has no dedicated \"issue\" concept, so Renovate creates a work item instead. It defaults to the <code>Issue</code> type, which only exists in the <code>Basic</code> process. Projects using another process (for example <code>Agile</code> or <code>Scrum</code>), or a custom inherited process, may not have an <code>Issue</code> type, in which case creation fails. Set this to a work item type that exists in your project, such as <code>Task</code>.</p> <p>Note</p> <p>Renovate finds its existing issues by title, not by work item type. If you change <code>azureWorkItemType</code> while an issue (such as the Dependency Dashboard) already exists, Renovate keeps using the existing work item and does not recreate it with the new type. To switch an existing issue to the new type, either rename the old work item (so its title no longer matches) and close it, or close and delete the old work item. Renovate then creates a fresh work item of the configured type on the next run.</p>"},{"location":"configuration-options/#basebranchpatterns","title":"<code>baseBranchPatterns</code>","text":"<p>List of one or more custom base branches defined as exact strings and/or via regex expressions.</p> Name Value scopes repo type array subType string cli <code>--base-branch-patterns</code> env <code>RENOVATE_BASE_BRANCH_PATTERNS</code> previouslyKnownAs <pre><code>[\"baseBranches\"]\n</code></pre> default <code>[]</code> <p>This configuration option was formerly known as <code>baseBranches</code>.</p> <p>By default, Renovate will detect and process only the repository's default branch. For most projects, this is the expected approach. Renovate also allows users to explicitly configure <code>baseBranchPatterns</code>, e.g. for use cases such as:</p> <ul> <li>You wish Renovate to process only a non-default branch, e.g. <code>dev</code>:</li> </ul> <pre><code>{\n  \"baseBranchPatterns\": [\"dev\"]\n}\n</code></pre> <ul> <li>You have multiple release streams you need Renovate to keep up to date, e.g. in branches <code>main</code> and <code>next</code>:</li> </ul> <pre><code>{\n  \"baseBranchPatterns\": [\"main\", \"next\"]\n}\n</code></pre> <ul> <li>You want to update your main branch and consistently named release branches, e.g. <code>main</code> and <code>release/&lt;version&gt;</code>:</li> </ul> <pre><code>{\n  \"baseBranchPatterns\": [\"main\", \"/^release\\\\/.*/\"]\n}\n</code></pre> <p>It's possible to add this setting into the <code>renovate.json</code> file as part of the \"Configure Renovate\" onboarding PR. If so then Renovate will reflect this setting in its description and use package file contents from the custom base branch(es) instead of default.</p> <p>Also, check useBaseBranchConfig if you want to configure different configuration for each base branch.</p> <p>The simplest approach is exact matches, e.g. <code>[\"main\", \"dev\"]</code>. <code>baseBranchPatterns</code> also supports Regular Expressions that must begin and end with <code>/</code>, e.g.:</p> <pre><code>{\n  \"baseBranchPatterns\": [\"main\", \"/^release\\\\/.*/\"]\n}\n</code></pre> <p>You can negate the regex by prefixing it with <code>!</code>. Only use a single negation and do not mix it with other branch names, since all branches are combined with <code>or</code>. With a negation, all branches except those matching the regex will be added to the result:</p> <pre><code>{\n  \"baseBranchPatterns\": [\"!/^pre-release\\\\/.*/\"]\n}\n</code></pre> <p>You can also use the special <code>\"$default\"</code> string to denote the repository's default branch, which is useful if you have it in an org preset, e.g.:</p> <pre><code>{\n  \"baseBranchPatterns\": [\"$default\", \"/^release\\\\/.*/\"]\n}\n</code></pre> <p>Note</p> <p>Do not use the <code>baseBranchPatterns</code> config option when you've set a <code>forkToken</code>. You may need a <code>forkToken</code> when you're using the Forking Renovate app.</p>"},{"location":"configuration-options/#bbautoresolveprtasks","title":"<code>bbAutoResolvePrTasks</code>","text":"<p>The PR tasks will be automatically completed after the PR is raised.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> supportedPlatforms bitbucket cli <code>--bb-auto-resolve-pr-tasks</code> env <code>RENOVATE_BB_AUTO_RESOLVE_PR_TASKS</code> <p>Configuring this to <code>true</code> means that Renovate will mark all PR Tasks as complete.</p>"},{"location":"configuration-options/#bbusedefaultreviewers","title":"<code>bbUseDefaultReviewers</code>","text":"<p>Use the default reviewers (Bitbucket only).</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>true</code> supportedPlatforms bitbucket, bitbucket-server cli <code>--bb-use-default-reviewers</code> env <code>RENOVATE_BB_USE_DEFAULT_REVIEWERS</code> <p>Configuring this to <code>true</code> means that Renovate will detect and apply the default reviewers rules to PRs (Bitbucket only).</p>"},{"location":"configuration-options/#branchconcurrentlimit","title":"<code>branchConcurrentLimit</code>","text":"<p>Limit to a maximum of x concurrent branches. 0 means no limit, <code>null</code> (default) inherits value from <code>prConcurrentLimit</code>.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type integer cli <code>--branch-concurrent-limit</code> env <code>RENOVATE_BRANCH_CONCURRENT_LIMIT</code> <p>By default, Renovate doesn\u2019t enforce its own concurrent branch limit. However, it inherits the prConcurrentLimit, which defaults to 10. This effectively caps concurrent branches at 10, though in many repositories a lower limit, such as 3 or 5, tends to be more efficient.</p> <p>If you want the same limit for both concurrent branches and concurrent PRs, then set a value for <code>prConcurrentLimit</code> and it will be reused for branch calculations too. But if you want to allow more concurrent branches than concurrent PRs, you can configure both values (e.g. <code>branchConcurrentLimit=5</code> and <code>prConcurrentLimit=3</code>).</p> <p>This limit is enforced on a per-repository basis.</p> <p>Example config:</p> <pre><code>{\n  \"branchConcurrentLimit\": 3\n}\n</code></pre> <p>Warning</p> <p>Leaving PRs/branches as unlimited or as a high number increases the time it takes for Renovate to process a repository. If you find that Renovate is too slow when rebasing out-of-date branches, decrease the <code>branchConcurrentLimit</code>.</p> <p>If you have too many concurrent branches which rebase themselves each run, Renovate can take a lot of time to rebase. Solutions:</p> <ul> <li>Decrease the concurrent branch limit (note: this won't go and delete any existing, so won't have an effect until you either merge or close existing ones manually)</li> <li>Remove automerge and/or automatic rebasing (set <code>rebaseWhen</code> to <code>conflicted</code>). However if you have branch protection saying PRs must be up to date then it's not ideal to remove automatic rebasing</li> </ul>"},{"location":"configuration-options/#branchname","title":"<code>branchName</code>","text":"<p>Branch name template.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string default <code>\"{{{branchPrefix}}}{{{additionalBranchPrefix}}}{{{branchTopic}}}\"</code> supportsTemplating true env <code>RENOVATE_BRANCH_NAME</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>This feature has been deprecated</p> <p>We strongly recommended that you avoid configuring this field directly. Please edit <code>branchPrefix</code>, <code>additionalBranchPrefix</code>, or <code>branchTopic</code> instead.</p> <p>If you truly need to configure this then it probably means either:</p> <ul> <li>You are hopefully mistaken, and there's a better approach you should use, so open a new \"config help\" discussion at the Renovate discussions tab or</li> <li>You have a use case we didn't expect, please open a discussion to see if we want to get a feature request from you</li> </ul>"},{"location":"configuration-options/#branchnamestrict","title":"<code>branchNameStrict</code>","text":"<p>Whether to be strict about the use of special characters within the branch name.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> cli <code>--branch-name-strict</code> env <code>RENOVATE_BRANCH_NAME_STRICT</code> <p>If <code>true</code>, Renovate removes special characters when slugifying the branch name:</p> <ul> <li>all special characters are removed</li> <li>only alphabetic characters are allowed</li> <li>hyphens <code>-</code> are used to separate sections</li> </ul> <p>The default <code>false</code> behavior will mean that special characters like <code>.</code> and <code>/</code> may end up in the branch name.</p> <p>Note</p> <p>Renovate will not apply any search/replace to the <code>branchPrefix</code> part of the branch name. If you don't want any <code>/</code> in your branch name then you will also need to change <code>branchPrefix</code> from the default <code>renovate/</code> value to something like <code>renovate-</code>.</p>"},{"location":"configuration-options/#branchprefix","title":"<code>branchPrefix</code>","text":"<p>Prefix to use for all branch names.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string default <code>\"renovate/\"</code> supportsTemplating true cli <code>--branch-prefix</code> env <code>RENOVATE_BRANCH_PREFIX</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>You can modify this field if you want to change the prefix used. For example if you want branches to be like <code>deps/eslint-4.x</code> instead of <code>renovate/eslint-4.x</code> then you configure <code>branchPrefix</code> = <code>deps/</code>. Or if you wish to avoid forward slashes in branch names then you could use <code>renovate_</code> instead, for example.</p> <p><code>branchPrefix</code> must be configured at the root of the configuration (e.g. not within any package rule) and is not allowed to use template values. e.g. instead of <code>renovate/{{parentDir}}-</code>, configure the template part in <code>additionalBranchPrefix</code>, like <code>\"additionalBranchPrefix\": \"{{parentDir}}-\"</code>.</p> <p>Note</p> <p>This setting does not change the default onboarding branch name, i.e. <code>renovate/configure</code>. If you wish to change that too, you need to also configure the field <code>onboardingBranch</code> in your global self-hosted config.</p>"},{"location":"configuration-options/#branchprefixold","title":"<code>branchPrefixOld</code>","text":"<p>Old branchPrefix value to check for existing PRs.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string default <code>\"renovate/\"</code> cli <code>--branch-prefix-old</code> env <code>RENOVATE_BRANCH_PREFIX_OLD</code> <p>Renovate uses branch names as part of its checks to see if an update PR was created previously, and already merged or ignored. If you change <code>branchPrefix</code>, then no previously closed PRs will match, which could lead to Renovate recreating PRs in such cases. Instead, set the old <code>branchPrefix</code> value as <code>branchPrefixOld</code> to allow Renovate to look for those branches too, and avoid this happening.</p>"},{"location":"configuration-options/#branchtopic","title":"<code>branchTopic</code>","text":"<p>Branch topic.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string default <code>\"{{{depNameSanitized}}}-{{{newMajor}}}{{#if separateMinorPatch}}{{#if isPatch}}.{{{newMinor}}}{{/if}}{{/if}}{{#if separateMultipleMinor}}{{#if isMinor}}.{{{newMinor}}}{{/if}}{{/if}}.x{{#if isLockfileUpdate}}-lockfile{{/if}}\"</code> supportsTemplating true env <code>RENOVATE_BRANCH_TOPIC</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>This field is combined with <code>branchPrefix</code> and <code>additionalBranchPrefix</code> to form the full <code>branchName</code>. <code>branchName</code> uniqueness is important for dependency update grouping or non-grouping so be cautious about ever editing this field manually. This is an advanced field, and it's recommend you seek a config review before applying it.</p>"},{"location":"configuration-options/#bumpversion","title":"<code>bumpVersion</code>","text":"<p>Bump the version in the package file being updated.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string allowedValues <pre><code>[\"major\", \"minor\", \"patch\", \"prerelease\"]\n</code></pre> supportedManagers helmv3, npm, nuget, maven, sbt cli <code>--bump-version</code> env <code>RENOVATE_BUMP_VERSION</code> default <code>null</code> <p>Currently, this config option only works with these managers:</p> <ul> <li><code>cargo</code></li> <li><code>helmv3</code></li> <li><code>npm</code></li> <li><code>nuget</code></li> <li><code>maven</code></li> <li><code>ocb</code></li> <li><code>pep621</code></li> <li><code>poetry</code></li> <li><code>sbt</code></li> </ul> <p>Raise a feature request if you want to use this config option with other package managers.</p> <p>Use <code>bumpVersion</code> if you want Renovate to update the <code>version</code> field in your package file when it updates the dependencies in that file. This can be handy when you have automated your package's release, as you you don't need extra steps after the Renovate upgrade, you can just release a new version.</p> <p>Configure this value to <code>\"prerelease\"</code>, <code>\"patch\"</code>, <code>\"minor\"</code> or <code>\"major\"</code> to have Renovate update the version in your edited package file. e.g. if you wish Renovate to always increase the target <code>package.json</code> version with a patch update, configure this to <code>\"patch\"</code>.</p> <p>For <code>npm</code> only you can also configure this field to <code>\"mirror:x\"</code> where <code>x</code> is the name of a package in the <code>package.json</code>. Doing so means that the <code>package.json</code> <code>version</code> field will mirror whatever the version is that <code>x</code> depended on. Make sure that version is a pinned version of course, as otherwise it won't be valid.</p> <p>For <code>sbt</code> note that Renovate will update the version string only for packages that have the version string in their project's <code>built.sbt</code> file.</p>"},{"location":"configuration-options/#bumpversions","title":"<code>bumpVersions</code>","text":"<p>A list of bumpVersion config options to bump generic version numbers.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type array subType object default <code>[]</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>The <code>bumpVersions</code> option allows Renovate to update semantic version strings in your code when dependencies are updated. This is useful for files or version fields that Renovate does not natively support or for custom versioning needs.</p> <p>The option is an array of rules, each specifying how and where to bump versions. Each rule includes the following fields:</p> <ul> <li><code>filePatterns</code>: A list of regex patterns to match file names. These patterns follow Renovate's string pattern matching syntax. Templates can also be used for dynamic patterns.</li> <li><code>matchStrings</code>: An array of regex patterns to locate version strings within the matched files. Any of the regexes can match the content. Each pattern must include a named capture group <code>version</code> to extract the version string.</li> <li><code>bumpType</code>: Specifies the type of version bump which defaults to <code>patch</code>. This field supports templates for conditional logic. Supported values are documented in the bumpVersions.bumpType section.</li> <li><code>name</code> (optional): A descriptive name for the rule, which is used in logs for easier identification.</li> </ul> <p>Tip</p> <p>You can use templates in <code>filePatternTemplates</code>, <code>bumpType</code>, and <code>matchStrings</code>. This way you can leverage the power of Renovate's templating engine to change based on the context of the upgrade.</p> <p>Here is an example of a <code>bumpVersions</code> configuration:</p> <pre><code>{\n  \"bumpVersions\": [\n    {\n      \"name\": \"Updating release version file\",\n      \"filePatterns\": [\".release-version\"],\n      \"bumpType\": \"minor\",\n      \"matchStrings\": [\"^(?&lt;version&gt;.+)$\"]\n    }\n  ]\n}\n</code></pre> <p>In this example:</p> <ul> <li>Renovate scans files named <code>.release-version</code>.</li> <li>It matches the entire file content as the version string.</li> <li>It bumps the version to the next minor release.</li> </ul> <p>Conditional Bumping with <code>packageRules</code>:</p> <p>You can use <code>packageRules</code> to apply <code>bumpVersions</code> conditionally. For example, to bump versions only for updates in the <code>charts/</code> directory:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchFileNames\": [\"charts/**\"],\n      \"bumpVersions\": [\n        {\n          \"filePatterns\": [\"{{packageFileDir}}/Chart.{yaml,yml}\"],\n          \"matchStrings\": [\"version:\\\\s(?&lt;version&gt;[^\\\\s]+)\"],\n          \"bumpType\": \"{{#if isPatch}}patch{{else}}minor{{/if}}\"\n        }\n      ]\n    }\n  ]\n}\n</code></pre> <p>In this configuration:</p> <ul> <li>If Renovate updates dependencies in the <code>charts/</code> directory check the <code>Chart.yaml</code> file next to the updated file.</li> <li>The version string is extracted from lines matching <code>version: &lt;value&gt;</code>.</li> <li>The <code>bumpType</code> is dynamically set to <code>patch</code> for if the dependency update is a patch update and <code>minor</code> otherwise.</li> </ul> <p>debugging <code>bumpVersions</code></p> <p>Use <code>logLevelRemap</code> to remap, <code>trace</code> log level messages to a higher level e.g. <code>debug</code>. All messages are prefixed with <code>bumpVersions</code> or <code>bumpVersions(&lt;name&gt;)</code> to help you filter them in the logs.</p> <pre><code>{\n  \"logLevelRemap\": [\n    {\n      \"matchMessage\": \"/bumpVersions/\",\n      \"newLogLevel\": \"debug\"\n    }\n  ]\n}\n</code></pre> <p>short versions</p> <p>It's possible to bump short versions:</p> <ul> <li><code>1</code> \u2192 <code>2</code> (major)</li> <li><code>1.1</code> \u2192 <code>2.0</code> (major)</li> <li><code>1.2</code> \u2192 <code>1.3</code> (minor)</li> </ul>"},{"location":"configuration-options/#bumpversionsbumptype","title":"<code>bumpVersions.bumpType</code>","text":"<p>The semver level to use when bumping versions. This is used by the <code>bumpVersions</code> feature.</p> Name Value type string parents <code>bumpVersions</code> allowedValues <pre><code>[\"major\", \"minor\", \"patch\", \"prerelease\", \"sync\"]\n</code></pre> supportsTemplating true cli <code>--bump-type</code> env <code>RENOVATE_BUMP_TYPE</code> default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>The <code>bumpType</code> field specifies the type of version bump to apply. Supported values are:</p> <ul> <li><code>prerelease</code></li> <li><code>patch</code></li> <li><code>minor</code></li> <li><code>major</code></li> <li><code>sync</code></li> </ul> <p>This field supports templates for conditional logic. For example:</p> <pre><code>{\n  \"bumpType\": \"{{#if isPatch}}patch{{else}}minor{{/if}}\"\n}\n</code></pre> <p>In this example, the bump type is set to <code>patch</code> for patch updates and <code>minor</code> for all other cases.</p> <p>Using <code>sync</code> to sync with dependency updates</p> <p>The <code>sync</code> type is special: it uses the same version as the dependency manager update that triggered the branch. This is useful when you want to keep version files in sync with actual dependency updates.</p> <p>For example, if you have a <code>.release-version</code> file that should always match the version of a specific dependency:</p> <pre><code>{\n  \"bumpVersions\": [\n    {\n      \"filePatterns\": [\".release-version\"],\n      \"bumpType\": \"sync\",\n      \"matchStrings\": [\"^(?&lt;version&gt;.+)$\"]\n    }\n  ]\n}\n</code></pre> <p>When Renovate updates a dependency to version <code>2.5.3</code>, it will also update the <code>.release-version</code> file to <code>2.5.3</code>.</p> <p>Note</p> <p>When using <code>bumpType: \"sync\"</code>, Renovate uses the <code>newVersion</code> from the first upgrade in the branch. If no upgrades are found in the branch, the version bump will be skipped and a debug message will be logged.</p>"},{"location":"configuration-options/#bumpversionsfilepatterns","title":"<code>bumpVersions.filePatterns</code>","text":"<p>A list of patterns to match files that contain the version string.</p> Name Value type array subType string parents <code>bumpVersions</code> supportsTemplating true cli <code>--file-patterns</code> env <code>RENOVATE_FILE_PATTERNS</code> default <code>[]</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>The <code>filePatterns</code> field defines which files should be scanned for version strings. It accepts one or more patterns following Renovate's string pattern matching syntax. Templates can also be used for dynamic patterns. See Templates for more information.</p> <p>For example:</p> <pre><code>{\n  \"filePatterns\": [\"**/version.txt\", \"{{packageFileDir}}/Chart.yaml\"]\n}\n</code></pre> <p>This configuration matches files named <code>version.txt</code> in any directory and <code>Chart.yaml</code> files in specific package directories.</p>"},{"location":"configuration-options/#bumpversionsmatchstrings","title":"<code>bumpVersions.matchStrings</code>","text":"<p>Queries to use. Valid only within <code>bumpVersions</code> or <code>customManagers</code> object. Templating is supported within <code>bumpVersions</code> only.</p> Name Value type array subType string parents <code>customManagers</code><code>bumpVersions</code> supportsTemplating true default <code>[]</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Use <code>matchStrings</code> within <code>bumpVersions</code> to define patterns to match version strings in files. See <code>customManagers.matchStrings</code> for full documentation.</p>"},{"location":"configuration-options/#bumpversionsname","title":"<code>bumpVersions.name</code>","text":"<p>A name for the bumpVersion config. This is used for logging and debugging.</p> Name Value type string parents <code>bumpVersions</code> cli <code>--name</code> env <code>RENOVATE_NAME</code> default <code>null</code> <p>The <code>name</code> field is an optional identifier for the bump version rule. It is used in logs to help identify which rule is being applied.</p> <p>For example:</p> <pre><code>{\n  \"name\": \"Update release version\"\n}\n</code></pre> <p>This name will appear in Renovate logs, making it easier to debug or trace specific rules.</p>"},{"location":"configuration-options/#clonesubmodules","title":"<code>cloneSubmodules</code>","text":"<p>Set to <code>true</code> to initialize submodules during repository clone.</p> Name Value scopes repo type boolean default <code>false</code> cli <code>--clone-submodules</code> env <code>RENOVATE_CLONE_SUBMODULES</code> <p>Enabling this option will mean that detected Git submodules will be cloned at time of repository clone. By default all will be cloned, but this can be customized by configuring <code>cloneSubmodulesFilter</code> too. Submodules are always cloned recursively.</p> <p>Important: private submodules aren't supported by Renovate, unless the underlying <code>ssh</code> layer already has the correct permissions.</p>"},{"location":"configuration-options/#clonesubmodulesfilter","title":"<code>cloneSubmodulesFilter</code>","text":"<p>List of submodules names or patterns to clone when cloneSubmodules=true.</p> Name Value scopes repo type array subType string default <pre><code>[\"*\"]\n</code></pre> cli <code>--clone-submodules-filter</code> env <code>RENOVATE_CLONE_SUBMODULES_FILTER</code> <p>Use this option together with <code>cloneSubmodules</code> if you wish to clone only a subset of submodules.</p> <p>This config option supports regex and glob filters, including negative matches. For more details on this syntax see Renovate's string pattern matching documentation.</p>"},{"location":"configuration-options/#commitbody","title":"<code>commitBody</code>","text":"<p>Commit message body template. Will be appended to commit message, separated by two line returns.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string supportsTemplating true env <code>RENOVATE_COMMIT_BODY</code> default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Configure this if you wish Renovate to add a commit body, otherwise Renovate uses a regular single-line commit.</p> <p>For example, To add <code>[skip ci]</code> to every commit you could configure:</p> <pre><code>{\n  \"commitBody\": \"[skip ci]\"\n}\n</code></pre> <p>Onboarding and config migration commits expose only <code>{{{gitAuthor}}}</code> from the repository config to this template.</p> <p>To add git trailers like <code>Signed-off-by</code> to commits, use <code>commitTrailers</code> instead.</p>"},{"location":"configuration-options/#commitbodytable","title":"<code>commitBodyTable</code>","text":"<p>If enabled, append a table in the commit message body describing all updates in the commit.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> cli <code>--commit-body-table</code> env <code>RENOVATE_COMMIT_BODY_TABLE</code>"},{"location":"configuration-options/#commithourlylimit","title":"<code>commitHourlyLimit</code>","text":"<p>Rate limit commits to maximum x per hour. 0 means no limit.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type integer default 0 cli <code>--commit-hourly-limit</code> env <code>RENOVATE_COMMIT_HOURLY_LIMIT</code> <p>This config option limits the number of commits Renovate pushes in an hour. It includes commits pushed while creating a new branch or rebasing an existing one.</p> <p>Use <code>commitHourlyLimit</code> to strictly control the rate at which Renovate triggers CI runs. Both branch creation and rebasing trigger CI runs, so limiting these operations helps you control your CI load.</p> <p>For example, with <code>commitHourlyLimit: 2</code>, in a given hour Renovate might:</p> <ul> <li>Create 2 new branches (triggering 2 CI runs), then stop until the next hour, or</li> <li>Create 1 new branch and rebase 1 existing branch (2 CI runs total), then stop</li> </ul> <p>This limit is enforced on a per-repository basis and per hourly period (<code>:00</code> through <code>:59</code>).</p> <p>This setting differs from <code>prHourlyLimit</code> in an important way:</p> <ul> <li><code>prHourlyLimit</code> only limits PR creation. Renovate can still rebase existing branches, which triggers additional CI runs</li> <li><code>commitHourlyLimit</code> limits both branch creation and automatic rebasing, giving you stricter control over CI usage</li> </ul> <p>If you want strict control over CI load, use <code>commitHourlyLimit</code>. If you only want to limit the rate of new PRs, use prHourlyLimit.</p> <p>Tip</p> <p>Manual rebases (requested via checkbox, Dependency Dashboard, or rebase label) always bypass this limit.</p>"},{"location":"configuration-options/#commitmessage","title":"<code>commitMessage</code>","text":"<p>Message to use for commit messages and pull request titles.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string default <code>\"{{{commitMessagePrefix}}} {{{commitMessageAction}}} {{{commitMessageTopic}}} {{{commitMessageExtra}}} {{{commitMessageSuffix}}}\"</code> supportsTemplating true env <code>RENOVATE_COMMIT_MESSAGE</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>This feature has been deprecated</p> <p>We deprecated editing the <code>commitMessage</code> directly, and we recommend you stop using this config option. Instead use config options like <code>commitMessageAction</code>, <code>commitMessageExtra</code>, and so on, to create the commit message you want.</p>"},{"location":"configuration-options/#commitmessageaction","title":"<code>commitMessageAction</code>","text":"<p>Action verb to use in commit messages and PR titles.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string default <code>\"Update\"</code> supportsTemplating true env <code>RENOVATE_COMMIT_MESSAGE_ACTION</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>This is used to alter <code>commitMessage</code> and <code>prTitle</code> without needing to copy/paste the whole string. Actions may be like <code>Update</code>, <code>Pin</code>, <code>Roll back</code>, <code>Refresh</code>, etc. Check out the default value for <code>commitMessage</code> to understand how this field is used.</p>"},{"location":"configuration-options/#commitmessageextra","title":"<code>commitMessageExtra</code>","text":"<p>Extra description used after the commit message topic - typically the version.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string default <code>\"to {{#if isPinDigest}}{{{newDigestShort}}}{{else}}{{#if isMajor}}{{prettyNewMajor}}{{else}}{{#if isSingleVersion}}{{prettyNewVersion}}{{else}}{{#if newValue}}{{{newValue}}}{{else}}{{{newDigestShort}}}{{/if}}{{/if}}{{/if}}{{/if}}\"</code> supportsTemplating true env <code>RENOVATE_COMMIT_MESSAGE_EXTRA</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>This is used to alter <code>commitMessage</code> and <code>prTitle</code> without needing to copy/paste the whole string. The \"extra\" is usually an identifier of the new version, e.g. \"to v1.3.2\" or \"to tag 9.2\".</p>"},{"location":"configuration-options/#commitmessagelowercase","title":"<code>commitMessageLowerCase</code>","text":"<p>Lowercase PR- and commit titles.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string allowedValues <pre><code>[\"auto\", \"never\"]\n</code></pre> default <code>\"auto\"</code> cli <code>--commit-message-lower-case</code> env <code>RENOVATE_COMMIT_MESSAGE_LOWER_CASE</code> <p>With <code>semanticCommits</code> pr- and commit-titles will by default (<code>\"auto\"</code>) be converted to all-lowercase. Set this to <code>\"never\"</code> to leave the titles untouched, allowing uppercase characters in semantic commit titles.</p>"},{"location":"configuration-options/#commitmessageprefix","title":"<code>commitMessagePrefix</code>","text":"<p>Prefix to add to start of commit messages and PR titles. Uses a semantic prefix if <code>semanticCommits</code> is enabled.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string supportsTemplating true env <code>RENOVATE_COMMIT_MESSAGE_PREFIX</code> default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>This is used to alter <code>commitMessage</code> and <code>prTitle</code> (which also affects how it's displayed in the Dependency Dashboard) without needing to copy/paste the whole string. The \"prefix\" is usually an automatically applied semantic commit prefix, but it can also be statically configured.</p>"},{"location":"configuration-options/#commitmessagesuffix","title":"<code>commitMessageSuffix</code>","text":"<p>Suffix to add to end of commit messages and PR titles.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string supportsTemplating true env <code>RENOVATE_COMMIT_MESSAGE_SUFFIX</code> default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>This is used to add a suffix to commit messages. Usually left empty except for internal use (multiple base branches, and vulnerability alerts).</p>"},{"location":"configuration-options/#commitmessagetopic","title":"<code>commitMessageTopic</code>","text":"<p>The upgrade topic/noun used in commit messages and PR titles.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string default <code>\"dependency {{depName}}\"</code> supportsTemplating true env <code>RENOVATE_COMMIT_MESSAGE_TOPIC</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>You can use <code>commitMessageTopic</code> to change the <code>commitMessage</code> and <code>prTitle</code> without copy/pasting the whole string. The \"topic\" usually refers to the dependency being updated, for example: <code>\"dependency react\"</code>.</p> <p>We recommend you use <code>matchManagers</code> and <code>commitMessageTopic</code> in a <code>packageRules</code> array to set the commit message topic, like this:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchManagers\": [\"github-actions\"],\n      \"commitMessageTopic\": \"{{depName}}\"\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#committrailers","title":"<code>commitTrailers</code>","text":"<p>Structured git trailers (<code>Key: value</code> lines) to add in the final block of the commit message.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type array subType string mergeable true supportsTemplating true env <code>RENOVATE_COMMIT_TRAILERS</code> default <code>[]</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Use this option to add git trailers to the commits Renovate creates. Each entry must be a full trailer line in the form <code>Key: value</code>, where the key may only have letters, digits and <code>-</code>. Repeated keys are allowed.</p> <p>For example:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDepTypes\": [\"devDependencies\"],\n      \"commitTrailers\": [\"Changelog: skip\"]\n    }\n  ]\n}\n</code></pre> <p>If you want Renovate to sign off its commits, you can add the <code>:gitSignOff</code> preset to your <code>extends</code> array:</p> <pre><code>{\n  \"extends\": [\":gitSignOff\"]\n}\n</code></pre> <p>Onboarding and config migration commits expose only <code>{{{gitAuthor}}}</code> from the repository config to this template.</p>"},{"location":"configuration-options/#composerignoreplatformreqs","title":"<code>composerIgnorePlatformReqs</code>","text":"<p>Configure use of <code>--ignore-platform-reqs</code> or <code>--ignore-platform-req</code> for the Composer package manager.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type array subType string cli <code>--composer-ignore-platform-reqs</code> env <code>RENOVATE_COMPOSER_IGNORE_PLATFORM_REQS</code> default <code>[]</code> <p>By default, Renovate will ignore Composer platform requirements as the PHP platform used by Renovate most probably won't match the required PHP environment of your project as configured in your <code>composer.json</code> file.</p> <p>Composer <code>2.2</code> and up will be run with <code>--ignore-platform-req='ext-*' --ignore-platform-req='lib-*'</code>, which ignores extension and library platform requirements but not the PHP version itself and should work in most cases.</p> <p>Older Composer versions will be run with <code>--ignore-platform-reqs</code>, which means that all platform constraints (including the PHP version) will be ignored by default. This can result in updated dependencies that are not compatible with your platform.</p> <p>To customize this behavior, you can explicitly ignore platform requirements (for example <code>ext-zip</code>) by setting them separately in this array. Each item will be added to the Composer command with <code>--ignore-platform-req</code>, resulting in it being ignored during its invocation. Note that this requires your project to use Composer V2, as V1 doesn't support excluding single platform requirements. The used PHP version will be guessed automatically from your <code>composer.json</code> definition, so <code>php</code> should not be added as explicit dependency.</p> <p>If an empty array is configured, Renovate uses its default behavior.</p> <p>Set to <code>null</code> (not recommended) to fully omit <code>--ignore-platform-reqs/--ignore-platform-req</code> during Composer invocation. This requires the Renovate image to be fully compatible with your Composer platform requirements in order for the Composer invocation to succeed, otherwise Renovate will fail to create the updated lock file. The Composer output should inform you about the reasons the update failed.</p>"},{"location":"configuration-options/#confidential","title":"<code>confidential</code>","text":"<p>If enabled, issues created by Renovate are set as confidential.</p> Name Value scopes repo type boolean default <code>false</code> supportedPlatforms gitlab cli <code>--confidential</code> env <code>RENOVATE_CONFIDENTIAL</code> <p>If enabled, all issues created by Renovate are set as confidential, even in a public repository.</p> <p>Note</p> <p>The Dependency Dashboard issue will also be confidential. By default issues created by Renovate are visible to all users.</p> <p>Note</p> <p>This option is applicable to GitLab only.</p>"},{"location":"configuration-options/#configmigration","title":"<code>configMigration</code>","text":"<p>Enable this to get config migration PRs when needed.</p> Name Value scopes repo type boolean default <code>false</code> cli <code>--config-migration</code> env <code>RENOVATE_CONFIG_MIGRATION</code> <p>This feature is flagged as experimental</p> <p>Config migration PRs are still being improved, in particular to reduce the amount of reordering and whitespace changes.To track this feature visit the following GitHub issue #16359.</p> <p>If enabled, Renovate raises a pull request when it needs to migrate the Renovate config file. Renovate only performs <code>configMigration</code> on <code>.json</code> and <code>.json5</code> files.</p> <p>We're adding new features to Renovate often. Often you can keep using your Renovate config and use the new features right away. But sometimes you need to update your Renovate configuration. To help you with this, Renovate will create config migration pull requests, when you enable <code>configMigration</code>.</p> <p>Example:</p> <p>After we changed the <code>baseBranchPatterns</code> feature, the Renovate configuration migration pull request would make this change:</p> <pre><code>{\n- \"baseBranch\": \"main\"\n+ \"baseBranchPatterns\": [\"main\"]\n}\n</code></pre> <p>Warning</p> <p>The <code>configMigration</code> feature writes plain JSON for <code>.json</code> files, and JSON5 for <code>.json5</code> files. Renovate may downgrade JSON5 content to plain JSON. When downgrading JSON5 to JSON Renovate may also remove the JSON5 comments. This can happen because Renovate wrongly converts JSON5 to JSON, thus removing the comments.</p> <p>For more details, read the config migration documentation.</p>"},{"location":"configuration-options/#configwarningreuseissue","title":"<code>configWarningReuseIssue</code>","text":"<p>Set this to <code>true</code> to make Renovate reuse/reopen an existing closed Config Warning issue, instead of opening a new one each time.</p> Name Value scopes repo type boolean default <code>false</code> cli <code>--config-warning-reuse-issue</code> env <code>RENOVATE_CONFIG_WARNING_REUSE_ISSUE</code> <p>If no existing issue is found, Renovate's default behavior is to create a new Config Warning issue. Accordingly, you'll get a new issue each time you have a Config Warning, although never more than one open at a time. Configure this option to <code>true</code> if you prefer Renovate to reopen any found matching closed issue whenever there is a config warning. The downside of this is that you may end up with a very old issue getting \"recycled\" each time and it will sort older than others.</p>"},{"location":"configuration-options/#constraints","title":"<code>constraints</code>","text":"<p>Configuration object to define language or manager version constraints.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type object default <pre><code>{\"ghActionsLock\": \"v0.4.1\"}\n</code></pre> mergeable true supportedManagers bundler, composer, github-actions, gomod, mise, npm, pep621, pipenv, poetry freeChoice true env <code>RENOVATE_CONSTRAINTS</code> <p>Constraints are used in package managers which use third-party tools to update \"artifacts\" like lock files or checksum files. Typically, the constraint is detected automatically by Renovate from files within the repository and there is no need to manually configure it.</p> <p>Constraints are also used to manually restrict which datasource versions are possible to upgrade to based on their language support. For now this datasource constraint feature only supports <code>python</code>, other compatibility restrictions will be added in the future.</p> <pre><code>{\n  \"constraints\": {\n    \"python\": \"2.7\"\n  }\n}\n</code></pre> <p>If you need to override constraints that Renovate detects from the repository, wrap it in the global self-hosted configuration's <code>force</code> object like so:</p> <pre><code>module.exports = {\n  force: {\n    constraints: {\n      node: '&lt; 15.0.0',\n    },\n  },\n};\n</code></pre> <p>The following <code>constraints</code> are available to specify which package managers/language constraints/tools Renovate will install for your repository:</p> Tool Additional Information Versioning Datasource <code>apm</code> semver github-releases <code>bazelisk</code> semver github-releases <code>bun</code> npm github-releases <code>bundler</code> ruby rubygems <code>cocoapods</code> ruby rubygems <code>composer</code> composer github-releases <code>conan</code> pep440 pypi <code>copier</code> pep440 pypi <code>corepack</code> npm npm <code>deno</code> deno github-releases <code>devbox</code> semver github-releases <code>dotnet</code> semver dotnet-version <code>erlang</code> semver-coerced github-releases <code>elixir</code> semver github-releases <code>flux</code> semver github-releases <code>gh</code> semver github-releases <code>gleam</code> semver github-releases <code>golang</code> npm github-releases <code>gradle</code> gradle gradle-version <code>hashin</code> pep440 pypi <code>helm</code> semver github-releases <code>helmfile</code> semver github-releases <code>java</code> npm java-version <code>jb</code> loose github-releases <code>kustomize</code> semver github-releases <code>maven</code> maven github-releases <code>mise</code> npm github-releases <code>nix</code> semver github-releases <code>node</code> node github-releases <code>npm</code> npm npm <code>paket</code> paket nuget <code>pdm</code> semver github-releases <code>php</code> composer github-releases <code>pip-tools</code> pep440 pypi <code>pipenv</code> pep440 pypi <code>pnpm</code> npm npm <code>pixi</code> conda github-releases <code>poetry</code> pep440 pypi <code>python</code> python github-releases <code>ruby</code> Also used in the <code>rubygems</code> Datasource ruby github-releases <code>rust</code> rust-release-channel rust-version <code>uv</code> pep440 pypi <code>yarn</code> npm npm <code>yarn-slim</code> npm npm <code>dart</code> npm dart-version <code>flutter</code> npm github-releases <code>vendir</code> semver github-releases <p>Note</p> <p>When using <code>binarySource=global</code>, the <code>constraints</code> options do not take effect.</p> <p>Additionally, there are several additional constraints that can be specified:</p> Constraint Additional Information <code>ghActionsLock</code> Used in the <code>github-actions</code> manager to specify a release tag for the <code>github/gh-actions-lock</code> <code>gh</code> CLI extension, which regenerates <code>.github/workflows/actions.lock</code>.Must be a full release tag, prefixed with <code>v</code>, such as <code>v0.1.7</code>. Set it to an empty string to always install the latest release. <code>go</code> Used in the <code>gomod</code> manager to specify the version of the Go toolchain to use.In precedence order:1. config: <code>constraints.go</code>1. <code>go.mod</code>: <code>toolchain</code> directive1. <code>go.mod</code>: <code>go</code> directiveNOTE that the <code>constraints.golang</code> is not used (https://github.com/renovatebot/renovate/issues/42601) <code>gomodMod</code> Used in the <code>gomod</code> manager to specify a tag for <code>github.com/marwan-at-work/mod</code>.Must be prefixed with <code>v</code>. <code>jenkins</code> Used in the <code>jenkins-plugins</code> datasource to specify a minimum version of Jenkins that a plugin must support. <code>pipTools</code> Used in the <code>pip-compile</code> manager to specify a version of <code>pip-tools</code> to use. @deprecated TODO remove in #42599 <code>platform</code> Used in the <code>rubygems</code> datasource to specify the <code>platform</code> that the Gem dependency supports. <code>rubygems</code> Used in the <code>rubygems</code> datasource to specify the version of the <code>rubygems</code> tool that is needed to use this Gem. <code>vscode</code> Used in the <code>npm</code> manager to track the version of VSCode that the package is compatible with. <code>dotnet-sdk</code> Used in the <code>nuget</code> manager to track .NET SDK version required. <code>perl</code> Used in the <code>cpanfile</code> manager to track Perl version required. <code>%goMod</code> Used in the <code>gomod</code> manager to determine the minimum version of Go required to use this module.Note that this is prefixed with a <code>%</code> to explicitly note that this is not a tool that Containerbase knows. <p>Note</p> <p>Make sure not to mix this up with the term <code>compatibility</code>, which Renovate uses in the context of version releases, e.g. if a Docker image is <code>node:12.16.0-alpine</code> then the <code>-alpine</code> suffix represents <code>compatibility</code>.</p>"},{"location":"configuration-options/#constraintsfiltering","title":"<code>constraintsFiltering</code>","text":"<p>Perform release filtering based on language constraints.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type string allowedValues <pre><code>[\"none\", \"strict\"]\n</code></pre> default <code>\"none\"</code> env <code>RENOVATE_CONSTRAINTS_FILTERING</code> <p>This option controls whether Renovate filters new releases based on configured or detected <code>constraints</code>. Renovate supports two options:</p> <ul> <li><code>none</code>: No release filtering (all releases allowed)</li> <li><code>strict</code>: If the release's constraints match the package file constraints, then it's included</li> </ul> <p>More advanced filtering options may come in future.</p> <p>There must be a <code>constraints</code> object in your Renovate config, or constraints detected from package files, for this to work. Additionally, the \"datasource\" within Renovate must be capable of returning <code>constraints</code> values about each package's release.</p> <p>This feature is limited to the following datasources:</p> <ul> <li><code>crate</code></li> <li><code>go</code></li> <li><code>jenkins-plugins</code></li> <li><code>npm</code></li> <li><code>packagist</code></li> <li><code>pub</code></li> <li><code>pypi</code></li> <li><code>rubygems</code></li> </ul> <p>Sometimes when using private registries they may omit constraints information, which then is another reason such filtering may not work even if the datasource and corresponding default public registry supports it.</p> <p>Warning</p> <p>Enabling this feature may result in many package updates being filtered out silently. See below for a description of how it works.</p> <p>Warning</p> <p>Enabling this feature when using <code>binarySource=global</code> can lead to situations where Renovate suggests updates that it cannot then update, as it does not have the right tool versions installed.</p> <p>When <code>constraintsFiltering=strict</code>, the following logic applies:</p> <ul> <li>Are there <code>constraints</code> for this repository, either detected from source or from config?</li> <li>Does this package's release declare constraints of its own (e.g. <code>engines</code> in Node.js)?</li> <li>If so, filter out this release unless the repository constraint is a subset of the release constraint</li> </ul> <p>Here are some examples:</p> Your repo engines.node Dependency release engines.node Result <code>18</code> <code>16 \\|\\| 18</code> allowed <code>^18.10.0</code> <code>&gt;=18</code> allowed <code>^16.10.0 \\|\\| &gt;=18.0.0</code> <code>&gt;= 16.0.0</code> allowed <code>&gt;=16</code> <code>16 \\|\\| 18</code> filtered <code>16</code> <code>^16.10.0</code> filtered <p>When using with <code>npm</code>, we recommend you:</p> <ul> <li>Use <code>constraintsFiltering</code> on <code>dependencies</code>, not <code>devDependencies</code> (usually you do not need to be strict about development dependencies)</li> <li>Do not enable <code>rollbackPrs</code> at the same time (otherwise your current version may be rolled back if it's incompatible)</li> </ul>"},{"location":"configuration-options/#constraintsversioning","title":"<code>constraintsVersioning</code>","text":"<p>Override the versioning scheme used when filtering releases by specific constraint names. Does not apply to tools.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type object mergeable true freeChoice true <p>Use <code>constraintsVersioning</code> to override the versioning scheme used when filtering releases by specific constraint names with <code>constraintsFiltering</code>.</p> <p>Note</p> <p>Each key must be an additional constraint name (i.e. not a tool name), and each value must be a valid versioning scheme ID.</p> <p>Datasources that support constraints filtering may set sensible defaults for their constraints. You can override these defaults in your Renovate config.</p> <p>For example, to use a SemVer-style versioning scheme when defining the <code>rubygems</code> constraint:</p> Use SemVer-style range for defining version constraint, instead of 'ruby' versioning<pre><code>{\n  \"constraints\": {\n    \"rubygems\": \"^1.3\"\n  },\n  \"constraintsVersioning\": {\n    \"rubygems\": \"semver-coerced\"\n  }\n}\n</code></pre>"},{"location":"configuration-options/#customdatasources","title":"<code>customDatasources</code>","text":"<p>Defines custom datasources for usage by managers.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type object additionalProperties <pre><code>{\"type\": \"object\"}\n</code></pre> mergeable true cli <code>--custom-datasources</code> env <code>RENOVATE_CUSTOM_DATASOURCES</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.To track this feature visit the following GitHub issue #23286.</p> <p>Use <code>customDatasources</code> to fetch releases from APIs or statically hosted sites and Renovate has no own datasource. These datasources can be referred by <code>customManagers</code> or can be used to overwrite default datasources.</p> <p>For more details see the <code>custom</code> datasource documentation.</p>"},{"location":"configuration-options/#customdatasourcesdefaultregistryurltemplate","title":"<code>customDatasources.defaultRegistryUrlTemplate</code>","text":"<p>Template for generating a <code>defaultRegistryUrl</code> for custom datasource.</p> Name Value type string default <code>\"\"</code> parents <code>customDatasources</code> supportsTemplating true <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>This field is used to build a <code>registryUrl</code> for the dependency. It is not needed if either:</p> <ul> <li>The dependency can be found with the default <code>registryUrls</code> of the datasource (e.g. npmjs registry if the datasource is <code>npm</code>), or</li> <li>The matching groups you specified as part of the matching already include a <code>registryUrl</code> group   As this is a template it can be dynamically set.   E.g. add the <code>packageName</code> as part of the URL:</li> </ul> <pre><code>{\n  customDatasources: {\n    foo: {\n      defaultRegistryUrlTemplate: 'https://example.foo.bar/v1/{{ packageName }}',\n    },\n  },\n}\n</code></pre>"},{"location":"configuration-options/#customdatasourcesformat","title":"<code>customDatasources.format</code>","text":"<p>Format of the custom datasource.</p> Name Value type string parents <code>customDatasources</code> default <code>\"json\"</code> allowedValues <pre><code>[\"html\", \"json\", \"plain\", \"toml\", \"yaml\"]\n</code></pre> <p>Defines which format the API is returning. Currently <code>json</code> or <code>plain</code> are supported, see the <code>custom</code> datasource documentation for more information.</p>"},{"location":"configuration-options/#customdatasourcestransformtemplates","title":"<code>customDatasources.transformTemplates</code>","text":"<p>List of jsonata transformation rules.</p> Name Value type array subType string parents <code>customDatasources</code> supportsTemplating true cli <code>--transform-templates</code> env <code>RENOVATE_TRANSFORM_TEMPLATES</code> default <code>[]</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p><code>transformTemplates</code> is a list of jsonata rules which get applied serially. Use this if the API does not return a Renovate compatible schema.</p>"},{"location":"configuration-options/#custommanagers","title":"<code>customManagers</code>","text":"<p>Custom managers using regex matching.</p> Name Value scopes repo type array subType object cli <code>--custom-managers</code> mergeable true env <code>RENOVATE_CUSTOM_MANAGERS</code> previouslyKnownAs <pre><code>[\"regexManagers\"]\n</code></pre> default <code>[]</code> <p>Use <code>customManagers</code>(previously <code>regexManagers</code>) entries to configure the custom managers in Renovate.</p> <p>You can define custom managers to handle:</p> <ul> <li>Proprietary file formats or conventions</li> <li>Popular file formats not yet supported as a manager by Renovate</li> </ul> <p>Renovate has two custom managers:</p> Custom manager Matching engine <code>regex</code> Regular Expression, with named capture groups. <code>jsonata</code> JSONata query. <p>To use a custom manager, you must give Renovate this information:</p> <ol> <li><code>managerFilePatterns</code>: regex/glob pattern of the file to extract deps from</li> <li><code>matchStrings</code>: <code>regex</code> patterns or <code>jsonata</code> queries used to process the file</li> </ol> <p>The <code>matchStrings</code> must capture/extract the following three fields:</p> <ul> <li><code>datasource</code></li> <li><code>depName</code> and / or <code>packageName</code></li> <li><code>currentValue</code></li> </ul> <p>Alternatively, you could also use corresponding templates (e.g. <code>depNameTemplate</code>) for these fields. But, we recommend you use only one of these methods, or you'll get confused.</p> <p>Also, we recommend you explicitly set which <code>versioning</code> Renovate should use.</p> <p>Renovate defaults to <code>semver-coerced</code> versioning if both condition are met:</p> <ul> <li>The <code>versioning</code> field is missing in the custom manager config</li> <li>The Renovate datasource does not set its own default versioning</li> </ul> <p>For more details and examples regarding each custom manager, see our documentation for the <code>regex</code> manager and the <code>JSONata</code> manager. For template fields, use the triple brace <code>{{{ }}}</code> notation to avoid Handlebars escaping any special characters.</p> <p>Tip</p> <p>Look at our Custom Manager Presets, they may have what you need.</p>"},{"location":"configuration-options/#custommanagersautoreplacestringtemplate","title":"<code>customManagers.autoReplaceStringTemplate</code>","text":"<p>Optional <code>extractVersion</code> for extracted dependencies. Valid only within a <code>customManagers</code> object.</p> Name Value type string parents <code>customManagers</code> supportsTemplating true default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Allows overwriting how the matched string is replaced. This allows for some migration strategies. E.g. moving from one Docker image repository to another one.</p> helm-values.yaml<pre><code># The image of the service &lt;registry&gt;/&lt;repo&gt;/&lt;image&gt;:&lt;tag&gt;\nimage: my.old.registry/aRepository/andImage:1.18-alpine\n</code></pre> The regex definition<pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/values.yaml$/\"],\n      \"matchStrings\": [\n        \"image:\\\\s+(?&lt;depName&gt;my\\\\.old\\\\.registry/aRepository/andImage):(?&lt;currentValue&gt;[^\\\\s]+)\"\n      ],\n      \"depNameTemplate\": \"my.new.registry/aRepository/andImage\",\n      \"autoReplaceStringTemplate\": \"image: {{{depName}}}:{{{newValue}}}\",\n      \"datasourceTemplate\": \"docker\"\n    }\n  ]\n}\n</code></pre> <p>This will lead to following update where <code>1.21-alpine</code> is the newest version of <code>my.new.registry/aRepository/andImage</code>:</p> <pre><code># The image of the service &lt;registry&gt;/&lt;repo&gt;/&lt;image&gt;:&lt;tag&gt;\nimage: my.new.registry/aRepository/andImage:1.21-alpine\n</code></pre> <p>Note</p> <p>Can only be used with the custom regex manager.</p>"},{"location":"configuration-options/#custommanagerscurrentvaluetemplate","title":"<code>customManagers.currentValueTemplate</code>","text":"<p>Optional <code>currentValue</code> for extracted dependencies. Valid only within a <code>customManagers</code> object.</p> Name Value type string parents <code>customManagers</code> supportsTemplating true default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>If the <code>currentValue</code> for a dependency is not captured with a named group then it can be defined in config using this field. It will be compiled using Handlebars and the regex <code>groups</code> result.</p>"},{"location":"configuration-options/#custommanagerscustomtype","title":"<code>customManagers.customType</code>","text":"<p>Custom manager to use. Valid only within a <code>customManagers</code> object.</p> Name Value type string allowedValues <pre><code>[\"jsonata\", \"regex\"]\n</code></pre> parents <code>customManagers</code> default <code>null</code> <p>It specifies which custom manager to use. There are two available options: <code>regex</code> and <code>jsonata</code>.</p> <p>Example:</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/values.yaml$/\"],\n      \"matchStrings\": [\n        \"ENV .*?_VERSION=(?&lt;currentValue&gt;.*) # (?&lt;datasource&gt;.*?)/(?&lt;depName&gt;.*?)\\\\s\"\n      ]\n    }\n  ]\n}\n</code></pre> Parsing a JSON file with a custom manager<pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"jsonata\",\n      \"fileFormat\": \"json\",\n      \"managerFilePatterns\": [\"/file.json/\"],\n      \"matchStrings\": [\n        \"packages.{ \\\"depName\\\": package, \\\"currentValue\\\": version }\"\n      ],\n      \"datasourceTemplate\": \"github-tags\"\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#custommanagersdatasourcetemplate","title":"<code>customManagers.datasourceTemplate</code>","text":"<p>Optional datasource for extracted dependencies. Valid only within a <code>customManagers</code> object.</p> Name Value type string parents <code>customManagers</code> supportsTemplating true default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>If the <code>datasource</code> for a dependency is not captured with a named group, then it can be defined in config using this field. It will be compiled using Handlebars and the regex <code>groups</code> result.</p>"},{"location":"configuration-options/#custommanagersdepnametemplate","title":"<code>customManagers.depNameTemplate</code>","text":"<p>Optional depName for extracted dependencies. Valid only within a <code>customManagers</code> object.</p> Name Value type string parents <code>customManagers</code> supportsTemplating true default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>If <code>depName</code> cannot be captured with a named capture group in <code>matchString</code> then it can be defined manually using this field. It will be compiled using Handlebars and the regex <code>groups</code> result.</p>"},{"location":"configuration-options/#custommanagersdeptypetemplate","title":"<code>customManagers.depTypeTemplate</code>","text":"<p>Optional <code>depType</code> for extracted dependencies. Valid only within a <code>customManagers</code> object.</p> Name Value type string parents <code>customManagers</code> supportsTemplating true default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>If <code>depType</code> cannot be captured with a named capture group in <code>matchString</code> then it can be defined manually using this field. It will be compiled using Handlebars and the regex <code>groups</code> result.</p>"},{"location":"configuration-options/#custommanagersextractversiontemplate","title":"<code>customManagers.extractVersionTemplate</code>","text":"<p>Optional <code>extractVersion</code> for extracted dependencies. Valid only within a <code>customManagers</code> object.</p> Name Value type string parents <code>customManagers</code> supportsTemplating true default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>If <code>extractVersion</code> cannot be captured with a named capture group in <code>matchString</code>, then it can be defined manually using this field. It will be compiled using Handlebars and the regex <code>groups</code> result. See <code>extractVersion</code> for how the value is used.</p>"},{"location":"configuration-options/#custommanagersfileformat","title":"<code>customManagers.fileFormat</code>","text":"<p>It specifies the syntax of the package file being managed by the custom JSONata manager.</p> Name Value type string allowedValues <pre><code>[\"json\", \"toml\", \"yaml\"]\n</code></pre> parents <code>customManagers</code> requiredIf [object Object] default <code>null</code> <p>Note</p> <p>Can only be used with the custom jsonata manager.</p> <p>It specifies the syntax of the package file that's managed by the custom <code>jsonata</code> manager. This setting helps the system correctly parse and interpret the configuration file's contents.</p> <p>Only the <code>json</code>, <code>toml</code> and <code>yaml</code> formats are supported. <code>yaml</code> files are parsed as multi document YAML files.</p> Parsing a JSON file with a custom manager<pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"jsonata\",\n      \"fileFormat\": \"json\",\n      \"managerFilePatterns\": [\"/.renovaterc/\"],\n      \"matchStrings\": [\n        \"packages.{ 'depName': package, 'currentValue': version }\"\n      ],\n      \"datasourceTemplate\": \"github-tags\"\n    }\n  ]\n}\n</code></pre> Parsing a YAML file with a custom manager<pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"jsonata\",\n      \"fileFormat\": \"yaml\",\n      \"managerFilePatterns\": [\"/file.yml/\"],\n      \"matchStrings\": [\n        \"packages.{ 'depName': package, 'currentValue': version }\"\n      ],\n      \"datasourceTemplate\": \"github-tags\"\n    }\n  ]\n}\n</code></pre> Parsing a TOML file with a custom manager<pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"jsonata\",\n      \"fileFormat\": \"toml\",\n      \"managerFilePatterns\": [\"/file.toml/\"],\n      \"matchStrings\": [\n        \"packages.{ 'depName': package, 'currentValue': version }\"\n      ],\n      \"datasourceTemplate\": \"github-tags\"\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#custommanagersmatchstrings","title":"<code>customManagers.matchStrings</code>","text":"<p>Queries to use. Valid only within <code>bumpVersions</code> or <code>customManagers</code> object. Templating is supported within <code>bumpVersions</code> only.</p> Name Value type array subType string parents <code>customManagers</code><code>bumpVersions</code> supportsTemplating true default <code>[]</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Each <code>matchStrings</code> must be one of the following:</p> <ol> <li>A valid regular expression, which may optionally include named capture groups (if using <code>customType=regex</code>)</li> <li>Or, a valid, escaped JSONata query (if using <code>customType=json</code>)</li> </ol> <p>Example:</p> matchStrings with a valid regular expression<pre><code>{\n  \"matchStrings\": [\n    \"ENV .*?_VERSION=(?&lt;currentValue&gt;.*) # (?&lt;datasource&gt;.*?)/(?&lt;depName&gt;.*?)\\\\s\"\n  ]\n}\n</code></pre> matchStrings with a valid JSONata query<pre><code>{\n  \"matchStrings\": [\n    \"packages.{ \\\"depName\\\": package, \\\"currentValue\\\": version }\"\n  ]\n}\n</code></pre> <p>Note</p> <p>You do not need to add leading and trailing slashes in <code>matchStrings</code>.</p>"},{"location":"configuration-options/#custommanagersmatchstringsstrategy","title":"<code>customManagers.matchStringsStrategy</code>","text":"<p>Strategy how to interpret matchStrings.</p> Name Value type string default <code>\"any\"</code> allowedValues <pre><code>[\"any\", \"recursive\", \"combination\"]\n</code></pre> parents <code>customManagers</code> <p><code>matchStringsStrategy</code> controls behavior when multiple <code>matchStrings</code> values are provided. Three options are available:</p> <ul> <li><code>any</code> (default)</li> <li><code>recursive</code></li> <li><code>combination</code></li> </ul> <p>Note</p> <p><code>matchStringsStrategy</code> can only be used in a custom regex manager config!</p>"},{"location":"configuration-options/#any","title":"any","text":"<p>Each provided <code>matchString</code> will be matched individually to the content of the <code>packageFile</code>. If a <code>matchString</code> has multiple matches in a file each will be interpreted as an independent dependency.</p> <p>As example the following configuration will update all three lines in the Dockerfile.</p> renovate.json<pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/^Dockerfile$/\"],\n      \"matchStringsStrategy\": \"any\",\n      \"matchStrings\": [\n        \"ENV [A-Z]+_VERSION=(?&lt;currentValue&gt;.*) # (?&lt;datasource&gt;.*?)/(?&lt;depName&gt;.*?)(\\\\&amp;versioning=(?&lt;versioning&gt;.*?))?\\\\s\",\n        \"FROM (?&lt;depName&gt;\\\\S*):(?&lt;currentValue&gt;\\\\S*)\"\n      ],\n      \"datasourceTemplate\": \"docker\"\n    }\n  ]\n}\n</code></pre> Dockerfile<pre><code>FROM amd64/ubuntu:24.04\nENV GRADLE_VERSION=6.2 # gradle-version/gradle&amp;versioning=maven\nENV NODE_VERSION=10.19.0 # github-tags/nodejs/node&amp;versioning=node\n</code></pre>"},{"location":"configuration-options/#recursive","title":"recursive","text":"<p>If using <code>recursive</code> the <code>matchStrings</code> will be looped through and the full match of the last will define the range of the next one. This can be used to narrow down the search area to prevent multiple matches. But the <code>recursive</code> strategy still allows the matching of multiple dependencies as described below. All matches of the first <code>matchStrings</code> pattern are detected, then each of these matches will be used as basis for the input for the next <code>matchStrings</code> pattern, and so on. If the next <code>matchStrings</code> pattern has multiple matches then it will split again. This process will be followed as long there is a match plus a next <code>matchingStrings</code> pattern is available.</p> <p>Matched groups will be available in subsequent matching layers.</p> <p>This is an example how this can work. The first custom manager will only upgrade <code>grafana/loki</code> as looks for the <code>backup</code> key then looks for the <code>test</code> key and then uses this result for extraction of necessary attributes. But the second custom manager will upgrade both definitions as its first <code>matchStrings</code> matches both <code>test</code> keys.</p> renovate.json<pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/^example.json$/\"],\n      \"matchStringsStrategy\": \"recursive\",\n      \"matchStrings\": [\n        \"\\\"backup\\\":\\\\s*{[^}]*}\",\n        \"\\\"test\\\":\\\\s*\\\\{[^}]*}\",\n        \"\\\"name\\\":\\\\s*\\\"(?&lt;depName&gt;.*)\\\"[^\\\"]*\\\"type\\\":\\\\s*\\\"(?&lt;datasource&gt;.*)\\\"[^\\\"]*\\\"value\\\":\\\\s*\\\"(?&lt;currentValue&gt;.*)\\\"\"\n      ],\n      \"datasourceTemplate\": \"docker\"\n    },\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/^example.json$/\"],\n      \"matchStringsStrategy\": \"recursive\",\n      \"matchStrings\": [\n        \"\\\"test\\\":\\\\s*\\\\{[^}]*}\",\n        \"\\\"name\\\":\\\\s*\\\"(?&lt;depName&gt;.*)\\\"[^\\\"]*\\\"type\\\":\\\\s*\\\"(?&lt;datasource&gt;.*)\\\"[^\\\"]*\\\"value\\\":\\\\s*\\\"(?&lt;currentValue&gt;.*)\\\"\"\n      ],\n      \"datasourceTemplate\": \"docker\"\n    }\n  ]\n}\n</code></pre> example.json<pre><code>{\n  \"backup\": {\n    \"test\": {\n      \"name\": \"grafana/loki\",\n      \"type\": \"docker\",\n      \"value\": \"1.6.1\"\n    }\n  },\n  \"setup\": {\n    \"test\": {\n      \"name\": \"python\",\n      \"type\": \"docker\",\n      \"value\": \"3.9.0\"\n    }\n  }\n}\n</code></pre>"},{"location":"configuration-options/#combination","title":"combination","text":"<p>You may use this option to combine the values of multiple lines inside a file. You can combine multiple lines with <code>matchStringStrategy</code> values, but the <code>combination</code> approach is less susceptible to white space or line breaks stopping a match.</p> <p><code>combination</code> can only match one dependency per file. To update multiple dependencies with <code>combination</code> you must define multiple custom managers.</p> <p>Matched group values will be merged to form a single dependency.</p> renovate.json<pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/^main.yml$/\"],\n      \"matchStringsStrategy\": \"combination\",\n      \"matchStrings\": [\n        \"prometheus_image:\\\\s*\\\"(?&lt;depName&gt;.*)\\\"\\\\s*//\",\n        \"prometheus_version:\\\\s*\\\"(?&lt;currentValue&gt;.*)\\\"\\\\s*//\"\n      ],\n      \"datasourceTemplate\": \"docker\"\n    },\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/^main.yml$/\"],\n      \"matchStringsStrategy\": \"combination\",\n      \"matchStrings\": [\n        \"thanos_image:\\\\s*\\\"(?&lt;depName&gt;.*)\\\"\\\\s*//\",\n        \"thanos_version:\\\\s*\\\"(?&lt;currentValue&gt;.*)\\\"\\\\s*//\"\n      ],\n      \"datasourceTemplate\": \"docker\"\n    }\n  ]\n}\n</code></pre> Ansible variable file (YAML)<pre><code>prometheus_image: \"prom/prometheus\"  // a comment\nprometheus_version: \"v2.21.0\" // a comment\n------\nthanos_image: \"prom/prometheus\"  // a comment\nthanos_version: \"0.15.0\" // a comment\n</code></pre> <p>In the above example, each custom manager will match a single dependency each.</p>"},{"location":"configuration-options/#custommanagerspackagenametemplate","title":"<code>customManagers.packageNameTemplate</code>","text":"<p>Optional packageName for extracted dependencies, else defaults to <code>depName</code> value. Valid only within a <code>customManagers</code> object.</p> Name Value type string parents <code>customManagers</code> supportsTemplating true previouslyKnownAs <pre><code>[\"lookupNameTemplate\"]\n</code></pre> default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p><code>packageName</code> is used for looking up dependency versions. It will be compiled using Handlebars and the regex <code>groups</code> result. It will default to the value of <code>depName</code> if left unconfigured/undefined.</p>"},{"location":"configuration-options/#custommanagersregistryurltemplate","title":"<code>customManagers.registryUrlTemplate</code>","text":"<p>Optional registry URL for extracted dependencies. Valid only within a <code>customManagers</code> object.</p> Name Value type string parents <code>customManagers</code> supportsTemplating true default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>If the <code>registryUrls</code> for a dependency is not captured with a named group then it can be defined in config using this field. It will be compiled using Handlebars and the regex <code>groups</code> result.</p>"},{"location":"configuration-options/#custommanagersversioningtemplate","title":"<code>customManagers.versioningTemplate</code>","text":"<p>Optional versioning for extracted dependencies. Valid only within a <code>customManagers</code> object.</p> Name Value type string parents <code>customManagers</code> supportsTemplating true default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>If the <code>versioning</code> for a dependency is not captured with a named group then it can be defined in config using this field. It will be compiled using Handlebars and the regex <code>groups</code> result.</p>"},{"location":"configuration-options/#customizedashboard","title":"<code>customizeDashboard</code>","text":"<p>Customize sections in the Dependency Dashboard issue.</p> Name Value scopes repo type object freeChoice true additionalProperties <pre><code>{\"type\": \"string\"}\n</code></pre> cli <code>--customize-dashboard</code> env <code>RENOVATE_CUSTOMIZE_DASHBOARD</code> <p>You may use the <code>customizeDashboard</code> object to customize the Dependency Dashboard.</p> <p>Supported fields:</p> <ul> <li><code>repoProblemsHeader</code>: This field will replace the header of the Repository Problems in the Dependency Dashboard issue.</li> </ul>"},{"location":"configuration-options/#defaultregistryurls","title":"<code>defaultRegistryUrls</code>","text":"<p>List of registry URLs to use as the default for a datasource.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type array subType string default <code>[]</code> <p>Override a datasource's default registries with this config option. The datasources's <code>customRegistrySupport</code> value must be <code>true</code> for the config option to work.</p> <p>Default registries are only used when both:</p> <ul> <li>The manager did not extract any <code>registryUrls</code> values, and</li> <li>No <code>registryUrls</code> values have been applied via config, such as <code>packageRules</code></li> </ul> <p>Think of <code>defaultRegistryUrls</code> as a way to specify the \"fallback\" registries for a datasource, for use when no <code>registryUrls</code> are extracted or configured. Compare that to <code>registryUrls</code>, which are a way to override registries.</p>"},{"location":"configuration-options/#dependencydashboard","title":"<code>dependencyDashboard</code>","text":"<p>Whether to create a \"Dependency Dashboard\" issue in the repository.</p> Name Value scopes repo type boolean default <code>false</code> cli <code>--dependency-dashboard</code> env <code>RENOVATE_DEPENDENCY_DASHBOARD</code> previouslyKnownAs <pre><code>[\"masterIssue\"]\n</code></pre> <p>Starting from version <code>v26.0.0</code> the \"Dependency Dashboard\" is enabled by default as part of the commonly-used <code>config:recommended</code> preset.</p> <p>To disable the Dependency Dashboard, add the preset <code>:disableDependencyDashboard</code> or set <code>dependencyDashboard</code> to <code>false</code>.</p> <pre><code>{\n  \"extends\": [\"config:recommended\", \":disableDependencyDashboard\"]\n}\n</code></pre> <p>Configuring <code>dependencyDashboard</code> to <code>true</code> will lead to the creation of a \"Dependency Dashboard\" issue within the repository. This issue has a list of all PRs pending, open, closed (unmerged) or in error. The goal of this issue is to give visibility into all updates that Renovate is managing.</p> <p>Examples of what having a Dependency Dashboard will allow you to do:</p> <ul> <li>View all PRs in one place, rather than having to filter PRs by author</li> <li>Rebase/retry multiple PRs without having to open each individually</li> <li>Override any rate limiting (e.g. concurrent PRs) or scheduling to force Renovate to create a PR that would otherwise be suppressed</li> <li>Recreate an unmerged PR (e.g. for a major update that you postponed by closing the original PR)</li> </ul> <p>Tip</p> <p>Enabling the Dependency Dashboard by itself does not change the \"control flow\" of Renovate. Renovate still creates and manages PRs, and still follows your schedules and rate limits. The Dependency Dashboard gives you extra visibility and control over your updates.</p>"},{"location":"configuration-options/#dependencydashboardapproval","title":"<code>dependencyDashboardApproval</code>","text":"<p>Controls if updates need manual approval from the Dependency Dashboard issue before PRs are created.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> cli <code>--dependency-dashboard-approval</code> env <code>RENOVATE_DEPENDENCY_DASHBOARD_APPROVAL</code> previouslyKnownAs <pre><code>[\"masterIssueApproval\"]\n</code></pre> <p>This feature allows you to use Renovate's Dependency Dashboard to force approval of updates before they are created.</p> <p>By setting <code>dependencyDashboardApproval</code> to <code>true</code> in config (including within <code>packageRules</code>), you can tell Renovate to wait for your approval from the Dependency Dashboard before creating a branch/PR. You can approve a pending PR by selecting the checkbox in the Dependency Dashboard issue.</p> <p>Tip</p> <p>When you set <code>dependencyDashboardApproval</code> to <code>true</code> the Dependency Dashboard issue will be created automatically, you do not need to turn on <code>dependencyDashboard</code> explicitly.</p> <p>You can configure Renovate to wait for approval for:</p> <ul> <li>all package upgrades</li> <li>major, minor, patch level upgrades</li> <li>specific package upgrades</li> <li>upgrades coming from specific package managers</li> </ul> <p>If you want to require approval for all upgrades, set <code>dependencyDashboardApproval</code> to <code>true</code>:</p> <pre><code>{\n  \"dependencyDashboardApproval\": true\n}\n</code></pre> <p>If you want to require approval for major updates, set <code>dependencyDashboardApproval</code> to <code>true</code> within a <code>major</code> object:</p> <pre><code>{\n  \"major\": {\n    \"dependencyDashboardApproval\": true\n  }\n}\n</code></pre> <p>If you want to approve specific packages, set <code>dependencyDashboardApproval</code> to <code>true</code> within a <code>packageRules</code> entry where you have defined a specific package or pattern.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"/^@package-name/\"],\n      \"dependencyDashboardApproval\": true\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#dependencydashboardautoclose","title":"<code>dependencyDashboardAutoclose</code>","text":"<p>Set to <code>true</code> to let Renovate close the Dependency Dashboard issue if there are no more updates.</p> Name Value scopes repo type boolean default <code>false</code> cli <code>--dependency-dashboard-autoclose</code> env <code>RENOVATE_DEPENDENCY_DASHBOARD_AUTOCLOSE</code> previouslyKnownAs <pre><code>[\"masterIssueAutoclose\"]\n</code></pre> <p>You can configure this to <code>true</code> if you prefer Renovate to close an existing Dependency Dashboard whenever there are no outstanding PRs left.</p>"},{"location":"configuration-options/#dependencydashboardcategory","title":"<code>dependencyDashboardCategory</code>","text":"<p>The category to group branches on the Dependency Dashboard issue.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string <p>You can use this to categorize updates on the Dependency Dashboard. For example, to visually distinguish between production and dev updates, or to split between teams or logical parts of a monorepo. In practice this means it introduces an extra level of hierarchy/heading in the Dashboard's markdown.</p> <p>To create a category for all CI/CD updates, you can configure a package rule like this:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCategories\": [\"cd\", \"ci\"],\n      \"dependencyDashboardCategory\": \":hammer_and_wrench: Continuous Integration &amp; Continuous Deployment\"\n    }\n  ]\n}\n</code></pre> <p>When you configure categories, updates that do not match any of the configured categories will be grouped under the \"Other\" category.</p> <p>Some sections in the Dependency Dashboard also contain an action that applies to all updates in that section, such as to approve or rebase all updates. If there are categories in that section, the action will be put in an extra \"All\" category at the end of the section. This is to explicitly clarify that the action applies to all updates in the section, not to just a specific category.</p> <p>The Dependency Dashboard categories are only used to visually organize updates within the Dependency Dashboard issue. They do not impact grouping of updates into a single update like how e.g. <code>branchName</code> and <code>groupName</code> do.</p>"},{"location":"configuration-options/#dependencydashboardfooter","title":"<code>dependencyDashboardFooter</code>","text":"<p>Any text added here will be placed last in the Dependency Dashboard issue body, with a divider separator before it.</p> Name Value scopes repo type string supportsTemplating true cli <code>--dependency-dashboard-footer</code> env <code>RENOVATE_DEPENDENCY_DASHBOARD_FOOTER</code> previouslyKnownAs <pre><code>[\"masterIssueFooter\"]\n</code></pre> default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p>"},{"location":"configuration-options/#dependencydashboardheader","title":"<code>dependencyDashboardHeader</code>","text":"<p>Any text added here will be placed first in the Dependency Dashboard issue body.</p> Name Value scopes repo type string default <code>\"This issue lists Renovate updates and detected dependencies. Read the [Dependency Dashboard](https://docs.renovatebot.com/key-concepts/dashboard/) docs to learn more.\"</code> supportsTemplating true cli <code>--dependency-dashboard-header</code> env <code>RENOVATE_DEPENDENCY_DASHBOARD_HEADER</code> previouslyKnownAs <pre><code>[\"masterIssueHeader\"]\n</code></pre> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p>"},{"location":"configuration-options/#dependencydashboardlabels","title":"<code>dependencyDashboardLabels</code>","text":"<p>These labels will always be applied on the Dependency Dashboard issue, even when they have been removed manually.</p> Name Value scopes repo type array subType string cli <code>--dependency-dashboard-labels</code> env <code>RENOVATE_DEPENDENCY_DASHBOARD_LABELS</code> previouslyKnownAs <pre><code>[\"masterIssueLabels\"]\n</code></pre> default <code>[]</code> <p>The labels only get updated when the Dependency Dashboard issue updates its content and/or title. It is pointless to edit the labels, as Renovate restores the labels on each run.</p>"},{"location":"configuration-options/#dependencydashboardosvvulnerabilitysummary","title":"<code>dependencyDashboardOSVVulnerabilitySummary</code>","text":"<p>Control if the Dependency Dashboard issue lists CVEs supplied by osv.dev.</p> Name Value scopes repo type string allowedValues <pre><code>[\"none\", \"all\", \"unresolved\"]\n</code></pre> default <code>\"none\"</code> cli <code>--dependency-dashboard-o-s-v-vulnerability-summary</code> env <code>RENOVATE_DEPENDENCY_DASHBOARD_O_S_V_VULNERABILITY_SUMMARY</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>Use this option to control if the Dependency Dashboard lists the OSV-sourced CVEs for your repository. You can choose from:</p> <ul> <li><code>none</code> (default) do not list any CVEs</li> <li><code>unresolved</code> list CVEs that have no fixes</li> <li><code>all</code> list all CVEs</li> </ul> <p>You will only get OSV-based vulnerability alerts for direct dependencies.</p> <p>This feature is independent of the <code>osvVulnerabilityAlerts</code> option.</p> <p>The source of these CVEs is OSV.dev.</p>"},{"location":"configuration-options/#dependencydashboardreportabandonment","title":"<code>dependencyDashboardReportAbandonment</code>","text":"<p>Controls whether abandoned packages are reported in the dependency dashboard.</p> Name Value scopes repo type boolean default <code>true</code> cli <code>--dependency-dashboard-report-abandonment</code> env <code>RENOVATE_DEPENDENCY_DASHBOARD_REPORT_ABANDONMENT</code> <p>Controls whether abandoned packages are reported in the dependency dashboard.</p> <p>When enabled (default), Renovate will display a collapsible section in the dependency dashboard listing packages that have been identified as abandoned based on the <code>abandonmentThreshold</code> configuration. This helps you identify dependencies that may need attention due to lack of maintenance.</p> <p>Set this to <code>false</code> if you prefer not to see abandoned packages in your dependency dashboard.</p>"},{"location":"configuration-options/#dependencydashboardtitle","title":"<code>dependencyDashboardTitle</code>","text":"<p>Title for the Dependency Dashboard issue.</p> Name Value scopes repo type string default <code>\"Dependency Dashboard\"</code> cli <code>--dependency-dashboard-title</code> env <code>RENOVATE_DEPENDENCY_DASHBOARD_TITLE</code> previouslyKnownAs <pre><code>[\"masterIssueTitle\"]\n</code></pre> <p>Configure this option if you prefer a different title for the Dependency Dashboard.</p>"},{"location":"configuration-options/#description","title":"<code>description</code>","text":"<p>Plain text description for a config or preset.</p> Name Value scopes any type array subType string mergeable true default <code>[]</code> <p>The description field can be used inside any configuration object to add a human-readable description of the object's config purpose. A description field embedded within a preset is also collated as part of the onboarding description unless the preset only consists of presets itself. Presets which consist only of other presets have their own description omitted from the onboarding description because they will be fully described by the preset descriptions within.</p> <p>[!NOTE] To overwrite descriptions of child presets, use <code>overrideDescription</code> in place of <code>description</code>.</p>"},{"location":"configuration-options/#digest","title":"<code>digest</code>","text":"<p>Configuration to apply when updating a digest (no change in tag/version).</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type object default <pre><code>{\n  \"branchTopic\": \"{{{depNameSanitized}}}-digest\",\n  \"commitMessageExtra\": \"to {{newDigestShort}}\",\n  \"commitMessageTopic\": \"{{{depName}}} digest\"\n}\n</code></pre> mergeable true env <code>RENOVATE_DIGEST</code> <p>Add to this object if you wish to define rules that apply only to PRs that update digests.</p>"},{"location":"configuration-options/#draftpr","title":"<code>draftPR</code>","text":"<p>If set to <code>true</code> then Renovate creates draft PRs, instead of normal status PRs.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> supportedPlatforms azure, bitbucket, forgejo, gitea, github, gitlab, scm-manager cli <code>--draft-p-r</code> env <code>RENOVATE_DRAFT_P_R</code> <p>If you want the PRs created by Renovate to be considered as drafts rather than normal PRs, you could add this property to your <code>renovate.json</code>:</p> <pre><code>{\n  \"draftPR\": true\n}\n</code></pre> <p>This option is evaluated at PR/MR creation time.</p> <p>Note</p> <p>Forgejo, Gitea and GitLab implement draft status by checking if the PR's title starts with certain strings. This means that <code>draftPR</code> on Forgejo, Gitea and GitLab are incompatible with the legacy method of triggering Renovate to rebase a PR by renaming the PR to start with <code>rebase!</code>.</p>"},{"location":"configuration-options/#enabled","title":"<code>enabled</code>","text":"<p>Enable or disable corresponding functionality.</p> Name Value type boolean default <code>true</code> scopes repo, packageRule, manager, updateType parents <code>vulnerabilityAlerts</code><code>hostRules</code> cli <code>--enabled</code> env <code>RENOVATE_ENABLED</code> <p>The most common use of <code>enabled</code> is if you want to turn Renovate's functionality off, for some reason.</p> <p>For example, if you wanted to disable Renovate completely on a repository, you could make this your <code>renovate.json</code>:</p> <pre><code>{\n  \"enabled\": false\n}\n</code></pre> <p>Note</p> <p>When Renovate is disabled on a repository entirely (via <code>enabled=false</code>), if Renovate runs against the repo again, it will perform a one-time cleanup of the repository, closing open Issues, PRs and deleting any branches.</p> <p>To disable Renovate for all <code>eslint</code> packages, you can configure a package rule like:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"eslint**\"],\n      \"enabled\": false\n    }\n  ]\n}\n</code></pre> <p>To disable Renovate for npm <code>devDependencies</code> but keep it for <code>dependencies</code> you could configure:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchManagers\": [\"npm\"],\n      \"matchDepTypes\": [\"devDependencies\"],\n      \"enabled\": false\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#enabledmanagers","title":"<code>enabledManagers</code>","text":"<p>A list of package managers to enable. Only managers on the list are enabled.</p> Name Value scopes repo type array subType string allowedValues <pre><code>[\n  \"ansible\",\n  \"ansible-galaxy\",\n  \"ant\",\n  \"apm\",\n  \"argocd\",\n  \"asdf\",\n  \"azure-pipelines\",\n  \"batect\",\n  \"batect-wrapper\",\n  \"bazel\",\n  \"bazel-module\",\n  \"bazelisk\",\n  \"bicep\",\n  \"bitbucket-pipelines\",\n  \"bitrise\",\n  \"buildkite\",\n  \"buildpacks\",\n  \"bun\",\n  \"bun-version\",\n  \"bundler\",\n  \"cake\",\n  \"cargo\",\n  \"cdnurl\",\n  \"circleci\",\n  \"cloudbuild\",\n  \"cocoapods\",\n  \"composer\",\n  \"conan\",\n  \"copier\",\n  \"cpanfile\",\n  \"crossplane\",\n  \"crow\",\n  \"deno\",\n  \"deps-edn\",\n  \"devbox\",\n  \"devcontainer\",\n  \"docker-compose\",\n  \"dockerfile\",\n  \"droneci\",\n  \"fleet\",\n  \"flux\",\n  \"fvm\",\n  \"git-submodules\",\n  \"github-actions\",\n  \"gitlabci\",\n  \"gitlabci-include\",\n  \"glasskube\",\n  \"gleam\",\n  \"gomod\",\n  \"gradle\",\n  \"gradle-wrapper\",\n  \"haskell-cabal\",\n  \"helm-requirements\",\n  \"helm-values\",\n  \"helmfile\",\n  \"helmsman\",\n  \"helmv3\",\n  \"hermit\",\n  \"homeassistant-manifest\",\n  \"homebrew\",\n  \"html\",\n  \"jenkins\",\n  \"jsonnet-bundler\",\n  \"kotlin-script\",\n  \"kubernetes\",\n  \"kustomize\",\n  \"leiningen\",\n  \"maven\",\n  \"maven-wrapper\",\n  \"meteor\",\n  \"mint\",\n  \"mise\",\n  \"mix\",\n  \"nix\",\n  \"nodenv\",\n  \"npm\",\n  \"nuget\",\n  \"nvm\",\n  \"ocb\",\n  \"osgi\",\n  \"paket\",\n  \"pep621\",\n  \"pep723\",\n  \"pip-compile\",\n  \"pip_requirements\",\n  \"pip_setup\",\n  \"pipenv\",\n  \"pixi\",\n  \"poetry\",\n  \"pre-commit\",\n  \"proto\",\n  \"pub\",\n  \"puppet\",\n  \"pyenv\",\n  \"quadlet\",\n  \"renovate-config\",\n  \"ruby-version\",\n  \"runtime-version\",\n  \"rust-toolchain\",\n  \"sbt\",\n  \"scalafmt\",\n  \"setup-cfg\",\n  \"smithy\",\n  \"sveltos\",\n  \"swift\",\n  \"tekton\",\n  \"terraform\",\n  \"terraform-version\",\n  \"terragrunt\",\n  \"terragrunt-version\",\n  \"tflint-plugin\",\n  \"travis\",\n  \"typst\",\n  \"unity3d\",\n  \"velaci\",\n  \"vendir\",\n  \"woodpecker\",\n  \"xcodegen\",\n  \"jsonata\",\n  \"regex\",\n  \"custom.jsonata\",\n  \"custom.regex\"\n]\n</code></pre> mergeable false cli <code>--enabled-managers</code> env <code>RENOVATE_ENABLED_MANAGERS</code> default <code>[]</code> <p>This is a way to allow only certain package managers and implicitly disable all others.</p> <p>Example:</p> <pre><code>{\n  \"enabledManagers\": [\"dockerfile\", \"npm\"]\n}\n</code></pre> <p>To enable custom managers you will need to add <code>custom.</code> prefix before their names</p> <p>Example:</p> <pre><code>{\n  \"enabledManagers\": [\"custom.regex\"]\n}\n</code></pre> <p>For the full list of available managers, see the Supported Managers documentation.</p>"},{"location":"configuration-options/#encrypted","title":"<code>encrypted</code>","text":"<p>An object containing configuration encrypted with project key.</p> Name Value scopes any type object additionalProperties <pre><code>{\"type\": \"string\"}\n</code></pre> cli <code>--encrypted</code> env <code>RENOVATE_ENCRYPTED</code> <p>Before you put any secrets in your repository configuration, encrypt the secrets. You can encrypt secrets using either a HTML page, or the CLI.</p> <p>To encrypt secrets for the Mend Renovate App for github.com with a HTML page, go to app.renovatebot.com/encrypt and complete the form. If you're self-hosting Renovate, you may download and edit the form, to use your own PGP public key.</p> <p>You can also encrypt secrets from the CLI, using the <code>curl</code>, <code>echo</code>, <code>jq</code>, <code>gpg</code>, <code>grep</code> and <code>tr</code> CLI programs. Here is an example:</p> <pre><code>curl https://app.renovatebot.com/renovate.pgp --output renovate.pgp\necho -n '{\"o\":\"your-organization\", \"r\":\"your-repository (optional)\", \"v\":\"your-secret-value\"}' | jq . -c | gpg --encrypt -a --recipient-file renovate.pgp | grep -v '^----' | tr -d '\\n'\n</code></pre> <p>The above script uses:</p> <ul> <li><code>curl</code> to download the Mend Renovate hosted app's public key</li> <li><code>echo</code> to echo a JSON object into <code>jq</code></li> <li><code>jq</code> to validate the JSON and then compact it</li> <li><code>gpg</code> to encrypt the contents</li> <li><code>grep</code> and <code>tr</code> to extract the encrypted payload which we will use</li> </ul> <p>The <code>jq</code> step is optional, you can leave it out if you wish. Its primary value is validating that the string you echo to <code>gpg</code> is valid JSON, and compact.</p> <p>Note</p> <p>Encrypted secrets must have at least an org/group scope, and optionally a repository scope. This means that Renovate will check if a secret's scope matches the current repository before applying it, and warn/discard if there is a mismatch.</p> <p>Encrypted secrets usually have a single organization. But you may encrypt a secret with more than one organization, for example: <code>org1,org2</code>. This way the secret can be used in both the <code>org1</code> and <code>org2</code> organizations.</p> <p>For more information on how to use secrets for private packages, read Private package support.</p>"},{"location":"configuration-options/#env","title":"<code>env</code>","text":"<p>Environment variables that Renovate uses when executing package manager commands.</p> Name Value scopes repo type object additionalProperties <pre><code>{\"type\": \"string\"}\n</code></pre> cli <code>--env</code> env <code>RENOVATE_ENV</code> <p>This option allows users to specify explicit environment variables values. It is valid only as a top-level configuration option and not, for example, within <code>packageRules</code>.</p> <p>Warning</p> <p>The administrator of your Renovate deployment must configure a list of allowed environment names in the <code>allowedEnv</code> config option, before users can use those allowed names in the <code>env</code> option.</p> <p>Behavior:</p> <ul> <li>This option only applies when Renovate runs package manager commands (e.g. <code>npm install</code>), within the <code>updateArtifacts()</code> function</li> <li>Values set in the <code>env</code> configuration override corresponding environment variables, including those from <code>customEnvVariables</code> and <code>process.env</code></li> </ul> Example renovate.json with env configuration<pre><code>{\n  \"env\": {\n    \"SOME_ENV_VARIABLE\": \"SOME_STRING_VALUE\"\n  }\n}\n</code></pre>"},{"location":"configuration-options/#excludecommitpaths","title":"<code>excludeCommitPaths</code>","text":"<p>A file matching any of these glob patterns will not be committed, even if the file has been updated.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type array subType string cli <code>--exclude-commit-paths</code> env <code>RENOVATE_EXCLUDE_COMMIT_PATHS</code> default <code>[]</code> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>Be careful you know what you're doing with this option. The initial intended use is to allow the user to exclude certain dependencies from being added/removed/modified when \"vendoring\" dependencies. Example:</p> <pre><code>{\n  \"excludeCommitPaths\": [\"vendor/golang.org/x/text/**\"]\n}\n</code></pre> <p>The above would mean Renovate would not include files matching the above glob pattern in the commit, even if it thinks they should be updated.</p>"},{"location":"configuration-options/#expandcodeownersgroups","title":"<code>expandCodeOwnersGroups</code>","text":"<p>Expand the configured code owner groups into a full list of group members.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> supportedPlatforms gitlab cli <code>--expand-code-owners-groups</code> env <code>RENOVATE_EXPAND_CODE_OWNERS_GROUPS</code> <p>If configured, Renovate will expand any matching <code>CODEOWNERS</code> groups into a full list of group members and assign them individually instead of the group. This is particularly useful when combined with <code>assigneesSampleSize</code> and <code>assigneesFromCodeOwners</code>, so that only a subset of the Codeowners are assigned instead of the whole group.</p> <p>On GitLab, this also expands role handles (<code>@@developer</code>, <code>@@maintainer</code>, <code>@@owner</code>) into the project members who hold that exact role.</p>"},{"location":"configuration-options/#extends","title":"<code>extends</code>","text":"<p>Configuration presets to use or extend.</p> Name Value scopes any type array subType string env <code>RENOVATE_EXTENDS</code> default <code>[]</code> <p>See shareable config presets for details. Learn how to use presets by reading the Key concepts, Presets page.</p>"},{"location":"configuration-options/#extractversion","title":"<code>extractVersion</code>","text":"<p>A regex (<code>re2</code>) to extract a version from a datasource's raw version string.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type string format regex default <code>null</code> <p>Only use this config option when the raw version strings from the datasource do not match the expected format that you need in your package file. You must define a \"named capture group\" called <code>version</code> like in the examples below.</p> <p><code>extractVersion</code> is only applied to the versions returned by the datasource. It is not applied to the <code>currentValue</code> from your package file, so <code>currentValue</code> must already be in the extracted format.</p> <p>For example, to extract only the major.minor precision from a GitHub release, the following would work:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"foo\"],\n      \"extractVersion\": \"^(?&lt;version&gt;v\\\\d+\\\\.\\\\d+)\"\n    }\n  ]\n}\n</code></pre> <p>The above will change a raw version of <code>v1.31.5</code> to <code>v1.31</code>, for example.</p> <p>Alternatively, to strip a <code>release-</code> prefix:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"bar\"],\n      \"extractVersion\": \"^release-(?&lt;version&gt;.*)$\"\n    }\n  ]\n}\n</code></pre> <p>The above will change a raw version of <code>release-2.0.0</code> to <code>2.0.0</code>, for example. A similar one could strip leading <code>v</code> prefixes:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"baz\"],\n      \"extractVersion\": \"^v(?&lt;version&gt;.*)$\"\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#fetchchangelogs","title":"<code>fetchChangeLogs</code>","text":"<p>Controls if and when changelogs/release notes are fetched.</p> Name Value type string allowedValues <pre><code>[\"off\", \"branch\", \"pr\"]\n</code></pre> default <code>\"pr\"</code> parents <code>packageRules</code><code>(the root document)</code> env <code>RENOVATE_FETCH_CHANGE_LOGS</code> <p>Use this config option to configure changelogs/release notes fetching. The available options are:</p> <ul> <li><code>off</code> - disable changelogs fetching</li> <li><code>branch</code> - fetch changelogs while creating/updating branch</li> <li><code>pr</code>(default) - fetches changelogs while creating/updating pull-request</li> </ul> <p>Avoid setting <code>fetchChangeLogs=branch</code>, because this slows down Renovate. But if you're embedding changelogs in commit information, you may use <code>fetchChangeLogs=branch</code>.</p> <p>Renovate can fetch changelogs when they are hosted on one of these platforms:</p> <ul> <li>Bitbucket Cloud</li> <li>Bitbucket Server / Data Center</li> <li>GitHub (.com and Enterprise Server)</li> <li>GitLab (.com and CE/EE)</li> </ul> <p>If you are running on any platform except <code>github.com</code>, you need to configure a Personal Access Token to allow Renovate to fetch changelogs notes from <code>github.com</code>.</p> <p>You may use package rules to override the value of <code>fetchChangeLogs</code> for matching dependencies, with later rules overriding earlier ones.</p> <p>The following re-enables fetching of changelogs when creating pull-requests for lodash updates.</p> <pre><code>{\n  \"fetchChangeLogs\": \"off\",\n  \"packageRules\": [\n    {\n      \"matchSourceUrls\": [\"https://github.com/lodash/lodash\"],\n      \"fetchChangeLogs\": \"pr\"\n    }\n  ]\n}\n</code></pre> <p>The following disables fetching of changelogs for any package in aws-sdk-go-v2, which can be time-consuming due to the repository's large number of tags:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchSourceUrls\": [\"https://github.com/aws/aws-sdk-go-v2{/**,}\"],\n      \"fetchChangeLogs\": \"off\"\n    }\n  ]\n}\n</code></pre> <p>Note</p> <p>Renovate can only show changelogs from some platforms and some package managers. We're planning improvements so that Renovate can show more changelogs. Read issue 14138 on GitHub to get an overview of the planned work.</p>"},{"location":"configuration-options/#filterunavailableusers","title":"<code>filterUnavailableUsers</code>","text":"<p>Filter reviewers and assignees based on their availability.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> supportedPlatforms gitlab cli <code>--filter-unavailable-users</code> env <code>RENOVATE_FILTER_UNAVAILABLE_USERS</code> <p>When this option is enabled PRs are not assigned to users that are unavailable. This option only works on platforms that support the concept of user availability. For now, you can only use this option on the GitLab platform.</p>"},{"location":"configuration-options/#followtag","title":"<code>followTag</code>","text":"<p>If defined, packages will follow this release tag exactly.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type string default <code>null</code> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>For <code>followTag</code> to work, the datasource must support distribution streams or tags, like for example npm does.</p> <p>The main use case is to follow a pre-release tag of a dependency, say TypeScripts's <code>\"insiders\"</code> build:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"typescript\"],\n      \"followTag\": \"insiders\"\n    }\n  ]\n}\n</code></pre> <p>If you've set a <code>followTag</code> then Renovate skips its normal major/minor/patch upgrade logic and stable/unstable consistency logic, and instead keeps your dependency version synced strictly to the version in the tag.</p> <p>Renovate follows tags strictly, this can cause problems when a tagged stream is no longer maintained. For example: you're following the <code>next</code> tag, but later the stream you actually want is called <code>stable</code> instead. If <code>next</code> is no longer getting updates, you must switch your <code>followTag</code> to <code>stable</code> to get updates again.</p>"},{"location":"configuration-options/#forkmodedisallowmaintaineredits","title":"<code>forkModeDisallowMaintainerEdits</code>","text":"<p>Disallow maintainers to push to Renovate pull requests when running in fork mode.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> supportedPlatforms github cli <code>--fork-mode-disallow-maintainer-edits</code> env <code>RENOVATE_FORK_MODE_DISALLOW_MAINTAINER_EDITS</code> <p>Use <code>forkModeDisallowMaintainerEdits</code> to disallow maintainers from editing Renovate's pull requests when in fork mode.</p> <p>If GitHub pull requests are created from a fork repository, the PR author can decide to allow upstream repository to modify the PR directly.</p> <p>Allowing maintainers to edit pull requests directly is helpful when Renovate pull requests require more changes. The reviewer can simply push to the pull request without having to create a new PR. More details here.</p> <p>You may decide to disallow edits to Renovate pull requests in order to workaround issues in Renovate where modified fork branches are not deleted properly: See this issue. If this option is enabled, reviewers will need to create a new PR if more changes are needed.</p> <p>Note</p> <p>This option is only relevant if you set <code>forkToken</code>.</p>"},{"location":"configuration-options/#forkprocessing","title":"<code>forkProcessing</code>","text":"<p>Whether to process forked repositories. By default, all forked repositories are skipped when in <code>autodiscover</code> mode.</p> Name Value scopes repo type string allowedValues <pre><code>[\"auto\", \"enabled\", \"disabled\"]\n</code></pre> default <code>\"auto\"</code> cli <code>--fork-processing</code> env <code>RENOVATE_FORK_PROCESSING</code> <p>By default, Renovate skips any forked repositories when in <code>autodiscover</code> mode. It even skips a forked repository that has a Renovate configuration file, because Renovate doesn't know if that file was added by the forked repository.</p> <p>Process a fork in <code>autodiscover</code> mode</p> <p>If you want Renovate to run on a forked repository when in <code>autodiscover</code> mode then:</p> <ul> <li>Ensure a <code>renovate.json</code> config exists with <code>\"forkProcessing\": \"enabled\"</code> in your repository,</li> <li>Or run the CLI command with <code>--fork-processing=enabled</code></li> </ul> <p>Process a fork in other modes</p> <p>If you're running Renovate in some other mode, for example when giving a list of repositories to Renovate, but want to skip forked repositories: set <code>\"forkProcessing\": \"disabled\"</code> in your global config.</p> <p>When using the Mend Renovate App</p> <p>The behavior of <code>forkProcessing</code> depends on how you allow Renovate to run on your account.</p> <p>Renovate runs on all repositories</p> <p>If you allow Renovate to run on all your repositories, <code>forkProcessing</code> will be <code>\"disabled\"</code>. To run Renovate on a fork: add <code>\"forkProcessing\": \"enabled\"</code> to the forked repository's <code>renovate.json</code> file.</p> <p>Renovate runs on selected repositories</p> <p>If you allow Renovate to run on \"Selected\" repositories, <code>forkProcessing</code> will be <code>\"enabled\"</code> for each \"Selected\" repository.</p> <p>Allowed filenames</p> <p>Only the <code>onboardingConfigFileName</code> (which defaults to <code>renovate.json</code>) is supported for <code>forkProcessing</code>. You can't use other filenames because Renovate only checks the default filename when using the Git-hosting platform's API.</p>"},{"location":"configuration-options/#gitauthor","title":"<code>gitAuthor</code>","text":"<p>Author to use for Git commits. Must conform to RFC5322.</p> Name Value scopes repo type string supportsTemplating true cli <code>--git-author</code> env <code>RENOVATE_GIT_AUTHOR</code> default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>You can customize the Git author that's used whenever Renovate creates a commit, although we do not recommend this. When this field is unset (default), Renovate will use its platform credentials (e.g. token) to learn/discover its account's git author automatically.</p> <p>Note</p> <p>If running as a GitHub App and using <code>platformCommit</code>, GitHub itself sets the git author in commits so you should not configure this field.</p> <p>The <code>gitAuthor</code> option accepts a RFC5322-compliant string. It's recommended to include a name followed by an email address, e.g.</p> <pre><code>Development Bot &lt;dev-bot@my-software-company.com&gt;\n</code></pre> <p>Danger</p> <p>We strongly recommend that the Git author email you use is unique to Renovate. Otherwise, if another bot or human shares the same email and pushes to one of Renovate's branches then Renovate will mistake the branch as unmodified and potentially force push over the changes.</p>"},{"location":"configuration-options/#gitignoredauthors","title":"<code>gitIgnoredAuthors</code>","text":"<p>Git author emails ignored by Renovate. Entries can be exact RFC5322 strings, glob patterns, or regex patterns using Renovate regex syntax.</p> Name Value scopes repo type array subType string cli <code>--git-ignored-authors</code> env <code>RENOVATE_GIT_IGNORED_AUTHORS</code> default <code>[]</code> <p>Specify commit author emails ignored by Renovate.</p> <p>By default, Renovate will treat any PR as modified if another Git author has added to the branch. When a PR is considered modified, Renovate won't perform any further commits such as if it's conflicted or needs a version update. If you have other bots which commit on top of Renovate PRs, and don't want Renovate to treat these PRs as modified, then add the other Git author(s) to <code>gitIgnoredAuthors</code>.</p> <pre><code>{\n  \"gitIgnoredAuthors\": [\"some-bot@example.org\"]\n}\n</code></pre> <p><code>gitIgnoredAuthors</code> values can be exact RFC5322-compliant email strings, glob patterns, or regex patterns. For more details on the syntax and supported patterns, see Renovate's string pattern matching documentation.</p>"},{"location":"configuration-options/#gitlabignoreapprovals","title":"<code>gitLabIgnoreApprovals</code>","text":"<p>Ignore approval rules for MRs created by Renovate, which is useful for automerge.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> cli <code>--git-lab-ignore-approvals</code> env <code>RENOVATE_GIT_LAB_IGNORE_APPROVALS</code> <p>Ignore the default project level approval(s), so that Renovate can automerge its merge requests, without needing approval(s). Under the hood, it creates a MR-level approval rule where <code>approvals_required</code> is set to <code>0</code>. This option works only when <code>automerge=true</code> and either <code>automergeType=pr</code> or <code>automergeType=branch</code>. Also, approval rules overriding should not be prevented in GitLab settings.</p>"},{"location":"configuration-options/#gogetdirs","title":"<code>goGetDirs</code>","text":"<p>Directory pattern to run <code>go get</code> on.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type array subType string default <pre><code>[\"./...\"]\n</code></pre> supportedManagers gomod cli <code>--go-get-dirs</code> env <code>RENOVATE_GO_GET_DIRS</code> <p>By default, Renovate will run <code>go get -d -t ./...</code> to update the <code>go.sum</code>. If you need to modify this path, for example in order to ignore directories, you can override the default <code>./...</code> value using this option:</p> <pre><code>{\n  \"goGetDirs\": [\"./some-project/\", \"./tools/...\"]\n}\n</code></pre>"},{"location":"configuration-options/#group","title":"<code>group</code>","text":"<p>Config if <code>groupName</code> is enabled.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type object default <pre><code>{\"branchTopic\": \"{{{groupSlug}}}\", \"commitMessageTopic\": \"{{{groupName}}}\"}\n</code></pre> mergeable true <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>The default configuration for groups are essentially internal to Renovate and you normally shouldn't need to modify them. But you may add settings to any group by defining your own <code>group</code> configuration object.</p>"},{"location":"configuration-options/#groupname","title":"<code>groupName</code>","text":"<p>Human understandable name for the dependency group.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string supportsTemplating true cli <code>--group-name</code> env <code>RENOVATE_GROUP_NAME</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>There are multiple cases where it can be useful to group multiple upgrades together. Internally Renovate uses this for branches such as \"Pin Dependencies\", \"Lock File Maintenance\", etc. Another example used previously is to group together all related <code>eslint</code> packages, or perhaps <code>angular</code> or <code>babel</code>. To enable grouping, you configure the <code>groupName</code> field to something non-null.</p> <p>The <code>groupName</code> field allows free text and does not have any semantic interpretation by Renovate. All updates sharing the same <code>groupName</code> will be placed into the same branch/PR. For example, to group all non-major devDependencies updates together into a single PR:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDepTypes\": [\"devDependencies\"],\n      \"matchUpdateTypes\": [\"patch\", \"minor\"],\n      \"groupName\": \"devDependencies (non-major)\"\n    }\n  ]\n}\n</code></pre> <p>Note</p> <p>Replacement updates will never be grouped.  Lock file maintenance will never be grouped with other dependency updates.</p>"},{"location":"configuration-options/#groupsingleupdates","title":"<code>groupSingleUpdates</code>","text":"<p>Apply group settings even when the group contains only one update.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> <p>Note</p> <p>This option was recently made opt-in, instead of opt-out.</p>"},{"location":"configuration-options/#groupslug","title":"<code>groupSlug</code>","text":"<p>Slug to use for group (e.g. in branch name). Slug is calculated from <code>groupName</code> if <code>null</code>.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string supportsTemplating true <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>By default, Renovate will \"slugify\" the groupName to determine the branch name. For example if you named your group \"devDependencies (non-major)\" then the branchName would be <code>renovate/devdependencies-non-major</code>. If you wished to override this then you could configure like this:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDepTypes\": [\"devDependencies\"],\n      \"matchUpdateTypes\": [\"patch\", \"minor\"],\n      \"groupName\": \"devDependencies (non-major)\",\n      \"groupSlug\": \"dev-dependencies\"\n    }\n  ]\n}\n</code></pre> <p>As a result of the above, the branchName would be <code>renovate/dev-dependencies</code> instead.</p> <p>Note</p> <p>You shouldn't usually need to configure this unless you really care about your branch names.</p>"},{"location":"configuration-options/#hashedbranchlength","title":"<code>hashedBranchLength</code>","text":"<p>If enabled, branch names will use a hashing function to ensure each branch has that length.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type integer env <code>RENOVATE_HASHED_BRANCH_LENGTH</code> <p>Some code hosting systems have restrictions on the branch name lengths, this option lets you get around these restrictions. You can set the <code>hashedBranchLength</code> option to a number of characters that works for your system and then Renovate will generate branch names with the correct length by hashing <code>additionalBranchPrefix</code> and <code>branchTopic</code>, and then truncating the hash so that the full branch name (including <code>branchPrefix</code>) has the right number of characters.</p> <p>Example: If you have set <code>branchPrefix: \"deps-\"</code> and <code>hashedBranchLength: 12</code> it will result in a branch name like <code>deps-5bf36ec</code> instead of the traditional pretty branch name like <code>deps-react-17.x</code>.</p>"},{"location":"configuration-options/#hostrules","title":"<code>hostRules</code>","text":"<p>Host rules/configuration including credentials.</p> Name Value scopes repo type array subType object cli <code>--host-rules</code> mergeable true env <code>RENOVATE_HOST_RULES</code> previouslyKnownAs <pre><code>[\"endpoints\"]\n</code></pre> default <code>[]</code> <p>The primary purpose of <code>hostRules</code> is to configure credentials for host authentication. You tell Renovate how to match against the host you need authenticated, and then you also tell it which credentials to use.</p> <p>The lookup keys for <code>hostRules</code> are: <code>hostType</code> and <code>matchHost</code>, both of which are optional.</p> <p>Supported credential fields are <code>token</code>, <code>username</code>, <code>password</code>, <code>timeout</code>, <code>enabled</code> and <code>insecureRegistry</code>.</p> <p>Example for configuring <code>docker</code> auth:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"docker.io\",\n      \"username\": \"&lt;some-username&gt;\",\n      \"password\": \"&lt;some-password&gt;\"\n    }\n  ]\n}\n</code></pre> <p>If multiple <code>hostRules</code> match a request, then they will be applied in the following order/priority:</p> <ol> <li>rules with only <code>hostType</code> specified</li> <li>rules with only <code>matchHost</code> specified (sorted by <code>matchHost</code> length if multiple match)</li> <li>rules with both <code>matchHost</code> and <code>hostType</code> specified (sorted by <code>matchHost</code> length if multiple match)</li> </ol> <p>To disable requests to a particular host, you can configure a rule like:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"registry.npmjs.org\",\n      \"enabled\": false\n    }\n  ]\n}\n</code></pre> <p>A preset alternative to the above is:</p> <pre><code>{\n  \"extends\": [\":disableHost(registry.npmjs.org)\"]\n}\n</code></pre> <p>To match a specific port, add the port to <code>matchHost</code>:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"https://domain.com:9118\",\n      \"enabled\": false\n    }\n  ]\n}\n</code></pre> <p>Note</p> <p>A <code>matchHost</code> with a port or a path but no scheme, like <code>domain.com:9118</code> or <code>domain.com/path</code>, is treated as <code>https://domain.com:9118</code> or <code>https://domain.com/path</code>. To match a port over plain <code>http</code>, include the scheme.</p> <p>Note</p> <p>Disabling a host is only 100% effective if added to self-hosted config. Renovate currently still checks its cache for results first before trying to connect, so if a public host is blocked in your repository config (e.g. <code>renovate.json</code>) then it's possible you may get cached results from that host if another repository using the same Renovate deployment has successfully queried for the same dependency recently.</p> <p>Note</p> <p><code>enabled</code> is not resolved by specificity alone: host rules from the self-hosted administrator's own config are resolved at a higher trust level than those from repository config or a preset. So if the administrator's own rules set <code>enabled</code> for a host, repository config or a preset cannot re-enable - or disable - that host, no matter how specific its <code>matchHost</code> is.</p>"},{"location":"configuration-options/#hostrulesabortignorestatuscodes","title":"<code>hostRules.abortIgnoreStatusCodes</code>","text":"<p>A list of HTTP status codes safe to ignore even when <code>abortOnError=true</code>.</p> Name Value type array subType number parents <code>hostRules</code> default <code>[]</code> <p>This field can be used to configure status codes that Renovate ignores and passes through when <code>abortOnError</code> is set to <code>true</code>. For example to also skip 404 responses then configure the following:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"abortOnError\": true,\n      \"abortIgnoreStatusCodes\": [404]\n    }\n  ]\n}\n</code></pre> <p>Tip</p> <p>This field is not mergeable, so the last-applied host rule takes precedence.</p>"},{"location":"configuration-options/#hostrulesabortonerror","title":"<code>hostRules.abortOnError</code>","text":"<p>If enabled, Renovate aborts its run when HTTP request errors occur.</p> Name Value type boolean default <code>false</code> parents <code>hostRules</code> <p>Use this field to configure Renovate to abort runs for custom hosts. By default, Renovate will only abort for known public hosts, which has the downside that transient errors for other hosts can cause autoclosing of PRs.</p> <p>To abort Renovate runs for HTTP failures from any host:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"abortOnError\": true\n    }\n  ]\n}\n</code></pre> <p>To abort Renovate runs for any <code>docker</code> datasource failures:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"hostType\": \"docker\",\n      \"abortOnError\": true\n    }\n  ]\n}\n</code></pre> <p>To abort Renovate for errors for a specific <code>docker</code> host:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"docker.company.com\",\n      \"abortOnError\": true\n    }\n  ]\n}\n</code></pre> <p>When this field is enabled, Renovate will abort its run if it encounters either (a) any low-level http error (e.g. <code>ETIMEDOUT</code>) or (b) gets a response not matching any of the configured <code>abortIgnoreStatusCodes</code> (e.g. <code>500 Internal Error</code>);</p>"},{"location":"configuration-options/#hostrulesartifactauth","title":"<code>hostRules.artifactAuth</code>","text":"<p>A list of package managers to enable artifact auth. Only managers on the list are enabled. All are enabled if <code>null</code>.</p> Name Value type array subType string parents <code>hostRules</code> allowedValues <pre><code>[\"composer\"]\n</code></pre> default <code>[]</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>You may use this field whenever it is needed to only enable authentication for a specific set of managers.</p> <p>For example, using this option could be used whenever authentication using Git for private composer packages is already being handled through the use of SSH keys, which results in no need for also setting up authentication using tokens.</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"hostType\": \"gitlab\",\n      \"matchHost\": \"gitlab.myorg.com\",\n      \"token\": \"abc123\",\n      \"artifactAuth\": [\"composer\"]\n    }\n  ]\n}\n</code></pre> <p>Supported artifactAuth and hostType combinations:</p> artifactAuth hostTypes <code>composer</code> <code>gitlab</code>, <code>packagist</code>, <code>github</code>, <code>git-tags</code>"},{"location":"configuration-options/#hostrulesauthtype","title":"<code>hostRules.authType</code>","text":"<p>Authentication type for HTTP header. e.g. <code>\"Bearer\"</code> or <code>\"Basic\"</code>. Use <code>\"Token-Only\"</code> to use only the token without an authorization type.</p> Name Value type string parents <code>hostRules</code> default <code>\"Bearer\"</code> <p>You may use the <code>authType</code> option to create a custom HTTP <code>authorization</code> header. For <code>authType</code> to work, you must also set your own <code>token</code>.</p> <p>Do not set <code>authType=Bearer</code>: it's the default setting for Renovate anyway. Do not set a username or password when you're using <code>authType</code>, as <code>authType</code> doesn't use usernames or passwords.</p> <p>An example for npm basic auth with token:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"npm.custom.org\",\n      \"token\": \"&lt;some-token&gt;\",\n      \"authType\": \"Basic\"\n    }\n  ]\n}\n</code></pre> <p>This will generate the following header: <code>authorization: Basic &lt;some-token&gt;</code>.</p> <p>To use a bare token in the authorization header (required by e.g. Hex) - use the <code>authType</code> \"Token-Only\":</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"https://hex.pm/api/repos/private_repo/\",\n      \"token\": \"&lt;some-token&gt;\",\n      \"authType\": \"Token-Only\"\n    }\n  ]\n}\n</code></pre> <p>This will generate the header <code>authorization: &lt;some-token&gt;</code>.</p>"},{"location":"configuration-options/#hostrulesconcurrentrequestlimit","title":"<code>hostRules.concurrentRequestLimit</code>","text":"<p>Limit concurrent requests per host.</p> Name Value type integer parents <code>hostRules</code> <p>Usually the default setting is fine, but you can use <code>concurrentRequestLimit</code> to limit the number of concurrent outstanding requests. You only need to adjust this setting if a datasource is rate limiting Renovate or has problems with the load. The limit will be set for any host it applies to.</p> <p>Example config:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"api.github.com\",\n      \"concurrentRequestLimit\": 2\n    }\n  ]\n}\n</code></pre> <p>Use an exact host for <code>matchHost</code> and not a domain (e.g. <code>api.github.com</code> as shown above and not <code>github.com</code>). Do not combine with <code>hostType</code> in the same rule or it won't work.</p>"},{"location":"configuration-options/#hostrulesdnscache","title":"<code>hostRules.dnsCache</code>","text":"<p>Enable got DNS cache.</p> Name Value type boolean default <code>false</code> parents <code>hostRules</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>This feature has been deprecated</p> <p>This option is deprecated and will be removed in a future release.</p> <p>This option is deprecated and has no effect. Renovate removed its DNS cache in v38.0.0.</p>"},{"location":"configuration-options/#hostrulesenablehttp2","title":"<code>hostRules.enableHttp2</code>","text":"<p>Enable got HTTP/2 support.</p> Name Value type boolean default <code>false</code> parents <code>hostRules</code> <p>Enable got http2 support.</p>"},{"location":"configuration-options/#hostrulesheaders","title":"<code>hostRules.headers</code>","text":"<p>Put fields to be forwarded to the HTTP request headers in the headers config option.</p> Name Value type object additionalProperties <pre><code>{\"type\": \"string\"}\n</code></pre> parents <code>hostRules</code> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>You can provide a <code>headers</code> object that includes fields to be forwarded to the HTTP request headers. By default, all headers starting with \"X-\" are allowed.</p> <p>A self-hosted administrator may configure an override for <code>allowedHeaders</code> to configure more permitted headers.</p> <p><code>headers</code> you configure in a repository config file, or a preset it extends, are checked against <code>allowedHeaders</code>. Any header which is not permitted is dropped, and a warning is logged.</p> <p><code>allowedHeaders</code> does not constrain the self-hosted administrator's own <code>hostRules</code> (for example in a <code>config.js</code> file, or a <code>repositories[]</code> entry): their <code>headers</code> are always applied, regardless of <code>allowedHeaders</code>.</p> <p>When more than one of your host rules matches a request, the <code>headers</code> of the most specific matching rule are used, and replace the <code>headers</code> of the broader rules it matched alongside.</p> <p>A self-hosted administrator's own host rules are resolved the same way, and whichever <code>headers</code> that leaves them sending to the host are then applied on top of yours:</p> <ul> <li>your host rules cannot stop one of those headers from being sent, and</li> <li>where one of those headers has a name you also set, the administrator's value is used.</li> </ul> <p>This covers the headers the administrator actually sends to that host. One they set in a broader rule of their own, but masked with a narrower rule of their own, is not sent there - and so is yours to set.</p> <p>For example:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"https://domain.com/all-versions\",\n      \"headers\": {\n        \"X-custom-header\": \"secret\"\n      }\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#hostruleshosttype","title":"<code>hostRules.hostType</code>","text":"<p>hostType for a package rule. Can be a platform name or a datasource name.</p> Name Value type string parents <code>hostRules</code> default <code>null</code> <p><code>hostType</code> is another way to filter rules and can be either a platform such as <code>github</code> and <code>bitbucket-server</code>, or it can be a datasource such as <code>docker</code> and <code>rubygems</code>. You usually don't need to configure it in a host rule if you have already configured <code>matchHost</code> and only one host type is in use for those, as is usually the case. <code>hostType</code> can help for cases like an enterprise registry that serves multiple package types and has different authentication for each, although it's often the case that multiple <code>matchHost</code> rules could achieve the same thing.</p>"},{"location":"configuration-options/#hostruleshttpscertificate","title":"<code>hostRules.httpsCertificate</code>","text":"<p>The certificate chains in PEM format.</p> Name Value type string parents <code>hostRules</code> <p>Specifies the Certificate chains in PEM format for mTLS authentication.</p>"},{"location":"configuration-options/#hostruleshttpscertificateauthority","title":"<code>hostRules.httpsCertificateAuthority</code>","text":"<p>The overriding trusted CA certificate.</p> Name Value type string parents <code>hostRules</code> <p>By default, Renovate uses the curated list of well-known CAs by Mozilla. You may use another Certificate Authority instead, by setting it in the <code>httpsCertificateAuthority</code> config option.</p>"},{"location":"configuration-options/#hostruleshttpsprivatekey","title":"<code>hostRules.httpsPrivateKey</code>","text":"<p>The private key in PEM format.</p> Name Value type string parents <code>hostRules</code> <p>Specifies the private key in PEM format for mTLS authentication.</p> <p>Warning</p> <p>Do not put your private key into this field, to avoid losing confidentiality completely. You must use secrets to pass it down securely instead.</p>"},{"location":"configuration-options/#hostrulesinsecureregistry","title":"<code>hostRules.insecureRegistry</code>","text":"<p>Explicitly turn on insecure Docker registry access (HTTP).</p> Name Value type boolean default <code>false</code> parents <code>hostRules</code> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>Enable this option to allow Renovate to connect to an insecure Docker registry that is HTTP only. This is insecure and is not recommended.</p> <p>Example:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"reg.insecure.com\",\n      \"insecureRegistry\": true\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#hostruleskeepalive","title":"<code>hostRules.keepAlive</code>","text":"<p>Enable HTTP keep-alive for hosts.</p> Name Value type boolean default <code>false</code> parents <code>hostRules</code> previouslyKnownAs <pre><code>[\"keepalive\"]\n</code></pre> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>If enabled, this allows a single TCP connection to remain open for multiple HTTP(S) requests/responses.</p>"},{"location":"configuration-options/#hostrulesmatchhost","title":"<code>hostRules.matchHost</code>","text":"<p>A domain name, host name or base URL to match against.</p> Name Value type string parents <code>hostRules</code> default <code>null</code> <p>This can be a base URL (e.g. <code>https://api.github.com</code>) or a hostname like <code>github.com</code> or <code>api.github.com</code>. If the value starts with <code>http(s)</code> then it will only match against URLs which start with the full base URL. Otherwise, it will be matched by checking if the URL's hostname matches the <code>matchHost</code> directly or ends with it. When checking the end of the hostname, a single dot is prefixed to the value of <code>matchHost</code>, if one is not already present, to ensure it can only match against whole domain segments.</p> <p>A base URL ending in <code>/</code> (e.g. <code>https://gitlab.com/api/v4/projects/1/</code>) matches that path and everything below it, also when the URL has no trailing <code>/</code>, but not a sibling path like <code>https://gitlab.com/api/v4/projects/10</code>.</p> <p>The <code>matchHost</code> URL must be the same as the <code>registryUrl</code> set in <code>.npmrc</code>, or you'll get authentication issues when the artifacts are updated when yarn or npm runs.</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"https://gitlab.myorg.com/api/v4/packages/npm/\",\n      \"token\": \"abc123\"\n    }\n  ]\n}\n</code></pre> <p>The above corresponds with an <code>.npmrc</code> like the following:</p> <pre><code>registry=https://gitlab.myorg.com/api/v4/packages/npm/\n</code></pre> <p>Note</p> <p>Values containing a URL path or a port but missing a scheme will be prepended with <code>https://</code> (e.g. <code>domain.com/path</code> \u2192 <code>https://domain.com/path</code>, <code>domain.com:9118</code> \u2192 <code>https://domain.com:9118</code>).</p>"},{"location":"configuration-options/#hostrulesmaxrequestspersecond","title":"<code>hostRules.maxRequestsPerSecond</code>","text":"<p>Limit requests rate per host.</p> Name Value type integer parents <code>hostRules</code> default 0 <p>In addition to <code>concurrentRequestLimit</code>, you can limit the maximum number of requests that can be made per one second. It can be used to set minimal delay between two requests to the same host. Fractional values are allowed, e.g. <code>0.25</code> means 1 request per 4 seconds. Default value <code>0</code> means no limit.</p> <p>Example config:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"api.github.com\",\n      \"maxRequestsPerSecond\": 2\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#hostrulesmaxretryafter","title":"<code>hostRules.maxRetryAfter</code>","text":"<p>Maximum retry-after header value to wait for before retrying a failed request.</p> Name Value type integer default 60 parents <code>hostRules</code> <p>A remote host may return a <code>4xx</code> response with a <code>Retry-After</code> header value, which indicates that Renovate has been rate-limited. Renovate may try to contact the host again after waiting a certain time, that's set by the host. By default, Renovate tries again after the <code>Retry-After</code> header value has passed, up to a maximum of 60 seconds. If the <code>Retry-After</code> value is more than 60 seconds, Renovate will abort the request instead of waiting.</p> <p>You can configure a different maximum value in seconds using <code>maxRetryAfter</code>:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"api.github.com\",\n      \"maxRetryAfter\": 25\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#hostrulesreadonly","title":"<code>hostRules.readOnly</code>","text":"<p>Match against requests that only read data and do not mutate anything.</p> Name Value type boolean parents <code>hostRules</code> default <code>true</code> <p>If the <code>readOnly</code> field is being set to <code>true</code> inside the host rule, it will match only against the requests that are known to be read operations. Examples are <code>GET</code> requests or <code>HEAD</code> requests, but also it could be certain types of GraphQL queries.</p> <p>This option could be used to avoid rate limits for certain platforms like GitHub or Bitbucket, by offloading the read operations to a different user.</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"api.github.com\",\n      \"readOnly\": true,\n      \"token\": \"********\"\n    }\n  ]\n}\n</code></pre> <p>If more than one token matches for a read-only request then the <code>readOnly</code> token will be given preference.</p>"},{"location":"configuration-options/#hostrulestimeout","title":"<code>hostRules.timeout</code>","text":"<p>Timeout (in milliseconds) for queries to external endpoints.</p> Name Value type integer parents <code>hostRules</code> <p>Use this figure to adjust the timeout for queries. The default is 60s, which is quite high. To adjust it down to 10s for all queries, do this:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"timeout\": 10000\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#ignoredeprecated","title":"<code>ignoreDeprecated</code>","text":"<p>Avoid upgrading from a non-deprecated version to a deprecated one.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type boolean default <code>true</code> cli <code>--ignore-deprecated</code> env <code>RENOVATE_IGNORE_DEPRECATED</code> <p>By default, Renovate won't update a dependency version to a deprecated release unless the current version was itself deprecated. The goal of this is to make sure you don't upgrade from a non-deprecated version to a deprecated one, only because it's higher than the current version.</p> <p>If for some reason you wish to force deprecated updates with Renovate, you can configure <code>ignoreDeprecated</code> to <code>false</code>, which we do not recommend for most situations.</p>"},{"location":"configuration-options/#ignoredeps","title":"<code>ignoreDeps</code>","text":"<p>Dependencies to ignore.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type array subType string mergeable true cli <code>--ignore-deps</code> env <code>RENOVATE_IGNORE_DEPS</code> default <code>[]</code> <p>The <code>ignoreDeps</code> configuration field allows you to define a list of dependency names to be ignored by Renovate. Currently it supports only \"exact match\" dependency names and not any patterns. e.g. to ignore both <code>eslint</code> and <code>eslint-config-base</code> you would add this to your config:</p> <pre><code>{\n  \"ignoreDeps\": [\"eslint\", \"eslint-config-base\"]\n}\n</code></pre> <p>The above is the same as if you wrote this package rule:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"eslint\", \"eslint-config-base\"],\n      \"enabled\": false\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#ignorepaths","title":"<code>ignorePaths</code>","text":"<p>Skip any package file whose path matches one of these. Can be a string or glob pattern.</p> Name Value scopes repo, manager type array mergeable false subType string default <pre><code>[\"**/node_modules/**\", \"**/bower_components/**\"]\n</code></pre> cli <code>--ignore-paths</code> env <code>RENOVATE_IGNORE_PATHS</code> <p>Renovate will extract dependencies from every file it finds in a repository, unless that file is explicitly ignored. With this setting you can selectively ignore package files that would normally be \"autodiscovered\" and updated by Renovate.</p> <p>For instance if you have a project with an <code>\"examples/\"</code> directory you wish to ignore:</p> <pre><code>{\n  \"ignorePaths\": [\"**/examples/**\"]\n}\n</code></pre> <p>Renovate's default ignore is <code>node_modules</code> and <code>bower_components</code> only. If you are extending from the popular <code>config:recommended</code> preset then it adds ignore patterns for <code>vendor</code>, <code>examples</code>, <code>test(s)</code> and <code>fixtures</code> directories too.</p>"},{"location":"configuration-options/#ignoreplugins","title":"<code>ignorePlugins</code>","text":"<p>Set this to <code>true</code> if <code>allowPlugins=true</code> but you wish to skip running plugins when updating lock files.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> cli <code>--ignore-plugins</code> env <code>RENOVATE_IGNORE_PLUGINS</code> <p>Set this to <code>true</code> if running plugins causes problems. Applicable for Composer only for now.</p>"},{"location":"configuration-options/#ignorepresets","title":"<code>ignorePresets</code>","text":"<p>A list of presets to ignore, including any that are nested inside an <code>extends</code> array.</p> Name Value scopes any type array subType string env <code>RENOVATE_IGNORE_PRESETS</code> default <code>[]</code> <p>Use this if you are extending a complex preset but don't want to use every \"sub preset\" that it includes. For example, consider this config:</p> <pre><code>{\n  \"extends\": [\"config:recommended\"],\n  \"ignorePresets\": [\"group:monorepos\"]\n}\n</code></pre> <p>It would take the entire <code>\"config:recommended\"</code> preset - which has a lot of sub-presets - but ignore the <code>\"group:monorepos\"</code> rule.</p>"},{"location":"configuration-options/#ignorereviewers","title":"<code>ignoreReviewers</code>","text":"<p>Reviewers to be ignored in PR reviewers presence (either username or email address depending on the platform).</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type array subType string cli <code>--ignore-reviewers</code> env <code>RENOVATE_IGNORE_REVIEWERS</code> default <code>[]</code> <p>By default, Renovate does not add assignees or reviewers to PRs which are configured for automerge. If tests have failed, Renovate then does add them, but only if the assignees and reviewers list is empty. In the case that a user is automatically added as reviewer (such as Renovate Approve bot) and you want to ignore it for the purpose of this decision, add it to the <code>ignoreReviewers</code> list.</p> <pre><code>{\n  \"reviewers\": [\"foo\"],\n  \"ignoreReviewers\": [\"renovate-approve\"]\n}\n</code></pre> <p>Please note that Reviewers are only added during creation of a PR, but are not modified afterwards.</p>"},{"location":"configuration-options/#ignorescripts","title":"<code>ignoreScripts</code>","text":"<p>Set this to <code>false</code> if <code>allowScripts=true</code> and you wish to run scripts when updating lock files.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>true</code> supportedManagers npm, bun, composer, copier cli <code>--ignore-scripts</code> env <code>RENOVATE_IGNORE_SCRIPTS</code> <p>By default, Renovate will disable package manager scripts. Allowing packager manager scripts is a risk:</p> <ul> <li>Untrusted or compromised repository users could use package manager scripts to exploit the system where Renovate runs, and</li> <li>Malicious package authors could use scripts to exploit a repository and Renovate system, for example to exfiltrate source code and secrets</li> </ul> <p>No script execution on free Mend-hosted Renovate</p> <p>The Mend Renovate App does not allow scripts to run. We do not plan to let users on free tiers run scripts, because the risk of abuse is too high.</p> <p>Renovate Enterprise Cloud can be configured to run scripts</p> <p>Scripts can be enabled for paying customers on Mend.io hosted apps. Please ask Mend.io sales about \"Renovate Enterprise Cloud\".</p> <p>Allowing scripts if self-hosting Renovate</p> <p>If you are self-hosting Renovate, and want to allow Renovate to run any scripts:</p> <ol> <li>Set the self-hosted config option <code>allowScripts</code> to <code>true</code> in your admin configuration</li> <li>Set <code>ignoreScripts</code> to <code>false</code> for the package managers you want to allow to run scripts (only works for the supportedManagers listed in the table above)</li> </ol>"},{"location":"configuration-options/#ignoretests","title":"<code>ignoreTests</code>","text":"<p>Set to <code>true</code> to enable automerging without tests.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> cli <code>--ignore-tests</code> env <code>RENOVATE_IGNORE_TESTS</code> <p>Currently Renovate's default behavior is to only automerge if every status check has succeeded.</p> <p>Setting this option to <code>true</code> means that Renovate will ignore all status checks. You can set this if you don't have any status checks but still want Renovate to automerge PRs. Beware: configuring Renovate to automerge without any tests can lead to broken builds on your base branch, please think again before enabling this!</p>"},{"location":"configuration-options/#ignoreunstable","title":"<code>ignoreUnstable</code>","text":"<p>Ignore versions with unstable SemVer.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type boolean default <code>true</code> cli <code>--ignore-unstable</code> env <code>RENOVATE_IGNORE_UNSTABLE</code> <p>By default, Renovate won't update any package versions to unstable versions (e.g. <code>4.0.0-rc3</code>) unless the current version has the same <code>major.minor.patch</code> and was already unstable (e.g. it was already on <code>4.0.0-rc2</code>). Renovate will also not \"jump\" unstable versions automatically, e.g. if you are on <code>4.0.0-rc2</code> and newer versions <code>4.0.0</code> and <code>4.1.0-alpha.1</code> exist then Renovate will update you to <code>4.0.0</code> only. If you need to force permanent unstable updates for a package, you can add a package rule setting <code>ignoreUnstable</code> to <code>false</code>. In that case you will usually also want to set <code>respectLatest</code> to <code>false</code> so that Renovate considers versions ahead of <code>latest</code>.</p> <p>Also check out the <code>followTag</code> configuration option above if you wish Renovate to keep you pinned to a particular release tag.</p>"},{"location":"configuration-options/#includepaths","title":"<code>includePaths</code>","text":"<p>Include package files only within these defined paths.</p> Name Value scopes repo, manager type array subType string cli <code>--include-paths</code> env <code>RENOVATE_INCLUDE_PATHS</code> default <code>[]</code> <p>If you wish for Renovate to process only select paths in the repository, use <code>includePaths</code>.</p> <p>Alternatively, if you need to exclude certain paths in the repository then consider <code>ignorePaths</code> instead. If you are more interested in including only certain package managers (e.g. <code>npm</code>), then consider <code>enabledManagers</code> instead.</p>"},{"location":"configuration-options/#internalchecksassuccess","title":"<code>internalChecksAsSuccess</code>","text":"<p>Whether to consider passing internal checks such as <code>minimumReleaseAge</code> when determining branch status.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> cli <code>--internal-checks-as-success</code> env <code>RENOVATE_INTERNAL_CHECKS_AS_SUCCESS</code> <p>By default, internal Renovate checks such as <code>renovate/stability-days</code> are not counted towards a branch being \"green\" or not. This is primarily to prevent automerge when the only check is a passing Renovate check.</p> <p>Internal checks will always be counted/considered if they are in pending or failed states. If there are multiple passing checks for a branch, including non-Renovate ones, then this setting won't make any difference.</p> <p>Change this setting to <code>true</code> if you want to use internal Renovate checks towards a passing branch result.</p>"},{"location":"configuration-options/#internalchecksfilter","title":"<code>internalChecksFilter</code>","text":"<p>When and how to filter based on internal checks.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert, updateType type string allowedValues <pre><code>[\"strict\", \"flexible\", \"none\"]\n</code></pre> default <code>\"strict\"</code> cli <code>--internal-checks-filter</code> env <code>RENOVATE_INTERNAL_CHECKS_FILTER</code> <p>This setting determines whether Renovate controls when and how filtering of internal checks are performed, particularly when multiple versions of the same update type are available. Currently this applies to the <code>minimumReleaseAge</code> check only.</p> <ul> <li><code>none</code>: No filtering will be performed, and the highest release will be used regardless of whether it's pending or not</li> <li><code>strict</code>: All pending releases will be filtered. PRs will be skipped unless a non-pending version is available</li> <li><code>flexible</code>: Similar to strict, but in the case where all versions are pending then a PR will be created with the highest pending version</li> </ul> <p>The <code>flexible</code> mode can result in \"flapping\" of Pull Requests, for example: a pending PR with version <code>1.0.3</code> is first released but then downgraded to <code>1.0.2</code> once it passes <code>minimumReleaseAge</code>. We recommend that you use the <code>strict</code> mode, and enable the <code>dependencyDashboard</code> so that you can see suppressed PRs.</p>"},{"location":"configuration-options/#keepupdatedlabel","title":"<code>keepUpdatedLabel</code>","text":"<p>If set, users can add this label to PRs to request they be kept updated with the base branch.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string supportedPlatforms azure, forgejo, gerrit, gitea, github, gitlab cli <code>--keep-updated-label</code> env <code>RENOVATE_KEEP_UPDATED_LABEL</code> default <code>null</code> <p>On supported platforms you may add a label to a PR so that Renovate recreates/rebases the PR when the branch falls behind the base branch. Adding the <code>keepUpdatedLabel</code> label to a PR makes Renovate behave as if <code>rebaseWhen</code> were set to <code>behind-base-branch</code>, but only for the given PR. Renovate does not remove the label from the PR after it finishes rebasing. This is different from the <code>rebaseLabel</code> option, where Renovate removes the label from the PR after rebasing.</p> <p><code>keepUpdatedLabel</code> can be useful when you have approved certain PRs and want Renovate to keep the PRs up-to-date until you're ready to merge them. The setting <code>keepUpdatedLabel</code> is best used in this scenario:</p> <ul> <li>By default, you configure <code>rebaseWhen</code> to <code>never</code> or <code>conflicted</code> to reduce rebasing</li> <li>Sometimes, you want Renovate to keep specific PRs up-to-date with their base branch (equivalent to <code>rebaseWhen=behind-base-branch</code>)</li> </ul>"},{"location":"configuration-options/#labels","title":"<code>labels</code>","text":"<p>Labels to set in Pull Request.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type array subType string supportsTemplating true cli <code>--labels</code> env <code>RENOVATE_LABELS</code> default <code>[]</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>By default, Renovate won't add any labels to PRs. If you want Renovate to add labels to PRs it creates then define a <code>labels</code> array of one or more label strings. If you want the same label(s) for every PR then you can configure it at the top level of config. However you can also fully override them on a per-package basis.</p> <p>Consider this example:</p> <pre><code>{\n  \"labels\": [\"dependencies\"],\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"/eslint/\"],\n      \"labels\": [\"linting\"]\n    }\n  ]\n}\n</code></pre> <p>With the above config, every PR raised by Renovate will have the label <code>dependencies</code> while PRs containing <code>eslint</code>-related packages will instead have the label <code>linting</code>.</p> <p>Behavior details:</p> <ul> <li>On Forgejo, Gitea, GitHub and GitLab: Renovate will keep PR labels in sync with configured labels, provided that no other user or bot has made changes to the labels after PR creation. If labels are changed by any other account, Renovate will stop making further changes.</li> <li>For other platforms, Renovate will add labels only at time of PR creation and not update them after that.</li> </ul> <p>The <code>labels</code> array is non-mergeable, meaning if multiple <code>packageRules</code> match then Renovate uses the last value for <code>labels</code>. If you want to add/combine labels, use the <code>addLabels</code> config option, which is mergeable.</p> <p>Note</p> <p>Keep your labels within the maximum character limit for your Git hosting platform. Renovate usually truncates labels to 50 characters, except for GitLab, which has a 255 character limit.</p>"},{"location":"configuration-options/#lockfilemaintenance","title":"<code>lockFileMaintenance</code>","text":"<p>Configuration for lock file maintenance.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type object default <pre><code>{\n  \"enabled\": false,\n  \"recreateWhen\": \"always\",\n  \"branchTopic\": \"lock-file-maintenance\",\n  \"commitMessageAction\": \"Lock file maintenance\",\n  \"commitMessageTopic\": null,\n  \"commitMessageExtra\": null,\n  \"schedule\": [\"before 4am on monday\"],\n  \"groupName\": null,\n  \"prBodyDefinitions\": {\"Change\": \"All locks refreshed\"}\n}\n</code></pre> mergeable true env <code>RENOVATE_LOCK_FILE_MAINTENANCE</code> <p>You can use <code>lockFileMaintenance</code> to refresh lock files to keep them up-to-date.</p> <p>When Renovate performs <code>lockFileMaintenance</code> it deletes the lock file and runs the relevant package manager. That package manager creates a new lock file, where all dependency versions are updated to the latest version. Renovate then commits that lock file to the update branch and creates the lock file update PR.</p> <p>Supported lock files:</p> Manager Lockfile <code>apm</code> <code>apm.lock.yaml</code> <code>bazel-module</code> <code>MODULE.bazel.lock</code> <code>bazelisk</code> <code>MODULE.bazel.lock</code> <code>bun</code> <code>bun.lockb</code>, <code>bun.lock</code> <code>bundler</code> <code>Gemfile.lock</code> <code>cargo</code> <code>Cargo.lock</code> <code>composer</code> <code>composer.lock</code> <code>conan</code> <code>conan.lock</code> <code>deno</code> <code>deno.lock</code> <code>devbox</code> <code>devbox.lock</code> <code>gleam</code> <code>manifest.toml</code> <code>gradle</code> <code>gradle.lockfile</code> <code>helmfile</code> <code>helmfile.lock</code> <code>helmv3</code> <code>Chart.lock</code> <code>jsonnet-bundler</code> <code>jsonnetfile.lock.json</code> <code>mise</code> <code>mise.lock</code> <code>mix</code> <code>mix.lock</code> <code>nix</code> <code>flake.lock</code> <code>npm</code> <code>package-lock.json</code>, <code>pnpm-lock.yaml</code>, <code>yarn.lock</code> <code>nuget</code> <code>packages.lock.json</code> <code>paket</code> <code>paket.lock</code> <code>pep621</code> <code>pdm.lock</code>, <code>uv.lock</code> <code>pip-compile</code> <code>requirements.txt</code> <code>pipenv</code> <code>Pipfile.lock</code> <code>pixi</code> <code>pixi.lock</code> <code>poetry</code> <code>poetry.lock</code> <code>pub</code> <code>pubspec.lock</code> <code>terraform</code> <code>.terraform.lock.hcl</code> <code>terragrunt</code> <code>.terraform.lock.hcl</code> <code>vendir</code> <code>vendir.lock.yml</code> <p>Support for new lock files may be added via feature request.</p> <p>By default, <code>lockFileMaintenance</code> is disabled. To enable <code>lockFileMaintenance</code> add this to your configuration:</p> <pre><code>{\n  \"lockFileMaintenance\": { \"enabled\": true }\n}\n</code></pre> <p>To reduce \"noise\" in the repository, Renovate performs <code>lockFileMaintenance</code> <code>\"before 4am on monday\"</code>, i.e. to achieve once-per-week semantics. Depending on its running schedule, Renovate may run a few times within that time window - even possibly updating the lock file more than once - but it hopefully leaves enough time for tests to run and automerge to apply, if configured.</p>"},{"location":"configuration-options/#loglevelremap","title":"<code>logLevelRemap</code>","text":"<p>Remap log levels to different levels.</p> Name Value scopes repo type array subType object mergeable true default <code>[]</code> <p>This option allows you to remap log levels for specific messages.</p> <p>Be careful with remapping <code>warn</code> or <code>error</code> messages to lower log levels, as it may hide important information.</p> <pre><code>{\n  \"logLevelRemap\": [\n    {\n      \"matchMessage\": \"/^pip-compile:/\",\n      \"newLogLevel\": \"info\"\n    },\n    {\n      \"matchMessage\": \"Package lookup error\",\n      \"newLogLevel\": \"warn\"\n    },\n    {\n      \"matchMessage\": \"/^Please upgrade the version of Node.js/\",\n      \"newLogLevel\": \"info\"\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#loglevelremapmatchmessage","title":"<code>logLevelRemap.matchMessage</code>","text":"<p>Regex/minimatch expression to match against log message.</p> Name Value type string parents <code>logLevelRemap</code> default <code>null</code> <p>Use <code>matchMessage</code> to match the log message you want to remap. Accepts a string or regex pattern.</p>"},{"location":"configuration-options/#loglevelremapnewloglevel","title":"<code>logLevelRemap.newLogLevel</code>","text":"<p>New log level to use if matchMessage matches.</p> Name Value type string allowedValues <pre><code>[\"trace\", \"debug\", \"info\", \"warn\", \"error\", \"fatal\"]\n</code></pre> parents <code>logLevelRemap</code> default <code>null</code> <p>For log level remapping, <code>newLogLevel</code> will set for the particular log message:</p> <pre><code>{\n  \"logLevelRemap\": [\n    {\n      \"matchMessage\": \"/Error executing maven wrapper update command/\",\n      \"newLogLevel\": \"warn\"\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#major","title":"<code>major</code>","text":"<p>Configuration to apply when an update type is <code>major</code>.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type object mergeable true env <code>RENOVATE_MAJOR</code> <p>Add to this object if you wish to define rules that apply only to major updates.</p>"},{"location":"configuration-options/#maxmajorincrement","title":"<code>maxMajorIncrement</code>","text":"<p>Limit the maximum major version increment allowed. Set to 0 to disable.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type integer default 500 <p>This is particularly useful for preventing upgrades from SemVer-based versions to CalVer-based ones.</p> <p>For example, if you're on version <code>19.0.0</code>, Renovate will upgrade to <code>22.0.0</code> but filter out versions like <code>999.0.0</code> and <code>2025.0.0</code>.</p> <p>You can use <code>packageRules</code> to customize this behavior for specific packages:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Allow to upgrade Home Assistant from 0.x to 2025.x\",\n      \"matchPackageNames\": [\"homeassistant\"],\n      \"maxMajorIncrement\": 0\n    }\n  ]\n}\n</code></pre> <p>The above allows unlimited major version upgrades by setting <code>maxMajorIncrement</code> to <code>0</code>.</p> <p>Alternatively, to limit major upgrades to within 10 versions:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Limit xmldoc major upgrades to within 10 versions\",\n      \"matchPackageNames\": [\"xmldoc\"],\n      \"maxMajorIncrement\": 10\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#managerfilepatterns","title":"<code>managerFilePatterns</code>","text":"<p>RegEx (<code>re2</code>) and glob patterns for matching manager files.</p> Name Value type array subType string mergeable true scopes manager parents <code>customManagers</code> default <code>[]</code> <p>Formerly known as <code>fileMatch</code>, which supported regex-only.</p> <p><code>managerFilePatterns</code> supports both regex and glob patterns. Any existing config containing <code>fileMatch</code> patterns will be automatically migrated.</p> <p>Do not use the below guide for <code>fileMatch</code> if you are using an older version of Renovate.</p> <p><code>managerFilePatterns</code> tells Renovate which repository files to parse and extract. Patterns in the user config are added to the default values, they do not replace the default values.</p> <p>The default <code>managerFilePatterns</code> patterns can not be removed. If you need to include, or exclude, specific paths then use the <code>ignorePaths</code> or <code>includePaths</code> instead.</p> <p>Some managers have sensible defaults. For example, the Go manager looks for any <code>go.mod</code> file by default, which covers most cases without extra configuration.</p> <p>At other times, the possible files is too vague for Renovate to have any default. For example, Kubernetes manifests can exist in any <code>*.yaml</code> file. We do not want Renovate to parse every YAML file in every repository, just in case some of them have a Kubernetes manifest. Therefore Renovate's default <code>managerFilePatterns</code> for the <code>kubernetes</code> manager is an empty array (<code>[]</code>). Because the array is empty, you as user must tell Renovate which directories/files to check.</p> <p>Finally, there are cases where Renovate's default <code>managerFilePatterns</code> is good, but you may be using non-standard filenames. For example, Renovate's default <code>managerFilePatterns</code> for <code>Dockerfile</code> is <code>['/(^|/|\\\\.)([Dd]ocker|[Cc]ontainer)file$/', '/(^|/)([Dd]ocker|[Cc]ontainer)file[^/]*$/']</code>. This will catch files like <code>backend/Dockerfile</code>, <code>prefix.Dockerfile</code> or <code>Dockerfile-suffix</code>, but it will miss files like <code>ACTUALLY_A_DOCKERFILE.template</code>. Because <code>managerFilePatterns</code> is \"mergeable\", you can add the missing file to the <code>filePattern</code> like this:</p> <pre><code>{\n  \"dockerfile\": {\n    \"managerFilePatterns\": [\"/^ACTUALLY_A_DOCKERFILE\\\\.template$/\"]\n  }\n}\n</code></pre> <p>You must configure <code>managerFilePatterns</code> inside a manager object. In the example above, the manager object is the <code>dockerfile</code>. For reference, here is a list of supported managers.</p>"},{"location":"configuration-options/#milestone","title":"<code>milestone</code>","text":"<p>The number of a milestone. If set, the milestone will be set when Renovate creates the PR.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type integer supportedPlatforms github cli <code>--milestone</code> env <code>RENOVATE_MILESTONE</code> <p>If set to the number of an existing GitHub milestone, Renovate will add that milestone to its PR. Renovate will only add a milestone when it creates the PR.</p> Example Renovate config<pre><code>{\n  \"milestone\": 12\n}\n</code></pre>"},{"location":"configuration-options/#minimumgroupsize","title":"<code>minimumGroupSize</code>","text":"<p>The minimum number of updates which must be in a group for branches to be created.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type integer default 1 cli <code>--minimum-group-size</code> env <code>RENOVATE_MINIMUM_GROUP_SIZE</code> <p>If set to to a positive value x then branch creation will be postponed until x or more updates are available in the branch.</p> <p>This applies to both these scenarios:</p> <ul> <li>Grouped updates with more than one dependency updated together, and</li> <li>Branches with multiple updates of the same dependency (e.g. in multiple files)</li> </ul> <p>Example:</p> Create only a grouped update when there are 3 or more node updates<pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"We need to update Node in two places - always wait until both upgrades are available\",\n      \"matchDepNames\": [\"node\"],\n      \"groupName\": \"Node.js\",\n      \"minimumGroupSize\": 3\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#minimumreleaseage","title":"<code>minimumReleaseAge</code>","text":"<p>Time required before a new release is considered stable.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert, updateType type string cli <code>--minimum-release-age</code> env <code>RENOVATE_MINIMUM_RELEASE_AGE</code> <p><code>minimumReleaseAge</code> is a feature that requires Renovate to wait for a specified amount of time before suggesting a dependency update.</p> <p>Note</p> <p>Minimum Release Age has a separate documentation page for more in-depth documentation about the functionality. This also includes documentation that was previously in this section, regarding how to specify release timestamps for custom registries.</p> <p>If <code>minimumReleaseAge</code> is set to a time duration and the update has a release timestamp header, then Renovate will check if the set duration has passed. This behaviour can be changed using <code>minimumReleaseAgeBehaviour</code>.</p> <p>Note: Renovate will wait for the set duration to pass for each separate version. Renovate does not wait until the package has seen no releases for x time-duration(<code>minimumReleaseAge</code>).</p> <p>Do not use <code>minimumReleaseAge</code> to slow down fast releasing project updates. Instead setup a custom <code>schedule</code> for that package, read our selective-scheduling help to learn how.</p> <p>When the time passed since the release is less than the set <code>minimumReleaseAge</code>: Renovate adds a \"pending\" status check to that update's branch. After enough days have passed: Renovate replaces the \"pending\" status with a \"passing\" status check.</p> <p>The datasource that Renovate uses must have a release timestamp for the <code>minimumReleaseAge</code> config option to work. Some datasources may have a release timestamp, but in a format Renovate does not support. In those cases a feature request needs to be implemented.</p> <p>You can confirm if your datasource supports the release timestamp by viewing the documentation for the given datasource.</p> <p>Note</p> <p>Configuring this option will add a <code>renovate/stability-days</code> option to the status checks.</p> <p>Note</p> <p>As of Renovate 42.19.5, using <code>minimumReleaseAge=0 days</code> is treated the same as <code>minimumReleaseAge=null</code>.</p> <p>Examples of how you can use <code>minimumReleaseAge</code>:</p>"},{"location":"configuration-options/#suppress-branchpr-creation-for-x-days","title":"Suppress branch/PR creation for X days","text":"<p>If you use <code>minimumReleaseAge=3 days</code>, <code>prCreation=\"not-pending\"</code> and <code>internalChecksFilter=\"strict\"</code> then Renovate only creates branches when 3 (or more days) have passed since the version was released. We recommend you set <code>dependencyDashboard=true</code>, so you can see these pending PRs.</p> <p>Warning</p> <p><code>prCreation=\"not-pending\"</code> only opens the PR once branch checks complete. If your CI runs only on <code>pull_request</code> events (so Renovate branches have no checks), also set <code>internalChecksAsSuccess=true</code> so the release-age check can turn the branch green - otherwise PR creation may be deferred indefinitely.</p>"},{"location":"configuration-options/#prevent-holding-broken-npm-packages","title":"Prevent holding broken npm packages","text":"<p>npm packages less than 72 hours (3 days) old can be unpublished from the npm registry, which could result in a service impact if you have already updated to it. Set <code>minimumReleaseAge</code> to <code>3 days</code> for npm packages to prevent relying on a package that can be removed from the registry:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"npm\"],\n      \"minimumReleaseAge\": \"3 days\"\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#await-x-time-duration-before-automerging","title":"Await X time duration before Automerging","text":"<p>If you enable <code>automerge</code> and <code>minimumReleaseAge</code>, Renovate Renovate will create PRs immediately, but only automerge them when the <code>minimumReleaseAge</code> time-duration has passed.</p> <p>Renovate adds a \"renovate/stability-days\" pending status check to each branch/PR. This pending check prevents the branch going green to automerge before the time has passed.</p>"},{"location":"configuration-options/#minimumreleaseagebehaviour","title":"<code>minimumReleaseAgeBehaviour</code>","text":"<p>When set in conjunction with <code>minimumReleaseAge</code>, controls whether the <code>releaseTimestamp</code> for a dependency update is required.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert, updateType type string default <code>\"timestamp-required\"</code> allowedValues <pre><code>[\"timestamp-required\", \"timestamp-optional\"]\n</code></pre> cli <code>--minimum-release-age-behaviour</code> env <code>RENOVATE_MINIMUM_RELEASE_AGE_BEHAVIOUR</code> <p>When <code>minimumReleaseAge</code> is set to a time duration, the <code>minimumReleaseAgeBehaviour</code> will be used to control whether the release timestamp is required.</p> <p>When set to <code>timestamp-required</code>, this version is not treated stable unless there is release timestamp, and that release timestamp is past the <code>minimumReleaseAge</code>.</p> <p>When set to <code>timestamp-optional</code>, Renovate will treat a release without a releaseTimestamp as stable.</p> <p>This only applies when used with <code>minimumReleaseAge</code>.</p>"},{"location":"configuration-options/#minimumreleaseagebuffer","title":"<code>minimumReleaseAgeBuffer</code>","text":"<p>Extra time added to <code>minimumReleaseAge</code> before an update is considered stable.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert, updateType type string default <code>\"30 minutes\"</code> nullable true cli <code>--minimum-release-age-buffer</code> env <code>RENOVATE_MINIMUM_RELEASE_AGE_BUFFER</code> <p>Use this option to extend the time Renovate waits before suggesting an update, on top of <code>minimumReleaseAge</code>.</p> <p>Some projects publish a set of related packages, where companion packages (like platform-specific binaries) are published after the main package. For example, <code>@biomejs/biome@2.5.10</code> may be published some minutes before <code>@biomejs/cli-linux-x64@2.5.10</code>. If your package manager enforces its own release age cooldown, like pnpm's <code>minimumReleaseAge</code> setting or npm's <code>--before</code> flag, Renovate may suggest the main package as soon as it passes <code>minimumReleaseAge</code>, while a companion package published later is still within the package manager's cooldown. The package manager then refuses to update the lock file, and the update fails with an artifact error.</p> <p><code>minimumReleaseAgeBuffer</code> avoids this by letting Renovate wait longer than the package manager's cooldown. Renovate defers the update until <code>minimumReleaseAge</code> plus the buffer duration has passed, while the package manager keeps using the plain <code>minimumReleaseAge</code> cutoff. This way, packages published up to the buffer time after the suggested release have also passed the package manager's cooldown.</p> <p>By default, Renovate uses a buffer of 30 minutes. Set <code>minimumReleaseAgeBuffer</code> to <code>null</code> to disable the buffer.</p> <p>For example, with the following configuration Renovate waits 3 days plus 1 hour before suggesting an update, while the package manager's cooldown stays at 3 days:</p> <pre><code>{\n  \"minimumReleaseAge\": \"3 days\",\n  \"minimumReleaseAgeBuffer\": \"1 hour\"\n}\n</code></pre> <p>This only applies when used with <code>minimumReleaseAge</code>.</p>"},{"location":"configuration-options/#minor","title":"<code>minor</code>","text":"<p>Configuration to apply when an update type is <code>minor</code>.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type object mergeable true env <code>RENOVATE_MINOR</code> <p>Add to this object if you wish to define rules that apply only to minor updates.</p>"},{"location":"configuration-options/#mode","title":"<code>mode</code>","text":"<p>Mode of operation.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string default <code>\"full\"</code> allowedValues <pre><code>[\"full\", \"silent\"]\n</code></pre> cli <code>--mode</code> env <code>RENOVATE_MODE</code> <p>This configuration option was created primarily for use with Mend's hosted app, but can also be useful for some self-hosted use cases.</p> <p>It enables a new <code>silent</code> mode to allow repos to be scanned for updates and for users to be able to request such updates be opened in PRs on demand through the Mend UI, without needing the Dependency Dashboard issue in the repo.</p> <p>Although similar, the options <code>mode=silent</code> and <code>dryRun</code> can be used together. When both are configured, <code>dryRun</code> takes precedence, so for example PRs won't be created.</p> <p>Configuring <code>silent</code> mode is quite similar to <code>dryRun=lookup</code> except:</p> <ul> <li>It will bypass onboarding checks (unlike when performing a dry run on a non-onboarded repo) similar to <code>requireConfig=optional</code></li> <li>It can create branches/PRs if <code>checkedBranches</code> is set</li> <li>It will keep any existing branches up-to-date (e.g. ones created previously using <code>checkedBranches</code>)</li> </ul> <p>When in <code>silent</code> mode Renovate will:</p> <ul> <li>not create or update any Issue: even the Dependency Dashboard or Config Warning Issues will stay as-is</li> <li>not read checkboxes from an existing Dependency Dashboard: use <code>checkedBranches</code> to request branches instead</li> <li>not prune or close any existing Issues</li> <li>not create any Config Migration PRs, even if you explicitly enabled Config Migration PRs in your Renovate config</li> </ul>"},{"location":"configuration-options/#npmtoken","title":"<code>npmToken</code>","text":"<p>npm token used to authenticate with the default registry.</p> Name Value scopes repo type string cli <code>--npm-token</code> env <code>RENOVATE_NPM_TOKEN</code> default <code>null</code> <p>See Private npm module support for details on how this is used. Typically you would encrypt it and put it inside the <code>encrypted</code> object.</p>"},{"location":"configuration-options/#npmrc","title":"<code>npmrc</code>","text":"<p>String copy of <code>.npmrc</code> file. Use <code>\\n</code> instead of line breaks.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string cli <code>--npmrc</code> env <code>RENOVATE_NPMRC</code> default <code>null</code> <p>See Private npm module support for details on how this is used.</p>"},{"location":"configuration-options/#npmrcmerge","title":"<code>npmrcMerge</code>","text":"<p>Whether to merge <code>config.npmrc</code> with repo <code>.npmrc</code> content if both are found.</p> Name Value scopes repo, manager type boolean default <code>false</code> cli <code>--npmrc-merge</code> env <code>RENOVATE_NPMRC_MERGE</code> <p>This option exists to provide flexibility about whether <code>npmrc</code> strings in config should override <code>.npmrc</code> files in the repo, or be merged with them. In some situations you need the ability to force override <code>.npmrc</code> contents in a repo (<code>npmrcMerge=false</code>) while in others you might want to simply supplement the settings already in the <code>.npmrc</code> (<code>npmrcMerge=true</code>). A use case for the latter is if you are a Renovate admin and wish to provide a default token for <code>npmjs.org</code> without removing any other <code>.npmrc</code> settings which individual repositories have configured (such as scopes/registries).</p> <p>If <code>false</code> (default), it means that defining <code>config.npmrc</code> will result in any <code>.npmrc</code> file in the repo being overridden and its values ignored. If configured to <code>true</code>, it means that any <code>.npmrc</code> file in the repo will have <code>config.npmrc</code> prepended to it before running <code>npm</code>.</p>"},{"location":"configuration-options/#osvvulnerabilityalerts","title":"<code>osvVulnerabilityAlerts</code>","text":"<p>Use vulnerability alerts from <code>osv.dev</code>.</p> Name Value scopes repo type boolean default <code>false</code> cli <code>--osv-vulnerability-alerts</code> env <code>RENOVATE_OSV_VULNERABILITY_ALERTS</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.To track this feature visit the following GitHub issue #20542.</p> <p>Renovate integrates with OSV, an Open Source vulnerability database, to check if extracted dependencies have known vulnerabilities. Set <code>osvVulnerabilityAlerts</code> to <code>true</code> to get pull requests with vulnerability fixes (once they are available).</p> <p>You will only get OSV-based vulnerability alerts for direct dependencies. Renovate only queries the OSV database for dependencies that use one of these datasources:</p> <ul> <li><code>crate</code></li> <li><code>go</code></li> <li><code>hackage</code></li> <li><code>hex</code></li> <li><code>maven</code></li> <li><code>npm</code></li> <li><code>nuget</code></li> <li><code>packagist</code></li> <li><code>pypi</code></li> <li><code>rubygems</code></li> </ul> <p>The entire database is downloaded locally by osv-offline and queried offline.</p> <p>If you self-host Renovate, you can change how the database is downloaded with these osv-offline environment variables:</p> <ul> <li><code>OSV_OFFLINE_ROOT_DIR</code>: where the database is stored (default: <code>osv-offline</code> inside the <code>cacheDir</code>, or <code>&lt;tmpdir&gt;/osv-offline</code> if <code>OSV_OFFLINE_DISABLE_DOWNLOAD=true</code> is set)</li> <li><code>OSV_OFFLINE_MAX_AGE</code>: how old the database may be before it's downloaded again, as an <code>ms</code> duration such as <code>30m</code>, <code>4h</code> or <code>7d</code> (default: <code>1d</code>)</li> <li><code>OSV_OFFLINE_DATABASE_FORMAT=split</code>: download the database of each ecosystem on its first use, instead of all of them at once</li> <li><code>OSV_OFFLINE_DATABASE_URL</code> and <code>OSV_OFFLINE_DATABASE_INDEX_URL</code>: download from an internal mirror</li> <li><code>OSV_OFFLINE_DISABLE_DOWNLOAD=true</code>: use a database you've put into <code>OSV_OFFLINE_ROOT_DIR</code> yourself, without internet access</li> </ul> <p>If you persist the <code>cacheDir</code>, the database (roughly 85 MB compressed) is kept as well.</p> <p>Read the osv-offline readme for all options, mirrors, and which hosts to allow.</p>"},{"location":"configuration-options/#malicious-package-detection-and-protection","title":"Malicious package detection and protection","text":"<p>Note</p> <p>This functionality is currently experimental, being actively worked on, and will soon be available for usage outside of <code>osvVulnerabilityAlerts</code>.</p> <p>If Renovate detects a malicious dependency using data from OSV, it will surface this in log warnings, and prevent PRs from being created.</p> <p>If you currently have a dependency that is using a malicious version, Renovate will report this via a warning log.</p> <p>If Renovate finds a dependency update available, and that dependency update is found to be malicious, Renovate will skip any updates to the dependency, marking it with <code>skipReason: malicious-update-proposed</code>, and report this via a warning log.</p>"},{"location":"configuration-options/#overridedescription","title":"<code>overrideDescription</code>","text":"<p>Description which replaces the descriptions of any presets which this config extends.</p> Name Value scopes any type array subType string default <code>[]</code> <p>Use <code>overrideDescription</code> instead of <code>description</code> if this config's description should replace, and not be added to, the descriptions collated from the presets which this config extends.</p> <p>This is useful for a preset which extends many other presets, and where a single line describes them better than one line per preset would. For example, <code>workarounds:all</code> extends around twenty presets, but its <code>overrideDescription</code> means the onboarding PR shows only:</p> <pre><code>- Apply crowd-sourced workarounds for known problems with packages.\n</code></pre> <p>Renovate applies <code>overrideDescription</code> when it resolves presets, so the resolved config only ever has a <code>description</code>.</p>"},{"location":"configuration-options/#packagerules","title":"<code>packageRules</code>","text":"<p>Rules for matching packages.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert type array mergeable true cli <code>--package-rules</code> env <code>RENOVATE_PACKAGE_RULES</code> default <code>[]</code> <p><code>packageRules</code> is a powerful feature that lets you apply rules to individual packages or to groups of packages using regex pattern matching.</p> <p><code>packageRules</code> is a collection of rules, that are all evaluated. If multiple rules match a dependency, configurations from matching rules will be merged together. The order of rules matters, because later rules may override configuration options from earlier ones, if they both specify the same option.</p> <p>The matching process for a package rule:</p> <ul> <li>Each package rule must include at least one <code>match...</code> matcher.</li> <li>If multiple matchers are included in one package rule, all of them must match.</li> <li>Each matcher must contain at least one pattern. Some matchers allow both positive and negative patterns.</li> <li>If a matcher includes any positive patterns, it must match at least one of them.</li> <li>A matcher returns <code>false</code> if it matches any negative pattern, even if a positive match also occurred.</li> </ul> <p>For more details on positive and negative pattern syntax see Renovate's string pattern matching documentation.</p> <p>Here is an example if you want to group together all packages starting with <code>eslint</code> into a single branch/PR:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"eslint**\"],\n      \"groupName\": \"eslint packages\"\n    }\n  ]\n}\n</code></pre> <p>Note how the above uses <code>matchPackageNames</code> with a prefix pattern.</p> <p>Here's an example config to limit the \"noisy\" AWS SDK packages to weekly updates:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Schedule AWS SDK updates on Sunday nights (9 PM - 12 AM)\",\n      \"matchPackageNames\": [\"@aws-sdk/*\"],\n      \"schedule\": [\"* 21-23 * * 0\"]\n    }\n  ]\n}\n</code></pre> <p>For Maven dependencies, the package name is <code>&lt;groupId:artefactId&gt;</code>, e.g. <code>\"matchPackageNames\": [\"com.thoughtworks.xstream:xstream\"]</code></p> <p>Note how the above uses an exact match string for <code>matchPackageNames</code> instead of a pattern However you can mix together both patterns and exact matches in the same package rule and the rule will be applied if either match. Example:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"neutrino\", \"@neutrino/**\"],\n      \"groupName\": \"neutrino monorepo\"\n    }\n  ]\n}\n</code></pre> <p>The above rule will group together the <code>neutrino</code> package and any package starting with <code>@neutrino/</code>.</p> <p>File name matches are convenient to use if you wish to apply configuration rules to certain package or lock files using patterns. For example, if you have an <code>examples</code> directory and you want all updates to those examples to use the <code>chore</code> prefix instead of <code>fix</code>, then you could add this configuration:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchFileNames\": [\"examples/**\"],\n      \"extends\": [\":semanticCommitTypeAll(chore)\"]\n    }\n  ]\n}\n</code></pre> <p>If you wish to limit Renovate to apply configuration rules to certain files in the root repository directory, you have to use <code>matchFileNames</code> with a <code>minimatch</code> glob (which can include an exact file name match) or RE2 regex.</p> <p>For more details on supported syntax see Renovate's string pattern matching documentation.</p> <p>For example you have multiple <code>package.json</code> and want to use <code>dependencyDashboardApproval</code> only on the root <code>package.json</code>:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchFileNames\": [\"package.json\"],\n      \"dependencyDashboardApproval\": true\n    }\n  ]\n}\n</code></pre> <p>Tip</p> <p>Order your <code>packageRules</code> so the least important rules are at the top, and the most important rules at the bottom. This way important rules override settings from earlier rules if needed.</p> <p>Warning</p> <p>Avoid nesting any <code>object</code>-type configuration in a <code>packageRules</code> array, such as a <code>major</code> or <code>minor</code> block.</p>"},{"location":"configuration-options/#packagerulesallowedversions","title":"<code>packageRules.allowedVersions</code>","text":"<p>A version range or regex pattern capturing allowed versions for dependencies.</p> Name Value type string parents <code>packageRules</code> supportsTemplating true default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>You can use <code>allowedVersions</code> - usually within a <code>packageRules</code> entry - to limit how far to upgrade a dependency.</p> <p>For example, if you want to upgrade to Angular v1.5 but not to <code>angular</code> v1.6 or higher, you could set <code>allowedVersions</code> to <code>&lt;= 1.5</code> or <code>&lt; 1.6.0</code>:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"angular\"],\n      \"allowedVersions\": \"&lt;=1.5\"\n    }\n  ]\n}\n</code></pre> <p>Renovate calculates the valid syntax for this at runtime, because it depends on the dynamic versioning scheme.</p> <p>You can also use the following template fields with <code>allowedVersions</code>:</p> <ul> <li><code>currentVersion</code></li> <li><code>major</code></li> <li><code>minor</code></li> <li><code>patch</code></li> </ul> <p>For example, if you want to upgrade to Angular to only the next major, you could set <code>allowedVersions</code> like this:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"angular\"],\n      \"allowedVersions\": \"&lt;={{add major 1}}\"\n    }\n  ]\n}\n</code></pre> <p>Warning</p> <p><code>allowedVersions</code> and <code>matchUpdateTypes</code> cannot be used in the same package rule.</p>"},{"location":"configuration-options/#using-regular-expressions","title":"Using regular expressions","text":"<p>You can use Regular Expressions in the <code>allowedVersions</code> config. You must begin and end your Regular Expression with the <code>/</code> character!</p> <p>For example, this config only allows 3 or 4-part versions, without any prefixes in the version:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"com.thoughtworks.xstream:xstream\"],\n      \"allowedVersions\": \"/^[0-9]+\\\\.[0-9]+\\\\.[0-9]+(\\\\.[0-9]+)?$/\"\n    }\n  ]\n}\n</code></pre> <p>Again: note how the Regular Expression begins and ends with the <code>/</code> character.</p>"},{"location":"configuration-options/#ignore-versions-with-negated-regex-syntax","title":"Ignore versions with negated regex syntax","text":"<p>You can use a special negated regex syntax to ignore certain versions. You must use the <code>!/ /</code> syntax, like this:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"chalk\"],\n      \"allowedVersions\": \"!/java$/\"\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#packageruleschangelogurl","title":"<code>packageRules.changelogUrl</code>","text":"<p>Set a custom URL for the changelog. Renovate will put this URL in the PR body text.</p> Name Value type string parents <code>packageRules</code> supportsTemplating true previouslyKnownAs <pre><code>[\"customChangelogUrl\"]\n</code></pre> default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Sometimes Renovate does not show the correct changelog for a package. As a workaround for this problem, you can give Renovate the URL to the changelog with the <code>changelogUrl</code> config option. When set, Renovate will put a link to the changelogs in the Renovate PR body.</p> <p>Renovate does not show the complete changelogs from the <code>changelogUrl</code> in its PR body text, you only get the URL from Renovate. To read the changelogs you must use the link.</p> Setting the changelog URL for the dummy package<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"dummy\"],\n      \"changelogUrl\": \"https://github.com/org/dummy\"\n    }\n  ]\n}\n</code></pre> <p><code>changelogUrl</code> supports template compilation.</p> Setting the changelog URL for the dummy package using a template<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"dummy\"],\n      \"changelogUrl\": \"https://github.com/org/monorepo/blob/{{{sourceDirectory}}}/my-custom-changelog.txt\"\n    }\n  ]\n}\n</code></pre> <p>Note</p> <p>Renovate can fetch changelogs from Bitbucket, Bitbucket Server / Data Center, Forgejo, Gitea, GitHub and GitLab platforms only, and setting the URL to an unsupported host/platform type won't change that.</p> <p>For more details on supported syntax see Renovate's string pattern matching documentation.</p>"},{"location":"configuration-options/#packagerulesmatchbasebranches","title":"<code>packageRules.matchBaseBranches</code>","text":"<p>List of strings containing exact matches (e.g. <code>[\"main\"]</code>) and/or regex expressions (e.g. <code>[\"/^release/.*/\"]</code>). Valid only within a <code>packageRules</code> object.</p> Name Value type array subType string parents <code>packageRules</code> mergeable true default <code>[]</code> <p>Use this field to restrict rules to a particular branch. e.g.</p> <pre><code>{\n  \"baseBranchPatterns\": [\"main\"],\n  \"packageRules\": [\n    {\n      \"matchBaseBranches\": [\"main\"],\n      \"matchPackageNames\": [\"!/^eslint/\"],\n      \"enabled\": false\n    }\n  ]\n}\n</code></pre> <p>This field also supports Regular Expressions if they begin and end with <code>/</code>. e.g.</p> <pre><code>{\n  \"baseBranchPatterns\": [\"main\", \"/^release\\\\/.*/\"],\n  \"packageRules\": [\n    {\n      \"matchBaseBranches\": [\"/^release/.*/\"],\n      \"matchPackageNames\": [\"!/^eslint/\"],\n      \"enabled\": false\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#packagerulesmatchcategories","title":"<code>packageRules.matchCategories</code>","text":"<p>List of categories to match (for example: <code>[\"python\"]</code>). Valid only within a <code>packageRules</code> object.</p> Name Value type array subType string parents <code>packageRules</code> mergeable true default <code>[]</code> <p>Use <code>matchCategories</code> to restrict rules to a particular language or group. Matching is done using \"any\" logic, i.e. \"match any of the following categories\". The categories can be found in the manager documentation.</p> <p>Note</p> <p>Rules with <code>matchCategories</code> are only applied after extraction of dependencies. If you want to configure which managers are being extracted at all, use <code>enabledManagers</code> instead.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCategories\": [\"python\"],\n      \"addLabels\": [\"py\"]\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#packagerulesmatchconfidence","title":"<code>packageRules.matchConfidence</code>","text":"<p>Merge confidence levels to match against (<code>low</code>, <code>neutral</code>, <code>high</code>, <code>very high</code>). Valid only within <code>packageRules</code> object.</p> Name Value type array subType string allowedValues <pre><code>[\"low\", \"neutral\", \"high\", \"very high\"]\n</code></pre> parents <code>packageRules</code> mergeable true default <code>[]</code> <p>Warning</p> <p>This configuration option needs a Mend API key, and is in private beta testing only. API keys are not available for free or via the <code>renovatebot/renovate</code> repository.</p> Grouping high merge confidence updates<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchConfidence\": [\"high\", \"very high\"],\n      \"groupName\": \"high merge confidence\"\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#packagerulesmatchcurrentage","title":"<code>packageRules.matchCurrentAge</code>","text":"<p>Matches the current age of the package derived from its release timestamp. Valid only within a <code>packageRules</code> object.</p> Name Value type string parents <code>packageRules</code> mergeable true default <code>null</code> <p>Use this field if you want to match packages based on the age of the current (existing, in-repo) version.</p> <p>For example, if you want to group updates for dependencies where the existing version is more than 2 years old:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentAge\": \"&gt; 2 years\",\n      \"groupName\": \"old dependencies\"\n    }\n  ]\n}\n</code></pre> <p>The <code>matchCurrentAge</code> string must start with one of <code>&gt;</code>, <code>&gt;=</code>, <code>&lt;</code> or <code>&lt;=</code>.</p> <p>Only one date part is supported, so you cannot do <code>&gt; 1 year 1 month</code>. Instead you should do <code>&gt; 13 months</code>.</p> <p>Note</p> <p>We recommend you only use the words hour(s), day(s), week(s), month(s) and year(s) in your time ranges.</p>"},{"location":"configuration-options/#packagerulesmatchcurrentvalue","title":"<code>packageRules.matchCurrentValue</code>","text":"<p>A regex or glob pattern to match against the raw <code>currentValue</code> string of a dependency. Valid only within a <code>packageRules</code> object.</p> Name Value type string parents <code>packageRules</code> mergeable true default <code>null</code> <p>This option is matched against the <code>currentValue</code> field of a dependency.</p> <p><code>matchCurrentValue</code> supports Regular Expressions and glob patterns. For example, the following enforces that updates from <code>1.*</code> versions will be merged automatically:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"io.github.resilience4j**\"],\n      \"matchCurrentValue\": \"1.*\",\n      \"automerge\": true\n    }\n  ]\n}\n</code></pre> <p>Regular Expressions must begin and end with <code>/</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"io.github.resilience4j**\"],\n      \"matchCurrentValue\": \"/^1\\\\./\"\n    }\n  ]\n}\n</code></pre> <p>This field also supports a special negated regex syntax to ignore certain versions. Use the syntax <code>!/ /</code> like this:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"io.github.resilience4j**\"],\n      \"matchCurrentValue\": \"!/^0\\\\./\"\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#packagerulesmatchcurrentversion","title":"<code>packageRules.matchCurrentVersion</code>","text":"<p>A version, or range of versions, to match against the current version of a package. Valid only within a <code>packageRules</code> object.</p> Name Value type string parents <code>packageRules</code> mergeable true default <code>null</code> <p>The <code>currentVersion</code> field will be one of the following (in order of preference):</p> <ul> <li>locked version if a lock file exists</li> <li>resolved version</li> <li>current value</li> </ul> <p>Consider using instead <code>matchCurrentValue</code> if you wish to match against the raw string value of a dependency.</p> <p><code>matchCurrentVersion</code> can be an exact version or a version range:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=1.0.0\",\n      \"matchPackageNames\": [\"angular\"]\n    }\n  ]\n}\n</code></pre> <p>The syntax of the version range must follow the versioning scheme used by the matched package(s). This is usually defined by the manager which discovered them or by the default versioning for the package's datasource. For example, a Gradle package would typically need Gradle constraint syntax (e.g. <code>[,7.0)</code>) and not SemVer syntax (e.g. <code>&lt;7.0</code>).</p> <p>This field also supports Regular Expressions which must begin and end with <code>/</code>. For example, the following enforces that only <code>1.*</code> versions will be used:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"io.github.resilience4j**\"],\n      \"matchCurrentVersion\": \"/^1\\\\./\"\n    }\n  ]\n}\n</code></pre> <p>This field also supports a special negated regex syntax to ignore certain versions. Use the syntax <code>!/ /</code> like this:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"io.github.resilience4j**\"],\n      \"matchCurrentVersion\": \"!/^0\\\\./\"\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#packagerulesmatchdatasources","title":"<code>packageRules.matchDatasources</code>","text":"<p>List of datasources to match (e.g. <code>[\"orb\"]</code>). Valid only within a <code>packageRules</code> object.</p> Name Value type array subType string parents <code>packageRules</code> mergeable true default <code>[]</code> <p>Use this field to restrict rules to a particular datasource. e.g.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"orb\"],\n      \"labels\": [\"circleci-orb!!\"]\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#packagerulesmatchdepnames","title":"<code>packageRules.matchDepNames</code>","text":"<p>Dep names to match. Valid only within a <code>packageRules</code> object.</p> Name Value type array subType string parents <code>packageRules</code> mergeable true default <code>[]</code> <p>This field behaves the same as <code>matchPackageNames</code> except it matches against <code>depName</code> instead of <code>packageName</code>.</p>"},{"location":"configuration-options/#packagerulesmatchdeptypes","title":"<code>packageRules.matchDepTypes</code>","text":"<p>List of depTypes to match (e.g. [<code>peerDependencies</code>]). Valid only within <code>packageRules</code> object.</p> Name Value type array subType string parents <code>packageRules</code> mergeable true default <code>[]</code> <p>Use this field if you want to limit a <code>packageRule</code> to certain <code>depType</code> values. This matching can be an exact match, Glob match, or Regular Expression match.</p> <p>For more details on supported syntax see Renovate's string pattern matching documentation. Note that Glob matching (including exact name matching) is case-insensitive.</p> <p>Invalid if used outside of a <code>packageRule</code>.</p>"},{"location":"configuration-options/#packagerulesmatchfilenames","title":"<code>packageRules.matchFileNames</code>","text":"<p>List of patterns to match against package and lock file paths. Valid only within a <code>packageRules</code> object.</p> Name Value type array subType string parents <code>packageRules</code> default <code>[]</code> <p>Renovate will compare <code>matchFileNames</code> glob or RE2 regex matching against the dependency's package file and also lock file if one exists.</p> <p>For more details on supported syntax see Renovate's string pattern matching documentation.</p> <p>The following example matches <code>package.json</code> but not <code>package/frontend/package.json</code>:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchFileNames\": [\"package.json\"],\n      \"labels\": [\"npm\"]\n    }\n  ]\n}\n</code></pre> <p>The following example matches any <code>package.json</code>, including files like <code>backend/package.json</code>:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Group dependencies from package.json files\",\n      \"matchFileNames\": [\"**/package.json\"],\n      \"groupName\": \"All package.json changes\"\n    }\n  ]\n}\n</code></pre> <p>The following example matches any file in directories starting with <code>app/</code>:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Group all dependencies from the app directory\",\n      \"matchFileNames\": [\"app/**\"],\n      \"groupName\": \"App dependencies\"\n    }\n  ]\n}\n</code></pre> <p>The following example matches any <code>.toml</code> file in a <code>v1</code>, <code>v2</code> or <code>v3</code> directory:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Group all dependencies from legacy projects\",\n      \"matchFileNames\": [\"/v[123]/.*\\\\.toml/\"],\n      \"groupName\": \"Legacy project dependencies\"\n    }\n  ]\n}\n</code></pre> <p>It is recommended that you avoid using \"negative\" globs, like <code>**/!(package.json)</code>, because such patterns might still return true if they match against the lock file name (e.g. <code>package-lock.json</code>).</p>"},{"location":"configuration-options/#packagerulesmatchisbreaking","title":"<code>packageRules.matchIsBreaking</code>","text":"<p>Matches only if the update is considered breaking (e.g. major, or minor for 0.x in ecosystems like Cargo) when <code>true</code>, or non-breaking when <code>false</code>. Valid only within a <code>packageRules</code> object.</p> Name Value type boolean parents <code>packageRules</code> default <code>true</code> <p>Use <code>matchIsBreaking</code> to match updates based on whether Renovate considers them breaking. Set it to <code>true</code> to match only breaking updates, or <code>false</code> to match only non-breaking updates.</p> <p>What counts as breaking depends on the versioning of the dependency:</p> <ul> <li>Versionings with their own notion of breaking changes decide themselves, for example Cargo treats a minor bump of a <code>0.x</code> crate (<code>0.1.0</code> to <code>0.2.0</code>) as breaking</li> <li>For all other versionings, an update is breaking if its <code>updateType</code> is <code>major</code></li> </ul> <p>Rules with <code>matchIsBreaking</code> never match when there is no update to evaluate, for example for <code>lockFileMaintenance</code>.</p> <p>The following example automerges all non-breaking updates of packages in the <code>@myorg</code> scope:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"@myorg{/,}**\"],\n      \"matchIsBreaking\": false,\n      \"automerge\": true\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#packagerulesmatchjsonata","title":"<code>packageRules.matchJsonata</code>","text":"<p>A JSONata expression to match against the full config object. Valid only within a <code>packageRules</code> object.</p> Name Value type array subType string parents <code>packageRules</code> mergeable true default <code>[]</code> <p>Use the <code>matchJsonata</code> field to define custom matching logic using JSONata query logic. Renovate will evaluate the provided JSONata expressions against the passed values (<code>manager</code>, <code>packageName</code>, etc.).</p> <p>See the JSONata docs for more details on JSONata syntax.</p> <p>Here are some example <code>matchJsonata</code> strings for inspiration:</p> <pre><code>$exists(deprecationMessage)\n$exists(vulnerabilityFixVersion)\nmanager = 'dockerfile' and depType = 'final'\nupdateType = 'major' and newVersionAgeInDays &lt; 7\n$detectPlatform(sourceUrl) = 'github'\n$matchRegexOrGlob(packageName, [\"@myorg{/,}**\"]) or $matchRegexOrGlob(registryUrls, [\"https://registry.example.com/**\"])\n</code></pre> <p><code>matchJsonata</code> accepts an array of strings, and will return <code>true</code> if any of those JSONata expressions evaluate to <code>true</code>.</p> <p>Renovate provides the following custom JSONata functions:</p> <ul> <li><code>$detectPlatform(url)</code> - Takes a URL string and returns the detected platform (<code>azure</code>, <code>bitbucket</code>, <code>bitbucket-server</code>, <code>forgejo</code>, <code>gitea</code>, <code>github</code>, <code>gitlab</code>) or <code>null</code>.</li> <li><code>$matchRegexOrGlob(input, patterns)</code> - Returns <code>true</code> if <code>input</code> matches <code>patterns</code>, using Renovate's string pattern matching syntax. <code>input</code> can be a string or an array of strings, in which case any matching element returns <code>true</code>. <code>patterns</code> is an array of strings, or a single string. Returns <code>false</code> if <code>input</code> is missing. Use this to combine conditions on different fields with <code>or</code>, which separate <code>match*</code> options can't do because they are combined with <code>and</code>.</li> </ul>"},{"location":"configuration-options/#packagerulesmatchmanagers","title":"<code>packageRules.matchManagers</code>","text":"<p>List of package managers to match (e.g. <code>[\"pipenv\"]</code>). Valid only within a <code>packageRules</code> object.</p> Name Value type array subType string parents <code>packageRules</code> mergeable true default <code>[]</code> <p>Use this field to restrict rules to a particular package manager. e.g.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"node\"],\n      \"matchManagers\": [\"dockerfile\"],\n      \"enabled\": false\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#packagerulesmatchnewvalue","title":"<code>packageRules.matchNewValue</code>","text":"<p>A regex or glob pattern to match against the raw <code>newValue</code> string of a dependency. Valid only within a <code>packageRules</code> object.</p> Name Value type string parents <code>packageRules</code> mergeable true default <code>null</code> <p>This option is matched against the <code>newValue</code> field of a dependency.</p> <p><code>matchNewValue</code> supports Regular Expressions and glob patterns. For example, the following enforces that updates to <code>1.*</code> versions will be merged automatically:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"io.github.resilience4j**\"],\n      \"matchNewValue\": \"1.*\",\n      \"automerge\": true\n    }\n  ]\n}\n</code></pre> <p>Regular Expressions must begin and end with <code>/</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"io.github.resilience4j**\"],\n      \"matchNewValue\": \"/^1\\\\./\"\n    }\n  ]\n}\n</code></pre> <p>This field also supports a special negated regex syntax to ignore certain versions. Use the syntax <code>!/ /</code> like this:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"io.github.resilience4j**\"],\n      \"matchNewValue\": \"!/^0\\\\./\"\n    }\n  ]\n}\n</code></pre> <p>For more details on this syntax see Renovate's string pattern matching documentation.</p>"},{"location":"configuration-options/#packagerulesmatchpackagenames","title":"<code>packageRules.matchPackageNames</code>","text":"<p>Package names to match. Valid only within a <code>packageRules</code> object.</p> Name Value type array subType string parents <code>packageRules</code> mergeable true default <code>[]</code> <p>Use this field to match against the <code>packageName</code> field. This matching can be an exact match, Glob match, or Regular Expression match.</p> <p>For more details on supported syntax see Renovate's string pattern matching documentation. Note that Glob matching (including exact name matching) is case-insensitive.</p> exact name match<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"npm\"],\n      \"matchPackageNames\": [\"angular\"],\n      \"rangeStrategy\": \"pin\"\n    }\n  ]\n}\n</code></pre> <p>The above will configure <code>rangeStrategy</code> to <code>pin</code> only for the npm package <code>angular</code>.</p> prefix match using Glob<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"@angular/**\", \"!@angular/abc\"],\n      \"rangeStrategy\": \"replace\"\n    }\n  ]\n}\n</code></pre> <p>The above will set a replaceStrategy for any npm package which starts with <code>@angular/</code> except <code>@angular/abc</code>.</p> pattern match using RegEx<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"npm\"],\n      \"matchPackageNames\": [\"/^angular/\"],\n      \"groupName\": \"Angular\"\n    }\n  ]\n}\n</code></pre> <p>The above will group together any npm package which starts with the string <code>angular</code>.</p>"},{"location":"configuration-options/#packagerulesmatchregistryurls","title":"<code>packageRules.matchRegistryUrls</code>","text":"<p>A list of URLs (or URL patterns) to match against registryUrls.</p> Name Value type array subType string parents <code>packageRules</code> mergeable true default <code>[]</code> <p>Use this option to match packages based on their <code>registryUrls</code>. Any package whose <code>registryUrls</code> array contains at least one URL matching any of the provided patterns will be selected.</p> <p>Here's an example of where you use this to disable updates from a specific private registry:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchRegistryUrls\": [\"https://private.registry.example.com/**\"],\n      \"enabled\": false\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#packagerulesmatchrepositories","title":"<code>packageRules.matchRepositories</code>","text":"<p>List of repositories to match (e.g. <code>[\"**/*-archived\"]</code>). Valid only within a <code>packageRules</code> object.</p> Name Value type array subType string parents <code>packageRules</code> mergeable true default <code>[]</code>"},{"location":"configuration-options/#packagerulesmatchsourceurls","title":"<code>packageRules.matchSourceUrls</code>","text":"<p>A list of exact match URLs (or URL patterns) to match sourceUrl against.</p> Name Value type array subType string parents <code>packageRules</code> mergeable true default <code>[]</code> <p>Here's an example of where you use this to group together all packages from the Vue monorepo:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchSourceUrls\": [\"https://github.com/vuejs/vue\"],\n      \"groupName\": \"Vue monorepo packages\"\n    }\n  ]\n}\n</code></pre> <p>For more details on supported syntax see Renovate's string pattern matching documentation.</p>"},{"location":"configuration-options/#packagerulesmatchupdatetypes","title":"<code>packageRules.matchUpdateTypes</code>","text":"<p>Update types to match against (<code>major</code>, <code>minor</code>, <code>pin</code>, <code>pinDigest</code>, etc). Valid only within <code>packageRules</code> object.</p> Name Value type array subType string allowedValues <pre><code>[\n  \"major\",\n  \"minor\",\n  \"patch\",\n  \"pin\",\n  \"pinDigest\",\n  \"digest\",\n  \"lockFileMaintenance\",\n  \"lockfileUpdate\",\n  \"rollback\",\n  \"bump\",\n  \"replacement\"\n]\n</code></pre> parents <code>packageRules</code> mergeable true default <code>[]</code> <p>Use <code>matchUpdateTypes</code> to match rules against types of updates. For example to apply a special label to <code>major</code> updates:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchUpdateTypes\": [\"major\"],\n      \"labels\": [\"UPDATE-MAJOR\"]\n    }\n  ]\n}\n</code></pre> <p>For more details on supported syntax see Renovate's string pattern matching documentation.</p> <p>Warning</p> <p>Packages that follow SemVer are allowed to make breaking changes in any <code>0.x</code> version, even <code>patch</code> and <code>minor</code>. Check if you're using any <code>0.x</code> package, and see if you need custom <code>packageRules</code> for it. When setting up automerge for dependencies, make sure to stop accidental automerges of <code>0.x</code> versions. Read the automerge non-major updates docs for a config example that blocks <code>0.x</code> updates.</p> <p>Warning</p> <p><code>matchUpdateTypes</code> and <code>allowedVersions</code> cannot be used in the same package rule.</p> <p>Tokens can be configured via <code>hostRules</code> using the <code>\"merge-confidence\"</code> <code>hostType</code>:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"hostType\": \"merge-confidence\",\n      \"token\": \"********\"\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#packagerulesoverridedatasource","title":"<code>packageRules.overrideDatasource</code>","text":"<p>Override the datasource value.</p> Name Value type string parents <code>packageRules</code> default <code>null</code> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>If a particular <code>datasource</code>/<code>packageName</code> combination has a lookup problem, you may be able to fix it by changing <code>datasource</code> and potentially also <code>packageName</code>. Here is an example:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"docker\"],\n      \"matchPackageNames\": [\"renovate/renovate\"],\n      \"overrideDatasource\": \"npm\",\n      \"overridePackageName\": \"renovate\"\n    }\n  ]\n}\n</code></pre> <p><code>overrideDatasource</code> does not support template compilation. Be cautious as using this setting incorrectly could break all lookups.</p>"},{"location":"configuration-options/#packagerulesoverridedepname","title":"<code>packageRules.overrideDepName</code>","text":"<p>Override the depName value.</p> Name Value type string parents <code>packageRules</code> supportsTemplating true default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>Be careful using this feature because it may cause undesirable changes such as to branch names.</p> <p>In Renovate terminology, <code>packageName</code> is the exact package name needing to be looked up on a registry, while <code>depName</code> is essentially the \"pretty\" name. For example, the <code>packageName</code> is <code>docker.io/library/node</code> while the <code>depName</code> might be <code>node</code> for short.</p> <p><code>depName</code> is used in PR titles as well as branch names, so changes to <code>depName</code> will have effects on those.</p> <p><code>overrideDepName</code> supports template compilation. Example:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"docker\"],\n      \"overrideDepName\": \"{{replace 'docker.io/library/' '' depName}}\"\n    }\n  ]\n}\n</code></pre> <p>Be cautious as using this setting incorrectly could break all lookups.</p>"},{"location":"configuration-options/#packagerulesoverridepackagename","title":"<code>packageRules.overridePackageName</code>","text":"<p>Override the packageName value.</p> Name Value type string parents <code>packageRules</code> supportsTemplating true default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>See the <code>packageRules.overrideDatasource</code> documentation for an example of use. <code>overridePackageName</code> supports template compilation.</p> <p>Be cautious as using this setting incorrectly could break all lookups.</p>"},{"location":"configuration-options/#packagerulesprpriority","title":"<code>packageRules.prPriority</code>","text":"<p>Set sorting priority for PR creation. PRs with higher priority are created first, negative priority last.</p> Name Value type integer allowNegative true default 0 parents <code>packageRules</code> <p>Sometimes Renovate needs to rate limit its creation of PRs, e.g. hourly or concurrent PR limits. By default, Renovate sorts/prioritizes based on the update type, going from smallest update to biggest update. Renovate creates update PRs in this order:</p> <ol> <li><code>pinDigest</code></li> <li><code>pin</code></li> <li><code>digest</code></li> <li><code>patch</code></li> <li><code>minor</code></li> <li><code>major</code></li> </ol> <p>If you have dependencies that are more or less important than others then you can use the <code>prPriority</code> field for PR sorting. The default value is 0, so setting a negative value will make dependencies sort last, while higher values sort first.</p> <p>Here's an example of how you would define PR priority so that <code>devDependencies</code> are raised last and <code>react</code> is raised first:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDepTypes\": [\"devDependencies\"],\n      \"prPriority\": -1\n    },\n    {\n      \"matchPackageNames\": [\"react\"],\n      \"prPriority\": 5\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#packagerulesreplacementname","title":"<code>packageRules.replacementName</code>","text":"<p>The name of the new dependency that replaces the old deprecated dependency.</p> Name Value type string parents <code>packageRules</code> default <code>null</code> <p>This config option only works with some managers. We're working to support more managers, subscribe to issue renovatebot/renovate#24883 to follow our progress.</p> <p>Managers which do not support replacement:</p> <ul> <li><code>bazel</code></li> <li><code>git-submodules</code></li> <li><code>gomod</code></li> <li><code>gradle</code></li> <li><code>homebrew</code></li> <li><code>regex</code></li> <li><code>sbt</code></li> </ul> <p>Use the <code>replacementName</code> config option to set the name of a replacement package.</p> <p>Can be used in combination with <code>replacementVersion</code>.</p> <p>You can suggest a new community package rule by editing the <code>replacements.json</code> file on the Renovate repository and opening a pull request.</p> <p>Note</p> <p>Replacement updates will never be grouped.  Lock file maintenance will never be grouped with other dependency updates.</p>"},{"location":"configuration-options/#packagerulesreplacementnametemplate","title":"<code>packageRules.replacementNameTemplate</code>","text":"<p>Controls what the replacement package name.</p> Name Value type string default <code>\"{{{packageName}}}\"</code> parents <code>packageRules</code> supportsTemplating true <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Note</p> <p><code>replacementName</code> will take precedence if used within the same package rule.</p> <p>Use the <code>replacementNameTemplate</code> config option to control the replacement name.</p> <p>Use the triple brace <code>{{{ }}}</code> notation to avoid Handlebars escaping any special characters.</p> <p>For example, the following package rule can be used to replace the registry for <code>docker</code> images:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"docker\"],\n      \"matchPackageNames\": [\"docker.io/**\"],\n      \"replacementNameTemplate\": \"{{{replace 'docker\\\\.io/' 'ghcr.io/' packageName}}}\"\n    }\n  ]\n}\n</code></pre> <p>Or, to add a registry prefix to any <code>docker</code> images that do not contain an explicit registry:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"official images\",\n      \"matchDatasources\": [\"docker\"],\n      \"matchPackageNames\": [\"/^[a-z-]+$/\"],\n      \"replacementNameTemplate\": \"some.registry.org/library/{{{packageName}}}\"\n    },\n    {\n      \"description\": \"non-official images\",\n      \"matchDatasources\": [\"docker\"],\n      \"matchPackageNames\": [\"/^[a-z-]+/[a-z-]+$/\"],\n      \"replacementNameTemplate\": \"some.registry.org/{{{packageName}}}\"\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#packagerulesreplacementversion","title":"<code>packageRules.replacementVersion</code>","text":"<p>The version of the new dependency that replaces the old deprecated dependency.</p> Name Value type string parents <code>packageRules</code> default <code>null</code> <p>This config option only works with some managers. We're working to support more managers, subscribe to issue renovatebot/renovate#14149 to follow our progress. For a list of managers which do not support replacement read the <code>replacementName</code> config option docs.</p> <p>Use the <code>replacementVersion</code> config option to set the version of a replacement package. Must be used with <code>replacementName</code>. For example to replace the npm package <code>jade</code> with version <code>2.0.0</code> of the package <code>pug</code>:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"npm\"],\n      \"matchPackageNames\": [\"jade\"],\n      \"replacementName\": \"pug\",\n      \"replacementVersion\": \"2.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#packagerulesreplacementversiontemplate","title":"<code>packageRules.replacementVersionTemplate</code>","text":"<p>Template field for the version of the new dependency that replaces the old deprecated dependency.</p> Name Value type string parents <code>packageRules</code> supportsTemplating true default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Note</p> <p><code>replacementVersion</code> will take precedence if used within the same package rule.</p> <p>Use the <code>replacementVersionTemplate</code> config option to control the replacement version.</p> <p>For example, the following package rule can be used to replace version with major-only version (17.0.1 \u2192 17):</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"dummy\"],\n      \"replacementVersionTemplate\": \"{{ lookup (split currentValue '.') 0 }}\"\n    }\n  ]\n}\n</code></pre>"},{"location":"configuration-options/#packagerulessourcedirectory","title":"<code>packageRules.sourceDirectory</code>","text":"<p>The source directory in which the package is present at its source.</p> Name Value type string parents <code>packageRules</code> supportsTemplating true default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Use this field to set the directory in which the package is present at the source of the package.</p> Setting the source directory for the kube-prometheus package from bitnami charts repo<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"dummy\"],\n      \"sourceUrl\": \"https://github.com/bitnami/charts\",\n      \"sourceDirectory\": \"bitnami/kube-prometheus\"\n    }\n  ]\n}\n</code></pre> <p>Note</p> <p><code>sourceDirectory</code> should be only be configured along with <code>sourceUrl</code>.</p>"},{"location":"configuration-options/#packagerulessourceurl","title":"<code>packageRules.sourceUrl</code>","text":"<p>The source URL of the package.</p> Name Value type string parents <code>packageRules</code> supportsTemplating true default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Use this field to set the source URL for a package, including overriding an existing one. Source URLs are necessary to link to the source of the package and in order to look up changelogs.</p> <p>The <code>sourceUrl</code> field supports template compilation, allowing you to dynamically construct URLs based on package information.</p> Setting the source URL for the dummy package<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"dummy\"],\n      \"sourceUrl\": \"https://github.com/org/dummy\"\n    }\n  ]\n}\n</code></pre> Using templates to construct source URLs for OpenTofu providers<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"terraform-provider\"],\n      \"registryUrls\": [\"https://registry.opentofu.org\"],\n      \"sourceUrl\": \"https://github.com/{{replace '/' '/terraform-provider-' packageName}}\"\n    }\n  ]\n}\n</code></pre> <p>In the example above, a package name like <code>hashicorp/aws</code> will be transformed to <code>https://github.com/hashicorp/terraform-provider-aws</code>.</p>"},{"location":"configuration-options/#patch","title":"<code>patch</code>","text":"<p>Configuration to apply when an update type is <code>patch</code>.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type object mergeable true env <code>RENOVATE_PATCH</code> <p>Add to this object if you wish to define rules that apply only to patch updates.</p>"},{"location":"configuration-options/#pin","title":"<code>pin</code>","text":"<p>Configuration to apply when an update type is <code>pin</code>.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type object default <pre><code>{\n  \"rebaseWhen\": \"behind-base-branch\",\n  \"groupName\": \"Pin Dependencies\",\n  \"groupSlug\": \"pin-dependencies\",\n  \"commitMessageAction\": \"Pin\",\n  \"group\": {\"commitMessageTopic\": \"dependencies\", \"commitMessageExtra\": \"\"}\n}\n</code></pre> mergeable true env <code>RENOVATE_PIN</code> <p>Add to this object if you wish to define rules that apply only to PRs that pin dependencies.</p>"},{"location":"configuration-options/#pindigest","title":"<code>pinDigest</code>","text":"<p>Configuration to apply when pinning a digest (no change in tag/version).</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type object default <pre><code>{\n  \"groupName\": \"Pin Dependencies\",\n  \"groupSlug\": \"pin-dependencies\",\n  \"commitMessageAction\": \"Pin\",\n  \"group\": {\"commitMessageTopic\": \"dependencies\", \"commitMessageExtra\": \"\"}\n}\n</code></pre> mergeable true env <code>RENOVATE_PIN_DIGEST</code> <p>Add to this object if you wish to define rules that apply only to PRs that pin digests.</p>"},{"location":"configuration-options/#pindigests","title":"<code>pinDigests</code>","text":"<p>Whether to add digests to Dockerfile source images.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type boolean default <code>false</code> cli <code>--pin-digests</code> env <code>RENOVATE_PIN_DIGESTS</code> <p>If enabled Renovate will pin Docker images or GitHub Actions by means of their SHA256 digest and not only by tag so that they are immutable.</p>"},{"location":"configuration-options/#platformautomerge","title":"<code>platformAutomerge</code>","text":"<p>Controls if platform-native auto-merge is used.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>true</code> supportedPlatforms azure, bitbucket-server, forgejo, gitea, github, gitlab cli <code>--platform-automerge</code> env <code>RENOVATE_PLATFORM_AUTOMERGE</code> <p>Note</p> <p>If you use the default <code>platformAutomerge=true</code> then you should enable your Git hosting platform's capabilities to enforce test passing before PR merge. If you don't do this, the platform might merge Renovate PRs even if the repository's tests haven't started, are in still in progress, or possibly even when they have failed. On GitHub this is called \"Require status checks before merging\", which you can find in the \"Branch protection rules\" section of the settings for your repository. GitHub docs, about protected branches GitHub docs, require status checks before merging If you're using another platform, search their documentation for a similar feature.</p> <p>Note</p> <p>If you mark <code>renovate/artifacts</code> as a required status check in your branch protection rules, you must also set <code>statusCheckWhen.artifactError</code> to <code>\"always\"</code>. The default <code>\"failed\"</code> only sets the check when artifact updates fail, so a required check rule would block every PR that has no artifact errors (the check would never appear). Setting it to <code>\"always\"</code> makes Renovate report green when there are no errors and red when there are, which is what branch protection requires.</p> <p>If you have enabled <code>automerge</code> and set <code>automergeType=pr</code> in the Renovate config, then leaving <code>platformAutomerge</code> as <code>true</code> speeds up merging via the platform's native automerge functionality.</p> <p>Where supported, platform-native automerge uses <code>automergeStrategy</code> to select the merge method.</p> <p>On Bitbucket Server, GitHub and GitLab, Renovate re-enables the PR for platform-native automerge whenever it's rebased.</p> <p><code>platformAutomerge</code> will configure PRs to be merged after all (if any) branch policies have been met. This option is available for Azure, Bitbucket Server, Forgejo, Gitea, GitHub and GitLab. It falls back to Renovate-based automerge if the platform-native automerge is not available.</p> <p>You can also fine-tune the behavior by setting <code>packageRules</code> if you want to use it selectively (e.g. per-package).</p> <p>Note that the outcome of <code>rebaseWhen=auto</code> can differ when <code>platformAutomerge=true</code>. Normally when you set <code>rebaseWhen=auto</code> Renovate rebases any branch that's behind the base branch automatically, and some people rely on that. This behavior is no longer guaranteed when <code>platformAutomerge</code> is <code>true</code> because the platform might automerge a branch which is not up-to-date. For example, GitHub might automerge a Renovate branch even if it's behind the base branch at the time.</p> <p>Please check platform specific docs for version requirements.</p> <p>To learn how to use GitHub's Merge Queue feature with Renovate, read our GitHub Merge Queue docs.</p>"},{"location":"configuration-options/#platformcommit","title":"<code>platformCommit</code>","text":"<p>Use platform API to perform commits instead of using Git directly.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string default <code>\"auto\"</code> allowedValues <pre><code>[\"auto\", \"disabled\", \"enabled\"]\n</code></pre> supportedPlatforms github cli <code>--platform-commit</code> env <code>RENOVATE_PLATFORM_COMMIT</code> <p>Only use this option if you run Renovate as a GitHub App. It does not apply when you use a Personal Access Token as credential.</p> <p>When <code>platformCommit</code> is enabled, Renovate will create commits with GitHub's API instead of using <code>git</code> directly. This way Renovate can use GitHub's Commit signing support for bots and other GitHub Apps feature.</p> <p>Note</p> <p>When using platform commits, GitHub determines the git author string to use and Renovate's own gitAuthor is ignored.</p>"},{"location":"configuration-options/#postupdateoptions","title":"<code>postUpdateOptions</code>","text":"<p>Enable post-update options to be run after package/artifact updating.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type array subType string allowedValues <pre><code>[\n  \"bundlerConservative\",\n  \"composerWithAll\",\n  \"composerNoMinimalChanges\",\n  \"dotnetWorkloadRestore\",\n  \"gomodMassage\",\n  \"gomodTidy\",\n  \"gomodTidy1.17\",\n  \"gomodTidyAll\",\n  \"gomodTidyE\",\n  \"gomodUpdateImportPaths\",\n  \"gomodSkipVendor\",\n  \"gomodVendor\",\n  \"goGenerate\",\n  \"helmUpdateSubChartArchives\",\n  \"kustomizeInflateHelmCharts\",\n  \"npmDedupe\",\n  \"npmInstallTwice\",\n  \"pnpmDedupe\",\n  \"yarnDedupeFewer\",\n  \"yarnDedupeHighest\"\n]\n</code></pre> mergeable true default <code>[]</code>"},{"location":"configuration-options/#bundlerconservative","title":"<code>bundlerConservative</code>","text":"<p>Enable conservative mode for <code>bundler</code> (Ruby dependencies). This will only update the immediate dependency in the lockfile instead of all subdependencies.</p>"},{"location":"configuration-options/#composernominimalchanges","title":"<code>composerNoMinimalChanges</code>","text":"<p>Run <code>composer update</code> with no <code>--minimal-changes</code> flag (does not affect lock file maintenance, which will never use <code>--minimal-changes</code>).</p>"},{"location":"configuration-options/#composerwithall","title":"<code>composerWithAll</code>","text":"<p>Run <code>composer update</code> with <code>--with-all-dependencies</code> flag instead of the default <code>--with-dependencies</code>.</p>"},{"location":"configuration-options/#dotnetworkloadrestore","title":"<code>dotnetWorkloadRestore</code>","text":"<p>Run <code>dotnet workload restore</code> before <code>dotnet restore</code> commands.</p>"},{"location":"configuration-options/#gogenerate","title":"<code>goGenerate</code>","text":"<p>Run <code>go generate ./...</code>. This will then commit any files which were added or modified by running <code>go generate</code>.</p> <p>Note this will not install any other tools as part of the process. See Go Tool usage for how to incorporate these as part of your build process.</p> <p>This runs after vendoring, if vendoring was required.</p> <p>Note</p> <p>In order for this option to function, the global configuration option <code>allowedUnsafeExecutions</code> must include <code>goGenerate</code>.</p>"},{"location":"configuration-options/#gomodmassage","title":"<code>gomodMassage</code>","text":"<p>Enable massaging <code>replace</code> directives before calling <code>go</code> commands.</p>"},{"location":"configuration-options/#gomodskipvendor","title":"<code>gomodSkipVendor</code>","text":"<p>Never run <code>go mod vendor</code> after Go module updates.</p>"},{"location":"configuration-options/#gomodtidy","title":"<code>gomodTidy</code>","text":"<p>Run <code>go mod tidy</code> after Go module updates. This is implicitly enabled for major module updates when <code>gomodUpdateImportPaths</code> is enabled.</p>"},{"location":"configuration-options/#gomodtidy117","title":"<code>gomodTidy1.17</code>","text":"<p>Run <code>go mod tidy -compat=1.17</code> after Go module updates.</p>"},{"location":"configuration-options/#gomodtidyall","title":"<code>gomodTidyAll</code>","text":"<p>After running <code>go mod tidy</code> on the updated module, also run it on every other <code>go.mod</code> which references that module through a local <code>replace</code> directive, in dependency order. Use this in Go monorepos, where an update to a shared module must also reach the <code>go.sum</code> files of the modules which depend on it. Implies <code>gomodTidy</code>, and needs Go 1.20 or later. Avoid combining this with <code>gomodMassage</code>, which comments out the relative <code>replace</code> directives that this option follows.</p>"},{"location":"configuration-options/#gomodtidye","title":"<code>gomodTidyE</code>","text":"<p>Run <code>go mod tidy -e</code> after Go module updates.</p>"},{"location":"configuration-options/#gomodupdateimportpaths","title":"<code>gomodUpdateImportPaths</code>","text":"<p>Update source import paths on major module updates, using mod.</p>"},{"location":"configuration-options/#gomodvendor","title":"<code>gomodVendor</code>","text":"<p>Always run <code>go mod vendor</code> after Go module updates even if vendor files aren't detected.</p>"},{"location":"configuration-options/#helmupdatesubchartarchives","title":"<code>helmUpdateSubChartArchives</code>","text":"<p>Update subchart archives in the <code>/charts</code> folder.</p>"},{"location":"configuration-options/#kustomizeinflatehelmcharts","title":"<code>kustomizeInflateHelmCharts</code>","text":"<p>Inflate updated helm charts referenced in the kustomization.</p>"},{"location":"configuration-options/#npmdedupe","title":"<code>npmDedupe</code>","text":"<p>Run <code>npm install</code> with <code>--prefer-dedupe</code> for npm &gt;= 7 or <code>npm dedupe</code> after <code>package-lock.json</code> update for npm &lt;= 6.</p>"},{"location":"configuration-options/#npminstalltwice","title":"<code>npmInstallTwice</code>","text":"<p>Run <code>npm install</code> commands twice to work around bugs where <code>npm</code> generates invalid lock files if run only once.</p> <p>During lock file maintenance, Renovate always runs <code>npm install</code> twice, even without this option, because regenerating a lock file from scratch is known to need a second pass.</p>"},{"location":"configuration-options/#pnpmdedupe","title":"<code>pnpmDedupe</code>","text":"<p>Run <code>pnpm dedupe</code> after <code>pnpm-lock.yaml</code> updates.</p>"},{"location":"configuration-options/#yarndedupefewer","title":"<code>yarnDedupeFewer</code>","text":"<p>Run <code>yarn-deduplicate --strategy fewer</code> after <code>yarn.lock</code> updates.</p>"},{"location":"configuration-options/#yarndedupehighest","title":"<code>yarnDedupeHighest</code>","text":"<p>Run <code>yarn-deduplicate --strategy highest</code> (<code>yarn dedupe --strategy highest</code> for Yarn &gt;=2.2.0) after <code>yarn.lock</code> updates.</p>"},{"location":"configuration-options/#postupgradetasks","title":"<code>postUpgradeTasks</code>","text":"<p>Post-upgrade tasks that are executed before a commit is made by Renovate.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type object default <pre><code>{\n  \"commands\": [],\n  \"fileFilters\": [],\n  \"executionMode\": \"update\",\n  \"installTools\": {}\n}\n</code></pre> cli <code>--post-upgrade-tasks</code> env <code>RENOVATE_POST_UPGRADE_TASKS</code> <p>Post-upgrade tasks are commands that are executed by Renovate after a dependency has been updated but before the commit is created. The intention is to run any other command line tools that would modify existing files or generate new files when a dependency changes.</p> <p>Post-upgrade tasks are blocked by default for security reasons, so the admin of Renovate needs to choose whether to allow specific commands or any commands to be run - it depends on how much they trust their users in repos.</p> <p>Tip</p> <p>In Mend-hosted Renovate apps, commands remain blocked by default, but depending on your plan, you have more control over this.</p> <p>Each command must match at least one of the patterns defined in <code>allowedCommands</code> (a global-only configuration option) in order to be executed. If the list of allowed tasks is empty then no tasks will be executed.</p> <p>e.g.</p> <pre><code>{\n  \"postUpgradeTasks\": {\n    \"commands\": [\"tslint --fix\"],\n    \"fileFilters\": [\"yarn.lock\", \"**/*.js\"],\n    \"executionMode\": \"update\"\n  }\n}\n</code></pre> <p>The <code>postUpgradeTasks</code> configuration consists of four fields:</p>"},{"location":"configuration-options/#postupgradetaskscommands","title":"<code>postUpgradeTasks.commands</code>","text":"<p>A list of post-upgrade commands that are executed before a commit is made by Renovate.</p> Name Value type array subType string parents <code>postUpgradeTasks</code> supportsTemplating true env <code>RENOVATE_COMMANDS</code> default <code>[]</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>A list of commands that are executed after Renovate has updated a dependency but before the commit is made.</p> <p>You can use Handlebars templating in these commands. They will be compiled prior to the comparison against <code>allowedCommands</code>.</p> <p>Note</p> <p>Do not use <code>git add</code> in your commands to add new files to be tracked, add them by including them in your <code>postUpgradeTasks.fileFilters</code> instead.</p>"},{"location":"configuration-options/#postupgradetasksdatafiletemplate","title":"<code>postUpgradeTasks.dataFileTemplate</code>","text":"<p>A template to create post-upgrade command data file from.</p> Name Value type string parents <code>postUpgradeTasks</code> supportsTemplating true default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>A template to create data file from. The template uses the same format as <code>commands</code>. The data file is created as a temporary file and the path to the data file is stored in the <code>RENOVATE_POST_UPGRADE_COMMAND_DATA_FILE</code> environment variable avaliable to each post-upgrade command. The primary purpose of the data file is to store some update information in a file which would be consumed from a post-upgrade command. This is particularly useful if a post-upgrade command needs to have a long line of arguments. Example:</p> <pre><code>{\n  \"postUpgradeTasks\": {\n    \"commands\": [\n      \"my-script.py --data-file \\\"$RENOVATE_POST_UPGRADE_COMMAND_DATA_FILE\\\"\"\n    ],\n    \"dataFileTemplate\": \"[{{#each upgrades}}{\\\"depName\\\": \\\"{{{depName}}}\\\", \\\"currentValue\\\": \\\"{{{currentValue}}}\\\", \\\"newValue\\\": \\\"{{{newValue}}}\\\"}{{#unless @last}},{{\\/unless}}{{\\/each}}]\"\n  }\n}\n</code></pre> <p>Note</p> <p><code>dataFileTemplate</code> is ignored if there is no <code>commands</code> configured.</p>"},{"location":"configuration-options/#postupgradetasksexecutionmode","title":"<code>postUpgradeTasks.executionMode</code>","text":"<p>Controls when the post upgrade tasks run: on every update, or once per upgrade branch.</p> Name Value type string parents <code>postUpgradeTasks</code> allowedValues <pre><code>[\"update\", \"branch\"]\n</code></pre> default <code>\"update\"</code> env <code>RENOVATE_EXECUTION_MODE</code> <p>Defaults to <code>update</code>, but can also be set to <code>branch</code>. This sets the level the postUpgradeTask runs on, if set to <code>update</code> the postUpgradeTask will be executed for every dependency on the branch. If set to <code>branch</code> the postUpgradeTask is executed for the whole branch.</p>"},{"location":"configuration-options/#postupgradetasksfilefilters","title":"<code>postUpgradeTasks.fileFilters</code>","text":"<p>Files that match the glob pattern will be committed after running a post-upgrade task.</p> Name Value type array subType string parents <code>postUpgradeTasks</code> default <pre><code>[\"**/*\"]\n</code></pre> env <code>RENOVATE_FILE_FILTERS</code> <p>A list of glob-style matchers that determine which files will be included in the final commit made by Renovate. Dotfiles are included.</p> <p>Optional field which defaults to any non-ignored file in the repo (<code>**/*</code> glob pattern). Specify a custom value for this if you wish to exclude certain files which are modified by your <code>postUpgradeTasks</code> and you don't want committed.</p>"},{"location":"configuration-options/#postupgradetasksinstalltools","title":"<code>postUpgradeTasks.installTools</code>","text":"<p>Install tools before executing commands</p> Name Value type object parents <code>postUpgradeTasks</code> mergeable false freeChoice true env <code>RENOVATE_INSTALL_TOOLS</code> <p>Whether to install any additional tools dynamically before executing the <code>commands</code>.</p> <p>The possible tool names that are known by Containerbase are:</p> <ul> <li><code>apm</code></li> <li><code>bazelisk</code></li> <li><code>bun</code></li> <li><code>bundler</code></li> <li><code>cocoapods</code></li> <li><code>composer</code></li> <li><code>conan</code></li> <li><code>copier</code></li> <li><code>corepack</code></li> <li><code>deno</code></li> <li><code>devbox</code></li> <li><code>dotnet</code></li> <li><code>erlang</code></li> <li><code>elixir</code></li> <li><code>flux</code></li> <li><code>gh</code></li> <li><code>gleam</code></li> <li><code>golang</code></li> <li><code>gradle</code></li> <li><code>hashin</code></li> <li><code>helm</code></li> <li><code>helmfile</code></li> <li><code>java</code></li> <li><code>jb</code></li> <li><code>kustomize</code></li> <li><code>maven</code></li> <li><code>mise</code></li> <li><code>nix</code></li> <li><code>node</code></li> <li><code>npm</code></li> <li><code>paket</code></li> <li><code>pdm</code></li> <li><code>php</code></li> <li><code>pip-tools</code></li> <li><code>pipenv</code></li> <li><code>pnpm</code></li> <li><code>pixi</code></li> <li><code>poetry</code></li> <li><code>python</code></li> <li><code>ruby</code></li> <li><code>rust</code></li> <li><code>uv</code></li> <li><code>yarn</code></li> <li><code>yarn-slim</code></li> <li><code>dart</code></li> <li><code>flutter</code></li> <li><code>vendir</code></li> </ul> <p>Note</p> <p>When using <code>binarySource=global</code>, the <code>installTools</code> options do not take effect.</p> <p>For example:</p> Adding a tool requirement<pre><code>{\n  \"postUpgradeTasks\": {\n    \"commands\": [\"make generate\"],\n    \"installTools\": {\n      \"golang\": {}\n    }\n  }\n}\n</code></pre> Utilising constraints for tool requirements<pre><code>{\n  \"constraints\": {\n    \"node\": \"^18.0.0 || &gt;=20.0.0\"\n  },\n  \"postUpgradeTasks\": {\n    \"commands\": [\"npm install\", \"npm run update-readme\"],\n    \"installTools\": {\n      \"node\": {}\n    }\n  }\n}\n</code></pre> <p>Note</p> <p>The tool objects inside <code>installTools</code> currently do not expose any additional configurability.</p>"},{"location":"configuration-options/#postupgradetasksworkingdirtemplate","title":"<code>postUpgradeTasks.workingDirTemplate</code>","text":"<p>A template describing the working directory in which post-upgrade tasks should be executed.</p> Name Value type string parents <code>postUpgradeTasks</code> supportsTemplating true default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>A template describing the working directory in which the commands should be executed, relative to the repository root. If the template evaluates to a false value, then the command will be executed from the root of the repository. Example:</p> <pre><code>{\n  \"postUpgradeTasks\": {\n    \"commands\": [\"my-script.py\"],\n    \"workingDirTemplate\": \"{{{packageFileDir}}}\"\n  }\n}\n</code></pre>"},{"location":"configuration-options/#prbodycolumns","title":"<code>prBodyColumns</code>","text":"<p>List of columns to use in PR bodies.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type array subType string default <pre><code>[\"Package\", \"Type\", \"Update\", \"Change\", \"Pending\"]\n</code></pre> cli <code>--pr-body-columns</code> env <code>RENOVATE_PR_BODY_COLUMNS</code> <p>Use this array to provide a list of column names you wish to include in the PR tables.</p> Adding the package file name to the table<pre><code>{\n  \"prBodyColumns\": [\n    \"Package\",\n    \"Update\",\n    \"Type\",\n    \"New value\",\n    \"Package file\",\n    \"References\"\n  ]\n}\n</code></pre> <p>Note</p> <p>\"Package file\" is predefined in the default <code>prBodyDefinitions</code> object so does not require a definition before it can be used.</p>"},{"location":"configuration-options/#prbodydefinitions","title":"<code>prBodyDefinitions</code>","text":"<p>Table column definitions to use in PR tables.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type object freeChoice true mergeable true default <pre><code>{\n  \"Package\": \"{{{depNameLinked}}}{{#if newName}}{{#unless (equals depName newName)}} \u2192 {{{newNameLinked}}}{{/unless}}{{/if}}\",\n  \"Type\": \"{{{depType}}}\",\n  \"Update\": \"{{{updateType}}}\",\n  \"Current value\": \"{{{currentValue}}}\",\n  \"New value\": \"{{{newValue}}}\",\n  \"Change\": \"`{{{displayFrom}}}` \u2192 `{{{displayTo}}}`\",\n  \"Pending\": \"{{{displayPending}}}\",\n  \"References\": \"{{{references}}}\",\n  \"Package file\": \"{{{packageFile}}}\",\n  \"Age\": \"{{#if newVersion}}![age](https://developer.mend.io/api/mc/badges/age/{{datasource}}/{{replace '/' '%2f' packageName}}/{{{newVersion}}}?slim=true){{/if}}\",\n  \"Adoption\": \"{{#if newVersion}}![adoption](https://developer.mend.io/api/mc/badges/adoption/{{datasource}}/{{replace '/' '%2f' packageName}}/{{{newVersion}}}?slim=true){{/if}}\",\n  \"Passing\": \"{{#if newVersion}}![passing](https://developer.mend.io/api/mc/badges/compatibility/{{datasource}}/{{replace '/' '%2f' packageName}}/{{{currentVersion}}}/{{{newVersion}}}?slim=true){{/if}}\",\n  \"Confidence\": \"{{#if newVersion}}![confidence](https://developer.mend.io/api/mc/badges/confidence/{{datasource}}/{{replace '/' '%2f' packageName}}/{{{currentVersion}}}/{{{newVersion}}}?slim=true){{/if}}\"\n}\n</code></pre> cli <code>--pr-body-definitions</code> env <code>RENOVATE_PR_BODY_DEFINITIONS</code> <p>You can configure this object to either:</p> <ul> <li>modify the template for an existing table column in PR bodies, or</li> <li>add a definition for a new/additional column.</li> </ul> Modifying the default value for the Package column to put it inside a code block<pre><code>{\n  \"prBodyDefinitions\": {\n    \"Package\": \"`{{{depName}}}`\"\n  }\n}\n</code></pre> Adding a custom Sourcegraph column definition<pre><code>{\n  \"prBodyDefinitions\": {\n    \"Sourcegraph\": \"[![code search for \\\"{{{depName}}}\\\"](https://sourcegraph.com/search/badge?q=repo:%5Egithub%5C.com/{{{repository}}}%24+case:yes+-file:package%28-lock%29%3F%5C.json+{{{depName}}}&amp;label=matches)](https://sourcegraph.com/search?q=repo:%5Egithub%5C.com/{{{repository}}}%24+case:yes+-file:package%28-lock%29%3F%5C.json+{{{depName}}})\"\n  },\n  \"prBodyColumns\": [\n    \"Package\",\n    \"Update\",\n    \"New value\",\n    \"References\",\n    \"Sourcegraph\"\n  ]\n}\n</code></pre> <p>Tip</p> <p>Columns must also be included in the <code>prBodyColumns</code> array in order to be used, so that's why it's included above in the example.</p>"},{"location":"configuration-options/#prbodyheadingdefinitions","title":"<code>prBodyHeadingDefinitions</code>","text":"<p>Table header definitions to use in PR tables.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type object freeChoice true mergeable true default <pre><code>{\n  \"Age\": \"[Age](https://docs.renovatebot.com/merge-confidence/)\",\n  \"Adoption\": \"[Adoption](https://docs.renovatebot.com/merge-confidence/)\",\n  \"Passing\": \"[Passing](https://docs.renovatebot.com/merge-confidence/)\",\n  \"Confidence\": \"[Confidence](https://docs.renovatebot.com/merge-confidence/)\"\n}\n</code></pre> cli <code>--pr-body-heading-definitions</code> env <code>RENOVATE_PR_BODY_HEADING_DEFINITIONS</code> <p>You can configure this object to modify the table headers present in the PR body. This can include Markdown or any other syntax that the platform supports.</p> Modifying the default value for the Package and Age table headers<pre><code>{\n  \"prBodyHeadingDefinitions\": {\n    \"Package\": \"\ud83d\udce6 Package\",\n    \"Age\": \"[Age](https://docs.renovatebot.com/merge-confidence)\"\n  },\n  \"prBodyColumns\": [\"Package\", \"Age\"]\n}\n</code></pre> <p>Tip</p> <p>Columns must also be included in the <code>prBodyColumns</code> array in order to be used, so that's why it's included above in the example.</p> <p>Note</p> <p>Templating is not supported for this option.</p>"},{"location":"configuration-options/#prbodynotes","title":"<code>prBodyNotes</code>","text":"<p>List of extra notes or templates to include in the Pull Request body.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type array subType string mergeable true supportsTemplating true cli <code>--pr-body-notes</code> env <code>RENOVATE_PR_BODY_NOTES</code> default <code>[]</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Use this field to add custom content inside PR bodies, including conditionally.</p> Adding an extra Warning to major updates<pre><code>{\n  \"prBodyNotes\": [\"{{#if isMajor}}:warning: MAJOR MAJOR MAJOR :warning:{{/if}}\"]\n}\n</code></pre>"},{"location":"configuration-options/#prbodytemplate","title":"<code>prBodyTemplate</code>","text":"<p>Pull Request body template. Controls which sections are rendered in the body of the pull request.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string default <code>\"{{{header}}}{{{table}}}{{{warnings}}}{{{notes}}}{{{changelogs}}}{{{configDescription}}}{{{controls}}}{{{footer}}}\"</code> supportsTemplating true env <code>RENOVATE_PR_BODY_TEMPLATE</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>The available sections are:</p> <ul> <li><code>header</code></li> <li><code>table</code></li> <li><code>warnings</code></li> <li><code>notes</code></li> <li><code>changelogs</code></li> <li><code>configDescription</code></li> <li><code>controls</code></li> <li><code>footer</code></li> </ul>"},{"location":"configuration-options/#prconcurrentlimit","title":"<code>prConcurrentLimit</code>","text":"<p>Limit to a maximum of x concurrent branches/PRs. 0 means no limit.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type integer default 10 cli <code>--pr-concurrent-limit</code> env <code>RENOVATE_PR_CONCURRENT_LIMIT</code> <p>This setting - if enabled - limits Renovate to a maximum of <code>x</code> concurrent PRs open at any time.</p> <p>This limit is enforced on a per-repository basis.</p> <p>Note</p> <p>Renovate always creates security PRs, even if the concurrent PR limit is already reached. Security PRs have <code>[SECURITY]</code> in their PR title.</p>"},{"location":"configuration-options/#prcreation","title":"<code>prCreation</code>","text":"<p>When to create the PR for a branch.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string allowedValues <pre><code>[\"immediate\", \"not-pending\", \"status-success\", \"approval\"]\n</code></pre> default <code>\"immediate\"</code> cli <code>--pr-creation</code> env <code>RENOVATE_PR_CREATION</code> <p>This setting tells Renovate when to create PRs:</p> <ul> <li><code>immediate</code> (default): Renovate creates PRs immediately after creating the corresponding branch</li> <li><code>not-pending</code>: Renovate waits until status checks have completed (passed or failed) before raising the PR</li> <li><code>status-success</code>: Renovate only creates PRs if/when the the test pass</li> <li><code>approval</code>: Renovate creates branches for updates immediately, but creates the PR after getting Dependency Dashboard approval</li> </ul> <p>When prCreation is set to <code>immediate</code>, you'll get a Pull Request and possible associated notification right away when a new update is available. You'll have to wait until the checks have been performed, before you can decide if you want to merge the PR.</p> <p>When prCreation is set to <code>not-pending</code>, Renovate creates the PR only once all tests have passed or failed. When you get the PR notification, you can take action immediately, as you have the full test results. If there are no checks associated, Renovate will create the PR once <code>prNotPendingHours</code> have elapsed since the branch's latest commit (default: 25 hours).</p> <p><code>not-pending</code> can stall PR creation when there are no branch-level checks</p> <p>A branch with no external status checks is reported as <code>pending</code>, so <code>not-pending</code> never sees checks \"complete\" and instead relies on the <code>prNotPendingHours</code> fallback. That fallback is measured from the branch's latest commit, not from when the branch was created, so anything that rewrites the branch (rebase, re-lock, etc.) restarts the timer. On repositories whose branches are rebased or re-locked more often than <code>prNotPendingHours</code>, PRs can be deferred indefinitely. This commonly happens when CI only runs on <code>pull_request</code> events, so bare Renovate branches carry no checks. If you rely on <code>minimumReleaseAge</code>/<code>internalChecksFilter</code> for the \"wait\" behavior, set <code>internalChecksAsSuccess</code><code>=true</code> so the green internal stability check counts as success and the branch can go green without external checks, or use <code>prCreation=immediate</code> instead.</p> <p>When prCreation is set to <code>status-success</code>, Renovate creates the PR only if all tests have passed. When a branch remains without PR due to a failing test: select the corresponding PR from the Dependency Dashboard, and push your fixes to the branch.</p> <p>When prCreation is set to <code>approval</code>, Renovate creates the PR only when approved via the Dependency Dashboard. Renovate still creates the branch immediately.</p> <p>Note</p> <p>For all cases of non-immediate PR creation, Renovate doesn't run instantly once tests complete. Instead, Renovate create the PR on its next run after the relevant tests have completed, so there will be some delay.</p> <p>Warning</p> <p>If you set <code>prCreation=approval</code> you must not use <code>dependencyDashboardApproval=true</code>!</p>"},{"location":"configuration-options/#prfooter","title":"<code>prFooter</code>","text":"<p>Text added here will be placed last in the PR body, with a divider separator before it.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string default <code>\"This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).\"</code> supportsTemplating true cli <code>--pr-footer</code> env <code>RENOVATE_PR_FOOTER</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p>"},{"location":"configuration-options/#prheader","title":"<code>prHeader</code>","text":"<p>Text added here will be placed first in the PR body.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string supportsTemplating true cli <code>--pr-header</code> env <code>RENOVATE_PR_HEADER</code> default <code>null</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p>"},{"location":"configuration-options/#prhourlylimit","title":"<code>prHourlyLimit</code>","text":"<p>Rate limit PRs to maximum x created per hour. 0 means no limit.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type integer default 2 cli <code>--pr-hourly-limit</code> env <code>RENOVATE_PR_HOURLY_LIMIT</code> <p>This config option slows down the rate at which Renovate creates PRs.</p> <p>Slowing Renovate down can be handy when you're onboarding a repository with a lot of dependencies. What may happen if you don't set a <code>prHourlyLimit</code>:</p> <ol> <li>Renovate creates an Onboarding PR</li> <li>You merge the onboarding PR to activate Renovate</li> <li>Renovate creates a \"Pin Dependencies\" PR (if needed)</li> <li>You merge the \"Pin Dependencies\" PR</li> <li>Renovate creates every single upgrade PR needed, which can be a lot</li> </ol> <p>The above may cause:</p> <ul> <li>Renovate's PRs to overwhelm your CI systems</li> <li>a lot of test runs, because branches are rebased each time you merge a PR</li> </ul> <p>To prevent these problems you can set <code>prHourlyLimit</code> to a value like <code>1</code> or <code>2</code>. Renovate will only create that many PRs within each hourly period (<code>:00</code> through <code>:59</code>). You still get all the PRs in a reasonable time, perhaps over a day or so. Now you can merge the PRs at a do-able rate, once the tests pass.</p> <p>Tip</p> <p>The <code>prHourlyLimit</code> setting does not limit the number of concurrently open PRs, only the rate at which PRs are created. The <code>prHourlyLimit</code> setting is enforced on a per-repository basis.</p>"},{"location":"configuration-options/#prnotpendinghours","title":"<code>prNotPendingHours</code>","text":"<p>Timeout in hours for when <code>prCreation=not-pending</code>.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type integer default 25 cli <code>--pr-not-pending-hours</code> env <code>RENOVATE_PR_NOT_PENDING_HOURS</code> <p>If you configure <code>prCreation=not-pending</code>, then Renovate will wait until tests are non-pending (all pass or at least one fails) before creating PRs. However there are cases where PRs may remain in pending state forever, e.g. absence of tests or status checks that are configure to pending indefinitely. This is why we configured an upper limit for how long we wait until creating a PR.</p> <p>Note</p> <p>If the option <code>minimumReleaseAge</code> is non-zero then Renovate disables the <code>prNotPendingHours</code> functionality.</p>"},{"location":"configuration-options/#prtitle","title":"<code>prTitle</code>","text":"<p>Pull Request title template. Inherits from <code>commitMessage</code> if null.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string supportsTemplating true env <code>RENOVATE_PR_TITLE</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>This feature has been deprecated</p> <p>Direct editing of <code>prTitle</code> is now deprecated. Instead use config options like <code>commitMessageAction</code>, <code>commitMessageExtra</code>, and so on, as they will be passed through to <code>prTitle</code>.</p> <p>The PR title is important for some of Renovate's matching algorithms (e.g. determining whether to recreate a PR or not) so ideally don't modify it much.</p>"},{"location":"configuration-options/#prtitlestrict","title":"<code>prTitleStrict</code>","text":"<p>Whether to bypass appending extra context to the Pull Request title.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> env <code>RENOVATE_PR_TITLE_STRICT</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>There are certain scenarios where the default behavior appends extra context to the PR title.</p> <p>These scenarios include if a <code>baseBranch</code> or if there is a grouped update and either <code>separateMajorMinor</code> or <code>separateMinorPatch</code> is true.</p> <p>Using this option allows you to skip these default behaviors and use other templating methods to control the format of the PR title.</p>"},{"location":"configuration-options/#printconfig","title":"<code>printConfig</code>","text":"<p>If enabled, Renovate logs the fully resolved config for each repository, plus the fully resolved presets.</p> Name Value scopes repo type boolean default <code>false</code> cli <code>--print-config</code> env <code>RENOVATE_PRINT_CONFIG</code> <p>This option is useful for troubleshooting, particularly if using presets. e.g. run <code>renovate foo/bar --print-config &gt; config.log</code> and the fully-resolved config will be included in the log file.</p>"},{"location":"configuration-options/#prunebranchafterautomerge","title":"<code>pruneBranchAfterAutomerge</code>","text":"<p>Set to <code>true</code> to enable branch pruning after automerging.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>true</code> cli <code>--prune-branch-after-automerge</code> env <code>RENOVATE_PRUNE_BRANCH_AFTER_AUTOMERGE</code> <p>By default Renovate deletes, or \"prunes\", the branch after automerging. Set <code>pruneBranchAfterAutomerge</code> to <code>false</code> to keep the branch after automerging.</p>"},{"location":"configuration-options/#prunestalebranches","title":"<code>pruneStaleBranches</code>","text":"<p>Set to <code>false</code> to disable pruning stale branches.</p> Name Value scopes repo type boolean default <code>true</code> cli <code>--prune-stale-branches</code> env <code>RENOVATE_PRUNE_STALE_BRANCHES</code> <p>By default, Renovate will \"prune\" any of its own branches/PRs which it thinks are no longer needed. Such branches are referred to as \"stale\", and may be the result of Open, Merged, or Closed/Ignored PRs. It usually doesn't know why they're there, instead it simply knows that it has no need for them.</p> <p>If a branch appears stale but has been modified by a different git author, then Renovate won't delete the branch or autoclose any associated PR. Instead, it will update the title to append \" - abandoned\" plus add a comment noting that autoclosing is skipped. Read the Abandoned PRs docs to learn more.</p> <p>If a branch appears stale and hasn't been modified, then:</p> <ul> <li>If an Open PR exist for the branch, then Renovate will rename the PR to append \" - autoclosed\" before closing/abandoning it</li> <li>Renovate will delete the branch</li> </ul> <p>You can configure <code>pruneStaleBranches=false</code> to disable deleting orphan branches and autoclosing PRs, but then you will be responsible for such branch/PR \"cleanup\" so it is not recommended.</p>"},{"location":"configuration-options/#rangestrategy","title":"<code>rangeStrategy</code>","text":"<p>Determines how to modify or update existing ranges.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type string default <code>\"auto\"</code> allowedValues <pre><code>[\"auto\", \"pin\", \"bump\", \"replace\", \"widen\", \"update-lockfile\", \"in-range-only\"]\n</code></pre> <p>Behavior:</p> <ul> <li><code>auto</code> = Renovate decides (this will be done on a manager-by-manager basis)</li> <li><code>pin</code> = convert ranges to exact versions, e.g. <code>^1.0.0</code> \u2192 <code>1.1.0</code></li> <li><code>bump</code> = e.g. bump the range even if the new version satisfies the existing range, e.g. <code>^1.0.0</code> \u2192 <code>^1.1.0</code></li> <li><code>replace</code> = Replace the range with a newer one if the new version falls outside it, and update nothing otherwise</li> <li><code>widen</code> = Widen the range with newer one, e.g. <code>^1.0.0</code> \u2192 <code>^1.0.0 || ^2.0.0</code></li> <li><code>update-lockfile</code> = Update the lock file when in-range updates are available, otherwise <code>replace</code> for updates out of range. Works for <code>bundler</code>, <code>cargo</code>, <code>composer</code>, <code>gleam</code>, <code>npm</code>, <code>yarn</code>, <code>pnpm</code>, <code>terraform</code>, <code>poetry</code> and <code>uv</code> so far</li> <li><code>in-range-only</code> = Update the lock file when in-range updates are available, ignore package file updates</li> </ul> <p>Renovate's <code>\"auto\"</code> strategy works like this for npm:</p> <ol> <li>Widen <code>peerDependencies</code></li> <li>If an existing range already ends with an \"or\" operator like <code>\"^1.0.0 || ^2.0.0\"</code>, then Renovate widens it into <code>\"^1.0.0 || ^2.0.0 || ^3.0.0\"</code></li> <li>Otherwise, if the update is outside the existing range, Renovate replaces the range. So <code>\"^2.0.0\"</code> is replaced by <code>\"^3.0.0\"</code></li> <li>Finally, if the update is in-range, Renovate will update the lockfile with the new exact version.</li> </ol> <p>By default, Renovate assumes that if you are using ranges then it's because you want them to be wide/open. Renovate won't deliberately \"narrow\" any range by increasing the semver value inside.</p> <p>For example, if your <code>package.json</code> specifies a value for <code>left-pad</code> of <code>^1.0.0</code> and the latest version on npmjs is <code>1.2.0</code>, then Renovate won't change anything because <code>1.2.0</code> satisfies the range. If instead you'd prefer to be updated to <code>^1.2.0</code> in cases like this, then configure <code>rangeStrategy</code> to <code>bump</code> in your Renovate config.</p> <p>This feature supports caret (<code>^</code>) and tilde (<code>~</code>) ranges only, like <code>^1.0.0</code> and <code>~1.0.0</code>.</p> <p>The <code>in-range-only</code> strategy may be useful if you want to leave the package file unchanged and only do <code>update-lockfile</code> within the existing range. The <code>in-range-only</code> strategy behaves like <code>update-lockfile</code>, but discards any updates where the new version of the dependency is not equal to the current version. We recommend you avoid using the <code>in-range-only</code> strategy unless you strictly need it. Using the <code>in-range-only</code> strategy may result in you being multiple releases behind without knowing it.</p>"},{"location":"configuration-options/#rebaselabel","title":"<code>rebaseLabel</code>","text":"<p>Label to request a rebase from Renovate.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string default <code>\"rebase\"</code> cli <code>--rebase-label</code> env <code>RENOVATE_REBASE_LABEL</code> <p>On supported platforms it is possible to add a label to a PR to manually request Renovate to recreate/rebase it. By default this label is <code>\"rebase\"</code> but you can configure it to anything you want by changing this <code>rebaseLabel</code> field.</p>"},{"location":"configuration-options/#rebasewhen","title":"<code>rebaseWhen</code>","text":"<p>Controls when Renovate rebases an existing branch.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string allowedValues <pre><code>[\"auto\", \"never\", \"conflicted\", \"behind-base-branch\", \"automerging\"]\n</code></pre> default <code>\"auto\"</code> cli <code>--rebase-when</code> env <code>RENOVATE_REBASE_WHEN</code> <p>Possible values and meanings:</p> <ul> <li><code>auto</code>: Renovate will autodetect the best setting. It will use <code>behind-base-branch</code> if configured to automerge or repository has been set to require PRs to be up to date. Otherwise, <code>conflicted</code> will be used instead. On GitHub, if the base branch has a merge queue, <code>conflicted</code> is used because the merge queue already tests PRs against the head of the base branch. The same applies on GitLab if merge trains are enabled on the project</li> <li><code>automerging</code>: Renovate will use <code>behind-base-branch</code> if configured to automerge, Otherwise, <code>never</code> will be used instead</li> <li><code>never</code>: Renovate will never rebase the branch or update it unless manually requested</li> <li><code>conflicted</code>: Renovate will rebase only if the branch is conflicted</li> <li><code>behind-base-branch</code>: Renovate will rebase whenever the branch falls 1 or more commit behind its base branch</li> </ul> <p><code>rebaseWhen=conflicted</code> is not recommended if you have enabled Renovate automerge, because:</p> <ul> <li>It could result in a broken base branch if two updates are merged one after another without testing the new versions together</li> <li>If you have enforced that PRs must be up-to-date before merging (e.g. using branch protection on GitHub), then automerge won't be possible as soon as a PR gets out-of-date but remains non-conflicted</li> </ul> <p>It is also recommended to avoid <code>rebaseWhen=never</code> as it can result in conflicted branches with outdated PR descriptions and/or status checks.</p> <p>Avoid setting <code>rebaseWhen=never</code> and then also setting <code>prCreation=not-pending</code> as this can prevent creation of PRs.</p>"},{"location":"configuration-options/#recreatewhen","title":"<code>recreateWhen</code>","text":"<p>Recreate PRs even if same ones were closed previously.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string default <code>\"auto\"</code> allowedValues <pre><code>[\"auto\", \"always\", \"never\"]\n</code></pre> cli <code>--recreate-when</code> env <code>RENOVATE_RECREATE_WHEN</code> <p>This feature used to be called <code>recreateClosed</code>.</p> <p>By default, Renovate detects if it proposed an update to a project before, and will not propose the same update again. For example the Webpack 3.x case described in the <code>separateMajorMinor</code> documentation. You can use <code>recreateWhen</code> to customize this behavior down to a per-package level. For example we override it to <code>always</code> in the following cases where branch names and PR titles must be reused:</p> <ul> <li>Package groups</li> <li>When pinning versions</li> <li>Lock file maintenance</li> </ul> <p>You can select which behavior you want from Renovate:</p> <ul> <li><code>always</code>: Recreates all closed or blocking PRs</li> <li><code>auto</code>: The default option. Recreates only immortal PRs (default)</li> <li><code>never</code>: No PR is recreated, doesn't matter if it is immortal or not</li> </ul> <p>We recommend that you stick with the default setting for this option. Only change this setting if you really need to.</p>"},{"location":"configuration-options/#registryaliases","title":"<code>registryAliases</code>","text":"<p>Aliases for registries.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group mergeable true type object additionalProperties <pre><code>{\"type\": \"string\"}\n</code></pre> supportedManagers ansible, argocd, bitbucket-pipelines, buildpacks, crossplane, crow, devcontainer, docker-compose, dockerfile, droneci, gitlabci, helm-requirements, helmfile, helmsman, helmv3, kubernetes, kustomize, maven, terraform, vendir, woodpecker cli <code>--registry-aliases</code> env <code>RENOVATE_REGISTRY_ALIASES</code> previouslyKnownAs <pre><code>[\"aliases\"]\n</code></pre> <p>You can use the <code>registryAliases</code> object to set registry aliases. Renovate applies all <code>registryAliases</code> objects, from top to bottom. The aliases support variables with default values (using the <code>:-</code> syntax) which can be useful for Docker Compose files.</p> <p>This feature works with the following managers:</p> <ul> <li><code>ansible</code></li> <li><code>argocd</code></li> <li><code>bazel-module</code></li> <li><code>bitbucket-pipelines</code></li> <li><code>circleci</code></li> <li><code>crow</code></li> <li><code>docker-compose</code></li> <li><code>dockerfile</code></li> <li><code>droneci</code></li> <li><code>fleet</code></li> <li><code>flux</code></li> <li><code>github-actions</code></li> <li><code>gitlabci</code></li> <li><code>helm-requirements</code></li> <li><code>helm-values</code></li> <li><code>helmfile</code></li> <li><code>helmsman</code></li> <li><code>helmv3</code></li> <li><code>kubernetes</code></li> <li><code>terraform</code></li> <li><code>woodpecker</code></li> </ul> Setting generic aliases<pre><code>{\n  \"registryAliases\": {\n    \"jfrogecosystem\": \"some.jfrog.mirror\",\n    \"jfrog.com\": \"some.jfrog.mirror\"\n  }\n}\n</code></pre> Setting aliases for a specific Renovate manager only<pre><code>{\n  \"gitlabci\": {\n    \"registryAliases\": {\n      \"$HARBOR_HOST/$HARBOR_PROJECT\": \"registry.example.com/proxy\",\n      \"$HARBOR_HOST/tools\": \"registry.example.com/tools\"\n    }\n  }\n}\n</code></pre> Using variables with default values<pre><code>{\n  \"registryAliases\": {\n    \"${CI_REGISTRY:-}\": \"my-registry.io\"\n  }\n}\n</code></pre> <p>Both image reference formats work:</p> <ul> <li>With a slash after the variable: <code>${CI_REGISTRY:-}/image:1.0</code></li> <li>Without a slash after the variable: <code>${CI_REGISTRY:-}image:1.0</code></li> </ul> <p>The alias value works with or without a trailing slash.</p> <p>If you are using a pull-through cache (for instance on Amazon Elastic Container Registry (ECR)):</p> Using a pull-through cache for public images<pre><code>{\n  \"registryAliases\": {\n    \"12345612312.dkr.ecr.us-east-1.amazonaws.com/public-images-go-here/ghcr.io\": \"ghcr.io\",\n    \"12345612312.dkr.ecr.us-east-1.amazonaws.com/public-images-go-here/dockerhub\": \"docker.io\"\n  }\n}\n</code></pre>"},{"location":"configuration-options/#registryurls","title":"<code>registryUrls</code>","text":"<p>List of URLs to try for dependency lookup. Package manager specific.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type array subType string default <code>[]</code> <p>Usually Renovate is able to either (a) use the default registries for a datasource, or (b) automatically detect during the manager extract phase which custom registries are in use. In case there is a need to configure them manually, it can be done using this <code>registryUrls</code> field, typically using <code>packageRules</code> like so:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"docker\"],\n      \"registryUrls\": [\"https://docker.mycompany.domain\"]\n    }\n  ]\n}\n</code></pre> <p>The field supports multiple URLs but it is datasource-dependent on whether only the first is used or multiple.</p> <p>In some situations managers can not derive which registry a given dependency comes from. In that case, managers skip it with <code>skipReason: unknown-registry</code> rather than look it up somewhere which may hold the wrong versions. When specifying <code>registryUrls</code> alongside a dependency with <code>skipReason: unknown-registry</code>, Renovate will use the configured <code>registryUrls</code>.</p>"},{"location":"configuration-options/#replacement","title":"<code>replacement</code>","text":"<p>Configuration to apply when replacing a dependency.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type object default <pre><code>{\n  \"branchTopic\": \"{{{depNameSanitized}}}-replacement\",\n  \"commitMessageAction\": \"Replace\",\n  \"commitMessageExtra\": \"with {{newName}} {{#if isMajor}}{{{prettyNewMajor}}}{{else}}{{#if isSingleVersion}}{{{prettyNewVersion}}}{{else}}{{{newValue}}}{{/if}}{{/if}}\",\n  \"prBodyNotes\": [\n    \"This is a special PR that replaces `{{{depName}}}` with the community suggested minimal stable replacement version.\"\n  ]\n}\n</code></pre> mergeable true env <code>RENOVATE_REPLACEMENT</code> <p>Add to this object if you wish to define rules that apply only to PRs that replace dependencies.</p>"},{"location":"configuration-options/#replacementapproach","title":"<code>replacementApproach</code>","text":"<p>Select whether to perform a direct replacement or alias replacement.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string allowedValues <pre><code>[\"replace\", \"alias\"]\n</code></pre> supportedManagers npm default <code>\"replace\"</code> cli <code>--replacement-approach</code> env <code>RENOVATE_REPLACEMENT_APPROACH</code> <p>For <code>npm</code> manager when <code>replacementApproach=alias</code> then instead of replacing <code>\"foo\": \"1.2.3\"</code> with <code>\"@my/foo\": \"1.2.4\"</code> we would instead replace it with <code>\"foo\": \"npm:@my/foo@1.2.4\"</code>.</p> <pre><code>{\n  \"replacementApproach\": \"alias\"\n}\n</code></pre>"},{"location":"configuration-options/#respectlatest","title":"<code>respectLatest</code>","text":"<p>Ignore versions newer than npm \"latest\" version.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type boolean default <code>true</code> cli <code>--respect-latest</code> env <code>RENOVATE_RESPECT_LATEST</code> <p>Similar to <code>ignoreUnstable</code>, this option controls whether to update to versions that are greater than the version tagged as <code>latest</code> in the repository. By default, <code>renovate</code> will update to a version greater than <code>latest</code> only if the current version is itself past latest.</p> <p>Note</p> <p>By default, respectLatest will be set to <code>false</code> for Maven results if a <code>latest</code> tag is found. This is because many Maven registries don't have a reliable <code>latest</code> tag - it just means whatever was last published. You need to override this to <code>respectLatest=true</code> in <code>packageRules</code> in order to use it.</p>"},{"location":"configuration-options/#reviewers","title":"<code>reviewers</code>","text":"<p>Requested reviewers for Pull Requests (either username or email address depending on the platform).</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type array subType string cli <code>--reviewers</code> env <code>RENOVATE_REVIEWERS</code> default <code>[]</code> <p>Must be valid usernames.</p> <p>Required reviewers on Azure DevOps</p> <p>To mark a reviewer as required on Azure DevOps, you must use the prefix <code>required:</code>.</p> <p>For example: if the username or team name is <code>bar</code> then you would set the config option like this:</p> <pre><code>{\n  \"reviewers\": [\"required:bar\"]\n}\n</code></pre> <p>Required reviewers on Forgejo</p> <p>If you're assigning a team to review on Forgejo, you must use the prefix <code>team:</code> and add the last part of the team name. Say the full team name on Forgejo is <code>organization/foo</code>, then you'd set the config option like this:</p> <pre><code>{\n  \"reviewers\": [\"team:foo\"]\n}\n</code></pre> <p>Required reviewers on GitHub</p> <p>If you're assigning a team to review on GitHub, you must use the prefix <code>team:</code> and add the last part of the team name. Say the full team name on GitHub is <code>@organization/foo</code>, then you'd set the config option like this:</p> <pre><code>{\n  \"reviewers\": [\"team:foo\"]\n}\n</code></pre> <p>Please note that Reviewers are only added during creation of a PR, but are not modified afterwards.</p> <p>Note</p> <p>By default, Renovate will not assign reviewers and assignees to an automerge-enabled PR unless it fails status checks. By configuring <code>assignAutomerge</code> setting to <code>true</code>, Renovate will instead always assign reviewers and assignees for automerging PRs at time of creation.</p>"},{"location":"configuration-options/#reviewersfromcodeowners","title":"<code>reviewersFromCodeOwners</code>","text":"<p>Determine reviewers based on configured code owners and changes in PR.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> cli <code>--reviewers-from-code-owners</code> env <code>RENOVATE_REVIEWERS_FROM_CODE_OWNERS</code> <p>If enabled Renovate tries to determine PR reviewers by matching rules defined in a CODEOWNERS file against the changes in the PR.</p> <p>Read the docs for your platform for details on syntax and allowed file locations:</p> <ul> <li>GitHub Docs, About code owners</li> <li>GitLab, Code Owners</li> <li>Bitbucket, Set up and use code owners</li> </ul> <p>Please note that Reviewers are only added during creation of a PR, but are not modified afterwards.</p>"},{"location":"configuration-options/#reviewerssamplesize","title":"<code>reviewersSampleSize</code>","text":"<p>Take a random sample of given size from <code>reviewers</code>.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type integer cli <code>--reviewers-sample-size</code> env <code>RENOVATE_REVIEWERS_SAMPLE_SIZE</code>"},{"location":"configuration-options/#rollback","title":"<code>rollback</code>","text":"<p>Configuration to apply when rolling back a version.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type object default <pre><code>{\n  \"branchTopic\": \"{{{depNameSanitized}}}-rollback\",\n  \"commitMessageAction\": \"Roll back\",\n  \"semanticCommitType\": \"fix\"\n}\n</code></pre> mergeable true env <code>RENOVATE_ROLLBACK</code> <p>Add to this object if you wish to define rules that apply only to PRs that roll back versions.</p>"},{"location":"configuration-options/#rollbackprs","title":"<code>rollbackPrs</code>","text":"<p>Create PRs to roll back versions if the current version is not found in the registry.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type boolean default <code>false</code> cli <code>--rollback-prs</code> env <code>RENOVATE_ROLLBACK_PRS</code> <p>There are times when a dependency version in use by a project gets removed from the registry. For some registries, existing releases or even whole packages can be removed or \"yanked\" at any time, while for some registries only very new or unused releases can be removed. Renovate's \"rollback\" feature exists to propose a downgrade to the next-highest release if the current release is no longer found in the registry.</p> <p>Renovate does not create these rollback PRs by default, so this functionality needs to be opted-into. We recommend you do this selectively with <code>packageRules</code> and not globally.</p>"},{"location":"configuration-options/#schedule","title":"<code>schedule</code>","text":"<p>Limit branch creation to these times of day or week.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type array subType string cli <code>--schedule</code> default <pre><code>[\"at any time\"]\n</code></pre> <p>The <code>schedule</code> option allows you to define times of the day, week or month when you are willing to allow Renovate to create branches.</p> <p>Setting a <code>schedule</code> does not itself cause or trigger Renovate to run. It's like putting a sign on your office which says \"DHL deliveries only accepted between 9-11am\". Such a sign won't cause DHL to come to your office only at 9-11am, instead it simply means that if they come at any other time of the day then they'll honor the sign and skip you. It also means that if they rarely attempt between 9-11am then you'll often get no deliveries in a day.</p> <p>Similarly, if you set too restrictive of a Renovate <code>schedule</code> and the chance of Renovate running on your repo during those hours is low, then you might find your dependency updates regularly skipped. For this reason we recommend you allow a time window of at least 3-4 hours in any <code>schedule</code>, unless your instance of Renovate is expected to run more frequently than that.</p> <p>Renovate supports the standard Cron syntax, as well as deprecated support for a subset of Later syntax. We recommend you always use Cron syntax, due to its superior testing and robustness. Config support questions are no longer accepted for Later syntax problems - you will be recommended to use Cron instead.</p> <p>The default value for <code>schedule</code> is \"at any time\", which is functionally the same as declaring a <code>null</code> schedule or <code>* * * * *</code> with Cron. i.e. Renovate will create Pull Requests at any time of any day, as needed.</p> <p>The easiest way to define a schedule is to use a preset if one of them fits your requirements. See Schedule presets for details and feel free to request a new one in the source repository if you think it would help others.</p> <p>Here are some example schedules and their Cron equivalent:</p> English description Supported by Later? Cron syntax every weekend Yes <code>* * * * 0,6</code> before 5:00am Yes <code>* 0-4 * * *</code> after 10pm and before 5am every weekday Yes <code>* 22-23,0-4 * * 1-5</code> on friday and saturday Yes <code>* * * * 5,6</code> every 3 months on the first day of the month Yes <code>* * 1 */3 *</code> <p>Note</p> <p>For Cron schedules, you must use the <code>*</code> wildcard for the minutes value, as Renovate doesn't support minute granularity. And the cron schedule must have five comma separated parts.</p> <p>One example might be that you don't want Renovate to run during your typical business hours, so that your build machines don't get clogged up testing <code>package.json</code> updates. You could then configure a schedule like this at the repository level:</p> <pre><code>{\n  \"description\": \"Schedule on weekdays at night (10 PM - 4 AM) and anytime on weekends\",\n  \"schedule\": [\"* 22-23,0-4 * * *\", \"* * * * 0,6\"]\n}\n</code></pre> <p>This would mean that Renovate can run for 7 hours each night, plus all the time on weekends. Note how the above example makes use of the \"OR\" logic of combining multiple schedules in the array.</p> <p>Note</p> <p>If both the day of the week and the day of the month are restricted in the schedule, then Renovate only runs when both the day of the month and day of the week match! For example: <code>* * 1-7 * 4</code> means Renovate only runs on the first Thursday of the month.</p> <p>It's common to use <code>schedule</code> in combination with <code>timezone</code>. You should configure <code>updateNotScheduled=false</code> if you want the schedule more strictly enforced so that updates to existing branches aren't pushed out of schedule. You can also configure <code>automergeSchedule</code> to limit the hours in which branches/PRs are automerged (if <code>automerge</code> is configured).</p>"},{"location":"configuration-options/#semanticcommitscope","title":"<code>semanticCommitScope</code>","text":"<p>Commit scope to use if Semantic Commits are enabled.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string default <code>\"deps\"</code> nullable true supportsTemplating true cli <code>--semantic-commit-scope</code> env <code>RENOVATE_SEMANTIC_COMMIT_SCOPE</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>By default you will see Angular-style commit prefixes like <code>\"chore(deps):\"</code>. If you wish to change it to something else like <code>\"package\"</code> then it will look like <code>\"chore(package):\"</code>. You can also use <code>parentDir</code> or <code>baseDir</code> to namespace your commits for monorepos e.g. <code>\"{{parentDir}}\"</code>.</p>"},{"location":"configuration-options/#semanticcommittype","title":"<code>semanticCommitType</code>","text":"<p>Commit type to use if Semantic Commits is enabled.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string default <code>\"chore\"</code> supportsTemplating true cli <code>--semantic-commit-type</code> env <code>RENOVATE_SEMANTIC_COMMIT_TYPE</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>By default you will see Angular-style commit prefixes like <code>\"chore(deps):\"</code>. If you wish to change it to something else like \"ci\" then it will look like <code>\"ci(deps):\"</code>.</p>"},{"location":"configuration-options/#semanticcommits","title":"<code>semanticCommits</code>","text":"<p>Enable Semantic Commit prefixes for commits and PR titles.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string allowedValues <pre><code>[\"auto\", \"enabled\", \"disabled\"]\n</code></pre> default <code>\"auto\"</code> cli <code>--semantic-commits</code> env <code>RENOVATE_SEMANTIC_COMMITS</code> <p>If you are using a semantic prefix for your commits, then you will want to enable this setting. Although it's configurable to a package-level, it makes most sense to configure it at a repository level. If configured to <code>enabled</code>, then the <code>semanticCommitScope</code> and <code>semanticCommitType</code> fields will be used for each commit message and PR title.</p> <p>Renovate autodetects if your repository is already using semantic commits or not and follows suit, so you only need to configure this if you wish to override Renovate's autodetected setting.</p>"},{"location":"configuration-options/#separatemajorminor","title":"<code>separateMajorMinor</code>","text":"<p>If set to <code>false</code>, Renovate will upgrade dependencies to their latest release only. Renovate will not separate major or minor branches.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type boolean default <code>true</code> cli <code>--separate-major-minor</code> env <code>RENOVATE_SEPARATE_MAJOR_MINOR</code> <p>Renovate's default behavior is to create a separate branch/PR if both minor and major version updates exist (note that your choice of <code>rangeStrategy</code> value can influence which updates exist in the first place however). For example, if you were using Webpack 2.0.0 and versions 2.1.0 and 3.0.0 were both available, then Renovate would create two PRs so that you have the choice whether to apply the minor update to 2.x or the major update of 3.x. If you were to apply the minor update then Renovate would keep updating the 3.x branch for you as well, e.g. if Webpack 3.0.1 or 3.1.0 were released. If instead you applied the 3.0.0 update then Renovate would clean up the unneeded 2.x branch for you on the next run.</p> <p>It is recommended that you leave this option to <code>true</code>, because of the polite way that Renovate handles this. For example, let's say in the above example that you decided you wouldn't update to Webpack 3 for a long time and don't want to build/test every time a new 3.x version arrives. In that case, simply close the \"Update Webpack to version 3.x\" PR and it won't be recreated again even if subsequent Webpack 3.x versions are released. You can continue with Webpack 2.x for as long as you want and get any updates/patches that are made for it. Then eventually when you do want to update to Webpack 3.x you can make that update to <code>package.json</code> yourself and commit it to the base branch once it's tested. After that, Renovate will resume providing you updates to 3.x again! i.e. if you close a major upgrade PR then it won't come back again, but once you make the major upgrade yourself then Renovate will resume providing you with minor or patch updates.</p> <p>This option also has priority over package groups configured by <code>packageRule</code>. So Renovate will propose separate PRs for major and minor updates of packages even if they are grouped. If you want to enforce grouped package updates, you need to set this option to <code>false</code> within the <code>packageRule</code>.</p>"},{"location":"configuration-options/#separateminorpatch","title":"<code>separateMinorPatch</code>","text":"<p>If set to <code>true</code>, Renovate will separate <code>minor</code> and <code>patch</code> updates into separate branches.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type boolean default <code>false</code> cli <code>--separate-minor-patch</code> env <code>RENOVATE_SEPARATE_MINOR_PATCH</code> previouslyKnownAs <pre><code>[\"separatePatchReleases\"]\n</code></pre> <p>By default, Renovate groups <code>patch</code> (<code>1.0.x</code>) and <code>minor</code> (<code>1.x.0</code>) releases into a single PR. For example: you are running version <code>1.0.0</code> of a package, which has two updates:</p> <ul> <li><code>1.0.1</code>, a <code>patch</code> type update</li> <li><code>1.1.0</code>, a <code>minor</code> type update</li> </ul> <p>By default, Renovate creates a single PR for the <code>1.1.0</code> version.</p> <p>If you want Renovate to create separate PRs for <code>patch</code> and <code>minor</code> upgrades, set <code>separateMinorPatch</code> to <code>true</code>. Getting separate updates from Renovate can be handy when you want to, for example, automerge <code>patch</code> updates but manually merge <code>minor</code> updates.</p>"},{"location":"configuration-options/#separatemultiplemajor","title":"<code>separateMultipleMajor</code>","text":"<p>If set to <code>true</code>, PRs will be raised separately for each available <code>major</code> upgrade version.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type boolean default <code>false</code> cli <code>--separate-multiple-major</code> env <code>RENOVATE_SEPARATE_MULTIPLE_MAJOR</code> previouslyKnownAs <pre><code>[\"multipleMajorPrs\"]\n</code></pre> <p>Configure this to <code>true</code> if you wish to get one PR for every separate major version upgrade of a dependency. e.g. if you are on webpack@v1 currently then default behavior is a PR for upgrading to webpack@v3 and not for webpack@v2. If this setting is true then you would get one PR for webpack@v2 and one for webpack@v3.</p>"},{"location":"configuration-options/#separatemultipleminor","title":"<code>separateMultipleMinor</code>","text":"<p>If set to <code>true</code>, Renovate creates separate PRs for each <code>minor</code> stream.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type boolean default <code>false</code> cli <code>--separate-multiple-minor</code> env <code>RENOVATE_SEPARATE_MULTIPLE_MINOR</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>Enable this for dependencies when it is important to split updates into separate PRs per minor release stream (e.g. <code>python</code>).</p> <p>For example, if you are on <code>python@v3.9.0</code> currently, then by default Renovate creates a PR to upgrade you to the latest version such as <code>python@v3.12.x</code>. By default, Renovate skips versions in between, like <code>python@v3.10.x</code>.</p> <p>But if you set <code>separateMultipleMinor=true</code> then you get separate PRs for each minor stream, like <code>python@3.9.x</code>, <code>python@v3.10.x</code> and <code>python@v3.11.x</code>, etc.</p>"},{"location":"configuration-options/#skipartifactsupdate","title":"<code>skipArtifactsUpdate</code>","text":"<p>Skip Renovate's automatic artifact updating.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>false</code> cli <code>--skip-artifacts-update</code> env <code>RENOVATE_SKIP_ARTIFACTS_UPDATE</code> <p>Use this option when automatic artifact updating fails, is incorrect, or not needed.</p> <p>This option was formerly known as <code>updateLockFiles</code>.</p> <p>When this option is set, Renovate won't attempt to update artifacts such as lock files, so you will need to update them yourself, either manually or through secondary automation such as CI workflows.</p> <p>Note</p> <p>When this option is used in package rules, along with grouped upgrades, artifact updating will only be skipped if every upgrade in the grouped branch wants to skip it.</p> <p>Warning</p> <p>When artifact updates are skipped and the <code>packageManager</code> field in <code>package.json</code> is updated, the new version will not contain a hash. The hash is only applied when artifacts are updated. For example, a value of <code>packageManager: \"yarn@3.0.0+sha224.deadbeef\"</code> would be updated to just <code>packageManager: \"yarn@3.1.0\"</code> rather than <code>packageManager: \"yarn@3.1.0+sha224.f0cacc1a\"</code>.</p>"},{"location":"configuration-options/#skipinstalls","title":"<code>skipInstalls</code>","text":"<p>Skip installing modules/dependencies if lock file updating is possible without a full install.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean supportedManagers npm cli <code>--skip-installs</code> env <code>RENOVATE_SKIP_INSTALLS</code> default <code>null</code> <p>By default, Renovate will use the most efficient approach to updating package files and lock files, which in most cases skips the need to perform a full module install. If this is set to false, then a full install of modules will be done. This is currently applicable to <code>npm</code> only, and only used in cases where bugs in <code>npm</code> result in incorrect lock files being updated.</p>"},{"location":"configuration-options/#statuschecknames","title":"<code>statusCheckNames</code>","text":"<p>Custom strings to use as status check names.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type object mergeable true default <pre><code>{\n  \"artifactError\": \"renovate/artifacts\",\n  \"configValidation\": \"renovate/config-validation\",\n  \"mergeConfidence\": \"renovate/merge-confidence\",\n  \"minimumReleaseAge\": \"renovate/stability-days\"\n}\n</code></pre> cli <code>--status-check-names</code> env <code>RENOVATE_STATUS_CHECK_NAMES</code> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>You can customize the name/context of status checks that Renovate adds to commits/branches/PRs.</p> <p>This option enables you to modify any existing status checks name/context, but adding new status checks this way is not supported. Setting the value to <code>null</code> or an empty string, effectively disables or skips that status check. This option is mergeable, which means you only have to specify the status checks that you want to modify.</p> Example of overriding status check strings<pre><code>{\n  \"statusCheckNames\": {\n    \"minimumReleaseAge\": \"custom/stability-days\",\n    \"mergeConfidence\": \"custom/merge-confidence-level\"\n  }\n}\n</code></pre>"},{"location":"configuration-options/#statuscheckwhen","title":"<code>statusCheckWhen</code>","text":"<p>Control when each Renovate status check is set on branches. Keys match <code>statusCheckNames</code>.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type object mergeable true default <pre><code>{\n  \"artifactError\": \"failed\",\n  \"configValidation\": \"always\",\n  \"mergeConfidence\": \"always\",\n  \"minimumReleaseAge\": \"always\"\n}\n</code></pre> cli <code>--status-check-when</code> env <code>RENOVATE_STATUS_CHECK_WHEN</code> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>Control when each Renovate status check is set on branches. The keys match those available in <code>statusCheckNames</code>. This option is mergeable, so you only need to specify the checks you want to change.</p> <p>Allowed values per key:</p> <ul> <li><code>always</code>: Renovate always sets the status check on every branch commit \u2014 green on success, red on failure.</li> <li><code>never</code>: Renovate never sets this status check. Use this to skip a check entirely.</li> <li><code>failed</code>: Renovate only sets the status check when there is a failure. Successes are silent (no green check).</li> </ul> <p>Default values:</p> Key Default Reasoning <code>artifactError</code> <code>failed</code> Legacy behavior \u2014 only reports artifact failures <code>configValidation</code> <code>always</code> Always reports validation pass/fail <code>mergeConfidence</code> <code>always</code> Always reports confidence level <code>minimumReleaseAge</code> <code>always</code> Always reports stability status <p>For example, to make <code>renovate/artifacts</code> a required check, set <code>artifactError</code> to <code>\"always\"</code> so it always reports green/red, allowing you to mark it as required in your branch protection rules. To skip a check entirely, set any key to <code>\"never\"</code> to suppress that status check. To only report failures for stability, set <code>minimumReleaseAge</code> to <code>\"failed\"</code> if you only care about the red/pending status.</p> Example: always set artifacts check, skip merge confidence<pre><code>{\n  \"statusCheckWhen\": {\n    \"artifactError\": \"always\",\n    \"mergeConfidence\": \"never\"\n  }\n}\n</code></pre>"},{"location":"configuration-options/#stopupdatinglabel","title":"<code>stopUpdatingLabel</code>","text":"<p>Label to make Renovate stop updating a PR.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string default <code>\"stop-updating\"</code> supportedPlatforms azure, forgejo, gerrit, gitea, github, gitlab cli <code>--stop-updating-label</code> env <code>RENOVATE_STOP_UPDATING_LABEL</code> <p>This feature only works on supported platforms, check the table above.</p> <p>If you want Renovate to stop updating a PR, you can apply a label to the PR. By default, Renovate listens to the label: <code>\"stop-updating\"</code>.</p> <p>You can set your own label name with the <code>\"stopUpdatingLabel\"</code> field:</p> <pre><code>{\n  \"stopUpdatingLabel\": \"take-a-break-renovate\"\n}\n</code></pre>"},{"location":"configuration-options/#suppressnotifications","title":"<code>suppressNotifications</code>","text":"<p>Options to suppress various types of warnings and other notifications.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type array subType string allowedValues <pre><code>[\n  \"artifactErrors\",\n  \"branchAutomergeFailure\",\n  \"configErrorIssue\",\n  \"dependencyLookupWarnings\",\n  \"lockFileErrors\",\n  \"missingCredentialsError\",\n  \"onboardingClose\",\n  \"prEditedNotification\",\n  \"prIgnoreNotification\"\n]\n</code></pre> mergeable true default <code>[]</code> <p>Use this field to suppress various types of warnings and other notifications from Renovate. For example:</p> <pre><code>{\n  \"suppressNotifications\": [\"prIgnoreNotification\"]\n}\n</code></pre> <p>The above config will suppress the comment which is added to a PR whenever you close a PR unmerged.</p>"},{"location":"configuration-options/#timezone","title":"<code>timezone</code>","text":"<p>Must conform to IANA Time Zone format.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type string cli <code>--timezone</code> env <code>RENOVATE_TIMEZONE</code> default <code>null</code> <p>We recommend that you only configure the <code>timezone</code> option if both of these are true:</p> <ul> <li>you want to use the <code>schedule</code> feature</li> <li>and you want Renovate to evaluate the <code>schedule</code> in your timezone</li> </ul> <p>Please see the above link for valid timezone names.</p>"},{"location":"configuration-options/#toolsettings","title":"<code>toolSettings</code>","text":"<p>Tool specific configuration. Global self-hosted configuration takes precedence.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type object default <pre><code>{\"jvmMaxMemory\": 512, \"jvmMemory\": 512}\n</code></pre> env <code>RENOVATE_TOOL_SETTINGS</code> <p>When Renovate updates a dependency and needs to invoke processes leveraging Java, for example Gradle for the <code>gradle</code> or the <code>gradle-wrapper</code> managers, the repository's Gradle Wrapper will be invoked, if present.</p> <p>The JVM heap size for the Java invocations is 512m by default. This can be overridden using the following options.</p> <p>This option can be used on the repository level and in the Renovate configuration using the following options.</p> <p>Note</p> <p>The JVM memory settings specified in the global self-hosted configuration set by the administrator in <code>toolSettings.jvmMaxMemory</code> limits the memory settings for all repositories. The default limit for all repositories is 512m.</p> <p>Note</p> <p>The JVM memory settings are considered for the <code>gradle</code> and <code>gradle-wrapper</code> manager.</p>"},{"location":"configuration-options/#toolsettingsjvmmaxmemory","title":"<code>toolSettings.jvmMaxMemory</code>","text":"<p>Maximum JVM memory in MB to use for updates that use a Java VM, like the Gradle Wrapper, defaults to 512. Repo configuration for this value will be ignored if it exceeds the global configuration for <code>toolSettings.jvmMaxMemory</code></p> Name Value type integer parents <code>toolSettings</code> supportedManagers gradle-wrapper <p>Maximum heap size in MB for Java VMs. Defaults to <code>512</code> for both the repository level and self-hosted configuration.</p> <p>To allow repositories to use more than 512m of heap during any invocations of the Gradle Wrapper, configure the <code>jvmMaxMemory</code> option in the <code>toolSettings.jvmMaxMemory</code>.</p>"},{"location":"configuration-options/#toolsettingsjvmmemory","title":"<code>toolSettings.jvmMemory</code>","text":"<p>Initial JVM memory in MB to use for updates that use a Java VM, like the Gradle Wrapper, defaults to <code>jvmMaxMemory</code>. Repo configuration for this value will be ignored if it exceeds the global configuration for <code>toolSettings.jvmMaxMemory</code></p> Name Value type integer parents <code>toolSettings</code> supportedManagers gradle-wrapper <p>Initial heap size in MB for Java VMs. Must be less than or equal to <code>jvmMaxMemory</code>. Defaults to <code>jvmMaxMemory</code>.</p>"},{"location":"configuration-options/#toolsettingsnodemaxmemory","title":"<code>toolSettings.nodeMaxMemory</code>","text":"<p>Maximum memory in MiB for Node child processes invoked by Renovate. If unset, the Node process will automagically determine the memory limit to use. Repo configuration for this value will be ignored if it exceeds the global configuration for <code>toolSettings.nodeMaxMemory</code></p> Name Value type integer parents <code>toolSettings</code> supportedManagers npm <p>Note</p> <p>This does not apply to every Node process created by Renovate, only the managers noted above.</p>"},{"location":"configuration-options/#updateinternaldeps","title":"<code>updateInternalDeps</code>","text":"<p>Whether to update internal dep versions in a monorepo. Works on Yarn Workspaces.</p> Name Value scopes repo, manager type boolean default <code>false</code> supportedManagers npm cli <code>--update-internal-deps</code> env <code>RENOVATE_UPDATE_INTERNAL_DEPS</code> <p>Renovate defaults to skipping any internal package dependencies within monorepos. In such case dependency versions won't be updated by Renovate.</p> <p>To opt in to letting Renovate update internal package versions normally, set this configuration option to true.</p>"},{"location":"configuration-options/#updatenotscheduled","title":"<code>updateNotScheduled</code>","text":"<p>Whether to update branches when not scheduled. Renovate will not create branches outside of the schedule.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type boolean default <code>true</code> cli <code>--update-not-scheduled</code> env <code>RENOVATE_UPDATE_NOT_SCHEDULED</code> <p>When schedules are in use, it generally means \"no updates\". However there are cases where updates might be desirable - e.g. if you have configured <code>prCreation=not-pending</code>, or you have <code>rebaseWhen=behind-base-branch</code> and the base branch is updated so you want Renovate PRs to be rebased.</p> <p>This defaults to <code>true</code>, meaning that Renovate will perform certain \"desirable\" updates to existing PRs even when outside of schedule. If you wish to disable all updates outside of scheduled hours then configure this field to <code>false</code>.</p>"},{"location":"configuration-options/#updatepinneddependencies","title":"<code>updatePinnedDependencies</code>","text":"<p>Whether to update pinned (single version) dependencies or not.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type boolean default <code>true</code> cli <code>--update-pinned-dependencies</code> env <code>RENOVATE_UPDATE_PINNED_DEPENDENCIES</code> <p>By default, Renovate will try to update all detected dependencies, regardless of whether they are defined using pinned single versions (e.g. <code>1.2.3</code>) or constraints/ranges (e.g. (<code>^1.2.3</code>). You can set this option to <code>false</code> if you wish to disable updating for pinned (single version) dependencies specifically.</p>"},{"location":"configuration-options/#usebasebranchconfig","title":"<code>useBaseBranchConfig</code>","text":"<p>Whether to read configuration from base branches instead of only the default branch.</p> Name Value scopes repo type string allowedValues <pre><code>[\"merge\", \"none\"]\n</code></pre> default <code>\"none\"</code> cli <code>--use-base-branch-config</code> env <code>RENOVATE_USE_BASE_BRANCH_CONFIG</code> <p>By default, Renovate will read config file from the default branch only and will ignore any config files in base branches. You can configure <code>useBaseBranchConfig=merge</code> to instruct Renovate to merge the config from each base branch over the top of the config in the default branch.</p> <p>The config file name in the base branch must be the same as in the default branch and cannot be <code>package.json</code>. This scenario may be useful for testing the config changes in base branches instantly.</p>"},{"location":"configuration-options/#userstrings","title":"<code>userStrings</code>","text":"<p>User-facing strings for the Renovate comment when a PR is closed.</p> Name Value scopes repo, packageRule, manager, updateType, vulnerabilityAlert, group type object freeChoice true default <pre><code>{\n  \"ignoreTopic\": \"Renovate Ignore Notification\",\n  \"ignoreMajor\": \"Because you closed this PR without merging, Renovate will ignore this update. You will not get PRs for *any* future `{{{newMajor}}}.x` releases. But if you manually upgrade to `{{{newMajor}}}.x` then Renovate will re-enable `minor` and `patch` updates automatically.\",\n  \"ignoreDigest\": \"Because you closed this PR without merging, Renovate will ignore this update. You will not get PRs for the `{{{depName}}}` `{{{newDigestShort}}}` update again.\",\n  \"ignoreOther\": \"Because you closed this PR without merging, Renovate will ignore this update (`{{{newValue}}}`). You will get a PR once a newer version is released. To ignore this dependency forever, add it to the `ignoreDeps` array of your Renovate config.\",\n  \"artifactErrorWarning\": \"You probably do not want to merge this PR as-is.\"\n}\n</code></pre> cli <code>--user-strings</code> env <code>RENOVATE_USER_STRINGS</code> <p>When a PR is closed, Renovate posts a comment to let users know that future updates will be ignored. If you want, you can change the text in the comment with the <code>userStrings</code> config option.</p> <p>You can edit these user-facing strings:</p> <ul> <li><code>artifactErrorWarning</code>: Text of the PR comment when artifact errors occur during updates.</li> <li><code>ignoreDigest</code>: Text of the PR comment for digest upgrades.</li> <li><code>ignoreMajor</code>: Text of the PR comment for major upgrades.</li> <li><code>ignoreOther</code>: Text of the PR comment for other (neither digest nor major) upgrades.</li> <li><code>ignoreTopic</code>: Topic of the PR comment.</li> </ul> <p>For example:</p> <pre><code>{\n  \"userStrings\": {\n    \"artifactErrorWarning\": \"Custom text for artifact errors.\",\n    \"ignoreTopic\": \"Custom topic for PR comment\",\n    \"ignoreMajor\": \"Custom text for major upgrades.\",\n    \"ignoreDigest\": \"Custom text for digest upgrades.\",\n    \"ignoreOther\": \"Custom text for other upgrades.\"\n  }\n}\n</code></pre>"},{"location":"configuration-options/#versioncompatibility","title":"<code>versionCompatibility</code>","text":"<p>A regex (<code>re2</code>) with named capture groups to show how version and compatibility are split from a raw version string.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type string format regex default <code>null</code> <p>This option is used for advanced use cases where the version string embeds more data than just the version. It's typically used with docker and tags datasources.</p> <p>Here are two examples:</p> <ul> <li>The image tag <code>ghcr.io/umami-software/umami:postgresql-v1.37.0</code> embeds text like <code>postgresql-</code> as a prefix to the actual version to differentiate different DB types.</li> <li>Docker image tags like <code>node:18.10.0-alpine</code> embed the base image as a suffix to the version.</li> </ul> <p>Here is an example of solving these types of cases:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"docker\"],\n      \"matchPackageNames\": [\"ghcr.io/umami-software/umami\"],\n      \"versionCompatibility\": \"^(?&lt;compatibility&gt;.*)-(?&lt;version&gt;.*)$\",\n      \"versioning\": \"semver\"\n    },\n    {\n      \"matchDatasources\": [\"docker\"],\n      \"matchPackageNames\": [\"node\"],\n      \"versionCompatibility\": \"^(?&lt;version&gt;[^-]+)(?&lt;compatibility&gt;-.*)?$\",\n      \"versioning\": \"node\"\n    }\n  ]\n}\n</code></pre> <p>This feature is most useful when the <code>currentValue</code> is a version and not a range/constraint.</p> <p>This feature can be used in combination with <code>extractVersion</code> although that's likely only a rare edge case. When combined, <code>extractVersion</code> is applied to datasource results first, and then <code>versionCompatibility</code>. <code>extractVersion</code> should be used when the raw version string returned by the <code>datasource</code> contains extra details (such as a <code>v</code> prefix) when compared to the value/version used within the repository.</p> <p>During the lookup phase, Renovate evaluates the <code>versionCompatibility</code> regex against the <code>currentValue</code> string. If there is a match, the version part is stored internally temporarily as <code>compareValue</code> and the compatibility part stored as <code>currentCompatibility</code>. Storing <code>currentCompatibility</code> allows Renovate to reuse this value later to filter for new versions with the same compatibility. Renovate applies this compatibility check to datasource lookup results by passing both the <code>versionCompatibility</code> and <code>currentCompatibility</code> strings to a filter.</p> <p>For a new version to be allowed, it must:</p> <ul> <li>Satisfy the <code>versionCompatibility</code> regex, and</li> <li>Have the same <code>compatibility</code> part as the <code>currentValue</code></li> </ul> <p>At this point, Renovate's core lookup logic is comparing versions to versions, and ignoring compatibility strings like <code>-jre8</code>. Finally, once updates are decided, Renovate restores the compatibility part to the <code>newValue</code> result.</p>"},{"location":"configuration-options/#versioning","title":"<code>versioning</code>","text":"<p>Versioning to use for filtering and comparisons.</p> Name Value scopes repo, packageRule, manager, vulnerabilityAlert type string allowedValues <pre><code>[\n  \"apk\",\n  \"aws-eks-addon\",\n  \"aws-machine-image\",\n  \"azure-rest-api\",\n  \"bazel-module\",\n  \"cargo\",\n  \"composer\",\n  \"conan\",\n  \"conda\",\n  \"deb\",\n  \"debian\",\n  \"deno\",\n  \"devbox\",\n  \"docker\",\n  \"elm\",\n  \"exact\",\n  \"git\",\n  \"github-actions\",\n  \"glasskube\",\n  \"go-mod-directive\",\n  \"gomod\",\n  \"gradle\",\n  \"hashicorp\",\n  \"helm\",\n  \"hermit\",\n  \"hex\",\n  \"ivy\",\n  \"julia\",\n  \"kubernetes-api\",\n  \"lambda-node\",\n  \"loose\",\n  \"maven\",\n  \"nixpkgs\",\n  \"node\",\n  \"npm\",\n  \"nuget\",\n  \"paket\",\n  \"pep440\",\n  \"perl\",\n  \"poetry\",\n  \"pvp\",\n  \"python\",\n  \"redhat\",\n  \"regex\",\n  \"rez\",\n  \"rpm\",\n  \"ruby\",\n  \"rust-release-channel\",\n  \"same-major\",\n  \"semver\",\n  \"semver-coerced\",\n  \"semver-partial\",\n  \"swift\",\n  \"ubuntu\",\n  \"unity3d\",\n  \"unity3d-packages\",\n  \"vcpkg\"\n]\n</code></pre> previouslyKnownAs <pre><code>[\"versionScheme\"]\n</code></pre> default <code>null</code> <p>Usually, each language or package manager has a specific type of \"versioning\": JavaScript uses npm's SemVer implementation, Python uses pep440, etc.</p> <p>Renovate also uses custom versioning, like <code>\"docker\"</code> to address the most common way people tag versions using Docker, and <code>\"loose\"</code> as a fallback that tries SemVer first. Otherwise Renovate does its best to sort and compare.</p> <p>By exposing <code>versioning</code> to config, you can override the default versioning for a package manager if needed. We do not recommend overriding the default versioning, but there are some cases such as Docker or Gradle where versioning is not strictly defined and you may need to specify the versioning type per-package.</p> <p>Renovate supports 4-part versions (1.2.3.4) in full for the NuGet package manager. Other managers can use the <code>\"loose\"</code> versioning fallback: the first 3 parts are used as the version, all trailing parts are used for alphanumeric sorting.</p> <p>A key characteristic of the <code>\"docker\"</code> versioning is that it attempts to preserve the precision of the current version string. For example, if your current version has two parts (e.g., 5.6), Renovate will propose updates that also have two parts (e.g., 5.7), rather than a three-part SemVer equivalent (e.g., 5.7.0).</p> <p>Example Use Case: \"Floating Patch Versions\" using 2 digits versioning</p> <p>You may want to use a 2-part version like 5.6 to indicate the minor version while automatically receiving the latest patch updates (a \"floating patch\"). At the same time, you still want Renovate to create merge requests for minor or major updates like 5.7 or 6.2. The default semver versioning would update 5.6 to a 3-part version like 5.6.1, which would break the floating patch behavior.</p> <p>In the below <code>renovate.json</code> extract example, Renovate will use the <code>docker</code> versioning for the <code>.gitlab-ci.yml</code> file, so you can pin the minor version while still receiving the latest patch updates.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchFileNames\": [\".gitlab-ci.yml\"],\n      \"versioning\": \"docker\"\n    }\n  ]\n}\n</code></pre> <p>When using this strategy, make sure that the package you're referencing does support 2-part versions, e.g. that it has a version like <code>5.6</code> available in the registry in addition to <code>5.6.1</code> or <code>5.6.2</code>.</p>"},{"location":"configuration-options/#vulnerabilityalerts","title":"<code>vulnerabilityAlerts</code>","text":"<p>Config to apply when a PR is needed due to a vulnerability in the existing package version.</p> Name Value scopes repo type object default <pre><code>{\n  \"groupName\": null,\n  \"schedule\": [],\n  \"dependencyDashboardApproval\": false,\n  \"minimumReleaseAge\": null,\n  \"rangeStrategy\": \"update-lockfile\",\n  \"commitMessageSuffix\": \"[SECURITY]\",\n  \"branchTopic\": \"{{{datasource}}}-{{{depNameSanitized}}}-vulnerability\",\n  \"prCreation\": \"immediate\",\n  \"vulnerabilityFixStrategy\": \"lowest\",\n  \"prConcurrentLimit\": 0\n}\n</code></pre> mergeable true supportedPlatforms github <p>Renovate can read GitHub's Vulnerability Alerts to customize its Pull Requests. For this to work, you must enable the Dependency graph, and Dependabot alerts. Follow these steps:</p> <ol> <li>While logged in to GitHub, navigate to your repository</li> <li>Select the \"Settings\" tab</li> <li>Select \"Advanced Security\" in the sidebar</li> <li>Enable the \"Dependency graph\"</li> <li>Enable \"Dependabot alerts\"</li> <li>If you're running Renovate in app mode: make sure the app has <code>read</code> permissions for \"Dependabot alerts\".    If you're the account administrator, browse to the app (for example the Mend Renovate App), select \"Configure\", and then scroll down to the \"Permissions\" section and make sure that <code>read</code> access to \"Dependabot alerts\" is mentioned</li> </ol> <p>Once the above conditions are met, and you got one or more vulnerability alerts from GitHub for this repository, then Renovate tries to raise fix PRs.</p> <p>You may use the <code>vulnerabilityAlerts</code> configuration object to customize vulnerability-fix PRs.</p> Setting a custom label and assignee<pre><code>{\n  \"vulnerabilityAlerts\": {\n    \"labels\": [\"security\"],\n    \"automerge\": true,\n    \"assignees\": [\"@renovate-tests\"]\n  }\n}\n</code></pre> <p>Warning</p> <p>There's a small chance that a wrong vulnerability alert results in a flapping/looping vulnerability fix. If you allow Renovate to <code>automerge</code> vulnerability fixes, please check if the automerged fix is correct.</p> <p>Note</p> <p>By default, when Renovate creates a <code>vulnerabilityAlerts</code> PR, it ignores settings like <code>branchConcurrentLimit</code>, <code>commitHourlyLimit</code>, <code>prConcurrentLimit</code>, <code>prHourlyLimit</code>, or <code>schedule</code>. This means that Renovate always tries to create a <code>vulnerabilityAlerts</code> PR. In short: vulnerability alerts \"skip the line\".</p> <p>Note</p> <p>Some managers disable certain dependencies by default, such as <code>indirect</code> Go modules or Gradle <code>strictly</code> constraints. Renovate still raises vulnerability-fix PRs for those dependencies, unless you disable them yourself with a <code>packageRules</code> entry that sets <code>enabled=false</code>.</p> <p>If you get many alerts at once, for example when you onboard a repository which was not using Renovate before, then set <code>prConcurrentLimit</code> or <code>branchConcurrentLimit</code> inside the <code>vulnerabilityAlerts</code> object. Vulnerability fixes get their own budget, they do not take a share of the repository-wide one:</p> Allowing up to 5 vulnerability fix PRs on top of 5 regular PRs<pre><code>{\n  \"prConcurrentLimit\": 5,\n  \"vulnerabilityAlerts\": {\n    \"prConcurrentLimit\": 5\n  }\n}\n</code></pre> <p>With the config above Renovate creates at most 10 open PRs: 5 for regular updates, plus 5 for vulnerability fixes. The default is <code>0</code>, which means \"no limit\", so vulnerability alerts keep skipping the line until you set a limit yourself. You do not need to set <code>branchConcurrentLimit</code> as well, because its <code>null</code> default already means \"inherit <code>prConcurrentLimit</code>\". These limits also apply to updates that a <code>packageRules</code> entry marks with <code>isVulnerabilityAlert=true</code>.</p> <p>Note</p> <p>Only the concurrent limits can be set this way. Renovate always ignores <code>commitHourlyLimit</code>, <code>prHourlyLimit</code>, <code>prCommitsPerRunLimit</code> and <code>schedule</code> for vulnerability alerts, you can not override this.</p> <p>To disable the vulnerability alerts feature, set <code>enabled=false</code> in a <code>vulnerabilityAlerts</code> config object, like this:</p> Disabling vulnerability alerts<pre><code>{\n  \"vulnerabilityAlerts\": {\n    \"enabled\": false\n  }\n}\n</code></pre> <p>Note</p> <p>If you want to raise only vulnerability fix PRs, you may use the <code>security:only-security-updates</code> preset.</p>"},{"location":"configuration-options/#vulnerabilityalertsvulnerabilityfixstrategy","title":"<code>vulnerabilityAlerts.vulnerabilityFixStrategy</code>","text":"<p>Strategy to use when fixing vulnerabilities. <code>lowest</code> will propose the earliest version with a fix, <code>highest</code> will always pick the latest version.</p> Name Value type string allowedValues <pre><code>[\"lowest\", \"highest\"]\n</code></pre> default <code>\"lowest\"</code> parents <code>vulnerabilityAlerts</code> cli <code>--vulnerability-fix-strategy</code> env <code>RENOVATE_VULNERABILITY_FIX_STRATEGY</code> <p>When a vulnerability fix is available, Renovate will default to picking the lowest fixed version (<code>vulnerabilityFixStrategy=lowest</code>). For example, if the current version is <code>1.0.0</code>, and a vulnerability is fixed in <code>1.1.0</code>, while the latest version is <code>1.2.0</code>, then Renovate will propose an update to <code>1.1.0</code> as the vulnerability fix.</p> <p>If <code>vulnerabilityFixStrategy=highest</code> is configured then Renovate will use its normal strategy for picking upgrades, e.g. in the above example it will propose an update to <code>1.2.0</code> to fix the vulnerability.</p> Setting vulnerabilityFixStrategy to highest<pre><code>{\n  \"vulnerabilityAlerts\": {\n    \"vulnerabilityFixStrategy\": \"highest\"\n  }\n}\n</code></pre>"},{"location":"configuration-templates/","title":"Config Template Editing","text":"<p>This document describes how you can edit branch names, commit messages, PR titles and PR content.</p>"},{"location":"configuration-templates/#branch-name","title":"Branch Name","text":"<p>The branch name is very important for Renovate because it helps determine \"grouping\" of updates, and also makes it efficient when an existing PR needs to be updated when a newer version of a package is released. If you change the <code>branchPrefix</code> while you have ignored some upgrades (closed PR without merging), you might get a duplicate PR after the new <code>branchPrefix</code> setting is picked up by Renovate.</p> <p><code>branchName</code> default value is <code>{{{branchPrefix}}}{{{additionalBranchPrefix}}}{{{branchTopic}}}</code>.</p> <p>The most common branch name you will see looks like this: <code>renovate/react-18.x</code>. In this example, the <code>branchPrefix</code> is the default <code>renovate/</code>, <code>additionalBranchPrefix</code> is empty, and <code>branchTopic</code> is <code>react-18.x</code>.</p> <p>Most users will be happy with the default <code>branchPrefix</code> of <code>renovate/</code>, but you can change this if you don't like the default. Say you don't want the forward slashes, in that case you would use <code>renovate-</code> as your <code>branchPrefix</code>. The onboarding PR will always use <code>renovate/configure</code>.</p> <p><code>additionalBranchPrefix</code> is optional and by default is empty.</p> <p><code>branchTopic</code> depends on the package manager and upgrade type, so you will see a lot of variety. This is probably a setting you want to change yourself. Be careful, and consider creating a new \"config help\" post at the discussions tab in the Renovate repository to get help from the Renovate team with your config.</p>"},{"location":"configuration-templates/#commit-message","title":"Commit Message","text":"<p>Renovate uses one commit per branch. The <code>commitMessage</code> reflects the contents of the branch and is usually the same as the PR title.</p> <p><code>commitMessage</code> has a default value of <code>{{{commitMessagePrefix}}} {{{commitMessageAction}}} {{{commitMessageTopic}}} {{{commitMessageExtra}}} {{{commitMessageSuffix}}}</code>, with the intention that you only edit some of those subcomponents.</p> <p>You usually don't need to edit <code>commitMessagePrefix</code>, this option is used by Renovate if it needs to add a prefix to conform to the Semantic Commit convention. Avoid editing the commit message, unless you know what you're doing.</p> <p><code>commitMessageAction</code> is usually one word, like 'Update', 'Pin', 'Refresh', etc. You're probably fine leaving this setting alone, though you can change it. e.g. if you prefer that Renovate uses the term 'Upgrade' instead of 'Update' then you could configure <code>\"commitMessageAction\": \"Upgrade\"</code>.</p> <p><code>commitMessageTopic</code> is usually two to three words that show what is being updated. e.g. it might be <code>dependency react</code> or <code>Docker image ubuntu</code>. You may want to edit this. If you think your new <code>commitMessageTopic</code> is helpful for others, please open a PR.</p> <p><code>commitMessageExtra</code> refers to the version being updated to. e.g. <code>to v18</code> for a major upgrade, or <code>to v18.0.2</code> for a patch update. It can be empty in some cases, like if the action/topic doesn't change a package version, e.g. <code>Pin Docker digests</code>.</p> <p><code>commitMessageSuffix</code> defaults to empty but is currently used in two cases:</p> <ul> <li>Differentiating major from non-major groups</li> <li>Differentiating between PRs from different base branches, maybe for <code>major</code> updates you always want the PR to end with <code>(MAJOR)</code>, for instance</li> </ul> <p><code>commitBody</code> is used if you wish to add multi-line commit messages, such as for the <code>Signed-off-by</code> fields, or adding <code>[skip-ci]</code>, etc. It is appended to the generated <code>commitMessage</code>, separated by a newline.</p>"},{"location":"configuration-templates/#pr-title","title":"PR Title","text":"<p>Because commit messages match with the PR title, the PR title template defaults to <code>null</code> and inherits/copies the value from <code>commitMessage</code>. If you have a requirement where <code>prTitle</code> should be different from <code>commitMessage</code>, then please raise a feature request for discussion.</p>"},{"location":"configuration-templates/#pr-body","title":"PR Body","text":"<p>You can change the PR body in the following ways:</p> <ul> <li>Change the entire layout/flow by using <code>prBodyTemplate</code> (we do not recommend this)</li> <li>Add a header by using <code>prHeader</code></li> <li>Add a footer by using <code>prFooter</code></li> <li>Add a note by using <code>prBodyNotes</code></li> <li>Edit the embedded table by using <code>prBodyDefinitions</code> and <code>prBodyColumns</code></li> </ul>"},{"location":"contributing-to-renovate/","title":"Contributing to Renovate","text":"<p>Thank you for thinking of contributing to Renovate! The <code>docs/development/</code> directory of the <code>renovatebot/renovate</code> repository has all the developer-facing documentation.</p>"},{"location":"contributing-to-renovate/#i-want-to-write-code","title":"I want to write code","text":""},{"location":"contributing-to-renovate/#read-this-first","title":"Read this first","text":"<ol> <li>Contributing guide</li> <li>Best practices</li> <li>Local Development or Remote Development</li> </ol>"},{"location":"contributing-to-renovate/#creatingediting-renovate-preset","title":"Creating/editing Renovate preset","text":"<ol> <li>Creating/editing Renovate presets</li> </ol>"},{"location":"contributing-to-renovate/#adding-a-new-package-manager","title":"Adding a new package manager","text":"<ol> <li>Adding a Package Manager</li> </ol>"},{"location":"contributing-to-renovate/#background-information","title":"Background information","text":"<ol> <li>Design Decisions</li> <li>Zod schema guideline</li> <li>Branches and commits behavior</li> <li>Configuration</li> <li>Static Data</li> <li>How to bump Renovate to next NodeJS LTS release</li> </ol>"},{"location":"contributing-to-renovate/#i-want-to-write-documentation","title":"I want to write documentation","text":"<p>Read the Contributing guide, and the Renovate style guide.</p>"},{"location":"contributing-to-renovate/#i-want-to-triage-incoming-discussions","title":"I want to triage incoming discussions","text":"<p>Start by reading:</p> <ol> <li>Contributing guide</li> <li>Triage guide</li> <li>Issue labeling</li> </ol> <p>You may need to direct a Renovate user to one of these pages:</p> <ol> <li>About minimal reproductions</li> <li>New package manager questionnaire</li> <li>Help Us Help You</li> </ol>"},{"location":"dependency-pinning/","title":"Should you Pin your JavaScript Dependencies?","text":"<p>Once you start using a tool/service like Renovate, probably the biggest decision you need to make is whether to \"pin\" your dependencies instead of using SemVer ranges. The answer is \"It's your choice\", but we can certainly make some generalizations/recommendations to help you.</p> <p>If you don't want to read the in-depth discussion, you can skip ahead to our recommendations in the \"So what's best?\" section.</p>"},{"location":"dependency-pinning/#what-is-dependency-pinning","title":"What is Dependency Pinning?","text":"<p>To ensure we're all talking about the same thing, it's important to define exactly what we mean by dependency \"pinning\".</p> <p>Historically, projects use SemVer ranges in their <code>package.json</code>. For instance, if you run <code>npm install foobar</code> you will see an entry like <code>\"foobar\": \"^1.1.0\"</code> added to your <code>package.json</code>. Verbosely, this means \"any foobar version greater than or equal to 1.1.0 but less than 2\". The project will automatically use <code>1.1.1</code> if it's released, or <code>1.2.0</code>, or <code>1.2.1</code>, etc - meaning you will get not only patch updates but also feature (minor) releases too.</p> <p>Another alternative is ranges like <code>\"foobar\": \"~1.1.0\"</code> which means \"any foobar version greater than or equal to 1.1.0 but less than 1.2\". This narrows the range to only patch updates to the 1.1 range.</p> <p>If instead you \"pin\" your dependencies rather than use ranges, it means you use exact entries like <code>\"foobar\": \"1.1.0\"</code> which means \"use only foobar version 1.1.0 and no other\".</p>"},{"location":"dependency-pinning/#why-use-ranges","title":"Why use ranges?","text":"<p>For projects of any type, the main reason to use ranges is so that you can \"automatically\" get updated releases - which may even include security fixes. By \"automatically\", we mean that any time you run <code>npm install</code> you will get the very latest version matching your SemVer - assuming you're not using a lock file, that is.</p>"},{"location":"dependency-pinning/#tilde-vs-caret","title":"Tilde vs Caret","text":"<p>If you're familiar with the theory of SemVer, you might think that you only need to use tilde ranges (e.g. <code>\"~1.1.0\"</code>) to get bug fixes, rather than caret ranges (e.g. <code>\"^1.1.0\"</code>). This is true in theory but not in practice. The reality is that for most projects, fixes are not \"backported\" to previous minor releases, and minor releases themselves may include fixes. So for example release <code>1.2.0</code> may include one new feature and one fix, so if you stick with <code>1.1.0</code> then you will miss out on the fix as there will never be a <code>1.1.1</code> once <code>1.2.0</code> is already released. This is the reality of most open source packages.</p>"},{"location":"dependency-pinning/#ranges-for-libraries","title":"Ranges for Libraries","text":"<p>A second reason for using ranges applies to \"libraries\" that are published as npm packages with the intention that they are used/<code>require()</code>'d by other packages. In this case, it is usually a bad idea to pin all your dependencies because it will introduce an unnecessarily narrow range (one release!) and cause most users of your package to bloat their <code>node_modules</code> with duplicates.</p> <p>For example, you might have pinned <code>foobar</code> to version <code>1.1.0</code> and another author pinned his/her <code>foobar</code> dependency to <code>1.2.2</code>. Any user of both your packages will end up with npm trying to install two separate versions of <code>foobar</code>, which might not even work. Even if both projects use a service like Renovate to keep their pinned dependencies up to date with the very latest versions, it's still not a good idea - there will always be times when one package has updated/released before the other one and they will be out of sync. e.g. there might be a space of 30 minutes where your package specifies foobar <code>1.1.0</code> and the other one specifies <code>1.1.1</code> and your joint downstream users end up with a duplicate.</p>"},{"location":"dependency-pinning/#why-pin-dependencies","title":"Why pin dependencies?","text":"<p>You mainly pin versions for certainty, and visibility. When you have a pinned version of each dependency in your <code>package.json</code>, you know exactly which version of each dependency is installed at any time. This benefits when upgrading versions as well as when rolling back in case of problems.</p> <p>Note</p> <p>We'll cover lock files later, don't worry.</p>"},{"location":"dependency-pinning/#upgrading-pinned-versions","title":"Upgrading pinned versions","text":"<p>Let's say that a \"faulty\" version <code>1.2.0</code> of <code>foobar</code> is released and it breaks one of your tests.</p> <p>If you were using default caret SemVer ranges, then your <code>main</code> branch is now \"broken\" because its <code>package.json</code> says that any version 1.x above 1.1.0 is acceptable, and npm will choose the latest (<code>1.2.0</code>). You would need to manually check and work out which dependency caused the failure (<code>foobar</code> may not have been the only dependency to have \"automatically\" upgraded since the last time your tests passed) and then you would need to pin the dependency yourself to stop <code>npm</code> installing <code>1.2.0</code>.</p> <p>Consider the same situation if instead you were pinning dependency versions. Your <code>main</code> branch would not be broken because it's pinned to <code>foobar@1.1.0</code> - instead you'd have a Pull Request for upgrading to <code>foobar@1.2.0</code> which would fail. You'd know not to merge it and can wait for <code>foobar@1.2.1</code> or later when it's fixed. By pinning dependencies you know exactly what you're running and you know exactly what failed.</p> <p>Now consider a similar theoretical scenario where <code>foobar@1.2.0</code> is faulty but it is not caught by any of your automated tests. This is more common and more dangerous.</p> <p>If you were using SemVer ranges then this new version of <code>foobar</code> will likely be deployed to production automatically one day, sometime after which you notice errors and realize you need to fix it. Like before, you need to manually work out which dependency caused it - assuming you guess correctly that it was a new dependency version at fault - and pin it manually by editing <code>package.json</code> one dependency at a time.</p> <p>Alternatively, if you were instead pinning <code>foobar</code> then you would get a PR for <code>foobar@1.2.0</code> which awaits your approval. So first of all, you can choose to read the changelogs and/or visually inspect the branch yourself before merging, hopefully saving you from pushing this faulty code to production.</p> <p>If you did not catch the fault before merging, you are still better off with a pinned version. If you discover something wrong in production, you can easily \"roll back\" commits in your development environment until you find which rollback fixes the problem. Then you can simply revert that commit (reversing <code>foobar@1.1.0</code> \u2192 <code>foobar@1.2.0</code>) and push that to <code>main</code>. When the next release of <code>foobar</code> comes out (e.g. <code>1.2.1</code>) you will be prompted with a new PR and hopefully inspect it carefully this time before merge!</p> <p>As you can see in the above, pinning dependencies makes your build more consistent and predictable as a developer.</p>"},{"location":"dependency-pinning/#downside-of-pinned-dependencies-upgrade-noise","title":"Downside of pinned dependencies - upgrade \"noise\"","text":"<p>The one major downside to your development workflow of pinning dependencies is the potential for increased \"noise\" in your repository. As mentioned above, you can expect to get Pull Requests whenever there is a new version of your dependencies available. Depending on how many repositories you maintain, and how many dependencies are in each, you may find this default approach to be overwhelming (e.g. waking up to 10 new Pull Requests each day).</p>"},{"location":"dependency-pinning/#reducing-the-noise-of-dependency-updates","title":"Reducing the \"noise\" of dependency updates","text":"<p>The increased volume of Pull Requests for upgrading dependencies may be considered by some to be undesirable \"noise\" in their day. To some extent this is simply a trade-off for having your dependencies pinned and predictable, but there are also ways you can reduce this noise while still gaining the majority of the benefits:</p>"},{"location":"dependency-pinning/#pull-request-automerging","title":"Pull Request automerging","text":"<p>There are some dependencies that either (a) don't have the potential to break something in production, or (b) are fully tested by your tests.</p> <p>For example, it's very hard for <code>eslint</code> to break anything in production. If your build/tests pass, then you are fine. Consider enabling automerge for all lint packages to save yourself the work of manually approving the update each time. In this case you might wake up to 5/10 of your overnight Pull Requests having already merged themselves.</p> <p>Another example of a good candidate for automerging might be a database driver like <code>node-postgres</code> (<code>pg</code> on npm), if you have 100% test coverage of your API. In that case if the <code>pg</code> package has a minor or patch update and passes all tests then you may as well merge it automatically if you were not going to do a manual inspection anyway.</p>"},{"location":"dependency-pinning/#branch-automerging","title":"Branch automerging","text":"<p>In the above suggestion of Pull Request automerging, you might still find it annoying if you get GitHub Notifications for every PR that is created and merged. In that case, you could set <code>automergeType</code> to <code>branch</code>, which means Renovate will:</p> <ul> <li>Create a new branch for testing</li> <li>Wait until after tests have completed</li> <li>Push the commit directly to <code>main</code> if tests pass, or</li> <li>Raise a PR only if tests failed</li> </ul> <p>With this approach, updates will be essentially \"silent\" - causing no notifications - but you will be able to see each commit on <code>main</code> of course.</p>"},{"location":"dependency-pinning/#scheduling","title":"Scheduling","text":"<p>Although it can feel satisfying to get updates \"immediately\" when they're available, the reality is that you usually don't need updates so frequently. And worse still, npm package versions that are less than 72 hours can be unpublished, which would really break your build if you've pinned to a version that no longer exists.</p> <p>So to reduce the interruptions of automated dependency updates, consider putting Renovate on a schedule, such as:</p> <ul> <li>Update only on weekends? This way you update packages at most once per week, and your CI build runners are likely to be idle anyway</li> <li>Update daily, but between midnight and 5am? This way developers aren't bothered by notifications when they're working, and you're keeping the build machines free for the developers</li> </ul> <p>To learn all about controlling Renovate's schedule, read the key concepts, scheduling docs.</p>"},{"location":"dependency-pinning/#grouping-related-packages","title":"Grouping related packages","text":"<p>Although it's good to isolate each dependency update for ease of troubleshooting, there are times when the extra noise isn't worth it, or when packages naturally belong together anyway (such as all <code>babel</code> packages). You can add a package rule in our Renovate configuration to group these together and you'll get one branch combined even if multiple packages have updates available.</p>"},{"location":"dependency-pinning/#pinning-dependencies-and-lock-files","title":"Pinning Dependencies and Lock Files","text":"<p>Since both <code>yarn</code> and <code>npm@5</code> both support lock files, it's a common question to ask \"Why should I pin dependencies if I'm already using a lock file?\". It's a good question!</p> <p></p> <p>Lock files are a great companion to SemVer ranges or pinning dependencies, because these files lock (pin) deeper into your dependency tree than you see in <code>package.json</code>.</p>"},{"location":"dependency-pinning/#what-a-lock-file-will-do-for-you","title":"What a lock file will do for you","text":"<p>When kept in sync with its associated <code>package.json</code>, a lock file will further lock down the exact dependencies and sub-dependencies that your project uses, so that everyone running <code>npm install</code> or <code>yarn install</code> will install the exact same dependencies as the person or bot that last updated the lock file.</p> <p>To reuse an earlier example, this means that you could have <code>foobar@^1.1.0</code> in your <code>package.json</code> and be locked to <code>1.1.0</code> in your lock file, so that when the broken <code>foobar@1.2.0</code> is released, nobody on the team installs it.</p>"},{"location":"dependency-pinning/#what-a-lock-file-doesnt-do-for-you","title":"What a lock file doesn't do for you","text":"<p>If a lock file gets out of sync with its <code>package.json</code>, it can no longer be guaranteed to lock anything, and the <code>package.json</code> will be the source of truth for installs.</p> <p>The lock file has only delayed the inevitable problem, and provides much less visibility than <code>package.json</code>, because it's not designed to be human readable and is quite dense.</p> <p></p> <p>If the <code>package.json</code> has a range, and a new in-range version is released that would break the build, then essentially your <code>package.json</code> is in a state of \"broken\", even if the lock file is still holding things together.</p> <p>The upside is that the lockfile will hold back <code>foobar</code> to <code>1.1.0</code> unless it's forced to upgrade, so the break is postponed. The downside is how you will discover the break eventually.</p> <p>The easiest case is if for some reason you need to upgrade <code>foobar</code>, e.g. for a new feature it has, so you might run something like <code>yarn upgrade foobar</code>. Then you might either discover the break during your development or when you push your new development to CI for testing. In this case, hopefully you'll guess it's <code>foobar</code> that broke it and not your own code.</p> <p>Alternatively, maybe someone thinks \"This lockfile is probably really out of date and might be missing some essential patches\" and decides to <code>yarn upgrade</code> the whole thing in one go. No doubt the diff will be full of green and red as many direct and indirect dependencies will have changed versions. Then it's pushed to CI for testing, fails, and you have to guess which of the changes caused it until you eventually narrow it down to <code>foobar</code>. This might require even manually looking through the lock file diffs line by line. Maybe dep <code>blahblah</code> also broke at the same time, to make it even harder.</p> <p>By ceding control of direct dependency versions to the lock file, you have lost the ability to know when things are updated. You also may be missing out on really important patches you're not even aware of, because they're \"in range\" yet locked back to vulnerable or buggy versions in the lock file.</p> <p>Reconsider the same scenario if <code>foobar</code> had instead been pinned to <code>1.1.0</code> in <code>package.json</code>. The (broken) upgrade to <code>1.2.0</code> would have been explicitly proposed to you via a Renovate PR, you would see the break, and know that the version is bad. Meanwhile you could be upgrading all the other essential fixes of other dependencies without worrying about <code>foobar</code>. You could even be running <code>yarn upgrade</code> regularly to be getting indirect package updates in the lockfile and seeing if everything still passes.</p> <p>So the lock file does not solve the same SemVer problems that pinning solves - but it compliments it. For this reason our usual recommendation is using a lock file regardless of whether you pin dependencies or not, and pinning even if you have a lock file.</p> <p>But you may also go ahead and configure however you want. Also, we're open to ideas for how to make lock file updates more \"visible\" too. e.g. are you interested in a Renovate feature where you get a lockfile-only PR any time a direct dependency gets an in-range update?</p>"},{"location":"dependency-pinning/#what-about-indirectsub-dependencies","title":"What about indirect/sub-dependencies?","text":"<p>A good argument made by @LinusU is:</p> <p>Pinning will only protect you against breakage in a, in many cases, small percentage of your packages. If you for example have installed Express and pinned it, you will only protect yourself against a bad Express release, it will not help with the 30 dependencies that Express has.</p> <p>Because of this, I personally think that pinning dependencies just creates a false sense of security, and that using a lock file is superior in every way.</p> <p>It is true that pinning applies only to direct dependencies, and \"indirect\" dependencies typically count for a lot more in total in your lockfile than direct. e.g. those 30 ones that Express relies on.</p> <p>Does pinning give you \"increased\" security? Undeniably. The question is not whether it does, but whether that increased security comes at a cost (e.g. \"noise\"). But Linus also points out that a false sense of security is a cost too.</p> <p>Don't forget that there is some form of transitive trust too. You need to pick your direct dependencies carefully, and which versions of them you use. Hopefully in doing that you pick dependencies partly for how well they look after their own dependencies and versions (e.g. do they have good enough test coverage, do they use something like Renovate to keep updated, etc?). So the reality is that even if 90% of the entries in your lock file are indirect dependencies, those are ones you have somewhat \"delegated\" responsibility for to your dependencies. e.g. I'd hope that Express are even better at watching their dependencies for breaks than I am, to use the example above.</p> <p>But certainly \"does it give a false sense of security\" is not a question we can really answer quantifiably.</p>"},{"location":"dependency-pinning/#so-whats-best","title":"So what's best?","text":"<p>We recommend:</p> <ol> <li>Any apps (web or Node.js) that aren't <code>require()</code>'d by other packages should pin all types of dependencies for greatest reliability/predictability</li> <li>Browser or dual browser/node.js libraries that are consumed/<code>required()</code>'d by others should keep using SemVer ranges for <code>dependencies</code> but can use pinned dependencies for <code>devDependencies</code></li> <li>Node.js-only libraries can consider pinning all dependencies, because application size/duplicate dependencies are not as much a concern in Node.js compared to the browser. Of course, don't do that if your library is a micro one likely to be consumed in disk-sensitive environments</li> <li>Use a lock file</li> </ol> <p>As noted earlier, when you pin dependencies then you will see an increase in the raw volume of dependency updates, compared to if you use ranges. If/when this starts bothering you, add Renovate rules to reduce the volume, such as scheduling updates, grouping them, or automerging \"safe\" ones.</p>"},{"location":"dependency-pinning/#references","title":"References","text":"<p>This is a \"living\" document and we plan to update it whenever we think of something new or someone makes a valid point we've missed or misunderstood.</p> <p>Updated 2018-01-19 after excellent feedback on lockfiles by @LinusU</p>"},{"location":"docker-build-process/","title":"How does Renovate's Docker image get built?","text":"<p>The Renovate CLI is distributed for use in a few ways, one of which is as a pre-built container.</p> <p>As part of this build process, there are two key variants of this:</p> <ul> <li>\"slim\" image (default)</li> <li>\"full\" image</li> </ul>"},{"location":"docker-build-process/#slim-image-default","title":"Slim image (default)","text":"<p>Renovate's \"slim\" image is recommended as the minimal set of installed tools on a given container to be able to run Renovate.</p> <p>It uses <code>binarySource=install</code> to dynamically install tools as they're needed. This keeps the base container quite lightweight (hence \"slim\") but requires outbound network access at runtime.</p> <p>It is possible to make the \"slim\" container even more lightweight by removing some of the tools and packages - for instance to reduce the attack surface, or reduce the size of the resulting image - but that is left as an exercise to the reader.</p>"},{"location":"docker-build-process/#full-image","title":"Full image","text":"<p>Renovate's \"full\" image is recommended for users who prefer to have most tools pre-installed, and not require any outbound access at runtime.</p> <p>It uses <code>binarySource=global</code> which only uses tools that are installed in the image.</p> <p>When using the \"full\" image, there are some tools and packages installed in the container that you may not be using. It is possible to remove these - for instance to reduce the attack surface, or reduce the size of the resulting image - but that is left as an exercise to the reader.</p>"},{"location":"docker-build-process/#build-process-flow","title":"Build process flow","text":"<p>Renovate leverages Containerbase, a project maintained by the same maintainers as the Renovate CLI project itself, which provides base images and utilities for managing dependencies.</p> <p>This leads to a release process that requires multiple different container releases to result in the Renovate container image being updated.</p> <p>The full flow can be seen below:</p> <pre><code>flowchart TD\n    Ubuntu               --&gt; ContainerbaseUbuntu\n    ContainerbaseUbuntu  --&gt; ContainerbaseBase\n    ContainerbaseBase    --&gt; RenovatebotBaseImage\n    RenovatebotBaseImage --&gt; RenovateSlim\n    RenovatebotBaseImage --&gt; RenovateFull\n\n    Ubuntu[&lt;code&gt;docker.io/library/ubuntu&lt;/code&gt;]\n    ContainerbaseUbuntu[&lt;a href=\"https://github.com/containerbase/ubuntu\"&gt;&lt;code&gt;ghcr.io/containerbase/ubuntu&lt;/code&gt;&lt;/a&gt;]\n    ContainerbaseBase[&lt;a href=\"https://github.com/containerbase/base\"&gt;&lt;code&gt;ghcr.io/containerbase/base&lt;/code&gt;&lt;/a&gt;]\n    RenovatebotBaseImage[&lt;a href=\"https://github.com/renovatebot/base-image\"&gt;&lt;code&gt;ghcr.io/renovatebot/base-image&lt;/code&gt;&lt;/a&gt;]\n    RenovateSlim[&lt;code&gt;ghcr.io/renovatebot/renovate&lt;/code&gt;&lt;br&gt;&lt;code&gt;docker.io/renovate/renovate&lt;/code&gt;]\n    RenovateFull[&lt;code&gt;ghcr.io/renovatebot/renovate:full&lt;/code&gt;&lt;br&gt;&lt;code&gt;docker.io/renovate/renovate:full&lt;/code&gt;]</code></pre>"},{"location":"docker-build-process/#tool-support","title":"Tool support","text":""},{"location":"docker-build-process/#adding-new-tools","title":"Adding new tools","text":"<p>If you, as a user, are looking to extend the tool support that Renovate has, for instance to install it via <code>constraints</code>, then you will need to request a new tool. Once raised, you can then work through the \"how to add a new tool\" documentation.</p> <p>This tool will have its support added in <code>containerbase/base</code>, to allow Containerbase's <code>install-tool</code> command-line tool to install the tool.</p> <p>Once <code>install-tool</code> support is implemented, the update to <code>ghcr.io/containerbase/base</code> will need to bubble up to the Renovate \"slim\" and \"full\" images before the tool can be used.</p>"},{"location":"docker-build-process/#changing-default-tools","title":"Changing default tools","text":"<p>If you, as a user, are looking to provide a tool installed by default (in the \"slim\" or \"full\" images), you will need to first make sure that the tool is supported (and if not, add it).</p> <p>To add it to the default images, the <code>renovatebot/base-image</code> image will need to be amended to add this tool.</p> <p>Note</p> <p>Installed-by-default-tools will generally only be allowed for the \"full\" image.</p>"},{"location":"docker-build-process/#building-the-docker-image-locally","title":"Building the Docker image locally","text":"<p>Renovate's Docker image can be built locally like so:</p> <pre><code>pnpm build\npnpm build:docker\n# or to customize the build\nenv OWNER=jamietanna pnpm build:docker build --platform linux/amd64 --version 0.0.0-local\n</code></pre>"},{"location":"docker/","title":"Docker","text":"<p>Renovate supports upgrading dependencies in various types of Docker definition files:</p> <ul> <li>Docker's <code>Dockerfile</code> files</li> <li>Docker Compose <code>docker-compose.yml</code>, <code>compose.yml</code> files</li> <li>Visual Studio Code dev containers and GitHub Codespaces images and features</li> <li>CircleCI config files</li> <li>Kubernetes manifest files</li> <li>Ansible configuration files</li> </ul>"},{"location":"docker/#how-it-works","title":"How It Works","text":"<ol> <li>Renovate searches in each repository for any files matching each manager's configured <code>managerFilePatterns</code></li> <li>Matching files are parsed, Renovate checks if the file(s) has any Docker image references (e.g. <code>FROM</code> lines in a <code>Dockerfile</code>)</li> <li>If the image tag in use \"looks\" like a version (e.g. <code>myimage:1</code>, <code>myimage:1.1</code>, <code>myimage:1.1.0</code>, <code>myimage:1-onbuild</code>) then Renovate checks the Docker registry for upgrades (e.g. from <code>myimage:1.1.0</code> to <code>myimage:1.2.0</code>)</li> </ol>"},{"location":"docker/#preservation-of-version-precision","title":"Preservation of Version Precision","text":"<p>By default, Renovate preserves the precision level specified in the Docker images. For example, if the existing image is pinned at <code>myimage:1.1</code> then Renovate only proposes upgrades to <code>myimage:1.2</code> or <code>myimage:1.3</code>. This means that you will not get upgrades to a more specific versions like <code>myimage:1.2.0</code> or <code>myimage:1.3.0</code>. Renovate does not yet support \"pinning\" an imprecise version to a precise version, e.g. from <code>myimage:1.2</code> to <code>myimage:1.2.0</code>, but it's a feature we'd like to work on one day.</p>"},{"location":"docker/#version-compatibility","title":"Version compatibility","text":"<p>Although suffixes in SemVer indicate pre-releases (e.g. <code>v1.2.0-alpha.2</code>), in Docker they typically indicate compatibility, e.g. <code>1.2.0-alpine</code>. By default Renovate assumes suffixes indicate compatibility, for this reason Renovate will not change any suffixes. Renovate will update <code>1.2.0-alpine</code> to <code>1.2.1-alpine</code> but never updates to <code>1.2.1</code> or <code>1.2.1-stretch</code> as that would change the suffix.</p> <p>If this behavior does not suit a particular package you have, Renovate allows you to customize the <code>versioning</code> scheme it uses. For example, you have a Docker image <code>foo/bar</code> that sticks to SemVer versioning. This means that you need to tell Renovate that suffixes indicate pre-release versions, and not compatibility.</p> <p>You could then use this <code>packageRules</code> array, to tell Renovate to use <code>semver</code> versioning for the <code>foo/bar</code> package:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"docker\"],\n      \"matchPackageNames\": [\"foo/bar\"],\n      \"versioning\": \"semver\"\n    }\n  ]\n}\n</code></pre> <p>Another example is the official <code>python</code> image, which follows <code>pep440</code> versioning.</p> Telling Renovate to use the pep440 versioning scheme<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"docker\"],\n      \"matchPackageNames\": [\"python\"],\n      \"versioning\": \"pep440\"\n    }\n  ]\n}\n</code></pre> <p>If traditional versioning doesn't work, try Renovate's built-in <code>loose</code> <code>versioning</code>. Renovate will perform a best-effort sort of the versions, regardless of whether they have letters or digits.</p> <p>If both the traditional versioning, and the <code>loose</code> versioning do not give the results you want, try the <code>regex</code> <code>versioning</code>. This approach uses regex capture group syntax to specify which part of the version string is major, minor, patch, pre-release, or compatibility. See the docs for <code>versioning</code> for documentation and examples of <code>regex</code> versioning in action.</p>"},{"location":"docker/#digest-pinning","title":"Digest Pinning","text":"<p>We recommend that you pin your Docker images to an exact digest. By pinning to a digest you make your Docker builds immutable, every time you do a <code>pull</code> you get the same content.</p> <p>If you work with dependencies in the JavaScript/npm ecosystem, you may be used to exact versions being immutable. For example, if you set a version like <code>2.0.1</code>, you and your colleagues always get the exact same \"code\".</p> <p>Docker's tags are not immutable versions, even if tags look like a version. You probably expect <code>myimage:1</code> and <code>myimage:1.2</code> to change over time, but you might incorrectly assume that <code>myimage:1.2.0</code> never changes. Although it probably shouldn't, the reality is that any Docker image tag can change content, and potentially break.</p> <p>By replacing Docker tags with Docker digests as the image's primary identifier you'll get immutable builds. Working with strings like <code>FROM node@sha256:d938c1761e3afbae9242848ffbb95b9cc1cb0a24d889f8bd955204d347a7266e</code> is hard. Luckily Renovate can update the digests for you.</p> <p>When pinning a digest, Renovate retains the Docker tag in the <code>FROM</code> line for readability, like this: <code>FROM node:14.15.1@sha256:d938c1761e3afbae9242848ffbb95b9cc1cb0a24d889f8bd955204d347a7266e</code>.</p>"},{"location":"docker/#digest-updating","title":"Digest Updating","text":"<p>If you follow our advice to replace a tag like <code>node:14</code> with a pinned digest like <code>node:14@sha256:d938c1761e3afbae9242848ffbb95b9cc1cb0a24d889f8bd955204d347a7266e</code>, you will get Renovate PRs whenever the <code>node:14</code> image is updated on Docker Hub.</p> <p>Previously this update would have been \"invisible\" to you - one day you pull code that represents <code>node:14.15.0</code> and the next day you pull code that represents <code>node:14.15.1</code>. But you can never be sure, especially as Docker caches. Maybe some of your colleagues, or worse still your build machine, are stuck on an older version with a security vulnerability.</p> <p>By pinning to a digest instead, you will get these updates via Pull Requests, or even committed directly to your repository if you enable branch automerge for convenience. This makes sure everyone on your team uses the latest versions.</p>"},{"location":"docker/#version-upgrading","title":"Version Upgrading","text":"<p>Renovate also supports upgrading versions in Docker tags, so from <code>myimage:1.2.0</code> to <code>myimage:1.2.1</code>, or from <code>myimage:1.2</code> to <code>myimage:1.3</code>. If a tag looks like a version, Renovate will upgrade it like a version.</p> <p>We recommend you use the <code>major.minor.patch</code> tagging scheme, so change <code>myimage:1</code> to <code>myimage:1.1.1</code> first. This way you can see the changes in Renovate PRs. You can see the difference between a PR that upgrades <code>myimage</code> from <code>1.1.1</code> to <code>1.1.2</code> and a PR that changes the contents of the version you already use (<code>1.1.1</code>).</p> <p>By default, Renovate will upgrade <code>major</code>, <code>minor</code> and <code>patch</code> versions. If you do not want <code>major</code> updates: add the preset <code>docker:disableMajor</code> to the <code>extends</code> array in your <code>renovate.json</code> file.</p> <p>Renovate has some Docker-specific intelligence when it comes to versions. For example:</p>"},{"location":"docker/#ubuntu-codenames","title":"Ubuntu codenames","text":"<p>Renovate understands Ubuntu release code names and will offer upgrades to the latest LTS release.</p> <p>You must only use the first term of the code name in lowercase. So use <code>noble</code> for the Noble Numbat release.</p> <p>For example, Renovate will offer to upgrade the following <code>Dockerfile</code> layer:</p> <pre><code>- FROM ubuntu:jammy\n+ FROM ubuntu:noble\n</code></pre>"},{"location":"docker/#debian-codenames","title":"Debian codenames","text":"<p>Renovate understands Debian release code names and rolling updates schedule and will offer upgrades to the latest stable release. For example from <code>debian:bullseye</code> to <code>debian:bookworm</code>.</p> <p>Renovate also supports dated container image versions for Debian, such as <code>debian:bookworm-20230816</code> or <code>debian:bullseye-20220101.2</code>. These are commonly used in Debian Docker images to pin to specific snapshots.</p> <p>The Debian codename must be in lowercase.</p> <p>For example, Renovate will offer to upgrade the following <code>Dockerfile</code> layer:</p> <pre><code>- FROM debian:bullseye\n+ FROM debian:bookworm\n</code></pre> <p>Or for dated versions:</p> <pre><code>- FROM debian:bookworm-20230816\n+ FROM debian:bookworm-20230901\n</code></pre>"},{"location":"docker/#configuringdisabling","title":"Configuring/Disabling","text":"<p>If you wish to make changes that apply to all Docker managers, then add them to the <code>docker</code> config object. This is not foolproof, because some managers like <code>circleci</code> and <code>ansible</code> support multiple datasources that do not inherit from the <code>docker</code> config object.</p> <p>If you wish to override Docker settings for one particular type of manager, use that manager's config object instead. For example, to disable digest updates for Docker Compose only but leave them for other managers like <code>Dockerfile</code>, you would use this:</p> <pre><code>{\n  \"docker-compose\": {\n    \"digest\": {\n      \"enabled\": false\n    }\n  }\n}\n</code></pre> <p>The following configuration options are applicable to Docker:</p>"},{"location":"docker/#disable-all-docker-renovation","title":"Disable all Docker Renovation","text":"<p>Add <code>\"docker:disable\"</code> to your <code>extends</code> array.</p>"},{"location":"docker/#disable-renovate-for-only-certain-dockerfiles","title":"Disable Renovate for only certain Dockerfiles","text":"<p>Add all paths to ignore into the <code>ignorePaths</code> configuration field. e.g.</p> <pre><code>{\n  \"extends\": [\"config:recommended\"],\n  \"ignorePaths\": [\"docker/old-files/\"]\n}\n</code></pre>"},{"location":"docker/#disable-docker-major-updates","title":"Disable Docker major updates","text":"<p>Add <code>\"docker:disableMajor\"</code> to your <code>extends</code> array.</p>"},{"location":"docker/#disable-digest-pinning","title":"Disable digest pinning","text":"<p>Add <code>\"default:pinDigestsDisabled\"</code> to your <code>extends</code> array.</p> <p>Note</p> <p>This preset only sets the global default for the digest pinning flag to <code>false</code>. If you have configured package rules that set <code>pinDigests</code> to <code>true</code>, those will still apply. This is also the case if you use the <code>docker:pinDigests</code> preset, which adds a package rule that sets <code>pinDigests</code> to <code>true</code> for all packages from the docker datasource.</p> <p>If you want to disable the <code>docker:pinDigests</code> preset (e.g. if you want to use <code>config:best-practices</code> but not have digest pinning enabled), ignore the preset like this:</p> <pre><code>{\n  \"extends\": [\"config:best-practices\"],\n  \"ignorePresets\": [\"docker:pinDigests\"]\n}\n</code></pre>"},{"location":"docker/#automerge-digest-updates","title":"Automerge digest updates","text":"<p>Add <code>\"default:automergeDigest\"</code> to your <code>extends</code> array. If you want Renovate to commit directly to your base branch without opening a PR first, add <code>\"default:automergeBranchPush\"</code> to the <code>extends</code> array.</p>"},{"location":"docker/#registry-authentication","title":"Registry authentication","text":"<p>There are many different registries, and many ways to authenticate to those registries. We will explain how to authenticate for the most common registries.</p>"},{"location":"docker/#docker-hub","title":"Docker Hub","text":"<p>Here is an example of configuring a Docker username/password for Docker Hub in <code>config.js</code>. The Docker Hub password is stored in a process environment variable.</p> config.js<pre><code>module.exports = {\n  hostRules: [\n    {\n      hostType: 'docker',\n      matchHost: 'docker.io',\n      username: '&lt;your-username&gt;',\n      password: process.env.DOCKER_HUB_PASSWORD,\n    },\n  ],\n};\n</code></pre> <p>You can add more host rules, read the <code>hostRules</code> documentation for more information.</p>"},{"location":"docker/#self-hosted-docker-registry","title":"Self-hosted Docker registry","text":"<p>Say you host some Docker images yourself, and use a password to access your self-hosted Docker images. In addition to self-hosting, you also pull images from Docker Hub, without a password. In this example you would configure a specific Docker host like this:</p> <pre><code>module.exports = {\n  hostRules: [\n    {\n      hostType: 'docker',\n      matchHost: 'your.host.io',\n      username: '&lt;your-username&gt;',\n      password: process.env.SELF_HOSTED_DOCKER_IMAGES_PASSWORD,\n    },\n  ],\n};\n</code></pre>"},{"location":"docker/#aws-ecr-amazon-web-services-elastic-container-registry","title":"AWS ECR (Amazon Web Services Elastic Container Registry)","text":""},{"location":"docker/#using-access-key-id-secret","title":"Using access key id &amp; secret","text":"<p>Renovate can authenticate with AWS ECR using AWS access key id &amp; secret as the username &amp; password, for example:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"hostType\": \"docker\",\n      \"matchHost\": \"12345612312.dkr.ecr.us-east-1.amazonaws.com\",\n      \"username\": \"AKIAABCDEFGHIJKLMNOPQ\",\n      \"encrypted\": {\n        \"password\": \"w...A\"\n      }\n    }\n  ]\n}\n</code></pre>"},{"location":"docker/#using-get-login-password","title":"Using <code>get-login-password</code>","text":"<p>Renovate can also authenticate with AWS ECR using the output from the <code>aws ecr get-login-password</code> command as outlined in the AWS documentation. To make use of this authentication mechanism, specify the username as <code>AWS</code>:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"hostType\": \"docker\",\n      \"matchHost\": \"12345612312.dkr.ecr.us-east-1.amazonaws.com\",\n      \"username\": \"AWS\",\n      \"encrypted\": {\n        \"password\": \"w...A\"\n      }\n    }\n  ]\n}\n</code></pre>"},{"location":"docker/#google-container-registry-google-artifact-registry","title":"Google Container Registry / Google Artifact Registry","text":""},{"location":"docker/#using-workload-identity","title":"Using Workload Identity","text":"<p>To let Renovate authenticate with Workload Identity, you must:</p> <ul> <li>Configure Workload Identity</li> <li>Give the Service Account the <code>artifactregistry.repositories.downloadArtifacts</code> permission</li> </ul>"},{"location":"docker/#with-application-default-credentials-self-hosted-only","title":"With Application Default Credentials (self-hosted only)","text":"<p>To let Renovate authenticate with ADC, you must:</p> <ul> <li>Configure ADC as normal</li> <li>Not provide a username, password or token</li> </ul> <p>Renovate will get the credentials with the <code>google-auth-library</code>.</p>"},{"location":"docker/#with-short-lived-access-token-github-actions-self-hosted-only","title":"With short-lived access token / GitHub Actions (self-hosted only)","text":"Example for Workload Identity plus Renovate host rules<pre><code>- name: authenticate to google cloud\n  id: auth\n  uses: google-github-actions/auth@v3.0.0\n  with:\n    token_format: 'access_token'\n    workload_identity_provider: ${{ env.WORKLOAD_IDENTITY_PROVIDER }}\n    service_account: ${{ env.SERVICE_ACCOUNT }}\n\n- name: renovate\n  uses: renovatebot/github-action@v46.3.10\n  env:\n    RENOVATE_HOST_RULES: |\n      [\n        {\n          matchHost: \"us-central1-docker.pkg.dev\",\n          hostType: \"docker\",\n          username: \"oauth2accesstoken\",\n          password: \"${{ steps.auth.outputs.access_token }}\"\n        }\n      ]\n  with:\n    token: ${{ secrets.RENOVATE_TOKEN }}\n    configurationFile: .github/renovate.json5\n</code></pre> <p>You can find a full GitHub Workflow example on the renovatebot/github-action repository.</p>"},{"location":"docker/#using-long-lived-service-account-credentials","title":"Using long-lived service account credentials","text":"<p>To access the Google Container Registry (deprecated) or the Google Artifact Registry, use the JSON service account with <code>Basic</code> authentication, and use the:</p> <ul> <li><code>_json_key</code> as username</li> <li>full Google Cloud Platform service account JSON as password</li> </ul> <p>To avoid JSON-in-JSON wrapping, which can cause problems, encode the JSON service account beforehand.</p> <p>Google Container Registry does not natively support <code>_json_key_base64</code> and a base64 encoded service account. Google Artifact Registry supports <code>_json_key_base64</code> and a base64 encoded service account natively. If all your dependencies are on the Google Artifact Registry, you can base64 encode and use the service account directly:</p> <ol> <li>Download your JSON service account and store it on your machine. Make sure that the service account has <code>read</code> (and only <code>read</code>) permissions to your artifacts</li> <li>Base64 encode the service account credentials by running <code>cat service-account.json | base64</code></li> <li> <p>Add the encoded service account to your configuration file</p> <ol> <li> <p>If you want to add it to your self-hosted configuration file:</p> <pre><code>```json\n{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"europe-docker.pkg.dev\",\n      \"username\": \"_json_key_base64\",\n      \"password\": \"&lt;base64 service account&gt;\"\n    }\n  ]\n}\n```\n</code></pre> </li> <li> <p>If you want to add it to your repository Renovate configuration file, encrypt it and then add it:</p> <pre><code>```json\n{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"europe-docker.pkg.dev\",\n      \"username\": \"_json_key_base64\",\n      \"encrypted\": {\n        \"password\": \"&lt;encrypted base64 service account&gt;\"\n      }\n    }\n  ]\n}\n```\n</code></pre> </li> </ol> </li> </ol> <p>If you have dependencies on Google Container Registry (and Artifact Registry) you need to use <code>_json_key</code> and a slightly different encoding:</p> <ol> <li>Download your JSON service account and store it on your machine. Make sure that the service account has <code>read</code> (and only <code>read</code>) permissions to your artifacts</li> <li> <p>Open the file and prefix the content with <code>_json_key:</code>. The file should look like this:</p> <pre><code>_json_key:{\n  \"type\": \"service_account\",\n  \"project_id\": \"sample-project\",\n  \"private_key_id\": \"5786ff7e615522b932a2a37b4a6f9645c4316dbd\",\n  \"private_key\": \"-----BEGIN PRIVATE KEY-----\\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDaOkxZut9uDUHV\\n...\\n/PWs0Wa2z5+IawMD7nO63+b6\\n-----END PRIVATE KEY-----\\n\",\n  \"client_email\": \"renovate-lookup@sample-project.iam.gserviceaccount.com\",\n  \"client_id\": \"115429165445403928973\",\n  \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\n  \"token_uri\": \"https://oauth2.googleapis.com/token\",\n  \"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",\n  \"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/renovate-lookup%40sample-project.iam.gserviceaccount.com\"\n}\n</code></pre> </li> <li> <p>Base64 encode the prefixed service account credentials by running <code>cat prefixed-service-account.json | base64</code></p> </li> <li> <p>Add the prefixed and encoded service account to your configuration file</p> <ol> <li> <p>If you want to add it to your self-hosted configuration file:</p> <pre><code>```json\n{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"europe-docker.pkg.dev\",\n      \"authType\": \"Basic\",\n      \"token\": \"&lt;base64 prefixed service account&gt;\"\n    }\n  ]\n}\n```\n</code></pre> </li> <li> <p>If you want to add it to your repository Renovate configuration file, encrypt it and then add it:</p> <pre><code>```json\n{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"europe-docker.pkg.dev\",\n      \"authType\": \"Basic\",\n      \"encrypted\": {\n        \"token\": \"&lt;encrypted base64 prefixed service account&gt;\"\n      }\n    }\n  ]\n}\n```\n</code></pre> </li> </ol> </li> </ol>"},{"location":"docker/#using-short-lived-access-token-gitlab-ci-google-cloud","title":"Using short-lived access token / Gitlab CI / Google Cloud","text":"<p>For this example, assume that you want to:</p> <ul> <li>Run the GitLab CI in the Google Cloud</li> <li>Store your Docker images in the Google Container Registry (GCR)</li> </ul>"},{"location":"docker/#accessing-the-google-container-registry","title":"Accessing the Google Container Registry","text":"<p>Accessing the GCR uses Bearer token based authentication.</p> <p>First, install the Google Cloud SDK. Then get the token by running: <code>gcloud auth print-access-token</code>.</p>"},{"location":"docker/#short-lived-gcr-bearer-tokens","title":"Short-lived GCR Bearer tokens","text":"<p>The GCR Bearer token expires after 60 minutes. This means you can not re-use the token in a later build.</p> <p>Instead, before Renovate starts in the GCR context, you must:</p> <ol> <li>Fetch the Google access token</li> <li>Inject the token into the <code>hostRules</code> configuration</li> </ol> <p>The following text explains one way to fetch the token, and inject it into Renovate.</p>"},{"location":"docker/#basic-approach","title":"Basic approach","text":"<p>The basic approach is:</p> <ol> <li>Create a custom image: fetch the GCR token, and inject the token into Renovate's <code>config.js</code> file</li> <li>Then run Renovate as one of the stages of your project</li> </ol>"},{"location":"docker/#independent-runs","title":"Independent runs","text":"<p>To make the run independent of any user, use a <code>Project Access Token</code>. Give the Project Access Token these scopes:</p> <ul> <li><code>api</code></li> <li><code>read_api</code></li> <li><code>write_repository</code></li> </ul> <p>Then use the Project Access Token as the <code>RENOVATE_TOKEN</code> variable for GitLab CI. For more (<code>gitlab-ci.yml</code>) configuration examples, see the <code>renovate-runner</code> repository on GitLab.</p>"},{"location":"docker/#create-a-custom-image","title":"Create a custom image","text":"<p>To access the token, you need a custom Renovate Docker image. Make sure to install the Google Cloud SDK into the custom image, as you need the <code>gcloud auth print-access-token</code> command later.</p> <p>For example:</p> <pre><code>FROM renovate/renovate:44.133.0\n# Include the \"Docker tip\" which you can find here https://cloud.google.com/sdk/docs/install\n# under \"Installation\" for \"Debian/Ubuntu\"\nRUN ...\n</code></pre>"},{"location":"docker/#accessing-the-google-container-registry-gcr","title":"Accessing the Google Container Registry (GCR)","text":"<p>Renovate needs the current Google Access Token to access the Google Container Registry (GCR). Here's an example of how to set that up:</p> <pre><code>hostRules: [\n  {\n    matchHost: 'eu.gcr.io',\n    token: 'MyReallySecretTokenThatExpiresAfter60Minutes',\n  },\n];\n</code></pre> <p>One way to give Renovate the short-lived Google Access Token is to:</p> <ol> <li>Write a script that generates a <code>config.js</code> file, with the token, in your <code>gitlab-ci.yml</code> file</li> <li>Run the <code>config.js</code> creation script just before you start Renovate</li> </ol> <p>For example:</p> <pre><code>script:\n  - 'echo \"module.exports = { hostRules: [ { matchHost: ''eu.gcr.io'', token: ''\"$(gcloud auth print-access-token)\"'' } ] };\" &gt; config.js'\n  - renovate $RENOVATE_EXTRA_FLAGS\n</code></pre>"},{"location":"environment-variable-handling/","title":"Environment Variable Handling","text":""},{"location":"environment-variable-handling/#for-renovate","title":"For Renovate","text":"<p>Renovate itself can be configured through a number of environment variables that correspond with global self-hosted configuration options, as well as some repository configuration options. These environment variables have the prefix with <code>RENOVATE_</code>.</p> <p>Renovate also has some \"experimental\" variables that can be used with self-hosted deployments.</p> <p>It is also possible to use the following configuration options to control Renovate's environment variables:</p> <ul> <li><code>processEnv</code>: in a configuration file (i.e. <code>config.js</code>), allows specifying the values that Renovate will receive in its environment</li> </ul>"},{"location":"environment-variable-handling/#with-child-processes","title":"With child processes","text":"<p>For security reasons, Renovate does not expose all environment variables to child processes. Instead, Renovate will use an allowlist of environment variables which it passes to any processes it calls.</p> <p>This is an intentional decision to protect against two key attack vectors:</p> <ul> <li>an \"insider attack\" from a user of your self-hosted Renovate deployment</li> <li>an \"outsider attack\" from a malicious dependency</li> </ul> <p>By limiting the environment variables provided to child processes, we can reduce the risk of a malicious actor from receiving access to potentially sensitive information, such as authentication tokens.</p> <p>By default, Renovate will always pass the following environment variables to child processes:</p> <ul> <li><code>APPDATA</code></li> <li><code>COREPACK_DEFAULT_TO_LATEST</code></li> <li><code>COREPACK_ENABLE_NETWORK</code></li> <li><code>COREPACK_ENABLE_PROJECT_SPEC</code></li> <li><code>COREPACK_ENABLE_STRICT</code></li> <li><code>COREPACK_ENABLE_UNSAFE_CUSTOM_URLS</code></li> <li><code>COREPACK_HOME</code></li> <li><code>COREPACK_INTEGRITY_KEYS</code></li> <li><code>COREPACK_NPM_PASSWORD</code></li> <li><code>COREPACK_NPM_REGISTRY</code></li> <li><code>COREPACK_NPM_TOKEN</code></li> <li><code>COREPACK_NPM_USERNAME</code></li> <li><code>COREPACK_ROOT</code></li> <li><code>DOCKER_CERT_PATH</code></li> <li><code>DOCKER_HOST</code></li> <li><code>DOCKER_TLS_VERIFY</code></li> <li><code>GIT_SSL_CAINFO</code></li> <li><code>GIT_SSL_CAPATH</code></li> <li><code>HOME</code></li> <li><code>HTTP_PROXY</code></li> <li><code>http_proxy</code></li> <li><code>HTTPS_PROXY</code></li> <li><code>https_proxy</code></li> <li><code>LANG</code></li> <li><code>LC_ALL</code></li> <li><code>LOCALAPPDATA</code></li> <li><code>NO_PROXY</code></li> <li><code>no_proxy</code></li> <li><code>NODE_EXTRA_CA_CERTS</code></li> <li><code>PATH</code></li> <li><code>PATHEXT</code></li> <li><code>PNPM_MAX_WORKERS</code></li> <li><code>PNPM_WORKERS</code></li> <li><code>PROCESSOR_ARCHITECTURE</code></li> <li><code>PROGRAMFILES</code></li> <li><code>PROGRAMFILES(X86)</code></li> <li><code>SSL_CERT_DIR</code></li> <li><code>SSL_CERT_FILE</code></li> </ul> <p>Additionally, Renovate will always set the following environment variables to these exact values:</p> <ul> <li><code>CI=true</code></li> </ul> <p>Note</p> <p>Some managers pass additional environment variables where necessary.  For example, Renovate will convert Host Rules to the respective environment variables when calling <code>npm</code>, <code>pnpm</code> and <code>yarn</code>, including setting <code>GIT_CONFIG_</code> environment variables.  This is not currently documented in full - you will need to review Renovate's code to see the full list.</p> <p>As a self-hosted administrator, you can make it possible to specify other environment variables that repository owners can set, using:</p> <ul> <li><code>allowedEnv</code>: allows users to specify values for allowlisted environment variables in their repository configuration using <code>env</code></li> <li><code>customEnvVariables</code>: administrator-defined environment variables, injected directly into every child process. Users cannot override these in their repository configuration</li> <li><code>exposeAllEnv</code>: \u26a0\ufe0f dangerously expose all environment variables from the Renovate process to all child processes</li> <li><code>extends: [\"global:safeEnv\"]</code>: a curated list of commonly used environment variables that should be safe to allow users to configure with <code>env</code>. This is used by Mend-hosted Renovate</li> </ul> <p>With these option(s) configured, users will be able to set these environment variable(s) in their repository configuration using <code>env</code>, as well as referencing them in any fields that support templating.</p>"},{"location":"environment-variable-handling/#using-environment-variables-for-secrets","title":"Using environment variables for secrets","text":"<p>Where possible, Renovate will try and redact secrets in its log messages, and the log output from any child processes. This relies on knowing whether the value is a secret for instance those configured through <code>secrets</code> or in <code>hostRules</code>.</p> <p>If specifying an environment variable - through the above - with a value that isn't known to Renovate as a secret, this may lead to the secret being unknowingly exposed in the logs.</p>"},{"location":"environment-variable-handling/#precedence","title":"Precedence","text":"<p>When determining which environment variables Renovate should pass to a child process, Renovate merges with the following precedence order:</p> <pre><code>flowchart TD\n    extraEnv[\"&lt;strong&gt;&lt;code&gt;extraEnv&lt;/code&gt;&lt;/strong&gt;&lt;br/&gt;&lt;small&gt;Manager-defined defaults/hints string value = default, null = inherit key only&lt;/small&gt;\"]\n    parentEnv[\"&lt;strong&gt;&lt;code&gt;parentEnv&lt;/code&gt;&lt;/strong&gt;&lt;br/&gt;&lt;small&gt;process.env filtered to basicEnvVars&lt;sup&gt;1&lt;/sup&gt; + string keys from extraEnv&lt;/small&gt;\"]\n    globalConfigEnv[\"&lt;strong&gt;&lt;code&gt;globalConfigEnv&lt;/code&gt;&lt;/strong&gt;&lt;br/&gt;&lt;small&gt;&lt;code&gt;customEnvVariables&lt;/code&gt; set by self-hosted admin at startup&lt;/small&gt;\"]\n    userConfiguredEnv[\"&lt;strong&gt;&lt;code&gt;userConfiguredEnv&lt;/code&gt;&lt;/strong&gt;&lt;br/&gt;&lt;small&gt;&lt;code&gt;env&lt;/code&gt; config in Renovate config file&lt;/small&gt;\"]\n    forcedEnv[\"&lt;strong&gt;&lt;code&gt;forcedEnv&lt;/code&gt;&lt;/strong&gt;&lt;br/&gt;&lt;small&gt;Hardcoded per exec-call by Renovate internals&lt;/small&gt;\"]\n    childProcess[\"&lt;strong&gt;Child Process&lt;/strong&gt;\"]\n    exposeAllEnv[\"&lt;strong&gt;&lt;code&gt;exposeAllEnv = true&lt;/code&gt;&lt;/strong&gt;&lt;br/&gt;&lt;small&gt;Bypasses all layering, passes entire &lt;code&gt;process.env&lt;/code&gt;&lt;/small&gt;\"]\n    processEnvConfig[\"&lt;strong&gt;&lt;code&gt;processEnv&lt;/code&gt;&lt;/strong&gt;&lt;br/&gt;&lt;small&gt;&lt;/small&gt;\"]\n    processEnv[\"&lt;strong&gt;&lt;code&gt;process.env&lt;/code&gt;&lt;/strong&gt;&lt;br/&gt;&lt;small&gt;The original process' &lt;code&gt;process.env&lt;/code&gt; and &lt;code&gt;processEnv&lt;/code&gt;&lt;/small&gt;\"]\n    allowedEnv[\"&lt;strong&gt;&lt;code&gt;allowedEnv&lt;/code&gt;&lt;/strong&gt;&lt;br/&gt;&lt;small&gt;Admin-controlled allowlist gates which environment variables repo owners may set&lt;/small&gt;\"]\n\n    extraEnv --&gt;|\"overridden by\"| parentEnv\n    parentEnv --&gt;|\"overridden by\"| globalConfigEnv\n    globalConfigEnv --&gt;|\"overridden by\"| userConfiguredEnv\n    userConfiguredEnv --&gt;|\"overridden by\"| forcedEnv\n    forcedEnv --&gt; childProcess\n\n    exposeAllEnv -.-&gt;|\"short-circuits to\"| childProcess\n    processEnvConfig -.-&gt;|\"merged into\"| processEnv\n    processEnv -.-&gt;|\"filtered with &lt;code&gt;basicEnvVars&lt;/code&gt;\"| parentEnv\n    allowedEnv -.-&gt;|\"restricts\"| userConfiguredEnv\n</code></pre> <p><sup>1</sup>: the list of environment variables noted above that are always passed to child processes</p>"},{"location":"environment-variable-handling/#templating","title":"Templating","text":"<p>Allowlisted environment variables can be referenced in templates. See templates and environment variables for more details.</p>"},{"location":"faq/","title":"Frequently Asked Questions (FAQ)","text":""},{"location":"faq/#what-is-the-default-behavior","title":"What is the default behavior?","text":"<p>Renovate will:</p> <ul> <li>Look for configuration options in a configuration file (e.g. <code>renovate.json</code>) and in each <code>package.json</code> file</li> <li>Find and process all package files (e.g. <code>package.json</code>, <code>composer.json</code>, <code>Dockerfile</code>, etc) in each repository</li> <li>Use separate branches/PR for each dependency</li> <li>Use separate branches for each major version of each dependency</li> <li>Pin devDependencies to a single version, rather than use ranges</li> <li>Pin dependencies to a single version if it appears not to be a library</li> <li>Update <code>yarn.lock</code> or <code>package-lock.json</code> files, if found</li> <li>Create Pull Requests immediately after branch creation</li> </ul>"},{"location":"faq/#which-renovate-versions-are-officially-supported","title":"Which Renovate versions are officially supported?","text":"<p>Only the latest version of Renovate is supported by the Renovate maintainers. The Renovate team only fixes bugs in an older version if:</p> <ul> <li>the Mend Renovate App needs to stay on that older major version for a short time, or</li> <li>some critical bug needs to be fixed and the new major is blocked</li> </ul> <p>If you're using the Mend Renovate App, you don't need to do anything, as the Renovate maintainers update it regularly. If you're self hosting Renovate, use the latest release if possible.</p>"},{"location":"faq/#renovate-core-features-not-supported-on-all-platforms","title":"Renovate core features not supported on all platforms","text":"Feature Platforms which lack feature Dependency Dashboard Bitbucket, Bitbucket Server, Gerrit, SCM-Manager The Mend Renovate App Bitbucket Server, Forgejo, Gitea, SCM-Manager"},{"location":"faq/#major-platform-features-not-supported-by-renovate","title":"Major platform features not supported by Renovate","text":"<p>Some major platform features are not supported at all by Renovate.</p> Feature name Platform See Renovate issue(s) Jira issues Bitbucket #20568 Jira issues Bitbucket Server #3796 Configurable merge strategy and message Only Bitbucket, Forgejo and Gitea for now #10867 #10869 #10870"},{"location":"faq/#what-is-this-main-branch-i-see-in-the-documentation","title":"What is this <code>main</code> branch I see in the documentation?","text":"<p>When you create a new repository with Git, Git creates a base branch for you. The default branch name that Git uses is <code>master</code> (this will be changed to <code>main</code> later).</p> <p>The Git-hosting ecosystem decided to use <code>main</code> instead of <code>master</code>. When you create a new repository on say GitHub or GitLab, you'll get a <code>main</code> branch as your base branch.</p> <p>We replaced <code>master</code> with <code>main</code> in our documentation where possible.</p> <p>A branch name has no special meaning within the Git program, it's only a name. The base branch could be called <code>trunk</code> or <code>mainline</code> or <code>prod</code>, and Git would work just as well.</p>"},{"location":"faq/#what-if-i-need-to","title":"What if I need to .. ?","text":""},{"location":"faq/#troubleshoot-renovate","title":"Troubleshoot Renovate","text":"<p>If you have problems with Renovate, or want to know where Renovate keeps the logging output then read our troubleshooting documentation.</p>"},{"location":"faq/#tell-renovate-to-ask-for-approval-before-creating-a-pull-request","title":"Tell Renovate to ask for approval before creating a Pull Request","text":"<p>By default, Renovate creates a pull request right away whenever there's an update. But maybe you want Renovate to ask for your approval before it creates a pull request. Use the \"Dependency Dashboard approval\" workflow to get updates for certain packages - or certain types of updates - only after you give approval via the Dependency Dashboard.</p> <p>The basic idea is that you create a new <code>packageRules</code> entry and describe what kind of package, or type of updates you want to approve beforehand.</p> Manually approve all major npm package manager updates<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchUpdateTypes\": [\"major\"],\n      \"matchManagers\": [\"npm\"],\n      \"dependencyDashboardApproval\": true\n    }\n  ]\n}\n</code></pre> Manually approve all major Jest updates<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"jest\"],\n      \"matchUpdateTypes\": [\"major\"],\n      \"dependencyDashboardApproval\": true\n    }\n  ]\n}\n</code></pre> <p>You may even configure Renovate to ask for approval for all updates. The <code>dependencyDashboardApproval</code> config option is outside of a <code>packageRules</code> array, and so applies to all updates:</p> <pre><code>{\n  \"dependencyDashboardApproval\": true\n}\n</code></pre> <p>Read our documentation on the dependencyDashboardApproval config option.</p>"},{"location":"faq/#use-an-alternative-branch-as-my-pull-request-target","title":"Use an alternative branch as my Pull Request target","text":"<p>Say your repository's default branch is <code>main</code> but you want Renovate to use the <code>next</code> branch as its PR target. You can configure the PR target branch via the <code>baseBranchPatterns</code> option.</p> <p>Add this line to the <code>renovate.json</code> file that's in the default branch (<code>main</code> in this example).</p> <pre><code>{\n  \"baseBranchPatterns\": [\"next\"]\n}\n</code></pre> <p>You can set more than one PR target branch in the <code>baseBranchPatterns</code> array.</p>"},{"location":"faq/#support-private-npm-modules","title":"Support private npm modules","text":"<p>See the dedicated Private npm module support page.</p>"},{"location":"faq/#control-renovates-schedule","title":"Control Renovate's schedule","text":"<p>To learn about controlling Renovate schedule, read the key concepts, scheduling docs.</p>"},{"location":"faq/#disable-renovate-for-certain-dependency-types","title":"Disable Renovate for certain dependency types","text":"<p>Define a <code>packageRules</code> entry which has the dependency type(s) in <code>matchDepTypes</code> and <code>\"enabled\": false</code>.</p>"},{"location":"faq/#use-a-single-branchpr-for-all-dependency-upgrades","title":"Use a single branch/PR for all dependency upgrades","text":"<p>Add a configuration for configuration option <code>groupName</code> set to value <code>\"all\"</code>, at the top level of your <code>renovate.json</code> or <code>package.json</code>.</p>"},{"location":"faq/#use-separate-branches-per-dependency-but-not-one-per-major-release","title":"Use separate branches per dependency, but not one per major release","text":"<p>Set configuration option <code>separateMajorMinor</code> to <code>false</code>.</p>"},{"location":"faq/#keep-using-semver-ranges-instead-of-pinning-dependencies","title":"Keep using SemVer ranges, instead of pinning dependencies","text":"<p>Set configuration option <code>rangeStrategy</code> to <code>\"replace\"</code>.</p>"},{"location":"faq/#keep-lock-files-including-sub-dependencies-up-to-date-even-when-packagejson-hasnt-changed","title":"Keep lock files (including sub-dependencies) up-to-date, even when <code>package.json</code> hasn't changed","text":"<p>By default, if you enable lock-file maintenance, Renovate will update the lockfile <code>[\"before 4am on monday\"]</code>. If you want to update the lock file more often, set the <code>schedule</code> field inside the <code>lockFileMaintenance</code> object.</p>"},{"location":"faq/#wait-until-tests-have-passed-before-creating-the-pr","title":"Wait until tests have passed before creating the PR","text":"<p>Set the configuration option <code>prCreation</code> to <code>\"status-success\"</code>. Branches with failing tests will remain in Git and get updated if needed. Renovate will only create a PR once the tests pass.</p>"},{"location":"faq/#wait-until-tests-have-passed-before-creating-a-pr-but-create-the-pr-even-if-they-fail","title":"Wait until tests have passed before creating a PR, but create the PR even if they fail","text":"<p>Set the configuration option <code>prCreation</code> to <code>\"not-pending\"</code>.</p>"},{"location":"faq/#assign-prs-to-specific-users","title":"Assign PRs to specific user(s)","text":"<p>Set the configuration option <code>assignees</code> to an array of usernames.</p>"},{"location":"faq/#add-labels-to-prs","title":"Add labels to PRs","text":"<p>Set the configuration option <code>labels</code> to an array of labels to use.</p>"},{"location":"faq/#apply-a-rule-but-only-to-package-abc","title":"Apply a rule, but only to package <code>abc</code>?","text":"<ol> <li>Add a <code>packageRules</code> array to your configuration</li> <li>Create one object inside this array</li> <li>Set field <code>matchPackageNames</code> to value <code>[\"abc\"]</code></li> <li>Add the configuration option to the same object</li> </ol> <p>e.g.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"abc\"],\n      \"assignees\": [\"importantreviewer\"]\n    }\n  ]\n}\n</code></pre>"},{"location":"faq/#apply-a-rule-but-only-for-packages-starting-with-abc","title":"Apply a rule, but only for packages starting with <code>abc</code>","text":"<p>Do the same as above, but instead of an exact match, use a glob prefix:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": \"abc**\",\n      \"assignees\": [\"importantreviewer\"]\n    }\n  ]\n}\n</code></pre> <p>For more examples, see String Pattern Matching, example glob patterns.</p>"},{"location":"faq/#group-all-packages-starting-with-abc-together-in-one-pr","title":"Group all packages starting with <code>abc</code> together in one PR","text":"<p>As above, but apply a <code>groupName</code>:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": \"abc**\",\n      \"groupName\": \"abc packages\"\n    }\n  ]\n}\n</code></pre>"},{"location":"faq/#change-the-default-values-for-branch-name-commit-message-pr-title-or-pr-description","title":"Change the default values for branch name, commit message, PR title or PR description","text":"<p>You can use the <code>branchName</code>, <code>commitMessage</code>, <code>prTitle</code> or <code>prBody</code> configuration options to change the defaults for those settings.</p>"},{"location":"faq/#automatically-merge-passing-pull-requests","title":"Automatically merge passing Pull Requests","text":"<p>Set the configuration option <code>automerge</code> to <code>true</code>. Nest it inside a <code>patch</code> or <code>minor</code> object if you only want to automerge certain types of updates.</p>"},{"location":"faq/#separate-patch-releases-from-minor-releases","title":"Separate patch releases from minor releases","text":""},{"location":"faq/#renovates-default-behavior-for-majorminor-releases","title":"Renovate's default behavior for major/minor releases","text":"<p>By default, Renovate separates major and minor releases. Patch releases are treated as \"minor\". Here's an example:</p> <p>Say you're using version <code>0.8.0</code> of the <code>foo</code> package. The <code>foo</code> maintainers release the following versions:</p> <ul> <li><code>0.8.1</code> (patch)</li> <li><code>0.9.0</code> (minor)</li> <li><code>1.0.0</code> (major)</li> </ul> <p>Renovate creates the following PRs:</p> <ul> <li>Update dependency <code>foo</code> to <code>0.9.0</code> (minor)</li> <li>Update dependency <code>foo</code> to <code>1.0.0</code> (major)</li> </ul> <p>Renovate groups the patch and minor versions into one PR. This means you only get a PR for the minor version, <code>0.9.0</code>.</p> <p>You can override this default behavior. To learn more read the section below.</p>"},{"location":"faq/#overriding-the-default-behavior-for-majorminor-releases","title":"Overriding the default behavior for major/minor releases","text":"<p>You can see in the example above that Renovate won't normally create a PR for the <code>foo</code> patch release.</p> <p>You can tell Renovate to create a separate PR for the patch release by setting <code>separateMinorPatch</code> to <code>true</code>.</p> <p>In both cases, Renovate will open 3 PRs:</p> <ul> <li>Update dependency <code>foo</code> to <code>0.8.1</code> (patch)</li> <li>Update dependency <code>foo</code> to <code>0.9.0</code> (minor)</li> <li>Update dependency <code>foo</code> to <code>1.0.0</code> (major)</li> </ul> <p>Usually you don't want more PRs though. It can be nice to get patch PRs when you're using automerge:</p> <ul> <li>Get daily patch updates which are automerged once tests pass</li> <li>Get weekly updates for minor and major updates</li> </ul> <p>This means you barely notice Renovate during the week, while you still get the benefits of patch level updates.</p>"},{"location":"faq/#whats-the-difference-between-depname-and-packagename","title":"What's the difference between <code>depName</code> and <code>packageName</code>?","text":"<p>Renovate uses two important config options to define a dependency's name: <code>depName</code> and <code>packageName</code>.</p> <p>The <code>depName</code> is the short \"pretty name\" of the dependency. This is the user-facing name for the dependency. By default, Renovate uses the <code>depName</code>:</p> <ul> <li>in the title of Pull Requests/Merge Requests</li> <li>in commit messages</li> <li>on the Dependency Dashboard</li> </ul> <p>The <code>packageName</code> is the full exact name. Renovate uses the <code>packageName</code> to find the dependency in the package registry.</p> <p>Often <code>depName</code> and <code>packageName</code> are the same, but not always.</p> <p>Renovate uses the \"pretty\" <code>depName</code> in branch names and PR titles/content, because the <code>depName</code> is easier to read than the <code>packageName</code>.</p> <p>For instance, given the following Gradle plugin:</p> <pre><code>plugins {\n    id(\"com.gradle.develocity\").version(\"3.18.1\")\n}\n</code></pre> <p>Renovate will give the dependency these properties:</p> <ul> <li><code>depName</code>: <code>com.gradle.develocity</code></li> <li><code>packageName</code>: <code>com.gradle.develocity:com.gradle.develocity.gradle.plugin</code></li> </ul> <p>Again, often the <code>depName</code> and <code>packageName</code> are equal. The names Renovate uses for the <code>depName</code> and <code>packageName</code> depend on the package manager (and package ecosystem naming conventions). For instance, <code>depName</code> and <code>packageName</code> may be different when you proxy Docker images.</p>"},{"location":"gitlab-bot-security/","title":"Security considerations when running Renovate against GitLab.com","text":"<p>Make sure you understand GitLab's security model before you run Renovate against GitLab, whether through the Mend-hosted app or a self-hosted deployment.</p> <p>Warning</p> <p>If you have any doubts or concerns about this content that could affect other users, please follow our Security Policy and report them confidentially.</p>"},{"location":"gitlab-bot-security/#mend-hosted-renovate","title":"Mend-hosted Renovate","text":"<p>In July 2026, Mend relaunched its hosted Renovate app for GitLab.com. You can set it up by following these instructions when logging into the Mend Developer Platform.</p> <p>Tip</p> <p>The GitLab user who onboards an organization becomes the account used to create commit statuses, issues, and MRs.  Mend recommends creating a dedicated user solely for the integration with the Mend Developer Platform, and completing the rest of the installation as that dedicated user, rather than using a personal account.</p> <p>The previous Mend-hosted Renovate for GitLab.com ran inside GitLab CI, using <code>CI_JOB_TOKEN</code> credentials, which we found too risky to run as a shared service and retired. Although GitLab has improved this since we retired the previous hosted app, we have since relaunched the app using an OAuth app, which avoids those risks.</p>"},{"location":"gitlab-bot-security/#security-model","title":"Security model","text":""},{"location":"gitlab-bot-security/#running-in-gitlab-ci","title":"Running in GitLab CI","text":"<p>GitLab's CI job-token permission model (the token was called <code>CI_BUILD_TOKEN</code> until it was renamed <code>CI_JOB_TOKEN</code> in GitLab 9.0) was overhauled in GitLab 8.12 (2016-09), so jobs now run with the permissions of the user account which triggered the pipeline. The token was originally limited to read-only permissions and a small set of API endpoints, but its write scope has grown significantly since: it can now push to its own project's repository, push cross-project to allowlisted projects, publish to the Package Registry, and more. Historically, any pipeline triggered by a user account thus had permissions to:</p> <ul> <li>read any repository which that account has access to</li> <li>publish packages to them</li> </ul> <p>This is why we retired the original Mend-hosted GitLab app: a pipeline run for one customer, under a shared bot account, could read or write to any other project that account had access to.</p> <p>GitLab introduced a CI/CD job token allowlist in GitLab 15.9 (2023-02): a job token from one project can no longer authenticate against another project's API just because the triggering user has access to both. The target project must explicitly add the source project, or group, to its allowlist first, and the triggering user must still have their own permission to perform the action. As of GitLab 18.0 (2025-05), this allowlist is enabled and enforced for every project on GitLab.com, including projects created before the allowlist existed, and can't be disabled there. If you administer a GitLab Self-Managed or Dedicated instance, note that admins can still disable this instance-wide setting even on GitLab 18.0+, so confirm it's actually enforced rather than switched off.</p> <p>Even with the allowlist enabled, public and internal projects still expose some resources, such as artifacts, the container/package registry, releases, and repository contents, to a job token from any project, allowlisted or not. So the advice below still applies regardless of allowlist status.</p> <p>If you run Renovate yourself inside your own GitLab CI pipelines, you should still only commit to a project you trust completely, since a malicious project could steal repository data, publish fake releases, or spam releases within its allowlisted scope. You should also remember that when accounts are invited into projects or groups on GitLab, acceptance happens automatically. If you are running a shared self-hosted Renovate service, we recommend you:</p> <ul> <li>Run a shared service only within projects where all users already have equivalent visibility/access to each other's data, or where there's a low risk that a user would try to gain access to a private project they don't otherwise have access to</li> <li>If running with <code>autodiscover</code>, also configure a value for <code>autodiscoverFilter</code> so that Renovate can't be invited to projects or groups you don't intend</li> </ul>"},{"location":"gitlab-bot-security/#running-as-an-oauth-app","title":"Running as an OAuth app","text":"<p>An alternative to running with a shared user's personal access token is to run using per-installation OAuth tokens: users explicitly authorize an OAuth app to act on specific groups or projects they choose, rather than a shared bot account being invited, and auto-accepted, into projects without its own consent.</p> <p>This is the model the relaunched Mend-hosted GitLab app uses. It avoids the \"single shared bot identity reachable from every onboarded customer\" failure mode described above, since each authorization is scoped to the projects or groups an admin actually selects, and commits/Merge Requests are attributable to that authorization rather than one global bot account. We considered Project and Group Access Tokens as an alternative, but both remain gated behind paid tiers on gitlab.com, which would have excluded free-plan users from the service.</p> <p>One limitation to be aware of: GitLab's OAuth scopes (<code>api</code>, <code>read_repository</code>, <code>write_repository</code>, and so on) are granted at the level of the authorizing user, not restricted to specific projects by GitLab itself. The resulting token is therefore as capable as the authorizing user's own GitLab account, not limited to the group(s) selected during onboarding, by any GitLab-enforced boundary, unlike a Project Access Token, which GitLab itself would restrict to a single project. GitLab does support project/group-scoped access for fine-grained personal access tokens, but not yet for OAuth application tokens.</p>"},{"location":"gitlab-bot-security/#acknowledgments","title":"Acknowledgments","text":"<p>Thank you to Nejc Habjan for bringing this security challenge to our attention, and also to his colleagues at Siemens for their help researching the risks. Thanks also to the GitLab security team for being responsive to our questions.</p>"},{"location":"golang/","title":"Automated Dependency Updates for Go Modules","text":"<p>Renovate supports upgrading dependencies in <code>go.mod</code> files and associated <code>go.sum</code> checksums.</p> <p>If you're self-hosting Renovate, you may use these environment variables:</p> <ul> <li><code>GOPROXY</code></li> <li><code>GONOPROXY</code></li> <li><code>GOPRIVATE</code></li> <li><code>GOINSECURE</code></li> </ul> <p>To learn what these variables do, read the Go Modules Reference about the<code>GOPROXY</code> protocol.</p>"},{"location":"golang/#how-it-works","title":"How It Works","text":"<ol> <li>Renovate searches in each repository for any <code>go.mod</code> files</li> <li>Renovate extracts existing dependencies from <code>require</code> statements</li> <li>Renovate resolves the dependency's source repository and checks for SemVer tags if found. Otherwise commits and <code>v0.0.0-....</code> syntax will be used</li> <li>If Renovate finds an update, Renovate will update <code>go.mod</code> to the new value</li> <li>Renovate runs <code>go get</code> to update the <code>go.sum</code> files (you can configure which directories are included using the <code>goGetDirs</code> option)</li> <li>If the user has enabled the option <code>gomodUpdateImportPaths</code> in the <code>postUpdateOptions</code> array, then Renovate uses mod to update import paths on major updates, which can update any Go source file</li> <li>If the user has any of the available <code>gomodTidy</code> options (e.g. <code>gomodTidy1.17</code>) in the <code>postUpdateOptions</code>, then Renovate runs <code>go mod tidy</code> with the respective options (multiple options are allowed).</li> <li><code>go mod vendor</code> is run if vendored modules are detected</li> <li>A PR will be created with <code>go.mod</code>,<code>go.sum</code>, and any updated vendored files updated in the one commit</li> <li>If the source repository has either a \"changelog\" file or uses GitHub releases, then Release Notes for each version will be embedded in the generated PR</li> </ol>"},{"location":"golang/#enabling-go-modules-updating","title":"Enabling Go Modules Updating","text":"<p>Renovate updates Go Modules by default. To install Renovate itself, either enable the Renovate App on GitHub, or check out Renovate OSS for self-hosted.</p>"},{"location":"golang/#technical-details","title":"Technical Details","text":""},{"location":"golang/#replace-massaging","title":"Replace massaging","text":"<p>Renovate can massage <code>replace</code> statements it finds prior to running <code>go</code> commands, and then massage them back afterwards. This capability was added - and originally default behavior - because relative <code>replace</code> statements outside of the current repo will not work when Renovate clones the repo locally.</p> <p>On the other hand, this massaging of <code>replace</code> statements may lead to unexpected results, especially because <code>go mod tidy</code> may not fully tidy the <code>go.sum</code> if it is missing the <code>replace</code> directives in <code>go.mod</code>. It has therefore been disabled by default.</p> <p>To enable this replace massaging behavior, add <code>gomodMassage</code> to your <code>postUpdateOptions</code> array.</p>"},{"location":"golang/#module-tidying","title":"Module Tidying","text":"<p>Go Modules tidying is not enabled by default, and is opt-in via the <code>postUpdateOptions</code> config option. The reason for this is that a <code>go mod tidy</code> command may make changes to <code>go.mod</code> and <code>go.sum</code> that are completely unrelated to the updated module(s) in the PR, and so may be confusing to some users.</p>"},{"location":"golang/#monorepo-tidying-for-local-replace-directives","title":"Monorepo tidying for local <code>replace</code> directives","text":"<p>In Go monorepos it is common for one module to depend on another in the same repo via a local <code>replace</code> directive, for example:</p> <pre><code>// api/go.mod\nreplace example.com/shared =&gt; ../shared\n</code></pre> <p>When Renovate updates the shared module, running <code>go mod tidy</code> only in that module leaves the dependent <code>go.sum</code> files stale. Add <code>gomodTidyAll</code> to <code>postUpdateOptions</code> to also tidy every <code>go.mod</code> which transitively depends on the updated module, in dependency order. The <code>gomodTidy1.17</code> and <code>gomodTidyE</code> flags apply to those commands as well. <code>gomodTidyAll</code> implies <code>gomodTidy</code>, so you only need to set one of them. Renovate runs these commands with <code>go -C</code>, so this option needs Go 1.20 or later.</p> <p>Avoid combining <code>gomodTidyAll</code> with <code>gomodMassage</code>. Massaging comments out the relative <code>replace</code> directives that <code>gomodTidyAll</code> follows, so the two options work against each other. Massaging only rewrites the <code>go.mod</code> of the updated module, and Go ignores <code>replace</code> directives outside the main module, so the tidy commands for the dependent modules still behave correctly. But if the updated module itself uses a relative <code>replace</code>, then massaging removes that directive and <code>go mod tidy</code> fails for that module.</p>"},{"location":"golang/#module-vendoring","title":"Module Vendoring","text":"<p>Vendoring of Go Modules is done automatically if <code>vendor/modules.txt</code> is present. Renovate will commit all files changed within the <code>vendor/</code> folder.</p> <p>Note</p> <p>Renovate does not support vendoring major upgrades of Go modules. Follow issue #21010.</p>"},{"location":"golang/#go-binary-version","title":"Go binary version","text":"<p>By default, Renovate will keep up with the latest version of the <code>go</code> binary.</p> <p>You can force Renovate to use a specific version of Go by setting a constraint.</p> Getting Renovate to use the latest patch version of the 1.23 Go binary<pre><code>{\n  \"constraints\": {\n    \"go\": \"1.23\"\n  }\n}\n</code></pre> <p>We do not support patch level versions for the minimum <code>go</code> version. This means you cannot use <code>go 1.23.3</code>, but you can use <code>go 1.23</code> as a constraint.</p>"},{"location":"golang/#custom-registry-support-and-authentication","title":"Custom registry support, and authentication","text":"<p>This example shows how you can use a <code>hostRules</code> configuration to configure Renovate for use with a custom private Go module source using Git to pull the modules when updating <code>go.sum</code> and vendored modules. All token <code>hostRules</code> with a <code>hostType</code> (e.g. <code>github</code>, <code>gitlab</code>, <code>bitbucket</code>, ... ) and host rules without a <code>hostType</code> are setup for authentication.</p> <pre><code>module.exports = {\n  hostRules: [\n    {\n      matchHost: 'github.enterprise.com',\n      token: process.env.GO_GITHUB_TOKEN,\n      hostType: 'github',\n    },\n    {\n      matchHost: 'someGitHost.enterprise.com',\n      token: process.env.GO_GIT_TOKEN,\n    },\n  ],\n};\n</code></pre>"},{"location":"golang/#private-go-modules-hosted-on-gitlab","title":"Private Go modules hosted on GitLab","text":"<p>For private GitLab projects, Renovate must authenticate the <code>?go-get=1</code> requests it uses to resolve the source repository of a module. Add a host rule with <code>hostType</code> set to <code>go</code> that uses <code>username</code> and <code>password</code>:</p> <pre><code>module.exports = {\n  hostRules: [\n    {\n      matchHost: 'gitlab.company.com',\n      hostType: 'go',\n      username: 'renovate-bot',\n      password: process.env.GITLAB_PAT,\n    },\n  ],\n};\n</code></pre> <p>The <code>password</code> must be a personal access token with the <code>read_api</code> scope. The <code>username</code> can be any non-empty string when the password is a personal access token.</p> <p>Warning</p> <p>Use <code>username</code> and <code>password</code> in the <code>go</code> host rule, not <code>token</code>. GitLab only supports Basic authentication for <code>?go-get=1</code> requests, and a <code>token</code> results in a <code>Bearer</code> authorization header.</p> <p>If you do not run Renovate with GitLab as its platform, you also need a host rule with <code>hostType</code> set to <code>gitlab</code> to authenticate the GitLab tags API.</p> <p>Without the <code>go</code> host rule, GitLab responds to the unauthenticated <code>?go-get=1</code> request with a truncated <code>go-import</code> path, so Renovate resolves the wrong repository. Lookups then fail with a 404 response for a tags URL with a truncated project path, for example: <code>https://gitlab.company.com/api/v4/projects/group%2Fsubgroup/repository/tags?per_page=100</code>.</p>"},{"location":"golang/#private-go-modules-served-by-a-module-proxy","title":"Private Go modules served by a module proxy","text":"<p>Some Go modules are not served from version control, but instead through a module proxy.</p> <p>For instance, when interacting with a private Buf Schema Registry (BSR), the Go toolchain is pointed to a module proxy on the BSR, which allows serving the module directly, instead of retrieving it from source control.</p> <p>They advertise this with a <code>go-import</code> meta tag that uses <code>mod</code> instead of <code>git</code>, for example:</p> <pre><code>&lt;meta\n  name=\"go-import\"\n  content=\"bsr.example.com/gen/go mod https://bsr.example.com/gen/go\"\n/&gt;\n</code></pre> <p>When Renovate looks up a module directly, it follows the <code>mod</code> proxy URL, as the <code>go</code> command does.</p> <p>Renovate looks up a module directly when <code>GOPROXY</code> is set to <code>direct</code>, or the module matches <code>GONOPROXY</code> or <code>GOPRIVATE</code>.</p> <p>For a private registry, set <code>GOPRIVATE</code> (or <code>GONOPROXY</code>) to the registry's host so that the module is not sent to the public proxy:</p> <pre><code>GOPRIVATE=bsr.example.com\n</code></pre> <p>Renovate uses the host rule with <code>hostType</code> set to <code>go</code> to authenticate both the <code>?go-get=1</code> request and the requests to the <code>mod</code> proxy:</p> <pre><code>module.exports = {\n  hostRules: [\n    {\n      matchHost: 'bsr.example.com',\n      hostType: 'go',\n      token: process.env.BSR_TOKEN,\n    },\n  ],\n};\n</code></pre>"},{"location":"golang/#deriving-go-environment-variables-from-host-rules","title":"Deriving Go environment variables from host rules","text":"<p>If you're self-hosting Renovate, you can set <code>goEnvFromHostRules</code> to <code>true</code> to have Renovate derive <code>GOPROXY</code>, <code>GONOPROXY</code> and <code>GONOSUMDB</code> from your host rules. Renovate uses the derived values to look up modules and to run <code>go</code>, so you don't have to configure the same hosts twice.</p> <ul> <li><code>GOPROXY</code>: one URL for each host rule with <code>hostType</code> set to <code>go-proxy</code>, followed by <code>https://proxy.golang.org,direct</code>.   When Renovate runs <code>go</code>, the rule's <code>username</code> and <code>password</code> are added to the URL.   Rules with only a <code>token</code> are skipped, because <code>go</code> can't send a token from a <code>GOPROXY</code> URL. Use <code>username</code> and <code>password</code> instead.   For a Buf Schema Registry, set <code>username</code> to your BSR username and <code>password</code> to your BSR token.</li> <li><code>GONOPROXY</code>: each host rule with <code>hostType</code> set to <code>go</code> whose <code>matchHost</code> includes a path, for example <code>https://github.com/my-org</code> becomes <code>github.com/my-org</code>.   Rules for a host without a path are skipped, so public modules on that host still use the proxy.</li> <li><code>GONOSUMDB</code>: the <code>go-proxy</code> hosts, and the <code>GONOPROXY</code> values derived from <code>go</code> host rules.</li> </ul> <p>Renovate only derives a value if you have not set the environment variable yourself. If you set <code>GOPRIVATE</code>, Renovate does not derive <code>GONOPROXY</code>, and derives <code>GONOSUMDB</code> as your <code>GOPRIVATE</code> value followed by the <code>go-proxy</code> hosts.</p> <p>For example, with a private proxy and a GitHub organization whose modules may be private:</p> <pre><code>module.exports = {\n  goEnvFromHostRules: true,\n  hostRules: [\n    {\n      matchHost: 'bsr.example.com',\n      hostType: 'go-proxy',\n      username: process.env.BSR_USERNAME,\n      password: process.env.BSR_TOKEN,\n    },\n    {\n      matchHost: 'https://github.com/my-org',\n      hostType: 'go',\n      token: process.env.GITHUB_TOKEN,\n    },\n  ],\n};\n</code></pre> <p>Renovate uses:</p> <pre><code>GOPROXY=https://bsr.example.com,https://proxy.golang.org,direct\nGONOPROXY=github.com/my-org\nGONOSUMDB=bsr.example.com,github.com/my-org\n</code></pre> <p>Modules under <code>github.com/my-org</code> are fetched directly from GitHub with the token, and skip both proxies and the public checksum database. Other modules go through <code>bsr.example.com</code>, then the public proxy.</p> <p>You can also mark private modules with <code>GOPRIVATE</code> instead of <code>go</code> host rules, for example in the repository config's <code>env</code>:</p> <pre><code>{\n  \"env\": {\n    \"GOPRIVATE\": \"github.com/my-org\"\n  }\n}\n</code></pre> <p>With the same <code>go-proxy</code> rule for <code>bsr.example.com</code>, Renovate uses:</p> <pre><code>GOPROXY=https://bsr.example.com,https://proxy.golang.org,direct\nGOPRIVATE=github.com/my-org\nGONOSUMDB=github.com/my-org,bsr.example.com\n</code></pre> <p><code>GOPROXY</code> is still derived from the <code>go-proxy</code> rule, and <code>go</code> uses <code>GOPRIVATE</code> in place of <code>GONOPROXY</code>.</p> <p>If you only want to use your own proxy, without the public proxy, set <code>GOPROXY</code> yourself.</p>"},{"location":"java/","title":"Java Dependency Updates","text":"<p>Renovate can update Gradle, Maven, and Ant dependencies. This includes libraries and plugins as well as the Gradle Wrapper.</p>"},{"location":"java/#lts-releases","title":"LTS releases","text":"<p>The <code>config:recommended</code> preset includes the <code>workarounds:javaLTSVersions</code> preset. The workaround limits Renovate to upgrade to LTS versions of the Java runtime only.</p> <p>If you want Renovate to offer all <code>major</code> Java updates then add <code>workarounds:javaLTSVersions</code> to the <code>ignorePreset</code> array:</p> <pre><code>{\n  \"extends\": [\"config:recommended\"],\n  \"ignorePresets\": [\"workarounds:javaLTSVersions\"]\n}\n</code></pre>"},{"location":"java/#gradle","title":"Gradle","text":"<p>Renovate detects versions that are specified in a string <code>'group:artifact:version'</code> and those specified in a map <code>(group:groupName, name:ArtifactName, version:Version)</code>.</p>"},{"location":"java/#gradle-file-support","title":"Gradle File Support","text":"<p>Renovate can update:</p> <ul> <li><code>*.gradle</code>/<code>*.gradle.kts</code> files</li> <li>Dependencies with version definitions in <code>gradle.properties</code> files</li> <li>Gradle lockfiles stored in <code>*.lockfile</code> files</li> <li><code>*.versions.toml</code> files in any directory or <code>*.toml</code> files inside the <code>gradle</code>   directory (Gradle Version Catalogs docs)</li> <li><code>versions.props</code> and <code>versions.lock</code> from the gradle-consistent-versions plugin</li> <li><code>gradle/verification-metadata.xml</code> signatures and checksums for dependency verification</li> </ul> <p>Renovate does not support:</p> <ul> <li>Android projects that require extra configuration to run (e.g. setting the Android SDK)</li> <li>Catalogs with version ranges</li> <li>Catalog versions using <code>reject</code>, and <code>rejectAll</code> constraints</li> <li>Catalog versions using more than one of <code>require</code>, <code>strictly</code>, <code>prefer</code> in a single declaration</li> <li>Catalogs with custom names that do not end in <code>.toml</code></li> <li>Catalogs outside the <code>gradle</code> folder, whose names do not end in <code>.versions.toml</code> (unless overridden via <code>managerFilePatterns</code> configuration)</li> </ul>"},{"location":"java/#gradle-plugin-support","title":"Gradle Plugin Support","text":"<p>Renovate can also update Gradle plugins. It supports the <code>id(&lt;pluginId&gt;)</code> syntax as well as the <code>kotlin(&lt;kotlinPluginId&gt;)</code> shortcut for <code>id(org.jetbrains.kotlin.&lt;kotlinPluginId&gt;)</code>.</p> <p>For specifying <code>packageRules</code> it is important to know how <code>depName</code> and <code>packageName</code> are defined for a Gradle plugin:</p> <ul> <li>The <code>depName</code> field is equal to <code>&lt;pluginId&gt;</code></li> <li>The <code>packageName</code> field is equal to <code>&lt;pluginId&gt;:&lt;pluginId&gt;.gradle.plugin</code></li> </ul> <p>This is a direct consequence of the Plugin Marker Artifact naming convention.</p>"},{"location":"java/#gradle-wrapper","title":"Gradle Wrapper","text":"<p>Renovate can update the Gradle Wrapper of a project.</p> <p>This includes the source declaration inside the <code>gradle/wrapper/gradle-wrapper.properties</code> as well as accompanied files such as <code>gradlew</code>, <code>gradlew.bat</code>, and <code>gradle/wrapper/gradle-wrapper.jar</code>.</p>"},{"location":"java/#how-it-works","title":"How It Works","text":"<p>Renovate extracts the Gradle Wrapper version used from the <code>distributionUrl</code> inside the <code>gradle-wrapper.properties</code>. Once the version is determined, Renovate will look for newer versions from the <code>gradle-version</code> datasource. Renovate will then invoke the Gradle Wrapper to update itself, as recommended by Gradle.</p> <p>For the extraction to work, the <code>distributionUrl</code> must point to a file of type <code>.zip</code>, which includes the version in its name, and defines one of the official distribution types (bin, all).</p>"},{"location":"java/#support-for-mirrors-and-custom-distributions","title":"Support for mirrors and custom distributions","text":"<p>As Renovate takes the <code>distributionUrl</code> defined inside the <code>gradle-wrapper.properties</code> as basis for its update, source declarations other than to the official Gradle Wrapper are supported.</p> <p>This can be used for hosting the official distributions with a proxy server, an offline mirror or even providing a custom distribution of the Gradle Wrapper, e.g. to provide a company-wide base configuration for all Gradle projects.</p> <p>But the <code>gradle-version</code> datasource is used to determine available versions. In case the available versions at the defined source differ from those available from Gradle or the default datasource cannot be reached, e.g. due to network restrictions, the datasource may be reconfigured via a <code>packageRule</code>:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"gradle-version\"],\n      \"registryUrls\": [\n        \"https://domain.tld/repository/custom-gradle-wrapper/versions.json\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"java/#maven","title":"Maven","text":"<p>Renovate can update dependency versions found in Maven <code>pom.xml</code> files.</p>"},{"location":"java/#maven-file-support","title":"Maven File Support","text":"<p>Renovate will search repositories for all <code>pom.xml</code> files and processes them independently.</p> <p>Renovate will also parse <code>settings.xml</code> files in the following locations:</p> <ul> <li><code>.mvn/settings.xml</code></li> <li><code>.m2/settings.xml</code></li> <li><code>settings.xml</code></li> </ul> <p>Any repository URLs found within will be added as <code>registryUrls</code> to extracted dependencies.</p>"},{"location":"java/#custom-registry-support-and-authentication","title":"Custom registry support, and authentication","text":"<p>The manager for Gradle makes use of the <code>maven</code> datasource. Renovate can be configured to access more repositories and access repositories authenticated.</p> <p>This example shows how you can use a <code>config.js</code> file to configure Renovate for use with Artifactory. We're using environment variables to pass the Artifactory username and password to Renovate.</p> config.js<pre><code>module.exports = {\n  hostRules: [\n    {\n      hostType: 'maven',\n      matchHost: 'https://artifactory.yourcompany.com/',\n      username: process.env.ARTIFACTORY_USERNAME,\n      password: process.env.ARTIFACTORY_PASSWORD,\n    },\n  ],\n};\n</code></pre> <p>You can overwrite the repositories to use for version lookup through configuration.</p> <pre><code>module.exports = {\n  packageRules: [\n    {\n      matchDatasources: ['maven'],\n      registryUrls: ['https://repo-a.tld/repo', 'https://repo-b.tld/repo'],\n    },\n  ],\n};\n</code></pre>"},{"location":"java/#google-artifact-registry","title":"Google Artifact Registry","text":"<p>There are multiple ways to configure Renovate to access Artifact Registry.</p>"},{"location":"java/#using-application-default-credentials-workload-identity-self-hosted-only","title":"Using Application Default Credentials / Workload Identity (Self-Hosted only)","text":"<p>Configure ADC or Workload Identity as normal and don't provide a username, password or token. Renovate will automatically retrieve the credentials using the <code>google-auth-library</code>.</p>"},{"location":"java/#using-long-lived-service-account-credentials","title":"Using long-lived service account credentials","text":"<p>To access the Google Artifact Registry, use the JSON service account with <code>Basic</code> authentication, and use the:</p> <ul> <li><code>_json_key_base64</code> as username</li> <li>full Google Cloud Platform service account JSON as password</li> </ul> <p>To avoid JSON-in-JSON wrapping, which can cause problems, encode the JSON service account beforehand.</p> <ol> <li>Download your JSON service account and store it on your machine. Make sure that the service account has <code>read</code> (and only <code>read</code>) permissions to your artifacts</li> <li>Base64 encode the service account credentials by running <code>cat service-account.json | base64</code></li> <li> <p>Add the encoded service account to your configuration file</p> <ol> <li> <p>If you want to add it to your self-hosted configuration file:</p> <pre><code>```json\n{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"europe-maven.pkg.dev\",\n      \"username\": \"_json_key_base64\",\n      \"password\": \"&lt;base64 service account&gt;\"\n    }\n  ]\n}\n```\n</code></pre> </li> <li> <p>If you want to add it to your repository Renovate configuration file, encrypt it and then add it:</p> <pre><code>```json\n{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"europe-maven.pkg.dev\",\n      \"username\": \"_json_key_base64\",\n      \"encrypted\": {\n        \"password\": \"&lt;encrypted base64 service account&gt;\"\n      }\n    }\n  ]\n}\n```\n</code></pre> </li> </ol> </li> <li> <p>Add the following to the <code>packageRules</code> in your repository Renovate configuration file:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchManagers\": [\"maven\", \"gradle\"],\n      \"registryUrls\": [\n        \"https://europe-maven.pkg.dev/&lt;my-gcp-project&gt;/&lt;my-repository&gt;\"\n      ]\n    }\n  ]\n}\n</code></pre> </li> </ol>"},{"location":"javascript/","title":"JavaScript","text":"<p>Renovate supports upgrading JavaScript dependencies specified in <code>package.json</code> files.</p> <p><code>npm</code>, <code>yarn</code>, <code>pnpm</code> and <code>bun</code> are all supported.</p>"},{"location":"json-schema/","title":"JSON Schema","text":"<p>Renovate provides JSON Schemas which can provide autocomplete, documentation and validation in your editor. Consult your editor's documentation for how to configure this functionality.</p> <p>When Renovate creates an onboarding PR, it will automagically add the JSON Schema definition, like so:</p> <pre><code>{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  // ...\n}\n</code></pre> <p>As well as the <code>renovate-schema.json</code>, which covers repository configuration, Renovate also provides configuration for other types of configuration.</p> <p>The following JSON Schemas are available for use:</p> <ul> <li><code>docs.renovatebot.com/renovate-schema.json</code></li> <li><code>docs.renovatebot.com/renovate-inherited-schema.json</code></li> <li><code>docs.renovatebot.com/renovate-global-schema.json</code></li> </ul> <p>See below for more details on each of them.</p>"},{"location":"json-schema/#repository-configuration-renovate-schemajson","title":"Repository configuration (<code>renovate-schema.json</code>)","text":"<p><code>docs.renovatebot.com/renovate-schema.json</code> covers any repository configuration options and is likely to be used in:</p> <ul> <li>a repository onboarded to Renovate</li> <li>any shared configuration presets</li> <li>global self-hosted configuration (alongside configuration options only present in <code>renovate-global-schema.json</code></li> </ul>"},{"location":"json-schema/#repository-inherited-configuration-renovate-inherited-schemajson","title":"Repository + inherited configuration (<code>renovate-inherited-schema.json</code>)","text":"<p><code>docs.renovatebot.com/renovate-inherited-schema.json</code> covers any repository configuration options, and any inherited config options.</p> <p>It is only likely to be used if you create an <code>org-inherited-config.json</code> (or override the filename with <code>inheritConfigFileName</code>) in your shared config repo.</p>"},{"location":"json-schema/#global-self-hosted-configuration-renovate-global-schemajson","title":"Global self-hosted configuration (<code>renovate-global-schema.json</code>)","text":"<p><code>docs.renovatebot.com/renovate-global-schema.json</code> covers any global self-hosted configuration, and is likely to be used in:</p> <ul> <li>a <code>config.js</code></li> <li>command-line arguments</li> </ul>"},{"location":"json-schema/#usage-with-configjs","title":"Usage with <code>config.js</code>","text":"<p>Unfortunately - at time of writing - Language Server Protocol (LSP) servers do no yet provide a way to use a JSON Schema to provide type hints in a JavaScript file.</p>"},{"location":"json-schema/#limitations","title":"Limitations","text":"<p>The JSON Schema is autogenerated from the configuration options that Renovate holds.</p> <p>While we aim to provide relevant options, documentation and validation rules where possible, there may be times where there is a gap in the schema.</p> <p>Additionally, some of Renovate's concepts cannot be validated through JSON Schema, as they require more complex checks that only happen in Renovate's codebase.</p> <p>Using the JSON Schema is recommended for early feedback (in your editor, or for your agent) but it is recommended to look at the documentation around validating your config, for instance using <code>renovate-config-validator</code>, which will provide a more robust and accurate validation process.</p>"},{"location":"json-schema/#previous-majors","title":"Previous majors","text":"<p>The Renovate documentation site tracks the current release version of Renovate.</p> <p>If you are using the current major version of Renovate, but not the most up-to-date version of Renovate, you may find that the JSON Schema describes a configuration option you do not yet have access to.</p> <p>If you're using a previous major version of Renovate, there will likely be many differences between what you have available in your version of Renovate.</p> <p>With this in mind, when Renovate releases a major version, we store an archive of the JSON Schema for the previous major version in Schema Store.</p> <p>Note</p> <p>Previous major versions are only available since Renovate 39 (2025-04-29).</p> <p>For instance, if you are running Renovate 41, you will be able to use i.e. <code>www.schemastore.org/renovate-41.json</code> for your JSON Schema.</p>"},{"location":"known-limitations/","title":"Known limitations","text":"<p>Learn about the limitations of Renovate.</p>"},{"location":"known-limitations/#introduction","title":"Introduction","text":"<p>Renovate, like any computer program has limitations. Sometimes these are functionality limitations - perhaps something is impossible or too complex to do, or we simply haven't implemented it yet. At other times it may be a \"performance\" limitation, because jobs neither start nor complete instantly, even if the user may start with that expectation.</p> <p>This document tries to list out the most commonly seen limitations and describe whether they're permanent and if there's any plans to improving the situation.</p>"},{"location":"known-limitations/#timeschedule-based-limitations","title":"Time/schedule based limitations","text":"<p>When a user configures a schedule in their repo config, they may think that this schedule \"controls\" when Renovate runs. In actuality, Renovate may be running frequently, but skipping updates to the repo if the configured schedule is not met. Additionally, the Renovate admin may have put Renovate on its own schedule, or the job queue may be too long, so Renovate doesn't even get a chance to run on your repository during a certain scheduled time window.</p> <p>For scheduled action to take place, both these need to happen:</p> <ul> <li>Renovate needs to run against your repository</li> <li>The current time needs to fall within your repository's configured schedule</li> </ul>"},{"location":"known-limitations/#the-mend-renovate-app-and-scheduled-jobs","title":"The Mend Renovate app and scheduled jobs","text":"<p>The Mend Renovate App checks each active repository roughly every three hours, if no activity has been seen before then (merged PRs, etc).</p> <p>For this reason, you should set your schedule window to at least three or four hours. This makes it likely that Renovate checks your repository at least once during the schedule.</p>"},{"location":"known-limitations/#automerge-limitations","title":"Automerge limitations","text":"<ul> <li>Renovate automerges at most one branch/PR per run</li> <li>If an automerge happened, the repository run will be restarted at most once. The second run can also potentially automerge, so it may appear as like two automerges in one run.</li> <li>Renovate will only automerge a branch when it is up-to-date with the target branch</li> <li>Renovate may not be able to automerge as many branches as you expect, especially if your base branch is receiving regular commits at the same time</li> </ul> <p>The limitation to only merge one branch per run is because Renovate's dependency and branch state is based on what was present in the base branch at the start of the run. If a branch is merged into the base branch during Renovate's run - including by other users - it means that remaining Renovate branches may have Git conflicts. It also means that Renovate's knowledge about dependencies in the base branch is now invalid and other branches may need changing as a result of the merge.</p> <p>The limitation to only automerge branches which are up-to-date is a decision due to this example:</p> <ul> <li>Two dependencies are in use: <code>alice@1.0.0</code> and <code>bob@1.0.0</code></li> <li>PRs exist for <code>alice@2.0.0</code> and <code>bob@2.0.0</code> and both pass tests</li> <li>The PR for <code>alice@2.0.0</code> is automerged</li> <li>The PR for <code>bob@2.0.0</code> remains open, does not have conflicts, and has all tests passing</li> <li>But <code>alice@2.0.0</code> and <code>bob@2.0.0</code> are incompatible so merging the PR without rebasing and retesting it first would result in a broken base branch</li> </ul>"},{"location":"language-constraints-and-upgrading/","title":"Language constraints and upgrading","text":""},{"location":"language-constraints-and-upgrading/#package-releases-have-language-constraints","title":"Package releases have language constraints","text":"<p>Many ecosystems have the concept where each release of a package has its own language \"constraint\". For example, a npm package may support Node.js 18 and 20 in its <code>v1</code> releases and Node.js 20 and 22 from <code>v2.0.0</code> onwards.</p> <p>In an ideal scenario:</p> <ul> <li>Package files allow a project to show its supported language constraints, and</li> <li>Package registries allow packages to show the supported language constraints per release</li> </ul>"},{"location":"language-constraints-and-upgrading/#restricting-upgrades-to-compatible-releases","title":"Restricting upgrades to compatible releases","text":"<p>By default Renovate does not apply language constraints to upgrades. This means Renovate will propose \"any\" stable upgrade. Renovate will not check if the language version you're using actually supports that upgrade. In certain ecosystems, changes to language constraints are made with a major release, and are documented in the release notes. So Renovate's default behavior may be okay in those ecosystems. For other ecosystems Renovate's default behavior may seem wrong.</p> <p>As a Renovate user, you can opt into strict compatibility filtering by setting <code>constraintsFiltering=strict</code>. Before you set <code>constraintsFiltering=strict</code>, you should:</p> <ul> <li>understand the limitations of this setting</li> <li>understand why <code>constraintsFiltering=strict</code> is not the default behavior</li> </ul> <p>Please keep reading to learn more.</p>"},{"location":"language-constraints-and-upgrading/#language-constraint-updating","title":"Language constraint updating","text":"<p>The first challenge is that Renovate may not yet support the ability to update your language constraints in an automated manner, and even when it does, users may not understand how many updates are depending on it.</p> <p>For example: a Node.js project has set its <code>engines</code> field to <code>\"node\": \"^18.0.0 || ^20.0.0\"</code>.</p> <p>Should Renovate skip Node.js <code>v21</code> because it is a non-LTS release? When Node.js <code>v22</code> releases, should Renovate add it to your <code>engines</code>, or wait until <code>v22</code> becomes the LTS version? When Node.js <code>v18</code> is EOL, should Renovate drop it from the <code>engines</code> field?</p> <p>Renovate can not guess what users want. Users have strong and different opinions on what Renovate should do for each example listed above.</p> <p>Also, even if Renovate guesses right or adds advanced capabilities to allow this to be configurable: users might still wait on any of these \"major\" upgrades for months. If a project waits to create or merge the update to drop Node.js <code>v18</code> from <code>engines</code>, then they can not upgrade to any new versions of library dependencies. Those library dependencies may have dropped support for Node.js <code>v18</code> already.</p>"},{"location":"language-constraints-and-upgrading/#strict-filtering-limitations","title":"Strict filtering limitations","text":"<p>Let's go back to the Node.js project which has its <code>engines</code> field set to <code>\"node\": \"^18.0.0 || ^20.0.0\"</code>.</p> <p>Now also consider a library which sets its <code>engines</code> field to <code>\"node\": \"^18.12.0 || ^20.9.0\"</code> because the library only supports \"LTS releases\" of Node.js. Strictly speaking, this library is not compatible with the project above, because the project has wider requirements for their Node versions. This means Renovate holds back any upgrades for it. Should Renovate somehow \"think\" and assume that this narrower <code>engines</code> support is actually OK? What if the project already used a current version of this library \"in a way that's not officially supported\"?</p> <p>A second problem is that if:</p> <ul> <li>Renovate can not update the language constraints, or</li> <li>a user ignores or does not see the language upgrade</li> </ul> <p>Then the user may not know that many dependencies are out of date, because Renovate is not creating PRs. For example: a project may have 10 dependencies, and 8 of those have updates. But all 8 dependencies need the project to update its language constraints first. The project administrator thinks they are up to date, because Renovate is not creating PRs, but 80% of their dependencies are outdated.</p> <p>In short, users who set <code>constraintsFiltering=strict</code> often do not understand how strict that setting is and how many releases it will filter out.</p>"},{"location":"language-constraints-and-upgrading/#transitive-constraint-limitations","title":"Transitive constraint limitations","text":"<p>Often a library sets language constraints (like the <code>engines</code> examples above), and then depend on libraries with narrower constraints, like <code>\"node\": \"^20.0.0\"</code>. In cases like these, Renovate \"trusts\" the declaration of the library and may create a update, even with strict constraints filtering.</p> <p>For some package managers, like <code>npm</code>, this incompatibility will not be detected or warned about (even during lock file generation), but this may not be a problem for your application. Other package managers, like Poetry, may detect and warn about incompatible language constraints during lock file generation, which Renovate reports as an \"Artifacts update error\".</p>"},{"location":"language-constraints-and-upgrading/#applying-constraints-through-config","title":"Applying constraints through config","text":"<p>You can set language constraints in the Renovate config. For example:</p> Renovate config with Node.js constraints<pre><code>{\n  \"constraints\": {\n    \"node\": \"^18.0.0 || &gt;=20.0.0\"\n  }\n}\n</code></pre> <p>You may need to set constraints in the Renovate config when:</p> <ul> <li>The package manager of the project does not support constraints declarations, or</li> <li>The project has not declared any constraints, or</li> <li>You want Renovate to use different constraints to what's declared in the project</li> </ul> <p>Renovate will not create \"update\" PRs to update any of these versions once they become outdated, so you must update those by hand. For this reason, setting constraints manually in the Renovate config is undesirable. We prefer to fix problems in Renovate itself, instead of you setting constraints.</p>"},{"location":"language-constraints-and-upgrading/#future-work","title":"Future Work","text":"<p>Please start, or join, a GitHub Discussion if you are interested in this topic. Subtopics include:</p> <ul> <li>Improving language constraints update automation in package files</li> <li>Improving versioning calculations of \"subset\" (is range A a subset of range B)</li> </ul>"},{"location":"logo-brand-guidelines/","title":"Logo and brand guidelines","text":"<p>This page explains how you may use the Renovate name, logo and branding.</p>"},{"location":"logo-brand-guidelines/#do-not-pretend-to-be-the-real-renovate-app","title":"Do not pretend to be the real Renovate app","text":"<p>Avoid using our name, logo, or branding in a way that causes people to think you are the real Renovate app on a public platform. For example: do not call your self-hosted version something like @realrenovatebot on GitHub.</p>"},{"location":"logo-brand-guidelines/#do-not-pretend-to-be-a-renovate-developer","title":"Do not pretend to be a Renovate developer","text":"<p>Avoid using our name, logo, or branding in a way that causes people to think you are a developer of Renovate.</p>"},{"location":"logo-brand-guidelines/#allowed-uses-of-the-renovate-name","title":"Allowed uses of the Renovate name","text":"<p>You are allowed to use the Renovate name:</p> <ul> <li>to refer to the official Renovate app</li> <li>as a nickname/shorthand, in contexts where it is clear you are referring to your self-hosted version</li> </ul>"},{"location":"logo-brand-guidelines/#allowed-uses-of-the-renovate-logo","title":"Allowed uses of the Renovate logo","text":"<p>You are allowed to use our logo as:</p> <ul> <li>an icon in your repository readme, that says you are using Renovate</li> <li>part of a badge in your repository readme, that says you are using Renovate</li> <li>an avatar image for your self-hosted version of Renovate, but give it a different name</li> </ul>"},{"location":"logo-brand-guidelines/#allowed-uses-of-the-renovate-branding","title":"Allowed uses of the Renovate branding","text":"<p>Do not use our banner images.</p>"},{"location":"logo-brand-guidelines/#we-keep-the-rights-to-our-logo-name-and-branding","title":"We keep the rights to our logo, name, and branding","text":"<p>You may only use our logo, name and branding as described in this guideline. We keep the rights to our logo, name and branding.</p>"},{"location":"merge-confidence/","title":"Merge Confidence","text":"<p>Look at the Merge Confidence badges before merging to:</p> <ul> <li>Prevent updates which break in production</li> <li>See at a glance if you should update</li> </ul> <p>Merge Confidence finds and flags undeclared breaking releases. It analyzes test and release adoption data from the Mend Renovate App users.</p> <p></p>"},{"location":"merge-confidence/#pull-request-badges","title":"Pull request badges","text":"<p>Merge Confidence adds the following badges to your pull requests:</p> <ul> <li>Age: The age of the package</li> <li>Adoption: The percentage of this package's users (within Renovate) which are using this release</li> <li>Passing: The percentage of updates which have passing tests for this package</li> <li>Confidence: The confidence level for this update</li> </ul>"},{"location":"merge-confidence/#supported-platforms","title":"Supported platforms","text":"<p>Merge Confidence badges for pull requests are available on any supported platform or Renovate distribution, including Mend Remediate.</p>"},{"location":"merge-confidence/#supported-languages","title":"Supported languages","text":"<p>Renovate will show Merge Confidence badges for these languages:</p> Language Datasource Golang <code>go</code> JavaScript <code>npm</code> Java <code>maven</code> Python <code>pypi</code> .NET <code>nuget</code> PHP <code>packagist</code> Ruby <code>rubygems</code> <p>We plan to support more languages soon.</p>"},{"location":"merge-confidence/#enabling-and-disabling","title":"Enabling and disabling","text":"<p>If you use the Mend Renovate App then the badges are enabled automatically.</p> <p>If you're self-hosting Renovate, you can enable the badges by adding the <code>mergeConfidence:all-badges</code> preset to the <code>extends</code> array in your Renovate config:</p> <pre><code>{\n  \"extends\": [\"mergeConfidence:all-badges\"]\n}\n</code></pre> <p>Note</p> <p>The <code>mergeConfidence:age-confidence-badges</code> preset can be used to only show the Age and Confidence badges.</p> <p>If you want to disable the badges in the Mend Renovate App, add the <code>mergeConfidence:all-badges</code> preset to the <code>ignorePresets</code> array in your config:</p> <pre><code>{\n  \"ignorePresets\": [\"mergeConfidence:all-badges\"]\n}\n</code></pre>"},{"location":"merge-confidence/#confidence-levels-and-their-meaning","title":"Confidence levels and their meaning","text":"<p>Merge Confidence uses the following confidence levels:</p> <ul> <li>Low: We think the update contains breaking changes. Often this is expected because it's a <code>major</code> version update, but updates can have unknown breaking changes</li> <li>Neutral: We don't have enough data about the update, or we can't decide if the update should be Low or High confidence</li> <li>High: We rank updates as High confidence when the combination of <code>Age</code>, <code>Adoption</code> and <code>Passing</code> tests means there's a very low chance of breaking changes</li> <li>Very High: We only use this for updates which are months old and have either high <code>Adoption</code> or have very high test <code>Passing</code> scores</li> </ul>"},{"location":"merge-confidence/#how-it-works","title":"How it works","text":"<p>The Mend Renovate App created millions of pull requests on <code>github.com</code> to help developers update their dependencies since 2017. We bundle and analyze metrics such as package <code>Age</code>, package <code>Adoption</code>, and <code>Passing</code> tests. This way we can find packages that have undeclared breaking changes.</p>"},{"location":"merge-confidence/#algorithm","title":"Algorithm","text":"<p>The algorithm that decides on the values is private and is not something we plan to share. Similar to a search engine's algorithm, we plan to adjust and improve it over time, for example by using historical data to set a baseline confidence level for packages.</p>"},{"location":"merge-confidence/#data","title":"Data","text":"<p>We plan to expose much more of the data via a companion website, such as number of users of a package and popular repositories which already updated to the version in question.</p>"},{"location":"merge-confidence/#merge-confidence-workflows","title":"Merge Confidence Workflows","text":"<p>If you are a paying Mend customer, or you are an Open Source project who has access to Mend Renovate Community (OSS) Cloud, you will have access to Merge Confidence Workflows.</p> <p>This makes it possible to introduce more intelligent workflows, such as \"only raise a PR once the update is in High confidence\" or \"automerge Very High confidence updates\".</p>"},{"location":"merge-confidence/#explanations","title":"Explanations","text":""},{"location":"merge-confidence/#package-ranking","title":"Package ranking","text":"<p>npm packages less than three days old can be unpublished, which can result in a service impact if you have updated to a package that gets unpublished. This is why npm packages can only get the High Confidence badge when they are at least three days old.</p>"},{"location":"merge-confidence/#percentage-values-weighting","title":"Percentage values weighting","text":"<p>The percentages for <code>Adoption</code> and <code>Passing</code> are weighted towards Organizations, private repositories, and projects with high test reliability. This means those values aren't raw percentages.</p>"},{"location":"merge-confidence/#questions-and-feedback","title":"Questions and feedback","text":"<p>If you have any feedback about Merge Confidence, please add it to our feedback megathread.</p>"},{"location":"node/","title":"Node.js Versions","text":"<p>Renovate can upgrade the Node.js runtime used by your project. This way you're using the latest bug fixes, performance improvements, security mitigations, etc.</p>"},{"location":"node/#lts-codenames","title":"LTS codenames","text":"<p>Renovate understands codenames for Node.js LTS releases and will offer upgrades for them (e.g. from <code>fermium</code> to <code>gallium</code>) as long as the <code>node</code> versioning scheme is being used.</p>"},{"location":"node/#file-support","title":"File Support","text":"<p>Renovate can manage the Node.js version in the following files:</p> <ul> <li>The <code>engines</code> field in <code>package.json</code></li> <li>The <code>devEngines.runtime</code> field in <code>package.json</code></li> <li>The <code>volta</code> field in <code>package.json</code></li> <li>The <code>.nvmrc</code> file for the Node Version Manager</li> <li>The <code>.node-version</code> file for the nodenv environment manager</li> <li>The <code>.tool-versions</code> file for the asdf version manager</li> <li>The mise configuration files (e.g., <code>mise.toml</code>, <code>.mise.toml</code>, <code>.config/mise.toml</code>) for the mise version manager</li> <li>The <code>node_js</code> field in <code>.travis.yml</code></li> </ul>"},{"location":"node/#package-manager-versions","title":"Package manager versions","text":"<p>Renovate can manage the package manager version in the following fields in <code>package.json</code>:</p> <ul> <li>The <code>packageManager</code> field</li> <li>The <code>devEngines.packageManager</code> field</li> </ul>"},{"location":"node/#configuring-which-version-of-npm-renovate-uses","title":"Configuring which version of npm Renovate uses","text":"<p>When <code>binarySource=install</code>, such as in the Mend Renovate App, Renovate will choose and install an <code>npm</code> version dynamically.</p> <p>To control which version or constraint is installed, you should use the <code>engines.npm</code> property in your <code>package.json</code> file. Renovate will then use that version constraint for npm when it creates a pull request.</p> <p>For example, if you want to use at least npm <code>8.1.0</code> and also allow newer versions of npm in the <code>8.x</code> range, you would put this in your <code>package.json</code> file:</p> package.json<pre><code>{\n  \"engines\": {\n    \"npm\": \"^8.1.0\"\n  }\n}\n</code></pre> <p>Alternatively, the npm version can also be configured via the <code>constraints</code> option.</p>"},{"location":"noise-reduction/","title":"Noise Reduction","text":"<p>Generally, the first reaction people have to automated dependency updates like Renovate is \"oh great/feel the power of automation\". The next reaction a few days or weeks later is often \"this is getting overwhelming\". Indeed, if you leave Renovate on its default settings of raising a PR every single time any dependency receives any update.. you will get a lot of PRs and related notifications. This document will give you some ideas of how to reduce the amount of \"noise\" in your repository and the Pros/Cons of each approach.</p> <p>Of course, please keep in mind that people's definitions of \"noise\" may differ. For some people, it's noisy only if they get a notification or email from GitHub. For others, too many commits in their base branch may be \"noise\". In other words, your mileage may vary. If you have any ideas on this topic, please contact the author by starting a new discussion on the Renovate repository.</p>"},{"location":"noise-reduction/#package-grouping","title":"Package Grouping","text":"<p>To reduce noise, you can reduce the number of updates in total, and a good way to do that is via intelligent grouping of related packages.</p> <p>As an example, our default <code>\":app\"</code> and <code>\":library\"</code> presets include the rule <code>\"group:monorepos\"</code>, which means that \"sibling\" packages from known monorepos will always be grouped into the same branch/PR by renovate. For example, all <code>@angular/*</code> packages that are updated at the same time will be raised in a \"Renovate angular monorepo packages\" PR. And every package in the React monorepo will be grouped together in a React monorepo PR too.</p> <p>You may wish to take this further, for example you might want to group together all packages related to <code>eslint</code>, even if they come from separate repositories/authors. In that case you might create a config like this:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"/eslint/\"],\n      \"groupName\": \"eslint\"\n    }\n  ]\n}\n</code></pre> <p>By setting <code>matchPackageNames</code> to <code>/eslint/</code>, it means that any package with eslint anywhere in its name will be grouped into a <code>renovate/eslint</code> branch and related PR.</p>"},{"location":"noise-reduction/#be-smart-about-grouping-dependencies","title":"Be smart about grouping dependencies","text":"<p>Grouping dependencies may help you, but can also cause problems. Sometimes you're better off getting a single PR per dependency!</p> <p>Grouping dependencies versus single PRs:</p> <ul> <li>Grouping dependencies increases the chance that the branch has an error (\"break\" your build)</li> <li>When you upgrade multiple dependencies in one PR, it takes longer to find out which package broke the build</li> <li>If a group PR \"breaks\", you'll have to wait upgrading your other dependencies until all updates in the PR pass</li> <li>You will have less flexibility when one (or more) dependencies in the group have a major upgrade, but the other dependencies are good to go</li> </ul>"},{"location":"noise-reduction/#scheduling-renovate","title":"Scheduling Renovate","text":"<p>For a high level overview of scheduling when Renovate runs, read the key concepts, scheduling docs.</p> <p>On its own, the Renovate CLI tool runs once and then exits. Hence, it only runs as often as its administrator sets it to (e.g. via <code>cron</code>).</p> <p>For the Mend Renovate App, it currently runs continuously using a job queue that gets refreshed hourly for Enterprise users, and every 4 hours for Community users, or when you make relevant commits to your repository. You can expect to get PRs at any time of the day, e.g. soon after versions are published to npm.</p> <p>Receiving PRs at any hour can increase the feeling of being \"overwhelmed\" by updates and possibly interrupt your flow during working hours, so many Renovate users also consider reducing Renovate's schedule to be outside their normal working hours, for example weeknights and weekends. This is achievable by configuring <code>schedule</code> in your Renovate config and optionally <code>timezone</code> (Renovate's default time zone is UTC, so you may find it easier to write schedules if you override <code>timezone</code> to your local one).</p> <p>Another example of adjusting schedules to fit with your workflow might be if your company performs releases every Monday. In that case, you might schedule Renovate to run every Tuesday after midnight to pick up new dependency updates that you can test over the following week before the next release.</p> <p>Caution: You need to make sure you leave yourself and Renovate enough time in a week to actually get all your updating and merging done. There are multiple reasons why Renovate may need to \"recreate\" PRs after you merge another:</p> <ol> <li>Conflict with <code>package.json</code> (sometimes)</li> <li>Conflict with lock files (often)</li> <li>If you have configured Renovate or GitHub that PRs must always be kept up-to-date with the base branch</li> </ol> <p>Any of the above reasons can lead to a Renovate branch being considered \"stale\" and then Renovate needs to rebase it off the base branch before you can test and merge again, and Renovate won't do this until it's back in schedule.</p>"},{"location":"noise-reduction/#selective-scheduling","title":"Selective scheduling","text":"<p>Don't think that you need to apply blanket rules to scheduling. Remember that Renovate's configuration is highly flexible so you can configure <code>automerge</code> anywhere from globally (entire repo) right down to a package/upgrade type level. You could even configure a nonsensical rule like: \"patch updates of <code>jquery</code> are for Mondays only\".</p> <p>Remember our example of grouping all <code>eslint</code> packages? If you think about it, updates to <code>eslint</code> rules don't exactly need to be applied in real time! You don't want to get too far behind, so how about we update <code>eslint</code> packages only once a month?</p> Update ESLint packages once a month<pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Schedule updates on first day of each month\",\n      \"matchPackageNames\": [\"/eslint/\"],\n      \"groupName\": \"eslint\",\n      \"schedule\": [\"* * 1 * *\"]\n    }\n  ]\n}\n</code></pre> <p>Or perhaps at least weekly:</p> Update ESLint packages weekly<pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Schedule updates on Monday mornings(before 4 AM)\",\n      \"matchPackageNames\": [\"/eslint/\"],\n      \"groupName\": \"eslint\",\n      \"schedule\": [\"* 0-3 * * 1\"]\n    }\n  ]\n}\n</code></pre> <p>If you're wondering what is supported and not, under the hood, the schedule is parsed using @breejs/later using the <code>later.parse.text(scheduleString)</code> API. Read the parser documentation at breejs.github.io/later/parsers.html#text. Renovate does not support scheduled minutes or \"at an exact time\" granularity. Granularity must be at least one hour.</p>"},{"location":"noise-reduction/#automerging","title":"Automerging","text":"<p>Automerging is a Renovate feature that can save you a lot of time/noise directly, while also benefiting grouping and scheduling. In short: it means that Renovate can merge PRs or even branches itself if they pass your tests.</p> <p>We recommend that you enable automerge for any type of dependency update where you would select Merge anyway. We all know that there are some types of updates that we (nearly) always verify manually before merging, and plenty of others that we don't bother looking at unless tests fail. Every time you select Merge on a Renovate PR without manually testing it, you should consider if you can enable automerge and save yourself the time in future.</p> <p>Automerge works particularly well for <code>devDependencies</code> and for production <code>dependencies</code> that have great test coverage.</p> <p>For example, if you have <code>jest</code> or <code>mocha</code> as a dependency, and it has an upgrade with passing tests: automerge them! If you have a linter like <code>eslint</code> or <code>tslint</code> and its update passes: automerge them! If you have an API with 100% test coverage and <code>express</code> is updated: automerge it!</p>"},{"location":"noise-reduction/#branch-automerging","title":"Branch automerging","text":"<p>Those of you familiar with GitHub might note that even if you automerge PRs, you are still going to get notifications (noise) anyway - one when the PR is created and another when it is merged. For this reason we recommend you consider setting <code>automergeType=branch</code> which will mean:</p> <ul> <li>Renovate first creates a branch and no PR</li> <li>If tests pass, Renovate pushes a commit directly to the base branch without PR</li> <li>If tests fail, Renovate raises a PR for you to review</li> </ul> <p>The result is that passing updates are essentially \"silent\" - the only sign of them are the commits to your base branch.</p>"},{"location":"noise-reduction/#automerging-and-scheduling","title":"Automerging and scheduling","text":"<p>Automerging is particularly beneficial if you have configured a schedule, because Renovate on its own may be able to automerge the majority of your updates. And this is especially so if your repository needs rebasing, e.g. because you use lock files. e.g. let's say you have dependencies <code>abc</code> and <code>xyz</code> with upgrades, and you use a <code>yarn.lock</code> file.</p> <ul> <li>At the start of the schedule, <code>Renovate</code> will create branches for <code>abc</code> and <code>xyz</code> upgrades, including <code>yarn.lock</code> updates</li> <li>After <code>abc</code> passes tests, <code>Renovate</code> will automerge it to your base branch</li> <li>The <code>xyz</code> branch probably now has <code>yarn.lock</code> conflicts</li> <li>Renovate will immediately check all other branches and rebase them</li> <li>The change to <code>xyz</code> branch will trigger another round of CI tests</li> <li>After the updated <code>xyz</code> branch passes, Renovate will automerge it too</li> </ul> <p>This is a lot better than you waking up to two PRs and then having to deal with conflicts yourself after you merge the first one.</p> <p>Remember our running <code>eslint</code> example? Let's automerge it if all the linting updates pass:</p> Automerge ESLint packages<pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Schedule updates on Monday mornings(before 4 AM)\",\n      \"matchPackageNames\": [\"/eslint/\"],\n      \"groupName\": \"eslint\",\n      \"schedule\": [\"* 0-3 * * 1\"],\n      \"automerge\": true,\n      \"automergeType\": \"branch\"\n    }\n  ]\n}\n</code></pre> <p>Have you come up with a rule that would help others? How about a PR to our presets? For example the above rule could be named <code>\":automergeEslintWeekly\"</code> in <code>schedule.ts</code>.</p>"},{"location":"noise-reduction/#lock-file-considerations","title":"Lock file considerations","text":"<p>Using lock files greatly increases the chance that merging one PR will result in a second PR becoming conflicted with the base branch. The table below highlights different noise reduction strategies and their effect on pull request and potential lock file conflicts:</p> Action Effect on pull requests Chance of lock file conflicts Group dependencies together Decreases separate PRs Decreases Automerge dependencies Decreases concurrent PRs Decreases Decrease scheduled time for Renovate Increases concurrent PRs Increases"},{"location":"noise-reduction/#the-future-of-noise-reduction","title":"The Future of Noise Reduction","text":"<p>First of all, if you ever have any ideas about how to make Renovate less noisy, please raise or comment on issues in the main repository. Our philosophy is:</p> <ol> <li>Nearly everyone should use Renovate-like dependency update automation</li> <li>Over time, you should \"see\" Renovate less and less</li> </ol> <p>One of our hopes with preset configs is that a set of \"sensible\" configs can be maintained by the community that combine grouping, scheduling and automerging to reduce the amount of noise in repositories with little downside or increased risk. Such lists could be maintained and used somewhat like Adblock lists - kept up to date by maintainers but for the majority of users they are simply trusted/automatic/invisible.</p>"},{"location":"nuget/","title":"NuGet","text":"<p>Renovate can upgrade dependencies in these files:</p> <ul> <li><code>.csproj</code></li> <li><code>.fsproj</code></li> <li><code>.sqlproj</code> (SSDT SQL projects)</li> <li><code>.vbproj</code></li> </ul>"},{"location":"nuget/#version-support","title":"Version Support","text":"<p>Renovate only works with SDK-style <code>.csproj</code>, <code>.fsproj</code> or <code>.vbproj</code> files. By default, this includes:</p> <ul> <li>.NET Core 1.0 and above</li> <li>.NET Standard class libraries</li> <li><code>.csproj</code>, <code>.fsproj</code> or <code>.vbproj</code> files that use the SDK-style syntax</li> </ul> <p>To convert your .NET Framework <code>.csproj</code>, <code>.fsproj</code> or <code>.vbproj</code> files into an SDK-style project, follow the steps in this guide.</p>"},{"location":"nuget/#how-it-works","title":"How it works","text":"<ol> <li>Renovate searches in each repository for any files with a <code>.csproj</code>, <code>.fsproj</code>, <code>.sqlproj</code>, or <code>.vbproj</code> extension</li> <li>Existing dependencies are extracted from <code>&lt;PackageReference&gt;</code> and <code>&lt;PackageVersion&gt;</code> tags, and MSBuild SDK versions from <code>&lt;Sdk&gt;</code>, <code>&lt;Import Sdk&gt;</code>, and <code>&lt;Project Sdk=\"name/version\"&gt;</code> elements</li> <li>Renovate looks up the latest version on nuget.org (or an alternative feed if configured) to see if any upgrades are available</li> <li> <p>If the source package includes a GitHub URL as its source, and has either:</p> <ul> <li>a \"changelog\" file, or</li> <li>uses GitHub releases</li> </ul> <p>then release notes for each version are embedded in the generated PR</p> </li> </ol> <p>If your project file references a <code>packages.config</code> file, no dependencies will be extracted. Find out here how to migrate from <code>packages.config</code> to <code>PackageReference</code>.</p>"},{"location":"nuget/#alternate-feeds","title":"Alternate feeds","text":"<p>By default Renovate performs all lookups on <code>https://api.nuget.org/v3/index.json</code>, but you can set alternative NuGet feeds. You can set alternative feeds:</p> <ul> <li>in a <code>NuGet.config</code> file within your repository (Renovate will not search outside the repository), or</li> <li>in a Renovate configuration options file like <code>renovate.json</code></li> </ul> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"nuget\"],\n      \"registryUrls\": [\n        \"https://api.nuget.org/v3/index.json\",\n        \"https://example1.com/nuget/\",\n        \"https://example2.com/nuget/v3/index.json\"\n      ]\n    }\n  ]\n}\n</code></pre> <p>In the example above we've set three NuGet feeds. The package resolving process uses the <code>merge</code> strategy to handle the three feeds. All feeds are checked for dependency updates, and duplicate updates are merged into a single dependency update.</p> <p>Note</p> <p>Some alternative feeds (e.g. Artifactory) do not implement the full set of required NuGet resources for the V3 API. If the <code>PackageBaseAddress</code> resource does not exist, Renovate falls back to using the <code>projectUrl</code> from the dependency's catalog entry as the <code>sourceUrl</code> for the dependency, affecting changelog detection.</p>"},{"location":"nuget/#protocol-versions","title":"Protocol versions","text":"<p>NuGet supports two protocol versions, <code>v2</code> and <code>v3</code>. The NuGet client and server must use the same version. When Renovate acts as the client, it can use the <code>v2</code> and <code>v3</code> protocols.</p> <p>By default, Renovate uses the <code>v2</code> protocol. If the configured feed URL ends with <code>index.json</code>, Renovate uses the <code>v3</code> protocol. So Renovate behaves like the official NuGet client.</p>"},{"location":"nuget/#v3-feed-url-not-ending-with-indexjson","title":"v3 feed URL not ending with index.json","text":"<p>If a <code>v3</code> feed URL does not end with <code>index.json</code>, you must specify the version explicitly.</p> <ul> <li> <p>If the feed is defined in a <code>NuGet.config</code> file set the <code>protocolVersion</code> attribute to <code>3</code>:</p> <pre><code>&lt;packageSources&gt;\n   &lt;clear /&gt;\n   &lt;add key=\"myV3feed\" value=\"http://myV3feed\" protocolVersion=\"3\" /&gt;\n&lt;/packageSources&gt;\n</code></pre> </li> <li> <p>If the feed is defined via Renovate configuration append <code>#protocolVersion=3</code> to the registry URL:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"nuget\"],\n      \"registryUrls\": [\"https://example1.com/nuget/#protocolVersion=3\"]\n    }\n  ]\n}\n</code></pre> </li> </ul> <p>You may need this workaround when you use the JFrog Artifactory.</p>"},{"location":"nuget/#authenticated-feeds","title":"Authenticated feeds","text":"<p>Credentials for authenticated/private feeds can be given via host rules in the configuration options (file or command line parameter).</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"hostType\": \"nuget\",\n      \"matchHost\": \"http://example1.com/nuget\",\n      \"username\": \"root\",\n      \"password\": \"p4$$w0rd\"\n    }\n  ]\n}\n</code></pre> <p>If you use Azure DevOps:</p> <ul> <li>set <code>matchHost</code> to <code>pkgs.dev.azure.com</code></li> <li>set the username, so Renovate can build the project when it creates the PR</li> </ul> <p>Note</p> <p>Only Basic HTTP authentication (via username and password) is supported. For Azure DevOps: use a PAT with <code>read</code> permissions on <code>Packaging</code>. The username of the PAT must match the username of the user of the PAT. The generated <code>nuget.config</code> forces the basic authentication, which cannot be overridden externally!</p>"},{"location":"nuget/#ignoring-package-files-when-using-presets","title":"Ignoring package files when using presets","text":"<p>Because <code>nuget</code> manager has a dedicated <code>ignorePaths</code> entry in the <code>:ignoreModulesAndTests</code> preset, if you're using any presets that extend it (like <code>config:recommended</code>), you need to put your <code>ignorePaths</code> inside the <code>nuget</code> section for it to be merged. For example:</p> <pre><code>{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"extends\": [\"config:recommended\"],\n  \"nuget\": {\n    \"ignorePaths\": [\"IgnoreThisPackage/**\"]\n  }\n}\n</code></pre> <p>Otherwise, all <code>nuget.ignorePaths</code> values in <code>:ignoreModulesAndTests</code> will override values you put inside <code>ignorePaths</code> at the top-level config.</p>"},{"location":"nuget/#future-work","title":"Future work","text":"<p>We welcome contributions or feature requests to support more patterns or use cases.</p>"},{"location":"opentelemetry/","title":"OpenTelemetry and Renovate","text":"<p>This feature is flagged as experimental</p> <p>Experimental features might be changed at any time.   Renovate's OpenTelemetry support is stable enough to use in production, but there may be changes that rename attributes or fix bugs in a way that could be breaking to users, even in non-major version updates.</p> <p>Renovate supports the OpenTelemetry monitoring and observability standard.</p> <p>OpenTelemetry has three types of observability data it supports within the OpenTelemetry Protocol (OTLP):</p> <ul> <li>traces</li> <li>metrics</li> <li>logs</li> </ul> <p>Note</p> <p>While the OpenTelemetry Protocol (OTLP) support traces, metrics, and logs, Renovate only supports traces, and some metrics.   This means Renovate does not support other observability data like: stats on caching, error events, number of found updates, and so on.</p>"},{"location":"opentelemetry/#examples","title":"Examples","text":"<p>An example for setting up a local OpenTelemetry test setup with Docker can be found on OpenTelemetry examples page.</p>"},{"location":"opentelemetry/#usage","title":"Usage","text":"<p>To activate the instrumentation, you must set the <code>OTEL_EXPORTER_OTLP_ENDPOINT</code> environment variable. This variable controls the endpoint for the telemetry data. Once this endpoint is set, you can use all environment variables listed in the OpenTelemetry specification. You can also set the following environment variables:</p> <ul> <li><code>OTEL_SERVICE_NAME</code>: to control the service name that will be emitted in traces, defaults to <code>renovate</code></li> <li><code>OTEL_SERVICE_NAMESPACE</code>: to control the service namespace that will be emitted in traces, defaults to <code>renovatebot.com</code></li> <li><code>OTEL_SERVICE_VERSION</code>: to control the service version that will be emitted in traces, defaults to using the release version of Renovate</li> </ul> <p>The following resource detectors are used:</p> <ul> <li><code>EnvDetector</code> from @opentelemetry/resources to allow users to add the custom attributes</li> <li><code>GithubDetector</code> from @opentelemetry/resource-detector-github, to determine if it's running in Renovate's GitHub Action, or via the npm package in GitHub Actions</li> <li><code>AWSDetector</code> from @opentelemetry/resource-detector-aws Users hosting on AWS</li> <li><code>GcpDetector</code> from @opentelemetry/resource-detector-gcp Users hosting on GCP</li> <li><code>AzureDetector</code> from @opentelemetry/resource-detector-azure Users hosting on Azure</li> </ul> <p>You can disable all cloud detectors by setting the <code>RENOVATE_USE_CLOUD_METADATA_SERVICES</code> environment variable to <code>false</code>. Then only the <code>EnvDetector</code> will be used.</p> <p>Additionally you can use <code>OTEL_NODE_RESOURCE_DETECTORS</code> environment variable to control which resource detectors are used. The default values is <code>all</code>, which means all of the above detectors are used. Set it to <code>none</code> to disable all detectors, or a comma-separated list of the following values to specify which detectors to use:</p> <ul> <li><code>aws</code></li> <li><code>azure</code></li> <li><code>gcp</code></li> <li><code>github</code></li> <li><code>env</code></li> </ul>"},{"location":"opentelemetry/#opentelemetry-exporter-protocol","title":"OpenTelemetry exporter protocol","text":"<p>Renovate supports sending traces via OTLP/gRPC (via <code>@opentelemetry/exporter-trace-otlp-grpc</code>), OTLP/HTTP with protobuf encoding (via <code>@opentelemetry/exporter-trace-otlp-proto</code>), or OTLP/HTTP with JSON encoding (via <code>@opentelemetry/exporter-trace-otlp-http</code>).</p> <p>Set the <code>OTEL_EXPORTER_OTLP_PROTOCOL</code> (or the signal-specific <code>OTEL_EXPORTER_OTLP_TRACES_PROTOCOL</code>, which takes precedence) environment variable to one of <code>grpc</code>, <code>http/protobuf</code>, or <code>http/json</code> to choose the protocol.</p> <p>If neither variable is set, Renovate defaults to <code>http/json</code></p>"},{"location":"opentelemetry/#file-exporter","title":"File exporter","text":"<p>The OpenTelemetry data can also be exported into a newline-delimited JSON (NDJSON) file, in OTLP JSON format.</p> <p>This is configured using the <code>RENOVATE_TRACING_FILE_EXPORTER_PATH</code> environment variable.</p> <p>You can then ingest this data into other tools, for instance:</p> Exporting the JSONL OTLP file to a local OpenTelemetry traces API<pre><code># bash-specific syntax\nwhile IFS= read -r line || [ -n \"$line\" ]; do\n  curl -s -X POST http://localhost:4318/v1/traces \\\n    -H 'Content-Type: application/json' \\\n    --data-binary @- &lt;&lt;&lt; \"$line\"\ndone &lt; /tmp/traces.jsonl\n</code></pre>"},{"location":"opentelemetry/#supported-otlp-data","title":"Supported OTLP data","text":""},{"location":"opentelemetry/#traces","title":"Traces","text":"<p>Renovate provides instrumentation through traces for (non-exhaustively):</p> <ul> <li>HTTP requests, via @opentelemetry/instrumentation-http</li> <li>A trace for each \"splits\" Renovate performs - <code>init</code>, <code>extract</code>, <code>lookup</code> and <code>update</code></li> <li>Any command execution (<code>rawExec: ...</code>)</li> <li>Any Git operations</li> <li>Per-manager traces when performing the <code>lookup</code> and <code>extract</code> splits</li> <li>Per-branch traces when performing the <code>update</code> split</li> <li>Cache lifecycle operations (repository cache load/save, package cache init/destroy)</li> <li>Important functions (more instrumentation be added)</li> </ul> <p>As well as following OpenTelemetry's semantic conventions where possible, Renovate defines several Custom Attributes, which can be found in <code>lib/instrumentation/types.ts</code>.</p>"},{"location":"opentelemetry/#metrics","title":"Metrics","text":"<p>Renovate does not currently support metrics in an OTLP format.</p> <p>However, as seen in the OpenTelemetry examples page, it is possible to use the spanmetrics connector to automagically generate metrics from the tracing support Renovate has.</p>"},{"location":"opentelemetry/#logs","title":"Logs","text":"<p>Renovate does not currently support logging in an OTLP format.</p>"},{"location":"opentelemetry/#debugging","title":"Debugging","text":"<p>To help you debug, you can print the telemetry to the console. Use the environment variable <code>RENOVATE_TRACING_CONSOLE_EXPORTER</code>.</p> <p>You can also set <code>OTEL_LOG_LEVEL</code> to control the log level of OpenTelemetry's internal diagnostics, which can be helpful for debugging.</p>"},{"location":"opentelemetry/#help-wanted","title":"Help wanted","text":"<p>We're continually looking to improve Renovate's instrumentation, and are aware there may be gaps in instrumentation.</p> <p>As with the rest of Renovate, any additional contributions are very welcome!</p> <p>You can see our current planned TODO list using the <code>core:instrumentation</code> label.</p>"},{"location":"php/","title":"Automated Dependency Updates for PHP Composer Dependencies","text":"<p>Renovate can upgrade dependencies in PHP's <code>composer.json</code> and <code>composer.lock</code> files.</p>"},{"location":"php/#how-it-works","title":"How It Works","text":"<ol> <li>Renovate searches in each repository for any <code>composer.json</code> files</li> <li>Existing dependencies are extracted from the relevant sections of the JSON</li> <li>Renovate resolves the dependency on Packagist (or elsewhere if configured), and filter for SemVer versions</li> <li>A PR is created with <code>composer.json</code> and <code>composer.lock</code> updated in the same commit</li> <li>If the source repository has either a \"changelog\" file or uses GitHub releases, then Release Notes for each version will be embedded in the generated PR</li> </ol>"},{"location":"php/#enabling","title":"Enabling","text":"<p>Either install the Renovate App on GitHub, or check out Renovate OSS for self-hosted.</p>"},{"location":"php/#private-packages","title":"Private packages","text":"<p>If you are using a privately hosted Composer package you can pass the credentials via the <code>hostRules</code> configuration.</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"some.vendor.com\",\n      \"hostType\": \"packagist\",\n      \"username\": \"&lt;your-username&gt;\",\n      \"password\": \"&lt;your-password&gt;\"\n    },\n    {\n      \"matchHost\": \"bearer-auth.for.vendor.com\",\n      \"hostType\": \"packagist\",\n      \"token\": \"abcdef0123456789\"\n    }\n  ]\n}\n</code></pre> <p>This host rule is best added to the self-hosted <code>config.js</code> config so that it is not visible to users of the repository. If you are using the Mend Renovate App then you can encrypt it with Renovate's public key instead, so that only Renovate can decrypt it.</p> <p>Go to https://app.renovatebot.com/encrypt, paste in the secret string you wish to encrypt, select Encrypt, then copy the encrypted result. You may encrypt your <code>password</code> only, but you can encrypt your <code>username</code> as well.</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"some.vendor.com\",\n      \"hostType\": \"packagist\",\n      \"encrypted\": {\n        \"username\": \"&lt;your-encrypted-username&gt;\",\n        \"password\": \"&lt;your-encrypted-password&gt;\"\n      }\n    },\n    {\n      \"matchHost\": \"bearer-auth.for.vendor.com\",\n      \"hostType\": \"packagist\",\n      \"encrypted\": {\n        \"token\": \"&lt;your-encrypted-token&gt;\"\n      }\n    }\n  ]\n}\n</code></pre>"},{"location":"php/#update-all-dependencies","title":"Update all dependencies","text":"<p>By default, Renovate will invoke <code>composer update</code> with the <code>--with-dependencies</code> flag. Add <code>composerWithAll</code> to your <code>postUpdateOptions</code> array to use the <code>--with-all-dependencies</code> flag instead.</p>"},{"location":"presets-abandonments/","title":"Abandonment Presets","text":""},{"location":"presets-abandonments/#abandonmentsrecommended","title":"<code>abandonments:recommended</code>","text":"<p>Recommended configuration for abandoned packages, treating packages without a release for 1 year as abandoned, while taking into account community-sourced overrides.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"abandonmentThreshold\": \"1 year\",\n      \"matchPackageNames\": [\n        \"*\"\n      ]\n    },\n    {\n      \"abandonmentThreshold\": null,\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@types/*\"\n      ]\n    },\n    {\n      \"abandonmentThreshold\": \"5 years\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"eslint-plugin-no-only-tests\"\n      ]\n    },\n    {\n      \"abandonmentThreshold\": \"6 years\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"lodash\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-config/","title":"Full Config Presets","text":""},{"location":"presets-config/#configbest-practices","title":"<code>config:best-practices</code>","text":"<p>Preset with best practices from the Renovate maintainers. Recommended for advanced users, who want to follow our best practices.</p> <pre><code>{\n  \"extends\": [\n    \"config:recommended\", // (1)!\n    \"docker:pinDigests\", // (2)!\n    \"helpers:pinGitHubActionDigests\", // (3)!\n    \":configMigration\", // (4)!\n    \":pinDevDependencies\", // (5)!\n    \"abandonments:recommended\", // (6)!\n    \"security:minimumReleaseAgeNpm\", // (7)!\n    \":maintainLockFilesWeekly\" // (8)!\n  ]\n}\n</code></pre> <ol> <li><code>config:recommended</code>: Recommended configuration for most users. It does not matter what programming language you use.</li> <li><code>docker:pinDigests</code>: Pin Docker digests.</li> <li><code>helpers:pinGitHubActionDigests</code>: Pin <code>github-action</code> digests.</li> <li><code>:configMigration</code>: Enable Renovate configuration migration PRs when needed.</li> <li><code>:pinDevDependencies</code>: Pin dependency versions for development dependencies.</li> <li><code>abandonments:recommended</code>: Recommended configuration for abandoned packages, treating packages without a release for 1 year as abandoned, while taking into account community-sourced overrides.</li> <li><code>security:minimumReleaseAgeNpm</code>: Wait until the npm package is three days old before raising the update. This a) introduces a short delay to allow for malware researchers and scanners to (possibly) detect any malicious behaviour in packages, and b) prevents the maintainer and/or NPM from unpublishing a package you already upgraded to, breaking builds.</li> <li><code>:maintainLockFilesWeekly</code>: Run lock file maintenance (updates) early Monday mornings.</li> </ol>"},{"location":"presets-config/#configjs-app","title":"<code>config:js-app</code>","text":"<p>Default configuration for webapps.</p> <pre><code>{\n  \"extends\": [\n    \"config:recommended\", // (1)!\n    \":pinAllExceptPeerDependencies\" // (2)!\n  ]\n}\n</code></pre> <ol> <li><code>config:recommended</code>: Recommended configuration for most users. It does not matter what programming language you use.</li> <li><code>:pinAllExceptPeerDependencies</code>: Pin all dependency versions except <code>peerDependencies</code>.</li> </ol>"},{"location":"presets-config/#configjs-lib","title":"<code>config:js-lib</code>","text":"<p>Default configuration for libraries.</p> <pre><code>{\n  \"extends\": [\n    \"config:recommended\", // (1)!\n    \":pinOnlyDevDependencies\" // (2)!\n  ]\n}\n</code></pre> <ol> <li><code>config:recommended</code>: Recommended configuration for most users. It does not matter what programming language you use.</li> <li><code>:pinOnlyDevDependencies</code>: Pin dependency versions for development dependencies and retain SemVer ranges for others.</li> </ol>"},{"location":"presets-config/#configrecommended","title":"<code>config:recommended</code>","text":"<p>Recommended configuration for most users. It does not matter what programming language you use.</p> <pre><code>{\n  \"extends\": [\n    \":dependencyDashboard\", // (1)!\n    \":semanticPrefixFixDepsChoreOthers\", // (2)!\n    \":ignoreModulesAndTests\", // (3)!\n    \"group:monorepos\", // (4)!\n    \"group:recommended\", // (5)!\n    \"mergeConfidence:age-confidence-badges\", // (6)!\n    \"replacements:all\", // (7)!\n    \"workarounds:all\", // (8)!\n    \"security:php2shell\", // (9)!\n    \"helpers:forgejoDigestChangelogs\", // (10)!\n    \"helpers:giteaDigestChangelogs\", // (11)!\n    \"helpers:githubDigestChangelogs\", // (12)!\n    \"helpers:gitlabDigestChangelogs\", // (13)!\n    \"helpers:goXPackagesChangelogLink\", // (14)!\n    \"helpers:goXPackagesNameLink\", // (15)!\n    \"helpers:renovateChangelog\" // (16)!\n  ]\n}\n</code></pre> <ol> <li><code>:dependencyDashboard</code>: Enable Renovate Dependency Dashboard creation.</li> <li><code>:semanticPrefixFixDepsChoreOthers</code>: Use semantic commit type <code>fix</code> for dependencies and <code>chore</code> for all others if semantic commits are in use.</li> <li><code>:ignoreModulesAndTests</code>: Ignore <code>node_modules</code>, <code>bower_components</code>, <code>vendor</code> and various test/tests (except for nuget) directories.</li> <li><code>group:monorepos</code>: Group known monorepo packages together.</li> <li><code>group:recommended</code>: Use curated list of recommended non-monorepo package groupings.</li> <li><code>mergeConfidence:age-confidence-badges</code>: Show only the Age and Confidence Merge Confidence badges for pull requests.</li> <li><code>replacements:all</code>: Apply crowd-sourced package replacement rules.</li> <li><code>workarounds:all</code>: Apply crowd-sourced workarounds for known problems with packages.</li> <li><code>security:php2shell</code>: Update vulnerable PHP runtime pins for CVE-2026-109618 and CVE-2026-109619.</li> <li><code>helpers:forgejoDigestChangelogs</code>: Ensure that every dependency pinned by digest and sourced from Forgejo contains a link to the commit-to-commit diff</li> <li><code>helpers:giteaDigestChangelogs</code>: Ensure that every dependency pinned by digest and sourced from Gitea contains a link to the commit-to-commit diff</li> <li><code>helpers:githubDigestChangelogs</code>: Ensure that every dependency pinned by digest and sourced from GitHub.com and Github enterprise contains a link to the commit-to-commit diff</li> <li><code>helpers:gitlabDigestChangelogs</code>: Ensure that every dependency pinned by digest and sourced from GitLab.com contains a link to the commit-to-commit diff</li> <li><code>helpers:goXPackagesChangelogLink</code>: Correctly link to the source code for golang.org/x packages</li> <li><code>helpers:goXPackagesNameLink</code>: Link to pkg.go.dev/... for golang.org/x packages' title</li> <li><code>helpers:renovateChangelog</code>: Provide a link to octochangelog's improved breakdown for Renovate's changelogs</li> </ol>"},{"location":"presets-config/#configsemverallmonthly","title":"<code>config:semverAllMonthly</code>","text":"<p>Preserve SemVer ranges and update everything together once a month. (excluding replacements and lockfile maintenance)</p> <pre><code>{\n  \"extends\": [\n    \":preserveSemverRanges\", // (1)!\n    \"group:all\", // (2)!\n    \"schedule:monthly\", // (3)!\n    \":maintainLockFilesMonthly\" // (4)!\n  ],\n  \"lockFileMaintenance\": {\n    \"commitMessageAction\": \"Update\"\n  },\n  \"separateMajorMinor\": false\n}\n</code></pre> <ol> <li><code>:preserveSemverRanges</code>: Preserve (but continue to upgrade) any existing SemVer ranges.</li> <li><code>group:all</code>: Group all updates together.</li> <li><code>schedule:monthly</code>: Schedule once a month on the first day of the month before 4 AM.</li> <li><code>:maintainLockFilesMonthly</code>: Run lock file maintenance (updates) on the first day of each month.</li> </ol>"},{"location":"presets-config/#configsemverallweekly","title":"<code>config:semverAllWeekly</code>","text":"<p>Preserve SemVer ranges and update everything together once a week (excluding replacements and lockfile maintenance).</p> <pre><code>{\n  \"extends\": [\n    \":preserveSemverRanges\", // (1)!\n    \"group:all\", // (2)!\n    \"schedule:weekly\", // (3)!\n    \":maintainLockFilesWeekly\" // (4)!\n  ],\n  \"lockFileMaintenance\": {\n    \"commitMessageAction\": \"Update\"\n  },\n  \"separateMajorMinor\": false\n}\n</code></pre> <ol> <li><code>:preserveSemverRanges</code>: Preserve (but continue to upgrade) any existing SemVer ranges.</li> <li><code>group:all</code>: Group all updates together.</li> <li><code>schedule:weekly</code>: Schedule weekly.</li> <li><code>:maintainLockFilesWeekly</code>: Run lock file maintenance (updates) early Monday mornings.</li> </ol>"},{"location":"presets-customManagers/","title":"CustomManager Presets","text":""},{"location":"presets-customManagers/#custommanagersazurepipelinesversions","title":"<code>customManagers:azurePipelinesVersions</code>","text":"<p>Update <code>_VERSION</code> environment variables in Azure Pipelines files.</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\n        \"**/.azuredevops/**/*.{yml,yaml}\",\n        \"azure*pipeline*.{yml,yaml}\"\n      ],\n      \"matchStrings\": [\n        \"# renovate: datasource=(?&lt;datasource&gt;[a-zA-Z0-9-._]+?) depName=(?&lt;depName&gt;[^\\\\s]+?)(?: (?:lookupName|packageName)=(?&lt;packageName&gt;[^\\\\s]+?))?(?: versioning=(?&lt;versioning&gt;[^\\\\s]+?))?(?: extractVersion=(?&lt;extractVersion&gt;[^\\\\s]+?))?(?: registryUrl=(?&lt;registryUrl&gt;[^\\\\s]+?))?\\\\s+[A-Za-z0-9_]+?_VERSION\\\\s*:\\\\s*[\\\"']?(?&lt;currentValue&gt;.+?)[\\\"']?\\\\s\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-customManagers/#custommanagersbiomeversions","title":"<code>customManagers:biomeVersions</code>","text":"<p>Update <code>$schema</code> version in <code>biome.json</code> configuration files.</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"jsonata\",\n      \"datasourceTemplate\": \"npm\",\n      \"depNameTemplate\": \"@biomejs/biome\",\n      \"fileFormat\": \"json\",\n      \"managerFilePatterns\": [\n        \"**/biome.{json,jsonc}\"\n      ],\n      \"matchStrings\": [\n        \"{\\\"currentValue\\\": $split($.\\\"$schema\\\",(\\\"/\\\"))[-2]}\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-customManagers/#custommanagersbitbucketpipelinesversions","title":"<code>customManagers:bitbucketPipelinesVersions</code>","text":"<p>Update <code>_VERSION</code> variables in Bitbucket Pipelines</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\n        \"**/*-pipelines.yml\"\n      ],\n      \"matchStrings\": [\n        \"# renovate: datasource=(?&lt;datasource&gt;[a-zA-Z0-9-._]+?) depName=(?&lt;depName&gt;[^\\\\s]+?)(?: (lookupName|packageName)=(?&lt;packageName&gt;[^\\\\s]+?))?(?: versioning=(?&lt;versioning&gt;[^\\\\s]+?))?(?: extractVersion=(?&lt;extractVersion&gt;[^\\\\s]+?))?(?: registryUrl=(?&lt;registryUrl&gt;[^\\\\s]+?))?\\\\s+.*\\\\s+[A-Za-z0-9_]+?_VERSION[ =:]\\\\s?[\\\"']?(?&lt;currentValue&gt;.+?)[\\\"']?\\\\s\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-customManagers/#custommanagersdockerfileversions","title":"<code>customManagers:dockerfileVersions</code>","text":"<p>Update <code>_VERSION</code> variables in Dockerfiles.</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\n        \"**/[Dd]ockerfile*\",\n        \"**/[Cc]ontainerfile*\",\n        \"**/*.[Dd]ockerfile*\",\n        \"**/*.[Cc]ontainerfile*\"\n      ],\n      \"matchStrings\": [\n        \"# renovate: datasource=(?&lt;datasource&gt;[a-zA-Z0-9-._]+?) depName=(?&lt;depName&gt;[^\\\\s]+?)(?: (lookupName|packageName)=(?&lt;packageName&gt;[^\\\\s]+?))?(?: versioning=(?&lt;versioning&gt;[^\\\\s]+?))?(?: extractVersion=(?&lt;extractVersion&gt;[^\\\\s]+?))?(?: registryUrl=(?&lt;registryUrl&gt;[^\\\\s]+?))?\\\\s(?:ENV|ARG)\\\\s+[A-Za-z0-9_]+?_VERSION[ =][\\\"']?(?&lt;currentValue&gt;.+?)[\\\"']?\\\\s\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-customManagers/#custommanagersgithubactionsversions","title":"<code>customManagers:githubActionsVersions</code>","text":"<p>Update <code>_VERSION</code> environment variables in GitHub Action files.</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\n        \"/(^|/)(workflow-templates|\\\\.(?:github|gitea|forgejo)/(?:workflows|actions))/.+\\\\.ya?ml$/\",\n        \"/(^|/)action\\\\.ya?ml$/\"\n      ],\n      \"matchStrings\": [\n        \"# renovate: datasource=(?&lt;datasource&gt;[a-zA-Z0-9-._]+?) depName=(?&lt;depName&gt;[^\\\\s]+?)(?: (?:lookupName|packageName)=(?&lt;packageName&gt;[^\\\\s]+?))?(?: versioning=(?&lt;versioning&gt;[^\\\\s]+?))?(?: extractVersion=(?&lt;extractVersion&gt;[^\\\\s]+?))?(?: registryUrl=(?&lt;registryUrl&gt;[^\\\\s]+?))?\\\\s+[A-Za-z0-9_]+?_VERSION\\\\s*:\\\\s*[\\\"']?(?&lt;currentValue&gt;.+?)[\\\"']?\\\\s\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-customManagers/#custommanagersgitlabpipelineversions","title":"<code>customManagers:gitlabPipelineVersions</code>","text":"<p>Update <code>_VERSION</code> environment variables in GitLab pipeline file.</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\n        \"**/*.gitlab-ci.{yml,yaml}\"\n      ],\n      \"matchStrings\": [\n        \"# renovate: datasource=(?&lt;datasource&gt;[a-zA-Z0-9-._]+?) depName=(?&lt;depName&gt;[^\\\\s]+?)(?: (?:packageName)=(?&lt;packageName&gt;[^\\\\s]+?))?(?: versioning=(?&lt;versioning&gt;[^\\\\s]+?))?(?: extractVersion=(?&lt;extractVersion&gt;[^\\\\s]+?))?(?: registryUrl=(?&lt;registryUrl&gt;[^\\\\s]+?))?\\\\s+[A-Za-z0-9_]+?_VERSION\\\\s*:\\\\s*[\\\"']?(?&lt;currentValue&gt;.+?)[\\\"']?\\\\s\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-customManagers/#custommanagershelmchartyamlappversions","title":"<code>customManagers:helmChartYamlAppVersions</code>","text":"<p>Update <code>appVersion</code> value in Helm chart <code>Chart.yaml</code>.</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"datasourceTemplate\": \"docker\",\n      \"managerFilePatterns\": [\n        \"**/Chart.yaml\"\n      ],\n      \"matchStrings\": [\n        \"#\\\\s*renovate: image=(?&lt;depName&gt;.*?)\\\\s+appVersion:\\\\s*[\\\"']?(?&lt;currentValue&gt;[\\\\w+\\\\.\\\\-]*)\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-customManagers/#custommanagersmakefileversions","title":"<code>customManagers:makefileVersions</code>","text":"<p>Update <code>_VERSION</code> variables in Makefiles.</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\n        \"**/[Mm]akefile\",\n        \"**/GNUMakefile\",\n        \"**/*.mk\"\n      ],\n      \"matchStrings\": [\n        \"# renovate: datasource=(?&lt;datasource&gt;[a-zA-Z0-9-._]+?) depName=(?&lt;depName&gt;[^\\\\s]+?)(?: (?:packageName)=(?&lt;packageName&gt;[^\\\\s]+?))?(?: versioning=(?&lt;versioning&gt;[^\\\\s]+?))?(?: extractVersion=(?&lt;extractVersion&gt;[^\\\\s]+?))?(?: registryUrl=(?&lt;registryUrl&gt;[^\\\\s]+?))?\\\\s+[A-Za-z0-9_]+?_VERSION\\\\s*:*\\\\??=\\\\s*[\\\"']?(?&lt;currentValue&gt;.+?)[\\\"']?\\\\s\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-customManagers/#custommanagersmavenpropertyversions","title":"<code>customManagers:mavenPropertyVersions</code>","text":"<p>Update <code>*.version</code> properties in <code>pom.xml</code> files.</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"datasourceTemplate\": \"{{#if datasource}}{{{datasource}}}{{else}}maven{{/if}}\",\n      \"managerFilePatterns\": [\n        \"**/pom.xml\"\n      ],\n      \"matchStrings\": [\n        \"&lt;!--\\\\s?renovate:( datasource=(?&lt;datasource&gt;[a-zA-Z0-9-._]+?))? depName=(?&lt;depName&gt;[^\\\\s]+?)(?: packageName=(?&lt;packageName&gt;[^\\\\s]+?))?(?: versioning=(?&lt;versioning&gt;[^\\\\s]+?))?(?: extractVersion=(?&lt;extractVersion&gt;[^\\\\s]+?))?\\\\s+--&gt;\\\\s+&lt;.+\\\\.version&gt;(?&lt;currentValue&gt;.+)&lt;\\\\/.+\\\\.version&gt;\"\n      ],\n      \"versioningTemplate\": \"{{#if versioning}}{{{versioning}}}{{/if}}\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-customManagers/#custommanagerstfvarsversions","title":"<code>customManagers:tfvarsVersions</code>","text":"<p>Update <code>*_version</code> variables in <code>.tfvars</code> files.</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\n        \"**/*.tfvars\"\n      ],\n      \"matchStrings\": [\n        \"#\\\\s*renovate: datasource=(?&lt;datasource&gt;.*?) depName=(?&lt;depName&gt;.*?)( versioning=(?&lt;versioning&gt;.*?))?(?: extractVersion=(?&lt;extractVersion&gt;.*?))?(?: registryUrl=(?&lt;registryUrl&gt;[^\\\\s]+?))?\\\\s.*?_version\\\\s*=\\\\s*\\\"(?&lt;currentValue&gt;.*)\\\"\"\n      ],\n      \"versioningTemplate\": \"{{#if versioning}}{{{versioning}}}{{/if}}\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-customManagers/#custommanagerstsconfignodeversions","title":"<code>customManagers:tsconfigNodeVersions</code>","text":"<p>Update <code>@tsconfig/node</code> extends  in <code>tsconfig.json</code> and <code>jsconfig.json</code> files.</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"autoReplaceStringTemplate\": \"\\\"@tsconfig/node{{{major}}}/tsconfig.json\\\"\",\n      \"currentValueTemplate\": \"{{{major}}}\",\n      \"customType\": \"regex\",\n      \"datasourceTemplate\": \"npm\",\n      \"managerFilePatterns\": [\n        \"**/{j,t}sconfig.json\",\n        \"**/{j,t}sconfig.*.json\"\n      ],\n      \"matchStrings\": [\n        \"\\\"(?&lt;depName&gt;@tsconfig/node(?&lt;major&gt;\\\\d+))/tsconfig\\\\.json\\\"\"\n      ]\n    },\n    {\n      \"autoReplaceStringTemplate\": \"\\\"@tsconfig/node{{{major}}}\\\"\",\n      \"currentValueTemplate\": \"{{{major}}}\",\n      \"customType\": \"regex\",\n      \"datasourceTemplate\": \"npm\",\n      \"managerFilePatterns\": [\n        \"**/{j,t}sconfig.json\",\n        \"**/{j,t}sconfig.*.json\"\n      ],\n      \"matchStrings\": [\n        \"\\\"(?&lt;depName&gt;@tsconfig/node(?&lt;major&gt;\\\\d+))\\\"\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-customManagers/#custommanagersvaleversions","title":"<code>customManagers:valeVersions</code>","text":"<p>Update Vale package versions in <code>.vale.ini</code> configuration files.</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"datasourceTemplate\": \"github-releases\",\n      \"managerFilePatterns\": [\n        \"/(^|/)\\\\.vale\\\\.ini$/\"\n      ],\n      \"matchStrings\": [\n        \"https://github\\\\.com/(?&lt;packageName&gt;[^/]+/[^/]+)/releases/download/(?&lt;currentValue&gt;[^/]+)/\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/","title":"Default Presets","text":""},{"location":"presets-default/#approvemajorupdates","title":"<code>:approveMajorUpdates</code>","text":"<p>Require Dependency Dashboard approval for <code>major</code> updates.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"dependencyDashboardApproval\": true,\n      \"matchUpdateTypes\": [\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/#assignandreviewarg0","title":"<code>:assignAndReview</code>(<code>&lt;arg0&gt;</code>)","text":"<p>Set <code>arg0</code> as assignee and reviewer of PRs.</p> <pre><code>{\n  \"extends\": [\n    \":assignee(arg0)\", // (1)!\n    \":reviewer(arg0)\" // (2)!\n  ]\n}\n</code></pre> <ol> <li><code>:assignee(arg0)</code>: Assign PRs to <code>arg0</code>.</li> <li><code>:reviewer(arg0)</code>: Add <code>arg0</code> as reviewer for PRs.</li> </ol>"},{"location":"presets-default/#assigneearg0","title":"<code>:assignee</code>(<code>&lt;arg0&gt;</code>)","text":"<p>Assign PRs to <code>arg0</code>.</p> <pre><code>{\n  \"assignees\": [\n    \"arg0\"\n  ]\n}\n</code></pre>"},{"location":"presets-default/#automergeall","title":"<code>:automergeAll</code>","text":"<p>Automerge all upgrades (including <code>major</code>) if they pass tests.</p> <pre><code>{\n  \"automerge\": true\n}\n</code></pre>"},{"location":"presets-default/#automergebranch","title":"<code>:automergeBranch</code>","text":"<p>If automerging, push the new commit directly to the base branch (no PR).</p> <pre><code>{\n  \"automergeType\": \"branch\"\n}\n</code></pre>"},{"location":"presets-default/#automergedigest","title":"<code>:automergeDigest</code>","text":"<p>Automerge <code>digest</code> upgrades if they pass tests.</p> <pre><code>{\n  \"digest\": {\n    \"automerge\": true\n  }\n}\n</code></pre>"},{"location":"presets-default/#automergedisabled","title":"<code>:automergeDisabled</code>","text":"<p>Disable automerging feature - wait for humans to merge all PRs.</p> <pre><code>{\n  \"automerge\": false\n}\n</code></pre>"},{"location":"presets-default/#automergelinters","title":"<code>:automergeLinters</code>","text":"<p>Update lint packages automatically if tests pass.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"automerge\": true,\n      \"extends\": [\n        \"packages:linters\" // (1)!\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>packages:linters</code>: All lint-related packages.</li> </ol>"},{"location":"presets-default/#automergemajor","title":"<code>:automergeMajor</code>","text":"<p>Automerge all upgrades (including <code>major</code>) if they pass tests.</p> <pre><code>{\n  \"automerge\": true\n}\n</code></pre>"},{"location":"presets-default/#automergeminor","title":"<code>:automergeMinor</code>","text":"<p>Automerge <code>patch</code> and <code>minor</code> upgrades if they pass tests.</p> <pre><code>{\n  \"lockFileMaintenance\": {\n    \"automerge\": true\n  },\n  \"minor\": {\n    \"automerge\": true\n  },\n  \"patch\": {\n    \"automerge\": true\n  },\n  \"pin\": {\n    \"automerge\": true\n  }\n}\n</code></pre>"},{"location":"presets-default/#automergepatch","title":"<code>:automergePatch</code>","text":"<p>Automerge <code>patch</code> upgrades if they pass tests.</p> <pre><code>{\n  \"lockFileMaintenance\": {\n    \"automerge\": true\n  },\n  \"patch\": {\n    \"automerge\": true\n  },\n  \"pin\": {\n    \"automerge\": true\n  },\n  \"separateMinorPatch\": true\n}\n</code></pre>"},{"location":"presets-default/#automergepr","title":"<code>:automergePr</code>","text":"<p>Raise a PR first before any automerging.</p> <pre><code>{\n  \"automergeType\": \"pr\"\n}\n</code></pre>"},{"location":"presets-default/#automergerequireallstatuschecks","title":"<code>:automergeRequireAllStatusChecks</code>","text":"<p>Require all status checks to pass before any automerging.</p> <pre><code>{\n  \"ignoreTests\": false\n}\n</code></pre>"},{"location":"presets-default/#automergestablenonmajor","title":"<code>:automergeStableNonMajor</code>","text":"<p>Automerge non-major upgrades for semver stable packages if they pass tests.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"automerge\": true,\n      \"matchCurrentVersion\": \"!/^0/\",\n      \"matchUpdateTypes\": [\n        \"minor\",\n        \"patch\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/#automergetesters","title":"<code>:automergeTesters</code>","text":"<p>Update testing packages automatically if tests pass.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"automerge\": true,\n      \"extends\": [\n        \"packages:test\" // (1)!\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>packages:test</code>: Test packages.</li> </ol>"},{"location":"presets-default/#automergetypes","title":"<code>:automergeTypes</code>","text":"<p>Update <code>@types/*</code> packages automatically if tests pass.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"automerge\": true,\n      \"matchPackageNames\": [\n        \"@types/**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/#combinepatchminorreleases","title":"<code>:combinePatchMinorReleases</code>","text":"<p>Do not separate <code>patch</code> and <code>minor</code> upgrades into separate PRs for the same dependency.</p> <pre><code>{\n  \"separateMinorPatch\": false\n}\n</code></pre>"},{"location":"presets-default/#configmigration","title":"<code>:configMigration</code>","text":"<p>Enable Renovate configuration migration PRs when needed.</p> <pre><code>{\n  \"configMigration\": true\n}\n</code></pre>"},{"location":"presets-default/#dependencydashboard","title":"<code>:dependencyDashboard</code>","text":"<p>Enable Renovate Dependency Dashboard creation.</p> <pre><code>{\n  \"dependencyDashboard\": true\n}\n</code></pre>"},{"location":"presets-default/#dependencydashboardapproval","title":"<code>:dependencyDashboardApproval</code>","text":"<p>Enable Renovate Dependency Dashboard approval workflow.</p> <pre><code>{\n  \"dependencyDashboardApproval\": true\n}\n</code></pre>"},{"location":"presets-default/#disabledependencydashboard","title":"<code>:disableDependencyDashboard</code>","text":"<p>Disable Renovate Dependency Dashboard creation.</p> <pre><code>{\n  \"dependencyDashboard\": false\n}\n</code></pre>"},{"location":"presets-default/#disabledevdependencies","title":"<code>:disableDevDependencies</code>","text":"<p>Do not update development dependencies.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"enabled\": false,\n      \"matchDepTypes\": [\n        \"devDependencies\",\n        \"dev-dependencies\",\n        \"dev\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/#disabledigestupdates","title":"<code>:disableDigestUpdates</code>","text":"<p>Disable <code>digest</code> and Git hash updates.</p> <pre><code>{\n  \"digest\": {\n    \"enabled\": false\n  }\n}\n</code></pre>"},{"location":"presets-default/#disabledomainarg0","title":"<code>:disableDomain</code>(<code>&lt;arg0&gt;</code>)","text":"<p>Disable requests to a particular domain.</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"enabled\": false,\n      \"matchHost\": \"arg0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/#disablehostarg0","title":"<code>:disableHost</code>(<code>&lt;arg0&gt;</code>)","text":"<p>Disable requests to a particular host.</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"enabled\": false,\n      \"matchHost\": \"https://arg0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/#disablemajorupdates","title":"<code>:disableMajorUpdates</code>","text":"<p>Disable <code>major</code> updates.</p> <pre><code>{\n  \"major\": {\n    \"enabled\": false\n  }\n}\n</code></pre>"},{"location":"presets-default/#disablepeerdependencies","title":"<code>:disablePeerDependencies</code>","text":"<p>Do not update <code>peerDependencies</code> versions/ranges.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"enabled\": false,\n      \"matchDepTypes\": [\n        \"peerDependencies\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/#disableprcontrols","title":"<code>:disablePrControls</code>","text":"<p>Remove the checkbox controls from PRs.</p> <pre><code>{\n  \"prBodyTemplate\": \"{{{header}}}{{{table}}}{{{notes}}}{{{changelogs}}}{{{configDescription}}}{{{footer}}}\"\n}\n</code></pre>"},{"location":"presets-default/#disableratelimiting","title":"<code>:disableRateLimiting</code>","text":"<p>Remove hourly and concurrent rate limits.</p> <pre><code>{\n  \"commitHourlyLimit\": 0,\n  \"prConcurrentLimit\": 0,\n  \"prHourlyLimit\": 0\n}\n</code></pre>"},{"location":"presets-default/#disablerenovate","title":"<code>:disableRenovate</code>","text":"<p>Disable Renovate.</p> <pre><code>{\n  \"enabled\": false\n}\n</code></pre>"},{"location":"presets-default/#disablevulnerabilityalerts","title":"<code>:disableVulnerabilityAlerts</code>","text":"<p>Disable vulnerability alerts completely.</p> <pre><code>{\n  \"vulnerabilityAlerts\": {\n    \"enabled\": false\n  }\n}\n</code></pre>"},{"location":"presets-default/#docker","title":"<code>:docker</code>","text":"<p>Keep Dockerfile <code>FROM</code> sources updated.</p> <pre><code>{\n  \"docker-compose\": {\n    \"enabled\": true\n  },\n  \"dockerfile\": {\n    \"enabled\": true\n  }\n}\n</code></pre>"},{"location":"presets-default/#donotpinpackagearg0","title":"<code>:doNotPinPackage</code>(<code>&lt;arg0&gt;</code>)","text":"<p>Disable version pinning for <code>arg0</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\n        \"arg0\"\n      ],\n      \"rangeStrategy\": \"replace\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/#enableprecommit","title":"<code>:enablePreCommit</code>","text":"<p>Enable the pre-commit manager.</p> <pre><code>{\n  \"pre-commit\": {\n    \"enabled\": true\n  }\n}\n</code></pre>"},{"location":"presets-default/#enablerenovate","title":"<code>:enableRenovate</code>","text":"<p>Enable Renovate.</p> <pre><code>{\n  \"enabled\": true\n}\n</code></pre>"},{"location":"presets-default/#enablevulnerabilityalerts","title":"<code>:enableVulnerabilityAlerts</code>","text":"<p>Raise PR when vulnerability alerts are detected.</p> <pre><code>{\n  \"vulnerabilityAlerts\": {\n    \"enabled\": true\n  }\n}\n</code></pre>"},{"location":"presets-default/#enablevulnerabilityalertswithadditionallabelarg0","title":"<code>:enableVulnerabilityAlertsWithAdditionalLabel</code>(<code>&lt;arg0&gt;</code>)","text":"<p>Raise PR when vulnerability alerts are detected with label <code>arg0</code>, in addition to any existing list of PR labels.</p> <pre><code>{\n  \"vulnerabilityAlerts\": {\n    \"addLabels\": [\n      \"arg0\"\n    ],\n    \"enabled\": true\n  }\n}\n</code></pre>"},{"location":"presets-default/#enablevulnerabilityalertswithlabelarg0","title":"<code>:enableVulnerabilityAlertsWithLabel</code>(<code>&lt;arg0&gt;</code>)","text":"<p>Raise PR when vulnerability alerts are detected with label <code>arg0</code>, replacing any existing list of PR labels.</p> <pre><code>{\n  \"vulnerabilityAlerts\": {\n    \"enabled\": true,\n    \"labels\": [\n      \"arg0\"\n    ]\n  }\n}\n</code></pre>"},{"location":"presets-default/#followtagarg0-arg1","title":"<code>:followTag</code>(<code>&lt;arg0&gt;</code>, <code>&lt;arg1&gt;</code>)","text":"<p>For package <code>arg0</code>, strictly follow release tag <code>arg1</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"followTag\": \"arg1\",\n      \"matchPackageNames\": [\n        \"arg0\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/#githubcomtokenarg0","title":"<code>:githubComToken</code>(<code>&lt;arg0&gt;</code>)","text":"<p>Use provided token for <code>github.com</code> lookups. Do not configure this if you are already running on <code>github.com</code>.</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"encrypted\": {\n        \"token\": \"arg0\"\n      },\n      \"hostType\": \"github\",\n      \"matchHost\": \"github.com\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/#gitsignoff","title":"<code>:gitSignOff</code>","text":"<p>Append <code>Signed-off-by:</code> to signoff Git commits.</p> <pre><code>{\n  \"commitTrailers\": [\n    \"Signed-off-by: {{{gitAuthor}}}\"\n  ]\n}\n</code></pre>"},{"location":"presets-default/#gomod","title":"<code>:gomod</code>","text":"<p>Enable Go modules support.</p> <pre><code>{\n  \"gomod\": {\n    \"enabled\": true\n  }\n}\n</code></pre>"},{"location":"presets-default/#grouparg0-arg1","title":"<code>:group</code>(<code>&lt;arg0&gt;</code>, <code>&lt;arg1&gt;</code>)","text":"<p>Group <code>arg1</code> packages into same branch/PR.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"arg0\"\n      ],\n      \"groupName\": \"arg1\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/#ignoremodulesandtests","title":"<code>:ignoreModulesAndTests</code>","text":"<p>Ignore <code>node_modules</code>, <code>bower_components</code>, <code>vendor</code> and various test/tests (except for nuget) directories.</p> <pre><code>{\n  \"ignorePaths\": [\n    \"**/node_modules/**\",\n    \"**/bower_components/**\",\n    \"**/vendor/**\",\n    \"**/examples/**\",\n    \"**/__tests__/**\",\n    \"**/test/**\",\n    \"**/tests/**\",\n    \"**/__fixtures__/**\"\n  ],\n  \"nuget\": {\n    \"ignorePaths\": [\n      \"**/node_modules/**\",\n      \"**/bower_components/**\",\n      \"**/vendor/**\",\n      \"**/examples/**\",\n      \"**/__fixtures__/**\"\n    ]\n  }\n}\n</code></pre>"},{"location":"presets-default/#ignoreunstable","title":"<code>:ignoreUnstable</code>","text":"<p>Upgrade to unstable versions only if the existing version is unstable.</p> <pre><code>{\n  \"ignoreUnstable\": true\n}\n</code></pre>"},{"location":"presets-default/#includenodemodules","title":"<code>:includeNodeModules</code>","text":"<p>Include <code>package.json</code> files found within <code>node_modules</code> folders or <code>bower_components</code>.</p> <pre><code>{\n  \"ignorePaths\": []\n}\n</code></pre>"},{"location":"presets-default/#labelarg0","title":"<code>:label</code>(<code>&lt;arg0&gt;</code>)","text":"<p>Apply label <code>arg0</code> to PRs.</p> <pre><code>{\n  \"labels\": [\n    \"arg0\"\n  ]\n}\n</code></pre>"},{"location":"presets-default/#labelsarg0-arg1","title":"<code>:labels</code>(<code>&lt;arg0&gt;</code>, <code>&lt;arg1&gt;</code>)","text":"<p>Apply labels <code>arg0</code> and <code>arg1</code> to PRs.</p> <pre><code>{\n  \"labels\": [\n    \"arg0\",\n    \"arg1\"\n  ]\n}\n</code></pre>"},{"location":"presets-default/#maintainlockfilesdisabled","title":"<code>:maintainLockFilesDisabled</code>","text":"<p>Update existing lock files only when <code>package.json</code> is modified.</p> <pre><code>{\n  \"lockFileMaintenance\": {\n    \"enabled\": false\n  }\n}\n</code></pre>"},{"location":"presets-default/#maintainlockfilesmonthly","title":"<code>:maintainLockFilesMonthly</code>","text":"<p>Run lock file maintenance (updates) on the first day of each month.</p> <pre><code>{\n  \"lockFileMaintenance\": {\n    \"enabled\": true,\n    \"extends\": [\n      \"schedule:monthly\" // (1)!\n    ]\n  }\n}\n</code></pre> <ol> <li><code>schedule:monthly</code>: Schedule once a month on the first day of the month before 4 AM.</li> </ol>"},{"location":"presets-default/#maintainlockfilesweekly","title":"<code>:maintainLockFilesWeekly</code>","text":"<p>Run lock file maintenance (updates) early Monday mornings.</p> <pre><code>{\n  \"lockFileMaintenance\": {\n    \"enabled\": true,\n    \"extends\": [\n      \"schedule:weekly\" // (1)!\n    ]\n  }\n}\n</code></pre> <ol> <li><code>schedule:weekly</code>: Schedule weekly.</li> </ol>"},{"location":"presets-default/#meteor","title":"<code>:meteor</code>","text":"<p>Keep Meteor Npm.depends packages updated.</p> <pre><code>{\n  \"meteor\": {\n    \"enabled\": true\n  }\n}\n</code></pre>"},{"location":"presets-default/#nounscheduledupdates","title":"<code>:noUnscheduledUpdates</code>","text":"<p>Only update branches when scheduled.</p> <pre><code>{\n  \"updateNotScheduled\": false\n}\n</code></pre>"},{"location":"presets-default/#npm","title":"<code>:npm</code>","text":"<p>Keep <code>package.json</code> npm dependencies updated.</p> <pre><code>{\n  \"npm\": {\n    \"enabled\": true\n  }\n}\n</code></pre>"},{"location":"presets-default/#pathsemanticcommittypearg0-arg1","title":"<code>:pathSemanticCommitType</code>(<code>&lt;arg0&gt;</code>, <code>&lt;arg1&gt;</code>)","text":"<p>Use semanticCommitType <code>arg1</code> for all package files matching path <code>arg0</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchFileNames\": [\n        \"arg0\"\n      ],\n      \"semanticCommitType\": \"arg1\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/#pinallexceptpeerdependencies","title":"<code>:pinAllExceptPeerDependencies</code>","text":"<p>Pin all dependency versions except <code>peerDependencies</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\n        \"*\"\n      ],\n      \"rangeStrategy\": \"pin\"\n    },\n    {\n      \"matchDepTypes\": [\n        \"engines\",\n        \"peerDependencies\"\n      ],\n      \"rangeStrategy\": \"auto\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/#pindependencies","title":"<code>:pinDependencies</code>","text":"<p>Pin dependency versions where <code>depType=dependencies</code>. Usually applies only to non-dev dependencies in <code>package.json</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDepTypes\": [\n        \"dependencies\"\n      ],\n      \"rangeStrategy\": \"pin\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/#pindevdependencies","title":"<code>:pinDevDependencies</code>","text":"<p>Pin dependency versions for development dependencies.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDepTypes\": [\n        \"devDependencies\",\n        \"dev-dependencies\",\n        \"dev\"\n      ],\n      \"rangeStrategy\": \"pin\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/#pindigestsdisabled","title":"<code>:pinDigestsDisabled</code>","text":"<p>Disable pinning of dependency digests.</p> <p>Note: This preset does not revert the digest pinning set from within the packageRules, when set at root level or via extends). See Docker - Disable digest pinning for more details.</p> <pre><code>{\n  \"pinDigests\": false\n}\n</code></pre>"},{"location":"presets-default/#pinonlydevdependencies","title":"<code>:pinOnlyDevDependencies</code>","text":"<p>Pin dependency versions for development dependencies and retain SemVer ranges for others.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\n        \"*\"\n      ],\n      \"rangeStrategy\": \"replace\"\n    },\n    {\n      \"matchDepTypes\": [\n        \"devDependencies\",\n        \"dev-dependencies\",\n        \"dev\"\n      ],\n      \"rangeStrategy\": \"pin\"\n    },\n    {\n      \"matchDepTypes\": [\n        \"peerDependencies\"\n      ],\n      \"rangeStrategy\": \"widen\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/#pinskipci","title":"<code>:pinSkipCi</code>","text":"<p>Add <code>[skip ci]</code> to commit message body whenever pinning.</p> <pre><code>{\n  \"pin\": {\n    \"commitBody\": \"[skip ci]\"\n  }\n}\n</code></pre>"},{"location":"presets-default/#pinversions","title":"<code>:pinVersions</code>","text":"<p>Use version pinning (maintain a single version only and not SemVer ranges).</p> <pre><code>{\n  \"rangeStrategy\": \"pin\"\n}\n</code></pre>"},{"location":"presets-default/#prconcurrentlimit10","title":"<code>:prConcurrentLimit10</code>","text":"<p>Limit to maximum 10 open PRs at any time.</p> <pre><code>{\n  \"prConcurrentLimit\": 10\n}\n</code></pre>"},{"location":"presets-default/#prconcurrentlimit20","title":"<code>:prConcurrentLimit20</code>","text":"<p>Limit to maximum 20 open PRs at any time.</p> <pre><code>{\n  \"prConcurrentLimit\": 20\n}\n</code></pre>"},{"location":"presets-default/#prconcurrentlimitnone","title":"<code>:prConcurrentLimitNone</code>","text":"<p>Remove limit for open PRs at any time.</p> <pre><code>{\n  \"prConcurrentLimit\": 0\n}\n</code></pre>"},{"location":"presets-default/#preservesemverranges","title":"<code>:preserveSemverRanges</code>","text":"<p>Preserve (but continue to upgrade) any existing SemVer ranges.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\n        \"*\"\n      ],\n      \"rangeStrategy\": \"replace\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/#prhourlylimit1","title":"<code>:prHourlyLimit1</code>","text":"<p>Rate limit PR creation to a maximum of one per hour.</p> <pre><code>{\n  \"prHourlyLimit\": 1\n}\n</code></pre>"},{"location":"presets-default/#prhourlylimit2","title":"<code>:prHourlyLimit2</code>","text":"<p>Rate limit PR creation to a maximum of two per hour.</p> <pre><code>{\n  \"prHourlyLimit\": 2\n}\n</code></pre>"},{"location":"presets-default/#prhourlylimit4","title":"<code>:prHourlyLimit4</code>","text":"<p>Rate limit PR creation to a maximum of four per hour.</p> <pre><code>{\n  \"prHourlyLimit\": 4\n}\n</code></pre>"},{"location":"presets-default/#prhourlylimitnone","title":"<code>:prHourlyLimitNone</code>","text":"<p>Removes rate limit for PR creation per hour.</p> <pre><code>{\n  \"prHourlyLimit\": 0\n}\n</code></pre>"},{"location":"presets-default/#primmediately","title":"<code>:prImmediately</code>","text":"<p>Raise PRs immediately (after branch is created).</p> <pre><code>{\n  \"prCreation\": \"immediate\"\n}\n</code></pre>"},{"location":"presets-default/#prnotpending","title":"<code>:prNotPending</code>","text":"<p>Wait for branch tests to pass or fail before creating the PR.</p> <pre><code>{\n  \"prCreation\": \"not-pending\"\n}\n</code></pre>"},{"location":"presets-default/#rebasestaleprs","title":"<code>:rebaseStalePrs</code>","text":"<p>Rebase existing PRs any time the base branch has been updated.</p> <pre><code>{\n  \"rebaseWhen\": \"behind-base-branch\"\n}\n</code></pre>"},{"location":"presets-default/#renovateprefix","title":"<code>:renovatePrefix</code>","text":"<p>Add the <code>renovate/</code> prefix to all branch names.</p> <pre><code>{\n  \"branchPrefix\": \"renovate/\"\n}\n</code></pre>"},{"location":"presets-default/#respectlatest","title":"<code>:respectLatest</code>","text":"<p>Upgrade versions up to the \"latest\" tag in the npm registry.</p> <pre><code>{\n  \"respectLatest\": true\n}\n</code></pre>"},{"location":"presets-default/#reviewerarg0","title":"<code>:reviewer</code>(<code>&lt;arg0&gt;</code>)","text":"<p>Add <code>arg0</code> as reviewer for PRs.</p> <pre><code>{\n  \"reviewers\": [\n    \"arg0\"\n  ]\n}\n</code></pre>"},{"location":"presets-default/#semanticcommits","title":"<code>:semanticCommits</code>","text":"<p>Use semantic prefixes for commit messages and PR titles.</p> <pre><code>{\n  \"semanticCommits\": \"enabled\"\n}\n</code></pre>"},{"location":"presets-default/#semanticcommitscopearg0","title":"<code>:semanticCommitScope</code>(<code>&lt;arg0&gt;</code>)","text":"<p>Use semantic commit scope <code>arg0</code> for all commits and PR titles.</p> <pre><code>{\n  \"semanticCommitScope\": \"arg0\"\n}\n</code></pre>"},{"location":"presets-default/#semanticcommitscopedisabled","title":"<code>:semanticCommitScopeDisabled</code>","text":"<p>Disable semantic commit scope for all commits and PR titles.</p> <pre><code>{\n  \"semanticCommitScope\": null\n}\n</code></pre>"},{"location":"presets-default/#semanticcommitsdisabled","title":"<code>:semanticCommitsDisabled</code>","text":"<p>Disable semantic prefixes for commit messages and PR titles.</p> <pre><code>{\n  \"semanticCommits\": \"disabled\"\n}\n</code></pre>"},{"location":"presets-default/#semanticcommittypearg0","title":"<code>:semanticCommitType</code>(<code>&lt;arg0&gt;</code>)","text":"<p>Use <code>arg0</code> as semantic commit type for commit messages and PR titles.</p> <pre><code>{\n  \"semanticCommitType\": \"arg0\"\n}\n</code></pre>"},{"location":"presets-default/#semanticcommittypeallarg0","title":"<code>:semanticCommitTypeAll</code>(<code>&lt;arg0&gt;</code>)","text":"<p>If Renovate detects semantic commits, it will use semantic commit type <code>arg0</code> for all commits.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchFileNames\": [\n        \"**/*\"\n      ],\n      \"semanticCommitType\": \"arg0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/#semanticprefixchorearg0","title":"<code>:semanticPrefixChore</code>(<code>&lt;arg0&gt;</code>)","text":"<p>Use <code>chore</code> as semantic commit type for commit messages and PR titles.</p> <pre><code>{\n  \"extends\": [\n    \":semanticCommitType(chore)\" // (1)!\n  ]\n}\n</code></pre> <ol> <li><code>:semanticCommitType(chore)</code>: Use <code>arg0</code> as semantic commit type for commit messages and PR titles.</li> </ol>"},{"location":"presets-default/#semanticprefixfixarg0","title":"<code>:semanticPrefixFix</code>(<code>&lt;arg0&gt;</code>)","text":"<p>Use <code>fix</code> as semantic commit type for commit messages and PR titles.</p> <pre><code>{\n  \"extends\": [\n    \":semanticCommitType(fix)\" // (1)!\n  ]\n}\n</code></pre> <ol> <li><code>:semanticCommitType(fix)</code>: Use <code>arg0</code> as semantic commit type for commit messages and PR titles.</li> </ol>"},{"location":"presets-default/#semanticprefixfixdepschoreothers","title":"<code>:semanticPrefixFixDepsChoreOthers</code>","text":"<p>Use semantic commit type <code>fix</code> for dependencies and <code>chore</code> for all others if semantic commits are in use.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\n        \"*\"\n      ],\n      \"semanticCommitType\": \"chore\"\n    },\n    {\n      \"matchDepTypes\": [\n        \"dependencies\",\n        \"require\"\n      ],\n      \"semanticCommitType\": \"fix\"\n    },\n    {\n      \"matchDatasources\": [\n        \"maven\"\n      ],\n      \"matchDepTypes\": [\n        \"compile\",\n        \"provided\",\n        \"runtime\",\n        \"system\",\n        \"import\",\n        \"parent\"\n      ],\n      \"semanticCommitType\": \"fix\"\n    },\n    {\n      \"matchDepTypes\": [\n        \"project.dependencies\",\n        \"project.optional-dependencies\"\n      ],\n      \"matchManagers\": [\n        \"pep621\",\n        \"poetry\"\n      ],\n      \"semanticCommitType\": \"fix\"\n    },\n    {\n      \"matchDepTypes\": [\n        \"dependencies\",\n        \"extras\"\n      ],\n      \"matchManagers\": [\n        \"poetry\"\n      ],\n      \"semanticCommitType\": \"fix\"\n    },\n    {\n      \"matchJsonata\": [\n        \"isLockfileUpdate = true\"\n      ],\n      \"semanticCommitType\": \"chore\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-default/#separatemajorreleases","title":"<code>:separateMajorReleases</code>","text":"<p>Separate <code>major</code> versions of dependencies into individual branches/PRs.</p> <pre><code>{\n  \"separateMajorMinor\": true\n}\n</code></pre>"},{"location":"presets-default/#separatemultiplemajorreleases","title":"<code>:separateMultipleMajorReleases</code>","text":"<p>Separate each <code>major</code> version of dependencies into individual branches/PRs.</p> <pre><code>{\n  \"separateMajorMinor\": true,\n  \"separateMultipleMajor\": true\n}\n</code></pre>"},{"location":"presets-default/#separatemultipleminorreleases","title":"<code>:separateMultipleMinorReleases</code>","text":"<p>Separate each <code>minor</code> version of dependencies into individual branches/PRs.</p> <pre><code>{\n  \"separateMultipleMinor\": true\n}\n</code></pre>"},{"location":"presets-default/#separatepatchreleases","title":"<code>:separatePatchReleases</code>","text":"<p>Separate <code>patch</code> and <code>minor</code> releases of dependencies into separate PRs.</p> <pre><code>{\n  \"separateMinorPatch\": true\n}\n</code></pre>"},{"location":"presets-default/#skipartifactsupdate","title":"<code>:skipArtifactsUpdate</code>","text":"<p>Skips artifact updates.</p> <pre><code>{\n  \"skipArtifactsUpdate\": true\n}\n</code></pre>"},{"location":"presets-default/#skipstatuschecks","title":"<code>:skipStatusChecks</code>","text":"<p>Skip status checks and automerge right away.</p> <pre><code>{\n  \"ignoreTests\": true\n}\n</code></pre>"},{"location":"presets-default/#timezonearg0","title":"<code>:timezone</code>(<code>&lt;arg0&gt;</code>)","text":"<p>Evaluate schedules according to timezone <code>arg0</code>.</p> <pre><code>{\n  \"timezone\": \"arg0\"\n}\n</code></pre>"},{"location":"presets-default/#updatenotscheduled","title":"<code>:updateNotScheduled</code>","text":"<p>Keep existing branches updated even when not scheduled.</p> <pre><code>{\n  \"updateNotScheduled\": true\n}\n</code></pre>"},{"location":"presets-default/#widenpeerdependencies","title":"<code>:widenPeerDependencies</code>","text":"<p>Always widen <code>peerDependencies</code> SemVer ranges when updating, instead of replacing.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDepTypes\": [\n        \"peerDependencies\"\n      ],\n      \"rangeStrategy\": \"widen\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-docker/","title":"Docker Presets","text":""},{"location":"presets-docker/#dockerdisable","title":"<code>docker:disable</code>","text":"<p>Disable Docker updates.</p> <pre><code>{\n  \"circleci\": {\n    \"enabled\": false\n  },\n  \"docker-compose\": {\n    \"enabled\": false\n  },\n  \"dockerfile\": {\n    \"enabled\": false\n  }\n}\n</code></pre>"},{"location":"presets-docker/#dockerdisablemajor","title":"<code>docker:disableMajor</code>","text":"<p>Disable Docker <code>major</code> updates.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"enabled\": false,\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchUpdateTypes\": [\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-docker/#dockerenablemajor","title":"<code>docker:enableMajor</code>","text":"<p>Enable Docker <code>major</code> updates.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"enabled\": true,\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchUpdateTypes\": [\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-docker/#dockerpindigests","title":"<code>docker:pinDigests</code>","text":"<p>Pin Docker digests.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"pinDigests\": true\n    },\n    {\n      \"matchManagers\": [\n        \"argocd\",\n        \"devcontainer\",\n        \"helmv3\",\n        \"pyenv\"\n      ],\n      \"pinDigests\": false\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-global/","title":"Global Presets","text":""},{"location":"presets-global/#globalsafeenv","title":"<code>global:safeEnv</code>","text":"<p>Hopefully safe environment variables to allow users to configure.</p> <pre><code>{\n  \"allowedEnv\": [\n    \"BUN_CONFIG_MAX_HTTP_REQUESTS\",\n    \"GO*\",\n    \"GRADLE_OPTS\",\n    \"RUSTC_BOOTSTRAP\",\n    \"PNPM_WORKERS\",\n    \"PNPM_MAX_WORKERS\"\n  ]\n}\n</code></pre>"},{"location":"presets-group/","title":"Group Presets","text":""},{"location":"presets-group/#groupall","title":"<code>group:all</code>","text":"<p>Group all updates together.</p> <pre><code>{\n  \"groupName\": \"all dependencies\",\n  \"groupSlug\": \"all\",\n  \"packageRules\": [\n    {\n      \"groupName\": \"all dependencies\",\n      \"groupSlug\": \"all\",\n      \"matchPackageNames\": [\n        \"*\"\n      ]\n    }\n  ],\n  \"separateMajorMinor\": false\n}\n</code></pre>"},{"location":"presets-group/#groupallapollographql","title":"<code>group:allApollographql</code>","text":"<p>Group all packages published by Apollo GraphQL together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"packages:apollographql\" // (1)!\n      ],\n      \"groupName\": \"Apollo GraphQL packages\"\n    }\n  ]\n}\n</code></pre> <ol> <li><code>packages:apollographql</code>: All packages published by Apollo GraphQL.</li> </ol>"},{"location":"presets-group/#groupalldigest","title":"<code>group:allDigest</code>","text":"<p>Group all <code>digest</code> updates together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"all digest updates\",\n      \"groupSlug\": \"all-digest\",\n      \"matchPackageNames\": [\n        \"*\"\n      ],\n      \"matchUpdateTypes\": [\n        \"digest\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupallnonmajor","title":"<code>group:allNonMajor</code>","text":"<p>Group all <code>minor</code> and <code>patch</code> updates together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"all non-major dependencies\",\n      \"groupSlug\": \"all-minor-patch\",\n      \"matchPackageNames\": [\n        \"*\"\n      ],\n      \"matchUpdateTypes\": [\n        \"minor\",\n        \"patch\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupapiplatform","title":"<code>group:apiPlatform</code>","text":"<p>Group PHP API Platform packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"api-platform packages\",\n      \"groupSlug\": \"api-platform\",\n      \"matchDatasources\": [\n        \"packagist\"\n      ],\n      \"matchPackageNames\": [\n        \"api-platform/*\",\n        \"!api-platform/admin-meta\",\n        \"!api-platform/admin-pack\",\n        \"!api-platform/api-pack\",\n        \"!api-platform/api-platform\",\n        \"!api-platform/parameter-validator\",\n        \"!api-platform/postman-collection-generator\",\n        \"!api-platform/schema-generator\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupatlaskit","title":"<code>group:atlaskit</code>","text":"<p>Group all Atlassian <code>@atlaskit</code> packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"packages:atlaskit\" // (1)!\n      ],\n      \"groupName\": \"Atlassian Atlaskit packages\"\n    }\n  ]\n}\n</code></pre> <ol> <li><code>packages:atlaskit</code>: All @atlaskit packages published by Atlassian.</li> </ol>"},{"location":"presets-group/#groupboto","title":"<code>group:boto</code>","text":"<p>Group all Boto packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"boto\",\n      \"matchDatasources\": [\n        \"pypi\"\n      ],\n      \"matchPackageNames\": [\n        \"boto3\",\n        \"botocore\",\n        \"s3transfer\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupcodemirror","title":"<code>group:codemirror</code>","text":"<p>Group CodeMirror packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"CodeMirror\",\n      \"matchPackageNames\": [\n        \"@codemirror/**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupdefinitelytyped","title":"<code>group:definitelyTyped</code>","text":"<p>Group all <code>@types</code> packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"definitelyTyped\",\n      \"matchPackageNames\": [\n        \"@types/**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupdotnetcore","title":"<code>group:dotNetCore</code>","text":"<p>.NET Core Docker containers.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \".NET Core Docker containers\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"mcr.microsoft.com/dotnet/**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupdrupal-core","title":"<code>group:drupal-core</code>","text":"<p>Group Drupal core updates.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"Drupal core\",\n      \"matchPackageNames\": [\n        \"drupal/core\",\n        \"drupal/core-*\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupflyway","title":"<code>group:flyway</code>","text":"<p>Group Java Flyway packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"flyway\",\n      \"matchPackageNames\": [\n        \"org.flywaydb:*\",\n        \"org.flywaydb.flyway:*\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupfortawesome","title":"<code>group:fortawesome</code>","text":"<p>Group all packages by Font Awesome together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"Font Awesome\",\n      \"matchPackageNames\": [\n        \"@fortawesome/**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupfusionjs","title":"<code>group:fusionjs</code>","text":"<p>Group Fusion.js packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"Fusion.js packages\",\n      \"matchPackageNames\": [\n        \"fusion-cli\",\n        \"fusion-core\",\n        \"fusion-test-utils\",\n        \"fusion-tokens\",\n        \"fusion-plugin-**\",\n        \"fusion-react**\",\n        \"fusion-apollo**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupgithubartifactactions","title":"<code>group:githubArtifactActions</code>","text":"<p>Group <code>download-artifact</code> and <code>upload-artifact</code> major updates together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"GitHub Artifact Actions\",\n      \"matchManagers\": [\n        \"github-actions\"\n      ],\n      \"matchPackageNames\": [\n        \"actions/download-artifact\",\n        \"actions/upload-artifact\"\n      ],\n      \"matchUpdateTypes\": [\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupglimmer","title":"<code>group:glimmer</code>","text":"<p>Group Glimmer.js packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"Glimmer.js packages\",\n      \"groupSlug\": \"glimmer\",\n      \"matchPackageNames\": [\n        \"@glimmer/component\",\n        \"@glimmer/tracking\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupgoogleapis","title":"<code>group:googleapis</code>","text":"<p>Group <code>googleapis</code> packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"packages:googleapis\" // (1)!\n      ],\n      \"groupName\": \"googleapis packages\"\n    }\n  ]\n}\n</code></pre> <ol> <li><code>packages:googleapis</code>: All <code>googleapis</code> packages.</li> </ol>"},{"location":"presets-group/#groupgoopenapi","title":"<code>group:goOpenapi</code>","text":"<p>Group <code>go-openapi</code> packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"go-openapi packages\",\n      \"groupSlug\": \"go-openapi\",\n      \"matchDatasources\": [\n        \"go\"\n      ],\n      \"matchPackageNames\": [\n        \"github.com/go-openapi/**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupgradle","title":"<code>group:gradle</code>","text":"<p>Group anything that looks like Gradle together so that it's updated together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"commitMessageTopic\": \"Gradle\",\n      \"matchDatasources\": [\n        \"docker\",\n        \"gradle-version\"\n      ],\n      \"matchPackageNames\": [\n        \"/(?:^|/)gradle$/\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#grouphibernatecommons","title":"<code>group:hibernateCommons</code>","text":"<p>Group Java Hibernate Commons packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"hibernate commons\",\n      \"matchPackageNames\": [\n        \"org.hibernate.common:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#grouphibernatecore","title":"<code>group:hibernateCore</code>","text":"<p>Group Java Hibernate Core packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"hibernate core\",\n      \"matchPackageNames\": [\n        \"org.hibernate:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#grouphibernateogm","title":"<code>group:hibernateOgm</code>","text":"<p>Group Java Hibernate OGM packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"hibernate ogm\",\n      \"matchPackageNames\": [\n        \"org.hibernate.ogm:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#grouphibernatevalidator","title":"<code>group:hibernateValidator</code>","text":"<p>Group Java Hibernate Validator packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"hibernate validator\",\n      \"matchPackageNames\": [\n        \"org.hibernate.validator:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupilluminate","title":"<code>group:illuminate</code>","text":"<p>Group PHP Illuminate packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"illuminate packages\",\n      \"groupSlug\": \"illuminate\",\n      \"matchPackageNames\": [\n        \"illuminate/**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupjava","title":"<code>group:java</code>","text":"<p>Group Java runtime versions together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"Java\",\n      \"matchDatasources\": [\n        \"java-version\"\n      ],\n      \"matchPackageNames\": [\n        \"java\",\n        \"java-jdk\",\n        \"java-jre\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupjekyllecosystem","title":"<code>group:jekyllEcosystem</code>","text":"<p>Group Jekyll and related Ruby packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"jekyll ecosystem packages\",\n      \"matchSourceUrls\": [\n        \"https://github.com/jekyll/**\",\n        \"https://github.com/github/pages-gem**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupjestplustsjest","title":"<code>group:jestPlusTSJest</code>","text":"<p>Add <code>ts-jest</code> <code>major</code> update to Jest monorepo.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"jest monorepo\",\n      \"matchSourceUrls\": [\n        \"https://github.com/kulshekhar/ts-jest\"\n      ],\n      \"matchUpdateTypes\": [\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupjestplustypes","title":"<code>group:jestPlusTypes</code>","text":"<p>Add <code>@types/jest</code> update to Jest monorepo.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"jest monorepo\",\n      \"matchPackageNames\": [\n        \"@types/jest\"\n      ],\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupjstest","title":"<code>group:jsTest</code>","text":"<p>Group JS test packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"packages:jsTest\" // (1)!\n      ],\n      \"groupName\": \"JS test packages\"\n    }\n  ]\n}\n</code></pre> <ol> <li><code>packages:jsTest</code>: JavaScript test packages.</li> </ol>"},{"location":"presets-group/#groupjstestnonmajor","title":"<code>group:jsTestNonMajor</code>","text":"<p>Group non-major JS test package updates together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"packages:jsTest\" // (1)!\n      ],\n      \"groupName\": \"JS test packages\",\n      \"matchUpdateTypes\": [\n        \"minor\",\n        \"patch\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>packages:jsTest</code>: JavaScript test packages.</li> </ol>"},{"location":"presets-group/#groupjsunittest","title":"<code>group:jsUnitTest</code>","text":"<p>Group JavaScript unit test packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"packages:jsUnitTest\" // (1)!\n      ],\n      \"groupName\": \"JS unit test packages\"\n    }\n  ]\n}\n</code></pre> <ol> <li><code>packages:jsUnitTest</code>: Unit test packages for JavaScript.</li> </ol>"},{"location":"presets-group/#groupjsunittestnonmajor","title":"<code>group:jsUnitTestNonMajor</code>","text":"<p>Group JavaScipt unit test packages together for non-major updates.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"packages:jsUnitTest\" // (1)!\n      ],\n      \"groupName\": \"JS unit test packages\",\n      \"matchUpdateTypes\": [\n        \"minor\",\n        \"patch\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>packages:jsUnitTest</code>: Unit test packages for JavaScript.</li> </ol>"},{"location":"presets-group/#groupjwtframework","title":"<code>group:jwtFramework</code>","text":"<p>Group JWT Framework packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"JWT Framework packages\",\n      \"matchDatasources\": [\n        \"packagist\"\n      ],\n      \"matchPackageNames\": [\n        \"web-token/**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#grouplinters","title":"<code>group:linters</code>","text":"<p>Group various lint packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"packages:linters\" // (1)!\n      ],\n      \"groupName\": \"linters\"\n    }\n  ]\n}\n</code></pre> <ol> <li><code>packages:linters</code>: All lint-related packages.</li> </ol>"},{"location":"presets-group/#groupmicrometer","title":"<code>group:micrometer</code>","text":"<p>Group Micrometer packages together, e.g. 'io.micrometer:micrometer-core'.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"micrometer\",\n      \"matchPackageNames\": [\n        \"io.micrometer:micrometer-**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupnodejs","title":"<code>group:nodeJs</code>","text":"<p>Group anything that looks like Node.js together so that it's updated together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"commitMessageTopic\": \"Node.js\",\n      \"matchDatasources\": [\n        \"docker\",\n        \"node-version\"\n      ],\n      \"matchPackageNames\": [\n        \"/(?:^|/)node$/\",\n        \"!calico/node\",\n        \"!docker.io/calico/node\",\n        \"!ghcr.io/devcontainers/features/node\",\n        \"!kindest/node\",\n        \"!docker.io/kindest/node\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupnodejswithtypes","title":"<code>group:nodeJsWithTypes</code>","text":"<p>Group Node.js runtime updates together with <code>@types/node</code>.</p> <pre><code>{\n  \"extends\": [\n    \"group:nodeJs\" // (1)!\n  ],\n  \"packageRules\": [\n    {\n      \"groupName\": \"Node.js\",\n      \"matchDatasources\": [\n        \"docker\",\n        \"node-version\"\n      ],\n      \"matchPackageNames\": [\n        \"/(?:^|/)node$/\",\n        \"!calico/node\",\n        \"!docker.io/calico/node\",\n        \"!ghcr.io/devcontainers/features/node\",\n        \"!kindest/node\",\n        \"!docker.io/kindest/node\"\n      ]\n    },\n    {\n      \"groupName\": \"Node.js\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@types/node\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>group:nodeJs</code>: Group anything that looks like Node.js together so that it's updated together.</li> </ol>"},{"location":"presets-group/#groupphpstan","title":"<code>group:phpstan</code>","text":"<p>Group PHPStan packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"PHPStan packages\",\n      \"matchDatasources\": [\n        \"packagist\"\n      ],\n      \"matchPackageNames\": [\n        \"phpstan/phpstan\",\n        \"//phpstan-/\",\n        \"//larastan/\",\n        \"phpstan/extension-installer\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#grouppnpm","title":"<code>group:pnpm</code>","text":"<p>Group pnpm packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"pnpm packages\",\n      \"matchDatasources\": [\n        \"docker\",\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"pnpm\",\n        \"ghcr.io/pnpm/pnpm\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#grouppolymer","title":"<code>group:polymer</code>","text":"<p>Group all <code>@polymer</code> packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"polymer packages\",\n      \"matchPackageNames\": [\n        \"@polymer/**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#grouppostcss","title":"<code>group:postcss</code>","text":"<p>Group PostCSS packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"packages:postcss\" // (1)!\n      ],\n      \"groupName\": \"postcss packages\"\n    }\n  ]\n}\n</code></pre> <ol> <li><code>packages:postcss</code>: All PostCSS packages.</li> </ol>"},{"location":"presets-group/#groupprimer","title":"<code>group:primer</code>","text":"<p>Group all <code>@primer</code> packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"Primer packages\",\n      \"groupSlug\": \"primer\",\n      \"matchPackageNames\": [\n        \"@primer/**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#grouppulumi","title":"<code>group:pulumi</code>","text":"<p>Group Pulumi packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Group Pulumi Node.JS packages together.\",\n      \"groupName\": \"Pulumi\",\n      \"groupSlug\": \"pulumi-node\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@pulumi/**\"\n      ]\n    },\n    {\n      \"description\": \"Group Pulumi Python packages together.\",\n      \"groupName\": \"Pulumi\",\n      \"groupSlug\": \"pulumi-python\",\n      \"matchDatasources\": [\n        \"pypi\"\n      ],\n      \"matchPackageNames\": [\n        \"pulumi-**\"\n      ]\n    },\n    {\n      \"description\": \"Group Pulumi Go packages together.\",\n      \"groupName\": \"Pulumi\",\n      \"groupSlug\": \"pulumi-go\",\n      \"matchDatasources\": [\n        \"go\"\n      ],\n      \"matchPackageNames\": [\n        \"github.com/pulumi/**\"\n      ]\n    },\n    {\n      \"description\": \"Group Pulumi Java packages together.\",\n      \"groupName\": \"Pulumi\",\n      \"groupSlug\": \"pulumi-java\",\n      \"matchDatasources\": [\n        \"maven\"\n      ],\n      \"matchPackageNames\": [\n        \"com.pulumi**\"\n      ]\n    },\n    {\n      \"description\": \"Group Pulumi .NET packages together.\",\n      \"groupName\": \"Pulumi\",\n      \"groupSlug\": \"pulumi-dotnet\",\n      \"matchDatasources\": [\n        \"nuget\"\n      ],\n      \"matchPackageNames\": [\n        \"Pulumi**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#grouppuppeteer","title":"<code>group:puppeteer</code>","text":"<p>Group Puppeteer packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"Puppeteer\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"puppeteer\",\n        \"puppeteer-core\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupreact","title":"<code>group:react</code>","text":"<p>Group React and corresponding <code>@types</code> packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"react monorepo\",\n      \"matchPackageNames\": [\n        \"@types/react\",\n        \"@types/react-dom\",\n        \"@types/react-is\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#grouprecommended","title":"<code>group:recommended</code>","text":"<p>Use curated list of recommended non-monorepo package groupings.</p> <pre><code>{\n  \"extends\": [\n    \"group:nodeJs\", // (1)!\n    \"group:allApollographql\", // (2)!\n    \"group:apiPlatform\", // (3)!\n    \"group:boto\", // (4)!\n    \"group:codemirror\", // (5)!\n    \"group:flyway\", // (6)!\n    \"group:fortawesome\", // (7)!\n    \"group:fusionjs\", // (8)!\n    \"group:githubArtifactActions\", // (9)!\n    \"group:glimmer\", // (10)!\n    \"group:goOpenapi\", // (11)!\n    \"group:gradle\", // (12)!\n    \"group:hibernateCore\", // (13)!\n    \"group:hibernateValidator\", // (14)!\n    \"group:hibernateOgm\", // (15)!\n    \"group:hibernateCommons\", // (16)!\n    \"group:illuminate\", // (17)!\n    \"group:java\", // (18)!\n    \"group:jekyllEcosystem\", // (19)!\n    \"group:jestPlusTSJest\", // (20)!\n    \"group:jestPlusTypes\", // (21)!\n    \"group:jwtFramework\", // (22)!\n    \"group:micrometer\", // (23)!\n    \"group:phpstan\", // (24)!\n    \"group:polymer\", // (25)!\n    \"group:puppeteer\", // (26)!\n    \"group:react\", // (27)!\n    \"group:remark\", // (28)!\n    \"group:resilience4j\", // (29)!\n    \"group:rubyOnRails\", // (30)!\n    \"group:rubyOmniauth\", // (31)!\n    \"group:socketio\", // (32)!\n    \"group:springAmqp\", // (33)!\n    \"group:springAndroid\", // (34)!\n    \"group:springBatch\", // (35)!\n    \"group:springBoot\", // (36)!\n    \"group:springCloud\", // (37)!\n    \"group:springCore\", // (38)!\n    \"group:springData\", // (39)!\n    \"group:springHateoas\", // (40)!\n    \"group:springIntegration\", // (41)!\n    \"group:springKafka\", // (42)!\n    \"group:springLdap\", // (43)!\n    \"group:springMobile\", // (44)!\n    \"group:springOsgi\", // (45)!\n    \"group:springRestDocs\", // (46)!\n    \"group:springRoo\", // (47)!\n    \"group:springScala\", // (48)!\n    \"group:springSecurity\", // (49)!\n    \"group:springSession\", // (50)!\n    \"group:springShell\", // (51)!\n    \"group:springSocial\", // (52)!\n    \"group:springStatemachine\", // (53)!\n    \"group:springWebflow\", // (54)!\n    \"group:springWs\", // (55)!\n    \"group:symfony\" // (56)!\n  ]\n}\n</code></pre> <ol> <li><code>group:nodeJs</code>: Group anything that looks like Node.js together so that it's updated together.</li> <li><code>group:allApollographql</code>: Group all packages published by Apollo GraphQL together.</li> <li><code>group:apiPlatform</code>: Group PHP API Platform packages together.</li> <li><code>group:boto</code>: Group all Boto packages together.</li> <li><code>group:codemirror</code>: Group CodeMirror packages together.</li> <li><code>group:flyway</code>: Group Java Flyway packages.</li> <li><code>group:fortawesome</code>: Group all packages by Font Awesome together.</li> <li><code>group:fusionjs</code>: Group Fusion.js packages together.</li> <li><code>group:githubArtifactActions</code>: Group <code>download-artifact</code> and <code>upload-artifact</code> major updates together.</li> <li><code>group:glimmer</code>: Group Glimmer.js packages together.</li> <li><code>group:goOpenapi</code>: Group <code>go-openapi</code> packages together.</li> <li><code>group:gradle</code>: Group anything that looks like Gradle together so that it's updated together.</li> <li><code>group:hibernateCore</code>: Group Java Hibernate Core packages.</li> <li><code>group:hibernateValidator</code>: Group Java Hibernate Validator packages.</li> <li><code>group:hibernateOgm</code>: Group Java Hibernate OGM packages.</li> <li><code>group:hibernateCommons</code>: Group Java Hibernate Commons packages.</li> <li><code>group:illuminate</code>: Group PHP Illuminate packages together.</li> <li><code>group:java</code>: Group Java runtime versions together.</li> <li><code>group:jekyllEcosystem</code>: Group Jekyll and related Ruby packages together.</li> <li><code>group:jestPlusTSJest</code>: Add <code>ts-jest</code> <code>major</code> update to Jest monorepo.</li> <li><code>group:jestPlusTypes</code>: Add <code>@types/jest</code> update to Jest monorepo.</li> <li><code>group:jwtFramework</code>: Group JWT Framework packages together.</li> <li><code>group:micrometer</code>: Group Micrometer packages together, e.g. 'io.micrometer:micrometer-core'.</li> <li><code>group:phpstan</code>: Group PHPStan packages together.</li> <li><code>group:polymer</code>: Group all <code>@polymer</code> packages together.</li> <li><code>group:puppeteer</code>: Group Puppeteer packages together.</li> <li><code>group:react</code>: Group React and corresponding <code>@types</code> packages together.</li> <li><code>group:remark</code>: Group remark packages together.</li> <li><code>group:resilience4j</code>: Group Java Resilience4j packages.</li> <li><code>group:rubyOnRails</code>: Group Ruby on Rails packages together.</li> <li><code>group:rubyOmniauth</code>: Group OmniAuth packages together.</li> <li><code>group:socketio</code>: Group socket.io packages.</li> <li><code>group:springAmqp</code>: Group Java Spring AMQP packages.</li> <li><code>group:springAndroid</code>: Group Java Spring Android packages.</li> <li><code>group:springBatch</code>: Group Java Spring Batch packages.</li> <li><code>group:springBoot</code>: Group Java Spring Boot packages.</li> <li><code>group:springCloud</code>: Group Java Spring Cloud packages.</li> <li><code>group:springCore</code>: Group Java Spring Core packages.</li> <li><code>group:springData</code>: Group Java Spring Data packages.</li> <li><code>group:springHateoas</code>: Group Java Spring HATEOAS packages.</li> <li><code>group:springIntegration</code>: Group Java Spring Integration packages.</li> <li><code>group:springKafka</code>: Group Java Spring Kafka packages.</li> <li><code>group:springLdap</code>: Group Java Spring LDAP packages.</li> <li><code>group:springMobile</code>: Group Java Spring Mobile packages.</li> <li><code>group:springOsgi</code>: Group Java Spring OSGi packages.</li> <li><code>group:springRestDocs</code>: Group Java Spring REST Docs packages.</li> <li><code>group:springRoo</code>: Group Java Spring Roo packages.</li> <li><code>group:springScala</code>: Group Java Spring Scala packages.</li> <li><code>group:springSecurity</code>: Group Java Spring Security packages.</li> <li><code>group:springSession</code>: Group Java Spring Session packages.</li> <li><code>group:springShell</code>: Group Java Spring Shell packages.</li> <li><code>group:springSocial</code>: Group Java Spring Social packages.</li> <li><code>group:springStatemachine</code>: Group Java Spring Statemachine packages.</li> <li><code>group:springWebflow</code>: Group Java Spring WebFlow packages.</li> <li><code>group:springWs</code>: Group Java Spring WS packages.</li> <li><code>group:symfony</code>: Group PHP Symfony packages together.</li> </ol>"},{"location":"presets-group/#groupremark","title":"<code>group:remark</code>","text":"<p>Group remark packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"remark\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchSourceUrls\": [\n        \"https://github.com/remarkjs/**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupresilience4j","title":"<code>group:resilience4j</code>","text":"<p>Group Java Resilience4j packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"resilience4j\",\n      \"matchPackageNames\": [\n        \"io.github.resilience4j:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#grouprubyomniauth","title":"<code>group:rubyOmniauth</code>","text":"<p>Group OmniAuth packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"omniauth packages\",\n      \"matchDatasources\": [\n        \"rubygems\"\n      ],\n      \"matchPackageNames\": [\n        \"omniauth**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#grouprubyonrails","title":"<code>group:rubyOnRails</code>","text":"<p>Group Ruby on Rails packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"Ruby on Rails packages\",\n      \"matchDatasources\": [\n        \"rubygems\"\n      ],\n      \"matchPackageNames\": [\n        \"actioncable\",\n        \"actionmailbox\",\n        \"actionmailer\",\n        \"actionpack\",\n        \"actiontext\",\n        \"actionview\",\n        \"activejob\",\n        \"activemodel\",\n        \"activerecord\",\n        \"activestorage\",\n        \"activesupport\",\n        \"railties\",\n        \"rails\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupsocketio","title":"<code>group:socketio</code>","text":"<p>Group socket.io packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"socket.io packages\",\n      \"matchPackageNames\": [\n        \"socket.io**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringamqp","title":"<code>group:springAmqp</code>","text":"<p>Group Java Spring AMQP packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring amqp\",\n      \"matchPackageNames\": [\n        \"org.springframework.amqp:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringandroid","title":"<code>group:springAndroid</code>","text":"<p>Group Java Spring Android packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring android\",\n      \"matchPackageNames\": [\n        \"org.springframework.android:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringbatch","title":"<code>group:springBatch</code>","text":"<p>Group Java Spring Batch packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring batch\",\n      \"matchPackageNames\": [\n        \"org.springframework.batch:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringboot","title":"<code>group:springBoot</code>","text":"<p>Group Java Spring Boot packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring boot\",\n      \"matchDepNames\": [\n        \"org.springframework.boot\"\n      ]\n    },\n    {\n      \"groupName\": \"spring boot\",\n      \"matchPackageNames\": [\n        \"org.springframework.boot:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringcloud","title":"<code>group:springCloud</code>","text":"<p>Group Java Spring Cloud packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring cloud\",\n      \"matchPackageNames\": [\n        \"org.springframework.cloud:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringcore","title":"<code>group:springCore</code>","text":"<p>Group Java Spring Core packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring core\",\n      \"matchPackageNames\": [\n        \"org.springframework:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringdata","title":"<code>group:springData</code>","text":"<p>Group Java Spring Data packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring data\",\n      \"matchPackageNames\": [\n        \"org.springframework.data:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringhateoas","title":"<code>group:springHateoas</code>","text":"<p>Group Java Spring HATEOAS packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring hateoas\",\n      \"matchPackageNames\": [\n        \"org.springframework.hateoas:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringintegration","title":"<code>group:springIntegration</code>","text":"<p>Group Java Spring Integration packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring integration\",\n      \"matchPackageNames\": [\n        \"org.springframework.integration:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringkafka","title":"<code>group:springKafka</code>","text":"<p>Group Java Spring Kafka packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring kafka\",\n      \"matchPackageNames\": [\n        \"org.springframework.kafka:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringldap","title":"<code>group:springLdap</code>","text":"<p>Group Java Spring LDAP packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring ldap\",\n      \"matchPackageNames\": [\n        \"org.springframework.ldap:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringmobile","title":"<code>group:springMobile</code>","text":"<p>Group Java Spring Mobile packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring mobile\",\n      \"matchPackageNames\": [\n        \"org.springframework.mobile:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringosgi","title":"<code>group:springOsgi</code>","text":"<p>Group Java Spring OSGi packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring osgi\",\n      \"matchPackageNames\": [\n        \"org.springframework.osgi:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringrestdocs","title":"<code>group:springRestDocs</code>","text":"<p>Group Java Spring REST Docs packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring restdocs\",\n      \"matchPackageNames\": [\n        \"org.springframework.restdocs:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringroo","title":"<code>group:springRoo</code>","text":"<p>Group Java Spring Roo packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring roo\",\n      \"matchPackageNames\": [\n        \"org.springframework.roo:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringscala","title":"<code>group:springScala</code>","text":"<p>Group Java Spring Scala packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring scala\",\n      \"matchPackageNames\": [\n        \"org.springframework.scala:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringsecurity","title":"<code>group:springSecurity</code>","text":"<p>Group Java Spring Security packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring security\",\n      \"matchPackageNames\": [\n        \"org.springframework.security:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringsession","title":"<code>group:springSession</code>","text":"<p>Group Java Spring Session packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring session\",\n      \"matchPackageNames\": [\n        \"org.springframework.session:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringshell","title":"<code>group:springShell</code>","text":"<p>Group Java Spring Shell packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring shell\",\n      \"matchPackageNames\": [\n        \"org.springframework.shell:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringsocial","title":"<code>group:springSocial</code>","text":"<p>Group Java Spring Social packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring social\",\n      \"matchPackageNames\": [\n        \"org.springframework.social:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringstatemachine","title":"<code>group:springStatemachine</code>","text":"<p>Group Java Spring Statemachine packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring statemachine\",\n      \"matchPackageNames\": [\n        \"org.springframework.statemachine:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringwebflow","title":"<code>group:springWebflow</code>","text":"<p>Group Java Spring WebFlow packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring webflow\",\n      \"matchPackageNames\": [\n        \"org.springframework.webflow:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupspringws","title":"<code>group:springWs</code>","text":"<p>Group Java Spring WS packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"spring ws\",\n      \"matchPackageNames\": [\n        \"org.springframework.ws:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#groupstylelint","title":"<code>group:stylelint</code>","text":"<p>Group stylelint packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"packages:stylelint\" // (1)!\n      ],\n      \"groupName\": \"stylelint packages\",\n      \"groupSlug\": \"stylelint\",\n      \"separateMajorMinor\": false\n    }\n  ]\n}\n</code></pre> <ol> <li><code>packages:stylelint</code>: All Stylelint packages.</li> </ol>"},{"location":"presets-group/#groupsymfony","title":"<code>group:symfony</code>","text":"<p>Group PHP Symfony packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"groupName\": \"symfony packages\",\n      \"groupSlug\": \"symfony\",\n      \"matchDatasources\": [\n        \"packagist\"\n      ],\n      \"matchPackageNames\": [\n        \"symfony/*\",\n        \"!symfony/*contracts\",\n        \"!symfony/*pack\",\n        \"!symfony/flex\",\n        \"!symfony/maker-bundle\",\n        \"!symfony/monolog-bundle\",\n        \"!symfony/panther\",\n        \"!symfony/polyfill*\",\n        \"!symfony/proxy-manager-bridge\",\n        \"!symfony/security-guard\",\n        \"!symfony/stimulus-bundle\",\n        \"!symfony/templating\",\n        \"!symfony/thanks\",\n        \"!symfony/ux*\",\n        \"!symfony/webpack-encore-bundle\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-group/#grouptest","title":"<code>group:test</code>","text":"<p>Group all test packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"packages:test\" // (1)!\n      ],\n      \"groupName\": \"test packages\"\n    }\n  ]\n}\n</code></pre> <ol> <li><code>packages:test</code>: Test packages.</li> </ol>"},{"location":"presets-group/#grouptestnonmajor","title":"<code>group:testNonMajor</code>","text":"<p>Group all non-major test package updates together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"packages:test\" // (1)!\n      ],\n      \"groupName\": \"test packages\",\n      \"matchUpdateTypes\": [\n        \"minor\",\n        \"patch\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>packages:test</code>: Test packages.</li> </ol>"},{"location":"presets-group/#groupunittest","title":"<code>group:unitTest</code>","text":"<p>Group all unit test packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"packages:unitTest\" // (1)!\n      ],\n      \"groupName\": \"unit test packages\"\n    }\n  ]\n}\n</code></pre> <ol> <li><code>packages:unitTest</code>: All unit test packages.</li> </ol>"},{"location":"presets-group/#groupunittestnonmajor","title":"<code>group:unitTestNonMajor</code>","text":"<p>Group all unit test packages together for non-major updates.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"packages:unitTest\" // (1)!\n      ],\n      \"groupName\": \"unit test packages\",\n      \"matchUpdateTypes\": [\n        \"minor\",\n        \"patch\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>packages:unitTest</code>: All unit test packages.</li> </ol>"},{"location":"presets-group/#groupvite","title":"<code>group:vite</code>","text":"<p>Group all Vite related packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"packages:vite\" // (1)!\n      ],\n      \"groupName\": \"Vite packages\"\n    }\n  ]\n}\n</code></pre> <ol> <li><code>packages:vite</code>: All Vite related packages</li> </ol>"},{"location":"presets-group/#groupviteplus","title":"<code>group:vitePlus</code>","text":"<p>Group all Vite+ related packages together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"packages:vitePlus\" // (1)!\n      ],\n      \"groupName\": \"Vite+ packages\"\n    }\n  ]\n}\n</code></pre> <ol> <li><code>packages:vitePlus</code>: All Vite+ related packages</li> </ol>"},{"location":"presets-group/#groupaccountsmonorepo","title":"<code>group:accountsMonorepo</code>","text":"<p>Group packages from accounts monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:accounts\" // (1)!\n      ],\n      \"groupName\": \"accounts monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:accounts</code>: accounts monorepo</li> </ol>"},{"location":"presets-group/#groupacotmonorepo","title":"<code>group:acotMonorepo</code>","text":"<p>Group packages from acot monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:acot\" // (1)!\n      ],\n      \"groupName\": \"acot monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:acot</code>: acot monorepo</li> </ol>"},{"location":"presets-group/#groupag-gridmonorepo","title":"<code>group:ag-gridMonorepo</code>","text":"<p>Group packages from ag-grid monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:ag-grid\" // (1)!\n      ],\n      \"groupName\": \"ag-grid monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:ag-grid</code>: ag-grid monorepo</li> </ol>"},{"location":"presets-group/#groupalgolia-instantsearchmonorepo","title":"<code>group:algolia-instantsearchMonorepo</code>","text":"<p>Group packages from algolia-instantsearch monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:algolia-instantsearch\" // (1)!\n      ],\n      \"groupName\": \"algolia-instantsearch monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:algolia-instantsearch</code>: algolia-instantsearch monorepo</li> </ol>"},{"location":"presets-group/#groupalgolia-react-instantsearchmonorepo","title":"<code>group:algolia-react-instantsearchMonorepo</code>","text":"<p>Group packages from algolia-react-instantsearch monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:algolia-react-instantsearch\" // (1)!\n      ],\n      \"groupName\": \"algolia-react-instantsearch monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:algolia-react-instantsearch</code>: algolia-react-instantsearch monorepo</li> </ol>"},{"location":"presets-group/#groupalgoliasearch-autocompletemonorepo","title":"<code>group:algoliasearch-autocompleteMonorepo</code>","text":"<p>Group packages from algoliasearch-autocomplete monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:algoliasearch-autocomplete\" // (1)!\n      ],\n      \"groupName\": \"algoliasearch-autocomplete monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:algoliasearch-autocomplete</code>: algoliasearch-autocomplete monorepo</li> </ol>"},{"location":"presets-group/#groupalgoliasearch-client-javascriptmonorepo","title":"<code>group:algoliasearch-client-javascriptMonorepo</code>","text":"<p>Group packages from algoliasearch-client-javascript monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:algoliasearch-client-javascript\" // (1)!\n      ],\n      \"groupName\": \"algoliasearch-client-javascript monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:algoliasearch-client-javascript</code>: algoliasearch-client-javascript monorepo</li> </ol>"},{"location":"presets-group/#groupanalogmonorepo","title":"<code>group:analogMonorepo</code>","text":"<p>Group packages from analog monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:analog\" // (1)!\n      ],\n      \"groupName\": \"analog monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:analog</code>: analog monorepo</li> </ol>"},{"location":"presets-group/#groupangularmonorepo","title":"<code>group:angularMonorepo</code>","text":"<p>Group packages from angular monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:angular\" // (1)!\n      ],\n      \"groupName\": \"angular monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:angular</code>: angular monorepo</li> </ol>"},{"location":"presets-group/#groupangular-climonorepo","title":"<code>group:angular-cliMonorepo</code>","text":"<p>Group packages from angular-cli monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:angular-cli\" // (1)!\n      ],\n      \"groupName\": \"angular-cli monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:angular-cli</code>: angular-cli monorepo</li> </ol>"},{"location":"presets-group/#groupangular-eslintmonorepo","title":"<code>group:angular-eslintMonorepo</code>","text":"<p>Group packages from angular-eslint monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:angular-eslint\" // (1)!\n      ],\n      \"groupName\": \"angular-eslint monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:angular-eslint</code>: angular-eslint monorepo</li> </ol>"},{"location":"presets-group/#groupangularfiremonorepo","title":"<code>group:angularfireMonorepo</code>","text":"<p>Group packages from angularfire monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:angularfire\" // (1)!\n      ],\n      \"groupName\": \"angularfire monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:angularfire</code>: angularfire monorepo</li> </ol>"},{"location":"presets-group/#groupangularjsmonorepo","title":"<code>group:angularjsMonorepo</code>","text":"<p>Group packages from angularjs monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:angularjs\" // (1)!\n      ],\n      \"groupName\": \"angularjs monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:angularjs</code>: angularjs monorepo</li> </ol>"},{"location":"presets-group/#groupapache-lucenemonorepo","title":"<code>group:apache-luceneMonorepo</code>","text":"<p>Group packages from apache-lucene monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:apache-lucene\" // (1)!\n      ],\n      \"groupName\": \"apache-lucene monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:apache-lucene</code>: apache-lucene monorepo</li> </ol>"},{"location":"presets-group/#groupapollo-servermonorepo","title":"<code>group:apollo-serverMonorepo</code>","text":"<p>Group packages from apollo-server monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:apollo-server\" // (1)!\n      ],\n      \"groupName\": \"apollo-server monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:apollo-server</code>: apollo-server monorepo</li> </ol>"},{"location":"presets-group/#groupapolloclientmonorepo","title":"<code>group:apolloclientMonorepo</code>","text":"<p>Group packages from apolloclient monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:apolloclient\" // (1)!\n      ],\n      \"groupName\": \"apolloclient monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:apolloclient</code>: apolloclient monorepo</li> </ol>"},{"location":"presets-group/#groupappiummonorepo","title":"<code>group:appiumMonorepo</code>","text":"<p>Group packages from appium monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:appium\" // (1)!\n      ],\n      \"groupName\": \"appium monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:appium</code>: appium monorepo</li> </ol>"},{"location":"presets-group/#groupapplicationinsights-dotnetmonorepo","title":"<code>group:applicationinsights-dotnetMonorepo</code>","text":"<p>Group packages from applicationinsights-dotnet monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:applicationinsights-dotnet\" // (1)!\n      ],\n      \"groupName\": \"applicationinsights-dotnet monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:applicationinsights-dotnet</code>: applicationinsights-dotnet monorepo</li> </ol>"},{"location":"presets-group/#grouparcusbackground-jobsmonorepo","title":"<code>group:arcus.background-jobsMonorepo</code>","text":"<p>Group packages from arcus.background-jobs monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:arcus.background-jobs\" // (1)!\n      ],\n      \"groupName\": \"arcus.background-jobs monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:arcus.background-jobs</code>: arcus.background-jobs monorepo</li> </ol>"},{"location":"presets-group/#grouparcusevent-gridmonorepo","title":"<code>group:arcus.event-gridMonorepo</code>","text":"<p>Group packages from arcus.event-grid monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:arcus.event-grid\" // (1)!\n      ],\n      \"groupName\": \"arcus.event-grid monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:arcus.event-grid</code>: arcus.event-grid monorepo</li> </ol>"},{"location":"presets-group/#grouparcusmessagingmonorepo","title":"<code>group:arcus.messagingMonorepo</code>","text":"<p>Group packages from arcus.messaging monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:arcus.messaging\" // (1)!\n      ],\n      \"groupName\": \"arcus.messaging monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:arcus.messaging</code>: arcus.messaging monorepo</li> </ol>"},{"location":"presets-group/#grouparcusobservabilitymonorepo","title":"<code>group:arcus.observabilityMonorepo</code>","text":"<p>Group packages from arcus.observability monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:arcus.observability\" // (1)!\n      ],\n      \"groupName\": \"arcus.observability monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:arcus.observability</code>: arcus.observability monorepo</li> </ol>"},{"location":"presets-group/#grouparcussecuritymonorepo","title":"<code>group:arcus.securityMonorepo</code>","text":"<p>Group packages from arcus.security monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:arcus.security\" // (1)!\n      ],\n      \"groupName\": \"arcus.security monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:arcus.security</code>: arcus.security monorepo</li> </ol>"},{"location":"presets-group/#grouparcuswebapimonorepo","title":"<code>group:arcus.webapiMonorepo</code>","text":"<p>Group packages from arcus.webapi monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:arcus.webapi\" // (1)!\n      ],\n      \"groupName\": \"arcus.webapi monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:arcus.webapi</code>: arcus.webapi monorepo</li> </ol>"},{"location":"presets-group/#grouparrow-ktmonorepo","title":"<code>group:arrow-ktMonorepo</code>","text":"<p>Group packages from arrow-kt monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:arrow-kt\" // (1)!\n      ],\n      \"groupName\": \"arrow-kt monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:arrow-kt</code>: arrow-kt monorepo</li> </ol>"},{"location":"presets-group/#grouparrow-rsmonorepo","title":"<code>group:arrow-rsMonorepo</code>","text":"<p>Group packages from arrow-rs monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:arrow-rs\" // (1)!\n      ],\n      \"groupName\": \"arrow-rs monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:arrow-rs</code>: arrow-rs monorepo</li> </ol>"},{"location":"presets-group/#groupaspiremonorepo","title":"<code>group:aspireMonorepo</code>","text":"<p>Group packages from aspire monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:aspire\" // (1)!\n      ],\n      \"groupName\": \"aspire monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:aspire</code>: aspire monorepo</li> </ol>"},{"location":"presets-group/#groupaspnet-aspnetwebstackmonorepo","title":"<code>group:aspnet aspnetwebstackMonorepo</code>","text":"<p>Group packages from aspnet aspnetwebstack monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:aspnet aspnetwebstack\" // (1)!\n      ],\n      \"groupName\": \"aspnet aspnetwebstack monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:aspnet aspnetwebstack</code>: aspnet aspnetwebstack monorepo</li> </ol>"},{"location":"presets-group/#groupaspnet-extensionsmonorepo","title":"<code>group:aspnet extensionsMonorepo</code>","text":"<p>Group packages from aspnet extensions monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:aspnet extensions\" // (1)!\n      ],\n      \"groupName\": \"aspnet extensions monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:aspnet extensions</code>: aspnet extensions monorepo</li> </ol>"},{"location":"presets-group/#groupaspnet-api-versioningmonorepo","title":"<code>group:aspnet-api-versioningMonorepo</code>","text":"<p>Group packages from aspnet-api-versioning monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:aspnet-api-versioning\" // (1)!\n      ],\n      \"groupName\": \"aspnet-api-versioning monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:aspnet-api-versioning</code>: aspnet-api-versioning monorepo</li> </ol>"},{"location":"presets-group/#groupaspnet-health-checksmonorepo","title":"<code>group:aspnet-health-checksMonorepo</code>","text":"<p>Group packages from aspnet-health-checks monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:aspnet-health-checks\" // (1)!\n      ],\n      \"groupName\": \"aspnet-health-checks monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:aspnet-health-checks</code>: aspnet-health-checks monorepo</li> </ol>"},{"location":"presets-group/#groupaspnet-security-oauth-providersmonorepo","title":"<code>group:aspnet-security-oauth-providersMonorepo</code>","text":"<p>Group packages from aspnet-security-oauth-providers monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:aspnet-security-oauth-providers\" // (1)!\n      ],\n      \"groupName\": \"aspnet-security-oauth-providers monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:aspnet-security-oauth-providers</code>: aspnet-security-oauth-providers monorepo</li> </ol>"},{"location":"presets-group/#groupastromonorepo","title":"<code>group:astroMonorepo</code>","text":"<p>Group packages from astro monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:astro\" // (1)!\n      ],\n      \"groupName\": \"astro monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:astro</code>: astro monorepo</li> </ol>"},{"location":"presets-group/#groupautomonorepo","title":"<code>group:autoMonorepo</code>","text":"<p>Group packages from auto monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:auto\" // (1)!\n      ],\n      \"groupName\": \"auto monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:auto</code>: auto monorepo</li> </ol>"},{"location":"presets-group/#groupautofixturemonorepo","title":"<code>group:autofixtureMonorepo</code>","text":"<p>Group packages from autofixture monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:autofixture\" // (1)!\n      ],\n      \"groupName\": \"autofixture monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:autofixture</code>: autofixture monorepo</li> </ol>"},{"location":"presets-group/#groupautomapper-dotnetmonorepo","title":"<code>group:automapper-dotnetMonorepo</code>","text":"<p>Group packages from automapper-dotnet monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:automapper-dotnet\" // (1)!\n      ],\n      \"groupName\": \"automapper-dotnet monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:automapper-dotnet</code>: automapper-dotnet monorepo</li> </ol>"},{"location":"presets-group/#groupavaloniamonorepo","title":"<code>group:avaloniaMonorepo</code>","text":"<p>Group packages from avalonia monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:avalonia\" // (1)!\n      ],\n      \"groupName\": \"avalonia monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:avalonia</code>: avalonia monorepo</li> </ol>"},{"location":"presets-group/#groupaws-cdkmonorepo","title":"<code>group:aws-cdkMonorepo</code>","text":"<p>Group packages from aws-cdk monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:aws-cdk\" // (1)!\n      ],\n      \"groupName\": \"aws-cdk monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:aws-cdk</code>: aws-cdk monorepo</li> </ol>"},{"location":"presets-group/#groupaws-lambda-dotnetmonorepo","title":"<code>group:aws-lambda-dotnetMonorepo</code>","text":"<p>Group packages from aws-lambda-dotnet monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:aws-lambda-dotnet\" // (1)!\n      ],\n      \"groupName\": \"aws-lambda-dotnet monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:aws-lambda-dotnet</code>: aws-lambda-dotnet monorepo</li> </ol>"},{"location":"presets-group/#groupaws-lambda-powertools-typescriptmonorepo","title":"<code>group:aws-lambda-powertools-typescriptMonorepo</code>","text":"<p>Group packages from aws-lambda-powertools-typescript monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:aws-lambda-powertools-typescript\" // (1)!\n      ],\n      \"groupName\": \"aws-lambda-powertools-typescript monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:aws-lambda-powertools-typescript</code>: aws-lambda-powertools-typescript monorepo</li> </ol>"},{"location":"presets-group/#groupaws-sdk-client-mockmonorepo","title":"<code>group:aws-sdk-client-mockMonorepo</code>","text":"<p>Group packages from aws-sdk-client-mock monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:aws-sdk-client-mock\" // (1)!\n      ],\n      \"groupName\": \"aws-sdk-client-mock monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:aws-sdk-client-mock</code>: aws-sdk-client-mock monorepo</li> </ol>"},{"location":"presets-group/#groupaws-sdk-gomonorepo","title":"<code>group:aws-sdk-goMonorepo</code>","text":"<p>Group packages from aws-sdk-go monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:aws-sdk-go\" // (1)!\n      ],\n      \"groupName\": \"aws-sdk-go monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:aws-sdk-go</code>: aws-sdk-go monorepo</li> </ol>"},{"location":"presets-group/#groupaws-sdk-go-v2monorepo","title":"<code>group:aws-sdk-go-v2Monorepo</code>","text":"<p>Group packages from aws-sdk-go-v2 monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:aws-sdk-go-v2\" // (1)!\n      ],\n      \"groupName\": \"aws-sdk-go-v2 monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:aws-sdk-go-v2</code>: aws-sdk-go-v2 monorepo</li> </ol>"},{"location":"presets-group/#groupaws-sdk-js-v3monorepo","title":"<code>group:aws-sdk-js-v3Monorepo</code>","text":"<p>Group packages from aws-sdk-js-v3 monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:aws-sdk-js-v3\" // (1)!\n      ],\n      \"groupName\": \"aws-sdk-js-v3 monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:aws-sdk-js-v3</code>: aws-sdk-js-v3 monorepo</li> </ol>"},{"location":"presets-group/#groupaws-sdk-netmonorepo","title":"<code>group:aws-sdk-netMonorepo</code>","text":"<p>Group packages from aws-sdk-net monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:aws-sdk-net\" // (1)!\n      ],\n      \"groupName\": \"aws-sdk-net monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:aws-sdk-net</code>: aws-sdk-net monorepo</li> </ol>"},{"location":"presets-group/#groupaws-sdk-rustmonorepo","title":"<code>group:aws-sdk-rustMonorepo</code>","text":"<p>Group packages from aws-sdk-rust monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:aws-sdk-rust\" // (1)!\n      ],\n      \"groupName\": \"aws-sdk-rust monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:aws-sdk-rust</code>: aws-sdk-rust monorepo</li> </ol>"},{"location":"presets-group/#groupawsappsyncmonorepo","title":"<code>group:awsappsyncMonorepo</code>","text":"<p>Group packages from awsappsync monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:awsappsync\" // (1)!\n      ],\n      \"groupName\": \"awsappsync monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:awsappsync</code>: awsappsync monorepo</li> </ol>"},{"location":"presets-group/#groupaxummonorepo","title":"<code>group:axumMonorepo</code>","text":"<p>Group packages from axum monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:axum\" // (1)!\n      ],\n      \"groupName\": \"axum monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:axum</code>: axum monorepo</li> </ol>"},{"location":"presets-group/#groupazure-azure-libraries-for-netmonorepo","title":"<code>group:azure azure-libraries-for-netMonorepo</code>","text":"<p>Group packages from azure azure-libraries-for-net monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure azure-libraries-for-net\" // (1)!\n      ],\n      \"groupName\": \"azure azure-libraries-for-net monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure azure-libraries-for-net</code>: azure azure-libraries-for-net monorepo</li> </ol>"},{"location":"presets-group/#groupazure-azure-sdk-for-netmonorepo","title":"<code>group:azure azure-sdk-for-netMonorepo</code>","text":"<p>Group packages from azure azure-sdk-for-net monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure azure-sdk-for-net\" // (1)!\n      ],\n      \"groupName\": \"azure azure-sdk-for-net monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure azure-sdk-for-net</code>: azure azure-sdk-for-net monorepo</li> </ol>"},{"location":"presets-group/#groupazure-azure-storage-netmonorepo","title":"<code>group:azure azure-storage-netMonorepo</code>","text":"<p>Group packages from azure azure-storage-net monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure azure-storage-net\" // (1)!\n      ],\n      \"groupName\": \"azure azure-storage-net monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure azure-storage-net</code>: azure azure-storage-net monorepo</li> </ol>"},{"location":"presets-group/#groupazure-ad-microsoft-authentication-library-for-androidmonorepo","title":"<code>group:azure-ad-microsoft-authentication-library-for-androidMonorepo</code>","text":"<p>Group packages from azure-ad-microsoft-authentication-library-for-android monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure-ad-microsoft-authentication-library-for-android\" // (1)!\n      ],\n      \"groupName\": \"azure-ad-microsoft-authentication-library-for-android monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure-ad-microsoft-authentication-library-for-android</code>: azure-ad-microsoft-authentication-library-for-android monorepo</li> </ol>"},{"location":"presets-group/#groupazure-ad-microsoft-authentication-library-for-dotnetmonorepo","title":"<code>group:azure-ad-microsoft-authentication-library-for-dotnetMonorepo</code>","text":"<p>Group packages from azure-ad-microsoft-authentication-library-for-dotnet monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure-ad-microsoft-authentication-library-for-dotnet\" // (1)!\n      ],\n      \"groupName\": \"azure-ad-microsoft-authentication-library-for-dotnet monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure-ad-microsoft-authentication-library-for-dotnet</code>: azure-ad-microsoft-authentication-library-for-dotnet monorepo</li> </ol>"},{"location":"presets-group/#groupazure-ad-microsoft-authentication-library-for-gomonorepo","title":"<code>group:azure-ad-microsoft-authentication-library-for-goMonorepo</code>","text":"<p>Group packages from azure-ad-microsoft-authentication-library-for-go monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure-ad-microsoft-authentication-library-for-go\" // (1)!\n      ],\n      \"groupName\": \"azure-ad-microsoft-authentication-library-for-go monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure-ad-microsoft-authentication-library-for-go</code>: azure-ad-microsoft-authentication-library-for-go monorepo</li> </ol>"},{"location":"presets-group/#groupazure-ad-microsoft-authentication-library-for-javamonorepo","title":"<code>group:azure-ad-microsoft-authentication-library-for-javaMonorepo</code>","text":"<p>Group packages from azure-ad-microsoft-authentication-library-for-java monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure-ad-microsoft-authentication-library-for-java\" // (1)!\n      ],\n      \"groupName\": \"azure-ad-microsoft-authentication-library-for-java monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure-ad-microsoft-authentication-library-for-java</code>: azure-ad-microsoft-authentication-library-for-java monorepo</li> </ol>"},{"location":"presets-group/#groupazure-ad-microsoft-authentication-library-for-jsmonorepo","title":"<code>group:azure-ad-microsoft-authentication-library-for-jsMonorepo</code>","text":"<p>Group packages from azure-ad-microsoft-authentication-library-for-js monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure-ad-microsoft-authentication-library-for-js\" // (1)!\n      ],\n      \"groupName\": \"azure-ad-microsoft-authentication-library-for-js monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure-ad-microsoft-authentication-library-for-js</code>: azure-ad-microsoft-authentication-library-for-js monorepo</li> </ol>"},{"location":"presets-group/#groupazure-ad-microsoft-authentication-library-for-objcmonorepo","title":"<code>group:azure-ad-microsoft-authentication-library-for-objcMonorepo</code>","text":"<p>Group packages from azure-ad-microsoft-authentication-library-for-objc monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure-ad-microsoft-authentication-library-for-objc\" // (1)!\n      ],\n      \"groupName\": \"azure-ad-microsoft-authentication-library-for-objc monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure-ad-microsoft-authentication-library-for-objc</code>: azure-ad-microsoft-authentication-library-for-objc monorepo</li> </ol>"},{"location":"presets-group/#groupazure-ad-microsoft-authentication-library-for-pythonmonorepo","title":"<code>group:azure-ad-microsoft-authentication-library-for-pythonMonorepo</code>","text":"<p>Group packages from azure-ad-microsoft-authentication-library-for-python monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure-ad-microsoft-authentication-library-for-python\" // (1)!\n      ],\n      \"groupName\": \"azure-ad-microsoft-authentication-library-for-python monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure-ad-microsoft-authentication-library-for-python</code>: azure-ad-microsoft-authentication-library-for-python monorepo</li> </ol>"},{"location":"presets-group/#groupazure-functions-dotnet-workermonorepo","title":"<code>group:azure-functions-dotnet-workerMonorepo</code>","text":"<p>Group packages from azure-functions-dotnet-worker monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure-functions-dotnet-worker\" // (1)!\n      ],\n      \"groupName\": \"azure-functions-dotnet-worker monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure-functions-dotnet-worker</code>: azure-functions-dotnet-worker monorepo</li> </ol>"},{"location":"presets-group/#groupazure-sdk-for-androidmonorepo","title":"<code>group:azure-sdk-for-androidMonorepo</code>","text":"<p>Group packages from azure-sdk-for-android monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure-sdk-for-android\" // (1)!\n      ],\n      \"groupName\": \"azure-sdk-for-android monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure-sdk-for-android</code>: azure-sdk-for-android monorepo</li> </ol>"},{"location":"presets-group/#groupazure-sdk-for-cmonorepo","title":"<code>group:azure-sdk-for-cMonorepo</code>","text":"<p>Group packages from azure-sdk-for-c monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure-sdk-for-c\" // (1)!\n      ],\n      \"groupName\": \"azure-sdk-for-c monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure-sdk-for-c</code>: azure-sdk-for-c monorepo</li> </ol>"},{"location":"presets-group/#groupazure-sdk-for-cppmonorepo","title":"<code>group:azure-sdk-for-cppMonorepo</code>","text":"<p>Group packages from azure-sdk-for-cpp monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure-sdk-for-cpp\" // (1)!\n      ],\n      \"groupName\": \"azure-sdk-for-cpp monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure-sdk-for-cpp</code>: azure-sdk-for-cpp monorepo</li> </ol>"},{"location":"presets-group/#groupazure-sdk-for-gomonorepo","title":"<code>group:azure-sdk-for-goMonorepo</code>","text":"<p>Group packages from azure-sdk-for-go monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure-sdk-for-go\" // (1)!\n      ],\n      \"groupName\": \"azure-sdk-for-go monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure-sdk-for-go</code>: azure-sdk-for-go monorepo</li> </ol>"},{"location":"presets-group/#groupazure-sdk-for-iosmonorepo","title":"<code>group:azure-sdk-for-iosMonorepo</code>","text":"<p>Group packages from azure-sdk-for-ios monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure-sdk-for-ios\" // (1)!\n      ],\n      \"groupName\": \"azure-sdk-for-ios monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure-sdk-for-ios</code>: azure-sdk-for-ios monorepo</li> </ol>"},{"location":"presets-group/#groupazure-sdk-for-javamonorepo","title":"<code>group:azure-sdk-for-javaMonorepo</code>","text":"<p>Group packages from azure-sdk-for-java monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure-sdk-for-java\" // (1)!\n      ],\n      \"groupName\": \"azure-sdk-for-java monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure-sdk-for-java</code>: azure-sdk-for-java monorepo</li> </ol>"},{"location":"presets-group/#groupazure-sdk-for-jsmonorepo","title":"<code>group:azure-sdk-for-jsMonorepo</code>","text":"<p>Group packages from azure-sdk-for-js monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure-sdk-for-js\" // (1)!\n      ],\n      \"groupName\": \"azure-sdk-for-js monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure-sdk-for-js</code>: azure-sdk-for-js monorepo</li> </ol>"},{"location":"presets-group/#groupazure-sdk-for-pythonmonorepo","title":"<code>group:azure-sdk-for-pythonMonorepo</code>","text":"<p>Group packages from azure-sdk-for-python monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure-sdk-for-python\" // (1)!\n      ],\n      \"groupName\": \"azure-sdk-for-python monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure-sdk-for-python</code>: azure-sdk-for-python monorepo</li> </ol>"},{"location":"presets-group/#groupazure-sdk-for-rustmonorepo","title":"<code>group:azure-sdk-for-rustMonorepo</code>","text":"<p>Group packages from azure-sdk-for-rust monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:azure-sdk-for-rust\" // (1)!\n      ],\n      \"groupName\": \"azure-sdk-for-rust monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:azure-sdk-for-rust</code>: azure-sdk-for-rust monorepo</li> </ol>"},{"location":"presets-group/#groupbabelmonorepo","title":"<code>group:babelMonorepo</code>","text":"<p>Group packages from babel monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:babel\" // (1)!\n      ],\n      \"groupName\": \"babel monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:babel</code>: babel monorepo</li> </ol>"},{"location":"presets-group/#groupbackstagemonorepo","title":"<code>group:backstageMonorepo</code>","text":"<p>Group packages from backstage monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:backstage\" // (1)!\n      ],\n      \"groupName\": \"backstage monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:backstage</code>: backstage monorepo</li> </ol>"},{"location":"presets-group/#groupbasetmonorepo","title":"<code>group:basetMonorepo</code>","text":"<p>Group packages from baset monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:baset\" // (1)!\n      ],\n      \"groupName\": \"baset monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:baset</code>: baset monorepo</li> </ol>"},{"location":"presets-group/#groupbetter-authmonorepo","title":"<code>group:better-authMonorepo</code>","text":"<p>Group packages from better-auth monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:better-auth\" // (1)!\n      ],\n      \"groupName\": \"better-auth monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:better-auth</code>: better-auth monorepo</li> </ol>"},{"location":"presets-group/#groupbravemonorepo","title":"<code>group:braveMonorepo</code>","text":"<p>Group packages from brave monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:brave\" // (1)!\n      ],\n      \"groupName\": \"brave monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:brave</code>: brave monorepo</li> </ol>"},{"location":"presets-group/#groupbugsnag-jsmonorepo","title":"<code>group:bugsnag-jsMonorepo</code>","text":"<p>Group packages from bugsnag-js monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:bugsnag-js\" // (1)!\n      ],\n      \"groupName\": \"bugsnag-js monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:bugsnag-js</code>: bugsnag-js monorepo</li> </ol>"},{"location":"presets-group/#groupbull-boardmonorepo","title":"<code>group:bull-boardMonorepo</code>","text":"<p>Group packages from bull-board monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:bull-board\" // (1)!\n      ],\n      \"groupName\": \"bull-board monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:bull-board</code>: bull-board monorepo</li> </ol>"},{"location":"presets-group/#groupcakemonorepo","title":"<code>group:cakeMonorepo</code>","text":"<p>Group packages from cake monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:cake\" // (1)!\n      ],\n      \"groupName\": \"cake monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:cake</code>: cake monorepo</li> </ol>"},{"location":"presets-group/#groupcake-issuesmonorepo","title":"<code>group:cake-issuesMonorepo</code>","text":"<p>Group packages from cake-issues monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:cake-issues\" // (1)!\n      ],\n      \"groupName\": \"cake-issues monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:cake-issues</code>: cake-issues monorepo</li> </ol>"},{"location":"presets-group/#groupcapacitormonorepo","title":"<code>group:capacitorMonorepo</code>","text":"<p>Group packages from capacitor monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:capacitor\" // (1)!\n      ],\n      \"groupName\": \"capacitor monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:capacitor</code>: capacitor monorepo</li> </ol>"},{"location":"presets-group/#groupcedarmonorepo","title":"<code>group:cedarMonorepo</code>","text":"<p>Group packages from cedar monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:cedar\" // (1)!\n      ],\n      \"groupName\": \"cedar monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:cedar</code>: cedar monorepo</li> </ol>"},{"location":"presets-group/#groupchakra-uimonorepo","title":"<code>group:chakra-uiMonorepo</code>","text":"<p>Group packages from chakra-ui monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:chakra-ui\" // (1)!\n      ],\n      \"groupName\": \"chakra-ui monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:chakra-ui</code>: chakra-ui monorepo</li> </ol>"},{"location":"presets-group/#groupchromelymonorepo","title":"<code>group:chromelyMonorepo</code>","text":"<p>Group packages from chromely monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:chromely\" // (1)!\n      ],\n      \"groupName\": \"chromely monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:chromely</code>: chromely monorepo</li> </ol>"},{"location":"presets-group/#groupcitation-jsmonorepo","title":"<code>group:citation-jsMonorepo</code>","text":"<p>Group packages from citation-js monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:citation-js\" // (1)!\n      ],\n      \"groupName\": \"citation-js monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:citation-js</code>: citation-js monorepo</li> </ol>"},{"location":"presets-group/#groupckeditormonorepo","title":"<code>group:ckeditorMonorepo</code>","text":"<p>Group packages from ckeditor monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:ckeditor\" // (1)!\n      ],\n      \"groupName\": \"ckeditor monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:ckeditor</code>: ckeditor monorepo</li> </ol>"},{"location":"presets-group/#groupclaritymonorepo","title":"<code>group:clarityMonorepo</code>","text":"<p>Group packages from clarity monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:clarity\" // (1)!\n      ],\n      \"groupName\": \"clarity monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:clarity</code>: clarity monorepo</li> </ol>"},{"location":"presets-group/#groupclearscriptmonorepo","title":"<code>group:clearscriptMonorepo</code>","text":"<p>Group packages from clearscript monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:clearscript\" // (1)!\n      ],\n      \"groupName\": \"clearscript monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:clearscript</code>: clearscript monorepo</li> </ol>"},{"location":"presets-group/#groupcommitlintmonorepo","title":"<code>group:commitlintMonorepo</code>","text":"<p>Group packages from commitlint monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:commitlint\" // (1)!\n      ],\n      \"groupName\": \"commitlint monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:commitlint</code>: commitlint monorepo</li> </ol>"},{"location":"presets-group/#groupconfectmonorepo","title":"<code>group:confectMonorepo</code>","text":"<p>Group packages from confect monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:confect\" // (1)!\n      ],\n      \"groupName\": \"confect monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:confect</code>: confect monorepo</li> </ol>"},{"location":"presets-group/#groupconformmonorepo","title":"<code>group:conformMonorepo</code>","text":"<p>Group packages from conform monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:conform\" // (1)!\n      ],\n      \"groupName\": \"conform monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:conform</code>: conform monorepo</li> </ol>"},{"location":"presets-group/#groupcontentful-rich-textmonorepo","title":"<code>group:contentful-rich-textMonorepo</code>","text":"<p>Group packages from contentful-rich-text monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:contentful-rich-text\" // (1)!\n      ],\n      \"groupName\": \"contentful-rich-text monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:contentful-rich-text</code>: contentful-rich-text monorepo</li> </ol>"},{"location":"presets-group/#groupconvexmonorepo","title":"<code>group:convexMonorepo</code>","text":"<p>Group packages from convex monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:convex\" // (1)!\n      ],\n      \"groupName\": \"convex monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:convex</code>: convex monorepo</li> </ol>"},{"location":"presets-group/#groupcspellmonorepo","title":"<code>group:cspellMonorepo</code>","text":"<p>Group packages from cspell monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:cspell\" // (1)!\n      ],\n      \"groupName\": \"cspell monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:cspell</code>: cspell monorepo</li> </ol>"},{"location":"presets-group/#groupdatadog-browser-sdkmonorepo","title":"<code>group:datadog-browser-sdkMonorepo</code>","text":"<p>Group packages from datadog-browser-sdk monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:datadog-browser-sdk\" // (1)!\n      ],\n      \"groupName\": \"datadog-browser-sdk monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:datadog-browser-sdk</code>: datadog-browser-sdk monorepo</li> </ol>"},{"location":"presets-group/#groupdatafusionmonorepo","title":"<code>group:datafusionMonorepo</code>","text":"<p>Group packages from datafusion monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:datafusion\" // (1)!\n      ],\n      \"groupName\": \"datafusion monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:datafusion</code>: datafusion monorepo</li> </ol>"},{"location":"presets-group/#groupdatatables-netmonorepo","title":"<code>group:datatables-netMonorepo</code>","text":"<p>Group packages from datatables-net monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:datatables-net\" // (1)!\n      ],\n      \"groupName\": \"datatables-net monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:datatables-net</code>: datatables-net monorepo</li> </ol>"},{"location":"presets-group/#groupdatatables-net-autofillmonorepo","title":"<code>group:datatables-net-autofillMonorepo</code>","text":"<p>Group packages from datatables-net-autofill monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:datatables-net-autofill\" // (1)!\n      ],\n      \"groupName\": \"datatables-net-autofill monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:datatables-net-autofill</code>: datatables-net-autofill monorepo</li> </ol>"},{"location":"presets-group/#groupdatatables-net-buttonsmonorepo","title":"<code>group:datatables-net-buttonsMonorepo</code>","text":"<p>Group packages from datatables-net-buttons monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:datatables-net-buttons\" // (1)!\n      ],\n      \"groupName\": \"datatables-net-buttons monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:datatables-net-buttons</code>: datatables-net-buttons monorepo</li> </ol>"},{"location":"presets-group/#groupdatatables-net-colreordermonorepo","title":"<code>group:datatables-net-colreorderMonorepo</code>","text":"<p>Group packages from datatables-net-colreorder monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:datatables-net-colreorder\" // (1)!\n      ],\n      \"groupName\": \"datatables-net-colreorder monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:datatables-net-colreorder</code>: datatables-net-colreorder monorepo</li> </ol>"},{"location":"presets-group/#groupdatatables-net-fixedcolumnsmonorepo","title":"<code>group:datatables-net-fixedcolumnsMonorepo</code>","text":"<p>Group packages from datatables-net-fixedcolumns monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:datatables-net-fixedcolumns\" // (1)!\n      ],\n      \"groupName\": \"datatables-net-fixedcolumns monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:datatables-net-fixedcolumns</code>: datatables-net-fixedcolumns monorepo</li> </ol>"},{"location":"presets-group/#groupdatatables-net-fixedheadermonorepo","title":"<code>group:datatables-net-fixedheaderMonorepo</code>","text":"<p>Group packages from datatables-net-fixedheader monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:datatables-net-fixedheader\" // (1)!\n      ],\n      \"groupName\": \"datatables-net-fixedheader monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:datatables-net-fixedheader</code>: datatables-net-fixedheader monorepo</li> </ol>"},{"location":"presets-group/#groupdatatables-net-keytablemonorepo","title":"<code>group:datatables-net-keytableMonorepo</code>","text":"<p>Group packages from datatables-net-keytable monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:datatables-net-keytable\" // (1)!\n      ],\n      \"groupName\": \"datatables-net-keytable monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:datatables-net-keytable</code>: datatables-net-keytable monorepo</li> </ol>"},{"location":"presets-group/#groupdatatables-net-responsivemonorepo","title":"<code>group:datatables-net-responsiveMonorepo</code>","text":"<p>Group packages from datatables-net-responsive monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:datatables-net-responsive\" // (1)!\n      ],\n      \"groupName\": \"datatables-net-responsive monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:datatables-net-responsive</code>: datatables-net-responsive monorepo</li> </ol>"},{"location":"presets-group/#groupdatatables-net-rowgroupmonorepo","title":"<code>group:datatables-net-rowgroupMonorepo</code>","text":"<p>Group packages from datatables-net-rowgroup monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:datatables-net-rowgroup\" // (1)!\n      ],\n      \"groupName\": \"datatables-net-rowgroup monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:datatables-net-rowgroup</code>: datatables-net-rowgroup monorepo</li> </ol>"},{"location":"presets-group/#groupdatatables-net-rowreordermonorepo","title":"<code>group:datatables-net-rowreorderMonorepo</code>","text":"<p>Group packages from datatables-net-rowreorder monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:datatables-net-rowreorder\" // (1)!\n      ],\n      \"groupName\": \"datatables-net-rowreorder monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:datatables-net-rowreorder</code>: datatables-net-rowreorder monorepo</li> </ol>"},{"location":"presets-group/#groupdatatables-net-scrollermonorepo","title":"<code>group:datatables-net-scrollerMonorepo</code>","text":"<p>Group packages from datatables-net-scroller monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:datatables-net-scroller\" // (1)!\n      ],\n      \"groupName\": \"datatables-net-scroller monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:datatables-net-scroller</code>: datatables-net-scroller monorepo</li> </ol>"},{"location":"presets-group/#groupdatatables-net-searchbuildermonorepo","title":"<code>group:datatables-net-searchbuilderMonorepo</code>","text":"<p>Group packages from datatables-net-searchbuilder monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:datatables-net-searchbuilder\" // (1)!\n      ],\n      \"groupName\": \"datatables-net-searchbuilder monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:datatables-net-searchbuilder</code>: datatables-net-searchbuilder monorepo</li> </ol>"},{"location":"presets-group/#groupdatatables-net-searchpanesmonorepo","title":"<code>group:datatables-net-searchpanesMonorepo</code>","text":"<p>Group packages from datatables-net-searchpanes monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:datatables-net-searchpanes\" // (1)!\n      ],\n      \"groupName\": \"datatables-net-searchpanes monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:datatables-net-searchpanes</code>: datatables-net-searchpanes monorepo</li> </ol>"},{"location":"presets-group/#groupdatatables-net-selectmonorepo","title":"<code>group:datatables-net-selectMonorepo</code>","text":"<p>Group packages from datatables-net-select monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:datatables-net-select\" // (1)!\n      ],\n      \"groupName\": \"datatables-net-select monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:datatables-net-select</code>: datatables-net-select monorepo</li> </ol>"},{"location":"presets-group/#groupdatatables-net-staterestoremonorepo","title":"<code>group:datatables-net-staterestoreMonorepo</code>","text":"<p>Group packages from datatables-net-staterestore monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:datatables-net-staterestore\" // (1)!\n      ],\n      \"groupName\": \"datatables-net-staterestore monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:datatables-net-staterestore</code>: datatables-net-staterestore monorepo</li> </ol>"},{"location":"presets-group/#groupdate-iomonorepo","title":"<code>group:date-ioMonorepo</code>","text":"<p>Group packages from date-io monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:date-io\" // (1)!\n      ],\n      \"groupName\": \"date-io monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:date-io</code>: date-io monorepo</li> </ol>"},{"location":"presets-group/#groupdeck-glmonorepo","title":"<code>group:deck-glMonorepo</code>","text":"<p>Group packages from deck-gl monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:deck-gl\" // (1)!\n      ],\n      \"groupName\": \"deck-gl monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:deck-gl</code>: deck-gl monorepo</li> </ol>"},{"location":"presets-group/#groupdenomonorepo","title":"<code>group:denoMonorepo</code>","text":"<p>Group packages from deno monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:deno\" // (1)!\n      ],\n      \"groupName\": \"deno monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:deno</code>: deno monorepo</li> </ol>"},{"location":"presets-group/#groupdevextreme-reactivemonorepo","title":"<code>group:devextreme-reactiveMonorepo</code>","text":"<p>Group packages from devextreme-reactive monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:devextreme-reactive\" // (1)!\n      ],\n      \"groupName\": \"devextreme-reactive monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:devextreme-reactive</code>: devextreme-reactive monorepo</li> </ol>"},{"location":"presets-group/#groupdnd-kitmonorepo","title":"<code>group:dnd-kitMonorepo</code>","text":"<p>Group packages from dnd-kit monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:dnd-kit\" // (1)!\n      ],\n      \"groupName\": \"dnd-kit monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:dnd-kit</code>: dnd-kit monorepo</li> </ol>"},{"location":"presets-group/#groupdocusaurusmonorepo","title":"<code>group:docusaurusMonorepo</code>","text":"<p>Group packages from docusaurus monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:docusaurus\" // (1)!\n      ],\n      \"groupName\": \"docusaurus monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:docusaurus</code>: docusaurus monorepo</li> </ol>"},{"location":"presets-group/#groupdot-swashbucklemonorepo","title":"<code>group:dot-swashbuckleMonorepo</code>","text":"<p>Group packages from dot-swashbuckle monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:dot-swashbuckle\" // (1)!\n      ],\n      \"groupName\": \"dot-swashbuckle monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:dot-swashbuckle</code>: dot-swashbuckle monorepo</li> </ol>"},{"location":"presets-group/#groupdotnetmonorepo","title":"<code>group:dotnetMonorepo</code>","text":"<p>Group packages from dotnet monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:dotnet\" // (1)!\n      ],\n      \"groupName\": \"dotnet monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:dotnet</code>: dotnet monorepo</li> </ol>"},{"location":"presets-group/#groupdotnet-azure-ad-identitymodel-extensionsmonorepo","title":"<code>group:dotnet-azure-ad-identitymodel-extensionsMonorepo</code>","text":"<p>Group packages from dotnet-azure-ad-identitymodel-extensions monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:dotnet-azure-ad-identitymodel-extensions\" // (1)!\n      ],\n      \"groupName\": \"dotnet-azure-ad-identitymodel-extensions monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:dotnet-azure-ad-identitymodel-extensions</code>: dotnet-azure-ad-identitymodel-extensions monorepo</li> </ol>"},{"location":"presets-group/#groupdotnet-azure-ad-microsoft-identity-webmonorepo","title":"<code>group:dotnet-azure-ad-microsoft-identity-webMonorepo</code>","text":"<p>Group packages from dotnet-azure-ad-microsoft-identity-web monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:dotnet-azure-ad-microsoft-identity-web\" // (1)!\n      ],\n      \"groupName\": \"dotnet-azure-ad-microsoft-identity-web monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:dotnet-azure-ad-microsoft-identity-web</code>: dotnet-azure-ad-microsoft-identity-web monorepo</li> </ol>"},{"location":"presets-group/#groupdotnet-wcfmonorepo","title":"<code>group:dotnet-wcfMonorepo</code>","text":"<p>Group packages from dotnet-wcf monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:dotnet-wcf\" // (1)!\n      ],\n      \"groupName\": \"dotnet-wcf monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:dotnet-wcf</code>: dotnet-wcf monorepo</li> </ol>"},{"location":"presets-group/#groupdotnetcore-capmonorepo","title":"<code>group:dotnetcore-capMonorepo</code>","text":"<p>Group packages from dotnetcore-cap monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:dotnetcore-cap\" // (1)!\n      ],\n      \"groupName\": \"dotnetcore-cap monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:dotnetcore-cap</code>: dotnetcore-cap monorepo</li> </ol>"},{"location":"presets-group/#groupdropwizardmonorepo","title":"<code>group:dropwizardMonorepo</code>","text":"<p>Group packages from dropwizard monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:dropwizard\" // (1)!\n      ],\n      \"groupName\": \"dropwizard monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:dropwizard</code>: dropwizard monorepo</li> </ol>"},{"location":"presets-group/#groupduende-identityservermonorepo","title":"<code>group:duende-identityserverMonorepo</code>","text":"<p>Group packages from duende-identityserver monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:duende-identityserver\" // (1)!\n      ],\n      \"groupName\": \"duende-identityserver monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:duende-identityserver</code>: duende-identityserver monorepo</li> </ol>"},{"location":"presets-group/#groupeffectmonorepo","title":"<code>group:effectMonorepo</code>","text":"<p>Group packages from effect monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:effect\" // (1)!\n      ],\n      \"groupName\": \"effect monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:effect</code>: effect monorepo</li> </ol>"},{"location":"presets-group/#groupelastic-apm-agent-rum-jsmonorepo","title":"<code>group:elastic-apm-agent-rum-jsMonorepo</code>","text":"<p>Group packages from elastic-apm-agent-rum-js monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:elastic-apm-agent-rum-js\" // (1)!\n      ],\n      \"groupName\": \"elastic-apm-agent-rum-js monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:elastic-apm-agent-rum-js</code>: elastic-apm-agent-rum-js monorepo</li> </ol>"},{"location":"presets-group/#groupelastic-ecs-dotnetmonorepo","title":"<code>group:elastic-ecs-dotnetMonorepo</code>","text":"<p>Group packages from elastic-ecs-dotnet monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:elastic-ecs-dotnet\" // (1)!\n      ],\n      \"groupName\": \"elastic-ecs-dotnet monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:elastic-ecs-dotnet</code>: elastic-ecs-dotnet monorepo</li> </ol>"},{"location":"presets-group/#groupelectron-forgemonorepo","title":"<code>group:electron-forgeMonorepo</code>","text":"<p>Group packages from electron-forge monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:electron-forge\" // (1)!\n      ],\n      \"groupName\": \"electron-forge monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:electron-forge</code>: electron-forge monorepo</li> </ol>"},{"location":"presets-group/#groupember-decoratorsmonorepo","title":"<code>group:ember-decoratorsMonorepo</code>","text":"<p>Group packages from ember-decorators monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:ember-decorators\" // (1)!\n      ],\n      \"groupName\": \"ember-decorators monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:ember-decorators</code>: ember-decorators monorepo</li> </ol>"},{"location":"presets-group/#groupembla-carouselmonorepo","title":"<code>group:embla-carouselMonorepo</code>","text":"<p>Group packages from embla-carousel monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:embla-carousel\" // (1)!\n      ],\n      \"groupName\": \"embla-carousel monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:embla-carousel</code>: embla-carousel monorepo</li> </ol>"},{"location":"presets-group/#groupemojibasemonorepo","title":"<code>group:emojibaseMonorepo</code>","text":"<p>Group packages from emojibase monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:emojibase\" // (1)!\n      ],\n      \"groupName\": \"emojibase monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:emojibase</code>: emojibase monorepo</li> </ol>"},{"location":"presets-group/#groupemotionmonorepo","title":"<code>group:emotionMonorepo</code>","text":"<p>Group packages from emotion monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:emotion\" // (1)!\n      ],\n      \"groupName\": \"emotion monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:emotion</code>: emotion monorepo</li> </ol>"},{"location":"presets-group/#groupenumeratummonorepo","title":"<code>group:enumeratumMonorepo</code>","text":"<p>Group packages from enumeratum monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:enumeratum\" // (1)!\n      ],\n      \"groupName\": \"enumeratum monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:enumeratum</code>: enumeratum monorepo</li> </ol>"},{"location":"presets-group/#groupenvelopmonorepo","title":"<code>group:envelopMonorepo</code>","text":"<p>Group packages from envelop monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:envelop\" // (1)!\n      ],\n      \"groupName\": \"envelop monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:envelop</code>: envelop monorepo</li> </ol>"},{"location":"presets-group/#grouperror-pronemonorepo","title":"<code>group:error-proneMonorepo</code>","text":"<p>Group packages from error-prone monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:error-prone\" // (1)!\n      ],\n      \"groupName\": \"error-prone monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:error-prone</code>: error-prone monorepo</li> </ol>"},{"location":"presets-group/#grouperror-prone-supportmonorepo","title":"<code>group:error-prone-supportMonorepo</code>","text":"<p>Group packages from error-prone-support monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:error-prone-support\" // (1)!\n      ],\n      \"groupName\": \"error-prone-support monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:error-prone-support</code>: error-prone-support monorepo</li> </ol>"},{"location":"presets-group/#groupeslintmonorepo","title":"<code>group:eslintMonorepo</code>","text":"<p>Group packages from eslint monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:eslint\" // (1)!\n      ],\n      \"groupName\": \"eslint monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:eslint</code>: eslint monorepo</li> </ol>"},{"location":"presets-group/#groupeslint-config-globexmonorepo","title":"<code>group:eslint-config-globexMonorepo</code>","text":"<p>Group packages from eslint-config-globex monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:eslint-config-globex\" // (1)!\n      ],\n      \"groupName\": \"eslint-config-globex monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:eslint-config-globex</code>: eslint-config-globex monorepo</li> </ol>"},{"location":"presets-group/#groupeslint-stylisticmonorepo","title":"<code>group:eslint-stylisticMonorepo</code>","text":"<p>Group packages from eslint-stylistic monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:eslint-stylistic\" // (1)!\n      ],\n      \"groupName\": \"eslint-stylistic monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:eslint-stylistic</code>: eslint-stylistic monorepo</li> </ol>"},{"location":"presets-group/#groupexpomonorepo","title":"<code>group:expoMonorepo</code>","text":"<p>Group packages from expo monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:expo\" // (1)!\n      ],\n      \"groupName\": \"expo monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:expo</code>: expo monorepo</li> </ol>"},{"location":"presets-group/#groupfabric-chaincode-nodemonorepo","title":"<code>group:fabric-chaincode-nodeMonorepo</code>","text":"<p>Group packages from fabric-chaincode-node monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:fabric-chaincode-node\" // (1)!\n      ],\n      \"groupName\": \"fabric-chaincode-node monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:fabric-chaincode-node</code>: fabric-chaincode-node monorepo</li> </ol>"},{"location":"presets-group/#groupfabric8-kubernetes-clientmonorepo","title":"<code>group:fabric8-kubernetes-clientMonorepo</code>","text":"<p>Group packages from fabric8-kubernetes-client monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:fabric8-kubernetes-client\" // (1)!\n      ],\n      \"groupName\": \"fabric8-kubernetes-client monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:fabric8-kubernetes-client</code>: fabric8-kubernetes-client monorepo</li> </ol>"},{"location":"presets-group/#groupfaro-web-sdkmonorepo","title":"<code>group:faro-web-sdkMonorepo</code>","text":"<p>Group packages from faro-web-sdk monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:faro-web-sdk\" // (1)!\n      ],\n      \"groupName\": \"faro-web-sdk monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:faro-web-sdk</code>: faro-web-sdk monorepo</li> </ol>"},{"location":"presets-group/#groupfastendpointsmonorepo","title":"<code>group:fastendpointsMonorepo</code>","text":"<p>Group packages from fastendpoints monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:fastendpoints\" // (1)!\n      ],\n      \"groupName\": \"fastendpoints monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:fastendpoints</code>: fastendpoints monorepo</li> </ol>"},{"location":"presets-group/#groupfeathersmonorepo","title":"<code>group:feathersMonorepo</code>","text":"<p>Group packages from feathers monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:feathers\" // (1)!\n      ],\n      \"groupName\": \"feathers monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:feathers</code>: feathers monorepo</li> </ol>"},{"location":"presets-group/#groupfeaturemanagement-dotnetmonorepo","title":"<code>group:featuremanagement-dotnetMonorepo</code>","text":"<p>Group packages from featuremanagement-dotnet monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:featuremanagement-dotnet\" // (1)!\n      ],\n      \"groupName\": \"featuremanagement-dotnet monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:featuremanagement-dotnet</code>: featuremanagement-dotnet monorepo</li> </ol>"},{"location":"presets-group/#groupfeignmonorepo","title":"<code>group:feignMonorepo</code>","text":"<p>Group packages from feign monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:feign\" // (1)!\n      ],\n      \"groupName\": \"feign monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:feign</code>: feign monorepo</li> </ol>"},{"location":"presets-group/#groupfelamonorepo","title":"<code>group:felaMonorepo</code>","text":"<p>Group packages from fela monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:fela\" // (1)!\n      ],\n      \"groupName\": \"fela monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:fela</code>: fela monorepo</li> </ol>"},{"location":"presets-group/#groupfimbullintermonorepo","title":"<code>group:fimbullinterMonorepo</code>","text":"<p>Group packages from fimbullinter monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:fimbullinter\" // (1)!\n      ],\n      \"groupName\": \"fimbullinter monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:fimbullinter</code>: fimbullinter monorepo</li> </ol>"},{"location":"presets-group/#groupflippermonorepo","title":"<code>group:flipperMonorepo</code>","text":"<p>Group packages from flipper monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:flipper\" // (1)!\n      ],\n      \"groupName\": \"flipper monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:flipper</code>: flipper monorepo</li> </ol>"},{"location":"presets-group/#groupflopflipmonorepo","title":"<code>group:flopflipMonorepo</code>","text":"<p>Group packages from flopflip monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:flopflip\" // (1)!\n      ],\n      \"groupName\": \"flopflip monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:flopflip</code>: flopflip monorepo</li> </ol>"},{"location":"presets-group/#groupfluemonorepo","title":"<code>group:flueMonorepo</code>","text":"<p>Group packages from flue monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:flue\" // (1)!\n      ],\n      \"groupName\": \"flue monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:flue</code>: flue monorepo</li> </ol>"},{"location":"presets-group/#groupfontsourcemonorepo","title":"<code>group:fontsourceMonorepo</code>","text":"<p>Group packages from fontsource monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:fontsource\" // (1)!\n      ],\n      \"groupName\": \"fontsource monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:fontsource</code>: fontsource monorepo</li> </ol>"},{"location":"presets-group/#groupformatjsmonorepo","title":"<code>group:formatjsMonorepo</code>","text":"<p>Group packages from formatjs monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:formatjs\" // (1)!\n      ],\n      \"groupName\": \"formatjs monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:formatjs</code>: formatjs monorepo</li> </ol>"},{"location":"presets-group/#groupframework7monorepo","title":"<code>group:framework7Monorepo</code>","text":"<p>Group packages from framework7 monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:framework7\" // (1)!\n      ],\n      \"groupName\": \"framework7 monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:framework7</code>: framework7 monorepo</li> </ol>"},{"location":"presets-group/#groupfunogrammonorepo","title":"<code>group:funogramMonorepo</code>","text":"<p>Group packages from funogram monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:funogram\" // (1)!\n      ],\n      \"groupName\": \"funogram monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:funogram</code>: funogram monorepo</li> </ol>"},{"location":"presets-group/#groupfusioncachemonorepo","title":"<code>group:fusioncacheMonorepo</code>","text":"<p>Group packages from fusioncache monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:fusioncache\" // (1)!\n      ],\n      \"groupName\": \"fusioncache monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:fusioncache</code>: fusioncache monorepo</li> </ol>"},{"location":"presets-group/#groupgatsbymonorepo","title":"<code>group:gatsbyMonorepo</code>","text":"<p>Group packages from gatsby monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:gatsby\" // (1)!\n      ],\n      \"groupName\": \"gatsby monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:gatsby</code>: gatsby monorepo</li> </ol>"},{"location":"presets-group/#groupgitbeakermonorepo","title":"<code>group:gitbeakerMonorepo</code>","text":"<p>Group packages from gitbeaker monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:gitbeaker\" // (1)!\n      ],\n      \"groupName\": \"gitbeaker monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:gitbeaker</code>: gitbeaker monorepo</li> </ol>"},{"location":"presets-group/#groupgithub-workflows-ktmonorepo","title":"<code>group:github-workflows-ktMonorepo</code>","text":"<p>Group packages from github-workflows-kt monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:github-workflows-kt\" // (1)!\n      ],\n      \"groupName\": \"github-workflows-kt monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:github-workflows-kt</code>: github-workflows-kt monorepo</li> </ol>"},{"location":"presets-group/#groupgo-cloudmonorepo","title":"<code>group:go-cloudMonorepo</code>","text":"<p>Group packages from go-cloud monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:go-cloud\" // (1)!\n      ],\n      \"groupName\": \"go-cloud monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:go-cloud</code>: go-cloud monorepo</li> </ol>"},{"location":"presets-group/#groupgomockmonorepo","title":"<code>group:gomockMonorepo</code>","text":"<p>Group packages from gomock monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:gomock\" // (1)!\n      ],\n      \"groupName\": \"gomock monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:gomock</code>: gomock monorepo</li> </ol>"},{"location":"presets-group/#groupgoogle-api-dotnet-clientmonorepo","title":"<code>group:google-api-dotnet-clientMonorepo</code>","text":"<p>Group packages from google-api-dotnet-client monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:google-api-dotnet-client\" // (1)!\n      ],\n      \"groupName\": \"google-api-dotnet-client monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:google-api-dotnet-client</code>: google-api-dotnet-client monorepo</li> </ol>"},{"location":"presets-group/#groupgoogle-cloud-rustmonorepo","title":"<code>group:google-cloud-rustMonorepo</code>","text":"<p>Group packages from google-cloud-rust monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:google-cloud-rust\" // (1)!\n      ],\n      \"groupName\": \"google-cloud-rust monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:google-cloud-rust</code>: google-cloud-rust monorepo</li> </ol>"},{"location":"presets-group/#groupgrafanamonorepo","title":"<code>group:grafanaMonorepo</code>","text":"<p>Group packages from grafana monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:grafana\" // (1)!\n      ],\n      \"groupName\": \"grafana monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:grafana</code>: grafana monorepo</li> </ol>"},{"location":"presets-group/#groupgraphiqlmonorepo","title":"<code>group:graphiqlMonorepo</code>","text":"<p>Group packages from graphiql monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:graphiql\" // (1)!\n      ],\n      \"groupName\": \"graphiql monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:graphiql</code>: graphiql monorepo</li> </ol>"},{"location":"presets-group/#groupgraphql-hive-gatewaymonorepo","title":"<code>group:graphql-hive-gatewayMonorepo</code>","text":"<p>Group packages from graphql-hive-gateway monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:graphql-hive-gateway\" // (1)!\n      ],\n      \"groupName\": \"graphql-hive-gateway monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:graphql-hive-gateway</code>: graphql-hive-gateway monorepo</li> </ol>"},{"location":"presets-group/#groupgraphql-meshmonorepo","title":"<code>group:graphql-meshMonorepo</code>","text":"<p>Group packages from graphql-mesh monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:graphql-mesh\" // (1)!\n      ],\n      \"groupName\": \"graphql-mesh monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:graphql-mesh</code>: graphql-mesh monorepo</li> </ol>"},{"location":"presets-group/#groupgraphql-modulesmonorepo","title":"<code>group:graphql-modulesMonorepo</code>","text":"<p>Group packages from graphql-modules monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:graphql-modules\" // (1)!\n      ],\n      \"groupName\": \"graphql-modules monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:graphql-modules</code>: graphql-modules monorepo</li> </ol>"},{"location":"presets-group/#groupgraphql-platformmonorepo","title":"<code>group:graphql-platformMonorepo</code>","text":"<p>Group packages from graphql-platform monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:graphql-platform\" // (1)!\n      ],\n      \"groupName\": \"graphql-platform monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:graphql-platform</code>: graphql-platform monorepo</li> </ol>"},{"location":"presets-group/#groupgraphql-toolsmonorepo","title":"<code>group:graphql-toolsMonorepo</code>","text":"<p>Group packages from graphql-tools monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:graphql-tools\" // (1)!\n      ],\n      \"groupName\": \"graphql-tools monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:graphql-tools</code>: graphql-tools monorepo</li> </ol>"},{"location":"presets-group/#groupgraphql-yogamonorepo","title":"<code>group:graphql-yogaMonorepo</code>","text":"<p>Group packages from graphql-yoga monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:graphql-yoga\" // (1)!\n      ],\n      \"groupName\": \"graphql-yoga monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:graphql-yoga</code>: graphql-yoga monorepo</li> </ol>"},{"location":"presets-group/#groupgraphqlcodegeneratormonorepo","title":"<code>group:graphqlcodegeneratorMonorepo</code>","text":"<p>Group packages from graphqlcodegenerator monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:graphqlcodegenerator\" // (1)!\n      ],\n      \"groupName\": \"graphqlcodegenerator monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:graphqlcodegenerator</code>: graphqlcodegenerator monorepo</li> </ol>"},{"location":"presets-group/#groupgreenmailmonorepo","title":"<code>group:greenmailMonorepo</code>","text":"<p>Group packages from greenmail monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:greenmail\" // (1)!\n      ],\n      \"groupName\": \"greenmail monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:greenmail</code>: greenmail monorepo</li> </ol>"},{"location":"presets-group/#groupgroovymonorepo","title":"<code>group:groovyMonorepo</code>","text":"<p>Group packages from groovy monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:groovy\" // (1)!\n      ],\n      \"groupName\": \"groovy monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:groovy</code>: groovy monorepo</li> </ol>"},{"location":"presets-group/#groupgrpc-dotnetmonorepo","title":"<code>group:grpc-dotnetMonorepo</code>","text":"<p>Group packages from grpc-dotnet monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:grpc-dotnet\" // (1)!\n      ],\n      \"groupName\": \"grpc-dotnet monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:grpc-dotnet</code>: grpc-dotnet monorepo</li> </ol>"},{"location":"presets-group/#groupgrpc-javamonorepo","title":"<code>group:grpc-javaMonorepo</code>","text":"<p>Group packages from grpc-java monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:grpc-java\" // (1)!\n      ],\n      \"groupName\": \"grpc-java monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:grpc-java</code>: grpc-java monorepo</li> </ol>"},{"location":"presets-group/#groupgstreamer-rustmonorepo","title":"<code>group:gstreamer-rustMonorepo</code>","text":"<p>Group packages from gstreamer-rust monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:gstreamer-rust\" // (1)!\n      ],\n      \"groupName\": \"gstreamer-rust monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:gstreamer-rust</code>: gstreamer-rust monorepo</li> </ol>"},{"location":"presets-group/#groupguavamonorepo","title":"<code>group:guavaMonorepo</code>","text":"<p>Group packages from guava monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:guava\" // (1)!\n      ],\n      \"groupName\": \"guava monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:guava</code>: guava monorepo</li> </ol>"},{"location":"presets-group/#grouphangfiremonorepo","title":"<code>group:hangfireMonorepo</code>","text":"<p>Group packages from hangfire monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:hangfire\" // (1)!\n      ],\n      \"groupName\": \"hangfire monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:hangfire</code>: hangfire monorepo</li> </ol>"},{"location":"presets-group/#grouphappy-dommonorepo","title":"<code>group:happy-domMonorepo</code>","text":"<p>Group packages from happy-dom monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:happy-dom\" // (1)!\n      ],\n      \"groupName\": \"happy-dom monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:happy-dom</code>: happy-dom monorepo</li> </ol>"},{"location":"presets-group/#grouphibernate-modelsmonorepo","title":"<code>group:hibernate-modelsMonorepo</code>","text":"<p>Group packages from hibernate-models monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:hibernate-models\" // (1)!\n      ],\n      \"groupName\": \"hibernate-models monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:hibernate-models</code>: hibernate-models monorepo</li> </ol>"},{"location":"presets-group/#grouphibernate-ormmonorepo","title":"<code>group:hibernate-ormMonorepo</code>","text":"<p>Group packages from hibernate-orm monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:hibernate-orm\" // (1)!\n      ],\n      \"groupName\": \"hibernate-orm monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:hibernate-orm</code>: hibernate-orm monorepo</li> </ol>"},{"location":"presets-group/#grouphibernate-searchmonorepo","title":"<code>group:hibernate-searchMonorepo</code>","text":"<p>Group packages from hibernate-search monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:hibernate-search\" // (1)!\n      ],\n      \"groupName\": \"hibernate-search monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:hibernate-search</code>: hibernate-search monorepo</li> </ol>"},{"location":"presets-group/#grouphibernate-toolsmonorepo","title":"<code>group:hibernate-toolsMonorepo</code>","text":"<p>Group packages from hibernate-tools monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:hibernate-tools\" // (1)!\n      ],\n      \"groupName\": \"hibernate-tools monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:hibernate-tools</code>: hibernate-tools monorepo</li> </ol>"},{"location":"presets-group/#grouphickory-dnsmonorepo","title":"<code>group:hickory-dnsMonorepo</code>","text":"<p>Group packages from hickory-dns monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:hickory-dns\" // (1)!\n      ],\n      \"groupName\": \"hickory-dns monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:hickory-dns</code>: hickory-dns monorepo</li> </ol>"},{"location":"presets-group/#grouphocuspocusmonorepo","title":"<code>group:hocuspocusMonorepo</code>","text":"<p>Group packages from hocuspocus monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:hocuspocus\" // (1)!\n      ],\n      \"groupName\": \"hocuspocus monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:hocuspocus</code>: hocuspocus monorepo</li> </ol>"},{"location":"presets-group/#grouphtml-eslintmonorepo","title":"<code>group:html-eslintMonorepo</code>","text":"<p>Group packages from html-eslint monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:html-eslint\" // (1)!\n      ],\n      \"groupName\": \"html-eslint monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:html-eslint</code>: html-eslint monorepo</li> </ol>"},{"location":"presets-group/#grouphumanizermonorepo","title":"<code>group:humanizerMonorepo</code>","text":"<p>Group packages from humanizer monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:humanizer\" // (1)!\n      ],\n      \"groupName\": \"humanizer monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:humanizer</code>: humanizer monorepo</li> </ol>"},{"location":"presets-group/#groupimmichmonorepo","title":"<code>group:immichMonorepo</code>","text":"<p>Group packages from immich monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:immich\" // (1)!\n      ],\n      \"groupName\": \"immich monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:immich</code>: immich monorepo</li> </ol>"},{"location":"presets-group/#groupinfrastructure-uimonorepo","title":"<code>group:infrastructure-uiMonorepo</code>","text":"<p>Group packages from infrastructure-ui monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:infrastructure-ui\" // (1)!\n      ],\n      \"groupName\": \"infrastructure-ui monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:infrastructure-ui</code>: infrastructure-ui monorepo</li> </ol>"},{"location":"presets-group/#groupionic-nativemonorepo","title":"<code>group:ionic-nativeMonorepo</code>","text":"<p>Group packages from ionic-native monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:ionic-native\" // (1)!\n      ],\n      \"groupName\": \"ionic-native monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:ionic-native</code>: ionic-native monorepo</li> </ol>"},{"location":"presets-group/#groupistanbuljsmonorepo","title":"<code>group:istanbuljsMonorepo</code>","text":"<p>Group packages from istanbuljs monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:istanbuljs\" // (1)!\n      ],\n      \"groupName\": \"istanbuljs monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:istanbuljs</code>: istanbuljs monorepo</li> </ol>"},{"location":"presets-group/#groupistiomonorepo","title":"<code>group:istioMonorepo</code>","text":"<p>Group packages from istio monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:istio\" // (1)!\n      ],\n      \"groupName\": \"istio monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:istio</code>: istio monorepo</li> </ol>"},{"location":"presets-group/#groupjacksonmonorepo","title":"<code>group:jacksonMonorepo</code>","text":"<p>Group packages from jackson monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:jackson\" // (1)!\n      ],\n      \"groupName\": \"jackson monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:jackson</code>: jackson monorepo</li> </ol>"},{"location":"presets-group/#groupjasminemonorepo","title":"<code>group:jasmineMonorepo</code>","text":"<p>Group packages from jasmine monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:jasmine\" // (1)!\n      ],\n      \"groupName\": \"jasmine monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:jasmine</code>: jasmine monorepo</li> </ol>"},{"location":"presets-group/#groupjavafxmonorepo","title":"<code>group:javafxMonorepo</code>","text":"<p>Group packages from javafx monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:javafx\" // (1)!\n      ],\n      \"groupName\": \"javafx monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:javafx</code>: javafx monorepo</li> </ol>"},{"location":"presets-group/#groupjavahamcrestmonorepo","title":"<code>group:javahamcrestMonorepo</code>","text":"<p>Group packages from javahamcrest monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:javahamcrest\" // (1)!\n      ],\n      \"groupName\": \"javahamcrest monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:javahamcrest</code>: javahamcrest monorepo</li> </ol>"},{"location":"presets-group/#groupjavascriptengineswitchermonorepo","title":"<code>group:javascriptengineswitcherMonorepo</code>","text":"<p>Group packages from javascriptengineswitcher monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:javascriptengineswitcher\" // (1)!\n      ],\n      \"groupName\": \"javascriptengineswitcher monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:javascriptengineswitcher</code>: javascriptengineswitcher monorepo</li> </ol>"},{"location":"presets-group/#groupjaxb-rimonorepo","title":"<code>group:jaxb-riMonorepo</code>","text":"<p>Group packages from jaxb-ri monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:jaxb-ri\" // (1)!\n      ],\n      \"groupName\": \"jaxb-ri monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:jaxb-ri</code>: jaxb-ri monorepo</li> </ol>"},{"location":"presets-group/#groupjerseymonorepo","title":"<code>group:jerseyMonorepo</code>","text":"<p>Group packages from jersey monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:jersey\" // (1)!\n      ],\n      \"groupName\": \"jersey monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:jersey</code>: jersey monorepo</li> </ol>"},{"location":"presets-group/#groupjestmonorepo","title":"<code>group:jestMonorepo</code>","text":"<p>Group packages from jest monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:jest\" // (1)!\n      ],\n      \"groupName\": \"jest monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:jest</code>: jest monorepo</li> </ol>"},{"location":"presets-group/#groupjettymonorepo","title":"<code>group:jettyMonorepo</code>","text":"<p>Group packages from jetty monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:jetty\" // (1)!\n      ],\n      \"groupName\": \"jetty monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:jetty</code>: jetty monorepo</li> </ol>"},{"location":"presets-group/#groupjnamonorepo","title":"<code>group:jnaMonorepo</code>","text":"<p>Group packages from jna monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:jna\" // (1)!\n      ],\n      \"groupName\": \"jna monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:jna</code>: jna monorepo</li> </ol>"},{"location":"presets-group/#groupjson-smart-v2monorepo","title":"<code>group:json-smart-v2Monorepo</code>","text":"<p>Group packages from json-smart-v2 monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:json-smart-v2\" // (1)!\n      ],\n      \"groupName\": \"json-smart-v2 monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:json-smart-v2</code>: json-smart-v2 monorepo</li> </ol>"},{"location":"presets-group/#groupjsonformsmonorepo","title":"<code>group:jsonformsMonorepo</code>","text":"<p>Group packages from jsonforms monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:jsonforms\" // (1)!\n      ],\n      \"groupName\": \"jsonforms monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:jsonforms</code>: jsonforms monorepo</li> </ol>"},{"location":"presets-group/#groupjsplumbmonorepo","title":"<code>group:jsplumbMonorepo</code>","text":"<p>Group packages from jsplumb monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:jsplumb\" // (1)!\n      ],\n      \"groupName\": \"jsplumb monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:jsplumb</code>: jsplumb monorepo</li> </ol>"},{"location":"presets-group/#groupjuniormonorepo","title":"<code>group:juniorMonorepo</code>","text":"<p>Group packages from junior monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:junior\" // (1)!\n      ],\n      \"groupName\": \"junior monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:junior</code>: junior monorepo</li> </ol>"},{"location":"presets-group/#groupjunit-frameworkmonorepo","title":"<code>group:junit-frameworkMonorepo</code>","text":"<p>Group packages from junit-framework monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:junit-framework\" // (1)!\n      ],\n      \"groupName\": \"junit-framework monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:junit-framework</code>: junit-framework monorepo</li> </ol>"},{"location":"presets-group/#groupkernelmemorymonorepo","title":"<code>group:kernelmemoryMonorepo</code>","text":"<p>Group packages from kernelmemory monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:kernelmemory\" // (1)!\n      ],\n      \"groupName\": \"kernelmemory monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:kernelmemory</code>: kernelmemory monorepo</li> </ol>"},{"location":"presets-group/#groupkiotamonorepo","title":"<code>group:kiotaMonorepo</code>","text":"<p>Group packages from kiota monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:kiota\" // (1)!\n      ],\n      \"groupName\": \"kiota monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:kiota</code>: kiota monorepo</li> </ol>"},{"location":"presets-group/#groupkotlinmonorepo","title":"<code>group:kotlinMonorepo</code>","text":"<p>Group packages from kotlin monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:kotlin\" // (1)!\n      ],\n      \"groupName\": \"kotlin monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:kotlin</code>: kotlin monorepo</li> </ol>"},{"location":"presets-group/#groupkotlinx-coroutinesmonorepo","title":"<code>group:kotlinx-coroutinesMonorepo</code>","text":"<p>Group packages from kotlinx-coroutines monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:kotlinx-coroutines\" // (1)!\n      ],\n      \"groupName\": \"kotlinx-coroutines monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:kotlinx-coroutines</code>: kotlinx-coroutines monorepo</li> </ol>"},{"location":"presets-group/#groupkrokimonorepo","title":"<code>group:krokiMonorepo</code>","text":"<p>Group packages from kroki monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:kroki\" // (1)!\n      ],\n      \"groupName\": \"kroki monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:kroki</code>: kroki monorepo</li> </ol>"},{"location":"presets-group/#groupkspmonorepo","title":"<code>group:kspMonorepo</code>","text":"<p>Group packages from ksp monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:ksp\" // (1)!\n      ],\n      \"groupName\": \"ksp monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:ksp</code>: ksp monorepo</li> </ol>"},{"location":"presets-group/#groupktormonorepo","title":"<code>group:ktorMonorepo</code>","text":"<p>Group packages from ktor monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:ktor\" // (1)!\n      ],\n      \"groupName\": \"ktor monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:ktor</code>: ktor monorepo</li> </ol>"},{"location":"presets-group/#groupkubbmonorepo","title":"<code>group:kubbMonorepo</code>","text":"<p>Group packages from kubb monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:kubb\" // (1)!\n      ],\n      \"groupName\": \"kubb monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:kubb</code>: kubb monorepo</li> </ol>"},{"location":"presets-group/#groupkubernetesmonorepo","title":"<code>group:kubernetesMonorepo</code>","text":"<p>Group packages from kubernetes monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:kubernetes\" // (1)!\n      ],\n      \"groupName\": \"kubernetes monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:kubernetes</code>: kubernetes monorepo</li> </ol>"},{"location":"presets-group/#grouplamarmonorepo","title":"<code>group:lamarMonorepo</code>","text":"<p>Group packages from lamar monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:lamar\" // (1)!\n      ],\n      \"groupName\": \"lamar monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:lamar</code>: lamar monorepo</li> </ol>"},{"location":"presets-group/#grouplangchain4jmonorepo","title":"<code>group:langchain4jMonorepo</code>","text":"<p>Group packages from langchain4j monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:langchain4j\" // (1)!\n      ],\n      \"groupName\": \"langchain4j monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:langchain4j</code>: langchain4j monorepo</li> </ol>"},{"location":"presets-group/#grouplernamonorepo","title":"<code>group:lernaMonorepo</code>","text":"<p>Group packages from lerna monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:lerna\" // (1)!\n      ],\n      \"groupName\": \"lerna monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:lerna</code>: lerna monorepo</li> </ol>"},{"location":"presets-group/#grouplerna-litemonorepo","title":"<code>group:lerna-liteMonorepo</code>","text":"<p>Group packages from lerna-lite monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:lerna-lite\" // (1)!\n      ],\n      \"groupName\": \"lerna-lite monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:lerna-lite</code>: lerna-lite monorepo</li> </ol>"},{"location":"presets-group/#grouplexicalmonorepo","title":"<code>group:lexicalMonorepo</code>","text":"<p>Group packages from lexical monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:lexical\" // (1)!\n      ],\n      \"groupName\": \"lexical monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:lexical</code>: lexical monorepo</li> </ol>"},{"location":"presets-group/#grouplinguijsmonorepo","title":"<code>group:linguijsMonorepo</code>","text":"<p>Group packages from linguijs monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:linguijs\" // (1)!\n      ],\n      \"groupName\": \"linguijs monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:linguijs</code>: linguijs monorepo</li> </ol>"},{"location":"presets-group/#grouplinkifyjsmonorepo","title":"<code>group:linkifyjsMonorepo</code>","text":"<p>Group packages from linkifyjs monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:linkifyjs\" // (1)!\n      ],\n      \"groupName\": \"linkifyjs monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:linkifyjs</code>: linkifyjs monorepo</li> </ol>"},{"location":"presets-group/#grouplog4j2monorepo","title":"<code>group:log4j2Monorepo</code>","text":"<p>Group packages from log4j2 monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:log4j2\" // (1)!\n      ],\n      \"groupName\": \"log4j2 monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:log4j2</code>: log4j2 monorepo</li> </ol>"},{"location":"presets-group/#grouplogbackmonorepo","title":"<code>group:logbackMonorepo</code>","text":"<p>Group packages from logback monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:logback\" // (1)!\n      ],\n      \"groupName\": \"logback monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:logback</code>: logback monorepo</li> </ol>"},{"location":"presets-group/#grouplogtapemonorepo","title":"<code>group:logtapeMonorepo</code>","text":"<p>Group packages from logtape monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:logtape\" // (1)!\n      ],\n      \"groupName\": \"logtape monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:logtape</code>: logtape monorepo</li> </ol>"},{"location":"presets-group/#grouploopbackmonorepo","title":"<code>group:loopbackMonorepo</code>","text":"<p>Group packages from loopback monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:loopback\" // (1)!\n      ],\n      \"groupName\": \"loopback monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:loopback</code>: loopback monorepo</li> </ol>"},{"location":"presets-group/#grouplrnwebcomponentsmonorepo","title":"<code>group:lrnwebcomponentsMonorepo</code>","text":"<p>Group packages from lrnwebcomponents monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:lrnwebcomponents\" // (1)!\n      ],\n      \"groupName\": \"lrnwebcomponents monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:lrnwebcomponents</code>: lrnwebcomponents monorepo</li> </ol>"},{"location":"presets-group/#grouplucidemonorepo","title":"<code>group:lucideMonorepo</code>","text":"<p>Group packages from lucide monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:lucide\" // (1)!\n      ],\n      \"groupName\": \"lucide monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:lucide</code>: lucide monorepo</li> </ol>"},{"location":"presets-group/#groupmailingmonorepo","title":"<code>group:mailingMonorepo</code>","text":"<p>Group packages from mailing monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:mailing\" // (1)!\n      ],\n      \"groupName\": \"mailing monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:mailing</code>: mailing monorepo</li> </ol>"},{"location":"presets-group/#groupmantinemonorepo","title":"<code>group:mantineMonorepo</code>","text":"<p>Group packages from mantine monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:mantine\" // (1)!\n      ],\n      \"groupName\": \"mantine monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:mantine</code>: mantine monorepo</li> </ol>"},{"location":"presets-group/#groupmapstructmonorepo","title":"<code>group:mapstructMonorepo</code>","text":"<p>Group packages from mapstruct monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:mapstruct\" // (1)!\n      ],\n      \"groupName\": \"mapstruct monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:mapstruct</code>: mapstruct monorepo</li> </ol>"},{"location":"presets-group/#groupmartenmonorepo","title":"<code>group:martenMonorepo</code>","text":"<p>Group packages from marten monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:marten\" // (1)!\n      ],\n      \"groupName\": \"marten monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:marten</code>: marten monorepo</li> </ol>"},{"location":"presets-group/#groupmasstransitmonorepo","title":"<code>group:masstransitMonorepo</code>","text":"<p>Group packages from masstransit monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:masstransit\" // (1)!\n      ],\n      \"groupName\": \"masstransit monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:masstransit</code>: masstransit monorepo</li> </ol>"},{"location":"presets-group/#groupmaterial-components-webmonorepo","title":"<code>group:material-components-webMonorepo</code>","text":"<p>Group packages from material-components-web monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:material-components-web\" // (1)!\n      ],\n      \"groupName\": \"material-components-web monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:material-components-web</code>: material-components-web monorepo</li> </ol>"},{"location":"presets-group/#groupmaterial-uimonorepo","title":"<code>group:material-uiMonorepo</code>","text":"<p>Group packages from material-ui monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:material-ui\" // (1)!\n      ],\n      \"groupName\": \"material-ui monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:material-ui</code>: material-ui monorepo</li> </ol>"},{"location":"presets-group/#groupmdc-reactmonorepo","title":"<code>group:mdc-reactMonorepo</code>","text":"<p>Group packages from mdc-react monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:mdc-react\" // (1)!\n      ],\n      \"groupName\": \"mdc-react monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:mdc-react</code>: mdc-react monorepo</li> </ol>"},{"location":"presets-group/#groupmdxmonorepo","title":"<code>group:mdxMonorepo</code>","text":"<p>Group packages from mdx monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:mdx\" // (1)!\n      ],\n      \"groupName\": \"mdx monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:mdx</code>: mdx monorepo</li> </ol>"},{"location":"presets-group/#groupmiddy-jsmonorepo","title":"<code>group:middy-jsMonorepo</code>","text":"<p>Group packages from middy-js monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:middy-js\" // (1)!\n      ],\n      \"groupName\": \"middy-js monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:middy-js</code>: middy-js monorepo</li> </ol>"},{"location":"presets-group/#groupmikro-ormmonorepo","title":"<code>group:mikro-ormMonorepo</code>","text":"<p>Group packages from mikro-orm monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:mikro-orm\" // (1)!\n      ],\n      \"groupName\": \"mikro-orm monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:mikro-orm</code>: mikro-orm monorepo</li> </ol>"},{"location":"presets-group/#groupml-dotnetmonorepo","title":"<code>group:ml-dotnetMonorepo</code>","text":"<p>Group packages from ml-dotnet monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:ml-dotnet\" // (1)!\n      ],\n      \"groupName\": \"ml-dotnet monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:ml-dotnet</code>: ml-dotnet monorepo</li> </ol>"},{"location":"presets-group/#groupmockitomonorepo","title":"<code>group:mockitoMonorepo</code>","text":"<p>Group packages from mockito monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:mockito\" // (1)!\n      ],\n      \"groupName\": \"mockito monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:mockito</code>: mockito monorepo</li> </ol>"},{"location":"presets-group/#groupmongo-csharp-drivermonorepo","title":"<code>group:mongo-csharp-driverMonorepo</code>","text":"<p>Group packages from mongo-csharp-driver monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:mongo-csharp-driver\" // (1)!\n      ],\n      \"groupName\": \"mongo-csharp-driver monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:mongo-csharp-driver</code>: mongo-csharp-driver monorepo</li> </ol>"},{"location":"presets-group/#groupmongo-java-drivermonorepo","title":"<code>group:mongo-java-driverMonorepo</code>","text":"<p>Group packages from mongo-java-driver monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:mongo-java-driver\" // (1)!\n      ],\n      \"groupName\": \"mongo-java-driver monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:mongo-java-driver</code>: mongo-java-driver monorepo</li> </ol>"},{"location":"presets-group/#groupmstestmonorepo","title":"<code>group:mstestMonorepo</code>","text":"<p>Group packages from mstest monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:mstest\" // (1)!\n      ],\n      \"groupName\": \"mstest monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:mstest</code>: mstest monorepo</li> </ol>"},{"location":"presets-group/#groupmutation-testing-elementsmonorepo","title":"<code>group:mutation-testing-elementsMonorepo</code>","text":"<p>Group packages from mutation-testing-elements monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:mutation-testing-elements\" // (1)!\n      ],\n      \"groupName\": \"mutation-testing-elements monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:mutation-testing-elements</code>: mutation-testing-elements monorepo</li> </ol>"},{"location":"presets-group/#groupnestmonorepo","title":"<code>group:nestMonorepo</code>","text":"<p>Group packages from nest monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:nest\" // (1)!\n      ],\n      \"groupName\": \"nest monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:nest</code>: nest monorepo</li> </ol>"},{"location":"presets-group/#groupnest-graphqlmonorepo","title":"<code>group:nest-graphqlMonorepo</code>","text":"<p>Group packages from nest-graphql monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:nest-graphql\" // (1)!\n      ],\n      \"groupName\": \"nest-graphql monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:nest-graphql</code>: nest-graphql monorepo</li> </ol>"},{"location":"presets-group/#groupnettymonorepo","title":"<code>group:nettyMonorepo</code>","text":"<p>Group packages from netty monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:netty\" // (1)!\n      ],\n      \"groupName\": \"netty monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:netty</code>: netty monorepo</li> </ol>"},{"location":"presets-group/#groupneutrinomonorepo","title":"<code>group:neutrinoMonorepo</code>","text":"<p>Group packages from neutrino monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:neutrino\" // (1)!\n      ],\n      \"groupName\": \"neutrino monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:neutrino</code>: neutrino monorepo</li> </ol>"},{"location":"presets-group/#groupnexpectmonorepo","title":"<code>group:nexpectMonorepo</code>","text":"<p>Group packages from nexpect monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:nexpect\" // (1)!\n      ],\n      \"groupName\": \"nexpect monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:nexpect</code>: nexpect monorepo</li> </ol>"},{"location":"presets-group/#groupnextjsmonorepo","title":"<code>group:nextjsMonorepo</code>","text":"<p>Group packages from nextjs monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:nextjs\" // (1)!\n      ],\n      \"groupName\": \"nextjs monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:nextjs</code>: nextjs monorepo</li> </ol>"},{"location":"presets-group/#groupnextramonorepo","title":"<code>group:nextraMonorepo</code>","text":"<p>Group packages from nextra monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:nextra\" // (1)!\n      ],\n      \"groupName\": \"nextra monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:nextra</code>: nextra monorepo</li> </ol>"},{"location":"presets-group/#groupngx-cookie-servicemonorepo","title":"<code>group:ngx-cookie-serviceMonorepo</code>","text":"<p>Group packages from ngx-cookie-service monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:ngx-cookie-service\" // (1)!\n      ],\n      \"groupName\": \"ngx-cookie-service monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:ngx-cookie-service</code>: ngx-cookie-service monorepo</li> </ol>"},{"location":"presets-group/#groupngx-formlymonorepo","title":"<code>group:ngx-formlyMonorepo</code>","text":"<p>Group packages from ngx-formly monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:ngx-formly\" // (1)!\n      ],\n      \"groupName\": \"ngx-formly monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:ngx-formly</code>: ngx-formly monorepo</li> </ol>"},{"location":"presets-group/#groupngxs-storemonorepo","title":"<code>group:ngxs-storeMonorepo</code>","text":"<p>Group packages from ngxs-store monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:ngxs-store\" // (1)!\n      ],\n      \"groupName\": \"ngxs-store monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:ngxs-store</code>: ngxs-store monorepo</li> </ol>"},{"location":"presets-group/#groupnivomonorepo","title":"<code>group:nivoMonorepo</code>","text":"<p>Group packages from nivo monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:nivo\" // (1)!\n      ],\n      \"groupName\": \"nivo monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:nivo</code>: nivo monorepo</li> </ol>"},{"location":"presets-group/#groupnjson-schemamonorepo","title":"<code>group:njson-schemaMonorepo</code>","text":"<p>Group packages from njson-schema monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:njson-schema\" // (1)!\n      ],\n      \"groupName\": \"njson-schema monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:njson-schema</code>: njson-schema monorepo</li> </ol>"},{"location":"presets-group/#groupnswagmonorepo","title":"<code>group:nswagMonorepo</code>","text":"<p>Group packages from nswag monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:nswag\" // (1)!\n      ],\n      \"groupName\": \"nswag monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:nswag</code>: nswag monorepo</li> </ol>"},{"location":"presets-group/#groupnugetmonorepo","title":"<code>group:nugetMonorepo</code>","text":"<p>Group packages from nuget monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:nuget\" // (1)!\n      ],\n      \"groupName\": \"nuget monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:nuget</code>: nuget monorepo</li> </ol>"},{"location":"presets-group/#groupnuke-buildmonorepo","title":"<code>group:nuke-buildMonorepo</code>","text":"<p>Group packages from nuke-build monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:nuke-build\" // (1)!\n      ],\n      \"groupName\": \"nuke-build monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:nuke-build</code>: nuke-build monorepo</li> </ol>"},{"location":"presets-group/#groupnuxtjsmonorepo","title":"<code>group:nuxtjsMonorepo</code>","text":"<p>Group packages from nuxtjs monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:nuxtjs\" // (1)!\n      ],\n      \"groupName\": \"nuxtjs monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:nuxtjs</code>: nuxtjs monorepo</li> </ol>"},{"location":"presets-group/#groupokhttpmonorepo","title":"<code>group:okhttpMonorepo</code>","text":"<p>Group packages from okhttp monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:okhttp\" // (1)!\n      ],\n      \"groupName\": \"okhttp monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:okhttp</code>: okhttp monorepo</li> </ol>"},{"location":"presets-group/#groupopenapi-dotnetmonorepo","title":"<code>group:openapi-dotnetMonorepo</code>","text":"<p>Group packages from openapi-dotnet monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:openapi-dotnet\" // (1)!\n      ],\n      \"groupName\": \"openapi-dotnet monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:openapi-dotnet</code>: openapi-dotnet monorepo</li> </ol>"},{"location":"presets-group/#groupopencostmonorepo","title":"<code>group:opencostMonorepo</code>","text":"<p>Group packages from opencost monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:opencost\" // (1)!\n      ],\n      \"groupName\": \"opencost monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:opencost</code>: opencost monorepo</li> </ol>"},{"location":"presets-group/#groupopeniddictmonorepo","title":"<code>group:openiddictMonorepo</code>","text":"<p>Group packages from openiddict monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:openiddict\" // (1)!\n      ],\n      \"groupName\": \"openiddict monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:openiddict</code>: openiddict monorepo</li> </ol>"},{"location":"presets-group/#groupopentelemetry-dotnetmonorepo","title":"<code>group:opentelemetry-dotnetMonorepo</code>","text":"<p>Group packages from opentelemetry-dotnet monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:opentelemetry-dotnet\" // (1)!\n      ],\n      \"groupName\": \"opentelemetry-dotnet monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:opentelemetry-dotnet</code>: opentelemetry-dotnet monorepo</li> </ol>"},{"location":"presets-group/#groupopentelemetry-dotnet-contribmonorepo","title":"<code>group:opentelemetry-dotnet-contribMonorepo</code>","text":"<p>Group packages from opentelemetry-dotnet-contrib monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:opentelemetry-dotnet-contrib\" // (1)!\n      ],\n      \"groupName\": \"opentelemetry-dotnet-contrib monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:opentelemetry-dotnet-contrib</code>: opentelemetry-dotnet-contrib monorepo</li> </ol>"},{"location":"presets-group/#groupopentelemetry-erlangmonorepo","title":"<code>group:opentelemetry-erlangMonorepo</code>","text":"<p>Group packages from opentelemetry-erlang monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:opentelemetry-erlang\" // (1)!\n      ],\n      \"groupName\": \"opentelemetry-erlang monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:opentelemetry-erlang</code>: opentelemetry-erlang monorepo</li> </ol>"},{"location":"presets-group/#groupopentelemetry-erlang-contribmonorepo","title":"<code>group:opentelemetry-erlang-contribMonorepo</code>","text":"<p>Group packages from opentelemetry-erlang-contrib monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:opentelemetry-erlang-contrib\" // (1)!\n      ],\n      \"groupName\": \"opentelemetry-erlang-contrib monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:opentelemetry-erlang-contrib</code>: opentelemetry-erlang-contrib monorepo</li> </ol>"},{"location":"presets-group/#groupopentelemetry-gomonorepo","title":"<code>group:opentelemetry-goMonorepo</code>","text":"<p>Group packages from opentelemetry-go monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:opentelemetry-go\" // (1)!\n      ],\n      \"groupName\": \"opentelemetry-go monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:opentelemetry-go</code>: opentelemetry-go monorepo</li> </ol>"},{"location":"presets-group/#groupopentelemetry-go-contribmonorepo","title":"<code>group:opentelemetry-go-contribMonorepo</code>","text":"<p>Group packages from opentelemetry-go-contrib monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:opentelemetry-go-contrib\" // (1)!\n      ],\n      \"groupName\": \"opentelemetry-go-contrib monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:opentelemetry-go-contrib</code>: opentelemetry-go-contrib monorepo</li> </ol>"},{"location":"presets-group/#groupopentelemetry-javamonorepo","title":"<code>group:opentelemetry-javaMonorepo</code>","text":"<p>Group packages from opentelemetry-java monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:opentelemetry-java\" // (1)!\n      ],\n      \"groupName\": \"opentelemetry-java monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:opentelemetry-java</code>: opentelemetry-java monorepo</li> </ol>"},{"location":"presets-group/#groupopentelemetry-java-contribmonorepo","title":"<code>group:opentelemetry-java-contribMonorepo</code>","text":"<p>Group packages from opentelemetry-java-contrib monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:opentelemetry-java-contrib\" // (1)!\n      ],\n      \"groupName\": \"opentelemetry-java-contrib monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:opentelemetry-java-contrib</code>: opentelemetry-java-contrib monorepo</li> </ol>"},{"location":"presets-group/#groupopentelemetry-jsmonorepo","title":"<code>group:opentelemetry-jsMonorepo</code>","text":"<p>Group packages from opentelemetry-js monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:opentelemetry-js\" // (1)!\n      ],\n      \"groupName\": \"opentelemetry-js monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:opentelemetry-js</code>: opentelemetry-js monorepo</li> </ol>"},{"location":"presets-group/#groupopentelemetry-js-contribmonorepo","title":"<code>group:opentelemetry-js-contribMonorepo</code>","text":"<p>Group packages from opentelemetry-js-contrib monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:opentelemetry-js-contrib\" // (1)!\n      ],\n      \"groupName\": \"opentelemetry-js-contrib monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:opentelemetry-js-contrib</code>: opentelemetry-js-contrib monorepo</li> </ol>"},{"location":"presets-group/#groupopentelemetry-phpmonorepo","title":"<code>group:opentelemetry-phpMonorepo</code>","text":"<p>Group packages from opentelemetry-php monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:opentelemetry-php\" // (1)!\n      ],\n      \"groupName\": \"opentelemetry-php monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:opentelemetry-php</code>: opentelemetry-php monorepo</li> </ol>"},{"location":"presets-group/#groupopentelemetry-php-contribmonorepo","title":"<code>group:opentelemetry-php-contribMonorepo</code>","text":"<p>Group packages from opentelemetry-php-contrib monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:opentelemetry-php-contrib\" // (1)!\n      ],\n      \"groupName\": \"opentelemetry-php-contrib monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:opentelemetry-php-contrib</code>: opentelemetry-php-contrib monorepo</li> </ol>"},{"location":"presets-group/#groupopentelemetry-pythonmonorepo","title":"<code>group:opentelemetry-pythonMonorepo</code>","text":"<p>Group packages from opentelemetry-python monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:opentelemetry-python\" // (1)!\n      ],\n      \"groupName\": \"opentelemetry-python monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:opentelemetry-python</code>: opentelemetry-python monorepo</li> </ol>"},{"location":"presets-group/#groupopentelemetry-python-contribmonorepo","title":"<code>group:opentelemetry-python-contribMonorepo</code>","text":"<p>Group packages from opentelemetry-python-contrib monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:opentelemetry-python-contrib\" // (1)!\n      ],\n      \"groupName\": \"opentelemetry-python-contrib monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:opentelemetry-python-contrib</code>: opentelemetry-python-contrib monorepo</li> </ol>"},{"location":"presets-group/#groupopentelemetry-rustmonorepo","title":"<code>group:opentelemetry-rustMonorepo</code>","text":"<p>Group packages from opentelemetry-rust monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:opentelemetry-rust\" // (1)!\n      ],\n      \"groupName\": \"opentelemetry-rust monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:opentelemetry-rust</code>: opentelemetry-rust monorepo</li> </ol>"},{"location":"presets-group/#groupopentelemetry-rust-contribmonorepo","title":"<code>group:opentelemetry-rust-contribMonorepo</code>","text":"<p>Group packages from opentelemetry-rust-contrib monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:opentelemetry-rust-contrib\" // (1)!\n      ],\n      \"groupName\": \"opentelemetry-rust-contrib monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:opentelemetry-rust-contrib</code>: opentelemetry-rust-contrib monorepo</li> </ol>"},{"location":"presets-group/#grouporleansmonorepo","title":"<code>group:orleansMonorepo</code>","text":"<p>Group packages from orleans monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:orleans\" // (1)!\n      ],\n      \"groupName\": \"orleans monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:orleans</code>: orleans monorepo</li> </ol>"},{"location":"presets-group/#grouporpcmonorepo","title":"<code>group:orpcMonorepo</code>","text":"<p>Group packages from orpc monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:orpc\" // (1)!\n      ],\n      \"groupName\": \"orpc monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:orpc</code>: orpc monorepo</li> </ol>"},{"location":"presets-group/#grouppanda-cssmonorepo","title":"<code>group:panda-cssMonorepo</code>","text":"<p>Group packages from panda-css monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:panda-css\" // (1)!\n      ],\n      \"groupName\": \"panda-css monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:panda-css</code>: panda-css monorepo</li> </ol>"},{"location":"presets-group/#groupparcelmonorepo","title":"<code>group:parcelMonorepo</code>","text":"<p>Group packages from parcel monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:parcel\" // (1)!\n      ],\n      \"groupName\": \"parcel monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:parcel</code>: parcel monorepo</li> </ol>"},{"location":"presets-group/#grouppayloadcmsmonorepo","title":"<code>group:payloadcmsMonorepo</code>","text":"<p>Group packages from payloadcms monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:payloadcms\" // (1)!\n      ],\n      \"groupName\": \"payloadcms monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:payloadcms</code>: payloadcms monorepo</li> </ol>"},{"location":"presets-group/#grouppdfmemonorepo","title":"<code>group:pdfmeMonorepo</code>","text":"<p>Group packages from pdfme monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:pdfme\" // (1)!\n      ],\n      \"groupName\": \"pdfme monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:pdfme</code>: pdfme monorepo</li> </ol>"},{"location":"presets-group/#grouppercy-climonorepo","title":"<code>group:percy-cliMonorepo</code>","text":"<p>Group packages from percy-cli monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:percy-cli\" // (1)!\n      ],\n      \"groupName\": \"percy-cli monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:percy-cli</code>: percy-cli monorepo</li> </ol>"},{"location":"presets-group/#grouppicassojsmonorepo","title":"<code>group:picassojsMonorepo</code>","text":"<p>Group packages from picassojs monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:picassojs\" // (1)!\n      ],\n      \"groupName\": \"picassojs monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:picassojs</code>: picassojs monorepo</li> </ol>"},{"location":"presets-group/#grouppixijsmonorepo","title":"<code>group:pixijsMonorepo</code>","text":"<p>Group packages from pixijs monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:pixijs\" // (1)!\n      ],\n      \"groupName\": \"pixijs monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:pixijs</code>: pixijs monorepo</li> </ol>"},{"location":"presets-group/#groupplaywrightmonorepo","title":"<code>group:playwrightMonorepo</code>","text":"<p>Group packages from playwright monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:playwright\" // (1)!\n      ],\n      \"groupName\": \"playwright monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:playwright</code>: playwright monorepo</li> </ol>"},{"location":"presets-group/#groupplaywright-dotnetmonorepo","title":"<code>group:playwright-dotnetMonorepo</code>","text":"<p>Group packages from playwright-dotnet monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:playwright-dotnet\" // (1)!\n      ],\n      \"groupName\": \"playwright-dotnet monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:playwright-dotnet</code>: playwright-dotnet monorepo</li> </ol>"},{"location":"presets-group/#grouppnpcoremonorepo","title":"<code>group:pnpcoreMonorepo</code>","text":"<p>Group packages from pnpcore monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:pnpcore\" // (1)!\n      ],\n      \"groupName\": \"pnpcore monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:pnpcore</code>: pnpcore monorepo</li> </ol>"},{"location":"presets-group/#grouppnpjsmonorepo","title":"<code>group:pnpjsMonorepo</code>","text":"<p>Group packages from pnpjs monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:pnpjs\" // (1)!\n      ],\n      \"groupName\": \"pnpjs monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:pnpjs</code>: pnpjs monorepo</li> </ol>"},{"location":"presets-group/#grouppollymonorepo","title":"<code>group:pollyMonorepo</code>","text":"<p>Group packages from polly monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:polly\" // (1)!\n      ],\n      \"groupName\": \"polly monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:polly</code>: polly monorepo</li> </ol>"},{"location":"presets-group/#grouppollyjsmonorepo","title":"<code>group:pollyjsMonorepo</code>","text":"<p>Group packages from pollyjs monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:pollyjs\" // (1)!\n      ],\n      \"groupName\": \"pollyjs monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:pollyjs</code>: pollyjs monorepo</li> </ol>"},{"location":"presets-group/#grouppothosmonorepo","title":"<code>group:pothosMonorepo</code>","text":"<p>Group packages from pothos monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:pothos\" // (1)!\n      ],\n      \"groupName\": \"pothos monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:pothos</code>: pothos monorepo</li> </ol>"},{"location":"presets-group/#grouppouchdbmonorepo","title":"<code>group:pouchdbMonorepo</code>","text":"<p>Group packages from pouchdb monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:pouchdb\" // (1)!\n      ],\n      \"groupName\": \"pouchdb monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:pouchdb</code>: pouchdb monorepo</li> </ol>"},{"location":"presets-group/#grouppowermockmonorepo","title":"<code>group:powermockMonorepo</code>","text":"<p>Group packages from powermock monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:powermock\" // (1)!\n      ],\n      \"groupName\": \"powermock monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:powermock</code>: powermock monorepo</li> </ol>"},{"location":"presets-group/#groupprismamonorepo","title":"<code>group:prismaMonorepo</code>","text":"<p>Group packages from prisma monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:prisma\" // (1)!\n      ],\n      \"groupName\": \"prisma monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:prisma</code>: prisma monorepo</li> </ol>"},{"location":"presets-group/#groupprometheus-netmonorepo","title":"<code>group:prometheus-netMonorepo</code>","text":"<p>Group packages from prometheus-net monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:prometheus-net\" // (1)!\n      ],\n      \"groupName\": \"prometheus-net monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:prometheus-net</code>: prometheus-net monorepo</li> </ol>"},{"location":"presets-group/#grouppromstermonorepo","title":"<code>group:promsterMonorepo</code>","text":"<p>Group packages from promster monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:promster\" // (1)!\n      ],\n      \"groupName\": \"promster monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:promster</code>: promster monorepo</li> </ol>"},{"location":"presets-group/#groupprotobufmonorepo","title":"<code>group:protobufMonorepo</code>","text":"<p>Group packages from protobuf monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:protobuf\" // (1)!\n      ],\n      \"groupName\": \"protobuf monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:protobuf</code>: protobuf monorepo</li> </ol>"},{"location":"presets-group/#groupquartznetmonorepo","title":"<code>group:quartznetMonorepo</code>","text":"<p>Group packages from quartznet monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:quartznet\" // (1)!\n      ],\n      \"groupName\": \"quartznet monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:quartznet</code>: quartznet monorepo</li> </ol>"},{"location":"presets-group/#groupradix-ui-primitivesmonorepo","title":"<code>group:radix-ui-primitivesMonorepo</code>","text":"<p>Group packages from radix-ui-primitives monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:radix-ui-primitives\" // (1)!\n      ],\n      \"groupName\": \"radix-ui-primitives monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:radix-ui-primitives</code>: radix-ui-primitives monorepo</li> </ol>"},{"location":"presets-group/#groupreach-uimonorepo","title":"<code>group:reach-uiMonorepo</code>","text":"<p>Group packages from reach-ui monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:reach-ui\" // (1)!\n      ],\n      \"groupName\": \"reach-ui monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:reach-ui</code>: reach-ui monorepo</li> </ol>"},{"location":"presets-group/#groupreactmonorepo","title":"<code>group:reactMonorepo</code>","text":"<p>Group packages from react monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:react\" // (1)!\n      ],\n      \"groupName\": \"react monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:react</code>: react monorepo</li> </ol>"},{"location":"presets-group/#groupreact-adminmonorepo","title":"<code>group:react-adminMonorepo</code>","text":"<p>Group packages from react-admin monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:react-admin\" // (1)!\n      ],\n      \"groupName\": \"react-admin monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:react-admin</code>: react-admin monorepo</li> </ol>"},{"location":"presets-group/#groupreact-apollomonorepo","title":"<code>group:react-apolloMonorepo</code>","text":"<p>Group packages from react-apollo monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:react-apollo\" // (1)!\n      ],\n      \"groupName\": \"react-apollo monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:react-apollo</code>: react-apollo monorepo</li> </ol>"},{"location":"presets-group/#groupreact-dndmonorepo","title":"<code>group:react-dndMonorepo</code>","text":"<p>Group packages from react-dnd monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:react-dnd\" // (1)!\n      ],\n      \"groupName\": \"react-dnd monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:react-dnd</code>: react-dnd monorepo</li> </ol>"},{"location":"presets-group/#groupreact-emailmonorepo","title":"<code>group:react-emailMonorepo</code>","text":"<p>Group packages from react-email monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:react-email\" // (1)!\n      ],\n      \"groupName\": \"react-email monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:react-email</code>: react-email monorepo</li> </ol>"},{"location":"presets-group/#groupreact-navigationmonorepo","title":"<code>group:react-navigationMonorepo</code>","text":"<p>Group packages from react-navigation monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:react-navigation\" // (1)!\n      ],\n      \"groupName\": \"react-navigation monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:react-navigation</code>: react-navigation monorepo</li> </ol>"},{"location":"presets-group/#groupreact-pagemonorepo","title":"<code>group:react-pageMonorepo</code>","text":"<p>Group packages from react-page monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:react-page\" // (1)!\n      ],\n      \"groupName\": \"react-page monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:react-page</code>: react-page monorepo</li> </ol>"},{"location":"presets-group/#groupreact-railsmonorepo","title":"<code>group:react-railsMonorepo</code>","text":"<p>Group packages from react-rails monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:react-rails\" // (1)!\n      ],\n      \"groupName\": \"react-rails monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:react-rails</code>: react-rails monorepo</li> </ol>"},{"location":"presets-group/#groupreact-routermonorepo","title":"<code>group:react-routerMonorepo</code>","text":"<p>Group packages from react-router monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:react-router\" // (1)!\n      ],\n      \"groupName\": \"react-router monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:react-router</code>: react-router monorepo</li> </ol>"},{"location":"presets-group/#groupreact-spectrummonorepo","title":"<code>group:react-spectrumMonorepo</code>","text":"<p>Group packages from react-spectrum monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:react-spectrum\" // (1)!\n      ],\n      \"groupName\": \"react-spectrum monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:react-spectrum</code>: react-spectrum monorepo</li> </ol>"},{"location":"presets-group/#groupreact-springmonorepo","title":"<code>group:react-springMonorepo</code>","text":"<p>Group packages from react-spring monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:react-spring\" // (1)!\n      ],\n      \"groupName\": \"react-spring monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:react-spring</code>: react-spring monorepo</li> </ol>"},{"location":"presets-group/#groupreactivestack-cookiesmonorepo","title":"<code>group:reactivestack-cookiesMonorepo</code>","text":"<p>Group packages from reactivestack-cookies monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:reactivestack-cookies\" // (1)!\n      ],\n      \"groupName\": \"reactivestack-cookies monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:reactivestack-cookies</code>: reactivestack-cookies monorepo</li> </ol>"},{"location":"presets-group/#groupreakitmonorepo","title":"<code>group:reakitMonorepo</code>","text":"<p>Group packages from reakit monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:reakit\" // (1)!\n      ],\n      \"groupName\": \"reakit monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:reakit</code>: reakit monorepo</li> </ol>"},{"location":"presets-group/#groupredwoodmonorepo","title":"<code>group:redwoodMonorepo</code>","text":"<p>Group packages from redwood monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:redwood\" // (1)!\n      ],\n      \"groupName\": \"redwood monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:redwood</code>: redwood monorepo</li> </ol>"},{"location":"presets-group/#grouprefitmonorepo","title":"<code>group:refitMonorepo</code>","text":"<p>Group packages from refit monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:refit\" // (1)!\n      ],\n      \"groupName\": \"refit monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:refit</code>: refit monorepo</li> </ol>"},{"location":"presets-group/#groupreg-suitmonorepo","title":"<code>group:reg-suitMonorepo</code>","text":"<p>Group packages from reg-suit monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:reg-suit\" // (1)!\n      ],\n      \"groupName\": \"reg-suit monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:reg-suit</code>: reg-suit monorepo</li> </ol>"},{"location":"presets-group/#groupremarkmonorepo","title":"<code>group:remarkMonorepo</code>","text":"<p>Group packages from remark monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:remark\" // (1)!\n      ],\n      \"groupName\": \"remark monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:remark</code>: remark monorepo</li> </ol>"},{"location":"presets-group/#groupremixmonorepo","title":"<code>group:remixMonorepo</code>","text":"<p>Group packages from remix monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:remix\" // (1)!\n      ],\n      \"groupName\": \"remix monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:remix</code>: remix monorepo</li> </ol>"},{"location":"presets-group/#groupretrofitmonorepo","title":"<code>group:retrofitMonorepo</code>","text":"<p>Group packages from retrofit monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:retrofit\" // (1)!\n      ],\n      \"groupName\": \"retrofit monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:retrofit</code>: retrofit monorepo</li> </ol>"},{"location":"presets-group/#grouprivermonorepo","title":"<code>group:riverMonorepo</code>","text":"<p>Group packages from river monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:river\" // (1)!\n      ],\n      \"groupName\": \"river monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:river</code>: river monorepo</li> </ol>"},{"location":"presets-group/#grouprjsfmonorepo","title":"<code>group:rjsfMonorepo</code>","text":"<p>Group packages from rjsf monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:rjsf\" // (1)!\n      ],\n      \"groupName\": \"rjsf monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:rjsf</code>: rjsf monorepo</li> </ol>"},{"location":"presets-group/#grouprouter5monorepo","title":"<code>group:router5Monorepo</code>","text":"<p>Group packages from router5 monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:router5\" // (1)!\n      ],\n      \"groupName\": \"router5 monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:router5</code>: router5 monorepo</li> </ol>"},{"location":"presets-group/#grouprspackmonorepo","title":"<code>group:rspackMonorepo</code>","text":"<p>Group packages from rspack monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:rspack\" // (1)!\n      ],\n      \"groupName\": \"rspack monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:rspack</code>: rspack monorepo</li> </ol>"},{"location":"presets-group/#groupruby-on-railsmonorepo","title":"<code>group:ruby-on-railsMonorepo</code>","text":"<p>Group packages from ruby-on-rails monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:ruby-on-rails\" // (1)!\n      ],\n      \"groupName\": \"ruby-on-rails monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:ruby-on-rails</code>: ruby-on-rails monorepo</li> </ol>"},{"location":"presets-group/#grouprust-analyzermonorepo","title":"<code>group:rust-analyzerMonorepo</code>","text":"<p>Group packages from rust-analyzer monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:rust-analyzer\" // (1)!\n      ],\n      \"groupName\": \"rust-analyzer monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:rust-analyzer</code>: rust-analyzer monorepo</li> </ol>"},{"location":"presets-group/#grouprust-futuresmonorepo","title":"<code>group:rust-futuresMonorepo</code>","text":"<p>Group packages from rust-futures monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:rust-futures\" // (1)!\n      ],\n      \"groupName\": \"rust-futures monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:rust-futures</code>: rust-futures monorepo</li> </ol>"},{"location":"presets-group/#grouprust-wasm-bindgenmonorepo","title":"<code>group:rust-wasm-bindgenMonorepo</code>","text":"<p>Group packages from rust-wasm-bindgen monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:rust-wasm-bindgen\" // (1)!\n      ],\n      \"groupName\": \"rust-wasm-bindgen monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:rust-wasm-bindgen</code>: rust-wasm-bindgen monorepo</li> </ol>"},{"location":"presets-group/#groupsanitymonorepo","title":"<code>group:sanityMonorepo</code>","text":"<p>Group packages from sanity monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:sanity\" // (1)!\n      ],\n      \"groupName\": \"sanity monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:sanity</code>: sanity monorepo</li> </ol>"},{"location":"presets-group/#groupscaffdogmonorepo","title":"<code>group:scaffdogMonorepo</code>","text":"<p>Group packages from scaffdog monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:scaffdog\" // (1)!\n      ],\n      \"groupName\": \"scaffdog monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:scaffdog</code>: scaffdog monorepo</li> </ol>"},{"location":"presets-group/#groupscalarmonorepo","title":"<code>group:scalarMonorepo</code>","text":"<p>Group packages from scalar monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:scalar\" // (1)!\n      ],\n      \"groupName\": \"scalar monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:scalar</code>: scalar monorepo</li> </ol>"},{"location":"presets-group/#groupsea-ormmonorepo","title":"<code>group:sea-ormMonorepo</code>","text":"<p>Group packages from sea-orm monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:sea-orm\" // (1)!\n      ],\n      \"groupName\": \"sea-orm monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:sea-orm</code>: sea-orm monorepo</li> </ol>"},{"location":"presets-group/#groupsecretlintmonorepo","title":"<code>group:secretlintMonorepo</code>","text":"<p>Group packages from secretlint monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:secretlint\" // (1)!\n      ],\n      \"groupName\": \"secretlint monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:secretlint</code>: secretlint monorepo</li> </ol>"},{"location":"presets-group/#groupsendgrid-nodejsmonorepo","title":"<code>group:sendgrid-nodejsMonorepo</code>","text":"<p>Group packages from sendgrid-nodejs monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:sendgrid-nodejs\" // (1)!\n      ],\n      \"groupName\": \"sendgrid-nodejs monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:sendgrid-nodejs</code>: sendgrid-nodejs monorepo</li> </ol>"},{"location":"presets-group/#groupsentry-dotnetmonorepo","title":"<code>group:sentry-dotnetMonorepo</code>","text":"<p>Group packages from sentry-dotnet monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:sentry-dotnet\" // (1)!\n      ],\n      \"groupName\": \"sentry-dotnet monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:sentry-dotnet</code>: sentry-dotnet monorepo</li> </ol>"},{"location":"presets-group/#groupsentry-javascriptmonorepo","title":"<code>group:sentry-javascriptMonorepo</code>","text":"<p>Group packages from sentry-javascript monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:sentry-javascript\" // (1)!\n      ],\n      \"groupName\": \"sentry-javascript monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:sentry-javascript</code>: sentry-javascript monorepo</li> </ol>"},{"location":"presets-group/#groupsentry-rubymonorepo","title":"<code>group:sentry-rubyMonorepo</code>","text":"<p>Group packages from sentry-ruby monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:sentry-ruby\" // (1)!\n      ],\n      \"groupName\": \"sentry-ruby monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:sentry-ruby</code>: sentry-ruby monorepo</li> </ol>"},{"location":"presets-group/#groupsentry-rustmonorepo","title":"<code>group:sentry-rustMonorepo</code>","text":"<p>Group packages from sentry-rust monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:sentry-rust\" // (1)!\n      ],\n      \"groupName\": \"sentry-rust monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:sentry-rust</code>: sentry-rust monorepo</li> </ol>"},{"location":"presets-group/#groupserdemonorepo","title":"<code>group:serdeMonorepo</code>","text":"<p>Group packages from serde monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:serde\" // (1)!\n      ],\n      \"groupName\": \"serde monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:serde</code>: serde monorepo</li> </ol>"},{"location":"presets-group/#groupserenity-jsmonorepo","title":"<code>group:serenity-jsMonorepo</code>","text":"<p>Group packages from serenity-js monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:serenity-js\" // (1)!\n      ],\n      \"groupName\": \"serenity-js monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:serenity-js</code>: serenity-js monorepo</li> </ol>"},{"location":"presets-group/#groupserilog-uimonorepo","title":"<code>group:serilog-uiMonorepo</code>","text":"<p>Group packages from serilog-ui monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:serilog-ui\" // (1)!\n      ],\n      \"groupName\": \"serilog-ui monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:serilog-ui</code>: serilog-ui monorepo</li> </ol>"},{"location":"presets-group/#groupservicestackmonorepo","title":"<code>group:servicestackMonorepo</code>","text":"<p>Group packages from servicestack monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:servicestack\" // (1)!\n      ],\n      \"groupName\": \"servicestack monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:servicestack</code>: servicestack monorepo</li> </ol>"},{"location":"presets-group/#groupserwistmonorepo","title":"<code>group:serwistMonorepo</code>","text":"<p>Group packages from serwist monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:serwist\" // (1)!\n      ],\n      \"groupName\": \"serwist monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:serwist</code>: serwist monorepo</li> </ol>"},{"location":"presets-group/#groupshedlockmonorepo","title":"<code>group:shedlockMonorepo</code>","text":"<p>Group packages from shedlock monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:shedlock\" // (1)!\n      ],\n      \"groupName\": \"shedlock monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:shedlock</code>: shedlock monorepo</li> </ol>"},{"location":"presets-group/#groupshikimonorepo","title":"<code>group:shikiMonorepo</code>","text":"<p>Group packages from shiki monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:shiki\" // (1)!\n      ],\n      \"groupName\": \"shiki monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:shiki</code>: shiki monorepo</li> </ol>"},{"location":"presets-group/#groupshopify-app-bridgemonorepo","title":"<code>group:shopify-app-bridgeMonorepo</code>","text":"<p>Group packages from shopify-app-bridge monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:shopify-app-bridge\" // (1)!\n      ],\n      \"groupName\": \"shopify-app-bridge monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:shopify-app-bridge</code>: shopify-app-bridge monorepo</li> </ol>"},{"location":"presets-group/#groupsitecore-jssmonorepo","title":"<code>group:sitecore-jssMonorepo</code>","text":"<p>Group packages from sitecore-jss monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:sitecore-jss\" // (1)!\n      ],\n      \"groupName\": \"sitecore-jss monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:sitecore-jss</code>: sitecore-jss monorepo</li> </ol>"},{"location":"presets-group/#groupsize-limitmonorepo","title":"<code>group:size-limitMonorepo</code>","text":"<p>Group packages from size-limit monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:size-limit\" // (1)!\n      ],\n      \"groupName\": \"size-limit monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:size-limit</code>: size-limit monorepo</li> </ol>"},{"location":"presets-group/#groupskiasharpmonorepo","title":"<code>group:skiasharpMonorepo</code>","text":"<p>Group packages from skiasharp monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:skiasharp\" // (1)!\n      ],\n      \"groupName\": \"skiasharp monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:skiasharp</code>: skiasharp monorepo</li> </ol>"},{"location":"presets-group/#groupslack-netmonorepo","title":"<code>group:slack-netMonorepo</code>","text":"<p>Group packages from slack-net monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:slack-net\" // (1)!\n      ],\n      \"groupName\": \"slack-net monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:slack-net</code>: slack-net monorepo</li> </ol>"},{"location":"presets-group/#groupslf4jmonorepo","title":"<code>group:slf4jMonorepo</code>","text":"<p>Group packages from slf4j monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:slf4j\" // (1)!\n      ],\n      \"groupName\": \"slf4j monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:slf4j</code>: slf4j monorepo</li> </ol>"},{"location":"presets-group/#groupslim-message-busmonorepo","title":"<code>group:slim-message-busMonorepo</code>","text":"<p>Group packages from slim-message-bus monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:slim-message-bus\" // (1)!\n      ],\n      \"groupName\": \"slim-message-bus monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:slim-message-bus</code>: slim-message-bus monorepo</li> </ol>"},{"location":"presets-group/#groupspectre-consolemonorepo","title":"<code>group:spectre-consoleMonorepo</code>","text":"<p>Group packages from spectre-console monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:spectre-console\" // (1)!\n      ],\n      \"groupName\": \"spectre-console monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:spectre-console</code>: spectre-console monorepo</li> </ol>"},{"location":"presets-group/#groupspectre-console-climonorepo","title":"<code>group:spectre-console-cliMonorepo</code>","text":"<p>Group packages from spectre-console-cli monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:spectre-console-cli\" // (1)!\n      ],\n      \"groupName\": \"spectre-console-cli monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:spectre-console-cli</code>: spectre-console-cli monorepo</li> </ol>"},{"location":"presets-group/#groupspringfoxmonorepo","title":"<code>group:springfoxMonorepo</code>","text":"<p>Group packages from springfox monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:springfox\" // (1)!\n      ],\n      \"groupName\": \"springfox monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:springfox</code>: springfox monorepo</li> </ol>"},{"location":"presets-group/#groupstack-exchange-redis-extensionsmonorepo","title":"<code>group:stack-exchange-redis-extensionsMonorepo</code>","text":"<p>Group packages from stack-exchange-redis-extensions monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:stack-exchange-redis-extensions\" // (1)!\n      ],\n      \"groupName\": \"stack-exchange-redis-extensions monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:stack-exchange-redis-extensions</code>: stack-exchange-redis-extensions monorepo</li> </ol>"},{"location":"presets-group/#groupstatsig-js-clientmonorepo","title":"<code>group:statsig-js-clientMonorepo</code>","text":"<p>Group packages from statsig-js-client monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:statsig-js-client\" // (1)!\n      ],\n      \"groupName\": \"statsig-js-client monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:statsig-js-client</code>: statsig-js-client monorepo</li> </ol>"},{"location":"presets-group/#groupsteeltoemonorepo","title":"<code>group:steeltoeMonorepo</code>","text":"<p>Group packages from steeltoe monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:steeltoe\" // (1)!\n      ],\n      \"groupName\": \"steeltoe monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:steeltoe</code>: steeltoe monorepo</li> </ol>"},{"location":"presets-group/#groupstorybookmonorepo","title":"<code>group:storybookMonorepo</code>","text":"<p>Group packages from storybook monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:storybook\" // (1)!\n      ],\n      \"groupName\": \"storybook monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:storybook</code>: storybook monorepo</li> </ol>"},{"location":"presets-group/#groupstorybook-react-nativemonorepo","title":"<code>group:storybook-react-nativeMonorepo</code>","text":"<p>Group packages from storybook-react-native monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:storybook-react-native\" // (1)!\n      ],\n      \"groupName\": \"storybook-react-native monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:storybook-react-native</code>: storybook-react-native monorepo</li> </ol>"},{"location":"presets-group/#groupstrapimonorepo","title":"<code>group:strapiMonorepo</code>","text":"<p>Group packages from strapi monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:strapi\" // (1)!\n      ],\n      \"groupName\": \"strapi monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:strapi</code>: strapi monorepo</li> </ol>"},{"location":"presets-group/#groupstrummonorepo","title":"<code>group:strumMonorepo</code>","text":"<p>Group packages from strum monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:strum\" // (1)!\n      ],\n      \"groupName\": \"strum monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:strum</code>: strum monorepo</li> </ol>"},{"location":"presets-group/#groupstryker-jsmonorepo","title":"<code>group:stryker-jsMonorepo</code>","text":"<p>Group packages from stryker-js monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:stryker-js\" // (1)!\n      ],\n      \"groupName\": \"stryker-js monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:stryker-js</code>: stryker-js monorepo</li> </ol>"},{"location":"presets-group/#groupstylex-swcmonorepo","title":"<code>group:stylex-swcMonorepo</code>","text":"<p>Group packages from stylex-swc monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:stylex-swc\" // (1)!\n      ],\n      \"groupName\": \"stylex-swc monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:stylex-swc</code>: stylex-swc monorepo</li> </ol>"},{"location":"presets-group/#groupsurveyjsmonorepo","title":"<code>group:surveyjsMonorepo</code>","text":"<p>Group packages from surveyjs monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:surveyjs\" // (1)!\n      ],\n      \"groupName\": \"surveyjs monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:surveyjs</code>: surveyjs monorepo</li> </ol>"},{"location":"presets-group/#groupswashbuckle-aspnetcoremonorepo","title":"<code>group:swashbuckle-aspnetcoreMonorepo</code>","text":"<p>Group packages from swashbuckle-aspnetcore monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:swashbuckle-aspnetcore\" // (1)!\n      ],\n      \"groupName\": \"swashbuckle-aspnetcore monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:swashbuckle-aspnetcore</code>: swashbuckle-aspnetcore monorepo</li> </ol>"},{"location":"presets-group/#groupsystemioabstractionsmonorepo","title":"<code>group:system.io.abstractionsMonorepo</code>","text":"<p>Group packages from system.io.abstractions monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:system.io.abstractions\" // (1)!\n      ],\n      \"groupName\": \"system.io.abstractions monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:system.io.abstractions</code>: system.io.abstractions monorepo</li> </ol>"},{"location":"presets-group/#grouptaiga-uimonorepo","title":"<code>group:taiga-uiMonorepo</code>","text":"<p>Group packages from taiga-ui monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:taiga-ui\" // (1)!\n      ],\n      \"groupName\": \"taiga-ui monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:taiga-ui</code>: taiga-ui monorepo</li> </ol>"},{"location":"presets-group/#grouptailwindcssmonorepo","title":"<code>group:tailwindcssMonorepo</code>","text":"<p>Group packages from tailwindcss monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:tailwindcss\" // (1)!\n      ],\n      \"groupName\": \"tailwindcss monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:tailwindcss</code>: tailwindcss monorepo</li> </ol>"},{"location":"presets-group/#grouptamaguimonorepo","title":"<code>group:tamaguiMonorepo</code>","text":"<p>Group packages from tamagui monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:tamagui\" // (1)!\n      ],\n      \"groupName\": \"tamagui monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:tamagui</code>: tamagui monorepo</li> </ol>"},{"location":"presets-group/#grouptanstack-formmonorepo","title":"<code>group:tanstack-formMonorepo</code>","text":"<p>Group packages from tanstack-form monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:tanstack-form\" // (1)!\n      ],\n      \"groupName\": \"tanstack-form monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:tanstack-form</code>: tanstack-form monorepo</li> </ol>"},{"location":"presets-group/#grouptanstack-querymonorepo","title":"<code>group:tanstack-queryMonorepo</code>","text":"<p>Group packages from tanstack-query monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:tanstack-query\" // (1)!\n      ],\n      \"groupName\": \"tanstack-query monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:tanstack-query</code>: tanstack-query monorepo</li> </ol>"},{"location":"presets-group/#grouptanstack-routermonorepo","title":"<code>group:tanstack-routerMonorepo</code>","text":"<p>Group packages from tanstack-router monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:tanstack-router\" // (1)!\n      ],\n      \"groupName\": \"tanstack-router monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:tanstack-router</code>: tanstack-router monorepo</li> </ol>"},{"location":"presets-group/#grouptanstack-tablemonorepo","title":"<code>group:tanstack-tableMonorepo</code>","text":"<p>Group packages from tanstack-table monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:tanstack-table\" // (1)!\n      ],\n      \"groupName\": \"tanstack-table monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:tanstack-table</code>: tanstack-table monorepo</li> </ol>"},{"location":"presets-group/#grouptanstack-virtualmonorepo","title":"<code>group:tanstack-virtualMonorepo</code>","text":"<p>Group packages from tanstack-virtual monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:tanstack-virtual\" // (1)!\n      ],\n      \"groupName\": \"tanstack-virtual monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:tanstack-virtual</code>: tanstack-virtual monorepo</li> </ol>"},{"location":"presets-group/#grouptaurimonorepo","title":"<code>group:tauriMonorepo</code>","text":"<p>Group packages from tauri monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:tauri\" // (1)!\n      ],\n      \"groupName\": \"tauri monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:tauri</code>: tauri monorepo</li> </ol>"},{"location":"presets-group/#grouptelus-tdsmonorepo","title":"<code>group:telus-tdsMonorepo</code>","text":"<p>Group packages from telus-tds monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:telus-tds\" // (1)!\n      ],\n      \"groupName\": \"telus-tds monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:telus-tds</code>: telus-tds monorepo</li> </ol>"},{"location":"presets-group/#grouptelus-tds-coremonorepo","title":"<code>group:telus-tds-coreMonorepo</code>","text":"<p>Group packages from telus-tds-core monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:telus-tds-core\" // (1)!\n      ],\n      \"groupName\": \"telus-tds-core monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:telus-tds-core</code>: telus-tds-core monorepo</li> </ol>"},{"location":"presets-group/#grouptemporalio-tsmonorepo","title":"<code>group:temporalio-tsMonorepo</code>","text":"<p>Group packages from temporalio-ts monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:temporalio-ts\" // (1)!\n      ],\n      \"groupName\": \"temporalio-ts monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:temporalio-ts</code>: temporalio-ts monorepo</li> </ol>"},{"location":"presets-group/#groupterraformmonorepo","title":"<code>group:terraformMonorepo</code>","text":"<p>Group packages from terraform monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:terraform\" // (1)!\n      ],\n      \"groupName\": \"terraform monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:terraform</code>: terraform monorepo</li> </ol>"},{"location":"presets-group/#grouptestcontainers-dotnetmonorepo","title":"<code>group:testcontainers-dotnetMonorepo</code>","text":"<p>Group packages from testcontainers-dotnet monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:testcontainers-dotnet\" // (1)!\n      ],\n      \"groupName\": \"testcontainers-dotnet monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:testcontainers-dotnet</code>: testcontainers-dotnet monorepo</li> </ol>"},{"location":"presets-group/#grouptestcontainers-gomonorepo","title":"<code>group:testcontainers-goMonorepo</code>","text":"<p>Group packages from testcontainers-go monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:testcontainers-go\" // (1)!\n      ],\n      \"groupName\": \"testcontainers-go monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:testcontainers-go</code>: testcontainers-go monorepo</li> </ol>"},{"location":"presets-group/#grouptestcontainers-javamonorepo","title":"<code>group:testcontainers-javaMonorepo</code>","text":"<p>Group packages from testcontainers-java monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:testcontainers-java\" // (1)!\n      ],\n      \"groupName\": \"testcontainers-java monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:testcontainers-java</code>: testcontainers-java monorepo</li> </ol>"},{"location":"presets-group/#grouptestcontainers-nodemonorepo","title":"<code>group:testcontainers-nodeMonorepo</code>","text":"<p>Group packages from testcontainers-node monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:testcontainers-node\" // (1)!\n      ],\n      \"groupName\": \"testcontainers-node monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:testcontainers-node</code>: testcontainers-node monorepo</li> </ol>"},{"location":"presets-group/#grouptheme-uimonorepo","title":"<code>group:theme-uiMonorepo</code>","text":"<p>Group packages from theme-ui monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:theme-ui\" // (1)!\n      ],\n      \"groupName\": \"theme-ui monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:theme-ui</code>: theme-ui monorepo</li> </ol>"},{"location":"presets-group/#grouptikamonorepo","title":"<code>group:tikaMonorepo</code>","text":"<p>Group packages from tika monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:tika\" // (1)!\n      ],\n      \"groupName\": \"tika monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:tika</code>: tika monorepo</li> </ol>"},{"location":"presets-group/#grouptimvirmonorepo","title":"<code>group:timvirMonorepo</code>","text":"<p>Group packages from timvir monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:timvir\" // (1)!\n      ],\n      \"groupName\": \"timvir monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:timvir</code>: timvir monorepo</li> </ol>"},{"location":"presets-group/#grouptiptapmonorepo","title":"<code>group:tiptapMonorepo</code>","text":"<p>Group packages from tiptap monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:tiptap\" // (1)!\n      ],\n      \"groupName\": \"tiptap monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:tiptap</code>: tiptap monorepo</li> </ol>"},{"location":"presets-group/#grouptokio-prostmonorepo","title":"<code>group:tokio-prostMonorepo</code>","text":"<p>Group packages from tokio-prost monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:tokio-prost\" // (1)!\n      ],\n      \"groupName\": \"tokio-prost monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:tokio-prost</code>: tokio-prost monorepo</li> </ol>"},{"location":"presets-group/#grouptokio-tracingmonorepo","title":"<code>group:tokio-tracingMonorepo</code>","text":"<p>Group packages from tokio-tracing monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:tokio-tracing\" // (1)!\n      ],\n      \"groupName\": \"tokio-tracing monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:tokio-tracing</code>: tokio-tracing monorepo</li> </ol>"},{"location":"presets-group/#grouptomcatmonorepo","title":"<code>group:tomcatMonorepo</code>","text":"<p>Group packages from tomcat monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:tomcat\" // (1)!\n      ],\n      \"groupName\": \"tomcat monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:tomcat</code>: tomcat monorepo</li> </ol>"},{"location":"presets-group/#grouptonicmonorepo","title":"<code>group:tonicMonorepo</code>","text":"<p>Group packages from tonic monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:tonic\" // (1)!\n      ],\n      \"groupName\": \"tonic monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:tonic</code>: tonic monorepo</li> </ol>"},{"location":"presets-group/#grouptreatmonorepo","title":"<code>group:treatMonorepo</code>","text":"<p>Group packages from treat monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:treat\" // (1)!\n      ],\n      \"groupName\": \"treat monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:treat</code>: treat monorepo</li> </ol>"},{"location":"presets-group/#grouptrpcmonorepo","title":"<code>group:trpcMonorepo</code>","text":"<p>Group packages from trpc monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:trpc\" // (1)!\n      ],\n      \"groupName\": \"trpc monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:trpc</code>: trpc monorepo</li> </ol>"},{"location":"presets-group/#grouptrust-dnsmonorepo","title":"<code>group:trust-dnsMonorepo</code>","text":"<p>Group packages from trust-dns monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:trust-dns\" // (1)!\n      ],\n      \"groupName\": \"trust-dns monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:trust-dns</code>: trust-dns monorepo</li> </ol>"},{"location":"presets-group/#grouptsoamonorepo","title":"<code>group:tsoaMonorepo</code>","text":"<p>Group packages from tsoa monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:tsoa\" // (1)!\n      ],\n      \"groupName\": \"tsoa monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:tsoa</code>: tsoa monorepo</li> </ol>"},{"location":"presets-group/#grouptunitmonorepo","title":"<code>group:tunitMonorepo</code>","text":"<p>Group packages from tunit monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:tunit\" // (1)!\n      ],\n      \"groupName\": \"tunit monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:tunit</code>: tunit monorepo</li> </ol>"},{"location":"presets-group/#groupturbomonorepo","title":"<code>group:turboMonorepo</code>","text":"<p>Group packages from turbo monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:turbo\" // (1)!\n      ],\n      \"groupName\": \"turbo monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:turbo</code>: turbo monorepo</li> </ol>"},{"location":"presets-group/#groupturfmonorepo","title":"<code>group:turfMonorepo</code>","text":"<p>Group packages from turf monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:turf\" // (1)!\n      ],\n      \"groupName\": \"turf monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:turf</code>: turf monorepo</li> </ol>"},{"location":"presets-group/#grouptyped-signalrmonorepo","title":"<code>group:typed-signalrMonorepo</code>","text":"<p>Group packages from typed-signalr monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:typed-signalr\" // (1)!\n      ],\n      \"groupName\": \"typed-signalr monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:typed-signalr</code>: typed-signalr monorepo</li> </ol>"},{"location":"presets-group/#grouptypefacesmonorepo","title":"<code>group:typefacesMonorepo</code>","text":"<p>Group packages from typefaces monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:typefaces\" // (1)!\n      ],\n      \"groupName\": \"typefaces monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:typefaces</code>: typefaces monorepo</li> </ol>"},{"location":"presets-group/#grouptypescript-eslintmonorepo","title":"<code>group:typescript-eslintMonorepo</code>","text":"<p>Group packages from typescript-eslint monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:typescript-eslint\" // (1)!\n      ],\n      \"groupName\": \"typescript-eslint monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:typescript-eslint</code>: typescript-eslint monorepo</li> </ol>"},{"location":"presets-group/#grouptypography-jsmonorepo","title":"<code>group:typography-jsMonorepo</code>","text":"<p>Group packages from typography-js monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:typography-js\" // (1)!\n      ],\n      \"groupName\": \"typography-js monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:typography-js</code>: typography-js monorepo</li> </ol>"},{"location":"presets-group/#groupui5-webcomponentsmonorepo","title":"<code>group:ui5-webcomponentsMonorepo</code>","text":"<p>Group packages from ui5-webcomponents monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:ui5-webcomponents\" // (1)!\n      ],\n      \"groupName\": \"ui5-webcomponents monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:ui5-webcomponents</code>: ui5-webcomponents monorepo</li> </ol>"},{"location":"presets-group/#groupunheadmonorepo","title":"<code>group:unheadMonorepo</code>","text":"<p>Group packages from unhead monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:unhead\" // (1)!\n      ],\n      \"groupName\": \"unhead monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:unhead</code>: unhead monorepo</li> </ol>"},{"location":"presets-group/#groupunocssmonorepo","title":"<code>group:unocssMonorepo</code>","text":"<p>Group packages from unocss monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:unocss\" // (1)!\n      ],\n      \"groupName\": \"unocss monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:unocss</code>: unocss monorepo</li> </ol>"},{"location":"presets-group/#groupuppymonorepo","title":"<code>group:uppyMonorepo</code>","text":"<p>Group packages from uppy monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:uppy\" // (1)!\n      ],\n      \"groupName\": \"uppy monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:uppy</code>: uppy monorepo</li> </ol>"},{"location":"presets-group/#grouputoipamonorepo","title":"<code>group:utoipaMonorepo</code>","text":"<p>Group packages from utoipa monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:utoipa\" // (1)!\n      ],\n      \"groupName\": \"utoipa monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:utoipa</code>: utoipa monorepo</li> </ol>"},{"location":"presets-group/#groupvaadin-hillamonorepo","title":"<code>group:vaadin-hillaMonorepo</code>","text":"<p>Group packages from vaadin-hilla monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:vaadin-hilla\" // (1)!\n      ],\n      \"groupName\": \"vaadin-hilla monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:vaadin-hilla</code>: vaadin-hilla monorepo</li> </ol>"},{"location":"presets-group/#groupvaadinwebcomponentsmonorepo","title":"<code>group:vaadinWebComponentsMonorepo</code>","text":"<p>Group packages from vaadinWebComponents monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:vaadinWebComponents\" // (1)!\n      ],\n      \"groupName\": \"vaadinWebComponents monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:vaadinWebComponents</code>: vaadinWebComponents monorepo</li> </ol>"},{"location":"presets-group/#groupvanilla-extractmonorepo","title":"<code>group:vanilla-extractMonorepo</code>","text":"<p>Group packages from vanilla-extract monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:vanilla-extract\" // (1)!\n      ],\n      \"groupName\": \"vanilla-extract monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:vanilla-extract</code>: vanilla-extract monorepo</li> </ol>"},{"location":"presets-group/#groupvisxmonorepo","title":"<code>group:visxMonorepo</code>","text":"<p>Group packages from visx monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:visx\" // (1)!\n      ],\n      \"groupName\": \"visx monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:visx</code>: visx monorepo</li> </ol>"},{"location":"presets-group/#groupvite-plusmonorepo","title":"<code>group:vite-plusMonorepo</code>","text":"<p>Group packages from vite-plus monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:vite-plus\" // (1)!\n      ],\n      \"groupName\": \"vite-plus monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:vite-plus</code>: vite-plus monorepo</li> </ol>"},{"location":"presets-group/#groupvitestmonorepo","title":"<code>group:vitestMonorepo</code>","text":"<p>Group packages from vitest monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:vitest\" // (1)!\n      ],\n      \"groupName\": \"vitest monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:vitest</code>: vitest monorepo</li> </ol>"},{"location":"presets-group/#groupvstestmonorepo","title":"<code>group:vstestMonorepo</code>","text":"<p>Group packages from vstest monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:vstest\" // (1)!\n      ],\n      \"groupName\": \"vstest monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:vstest</code>: vstest monorepo</li> </ol>"},{"location":"presets-group/#groupvuemonorepo","title":"<code>group:vueMonorepo</code>","text":"<p>Group packages from vue monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:vue\" // (1)!\n      ],\n      \"groupName\": \"vue monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:vue</code>: vue monorepo</li> </ol>"},{"location":"presets-group/#groupvue-climonorepo","title":"<code>group:vue-cliMonorepo</code>","text":"<p>Group packages from vue-cli monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:vue-cli\" // (1)!\n      ],\n      \"groupName\": \"vue-cli monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:vue-cli</code>: vue-cli monorepo</li> </ol>"},{"location":"presets-group/#groupvue-language-toolsmonorepo","title":"<code>group:vue-language-toolsMonorepo</code>","text":"<p>Group packages from vue-language-tools monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:vue-language-tools\" // (1)!\n      ],\n      \"groupName\": \"vue-language-tools monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:vue-language-tools</code>: vue-language-tools monorepo</li> </ol>"},{"location":"presets-group/#groupvuepressmonorepo","title":"<code>group:vuepressMonorepo</code>","text":"<p>Group packages from vuepress monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:vuepress\" // (1)!\n      ],\n      \"groupName\": \"vuepress monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:vuepress</code>: vuepress monorepo</li> </ol>"},{"location":"presets-group/#groupvueusemonorepo","title":"<code>group:vueuseMonorepo</code>","text":"<p>Group packages from vueuse monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:vueuse\" // (1)!\n      ],\n      \"groupName\": \"vueuse monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:vueuse</code>: vueuse monorepo</li> </ol>"},{"location":"presets-group/#groupweaselmonorepo","title":"<code>group:weaselMonorepo</code>","text":"<p>Group packages from weasel monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:weasel\" // (1)!\n      ],\n      \"groupName\": \"weasel monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:weasel</code>: weasel monorepo</li> </ol>"},{"location":"presets-group/#groupweb3-reactmonorepo","title":"<code>group:web3-reactMonorepo</code>","text":"<p>Group packages from web3-react monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:web3-react\" // (1)!\n      ],\n      \"groupName\": \"web3-react monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:web3-react</code>: web3-react monorepo</li> </ol>"},{"location":"presets-group/#groupwebdriveriomonorepo","title":"<code>group:webdriverioMonorepo</code>","text":"<p>Group packages from webdriverio monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:webdriverio\" // (1)!\n      ],\n      \"groupName\": \"webdriverio monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:webdriverio</code>: webdriverio monorepo</li> </ol>"},{"location":"presets-group/#groupwolverinemonorepo","title":"<code>group:wolverineMonorepo</code>","text":"<p>Group packages from wolverine monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:wolverine\" // (1)!\n      ],\n      \"groupName\": \"wolverine monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:wolverine</code>: wolverine monorepo</li> </ol>"},{"location":"presets-group/#groupworkboxmonorepo","title":"<code>group:workboxMonorepo</code>","text":"<p>Group packages from workbox monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:workbox\" // (1)!\n      ],\n      \"groupName\": \"workbox monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:workbox</code>: workbox monorepo</li> </ol>"},{"location":"presets-group/#groupwyw-in-jsmonorepo","title":"<code>group:wyw-in-jsMonorepo</code>","text":"<p>Group packages from wyw-in-js monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:wyw-in-js\" // (1)!\n      ],\n      \"groupName\": \"wyw-in-js monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:wyw-in-js</code>: wyw-in-js monorepo</li> </ol>"},{"location":"presets-group/#groupxstatemonorepo","title":"<code>group:xstateMonorepo</code>","text":"<p>Group packages from xstate monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:xstate\" // (1)!\n      ],\n      \"groupName\": \"xstate monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:xstate</code>: xstate monorepo</li> </ol>"},{"location":"presets-group/#groupxtermmonorepo","title":"<code>group:xtermMonorepo</code>","text":"<p>Group packages from xterm monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:xterm\" // (1)!\n      ],\n      \"groupName\": \"xterm monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:xterm</code>: xterm monorepo</li> </ol>"},{"location":"presets-group/#groupxunit-dotnetmonorepo","title":"<code>group:xunit-dotnetMonorepo</code>","text":"<p>Group packages from xunit-dotnet monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:xunit-dotnet\" // (1)!\n      ],\n      \"groupName\": \"xunit-dotnet monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:xunit-dotnet</code>: xunit-dotnet monorepo</li> </ol>"},{"location":"presets-group/#groupyamldotnetmonorepo","title":"<code>group:yamldotnetMonorepo</code>","text":"<p>Group packages from yamldotnet monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:yamldotnet\" // (1)!\n      ],\n      \"groupName\": \"yamldotnet monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:yamldotnet</code>: yamldotnet monorepo</li> </ol>"},{"location":"presets-group/#groupyarnmonorepo","title":"<code>group:yarnMonorepo</code>","text":"<p>Group packages from yarn monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:yarn\" // (1)!\n      ],\n      \"groupName\": \"yarn monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:yarn</code>: yarn monorepo</li> </ol>"},{"location":"presets-group/#groupzag-jsmonorepo","title":"<code>group:zag-jsMonorepo</code>","text":"<p>Group packages from zag-js monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:zag-js\" // (1)!\n      ],\n      \"groupName\": \"zag-js monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:zag-js</code>: zag-js monorepo</li> </ol>"},{"location":"presets-group/#groupzxcvbn-tsmonorepo","title":"<code>group:zxcvbn-tsMonorepo</code>","text":"<p>Group packages from zxcvbn-ts monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:zxcvbn-ts\" // (1)!\n      ],\n      \"groupName\": \"zxcvbn-ts monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:zxcvbn-ts</code>: zxcvbn-ts monorepo</li> </ol>"},{"location":"presets-group/#groupzxing-netmonorepo","title":"<code>group:zxing-netMonorepo</code>","text":"<p>Group packages from zxing-net monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:zxing-net\" // (1)!\n      ],\n      \"groupName\": \"zxing-net monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:zxing-net</code>: zxing-net monorepo</li> </ol>"},{"location":"presets-group/#grouphapijsmonorepo","title":"<code>group:hapijsMonorepo</code>","text":"<p>Group packages from hapijs monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:hapijs\" // (1)!\n      ],\n      \"groupName\": \"hapijs monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:hapijs</code>: hapijs monorepo</li> </ol>"},{"location":"presets-group/#grouplodashmonorepo","title":"<code>group:lodashMonorepo</code>","text":"<p>Group packages from lodash monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:lodash\" // (1)!\n      ],\n      \"groupName\": \"lodash monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:lodash</code>: lodash monorepo</li> </ol>"},{"location":"presets-group/#groupngrxmonorepo","title":"<code>group:ngrxMonorepo</code>","text":"<p>Group packages from ngrx monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:ngrx\" // (1)!\n      ],\n      \"groupName\": \"ngrx monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:ngrx</code>: ngrx monorepo</li> </ol>"},{"location":"presets-group/#groupnxmonorepo","title":"<code>group:nxMonorepo</code>","text":"<p>Group packages from nx monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:nx\" // (1)!\n      ],\n      \"groupName\": \"nx monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:nx</code>: nx monorepo</li> </ol>"},{"location":"presets-group/#groupoctokitmonorepo","title":"<code>group:octokitMonorepo</code>","text":"<p>Group packages from octokit monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:octokit\" // (1)!\n      ],\n      \"groupName\": \"octokit monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:octokit</code>: octokit monorepo</li> </ol>"},{"location":"presets-group/#groupphp-enqueuemonorepo","title":"<code>group:php-enqueueMonorepo</code>","text":"<p>Group packages from php-enqueue monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:php-enqueue\" // (1)!\n      ],\n      \"groupName\": \"php-enqueue monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:php-enqueue</code>: php-enqueue monorepo</li> </ol>"},{"location":"presets-group/#groupsemantic-releasemonorepo","title":"<code>group:semantic-releaseMonorepo</code>","text":"<p>Group packages from semantic-release monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:semantic-release\" // (1)!\n      ],\n      \"groupName\": \"semantic-release monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:semantic-release</code>: semantic-release monorepo</li> </ol>"},{"location":"presets-group/#groupswcmonorepo","title":"<code>group:swcMonorepo</code>","text":"<p>Group packages from swc monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:swc\" // (1)!\n      ],\n      \"groupName\": \"swc monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:swc</code>: swc monorepo</li> </ol>"},{"location":"presets-group/#grouptwigmonorepo","title":"<code>group:twigMonorepo</code>","text":"<p>Group packages from twig monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:twig\" // (1)!\n      ],\n      \"groupName\": \"twig monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:twig</code>: twig monorepo</li> </ol>"},{"location":"presets-group/#groupangularmaterialmonorepo","title":"<code>group:angularmaterialMonorepo</code>","text":"<p>Group packages from angularmaterial monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:angularmaterial\" // (1)!\n      ],\n      \"groupName\": \"angularmaterial monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:angularmaterial</code>: angularmaterial monorepo</li> </ol>"},{"location":"presets-group/#groupapache-camelmonorepo","title":"<code>group:apache-camelMonorepo</code>","text":"<p>Group packages from apache-camel monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:apache-camel\" // (1)!\n      ],\n      \"groupName\": \"apache-camel monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:apache-camel</code>: apache-camel monorepo</li> </ol>"},{"location":"presets-group/#groupapache-poimonorepo","title":"<code>group:apache-poiMonorepo</code>","text":"<p>Group packages from apache-poi monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:apache-poi\" // (1)!\n      ],\n      \"groupName\": \"apache-poi monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:apache-poi</code>: apache-poi monorepo</li> </ol>"},{"location":"presets-group/#groupaws-java-sdkmonorepo","title":"<code>group:aws-java-sdkMonorepo</code>","text":"<p>Group packages from aws-java-sdk monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:aws-java-sdk\" // (1)!\n      ],\n      \"groupName\": \"aws-java-sdk monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:aws-java-sdk</code>: aws-java-sdk monorepo</li> </ol>"},{"location":"presets-group/#groupaws-java-sdk-v2monorepo","title":"<code>group:aws-java-sdk-v2Monorepo</code>","text":"<p>Group packages from aws-java-sdk-v2 monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:aws-java-sdk-v2\" // (1)!\n      ],\n      \"groupName\": \"aws-java-sdk-v2 monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:aws-java-sdk-v2</code>: aws-java-sdk-v2 monorepo</li> </ol>"},{"location":"presets-group/#groupaxis2monorepo","title":"<code>group:axis2Monorepo</code>","text":"<p>Group packages from axis2 monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:axis2\" // (1)!\n      ],\n      \"groupName\": \"axis2 monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:axis2</code>: axis2 monorepo</li> </ol>"},{"location":"presets-group/#groupbabel6monorepo","title":"<code>group:babel6Monorepo</code>","text":"<p>Group packages from babel6 monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:babel6\" // (1)!\n      ],\n      \"groupName\": \"babel6 monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:babel6</code>: babel6 monorepo</li> </ol>"},{"location":"presets-group/#groupembroidermonorepo","title":"<code>group:embroiderMonorepo</code>","text":"<p>Group packages from embroider monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:embroider\" // (1)!\n      ],\n      \"groupName\": \"embroider monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:embroider</code>: embroider monorepo</li> </ol>"},{"location":"presets-group/#groupforgemonorepo","title":"<code>group:forgeMonorepo</code>","text":"<p>Group packages from forge monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:forge\" // (1)!\n      ],\n      \"groupName\": \"forge monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:forge</code>: forge monorepo</li> </ol>"},{"location":"presets-group/#groupfullcalendarmonorepo","title":"<code>group:fullcalendarMonorepo</code>","text":"<p>Group packages from fullcalendar monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:fullcalendar\" // (1)!\n      ],\n      \"groupName\": \"fullcalendar monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:fullcalendar</code>: fullcalendar monorepo</li> </ol>"},{"location":"presets-group/#grouporacle-databasemonorepo","title":"<code>group:oracle-databaseMonorepo</code>","text":"<p>Group packages from oracle-database monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:oracle-database\" // (1)!\n      ],\n      \"groupName\": \"oracle-database monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:oracle-database</code>: oracle-database monorepo</li> </ol>"},{"location":"presets-group/#groupoxlintmonorepo","title":"<code>group:oxlintMonorepo</code>","text":"<p>Group packages from oxlint monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:oxlint\" // (1)!\n      ],\n      \"groupName\": \"oxlint monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:oxlint</code>: oxlint monorepo</li> </ol>"},{"location":"presets-group/#groupprometheus-simpleclientmonorepo","title":"<code>group:prometheus-simpleclientMonorepo</code>","text":"<p>Group packages from prometheus-simpleclient monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:prometheus-simpleclient\" // (1)!\n      ],\n      \"groupName\": \"prometheus-simpleclient monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:prometheus-simpleclient</code>: prometheus-simpleclient monorepo</li> </ol>"},{"location":"presets-group/#grouprusshmonorepo","title":"<code>group:russhMonorepo</code>","text":"<p>Group packages from russh monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:russh\" // (1)!\n      ],\n      \"groupName\": \"russh monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:russh</code>: russh monorepo</li> </ol>"},{"location":"presets-group/#groupsolidmonorepo","title":"<code>group:solidMonorepo</code>","text":"<p>Group packages from solid monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:solid\" // (1)!\n      ],\n      \"groupName\": \"solid monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:solid</code>: solid monorepo</li> </ol>"},{"location":"presets-group/#groupspfxmonorepo","title":"<code>group:spfxMonorepo</code>","text":"<p>Group packages from spfx monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:spfx\" // (1)!\n      ],\n      \"groupName\": \"spfx monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:spfx</code>: spfx monorepo</li> </ol>"},{"location":"presets-group/#groupspockmonorepo","title":"<code>group:spockMonorepo</code>","text":"<p>Group packages from spock monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:spock\" // (1)!\n      ],\n      \"groupName\": \"spock monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:spock</code>: spock monorepo</li> </ol>"},{"location":"presets-group/#groupsyncfusion-dotnetmonorepo","title":"<code>group:syncfusion-dotnetMonorepo</code>","text":"<p>Group packages from syncfusion-dotnet monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:syncfusion-dotnet\" // (1)!\n      ],\n      \"groupName\": \"syncfusion-dotnet monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:syncfusion-dotnet</code>: syncfusion-dotnet monorepo</li> </ol>"},{"location":"presets-group/#grouptesting-librarymonorepo","title":"<code>group:testing-libraryMonorepo</code>","text":"<p>Group packages from testing-library monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:testing-library\" // (1)!\n      ],\n      \"groupName\": \"testing-library monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:testing-library</code>: testing-library monorepo</li> </ol>"},{"location":"presets-group/#groupwordpressmonorepo","title":"<code>group:wordpressMonorepo</code>","text":"<p>Group packages from wordpress monorepo together.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\n        \"monorepo:wordpress\" // (1)!\n      ],\n      \"groupName\": \"wordpress monorepo\",\n      \"matchUpdateTypes\": [\n        \"digest\",\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:wordpress</code>: wordpress monorepo</li> </ol>"},{"location":"presets-group/#groupmonorepos","title":"<code>group:monorepos</code>","text":"<p>Group known monorepo packages together.</p> <pre><code>{\n  \"extends\": [\n    \"group:accountsMonorepo\", // (1)!\n    \"group:acotMonorepo\", // (2)!\n    \"group:ag-gridMonorepo\", // (3)!\n    \"group:algolia-instantsearchMonorepo\", // (4)!\n    \"group:algolia-react-instantsearchMonorepo\", // (5)!\n    \"group:algoliasearch-autocompleteMonorepo\", // (6)!\n    \"group:algoliasearch-client-javascriptMonorepo\", // (7)!\n    \"group:analogMonorepo\", // (8)!\n    \"group:angularMonorepo\", // (9)!\n    \"group:angular-cliMonorepo\", // (10)!\n    \"group:angular-eslintMonorepo\", // (11)!\n    \"group:angularfireMonorepo\", // (12)!\n    \"group:angularjsMonorepo\", // (13)!\n    \"group:apache-luceneMonorepo\", // (14)!\n    \"group:apollo-serverMonorepo\", // (15)!\n    \"group:apolloclientMonorepo\", // (16)!\n    \"group:appiumMonorepo\", // (17)!\n    \"group:applicationinsights-dotnetMonorepo\", // (18)!\n    \"group:arcus.background-jobsMonorepo\", // (19)!\n    \"group:arcus.event-gridMonorepo\", // (20)!\n    \"group:arcus.messagingMonorepo\", // (21)!\n    \"group:arcus.observabilityMonorepo\", // (22)!\n    \"group:arcus.securityMonorepo\", // (23)!\n    \"group:arcus.webapiMonorepo\", // (24)!\n    \"group:arrow-ktMonorepo\", // (25)!\n    \"group:arrow-rsMonorepo\", // (26)!\n    \"group:aspireMonorepo\", // (27)!\n    \"group:aspnet aspnetwebstackMonorepo\", // (28)!\n    \"group:aspnet extensionsMonorepo\", // (29)!\n    \"group:aspnet-api-versioningMonorepo\", // (30)!\n    \"group:aspnet-health-checksMonorepo\", // (31)!\n    \"group:aspnet-security-oauth-providersMonorepo\", // (32)!\n    \"group:astroMonorepo\", // (33)!\n    \"group:autoMonorepo\", // (34)!\n    \"group:autofixtureMonorepo\", // (35)!\n    \"group:automapper-dotnetMonorepo\", // (36)!\n    \"group:avaloniaMonorepo\", // (37)!\n    \"group:aws-cdkMonorepo\", // (38)!\n    \"group:aws-lambda-dotnetMonorepo\", // (39)!\n    \"group:aws-lambda-powertools-typescriptMonorepo\", // (40)!\n    \"group:aws-sdk-client-mockMonorepo\", // (41)!\n    \"group:aws-sdk-goMonorepo\", // (42)!\n    \"group:aws-sdk-go-v2Monorepo\", // (43)!\n    \"group:aws-sdk-js-v3Monorepo\", // (44)!\n    \"group:aws-sdk-netMonorepo\", // (45)!\n    \"group:aws-sdk-rustMonorepo\", // (46)!\n    \"group:awsappsyncMonorepo\", // (47)!\n    \"group:axumMonorepo\", // (48)!\n    \"group:azure azure-libraries-for-netMonorepo\", // (49)!\n    \"group:azure azure-sdk-for-netMonorepo\", // (50)!\n    \"group:azure azure-storage-netMonorepo\", // (51)!\n    \"group:azure-ad-microsoft-authentication-library-for-androidMonorepo\", // (52)!\n    \"group:azure-ad-microsoft-authentication-library-for-dotnetMonorepo\", // (53)!\n    \"group:azure-ad-microsoft-authentication-library-for-goMonorepo\", // (54)!\n    \"group:azure-ad-microsoft-authentication-library-for-javaMonorepo\", // (55)!\n    \"group:azure-ad-microsoft-authentication-library-for-jsMonorepo\", // (56)!\n    \"group:azure-ad-microsoft-authentication-library-for-objcMonorepo\", // (57)!\n    \"group:azure-ad-microsoft-authentication-library-for-pythonMonorepo\", // (58)!\n    \"group:azure-functions-dotnet-workerMonorepo\", // (59)!\n    \"group:azure-sdk-for-androidMonorepo\", // (60)!\n    \"group:azure-sdk-for-cMonorepo\", // (61)!\n    \"group:azure-sdk-for-cppMonorepo\", // (62)!\n    \"group:azure-sdk-for-goMonorepo\", // (63)!\n    \"group:azure-sdk-for-iosMonorepo\", // (64)!\n    \"group:azure-sdk-for-javaMonorepo\", // (65)!\n    \"group:azure-sdk-for-jsMonorepo\", // (66)!\n    \"group:azure-sdk-for-pythonMonorepo\", // (67)!\n    \"group:azure-sdk-for-rustMonorepo\", // (68)!\n    \"group:babelMonorepo\", // (69)!\n    \"group:backstageMonorepo\", // (70)!\n    \"group:basetMonorepo\", // (71)!\n    \"group:better-authMonorepo\", // (72)!\n    \"group:braveMonorepo\", // (73)!\n    \"group:bugsnag-jsMonorepo\", // (74)!\n    \"group:bull-boardMonorepo\", // (75)!\n    \"group:cakeMonorepo\", // (76)!\n    \"group:cake-issuesMonorepo\", // (77)!\n    \"group:capacitorMonorepo\", // (78)!\n    \"group:cedarMonorepo\", // (79)!\n    \"group:chakra-uiMonorepo\", // (80)!\n    \"group:chromelyMonorepo\", // (81)!\n    \"group:citation-jsMonorepo\", // (82)!\n    \"group:ckeditorMonorepo\", // (83)!\n    \"group:clarityMonorepo\", // (84)!\n    \"group:clearscriptMonorepo\", // (85)!\n    \"group:commitlintMonorepo\", // (86)!\n    \"group:confectMonorepo\", // (87)!\n    \"group:conformMonorepo\", // (88)!\n    \"group:contentful-rich-textMonorepo\", // (89)!\n    \"group:convexMonorepo\", // (90)!\n    \"group:cspellMonorepo\", // (91)!\n    \"group:datadog-browser-sdkMonorepo\", // (92)!\n    \"group:datafusionMonorepo\", // (93)!\n    \"group:datatables-netMonorepo\", // (94)!\n    \"group:datatables-net-autofillMonorepo\", // (95)!\n    \"group:datatables-net-buttonsMonorepo\", // (96)!\n    \"group:datatables-net-colreorderMonorepo\", // (97)!\n    \"group:datatables-net-fixedcolumnsMonorepo\", // (98)!\n    \"group:datatables-net-fixedheaderMonorepo\", // (99)!\n    \"group:datatables-net-keytableMonorepo\", // (100)!\n    \"group:datatables-net-responsiveMonorepo\", // (101)!\n    \"group:datatables-net-rowgroupMonorepo\", // (102)!\n    \"group:datatables-net-rowreorderMonorepo\", // (103)!\n    \"group:datatables-net-scrollerMonorepo\", // (104)!\n    \"group:datatables-net-searchbuilderMonorepo\", // (105)!\n    \"group:datatables-net-searchpanesMonorepo\", // (106)!\n    \"group:datatables-net-selectMonorepo\", // (107)!\n    \"group:datatables-net-staterestoreMonorepo\", // (108)!\n    \"group:date-ioMonorepo\", // (109)!\n    \"group:deck-glMonorepo\", // (110)!\n    \"group:denoMonorepo\", // (111)!\n    \"group:devextreme-reactiveMonorepo\", // (112)!\n    \"group:dnd-kitMonorepo\", // (113)!\n    \"group:docusaurusMonorepo\", // (114)!\n    \"group:dot-swashbuckleMonorepo\", // (115)!\n    \"group:dotnetMonorepo\", // (116)!\n    \"group:dotnet-azure-ad-identitymodel-extensionsMonorepo\", // (117)!\n    \"group:dotnet-azure-ad-microsoft-identity-webMonorepo\", // (118)!\n    \"group:dotnet-wcfMonorepo\", // (119)!\n    \"group:dotnetcore-capMonorepo\", // (120)!\n    \"group:dropwizardMonorepo\", // (121)!\n    \"group:duende-identityserverMonorepo\", // (122)!\n    \"group:effectMonorepo\", // (123)!\n    \"group:elastic-apm-agent-rum-jsMonorepo\", // (124)!\n    \"group:elastic-ecs-dotnetMonorepo\", // (125)!\n    \"group:electron-forgeMonorepo\", // (126)!\n    \"group:ember-decoratorsMonorepo\", // (127)!\n    \"group:embla-carouselMonorepo\", // (128)!\n    \"group:emojibaseMonorepo\", // (129)!\n    \"group:emotionMonorepo\", // (130)!\n    \"group:enumeratumMonorepo\", // (131)!\n    \"group:envelopMonorepo\", // (132)!\n    \"group:error-proneMonorepo\", // (133)!\n    \"group:error-prone-supportMonorepo\", // (134)!\n    \"group:eslintMonorepo\", // (135)!\n    \"group:eslint-config-globexMonorepo\", // (136)!\n    \"group:eslint-stylisticMonorepo\", // (137)!\n    \"group:expoMonorepo\", // (138)!\n    \"group:fabric-chaincode-nodeMonorepo\", // (139)!\n    \"group:fabric8-kubernetes-clientMonorepo\", // (140)!\n    \"group:faro-web-sdkMonorepo\", // (141)!\n    \"group:fastendpointsMonorepo\", // (142)!\n    \"group:feathersMonorepo\", // (143)!\n    \"group:featuremanagement-dotnetMonorepo\", // (144)!\n    \"group:feignMonorepo\", // (145)!\n    \"group:felaMonorepo\", // (146)!\n    \"group:fimbullinterMonorepo\", // (147)!\n    \"group:flipperMonorepo\", // (148)!\n    \"group:flopflipMonorepo\", // (149)!\n    \"group:flueMonorepo\", // (150)!\n    \"group:fontsourceMonorepo\", // (151)!\n    \"group:formatjsMonorepo\", // (152)!\n    \"group:framework7Monorepo\", // (153)!\n    \"group:funogramMonorepo\", // (154)!\n    \"group:fusioncacheMonorepo\", // (155)!\n    \"group:gatsbyMonorepo\", // (156)!\n    \"group:gitbeakerMonorepo\", // (157)!\n    \"group:github-workflows-ktMonorepo\", // (158)!\n    \"group:go-cloudMonorepo\", // (159)!\n    \"group:gomockMonorepo\", // (160)!\n    \"group:google-api-dotnet-clientMonorepo\", // (161)!\n    \"group:google-cloud-rustMonorepo\", // (162)!\n    \"group:grafanaMonorepo\", // (163)!\n    \"group:graphiqlMonorepo\", // (164)!\n    \"group:graphql-hive-gatewayMonorepo\", // (165)!\n    \"group:graphql-meshMonorepo\", // (166)!\n    \"group:graphql-modulesMonorepo\", // (167)!\n    \"group:graphql-platformMonorepo\", // (168)!\n    \"group:graphql-toolsMonorepo\", // (169)!\n    \"group:graphql-yogaMonorepo\", // (170)!\n    \"group:graphqlcodegeneratorMonorepo\", // (171)!\n    \"group:greenmailMonorepo\", // (172)!\n    \"group:groovyMonorepo\", // (173)!\n    \"group:grpc-dotnetMonorepo\", // (174)!\n    \"group:grpc-javaMonorepo\", // (175)!\n    \"group:gstreamer-rustMonorepo\", // (176)!\n    \"group:guavaMonorepo\", // (177)!\n    \"group:hangfireMonorepo\", // (178)!\n    \"group:happy-domMonorepo\", // (179)!\n    \"group:hibernate-modelsMonorepo\", // (180)!\n    \"group:hibernate-ormMonorepo\", // (181)!\n    \"group:hibernate-searchMonorepo\", // (182)!\n    \"group:hibernate-toolsMonorepo\", // (183)!\n    \"group:hickory-dnsMonorepo\", // (184)!\n    \"group:hocuspocusMonorepo\", // (185)!\n    \"group:html-eslintMonorepo\", // (186)!\n    \"group:humanizerMonorepo\", // (187)!\n    \"group:immichMonorepo\", // (188)!\n    \"group:infrastructure-uiMonorepo\", // (189)!\n    \"group:ionic-nativeMonorepo\", // (190)!\n    \"group:istanbuljsMonorepo\", // (191)!\n    \"group:istioMonorepo\", // (192)!\n    \"group:jacksonMonorepo\", // (193)!\n    \"group:jasmineMonorepo\", // (194)!\n    \"group:javafxMonorepo\", // (195)!\n    \"group:javahamcrestMonorepo\", // (196)!\n    \"group:javascriptengineswitcherMonorepo\", // (197)!\n    \"group:jaxb-riMonorepo\", // (198)!\n    \"group:jerseyMonorepo\", // (199)!\n    \"group:jestMonorepo\", // (200)!\n    \"group:jettyMonorepo\", // (201)!\n    \"group:jnaMonorepo\", // (202)!\n    \"group:json-smart-v2Monorepo\", // (203)!\n    \"group:jsonformsMonorepo\", // (204)!\n    \"group:jsplumbMonorepo\", // (205)!\n    \"group:juniorMonorepo\", // (206)!\n    \"group:junit-frameworkMonorepo\", // (207)!\n    \"group:kernelmemoryMonorepo\", // (208)!\n    \"group:kiotaMonorepo\", // (209)!\n    \"group:kotlinMonorepo\", // (210)!\n    \"group:kotlinx-coroutinesMonorepo\", // (211)!\n    \"group:krokiMonorepo\", // (212)!\n    \"group:kspMonorepo\", // (213)!\n    \"group:ktorMonorepo\", // (214)!\n    \"group:kubbMonorepo\", // (215)!\n    \"group:kubernetesMonorepo\", // (216)!\n    \"group:lamarMonorepo\", // (217)!\n    \"group:langchain4jMonorepo\", // (218)!\n    \"group:lernaMonorepo\", // (219)!\n    \"group:lerna-liteMonorepo\", // (220)!\n    \"group:lexicalMonorepo\", // (221)!\n    \"group:linguijsMonorepo\", // (222)!\n    \"group:linkifyjsMonorepo\", // (223)!\n    \"group:log4j2Monorepo\", // (224)!\n    \"group:logbackMonorepo\", // (225)!\n    \"group:logtapeMonorepo\", // (226)!\n    \"group:loopbackMonorepo\", // (227)!\n    \"group:lrnwebcomponentsMonorepo\", // (228)!\n    \"group:lucideMonorepo\", // (229)!\n    \"group:mailingMonorepo\", // (230)!\n    \"group:mantineMonorepo\", // (231)!\n    \"group:mapstructMonorepo\", // (232)!\n    \"group:martenMonorepo\", // (233)!\n    \"group:masstransitMonorepo\", // (234)!\n    \"group:material-components-webMonorepo\", // (235)!\n    \"group:material-uiMonorepo\", // (236)!\n    \"group:mdc-reactMonorepo\", // (237)!\n    \"group:mdxMonorepo\", // (238)!\n    \"group:middy-jsMonorepo\", // (239)!\n    \"group:mikro-ormMonorepo\", // (240)!\n    \"group:ml-dotnetMonorepo\", // (241)!\n    \"group:mockitoMonorepo\", // (242)!\n    \"group:mongo-csharp-driverMonorepo\", // (243)!\n    \"group:mongo-java-driverMonorepo\", // (244)!\n    \"group:mstestMonorepo\", // (245)!\n    \"group:mutation-testing-elementsMonorepo\", // (246)!\n    \"group:nestMonorepo\", // (247)!\n    \"group:nest-graphqlMonorepo\", // (248)!\n    \"group:nettyMonorepo\", // (249)!\n    \"group:neutrinoMonorepo\", // (250)!\n    \"group:nexpectMonorepo\", // (251)!\n    \"group:nextjsMonorepo\", // (252)!\n    \"group:nextraMonorepo\", // (253)!\n    \"group:ngx-cookie-serviceMonorepo\", // (254)!\n    \"group:ngx-formlyMonorepo\", // (255)!\n    \"group:ngxs-storeMonorepo\", // (256)!\n    \"group:nivoMonorepo\", // (257)!\n    \"group:njson-schemaMonorepo\", // (258)!\n    \"group:nswagMonorepo\", // (259)!\n    \"group:nugetMonorepo\", // (260)!\n    \"group:nuke-buildMonorepo\", // (261)!\n    \"group:nuxtjsMonorepo\", // (262)!\n    \"group:okhttpMonorepo\", // (263)!\n    \"group:openapi-dotnetMonorepo\", // (264)!\n    \"group:opencostMonorepo\", // (265)!\n    \"group:openiddictMonorepo\", // (266)!\n    \"group:opentelemetry-dotnetMonorepo\", // (267)!\n    \"group:opentelemetry-dotnet-contribMonorepo\", // (268)!\n    \"group:opentelemetry-erlangMonorepo\", // (269)!\n    \"group:opentelemetry-erlang-contribMonorepo\", // (270)!\n    \"group:opentelemetry-goMonorepo\", // (271)!\n    \"group:opentelemetry-go-contribMonorepo\", // (272)!\n    \"group:opentelemetry-javaMonorepo\", // (273)!\n    \"group:opentelemetry-java-contribMonorepo\", // (274)!\n    \"group:opentelemetry-jsMonorepo\", // (275)!\n    \"group:opentelemetry-js-contribMonorepo\", // (276)!\n    \"group:opentelemetry-phpMonorepo\", // (277)!\n    \"group:opentelemetry-php-contribMonorepo\", // (278)!\n    \"group:opentelemetry-pythonMonorepo\", // (279)!\n    \"group:opentelemetry-python-contribMonorepo\", // (280)!\n    \"group:opentelemetry-rustMonorepo\", // (281)!\n    \"group:opentelemetry-rust-contribMonorepo\", // (282)!\n    \"group:orleansMonorepo\", // (283)!\n    \"group:orpcMonorepo\", // (284)!\n    \"group:panda-cssMonorepo\", // (285)!\n    \"group:parcelMonorepo\", // (286)!\n    \"group:payloadcmsMonorepo\", // (287)!\n    \"group:pdfmeMonorepo\", // (288)!\n    \"group:percy-cliMonorepo\", // (289)!\n    \"group:picassojsMonorepo\", // (290)!\n    \"group:pixijsMonorepo\", // (291)!\n    \"group:playwrightMonorepo\", // (292)!\n    \"group:playwright-dotnetMonorepo\", // (293)!\n    \"group:pnpcoreMonorepo\", // (294)!\n    \"group:pnpjsMonorepo\", // (295)!\n    \"group:pollyMonorepo\", // (296)!\n    \"group:pollyjsMonorepo\", // (297)!\n    \"group:pothosMonorepo\", // (298)!\n    \"group:pouchdbMonorepo\", // (299)!\n    \"group:powermockMonorepo\", // (300)!\n    \"group:prismaMonorepo\", // (301)!\n    \"group:prometheus-netMonorepo\", // (302)!\n    \"group:promsterMonorepo\", // (303)!\n    \"group:protobufMonorepo\", // (304)!\n    \"group:quartznetMonorepo\", // (305)!\n    \"group:radix-ui-primitivesMonorepo\", // (306)!\n    \"group:reach-uiMonorepo\", // (307)!\n    \"group:reactMonorepo\", // (308)!\n    \"group:react-adminMonorepo\", // (309)!\n    \"group:react-apolloMonorepo\", // (310)!\n    \"group:react-dndMonorepo\", // (311)!\n    \"group:react-emailMonorepo\", // (312)!\n    \"group:react-navigationMonorepo\", // (313)!\n    \"group:react-pageMonorepo\", // (314)!\n    \"group:react-railsMonorepo\", // (315)!\n    \"group:react-routerMonorepo\", // (316)!\n    \"group:react-spectrumMonorepo\", // (317)!\n    \"group:react-springMonorepo\", // (318)!\n    \"group:reactivestack-cookiesMonorepo\", // (319)!\n    \"group:reakitMonorepo\", // (320)!\n    \"group:redwoodMonorepo\", // (321)!\n    \"group:refitMonorepo\", // (322)!\n    \"group:reg-suitMonorepo\", // (323)!\n    \"group:remarkMonorepo\", // (324)!\n    \"group:remixMonorepo\", // (325)!\n    \"group:retrofitMonorepo\", // (326)!\n    \"group:riverMonorepo\", // (327)!\n    \"group:rjsfMonorepo\", // (328)!\n    \"group:router5Monorepo\", // (329)!\n    \"group:rspackMonorepo\", // (330)!\n    \"group:ruby-on-railsMonorepo\", // (331)!\n    \"group:rust-analyzerMonorepo\", // (332)!\n    \"group:rust-futuresMonorepo\", // (333)!\n    \"group:rust-wasm-bindgenMonorepo\", // (334)!\n    \"group:sanityMonorepo\", // (335)!\n    \"group:scaffdogMonorepo\", // (336)!\n    \"group:scalarMonorepo\", // (337)!\n    \"group:sea-ormMonorepo\", // (338)!\n    \"group:secretlintMonorepo\", // (339)!\n    \"group:sendgrid-nodejsMonorepo\", // (340)!\n    \"group:sentry-dotnetMonorepo\", // (341)!\n    \"group:sentry-javascriptMonorepo\", // (342)!\n    \"group:sentry-rubyMonorepo\", // (343)!\n    \"group:sentry-rustMonorepo\", // (344)!\n    \"group:serdeMonorepo\", // (345)!\n    \"group:serenity-jsMonorepo\", // (346)!\n    \"group:serilog-uiMonorepo\", // (347)!\n    \"group:servicestackMonorepo\", // (348)!\n    \"group:serwistMonorepo\", // (349)!\n    \"group:shedlockMonorepo\", // (350)!\n    \"group:shikiMonorepo\", // (351)!\n    \"group:shopify-app-bridgeMonorepo\", // (352)!\n    \"group:sitecore-jssMonorepo\", // (353)!\n    \"group:size-limitMonorepo\", // (354)!\n    \"group:skiasharpMonorepo\", // (355)!\n    \"group:slack-netMonorepo\", // (356)!\n    \"group:slf4jMonorepo\", // (357)!\n    \"group:slim-message-busMonorepo\", // (358)!\n    \"group:spectre-consoleMonorepo\", // (359)!\n    \"group:spectre-console-cliMonorepo\", // (360)!\n    \"group:springfoxMonorepo\", // (361)!\n    \"group:stack-exchange-redis-extensionsMonorepo\", // (362)!\n    \"group:statsig-js-clientMonorepo\", // (363)!\n    \"group:steeltoeMonorepo\", // (364)!\n    \"group:storybookMonorepo\", // (365)!\n    \"group:storybook-react-nativeMonorepo\", // (366)!\n    \"group:strapiMonorepo\", // (367)!\n    \"group:strumMonorepo\", // (368)!\n    \"group:stryker-jsMonorepo\", // (369)!\n    \"group:stylex-swcMonorepo\", // (370)!\n    \"group:surveyjsMonorepo\", // (371)!\n    \"group:swashbuckle-aspnetcoreMonorepo\", // (372)!\n    \"group:system.io.abstractionsMonorepo\", // (373)!\n    \"group:taiga-uiMonorepo\", // (374)!\n    \"group:tailwindcssMonorepo\", // (375)!\n    \"group:tamaguiMonorepo\", // (376)!\n    \"group:tanstack-formMonorepo\", // (377)!\n    \"group:tanstack-queryMonorepo\", // (378)!\n    \"group:tanstack-routerMonorepo\", // (379)!\n    \"group:tanstack-tableMonorepo\", // (380)!\n    \"group:tanstack-virtualMonorepo\", // (381)!\n    \"group:tauriMonorepo\", // (382)!\n    \"group:telus-tdsMonorepo\", // (383)!\n    \"group:telus-tds-coreMonorepo\", // (384)!\n    \"group:temporalio-tsMonorepo\", // (385)!\n    \"group:terraformMonorepo\", // (386)!\n    \"group:testcontainers-dotnetMonorepo\", // (387)!\n    \"group:testcontainers-goMonorepo\", // (388)!\n    \"group:testcontainers-javaMonorepo\", // (389)!\n    \"group:testcontainers-nodeMonorepo\", // (390)!\n    \"group:theme-uiMonorepo\", // (391)!\n    \"group:tikaMonorepo\", // (392)!\n    \"group:timvirMonorepo\", // (393)!\n    \"group:tiptapMonorepo\", // (394)!\n    \"group:tokio-prostMonorepo\", // (395)!\n    \"group:tokio-tracingMonorepo\", // (396)!\n    \"group:tomcatMonorepo\", // (397)!\n    \"group:tonicMonorepo\", // (398)!\n    \"group:treatMonorepo\", // (399)!\n    \"group:trpcMonorepo\", // (400)!\n    \"group:trust-dnsMonorepo\", // (401)!\n    \"group:tsoaMonorepo\", // (402)!\n    \"group:tunitMonorepo\", // (403)!\n    \"group:turboMonorepo\", // (404)!\n    \"group:turfMonorepo\", // (405)!\n    \"group:typed-signalrMonorepo\", // (406)!\n    \"group:typefacesMonorepo\", // (407)!\n    \"group:typescript-eslintMonorepo\", // (408)!\n    \"group:typography-jsMonorepo\", // (409)!\n    \"group:ui5-webcomponentsMonorepo\", // (410)!\n    \"group:unheadMonorepo\", // (411)!\n    \"group:unocssMonorepo\", // (412)!\n    \"group:uppyMonorepo\", // (413)!\n    \"group:utoipaMonorepo\", // (414)!\n    \"group:vaadin-hillaMonorepo\", // (415)!\n    \"group:vaadinWebComponentsMonorepo\", // (416)!\n    \"group:vanilla-extractMonorepo\", // (417)!\n    \"group:visxMonorepo\", // (418)!\n    \"group:vite-plusMonorepo\", // (419)!\n    \"group:vitestMonorepo\", // (420)!\n    \"group:vstestMonorepo\", // (421)!\n    \"group:vueMonorepo\", // (422)!\n    \"group:vue-cliMonorepo\", // (423)!\n    \"group:vue-language-toolsMonorepo\", // (424)!\n    \"group:vuepressMonorepo\", // (425)!\n    \"group:vueuseMonorepo\", // (426)!\n    \"group:weaselMonorepo\", // (427)!\n    \"group:web3-reactMonorepo\", // (428)!\n    \"group:webdriverioMonorepo\", // (429)!\n    \"group:wolverineMonorepo\", // (430)!\n    \"group:workboxMonorepo\", // (431)!\n    \"group:wyw-in-jsMonorepo\", // (432)!\n    \"group:xstateMonorepo\", // (433)!\n    \"group:xtermMonorepo\", // (434)!\n    \"group:xunit-dotnetMonorepo\", // (435)!\n    \"group:yamldotnetMonorepo\", // (436)!\n    \"group:yarnMonorepo\", // (437)!\n    \"group:zag-jsMonorepo\", // (438)!\n    \"group:zxcvbn-tsMonorepo\", // (439)!\n    \"group:zxing-netMonorepo\", // (440)!\n    \"group:hapijsMonorepo\", // (441)!\n    \"group:lodashMonorepo\", // (442)!\n    \"group:ngrxMonorepo\", // (443)!\n    \"group:nxMonorepo\", // (444)!\n    \"group:octokitMonorepo\", // (445)!\n    \"group:php-enqueueMonorepo\", // (446)!\n    \"group:semantic-releaseMonorepo\", // (447)!\n    \"group:swcMonorepo\", // (448)!\n    \"group:twigMonorepo\", // (449)!\n    \"group:angularmaterialMonorepo\", // (450)!\n    \"group:apache-camelMonorepo\", // (451)!\n    \"group:apache-poiMonorepo\", // (452)!\n    \"group:aws-java-sdkMonorepo\", // (453)!\n    \"group:aws-java-sdk-v2Monorepo\", // (454)!\n    \"group:axis2Monorepo\", // (455)!\n    \"group:babel6Monorepo\", // (456)!\n    \"group:embroiderMonorepo\", // (457)!\n    \"group:forgeMonorepo\", // (458)!\n    \"group:fullcalendarMonorepo\", // (459)!\n    \"group:oracle-databaseMonorepo\", // (460)!\n    \"group:oxlintMonorepo\", // (461)!\n    \"group:prometheus-simpleclientMonorepo\", // (462)!\n    \"group:russhMonorepo\", // (463)!\n    \"group:solidMonorepo\", // (464)!\n    \"group:spfxMonorepo\", // (465)!\n    \"group:spockMonorepo\", // (466)!\n    \"group:syncfusion-dotnetMonorepo\", // (467)!\n    \"group:testing-libraryMonorepo\", // (468)!\n    \"group:wordpressMonorepo\" // (469)!\n  ]\n}\n</code></pre> <ol> <li><code>group:accountsMonorepo</code>: Group packages from accounts monorepo together.</li> <li><code>group:acotMonorepo</code>: Group packages from acot monorepo together.</li> <li><code>group:ag-gridMonorepo</code>: Group packages from ag-grid monorepo together.</li> <li><code>group:algolia-instantsearchMonorepo</code>: Group packages from algolia-instantsearch monorepo together.</li> <li><code>group:algolia-react-instantsearchMonorepo</code>: Group packages from algolia-react-instantsearch monorepo together.</li> <li><code>group:algoliasearch-autocompleteMonorepo</code>: Group packages from algoliasearch-autocomplete monorepo together.</li> <li><code>group:algoliasearch-client-javascriptMonorepo</code>: Group packages from algoliasearch-client-javascript monorepo together.</li> <li><code>group:analogMonorepo</code>: Group packages from analog monorepo together.</li> <li><code>group:angularMonorepo</code>: Group packages from angular monorepo together.</li> <li><code>group:angular-cliMonorepo</code>: Group packages from angular-cli monorepo together.</li> <li><code>group:angular-eslintMonorepo</code>: Group packages from angular-eslint monorepo together.</li> <li><code>group:angularfireMonorepo</code>: Group packages from angularfire monorepo together.</li> <li><code>group:angularjsMonorepo</code>: Group packages from angularjs monorepo together.</li> <li><code>group:apache-luceneMonorepo</code>: Group packages from apache-lucene monorepo together.</li> <li><code>group:apollo-serverMonorepo</code>: Group packages from apollo-server monorepo together.</li> <li><code>group:apolloclientMonorepo</code>: Group packages from apolloclient monorepo together.</li> <li><code>group:appiumMonorepo</code>: Group packages from appium monorepo together.</li> <li><code>group:applicationinsights-dotnetMonorepo</code>: Group packages from applicationinsights-dotnet monorepo together.</li> <li><code>group:arcus.background-jobsMonorepo</code>: Group packages from arcus.background-jobs monorepo together.</li> <li><code>group:arcus.event-gridMonorepo</code>: Group packages from arcus.event-grid monorepo together.</li> <li><code>group:arcus.messagingMonorepo</code>: Group packages from arcus.messaging monorepo together.</li> <li><code>group:arcus.observabilityMonorepo</code>: Group packages from arcus.observability monorepo together.</li> <li><code>group:arcus.securityMonorepo</code>: Group packages from arcus.security monorepo together.</li> <li><code>group:arcus.webapiMonorepo</code>: Group packages from arcus.webapi monorepo together.</li> <li><code>group:arrow-ktMonorepo</code>: Group packages from arrow-kt monorepo together.</li> <li><code>group:arrow-rsMonorepo</code>: Group packages from arrow-rs monorepo together.</li> <li><code>group:aspireMonorepo</code>: Group packages from aspire monorepo together.</li> <li><code>group:aspnet aspnetwebstackMonorepo</code>: Group packages from aspnet aspnetwebstack monorepo together.</li> <li><code>group:aspnet extensionsMonorepo</code>: Group packages from aspnet extensions monorepo together.</li> <li><code>group:aspnet-api-versioningMonorepo</code>: Group packages from aspnet-api-versioning monorepo together.</li> <li><code>group:aspnet-health-checksMonorepo</code>: Group packages from aspnet-health-checks monorepo together.</li> <li><code>group:aspnet-security-oauth-providersMonorepo</code>: Group packages from aspnet-security-oauth-providers monorepo together.</li> <li><code>group:astroMonorepo</code>: Group packages from astro monorepo together.</li> <li><code>group:autoMonorepo</code>: Group packages from auto monorepo together.</li> <li><code>group:autofixtureMonorepo</code>: Group packages from autofixture monorepo together.</li> <li><code>group:automapper-dotnetMonorepo</code>: Group packages from automapper-dotnet monorepo together.</li> <li><code>group:avaloniaMonorepo</code>: Group packages from avalonia monorepo together.</li> <li><code>group:aws-cdkMonorepo</code>: Group packages from aws-cdk monorepo together.</li> <li><code>group:aws-lambda-dotnetMonorepo</code>: Group packages from aws-lambda-dotnet monorepo together.</li> <li><code>group:aws-lambda-powertools-typescriptMonorepo</code>: Group packages from aws-lambda-powertools-typescript monorepo together.</li> <li><code>group:aws-sdk-client-mockMonorepo</code>: Group packages from aws-sdk-client-mock monorepo together.</li> <li><code>group:aws-sdk-goMonorepo</code>: Group packages from aws-sdk-go monorepo together.</li> <li><code>group:aws-sdk-go-v2Monorepo</code>: Group packages from aws-sdk-go-v2 monorepo together.</li> <li><code>group:aws-sdk-js-v3Monorepo</code>: Group packages from aws-sdk-js-v3 monorepo together.</li> <li><code>group:aws-sdk-netMonorepo</code>: Group packages from aws-sdk-net monorepo together.</li> <li><code>group:aws-sdk-rustMonorepo</code>: Group packages from aws-sdk-rust monorepo together.</li> <li><code>group:awsappsyncMonorepo</code>: Group packages from awsappsync monorepo together.</li> <li><code>group:axumMonorepo</code>: Group packages from axum monorepo together.</li> <li><code>group:azure azure-libraries-for-netMonorepo</code>: Group packages from azure azure-libraries-for-net monorepo together.</li> <li><code>group:azure azure-sdk-for-netMonorepo</code>: Group packages from azure azure-sdk-for-net monorepo together.</li> <li><code>group:azure azure-storage-netMonorepo</code>: Group packages from azure azure-storage-net monorepo together.</li> <li><code>group:azure-ad-microsoft-authentication-library-for-androidMonorepo</code>: Group packages from azure-ad-microsoft-authentication-library-for-android monorepo together.</li> <li><code>group:azure-ad-microsoft-authentication-library-for-dotnetMonorepo</code>: Group packages from azure-ad-microsoft-authentication-library-for-dotnet monorepo together.</li> <li><code>group:azure-ad-microsoft-authentication-library-for-goMonorepo</code>: Group packages from azure-ad-microsoft-authentication-library-for-go monorepo together.</li> <li><code>group:azure-ad-microsoft-authentication-library-for-javaMonorepo</code>: Group packages from azure-ad-microsoft-authentication-library-for-java monorepo together.</li> <li><code>group:azure-ad-microsoft-authentication-library-for-jsMonorepo</code>: Group packages from azure-ad-microsoft-authentication-library-for-js monorepo together.</li> <li><code>group:azure-ad-microsoft-authentication-library-for-objcMonorepo</code>: Group packages from azure-ad-microsoft-authentication-library-for-objc monorepo together.</li> <li><code>group:azure-ad-microsoft-authentication-library-for-pythonMonorepo</code>: Group packages from azure-ad-microsoft-authentication-library-for-python monorepo together.</li> <li><code>group:azure-functions-dotnet-workerMonorepo</code>: Group packages from azure-functions-dotnet-worker monorepo together.</li> <li><code>group:azure-sdk-for-androidMonorepo</code>: Group packages from azure-sdk-for-android monorepo together.</li> <li><code>group:azure-sdk-for-cMonorepo</code>: Group packages from azure-sdk-for-c monorepo together.</li> <li><code>group:azure-sdk-for-cppMonorepo</code>: Group packages from azure-sdk-for-cpp monorepo together.</li> <li><code>group:azure-sdk-for-goMonorepo</code>: Group packages from azure-sdk-for-go monorepo together.</li> <li><code>group:azure-sdk-for-iosMonorepo</code>: Group packages from azure-sdk-for-ios monorepo together.</li> <li><code>group:azure-sdk-for-javaMonorepo</code>: Group packages from azure-sdk-for-java monorepo together.</li> <li><code>group:azure-sdk-for-jsMonorepo</code>: Group packages from azure-sdk-for-js monorepo together.</li> <li><code>group:azure-sdk-for-pythonMonorepo</code>: Group packages from azure-sdk-for-python monorepo together.</li> <li><code>group:azure-sdk-for-rustMonorepo</code>: Group packages from azure-sdk-for-rust monorepo together.</li> <li><code>group:babelMonorepo</code>: Group packages from babel monorepo together.</li> <li><code>group:backstageMonorepo</code>: Group packages from backstage monorepo together.</li> <li><code>group:basetMonorepo</code>: Group packages from baset monorepo together.</li> <li><code>group:better-authMonorepo</code>: Group packages from better-auth monorepo together.</li> <li><code>group:braveMonorepo</code>: Group packages from brave monorepo together.</li> <li><code>group:bugsnag-jsMonorepo</code>: Group packages from bugsnag-js monorepo together.</li> <li><code>group:bull-boardMonorepo</code>: Group packages from bull-board monorepo together.</li> <li><code>group:cakeMonorepo</code>: Group packages from cake monorepo together.</li> <li><code>group:cake-issuesMonorepo</code>: Group packages from cake-issues monorepo together.</li> <li><code>group:capacitorMonorepo</code>: Group packages from capacitor monorepo together.</li> <li><code>group:cedarMonorepo</code>: Group packages from cedar monorepo together.</li> <li><code>group:chakra-uiMonorepo</code>: Group packages from chakra-ui monorepo together.</li> <li><code>group:chromelyMonorepo</code>: Group packages from chromely monorepo together.</li> <li><code>group:citation-jsMonorepo</code>: Group packages from citation-js monorepo together.</li> <li><code>group:ckeditorMonorepo</code>: Group packages from ckeditor monorepo together.</li> <li><code>group:clarityMonorepo</code>: Group packages from clarity monorepo together.</li> <li><code>group:clearscriptMonorepo</code>: Group packages from clearscript monorepo together.</li> <li><code>group:commitlintMonorepo</code>: Group packages from commitlint monorepo together.</li> <li><code>group:confectMonorepo</code>: Group packages from confect monorepo together.</li> <li><code>group:conformMonorepo</code>: Group packages from conform monorepo together.</li> <li><code>group:contentful-rich-textMonorepo</code>: Group packages from contentful-rich-text monorepo together.</li> <li><code>group:convexMonorepo</code>: Group packages from convex monorepo together.</li> <li><code>group:cspellMonorepo</code>: Group packages from cspell monorepo together.</li> <li><code>group:datadog-browser-sdkMonorepo</code>: Group packages from datadog-browser-sdk monorepo together.</li> <li><code>group:datafusionMonorepo</code>: Group packages from datafusion monorepo together.</li> <li><code>group:datatables-netMonorepo</code>: Group packages from datatables-net monorepo together.</li> <li><code>group:datatables-net-autofillMonorepo</code>: Group packages from datatables-net-autofill monorepo together.</li> <li><code>group:datatables-net-buttonsMonorepo</code>: Group packages from datatables-net-buttons monorepo together.</li> <li><code>group:datatables-net-colreorderMonorepo</code>: Group packages from datatables-net-colreorder monorepo together.</li> <li><code>group:datatables-net-fixedcolumnsMonorepo</code>: Group packages from datatables-net-fixedcolumns monorepo together.</li> <li><code>group:datatables-net-fixedheaderMonorepo</code>: Group packages from datatables-net-fixedheader monorepo together.</li> <li><code>group:datatables-net-keytableMonorepo</code>: Group packages from datatables-net-keytable monorepo together.</li> <li><code>group:datatables-net-responsiveMonorepo</code>: Group packages from datatables-net-responsive monorepo together.</li> <li><code>group:datatables-net-rowgroupMonorepo</code>: Group packages from datatables-net-rowgroup monorepo together.</li> <li><code>group:datatables-net-rowreorderMonorepo</code>: Group packages from datatables-net-rowreorder monorepo together.</li> <li><code>group:datatables-net-scrollerMonorepo</code>: Group packages from datatables-net-scroller monorepo together.</li> <li><code>group:datatables-net-searchbuilderMonorepo</code>: Group packages from datatables-net-searchbuilder monorepo together.</li> <li><code>group:datatables-net-searchpanesMonorepo</code>: Group packages from datatables-net-searchpanes monorepo together.</li> <li><code>group:datatables-net-selectMonorepo</code>: Group packages from datatables-net-select monorepo together.</li> <li><code>group:datatables-net-staterestoreMonorepo</code>: Group packages from datatables-net-staterestore monorepo together.</li> <li><code>group:date-ioMonorepo</code>: Group packages from date-io monorepo together.</li> <li><code>group:deck-glMonorepo</code>: Group packages from deck-gl monorepo together.</li> <li><code>group:denoMonorepo</code>: Group packages from deno monorepo together.</li> <li><code>group:devextreme-reactiveMonorepo</code>: Group packages from devextreme-reactive monorepo together.</li> <li><code>group:dnd-kitMonorepo</code>: Group packages from dnd-kit monorepo together.</li> <li><code>group:docusaurusMonorepo</code>: Group packages from docusaurus monorepo together.</li> <li><code>group:dot-swashbuckleMonorepo</code>: Group packages from dot-swashbuckle monorepo together.</li> <li><code>group:dotnetMonorepo</code>: Group packages from dotnet monorepo together.</li> <li><code>group:dotnet-azure-ad-identitymodel-extensionsMonorepo</code>: Group packages from dotnet-azure-ad-identitymodel-extensions monorepo together.</li> <li><code>group:dotnet-azure-ad-microsoft-identity-webMonorepo</code>: Group packages from dotnet-azure-ad-microsoft-identity-web monorepo together.</li> <li><code>group:dotnet-wcfMonorepo</code>: Group packages from dotnet-wcf monorepo together.</li> <li><code>group:dotnetcore-capMonorepo</code>: Group packages from dotnetcore-cap monorepo together.</li> <li><code>group:dropwizardMonorepo</code>: Group packages from dropwizard monorepo together.</li> <li><code>group:duende-identityserverMonorepo</code>: Group packages from duende-identityserver monorepo together.</li> <li><code>group:effectMonorepo</code>: Group packages from effect monorepo together.</li> <li><code>group:elastic-apm-agent-rum-jsMonorepo</code>: Group packages from elastic-apm-agent-rum-js monorepo together.</li> <li><code>group:elastic-ecs-dotnetMonorepo</code>: Group packages from elastic-ecs-dotnet monorepo together.</li> <li><code>group:electron-forgeMonorepo</code>: Group packages from electron-forge monorepo together.</li> <li><code>group:ember-decoratorsMonorepo</code>: Group packages from ember-decorators monorepo together.</li> <li><code>group:embla-carouselMonorepo</code>: Group packages from embla-carousel monorepo together.</li> <li><code>group:emojibaseMonorepo</code>: Group packages from emojibase monorepo together.</li> <li><code>group:emotionMonorepo</code>: Group packages from emotion monorepo together.</li> <li><code>group:enumeratumMonorepo</code>: Group packages from enumeratum monorepo together.</li> <li><code>group:envelopMonorepo</code>: Group packages from envelop monorepo together.</li> <li><code>group:error-proneMonorepo</code>: Group packages from error-prone monorepo together.</li> <li><code>group:error-prone-supportMonorepo</code>: Group packages from error-prone-support monorepo together.</li> <li><code>group:eslintMonorepo</code>: Group packages from eslint monorepo together.</li> <li><code>group:eslint-config-globexMonorepo</code>: Group packages from eslint-config-globex monorepo together.</li> <li><code>group:eslint-stylisticMonorepo</code>: Group packages from eslint-stylistic monorepo together.</li> <li><code>group:expoMonorepo</code>: Group packages from expo monorepo together.</li> <li><code>group:fabric-chaincode-nodeMonorepo</code>: Group packages from fabric-chaincode-node monorepo together.</li> <li><code>group:fabric8-kubernetes-clientMonorepo</code>: Group packages from fabric8-kubernetes-client monorepo together.</li> <li><code>group:faro-web-sdkMonorepo</code>: Group packages from faro-web-sdk monorepo together.</li> <li><code>group:fastendpointsMonorepo</code>: Group packages from fastendpoints monorepo together.</li> <li><code>group:feathersMonorepo</code>: Group packages from feathers monorepo together.</li> <li><code>group:featuremanagement-dotnetMonorepo</code>: Group packages from featuremanagement-dotnet monorepo together.</li> <li><code>group:feignMonorepo</code>: Group packages from feign monorepo together.</li> <li><code>group:felaMonorepo</code>: Group packages from fela monorepo together.</li> <li><code>group:fimbullinterMonorepo</code>: Group packages from fimbullinter monorepo together.</li> <li><code>group:flipperMonorepo</code>: Group packages from flipper monorepo together.</li> <li><code>group:flopflipMonorepo</code>: Group packages from flopflip monorepo together.</li> <li><code>group:flueMonorepo</code>: Group packages from flue monorepo together.</li> <li><code>group:fontsourceMonorepo</code>: Group packages from fontsource monorepo together.</li> <li><code>group:formatjsMonorepo</code>: Group packages from formatjs monorepo together.</li> <li><code>group:framework7Monorepo</code>: Group packages from framework7 monorepo together.</li> <li><code>group:funogramMonorepo</code>: Group packages from funogram monorepo together.</li> <li><code>group:fusioncacheMonorepo</code>: Group packages from fusioncache monorepo together.</li> <li><code>group:gatsbyMonorepo</code>: Group packages from gatsby monorepo together.</li> <li><code>group:gitbeakerMonorepo</code>: Group packages from gitbeaker monorepo together.</li> <li><code>group:github-workflows-ktMonorepo</code>: Group packages from github-workflows-kt monorepo together.</li> <li><code>group:go-cloudMonorepo</code>: Group packages from go-cloud monorepo together.</li> <li><code>group:gomockMonorepo</code>: Group packages from gomock monorepo together.</li> <li><code>group:google-api-dotnet-clientMonorepo</code>: Group packages from google-api-dotnet-client monorepo together.</li> <li><code>group:google-cloud-rustMonorepo</code>: Group packages from google-cloud-rust monorepo together.</li> <li><code>group:grafanaMonorepo</code>: Group packages from grafana monorepo together.</li> <li><code>group:graphiqlMonorepo</code>: Group packages from graphiql monorepo together.</li> <li><code>group:graphql-hive-gatewayMonorepo</code>: Group packages from graphql-hive-gateway monorepo together.</li> <li><code>group:graphql-meshMonorepo</code>: Group packages from graphql-mesh monorepo together.</li> <li><code>group:graphql-modulesMonorepo</code>: Group packages from graphql-modules monorepo together.</li> <li><code>group:graphql-platformMonorepo</code>: Group packages from graphql-platform monorepo together.</li> <li><code>group:graphql-toolsMonorepo</code>: Group packages from graphql-tools monorepo together.</li> <li><code>group:graphql-yogaMonorepo</code>: Group packages from graphql-yoga monorepo together.</li> <li><code>group:graphqlcodegeneratorMonorepo</code>: Group packages from graphqlcodegenerator monorepo together.</li> <li><code>group:greenmailMonorepo</code>: Group packages from greenmail monorepo together.</li> <li><code>group:groovyMonorepo</code>: Group packages from groovy monorepo together.</li> <li><code>group:grpc-dotnetMonorepo</code>: Group packages from grpc-dotnet monorepo together.</li> <li><code>group:grpc-javaMonorepo</code>: Group packages from grpc-java monorepo together.</li> <li><code>group:gstreamer-rustMonorepo</code>: Group packages from gstreamer-rust monorepo together.</li> <li><code>group:guavaMonorepo</code>: Group packages from guava monorepo together.</li> <li><code>group:hangfireMonorepo</code>: Group packages from hangfire monorepo together.</li> <li><code>group:happy-domMonorepo</code>: Group packages from happy-dom monorepo together.</li> <li><code>group:hibernate-modelsMonorepo</code>: Group packages from hibernate-models monorepo together.</li> <li><code>group:hibernate-ormMonorepo</code>: Group packages from hibernate-orm monorepo together.</li> <li><code>group:hibernate-searchMonorepo</code>: Group packages from hibernate-search monorepo together.</li> <li><code>group:hibernate-toolsMonorepo</code>: Group packages from hibernate-tools monorepo together.</li> <li><code>group:hickory-dnsMonorepo</code>: Group packages from hickory-dns monorepo together.</li> <li><code>group:hocuspocusMonorepo</code>: Group packages from hocuspocus monorepo together.</li> <li><code>group:html-eslintMonorepo</code>: Group packages from html-eslint monorepo together.</li> <li><code>group:humanizerMonorepo</code>: Group packages from humanizer monorepo together.</li> <li><code>group:immichMonorepo</code>: Group packages from immich monorepo together.</li> <li><code>group:infrastructure-uiMonorepo</code>: Group packages from infrastructure-ui monorepo together.</li> <li><code>group:ionic-nativeMonorepo</code>: Group packages from ionic-native monorepo together.</li> <li><code>group:istanbuljsMonorepo</code>: Group packages from istanbuljs monorepo together.</li> <li><code>group:istioMonorepo</code>: Group packages from istio monorepo together.</li> <li><code>group:jacksonMonorepo</code>: Group packages from jackson monorepo together.</li> <li><code>group:jasmineMonorepo</code>: Group packages from jasmine monorepo together.</li> <li><code>group:javafxMonorepo</code>: Group packages from javafx monorepo together.</li> <li><code>group:javahamcrestMonorepo</code>: Group packages from javahamcrest monorepo together.</li> <li><code>group:javascriptengineswitcherMonorepo</code>: Group packages from javascriptengineswitcher monorepo together.</li> <li><code>group:jaxb-riMonorepo</code>: Group packages from jaxb-ri monorepo together.</li> <li><code>group:jerseyMonorepo</code>: Group packages from jersey monorepo together.</li> <li><code>group:jestMonorepo</code>: Group packages from jest monorepo together.</li> <li><code>group:jettyMonorepo</code>: Group packages from jetty monorepo together.</li> <li><code>group:jnaMonorepo</code>: Group packages from jna monorepo together.</li> <li><code>group:json-smart-v2Monorepo</code>: Group packages from json-smart-v2 monorepo together.</li> <li><code>group:jsonformsMonorepo</code>: Group packages from jsonforms monorepo together.</li> <li><code>group:jsplumbMonorepo</code>: Group packages from jsplumb monorepo together.</li> <li><code>group:juniorMonorepo</code>: Group packages from junior monorepo together.</li> <li><code>group:junit-frameworkMonorepo</code>: Group packages from junit-framework monorepo together.</li> <li><code>group:kernelmemoryMonorepo</code>: Group packages from kernelmemory monorepo together.</li> <li><code>group:kiotaMonorepo</code>: Group packages from kiota monorepo together.</li> <li><code>group:kotlinMonorepo</code>: Group packages from kotlin monorepo together.</li> <li><code>group:kotlinx-coroutinesMonorepo</code>: Group packages from kotlinx-coroutines monorepo together.</li> <li><code>group:krokiMonorepo</code>: Group packages from kroki monorepo together.</li> <li><code>group:kspMonorepo</code>: Group packages from ksp monorepo together.</li> <li><code>group:ktorMonorepo</code>: Group packages from ktor monorepo together.</li> <li><code>group:kubbMonorepo</code>: Group packages from kubb monorepo together.</li> <li><code>group:kubernetesMonorepo</code>: Group packages from kubernetes monorepo together.</li> <li><code>group:lamarMonorepo</code>: Group packages from lamar monorepo together.</li> <li><code>group:langchain4jMonorepo</code>: Group packages from langchain4j monorepo together.</li> <li><code>group:lernaMonorepo</code>: Group packages from lerna monorepo together.</li> <li><code>group:lerna-liteMonorepo</code>: Group packages from lerna-lite monorepo together.</li> <li><code>group:lexicalMonorepo</code>: Group packages from lexical monorepo together.</li> <li><code>group:linguijsMonorepo</code>: Group packages from linguijs monorepo together.</li> <li><code>group:linkifyjsMonorepo</code>: Group packages from linkifyjs monorepo together.</li> <li><code>group:log4j2Monorepo</code>: Group packages from log4j2 monorepo together.</li> <li><code>group:logbackMonorepo</code>: Group packages from logback monorepo together.</li> <li><code>group:logtapeMonorepo</code>: Group packages from logtape monorepo together.</li> <li><code>group:loopbackMonorepo</code>: Group packages from loopback monorepo together.</li> <li><code>group:lrnwebcomponentsMonorepo</code>: Group packages from lrnwebcomponents monorepo together.</li> <li><code>group:lucideMonorepo</code>: Group packages from lucide monorepo together.</li> <li><code>group:mailingMonorepo</code>: Group packages from mailing monorepo together.</li> <li><code>group:mantineMonorepo</code>: Group packages from mantine monorepo together.</li> <li><code>group:mapstructMonorepo</code>: Group packages from mapstruct monorepo together.</li> <li><code>group:martenMonorepo</code>: Group packages from marten monorepo together.</li> <li><code>group:masstransitMonorepo</code>: Group packages from masstransit monorepo together.</li> <li><code>group:material-components-webMonorepo</code>: Group packages from material-components-web monorepo together.</li> <li><code>group:material-uiMonorepo</code>: Group packages from material-ui monorepo together.</li> <li><code>group:mdc-reactMonorepo</code>: Group packages from mdc-react monorepo together.</li> <li><code>group:mdxMonorepo</code>: Group packages from mdx monorepo together.</li> <li><code>group:middy-jsMonorepo</code>: Group packages from middy-js monorepo together.</li> <li><code>group:mikro-ormMonorepo</code>: Group packages from mikro-orm monorepo together.</li> <li><code>group:ml-dotnetMonorepo</code>: Group packages from ml-dotnet monorepo together.</li> <li><code>group:mockitoMonorepo</code>: Group packages from mockito monorepo together.</li> <li><code>group:mongo-csharp-driverMonorepo</code>: Group packages from mongo-csharp-driver monorepo together.</li> <li><code>group:mongo-java-driverMonorepo</code>: Group packages from mongo-java-driver monorepo together.</li> <li><code>group:mstestMonorepo</code>: Group packages from mstest monorepo together.</li> <li><code>group:mutation-testing-elementsMonorepo</code>: Group packages from mutation-testing-elements monorepo together.</li> <li><code>group:nestMonorepo</code>: Group packages from nest monorepo together.</li> <li><code>group:nest-graphqlMonorepo</code>: Group packages from nest-graphql monorepo together.</li> <li><code>group:nettyMonorepo</code>: Group packages from netty monorepo together.</li> <li><code>group:neutrinoMonorepo</code>: Group packages from neutrino monorepo together.</li> <li><code>group:nexpectMonorepo</code>: Group packages from nexpect monorepo together.</li> <li><code>group:nextjsMonorepo</code>: Group packages from nextjs monorepo together.</li> <li><code>group:nextraMonorepo</code>: Group packages from nextra monorepo together.</li> <li><code>group:ngx-cookie-serviceMonorepo</code>: Group packages from ngx-cookie-service monorepo together.</li> <li><code>group:ngx-formlyMonorepo</code>: Group packages from ngx-formly monorepo together.</li> <li><code>group:ngxs-storeMonorepo</code>: Group packages from ngxs-store monorepo together.</li> <li><code>group:nivoMonorepo</code>: Group packages from nivo monorepo together.</li> <li><code>group:njson-schemaMonorepo</code>: Group packages from njson-schema monorepo together.</li> <li><code>group:nswagMonorepo</code>: Group packages from nswag monorepo together.</li> <li><code>group:nugetMonorepo</code>: Group packages from nuget monorepo together.</li> <li><code>group:nuke-buildMonorepo</code>: Group packages from nuke-build monorepo together.</li> <li><code>group:nuxtjsMonorepo</code>: Group packages from nuxtjs monorepo together.</li> <li><code>group:okhttpMonorepo</code>: Group packages from okhttp monorepo together.</li> <li><code>group:openapi-dotnetMonorepo</code>: Group packages from openapi-dotnet monorepo together.</li> <li><code>group:opencostMonorepo</code>: Group packages from opencost monorepo together.</li> <li><code>group:openiddictMonorepo</code>: Group packages from openiddict monorepo together.</li> <li><code>group:opentelemetry-dotnetMonorepo</code>: Group packages from opentelemetry-dotnet monorepo together.</li> <li><code>group:opentelemetry-dotnet-contribMonorepo</code>: Group packages from opentelemetry-dotnet-contrib monorepo together.</li> <li><code>group:opentelemetry-erlangMonorepo</code>: Group packages from opentelemetry-erlang monorepo together.</li> <li><code>group:opentelemetry-erlang-contribMonorepo</code>: Group packages from opentelemetry-erlang-contrib monorepo together.</li> <li><code>group:opentelemetry-goMonorepo</code>: Group packages from opentelemetry-go monorepo together.</li> <li><code>group:opentelemetry-go-contribMonorepo</code>: Group packages from opentelemetry-go-contrib monorepo together.</li> <li><code>group:opentelemetry-javaMonorepo</code>: Group packages from opentelemetry-java monorepo together.</li> <li><code>group:opentelemetry-java-contribMonorepo</code>: Group packages from opentelemetry-java-contrib monorepo together.</li> <li><code>group:opentelemetry-jsMonorepo</code>: Group packages from opentelemetry-js monorepo together.</li> <li><code>group:opentelemetry-js-contribMonorepo</code>: Group packages from opentelemetry-js-contrib monorepo together.</li> <li><code>group:opentelemetry-phpMonorepo</code>: Group packages from opentelemetry-php monorepo together.</li> <li><code>group:opentelemetry-php-contribMonorepo</code>: Group packages from opentelemetry-php-contrib monorepo together.</li> <li><code>group:opentelemetry-pythonMonorepo</code>: Group packages from opentelemetry-python monorepo together.</li> <li><code>group:opentelemetry-python-contribMonorepo</code>: Group packages from opentelemetry-python-contrib monorepo together.</li> <li><code>group:opentelemetry-rustMonorepo</code>: Group packages from opentelemetry-rust monorepo together.</li> <li><code>group:opentelemetry-rust-contribMonorepo</code>: Group packages from opentelemetry-rust-contrib monorepo together.</li> <li><code>group:orleansMonorepo</code>: Group packages from orleans monorepo together.</li> <li><code>group:orpcMonorepo</code>: Group packages from orpc monorepo together.</li> <li><code>group:panda-cssMonorepo</code>: Group packages from panda-css monorepo together.</li> <li><code>group:parcelMonorepo</code>: Group packages from parcel monorepo together.</li> <li><code>group:payloadcmsMonorepo</code>: Group packages from payloadcms monorepo together.</li> <li><code>group:pdfmeMonorepo</code>: Group packages from pdfme monorepo together.</li> <li><code>group:percy-cliMonorepo</code>: Group packages from percy-cli monorepo together.</li> <li><code>group:picassojsMonorepo</code>: Group packages from picassojs monorepo together.</li> <li><code>group:pixijsMonorepo</code>: Group packages from pixijs monorepo together.</li> <li><code>group:playwrightMonorepo</code>: Group packages from playwright monorepo together.</li> <li><code>group:playwright-dotnetMonorepo</code>: Group packages from playwright-dotnet monorepo together.</li> <li><code>group:pnpcoreMonorepo</code>: Group packages from pnpcore monorepo together.</li> <li><code>group:pnpjsMonorepo</code>: Group packages from pnpjs monorepo together.</li> <li><code>group:pollyMonorepo</code>: Group packages from polly monorepo together.</li> <li><code>group:pollyjsMonorepo</code>: Group packages from pollyjs monorepo together.</li> <li><code>group:pothosMonorepo</code>: Group packages from pothos monorepo together.</li> <li><code>group:pouchdbMonorepo</code>: Group packages from pouchdb monorepo together.</li> <li><code>group:powermockMonorepo</code>: Group packages from powermock monorepo together.</li> <li><code>group:prismaMonorepo</code>: Group packages from prisma monorepo together.</li> <li><code>group:prometheus-netMonorepo</code>: Group packages from prometheus-net monorepo together.</li> <li><code>group:promsterMonorepo</code>: Group packages from promster monorepo together.</li> <li><code>group:protobufMonorepo</code>: Group packages from protobuf monorepo together.</li> <li><code>group:quartznetMonorepo</code>: Group packages from quartznet monorepo together.</li> <li><code>group:radix-ui-primitivesMonorepo</code>: Group packages from radix-ui-primitives monorepo together.</li> <li><code>group:reach-uiMonorepo</code>: Group packages from reach-ui monorepo together.</li> <li><code>group:reactMonorepo</code>: Group packages from react monorepo together.</li> <li><code>group:react-adminMonorepo</code>: Group packages from react-admin monorepo together.</li> <li><code>group:react-apolloMonorepo</code>: Group packages from react-apollo monorepo together.</li> <li><code>group:react-dndMonorepo</code>: Group packages from react-dnd monorepo together.</li> <li><code>group:react-emailMonorepo</code>: Group packages from react-email monorepo together.</li> <li><code>group:react-navigationMonorepo</code>: Group packages from react-navigation monorepo together.</li> <li><code>group:react-pageMonorepo</code>: Group packages from react-page monorepo together.</li> <li><code>group:react-railsMonorepo</code>: Group packages from react-rails monorepo together.</li> <li><code>group:react-routerMonorepo</code>: Group packages from react-router monorepo together.</li> <li><code>group:react-spectrumMonorepo</code>: Group packages from react-spectrum monorepo together.</li> <li><code>group:react-springMonorepo</code>: Group packages from react-spring monorepo together.</li> <li><code>group:reactivestack-cookiesMonorepo</code>: Group packages from reactivestack-cookies monorepo together.</li> <li><code>group:reakitMonorepo</code>: Group packages from reakit monorepo together.</li> <li><code>group:redwoodMonorepo</code>: Group packages from redwood monorepo together.</li> <li><code>group:refitMonorepo</code>: Group packages from refit monorepo together.</li> <li><code>group:reg-suitMonorepo</code>: Group packages from reg-suit monorepo together.</li> <li><code>group:remarkMonorepo</code>: Group packages from remark monorepo together.</li> <li><code>group:remixMonorepo</code>: Group packages from remix monorepo together.</li> <li><code>group:retrofitMonorepo</code>: Group packages from retrofit monorepo together.</li> <li><code>group:riverMonorepo</code>: Group packages from river monorepo together.</li> <li><code>group:rjsfMonorepo</code>: Group packages from rjsf monorepo together.</li> <li><code>group:router5Monorepo</code>: Group packages from router5 monorepo together.</li> <li><code>group:rspackMonorepo</code>: Group packages from rspack monorepo together.</li> <li><code>group:ruby-on-railsMonorepo</code>: Group packages from ruby-on-rails monorepo together.</li> <li><code>group:rust-analyzerMonorepo</code>: Group packages from rust-analyzer monorepo together.</li> <li><code>group:rust-futuresMonorepo</code>: Group packages from rust-futures monorepo together.</li> <li><code>group:rust-wasm-bindgenMonorepo</code>: Group packages from rust-wasm-bindgen monorepo together.</li> <li><code>group:sanityMonorepo</code>: Group packages from sanity monorepo together.</li> <li><code>group:scaffdogMonorepo</code>: Group packages from scaffdog monorepo together.</li> <li><code>group:scalarMonorepo</code>: Group packages from scalar monorepo together.</li> <li><code>group:sea-ormMonorepo</code>: Group packages from sea-orm monorepo together.</li> <li><code>group:secretlintMonorepo</code>: Group packages from secretlint monorepo together.</li> <li><code>group:sendgrid-nodejsMonorepo</code>: Group packages from sendgrid-nodejs monorepo together.</li> <li><code>group:sentry-dotnetMonorepo</code>: Group packages from sentry-dotnet monorepo together.</li> <li><code>group:sentry-javascriptMonorepo</code>: Group packages from sentry-javascript monorepo together.</li> <li><code>group:sentry-rubyMonorepo</code>: Group packages from sentry-ruby monorepo together.</li> <li><code>group:sentry-rustMonorepo</code>: Group packages from sentry-rust monorepo together.</li> <li><code>group:serdeMonorepo</code>: Group packages from serde monorepo together.</li> <li><code>group:serenity-jsMonorepo</code>: Group packages from serenity-js monorepo together.</li> <li><code>group:serilog-uiMonorepo</code>: Group packages from serilog-ui monorepo together.</li> <li><code>group:servicestackMonorepo</code>: Group packages from servicestack monorepo together.</li> <li><code>group:serwistMonorepo</code>: Group packages from serwist monorepo together.</li> <li><code>group:shedlockMonorepo</code>: Group packages from shedlock monorepo together.</li> <li><code>group:shikiMonorepo</code>: Group packages from shiki monorepo together.</li> <li><code>group:shopify-app-bridgeMonorepo</code>: Group packages from shopify-app-bridge monorepo together.</li> <li><code>group:sitecore-jssMonorepo</code>: Group packages from sitecore-jss monorepo together.</li> <li><code>group:size-limitMonorepo</code>: Group packages from size-limit monorepo together.</li> <li><code>group:skiasharpMonorepo</code>: Group packages from skiasharp monorepo together.</li> <li><code>group:slack-netMonorepo</code>: Group packages from slack-net monorepo together.</li> <li><code>group:slf4jMonorepo</code>: Group packages from slf4j monorepo together.</li> <li><code>group:slim-message-busMonorepo</code>: Group packages from slim-message-bus monorepo together.</li> <li><code>group:spectre-consoleMonorepo</code>: Group packages from spectre-console monorepo together.</li> <li><code>group:spectre-console-cliMonorepo</code>: Group packages from spectre-console-cli monorepo together.</li> <li><code>group:springfoxMonorepo</code>: Group packages from springfox monorepo together.</li> <li><code>group:stack-exchange-redis-extensionsMonorepo</code>: Group packages from stack-exchange-redis-extensions monorepo together.</li> <li><code>group:statsig-js-clientMonorepo</code>: Group packages from statsig-js-client monorepo together.</li> <li><code>group:steeltoeMonorepo</code>: Group packages from steeltoe monorepo together.</li> <li><code>group:storybookMonorepo</code>: Group packages from storybook monorepo together.</li> <li><code>group:storybook-react-nativeMonorepo</code>: Group packages from storybook-react-native monorepo together.</li> <li><code>group:strapiMonorepo</code>: Group packages from strapi monorepo together.</li> <li><code>group:strumMonorepo</code>: Group packages from strum monorepo together.</li> <li><code>group:stryker-jsMonorepo</code>: Group packages from stryker-js monorepo together.</li> <li><code>group:stylex-swcMonorepo</code>: Group packages from stylex-swc monorepo together.</li> <li><code>group:surveyjsMonorepo</code>: Group packages from surveyjs monorepo together.</li> <li><code>group:swashbuckle-aspnetcoreMonorepo</code>: Group packages from swashbuckle-aspnetcore monorepo together.</li> <li><code>group:system.io.abstractionsMonorepo</code>: Group packages from system.io.abstractions monorepo together.</li> <li><code>group:taiga-uiMonorepo</code>: Group packages from taiga-ui monorepo together.</li> <li><code>group:tailwindcssMonorepo</code>: Group packages from tailwindcss monorepo together.</li> <li><code>group:tamaguiMonorepo</code>: Group packages from tamagui monorepo together.</li> <li><code>group:tanstack-formMonorepo</code>: Group packages from tanstack-form monorepo together.</li> <li><code>group:tanstack-queryMonorepo</code>: Group packages from tanstack-query monorepo together.</li> <li><code>group:tanstack-routerMonorepo</code>: Group packages from tanstack-router monorepo together.</li> <li><code>group:tanstack-tableMonorepo</code>: Group packages from tanstack-table monorepo together.</li> <li><code>group:tanstack-virtualMonorepo</code>: Group packages from tanstack-virtual monorepo together.</li> <li><code>group:tauriMonorepo</code>: Group packages from tauri monorepo together.</li> <li><code>group:telus-tdsMonorepo</code>: Group packages from telus-tds monorepo together.</li> <li><code>group:telus-tds-coreMonorepo</code>: Group packages from telus-tds-core monorepo together.</li> <li><code>group:temporalio-tsMonorepo</code>: Group packages from temporalio-ts monorepo together.</li> <li><code>group:terraformMonorepo</code>: Group packages from terraform monorepo together.</li> <li><code>group:testcontainers-dotnetMonorepo</code>: Group packages from testcontainers-dotnet monorepo together.</li> <li><code>group:testcontainers-goMonorepo</code>: Group packages from testcontainers-go monorepo together.</li> <li><code>group:testcontainers-javaMonorepo</code>: Group packages from testcontainers-java monorepo together.</li> <li><code>group:testcontainers-nodeMonorepo</code>: Group packages from testcontainers-node monorepo together.</li> <li><code>group:theme-uiMonorepo</code>: Group packages from theme-ui monorepo together.</li> <li><code>group:tikaMonorepo</code>: Group packages from tika monorepo together.</li> <li><code>group:timvirMonorepo</code>: Group packages from timvir monorepo together.</li> <li><code>group:tiptapMonorepo</code>: Group packages from tiptap monorepo together.</li> <li><code>group:tokio-prostMonorepo</code>: Group packages from tokio-prost monorepo together.</li> <li><code>group:tokio-tracingMonorepo</code>: Group packages from tokio-tracing monorepo together.</li> <li><code>group:tomcatMonorepo</code>: Group packages from tomcat monorepo together.</li> <li><code>group:tonicMonorepo</code>: Group packages from tonic monorepo together.</li> <li><code>group:treatMonorepo</code>: Group packages from treat monorepo together.</li> <li><code>group:trpcMonorepo</code>: Group packages from trpc monorepo together.</li> <li><code>group:trust-dnsMonorepo</code>: Group packages from trust-dns monorepo together.</li> <li><code>group:tsoaMonorepo</code>: Group packages from tsoa monorepo together.</li> <li><code>group:tunitMonorepo</code>: Group packages from tunit monorepo together.</li> <li><code>group:turboMonorepo</code>: Group packages from turbo monorepo together.</li> <li><code>group:turfMonorepo</code>: Group packages from turf monorepo together.</li> <li><code>group:typed-signalrMonorepo</code>: Group packages from typed-signalr monorepo together.</li> <li><code>group:typefacesMonorepo</code>: Group packages from typefaces monorepo together.</li> <li><code>group:typescript-eslintMonorepo</code>: Group packages from typescript-eslint monorepo together.</li> <li><code>group:typography-jsMonorepo</code>: Group packages from typography-js monorepo together.</li> <li><code>group:ui5-webcomponentsMonorepo</code>: Group packages from ui5-webcomponents monorepo together.</li> <li><code>group:unheadMonorepo</code>: Group packages from unhead monorepo together.</li> <li><code>group:unocssMonorepo</code>: Group packages from unocss monorepo together.</li> <li><code>group:uppyMonorepo</code>: Group packages from uppy monorepo together.</li> <li><code>group:utoipaMonorepo</code>: Group packages from utoipa monorepo together.</li> <li><code>group:vaadin-hillaMonorepo</code>: Group packages from vaadin-hilla monorepo together.</li> <li><code>group:vaadinWebComponentsMonorepo</code>: Group packages from vaadinWebComponents monorepo together.</li> <li><code>group:vanilla-extractMonorepo</code>: Group packages from vanilla-extract monorepo together.</li> <li><code>group:visxMonorepo</code>: Group packages from visx monorepo together.</li> <li><code>group:vite-plusMonorepo</code>: Group packages from vite-plus monorepo together.</li> <li><code>group:vitestMonorepo</code>: Group packages from vitest monorepo together.</li> <li><code>group:vstestMonorepo</code>: Group packages from vstest monorepo together.</li> <li><code>group:vueMonorepo</code>: Group packages from vue monorepo together.</li> <li><code>group:vue-cliMonorepo</code>: Group packages from vue-cli monorepo together.</li> <li><code>group:vue-language-toolsMonorepo</code>: Group packages from vue-language-tools monorepo together.</li> <li><code>group:vuepressMonorepo</code>: Group packages from vuepress monorepo together.</li> <li><code>group:vueuseMonorepo</code>: Group packages from vueuse monorepo together.</li> <li><code>group:weaselMonorepo</code>: Group packages from weasel monorepo together.</li> <li><code>group:web3-reactMonorepo</code>: Group packages from web3-react monorepo together.</li> <li><code>group:webdriverioMonorepo</code>: Group packages from webdriverio monorepo together.</li> <li><code>group:wolverineMonorepo</code>: Group packages from wolverine monorepo together.</li> <li><code>group:workboxMonorepo</code>: Group packages from workbox monorepo together.</li> <li><code>group:wyw-in-jsMonorepo</code>: Group packages from wyw-in-js monorepo together.</li> <li><code>group:xstateMonorepo</code>: Group packages from xstate monorepo together.</li> <li><code>group:xtermMonorepo</code>: Group packages from xterm monorepo together.</li> <li><code>group:xunit-dotnetMonorepo</code>: Group packages from xunit-dotnet monorepo together.</li> <li><code>group:yamldotnetMonorepo</code>: Group packages from yamldotnet monorepo together.</li> <li><code>group:yarnMonorepo</code>: Group packages from yarn monorepo together.</li> <li><code>group:zag-jsMonorepo</code>: Group packages from zag-js monorepo together.</li> <li><code>group:zxcvbn-tsMonorepo</code>: Group packages from zxcvbn-ts monorepo together.</li> <li><code>group:zxing-netMonorepo</code>: Group packages from zxing-net monorepo together.</li> <li><code>group:hapijsMonorepo</code>: Group packages from hapijs monorepo together.</li> <li><code>group:lodashMonorepo</code>: Group packages from lodash monorepo together.</li> <li><code>group:ngrxMonorepo</code>: Group packages from ngrx monorepo together.</li> <li><code>group:nxMonorepo</code>: Group packages from nx monorepo together.</li> <li><code>group:octokitMonorepo</code>: Group packages from octokit monorepo together.</li> <li><code>group:php-enqueueMonorepo</code>: Group packages from php-enqueue monorepo together.</li> <li><code>group:semantic-releaseMonorepo</code>: Group packages from semantic-release monorepo together.</li> <li><code>group:swcMonorepo</code>: Group packages from swc monorepo together.</li> <li><code>group:twigMonorepo</code>: Group packages from twig monorepo together.</li> <li><code>group:angularmaterialMonorepo</code>: Group packages from angularmaterial monorepo together.</li> <li><code>group:apache-camelMonorepo</code>: Group packages from apache-camel monorepo together.</li> <li><code>group:apache-poiMonorepo</code>: Group packages from apache-poi monorepo together.</li> <li><code>group:aws-java-sdkMonorepo</code>: Group packages from aws-java-sdk monorepo together.</li> <li><code>group:aws-java-sdk-v2Monorepo</code>: Group packages from aws-java-sdk-v2 monorepo together.</li> <li><code>group:axis2Monorepo</code>: Group packages from axis2 monorepo together.</li> <li><code>group:babel6Monorepo</code>: Group packages from babel6 monorepo together.</li> <li><code>group:embroiderMonorepo</code>: Group packages from embroider monorepo together.</li> <li><code>group:forgeMonorepo</code>: Group packages from forge monorepo together.</li> <li><code>group:fullcalendarMonorepo</code>: Group packages from fullcalendar monorepo together.</li> <li><code>group:oracle-databaseMonorepo</code>: Group packages from oracle-database monorepo together.</li> <li><code>group:oxlintMonorepo</code>: Group packages from oxlint monorepo together.</li> <li><code>group:prometheus-simpleclientMonorepo</code>: Group packages from prometheus-simpleclient monorepo together.</li> <li><code>group:russhMonorepo</code>: Group packages from russh monorepo together.</li> <li><code>group:solidMonorepo</code>: Group packages from solid monorepo together.</li> <li><code>group:spfxMonorepo</code>: Group packages from spfx monorepo together.</li> <li><code>group:spockMonorepo</code>: Group packages from spock monorepo together.</li> <li><code>group:syncfusion-dotnetMonorepo</code>: Group packages from syncfusion-dotnet monorepo together.</li> <li><code>group:testing-libraryMonorepo</code>: Group packages from testing-library monorepo together.</li> <li><code>group:wordpressMonorepo</code>: Group packages from wordpress monorepo together.</li> </ol>"},{"location":"presets-helpers/","title":"Helper Presets","text":""},{"location":"presets-helpers/#helpersdisabletypesnodemajor","title":"<code>helpers:disableTypesNodeMajor</code>","text":"<p>Disable <code>major</code> updates to <code>@types/node</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"enabled\": false,\n      \"matchPackageNames\": [\n        \"@types/node\"\n      ],\n      \"matchUpdateTypes\": [\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-helpers/#helpersfollowtypescriptnextarg0-arg1","title":"<code>helpers:followTypescriptNext</code>(<code>&lt;arg0&gt;</code>, <code>&lt;arg1&gt;</code>)","text":"<p>Keep <code>typescript</code> version in sync with the <code>next</code> tag.</p> <pre><code>{\n  \"extends\": [\n    \":followTag(typescript, next)\" // (1)!\n  ]\n}\n</code></pre> <ol> <li><code>:followTag(typescript, next)</code>: For package <code>arg0</code>, strictly follow release tag <code>arg1</code>.</li> </ol>"},{"location":"presets-helpers/#helpersfollowtypescriptrcarg0-arg1","title":"<code>helpers:followTypescriptRc</code>(<code>&lt;arg0&gt;</code>, <code>&lt;arg1&gt;</code>)","text":"<p>Keep <code>typescript</code> version in sync with the <code>rc</code> tag.</p> <pre><code>{\n  \"extends\": [\n    \":followTag(typescript, rc)\" // (1)!\n  ]\n}\n</code></pre> <ol> <li><code>:followTag(typescript, rc)</code>: For package <code>arg0</code>, strictly follow release tag <code>arg1</code>.</li> </ol>"},{"location":"presets-helpers/#helpersforgejodigestchangelogs","title":"<code>helpers:forgejoDigestChangelogs</code>","text":"<p>Ensure that every dependency pinned by digest and sourced from Forgejo contains a link to the commit-to-commit diff</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"changelogUrl\": \"{{sourceUrl}}/compare/{{currentDigest}}..{{newDigest}}\",\n      \"matchDatasources\": [\n        \"forgejo-releases\",\n        \"forgejo-tags\"\n      ],\n      \"matchUpdateTypes\": [\n        \"digest\"\n      ]\n    },\n    {\n      \"changelogUrl\": \"{{sourceUrl}}/compare/{{currentDigest}}..{{newDigest}}\",\n      \"matchDatasources\": [\n        \"git-refs\",\n        \"git-tags\"\n      ],\n      \"matchJsonata\": [\n        \"$detectPlatform(sourceUrl) = 'forgejo'\"\n      ],\n      \"matchUpdateTypes\": [\n        \"digest\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-helpers/#helpersgiteadigestchangelogs","title":"<code>helpers:giteaDigestChangelogs</code>","text":"<p>Ensure that every dependency pinned by digest and sourced from Gitea contains a link to the commit-to-commit diff</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"changelogUrl\": \"{{sourceUrl}}/compare/{{currentDigest}}..{{newDigest}}\",\n      \"matchDatasources\": [\n        \"gitea-releases\",\n        \"gitea-tags\"\n      ],\n      \"matchUpdateTypes\": [\n        \"digest\"\n      ]\n    },\n    {\n      \"changelogUrl\": \"{{sourceUrl}}/compare/{{currentDigest}}..{{newDigest}}\",\n      \"matchDatasources\": [\n        \"git-refs\",\n        \"git-tags\"\n      ],\n      \"matchJsonata\": [\n        \"$detectPlatform(sourceUrl) = 'gitea'\"\n      ],\n      \"matchUpdateTypes\": [\n        \"digest\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-helpers/#helpersgithubdigestchangelogs","title":"<code>helpers:githubDigestChangelogs</code>","text":"<p>Ensure that every dependency pinned by digest and sourced from GitHub.com and Github enterprise contains a link to the commit-to-commit diff</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"changelogUrl\": \"{{sourceUrl}}/compare/{{currentDigest}}..{{newDigest}}\",\n      \"matchDatasources\": [\n        \"github-digest\",\n        \"github-releases\",\n        \"github-tags\"\n      ],\n      \"matchUpdateTypes\": [\n        \"digest\"\n      ]\n    },\n    {\n      \"changelogUrl\": \"{{sourceUrl}}/compare/{{currentDigest}}..{{newDigest}}\",\n      \"matchDatasources\": [\n        \"git-refs\",\n        \"git-tags\"\n      ],\n      \"matchJsonata\": [\n        \"$detectPlatform(sourceUrl) = 'github'\"\n      ],\n      \"matchUpdateTypes\": [\n        \"digest\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-helpers/#helpersgitlabdigestchangelogs","title":"<code>helpers:gitlabDigestChangelogs</code>","text":"<p>Ensure that every dependency pinned by digest and sourced from GitLab.com contains a link to the commit-to-commit diff</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"changelogUrl\": \"{{sourceUrl}}/-/compare/{{currentDigest}}...{{newDigest}}\",\n      \"matchDatasources\": [\n        \"git-refs\",\n        \"git-tags\"\n      ],\n      \"matchJsonata\": [\n        \"$detectPlatform(sourceUrl) = 'gitlab'\"\n      ],\n      \"matchUpdateTypes\": [\n        \"digest\"\n      ]\n    },\n    {\n      \"changelogUrl\": \"{{sourceUrl}}/-/compare/{{currentDigest}}...{{newDigest}}\",\n      \"matchDatasources\": [\n        \"gitlab-releases\",\n        \"gitlab-tags\"\n      ],\n      \"matchUpdateTypes\": [\n        \"digest\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-helpers/#helpersgoxpackageschangeloglink","title":"<code>helpers:goXPackagesChangelogLink</code>","text":"<p>Correctly link to the source code for golang.org/x packages</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchManagers\": [\n        \"gomod\"\n      ],\n      \"matchUpdateTypes\": [\n        \"major\",\n        \"minor\",\n        \"patch\"\n      ],\n      \"prBodyDefinitions\": {\n        \"Change\": \"{{#if (containsString depName 'golang.org/x/')}}[`{{{displayFrom}}}` \u2192 `{{{displayTo}}}`](https://cs.opensource.google/{{{replace '^golang\\\\.org' 'go' depName}}}/+/refs/tags/{{{currentValue}}}...refs/tags/{{{newValue}}}){{else}}`{{{displayFrom}}}` \u2192 `{{{displayTo}}}`{{/if}}\"\n      }\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-helpers/#helpersgoxpackagesnamelink","title":"<code>helpers:goXPackagesNameLink</code>","text":"<p>Link to pkg.go.dev/... for golang.org/x packages' title</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchManagers\": [\n        \"gomod\"\n      ],\n      \"prBodyDefinitions\": {\n        \"Package\": \"{{#if (containsString depName 'golang.org/x/')}}[{{{depName}}}](https://pkg.go.dev/{{{depName}}}){{else}}{{{depNameLinked}}}{{/if}}\"\n      }\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-helpers/#helperspingithubactiondigests","title":"<code>helpers:pinGitHubActionDigests</code>","text":"<p>Pin <code>github-action</code> digests.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDepTypes\": [\n        \"action\",\n        \"workflow\"\n      ],\n      \"pinDigests\": true\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-helpers/#helperspingithubactiondigeststosemver","title":"<code>helpers:pinGitHubActionDigestsToSemver</code>","text":"<p>Convert pinned GitHub Action digests to SemVer.</p> <pre><code>{\n  \"extends\": [\n    \"helpers:pinGitHubActionDigests\" // (1)!\n  ],\n  \"packageRules\": [\n    {\n      \"extractVersion\": \"^(?&lt;version&gt;v?\\\\d+\\\\.\\\\d+\\\\.\\\\d+)$\",\n      \"matchDepTypes\": [\n        \"action\",\n        \"workflow\"\n      ],\n      \"versioning\": \"regex:^v?(?&lt;major&gt;\\\\d+)(\\\\.(?&lt;minor&gt;\\\\d+)\\\\.(?&lt;patch&gt;\\\\d+))?$\"\n    }\n  ]\n}\n</code></pre> <ol> <li><code>helpers:pinGitHubActionDigests</code>: Pin <code>github-action</code> digests.</li> </ol>"},{"location":"presets-helpers/#helpersrenovatechangelog","title":"<code>helpers:renovateChangelog</code>","text":"<p>Provide a link to octochangelog's improved breakdown for Renovate's changelogs</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchSourceUrls\": [\n        \"https://github.com/renovatebot/renovate\"\n      ],\n      \"matchUpdateTypes\": [\n        \"major\",\n        \"minor\",\n        \"patch\"\n      ],\n      \"prBodyDefinitions\": {\n        \"Change\": \"[`{{{displayFrom}}}` \u2192 `{{{displayTo}}}`](https://octochangelog.com/compare?repo=renovatebot%2Frenovate&amp;from={{ currentVersion }}&amp;to={{ newVersion }})\"\n      }\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-mergeConfidence/","title":"MergeConfidence Presets","text":""},{"location":"presets-mergeConfidence/#mergeconfidenceage-confidence-badges","title":"<code>mergeConfidence:age-confidence-badges</code>","text":"<p>Show only the Age and Confidence Merge Confidence badges for pull requests.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"go\",\n        \"maven\",\n        \"npm\",\n        \"nuget\",\n        \"packagist\",\n        \"pypi\",\n        \"rubygems\"\n      ],\n      \"matchUpdateTypes\": [\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ],\n      \"prBodyColumns\": [\n        \"Package\",\n        \"Change\",\n        \"Age\",\n        \"Confidence\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-mergeConfidence/#mergeconfidenceall-badges","title":"<code>mergeConfidence:all-badges</code>","text":"<p>Show all Merge Confidence badges for pull requests.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"go\",\n        \"maven\",\n        \"npm\",\n        \"nuget\",\n        \"packagist\",\n        \"pypi\",\n        \"rubygems\"\n      ],\n      \"matchUpdateTypes\": [\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ],\n      \"prBodyColumns\": [\n        \"Package\",\n        \"Change\",\n        \"Age\",\n        \"Adoption\",\n        \"Passing\",\n        \"Confidence\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/","title":"Monorepo Presets","text":""},{"location":"presets-monorepo/#monorepoaccounts","title":"<code>monorepo:accounts</code>","text":"<p>accounts monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/accounts-js/accounts\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoacot","title":"<code>monorepo:acot</code>","text":"<p>acot monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/acot-a11y/acot\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoag-grid","title":"<code>monorepo:ag-grid</code>","text":"<p>ag-grid monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/ag-grid/ag-grid\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoalgolia-instantsearch","title":"<code>monorepo:algolia-instantsearch</code>","text":"<p>algolia-instantsearch monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/algolia/instantsearch\",\n    \"https://github.com/algolia/instantsearch.js\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoalgolia-react-instantsearch","title":"<code>monorepo:algolia-react-instantsearch</code>","text":"<p>algolia-react-instantsearch monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/algolia/react-instantsearch\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoalgoliasearch-autocomplete","title":"<code>monorepo:algoliasearch-autocomplete</code>","text":"<p>algoliasearch-autocomplete monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/algolia/autocomplete\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoalgoliasearch-client-javascript","title":"<code>monorepo:algoliasearch-client-javascript</code>","text":"<p>algoliasearch-client-javascript monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/algolia/algoliasearch-client-javascript\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoanalog","title":"<code>monorepo:analog</code>","text":"<p>analog monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/analogjs/analog\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoangular","title":"<code>monorepo:angular</code>","text":"<p>angular monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/angular/angular\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoangular-cli","title":"<code>monorepo:angular-cli</code>","text":"<p>angular-cli monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/angular/angular-cli\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoangular-eslint","title":"<code>monorepo:angular-eslint</code>","text":"<p>angular-eslint monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/angular-eslint/angular-eslint\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoangularfire","title":"<code>monorepo:angularfire</code>","text":"<p>angularfire monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/angular/angularfire\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoangularjs","title":"<code>monorepo:angularjs</code>","text":"<p>angularjs monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/angular/angular.js\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoapache-lucene","title":"<code>monorepo:apache-lucene</code>","text":"<p>apache-lucene monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://gitbox.apache.org/repos/asf?p=lucene.git\",\n    \"https://github.com/apache/lucene\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoapollo-server","title":"<code>monorepo:apollo-server</code>","text":"<p>apollo-server monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/apollographql/apollo-server\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoapolloclient","title":"<code>monorepo:apolloclient</code>","text":"<p>apolloclient monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/apollographql/apollo-client\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoappium","title":"<code>monorepo:appium</code>","text":"<p>appium monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/appium/appium\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoapplicationinsights-dotnet","title":"<code>monorepo:applicationinsights-dotnet</code>","text":"<p>applicationinsights-dotnet monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Microsoft/ApplicationInsights-dotnet\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoarcusbackground-jobs","title":"<code>monorepo:arcus.background-jobs</code>","text":"<p>arcus.background-jobs monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/arcus-azure/arcus.backgroundjobs\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoarcusevent-grid","title":"<code>monorepo:arcus.event-grid</code>","text":"<p>arcus.event-grid monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/arcus-azure/arcus.eventgrid\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoarcusmessaging","title":"<code>monorepo:arcus.messaging</code>","text":"<p>arcus.messaging monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/arcus-azure/arcus.messaging\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoarcusobservability","title":"<code>monorepo:arcus.observability</code>","text":"<p>arcus.observability monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/arcus-azure/arcus.observability\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoarcussecurity","title":"<code>monorepo:arcus.security</code>","text":"<p>arcus.security monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/arcus-azure/arcus.security\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoarcuswebapi","title":"<code>monorepo:arcus.webapi</code>","text":"<p>arcus.webapi monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/arcus-azure/arcus.webapi\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoarrow-kt","title":"<code>monorepo:arrow-kt</code>","text":"<p>arrow-kt monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/arrow-kt/arrow\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoarrow-rs","title":"<code>monorepo:arrow-rs</code>","text":"<p>arrow-rs monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/apache/arrow-rs\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoaspire","title":"<code>monorepo:aspire</code>","text":"<p>aspire monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/dotnet/aspire\",\n    \"https://github.com/microsoft/aspire\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoaspnet-aspnetwebstack","title":"<code>monorepo:aspnet aspnetwebstack</code>","text":"<p>aspnet aspnetwebstack monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/aspnet/AspNetWebStack\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoaspnet-extensions","title":"<code>monorepo:aspnet extensions</code>","text":"<p>aspnet extensions monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/aspnet/Extensions\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoaspnet-api-versioning","title":"<code>monorepo:aspnet-api-versioning</code>","text":"<p>aspnet-api-versioning monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Microsoft/aspnet-api-versioning\",\n    \"https://github.com/dotnet/aspnet-api-versioning\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoaspnet-health-checks","title":"<code>monorepo:aspnet-health-checks</code>","text":"<p>aspnet-health-checks monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/xabaril/AspNetCore.Diagnostics.HealthChecks\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoaspnet-security-oauth-providers","title":"<code>monorepo:aspnet-security-oauth-providers</code>","text":"<p>aspnet-security-oauth-providers monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/aspnet-contrib/AspNet.Security.OAuth.Providers\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoastro","title":"<code>monorepo:astro</code>","text":"<p>astro monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/withastro/astro\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoauto","title":"<code>monorepo:auto</code>","text":"<p>auto monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/intuit/auto\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoautofixture","title":"<code>monorepo:autofixture</code>","text":"<p>autofixture monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/AutoFixture/AutoFixture\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoautomapper-dotnet","title":"<code>monorepo:automapper-dotnet</code>","text":"<p>automapper-dotnet monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/AutoMapper/AutoMapper\",\n    \"https://github.com/AutoMapper/AutoMapper.Extensions.Microsoft.DependencyInjection\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoavalonia","title":"<code>monorepo:avalonia</code>","text":"<p>avalonia monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/AvaloniaUI/Avalonia\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoaws-cdk","title":"<code>monorepo:aws-cdk</code>","text":"<p>aws-cdk monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/aws/aws-cdk\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoaws-lambda-dotnet","title":"<code>monorepo:aws-lambda-dotnet</code>","text":"<p>aws-lambda-dotnet monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/aws/aws-lambda-dotnet\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoaws-lambda-powertools-typescript","title":"<code>monorepo:aws-lambda-powertools-typescript</code>","text":"<p>aws-lambda-powertools-typescript monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/awslabs/aws-lambda-powertools-typescript\",\n    \"https://github.com/aws-powertools/powertools-lambda-typescript\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoaws-sdk-client-mock","title":"<code>monorepo:aws-sdk-client-mock</code>","text":"<p>aws-sdk-client-mock monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/m-radzikowski/aws-sdk-client-mock\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoaws-sdk-go","title":"<code>monorepo:aws-sdk-go</code>","text":"<p>aws-sdk-go monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/aws/aws-sdk-go\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoaws-sdk-go-v2","title":"<code>monorepo:aws-sdk-go-v2</code>","text":"<p>aws-sdk-go-v2 monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/aws/aws-sdk-go-v2\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoaws-sdk-js-v3","title":"<code>monorepo:aws-sdk-js-v3</code>","text":"<p>aws-sdk-js-v3 monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/aws/aws-sdk-js-v3\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoaws-sdk-net","title":"<code>monorepo:aws-sdk-net</code>","text":"<p>aws-sdk-net monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/aws/aws-sdk-net\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoaws-sdk-rust","title":"<code>monorepo:aws-sdk-rust</code>","text":"<p>aws-sdk-rust monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/smithy-lang/smithy-rs\",\n    \"https://github.com/awslabs/smithy-rs\",\n    \"https://github.com/awslabs/aws-sdk-rust\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoawsappsync","title":"<code>monorepo:awsappsync</code>","text":"<p>awsappsync monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/awslabs/aws-mobile-appsync-sdk-js\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoaxum","title":"<code>monorepo:axum</code>","text":"<p>axum monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/tokio-rs/axum\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-azure-libraries-for-net","title":"<code>monorepo:azure azure-libraries-for-net</code>","text":"<p>azure azure-libraries-for-net monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Azure/azure-libraries-for-net\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-azure-sdk-for-net","title":"<code>monorepo:azure azure-sdk-for-net</code>","text":"<p>azure azure-sdk-for-net monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Azure/azure-sdk-for-net\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-azure-storage-net","title":"<code>monorepo:azure azure-storage-net</code>","text":"<p>azure azure-storage-net monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Azure/azure-storage-net\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-ad-microsoft-authentication-library-for-android","title":"<code>monorepo:azure-ad-microsoft-authentication-library-for-android</code>","text":"<p>azure-ad-microsoft-authentication-library-for-android monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/AzureAD/microsoft-authentication-library-for-android\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-ad-microsoft-authentication-library-for-dotnet","title":"<code>monorepo:azure-ad-microsoft-authentication-library-for-dotnet</code>","text":"<p>azure-ad-microsoft-authentication-library-for-dotnet monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/AzureAD/microsoft-authentication-library-for-dotnet\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-ad-microsoft-authentication-library-for-go","title":"<code>monorepo:azure-ad-microsoft-authentication-library-for-go</code>","text":"<p>azure-ad-microsoft-authentication-library-for-go monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/AzureAD/microsoft-authentication-library-for-go\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-ad-microsoft-authentication-library-for-java","title":"<code>monorepo:azure-ad-microsoft-authentication-library-for-java</code>","text":"<p>azure-ad-microsoft-authentication-library-for-java monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/AzureAD/microsoft-authentication-library-for-java\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-ad-microsoft-authentication-library-for-js","title":"<code>monorepo:azure-ad-microsoft-authentication-library-for-js</code>","text":"<p>azure-ad-microsoft-authentication-library-for-js monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/AzureAD/microsoft-authentication-library-for-js\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-ad-microsoft-authentication-library-for-objc","title":"<code>monorepo:azure-ad-microsoft-authentication-library-for-objc</code>","text":"<p>azure-ad-microsoft-authentication-library-for-objc monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/AzureAD/microsoft-authentication-library-for-objc\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-ad-microsoft-authentication-library-for-python","title":"<code>monorepo:azure-ad-microsoft-authentication-library-for-python</code>","text":"<p>azure-ad-microsoft-authentication-library-for-python monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/AzureAD/microsoft-authentication-library-for-python\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-functions-dotnet-worker","title":"<code>monorepo:azure-functions-dotnet-worker</code>","text":"<p>azure-functions-dotnet-worker monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Azure/azure-functions-dotnet-worker\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-sdk-for-android","title":"<code>monorepo:azure-sdk-for-android</code>","text":"<p>azure-sdk-for-android monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Azure/azure-sdk-for-android\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-sdk-for-c","title":"<code>monorepo:azure-sdk-for-c</code>","text":"<p>azure-sdk-for-c monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Azure/azure-sdk-for-c\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-sdk-for-cpp","title":"<code>monorepo:azure-sdk-for-cpp</code>","text":"<p>azure-sdk-for-cpp monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Azure/azure-sdk-for-cpp\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-sdk-for-go","title":"<code>monorepo:azure-sdk-for-go</code>","text":"<p>azure-sdk-for-go monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Azure/azure-sdk-for-go\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-sdk-for-ios","title":"<code>monorepo:azure-sdk-for-ios</code>","text":"<p>azure-sdk-for-ios monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Azure/azure-sdk-for-ios\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-sdk-for-java","title":"<code>monorepo:azure-sdk-for-java</code>","text":"<p>azure-sdk-for-java monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Azure/azure-sdk-for-java\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-sdk-for-js","title":"<code>monorepo:azure-sdk-for-js</code>","text":"<p>azure-sdk-for-js monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Azure/azure-sdk-for-js\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-sdk-for-python","title":"<code>monorepo:azure-sdk-for-python</code>","text":"<p>azure-sdk-for-python monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Azure/azure-sdk-for-python\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoazure-sdk-for-rust","title":"<code>monorepo:azure-sdk-for-rust</code>","text":"<p>azure-sdk-for-rust monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Azure/azure-sdk-for-rust\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepobabel","title":"<code>monorepo:babel</code>","text":"<p>babel monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/babel/babel\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepobackstage","title":"<code>monorepo:backstage</code>","text":"<p>backstage monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/backstage/backstage\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepobaset","title":"<code>monorepo:baset</code>","text":"<p>baset monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/igmat/baset\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepobetter-auth","title":"<code>monorepo:better-auth</code>","text":"<p>better-auth monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/better-auth/better-auth\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepobrave","title":"<code>monorepo:brave</code>","text":"<p>brave monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/openzipkin/brave\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepobugsnag-js","title":"<code>monorepo:bugsnag-js</code>","text":"<p>bugsnag-js monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/bugsnag/bugsnag-js\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepobull-board","title":"<code>monorepo:bull-board</code>","text":"<p>bull-board monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/felixmosh/bull-board\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepocake","title":"<code>monorepo:cake</code>","text":"<p>cake monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/cake-build/cake\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepocake-issues","title":"<code>monorepo:cake-issues</code>","text":"<p>cake-issues monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/cake-contrib/Cake.Issues\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepocapacitor","title":"<code>monorepo:capacitor</code>","text":"<p>capacitor monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/ionic-team/capacitor\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepocedar","title":"<code>monorepo:cedar</code>","text":"<p>cedar monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/cedarjs/cedar\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepochakra-ui","title":"<code>monorepo:chakra-ui</code>","text":"<p>chakra-ui monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/chakra-ui/chakra-ui\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepochromely","title":"<code>monorepo:chromely</code>","text":"<p>chromely monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/chromelyapps/Chromely\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepocitation-js","title":"<code>monorepo:citation-js</code>","text":"<p>citation-js monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/citation-js/citation-js\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepockeditor","title":"<code>monorepo:ckeditor</code>","text":"<p>ckeditor monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/ckeditor/ckeditor5\",\n    \"https://github.com/ckeditor/ckeditor5-premium-features\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoclarity","title":"<code>monorepo:clarity</code>","text":"<p>clarity monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"/^@cds//\",\n    \"/^@clr//\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoclearscript","title":"<code>monorepo:clearscript</code>","text":"<p>clearscript monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/microsoft/ClearScript\",\n    \"https://github.com/Microsoft/ClearScript\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepocommitlint","title":"<code>monorepo:commitlint</code>","text":"<p>commitlint monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/conventional-changelog/commitlint\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoconfect","title":"<code>monorepo:confect</code>","text":"<p>confect monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/rjdellecese/confect\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoconform","title":"<code>monorepo:conform</code>","text":"<p>conform monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/edmundhung/conform\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepocontentful-rich-text","title":"<code>monorepo:contentful-rich-text</code>","text":"<p>contentful-rich-text monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/contentful/rich-text\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoconvex","title":"<code>monorepo:convex</code>","text":"<p>convex monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/get-convex/convex-backend\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepocspell","title":"<code>monorepo:cspell</code>","text":"<p>cspell monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/streetsidesoftware/cspell\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodatadog-browser-sdk","title":"<code>monorepo:datadog-browser-sdk</code>","text":"<p>datadog-browser-sdk monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/DataDog/browser-sdk\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodatafusion","title":"<code>monorepo:datafusion</code>","text":"<p>datafusion monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/apache/datafusion\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodatatables-net","title":"<code>monorepo:datatables-net</code>","text":"<p>datatables-net monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/DataTables/DataTablesSrc\",\n    \"https://github.com/DataTables/Dist-DataTables\",\n    \"https://github.com/DataTables/Dist-DataTables-Bootstrap\",\n    \"https://github.com/DataTables/Dist-DataTables-Bootstrap4\",\n    \"https://github.com/DataTables/Dist-DataTables-Bootstrap5\",\n    \"https://github.com/DataTables/Dist-DataTables-Bulma\",\n    \"https://github.com/DataTables/Dist-DataTables-DataTables\",\n    \"https://github.com/DataTables/Dist-DataTables-Foundation\",\n    \"https://github.com/DataTables/Dist-DataTables-SemanticUI\",\n    \"https://github.com/DataTables/Dist-DataTables-jQueryUI\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodatatables-net-autofill","title":"<code>monorepo:datatables-net-autofill</code>","text":"<p>datatables-net-autofill monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/DataTables/AutoFill\",\n    \"https://github.com/DataTables/Dist-DataTables-AutoFill\",\n    \"https://github.com/DataTables/Dist-DataTables-AutoFill-Bootstrap\",\n    \"https://github.com/DataTables/Dist-DataTables-AutoFill-Bootstrap4\",\n    \"https://github.com/DataTables/Dist-DataTables-AutoFill-Bootstrap5\",\n    \"https://github.com/DataTables/Dist-DataTables-AutoFill-Bulma\",\n    \"https://github.com/DataTables/Dist-DataTables-AutoFill-DataTables\",\n    \"https://github.com/DataTables/Dist-DataTables-AutoFill-Foundation\",\n    \"https://github.com/DataTables/Dist-DataTables-AutoFill-SemanticUI\",\n    \"https://github.com/DataTables/Dist-DataTables-AutoFill-jQueryUI\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodatatables-net-buttons","title":"<code>monorepo:datatables-net-buttons</code>","text":"<p>datatables-net-buttons monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/DataTables/Buttons\",\n    \"https://github.com/DataTables/Dist-DataTables-Buttons\",\n    \"https://github.com/DataTables/Dist-DataTables-Buttons-Bootstrap\",\n    \"https://github.com/DataTables/Dist-DataTables-Buttons-Bootstrap4\",\n    \"https://github.com/DataTables/Dist-DataTables-Buttons-Bootstrap5\",\n    \"https://github.com/DataTables/Dist-DataTables-Buttons-Bulma\",\n    \"https://github.com/DataTables/Dist-DataTables-Buttons-DataTables\",\n    \"https://github.com/DataTables/Dist-DataTables-Buttons-Foundation\",\n    \"https://github.com/DataTables/Dist-DataTables-Buttons-SemanticUI\",\n    \"https://github.com/DataTables/Dist-DataTables-Buttons-jQueryUI\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodatatables-net-colreorder","title":"<code>monorepo:datatables-net-colreorder</code>","text":"<p>datatables-net-colreorder monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/DataTables/ColReorder\",\n    \"https://github.com/DataTables/Dist-DataTables-ColReorder\",\n    \"https://github.com/DataTables/Dist-DataTables-ColReorder-Bootstrap\",\n    \"https://github.com/DataTables/Dist-DataTables-ColReorder-Bootstrap4\",\n    \"https://github.com/DataTables/Dist-DataTables-ColReorder-Bootstrap5\",\n    \"https://github.com/DataTables/Dist-DataTables-ColReorder-Bulma\",\n    \"https://github.com/DataTables/Dist-DataTables-ColReorder-DataTables\",\n    \"https://github.com/DataTables/Dist-DataTables-ColReorder-Foundation\",\n    \"https://github.com/DataTables/Dist-DataTables-ColReorder-SemanticUI\",\n    \"https://github.com/DataTables/Dist-DataTables-ColReorder-jQueryUI\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodatatables-net-fixedcolumns","title":"<code>monorepo:datatables-net-fixedcolumns</code>","text":"<p>datatables-net-fixedcolumns monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/DataTables/FixedColumns\",\n    \"https://github.com/DataTables/Dist-DataTables-FixedColumns\",\n    \"https://github.com/DataTables/Dist-DataTables-FixedColumns-Bootstrap\",\n    \"https://github.com/DataTables/Dist-DataTables-FixedColumns-Bootstrap4\",\n    \"https://github.com/DataTables/Dist-DataTables-FixedColumns-Bootstrap5\",\n    \"https://github.com/DataTables/Dist-DataTables-FixedColumns-Bulma\",\n    \"https://github.com/DataTables/Dist-DataTables-FixedColumns-DataTables\",\n    \"https://github.com/DataTables/Dist-DataTables-FixedColumns-Foundation\",\n    \"https://github.com/DataTables/Dist-DataTables-FixedColumns-SemanticUI\",\n    \"https://github.com/DataTables/Dist-DataTables-FixedColumns-jQueryUI\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodatatables-net-fixedheader","title":"<code>monorepo:datatables-net-fixedheader</code>","text":"<p>datatables-net-fixedheader monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/DataTables/FixedHeader\",\n    \"https://github.com/DataTables/Dist-DataTables-FixedHeader\",\n    \"https://github.com/DataTables/Dist-DataTables-FixedHeader-Bootstrap\",\n    \"https://github.com/DataTables/Dist-DataTables-FixedHeader-Bootstrap4\",\n    \"https://github.com/DataTables/Dist-DataTables-FixedHeader-Bootstrap5\",\n    \"https://github.com/DataTables/Dist-DataTables-FixedHeader-Bulma\",\n    \"https://github.com/DataTables/Dist-DataTables-FixedHeader-DataTables\",\n    \"https://github.com/DataTables/Dist-DataTables-FixedHeader-Foundation\",\n    \"https://github.com/DataTables/Dist-DataTables-FixedHeader-SemanticUI\",\n    \"https://github.com/DataTables/Dist-DataTables-FixedHeader-jQueryUI\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodatatables-net-keytable","title":"<code>monorepo:datatables-net-keytable</code>","text":"<p>datatables-net-keytable monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/DataTables/KeyTable\",\n    \"https://github.com/DataTables/Dist-DataTables-KeyTable\",\n    \"https://github.com/DataTables/Dist-DataTables-KeyTable-Bootstrap\",\n    \"https://github.com/DataTables/Dist-DataTables-KeyTable-Bootstrap4\",\n    \"https://github.com/DataTables/Dist-DataTables-KeyTable-Bootstrap5\",\n    \"https://github.com/DataTables/Dist-DataTables-KeyTable-Bulma\",\n    \"https://github.com/DataTables/Dist-DataTables-KeyTable-DataTables\",\n    \"https://github.com/DataTables/Dist-DataTables-KeyTable-Foundation\",\n    \"https://github.com/DataTables/Dist-DataTables-KeyTable-SemanticUI\",\n    \"https://github.com/DataTables/Dist-DataTables-KeyTable-jQueryUI\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodatatables-net-responsive","title":"<code>monorepo:datatables-net-responsive</code>","text":"<p>datatables-net-responsive monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/DataTables/Responsive\",\n    \"https://github.com/DataTables/Dist-DataTables-Responsive\",\n    \"https://github.com/DataTables/Dist-DataTables-Responsive-Bootstrap\",\n    \"https://github.com/DataTables/Dist-DataTables-Responsive-Bootstrap4\",\n    \"https://github.com/DataTables/Dist-DataTables-Responsive-Bootstrap5\",\n    \"https://github.com/DataTables/Dist-DataTables-Responsive-Bulma\",\n    \"https://github.com/DataTables/Dist-DataTables-Responsive-DataTables\",\n    \"https://github.com/DataTables/Dist-DataTables-Responsive-Foundation\",\n    \"https://github.com/DataTables/Dist-DataTables-Responsive-SemanticUI\",\n    \"https://github.com/DataTables/Dist-DataTables-Responsive-jQueryUI\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodatatables-net-rowgroup","title":"<code>monorepo:datatables-net-rowgroup</code>","text":"<p>datatables-net-rowgroup monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/DataTables/RowGroup\",\n    \"https://github.com/DataTables/Dist-DataTables-RowGroup\",\n    \"https://github.com/DataTables/Dist-DataTables-RowGroup-Bootstrap\",\n    \"https://github.com/DataTables/Dist-DataTables-RowGroup-Bootstrap4\",\n    \"https://github.com/DataTables/Dist-DataTables-RowGroup-Bootstrap5\",\n    \"https://github.com/DataTables/Dist-DataTables-RowGroup-Bulma\",\n    \"https://github.com/DataTables/Dist-DataTables-RowGroup-DataTables\",\n    \"https://github.com/DataTables/Dist-DataTables-RowGroup-Foundation\",\n    \"https://github.com/DataTables/Dist-DataTables-RowGroup-SemanticUI\",\n    \"https://github.com/DataTables/Dist-DataTables-RowGroup-jQueryUI\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodatatables-net-rowreorder","title":"<code>monorepo:datatables-net-rowreorder</code>","text":"<p>datatables-net-rowreorder monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/DataTables/RowReorder\",\n    \"https://github.com/DataTables/Dist-DataTables-RowReorder\",\n    \"https://github.com/DataTables/Dist-DataTables-RowReorder-Bootstrap\",\n    \"https://github.com/DataTables/Dist-DataTables-RowReorder-Bootstrap4\",\n    \"https://github.com/DataTables/Dist-DataTables-RowReorder-Bootstrap5\",\n    \"https://github.com/DataTables/Dist-DataTables-RowReorder-Bulma\",\n    \"https://github.com/DataTables/Dist-DataTables-RowReorder-DataTables\",\n    \"https://github.com/DataTables/Dist-DataTables-RowReorder-Foundation\",\n    \"https://github.com/DataTables/Dist-DataTables-RowReorder-SemanticUI\",\n    \"https://github.com/DataTables/Dist-DataTables-RowReorder-jQueryUI\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodatatables-net-scroller","title":"<code>monorepo:datatables-net-scroller</code>","text":"<p>datatables-net-scroller monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/DataTables/Scroller\",\n    \"https://github.com/DataTables/Dist-DataTables-Scroller\",\n    \"https://github.com/DataTables/Dist-DataTables-Scroller-Bootstrap\",\n    \"https://github.com/DataTables/Dist-DataTables-Scroller-Bootstrap4\",\n    \"https://github.com/DataTables/Dist-DataTables-Scroller-Bootstrap5\",\n    \"https://github.com/DataTables/Dist-DataTables-Scroller-Bulma\",\n    \"https://github.com/DataTables/Dist-DataTables-Scroller-DataTables\",\n    \"https://github.com/DataTables/Dist-DataTables-Scroller-Foundation\",\n    \"https://github.com/DataTables/Dist-DataTables-Scroller-SemanticUI\",\n    \"https://github.com/DataTables/Dist-DataTables-Scroller-jQueryUI\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodatatables-net-searchbuilder","title":"<code>monorepo:datatables-net-searchbuilder</code>","text":"<p>datatables-net-searchbuilder monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/DataTables/SearchBuilder\",\n    \"https://github.com/DataTables/Dist-DataTables-SearchBuilder\",\n    \"https://github.com/DataTables/Dist-DataTables-SearchBuilder-Bootstrap\",\n    \"https://github.com/DataTables/Dist-DataTables-SearchBuilder-Bootstrap4\",\n    \"https://github.com/DataTables/Dist-DataTables-SearchBuilder-Bootstrap5\",\n    \"https://github.com/DataTables/Dist-DataTables-SearchBuilder-Bulma\",\n    \"https://github.com/DataTables/Dist-DataTables-SearchBuilder-DataTables\",\n    \"https://github.com/DataTables/Dist-DataTables-SearchBuilder-Foundation\",\n    \"https://github.com/DataTables/Dist-DataTables-SearchBuilder-SemanticUI\",\n    \"https://github.com/DataTables/Dist-DataTables-SearchBuilder-jQueryUI\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodatatables-net-searchpanes","title":"<code>monorepo:datatables-net-searchpanes</code>","text":"<p>datatables-net-searchpanes monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/DataTables/SearchPanes\",\n    \"https://github.com/DataTables/Dist-DataTables-SearchPanes\",\n    \"https://github.com/DataTables/Dist-DataTables-SearchPanes-Bootstrap\",\n    \"https://github.com/DataTables/Dist-DataTables-SearchPanes-Bootstrap4\",\n    \"https://github.com/DataTables/Dist-DataTables-SearchPanes-Bootstrap5\",\n    \"https://github.com/DataTables/Dist-DataTables-SearchPanes-Bulma\",\n    \"https://github.com/DataTables/Dist-DataTables-SearchPanes-DataTables\",\n    \"https://github.com/DataTables/Dist-DataTables-SearchPanes-Foundation\",\n    \"https://github.com/DataTables/Dist-DataTables-SearchPanes-SemanticUI\",\n    \"https://github.com/DataTables/Dist-DataTables-SearchPanes-jQueryUI\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodatatables-net-select","title":"<code>monorepo:datatables-net-select</code>","text":"<p>datatables-net-select monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/DataTables/Select\",\n    \"https://github.com/DataTables/Dist-DataTables-Select\",\n    \"https://github.com/DataTables/Dist-DataTables-Select-Bootstrap\",\n    \"https://github.com/DataTables/Dist-DataTables-Select-Bootstrap4\",\n    \"https://github.com/DataTables/Dist-DataTables-Select-Bootstrap5\",\n    \"https://github.com/DataTables/Dist-DataTables-Select-Bulma\",\n    \"https://github.com/DataTables/Dist-DataTables-Select-DataTables\",\n    \"https://github.com/DataTables/Dist-DataTables-Select-Foundation\",\n    \"https://github.com/DataTables/Dist-DataTables-Select-SemanticUI\",\n    \"https://github.com/DataTables/Dist-DataTables-Select-jQueryUI\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodatatables-net-staterestore","title":"<code>monorepo:datatables-net-staterestore</code>","text":"<p>datatables-net-staterestore monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/DataTables/StateRestore\",\n    \"https://github.com/DataTables/Dist-DataTables-StateRestore\",\n    \"https://github.com/DataTables/Dist-DataTables-StateRestore-Bootstrap\",\n    \"https://github.com/DataTables/Dist-DataTables-StateRestore-Bootstrap4\",\n    \"https://github.com/DataTables/Dist-DataTables-StateRestore-Bootstrap5\",\n    \"https://github.com/DataTables/Dist-DataTables-StateRestore-Bulma\",\n    \"https://github.com/DataTables/Dist-DataTables-StateRestore-DataTables\",\n    \"https://github.com/DataTables/Dist-DataTables-StateRestore-Foundation\",\n    \"https://github.com/DataTables/Dist-DataTables-StateRestore-SemanticUI\",\n    \"https://github.com/DataTables/Dist-DataTables-StateRestore-jQueryUI\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodate-io","title":"<code>monorepo:date-io</code>","text":"<p>date-io monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/dmtrKovalenko/date-io\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodeck-gl","title":"<code>monorepo:deck-gl</code>","text":"<p>deck-gl monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/visgl/deck.gl\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodeno","title":"<code>monorepo:deno</code>","text":"<p>deno monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/denoland/deno\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodevextreme-reactive","title":"<code>monorepo:devextreme-reactive</code>","text":"<p>devextreme-reactive monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/DevExpress/devextreme-reactive\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodnd-kit","title":"<code>monorepo:dnd-kit</code>","text":"<p>dnd-kit monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/clauderic/dnd-kit\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodocusaurus","title":"<code>monorepo:docusaurus</code>","text":"<p>docusaurus monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/facebook/docusaurus\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodot-swashbuckle","title":"<code>monorepo:dot-swashbuckle</code>","text":"<p>dot-swashbuckle monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Havunen/DotSwashbuckle\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodotnet","title":"<code>monorepo:dotnet</code>","text":"<p>dotnet monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://asp.net/\",\n    \"https://docs.microsoft.com/ef/core/\",\n    \"https://dot.net/\",\n    \"https://github.com/dotnet/aspnetcore\",\n    \"https://github.com/dotnet/dotnet\",\n    \"https://github.com/dotnet/efcore\",\n    \"https://github.com/dotnet/extensions\",\n    \"https://github.com/dotnet/fsharp\",\n    \"https://github.com/dotnet/maui\",\n    \"https://github.com/dotnet/msbuild\",\n    \"https://github.com/dotnet/roslyn\",\n    \"https://github.com/dotnet/runtime\",\n    \"https://github.com/dotnet/scaffolding\",\n    \"https://github.com/dotnet/sdk\",\n    \"https://github.com/dotnet/windowsdesktop\",\n    \"https://github.com/dotnet/winforms\",\n    \"https://github.com/dotnet/wpf\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodotnet-azure-ad-identitymodel-extensions","title":"<code>monorepo:dotnet-azure-ad-identitymodel-extensions</code>","text":"<p>dotnet-azure-ad-identitymodel-extensions monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodotnet-azure-ad-microsoft-identity-web","title":"<code>monorepo:dotnet-azure-ad-microsoft-identity-web</code>","text":"<p>dotnet-azure-ad-microsoft-identity-web monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/AzureAD/microsoft-identity-web\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodotnet-wcf","title":"<code>monorepo:dotnet-wcf</code>","text":"<p>dotnet-wcf monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/dotnet/wcf\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodotnetcore-cap","title":"<code>monorepo:dotnetcore-cap</code>","text":"<p>dotnetcore-cap monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/dotnetcore/CAP\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepodropwizard","title":"<code>monorepo:dropwizard</code>","text":"<p>dropwizard monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/dropwizard/dropwizard\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoduende-identityserver","title":"<code>monorepo:duende-identityserver</code>","text":"<p>duende-identityserver monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/DuendeSoftware/IdentityServer\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoeffect","title":"<code>monorepo:effect</code>","text":"<p>effect monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Effect-TS/effect-smol\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoelastic-apm-agent-rum-js","title":"<code>monorepo:elastic-apm-agent-rum-js</code>","text":"<p>elastic-apm-agent-rum-js monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/elastic/apm-agent-rum-js\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoelastic-ecs-dotnet","title":"<code>monorepo:elastic-ecs-dotnet</code>","text":"<p>elastic-ecs-dotnet monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/elastic/ecs-dotnet\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoelectron-forge","title":"<code>monorepo:electron-forge</code>","text":"<p>electron-forge monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/electron-userland/electron-forge\",\n    \"https://github.com/electron/forge\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoember-decorators","title":"<code>monorepo:ember-decorators</code>","text":"<p>ember-decorators monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/ember-decorators/ember-decorators\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoembla-carousel","title":"<code>monorepo:embla-carousel</code>","text":"<p>embla-carousel monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/davidjerleke/embla-carousel\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoemojibase","title":"<code>monorepo:emojibase</code>","text":"<p>emojibase monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/milesj/emojibase\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoemotion","title":"<code>monorepo:emotion</code>","text":"<p>emotion monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/emotion-js/emotion\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoenumeratum","title":"<code>monorepo:enumeratum</code>","text":"<p>enumeratum monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/lloydmeta/enumeratum\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoenvelop","title":"<code>monorepo:envelop</code>","text":"<p>envelop monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/n1ru4l/envelop\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoerror-prone","title":"<code>monorepo:error-prone</code>","text":"<p>error-prone monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/google/error-prone\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoerror-prone-support","title":"<code>monorepo:error-prone-support</code>","text":"<p>error-prone-support monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/PicnicSupermarket/error-prone-support\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoeslint","title":"<code>monorepo:eslint</code>","text":"<p>eslint monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/eslint/eslint\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoeslint-config-globex","title":"<code>monorepo:eslint-config-globex</code>","text":"<p>eslint-config-globex monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/GlobexDesignsInc/eslint-config-globex\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoeslint-stylistic","title":"<code>monorepo:eslint-stylistic</code>","text":"<p>eslint-stylistic monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/eslint-stylistic/eslint-stylistic\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoexpo","title":"<code>monorepo:expo</code>","text":"<p>expo monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/expo/expo\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepofabric-chaincode-node","title":"<code>monorepo:fabric-chaincode-node</code>","text":"<p>fabric-chaincode-node monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/hyperledger/fabric-chaincode-node\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepofabric8-kubernetes-client","title":"<code>monorepo:fabric8-kubernetes-client</code>","text":"<p>fabric8-kubernetes-client monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/fabric8io/kubernetes-client\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepofaro-web-sdk","title":"<code>monorepo:faro-web-sdk</code>","text":"<p>faro-web-sdk monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/grafana/faro-web-sdk\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepofastendpoints","title":"<code>monorepo:fastendpoints</code>","text":"<p>fastendpoints monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/FastEndpoints/FastEndpoints\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepofeathers","title":"<code>monorepo:feathers</code>","text":"<p>feathers monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/feathersjs/feathers\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepofeaturemanagement-dotnet","title":"<code>monorepo:featuremanagement-dotnet</code>","text":"<p>featuremanagement-dotnet monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/microsoft/FeatureManagement-Dotnet\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepofeign","title":"<code>monorepo:feign</code>","text":"<p>feign monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/OpenFeign/feign\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepofela","title":"<code>monorepo:fela</code>","text":"<p>fela monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/robinweser/fela\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepofimbullinter","title":"<code>monorepo:fimbullinter</code>","text":"<p>fimbullinter monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/fimbullinter/wotan\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoflipper","title":"<code>monorepo:flipper</code>","text":"<p>flipper monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/flippercloud/flipper\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoflopflip","title":"<code>monorepo:flopflip</code>","text":"<p>flopflip monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/tdeekens/flopflip\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoflue","title":"<code>monorepo:flue</code>","text":"<p>flue monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/withastro/flue\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepofontsource","title":"<code>monorepo:fontsource</code>","text":"<p>fontsource monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/fontsource/fontsource\",\n    \"https://github.com/fontsource/font-files\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoformatjs","title":"<code>monorepo:formatjs</code>","text":"<p>formatjs monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/formatjs/formatjs\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoframework7","title":"<code>monorepo:framework7</code>","text":"<p>framework7 monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/framework7io/framework7\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepofunogram","title":"<code>monorepo:funogram</code>","text":"<p>funogram monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Dolfik1/Funogram\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepofusioncache","title":"<code>monorepo:fusioncache</code>","text":"<p>fusioncache monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/ZiggyCreatures/FusionCache\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepogatsby","title":"<code>monorepo:gatsby</code>","text":"<p>gatsby monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/gatsbyjs/gatsby\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepogitbeaker","title":"<code>monorepo:gitbeaker</code>","text":"<p>gitbeaker monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/jdalrymple/gitbeaker\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepogithub-workflows-kt","title":"<code>monorepo:github-workflows-kt</code>","text":"<p>github-workflows-kt monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/typesafegithub/github-workflows-kt\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepogo-cloud","title":"<code>monorepo:go-cloud</code>","text":"<p>go-cloud monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/google/go-cloud\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepogomock","title":"<code>monorepo:gomock</code>","text":"<p>gomock monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/uber-go/mock\",\n    \"https://github.com/uber/mock\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepogoogle-api-dotnet-client","title":"<code>monorepo:google-api-dotnet-client</code>","text":"<p>google-api-dotnet-client monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/googleapis/google-api-dotnet-client\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepogoogle-cloud-rust","title":"<code>monorepo:google-cloud-rust</code>","text":"<p>google-cloud-rust monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/googleapis/google-cloud-rust\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepografana","title":"<code>monorepo:grafana</code>","text":"<p>grafana monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/grafana/grafana\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepographiql","title":"<code>monorepo:graphiql</code>","text":"<p>graphiql monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/graphql/graphiql\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepographql-hive-gateway","title":"<code>monorepo:graphql-hive-gateway</code>","text":"<p>graphql-hive-gateway monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/graphql-hive/gateway\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepographql-mesh","title":"<code>monorepo:graphql-mesh</code>","text":"<p>graphql-mesh monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Urigo/graphql-mesh\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepographql-modules","title":"<code>monorepo:graphql-modules</code>","text":"<p>graphql-modules monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Urigo/graphql-modules\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepographql-platform","title":"<code>monorepo:graphql-platform</code>","text":"<p>graphql-platform monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/ChilliCream/graphql-platform\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepographql-tools","title":"<code>monorepo:graphql-tools</code>","text":"<p>graphql-tools monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/ardatan/graphql-tools\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepographql-yoga","title":"<code>monorepo:graphql-yoga</code>","text":"<p>graphql-yoga monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/dotansimha/graphql-yoga\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepographqlcodegenerator","title":"<code>monorepo:graphqlcodegenerator</code>","text":"<p>graphqlcodegenerator monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/dotansimha/graphql-code-generator-community\",\n    \"https://github.com/dotansimha/graphql-code-generator\",\n    \"https://github.com/dotansimha/graphql-codegen\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepogreenmail","title":"<code>monorepo:greenmail</code>","text":"<p>greenmail monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/greenmail-mail-test/greenmail\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepogroovy","title":"<code>monorepo:groovy</code>","text":"<p>groovy monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/apache/groovy\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepogrpc-dotnet","title":"<code>monorepo:grpc-dotnet</code>","text":"<p>grpc-dotnet monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/grpc/grpc-dotnet\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepogrpc-java","title":"<code>monorepo:grpc-java</code>","text":"<p>grpc-java monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/grpc/grpc-java\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepogstreamer-rust","title":"<code>monorepo:gstreamer-rust</code>","text":"<p>gstreamer-rust monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://gitlab.freedesktop.org/gstreamer/gstreamer-rs\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoguava","title":"<code>monorepo:guava</code>","text":"<p>guava monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/google/guava\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepohangfire","title":"<code>monorepo:hangfire</code>","text":"<p>hangfire monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/HangfireIO/Hangfire\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepohappy-dom","title":"<code>monorepo:happy-dom</code>","text":"<p>happy-dom monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/capricorn86/happy-dom\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepohibernate-models","title":"<code>monorepo:hibernate-models</code>","text":"<p>hibernate-models monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/hibernate/hibernate-models\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepohibernate-orm","title":"<code>monorepo:hibernate-orm</code>","text":"<p>hibernate-orm monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/hibernate/hibernate-orm\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepohibernate-search","title":"<code>monorepo:hibernate-search</code>","text":"<p>hibernate-search monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/hibernate/hibernate-search\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepohibernate-tools","title":"<code>monorepo:hibernate-tools</code>","text":"<p>hibernate-tools monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/hibernate/hibernate-tools\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepohickory-dns","title":"<code>monorepo:hickory-dns</code>","text":"<p>hickory-dns monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/hickory-dns/hickory-dns\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepohocuspocus","title":"<code>monorepo:hocuspocus</code>","text":"<p>hocuspocus monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/ueberdosis/hocuspocus\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepohtml-eslint","title":"<code>monorepo:html-eslint</code>","text":"<p>html-eslint monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/yeonjuan/html-eslint\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepohumanizer","title":"<code>monorepo:humanizer</code>","text":"<p>humanizer monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Humanizr/Humanizer\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoimmich","title":"<code>monorepo:immich</code>","text":"<p>immich monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/immich-app/immich\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoinfrastructure-ui","title":"<code>monorepo:infrastructure-ui</code>","text":"<p>infrastructure-ui monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/instructure/instructure-ui\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoionic-native","title":"<code>monorepo:ionic-native</code>","text":"<p>ionic-native monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/ionic-team/ionic-native\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoistanbuljs","title":"<code>monorepo:istanbuljs</code>","text":"<p>istanbuljs monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/istanbuljs/istanbuljs\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoistio","title":"<code>monorepo:istio</code>","text":"<p>istio monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/istio/istio\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepojackson","title":"<code>monorepo:jackson</code>","text":"<p>jackson monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/FasterXML/jackson\",\n    \"https://github.com/FasterXML/jackson-annotations\",\n    \"https://github.com/FasterXML/jackson-bom\",\n    \"https://github.com/FasterXML/jackson-core\",\n    \"https://github.com/FasterXML/jackson-databind\",\n    \"https://github.com/FasterXML/jackson-dataformat-xml\",\n    \"https://github.com/FasterXML/jackson-dataformats-binary\",\n    \"https://github.com/FasterXML/jackson-dataformats-text\",\n    \"https://github.com/FasterXML/jackson-datatype-hibernate\",\n    \"https://github.com/FasterXML/jackson-datatype-joda\",\n    \"https://github.com/FasterXML/jackson-datatypes-collections\",\n    \"https://github.com/FasterXML/jackson-datatypes-misc\",\n    \"https://github.com/FasterXML/jackson-jakarta-rs-providers\",\n    \"https://github.com/FasterXML/jackson-jaxrs-providers\",\n    \"https://github.com/FasterXML/jackson-jr\",\n    \"https://github.com/FasterXML/jackson-module-jsonSchema\",\n    \"https://github.com/FasterXML/jackson-module-kotlin\",\n    \"https://github.com/FasterXML/jackson-module-scala\",\n    \"https://github.com/FasterXML/jackson-modules-base\",\n    \"https://github.com/FasterXML/jackson-modules-java8\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepojasmine","title":"<code>monorepo:jasmine</code>","text":"<p>jasmine monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/jasmine/jasmine\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepojavafx","title":"<code>monorepo:javafx</code>","text":"<p>javafx monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/openjdk/jfx\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepojavahamcrest","title":"<code>monorepo:javahamcrest</code>","text":"<p>javahamcrest monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/hamcrest/JavaHamcrest\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepojavascriptengineswitcher","title":"<code>monorepo:javascriptengineswitcher</code>","text":"<p>javascriptengineswitcher monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Taritsyn/JavaScriptEngineSwitcher\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepojaxb-ri","title":"<code>monorepo:jaxb-ri</code>","text":"<p>jaxb-ri monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/eclipse-ee4j/jaxb-ri\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepojersey","title":"<code>monorepo:jersey</code>","text":"<p>jersey monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/eclipse-ee4j/jersey\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepojest","title":"<code>monorepo:jest</code>","text":"<p>jest monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/facebook/jest\",\n    \"https://github.com/jestjs/jest\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepojetty","title":"<code>monorepo:jetty</code>","text":"<p>jetty monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/jetty/jetty.project\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepojna","title":"<code>monorepo:jna</code>","text":"<p>jna monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/java-native-access/jna\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepojson-smart-v2","title":"<code>monorepo:json-smart-v2</code>","text":"<p>json-smart-v2 monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/netplex/json-smart-v2\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepojsonforms","title":"<code>monorepo:jsonforms</code>","text":"<p>jsonforms monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/eclipsesource/jsonforms\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepojsplumb","title":"<code>monorepo:jsplumb</code>","text":"<p>jsplumb monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/jsplumb/jsplumb\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepojunior","title":"<code>monorepo:junior</code>","text":"<p>junior monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/getsentry/junior\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepojunit-framework","title":"<code>monorepo:junit-framework</code>","text":"<p>junit-framework monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/junit-team/junit5\",\n    \"https://github.com/junit-team/junit-framework\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepokernelmemory","title":"<code>monorepo:kernelmemory</code>","text":"<p>kernelmemory monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/microsoft/kernel-memory\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepokiota","title":"<code>monorepo:kiota</code>","text":"<p>kiota monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/microsoft/kiota\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepokotlin","title":"<code>monorepo:kotlin</code>","text":"<p>kotlin monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/JetBrains/kotlin\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepokotlinx-coroutines","title":"<code>monorepo:kotlinx-coroutines</code>","text":"<p>kotlinx-coroutines monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Kotlin/kotlinx.coroutines\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepokroki","title":"<code>monorepo:kroki</code>","text":"<p>kroki monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/yuzutech/kroki\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoksp","title":"<code>monorepo:ksp</code>","text":"<p>ksp monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/google/ksp\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoktor","title":"<code>monorepo:ktor</code>","text":"<p>ktor monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/ktorio/ktor\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepokubb","title":"<code>monorepo:kubb</code>","text":"<p>kubb monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/kubb-labs/kubb\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepokubernetes","title":"<code>monorepo:kubernetes</code>","text":"<p>kubernetes monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/kubernetes/api\",\n    \"https://github.com/kubernetes/apiextensions-apiserver\",\n    \"https://github.com/kubernetes/apimachinery\",\n    \"https://github.com/kubernetes/apiserver\",\n    \"https://github.com/kubernetes/cli-runtime\",\n    \"https://github.com/kubernetes/client-go\",\n    \"https://github.com/kubernetes/cloud-provider\",\n    \"https://github.com/kubernetes/cluster-bootstrap\",\n    \"https://github.com/kubernetes/code-generator\",\n    \"https://github.com/kubernetes/component-base\",\n    \"https://github.com/kubernetes/component-helpers\",\n    \"https://github.com/kubernetes/controller-manager\",\n    \"https://github.com/kubernetes/cri-api\",\n    \"https://github.com/kubernetes/cri-client\",\n    \"https://github.com/kubernetes/csi-translation-lib\",\n    \"https://github.com/kubernetes/dynamic-resource-allocation\",\n    \"https://github.com/kubernetes/endpointslice\",\n    \"https://github.com/kubernetes/externaljwt\",\n    \"https://github.com/kubernetes/kms\",\n    \"https://github.com/kubernetes/kube-aggregator\",\n    \"https://github.com/kubernetes/kube-controller-manager\",\n    \"https://github.com/kubernetes/kube-proxy\",\n    \"https://github.com/kubernetes/kube-scheduler\",\n    \"https://github.com/kubernetes/kubectl\",\n    \"https://github.com/kubernetes/kubelet\",\n    \"https://github.com/kubernetes/legacy-cloud-providers\",\n    \"https://github.com/kubernetes/metrics\",\n    \"https://github.com/kubernetes/mount-utils\",\n    \"https://github.com/kubernetes/pod-security-admission\",\n    \"https://github.com/kubernetes/sample-apiserver\",\n    \"https://github.com/kubernetes/sample-cli-plugin\",\n    \"https://github.com/kubernetes/sample-controller\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepolamar","title":"<code>monorepo:lamar</code>","text":"<p>lamar monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/JasperFx/lamar\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepolangchain4j","title":"<code>monorepo:langchain4j</code>","text":"<p>langchain4j monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/langchain4j/langchain4j\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepolerna","title":"<code>monorepo:lerna</code>","text":"<p>lerna monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/lerna/lerna\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepolerna-lite","title":"<code>monorepo:lerna-lite</code>","text":"<p>lerna-lite monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/lerna-lite/lerna-lite\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepolexical","title":"<code>monorepo:lexical</code>","text":"<p>lexical monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/facebook/lexical\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepolinguijs","title":"<code>monorepo:linguijs</code>","text":"<p>linguijs monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/lingui/js-lingui\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepolinkifyjs","title":"<code>monorepo:linkifyjs</code>","text":"<p>linkifyjs monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/nfrasser/linkifyjs\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepolog4j2","title":"<code>monorepo:log4j2</code>","text":"<p>log4j2 monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/apache/logging-log4j2\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepologback","title":"<code>monorepo:logback</code>","text":"<p>logback monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/qos-ch/logback\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepologtape","title":"<code>monorepo:logtape</code>","text":"<p>logtape monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/dahlia/logtape\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoloopback","title":"<code>monorepo:loopback</code>","text":"<p>loopback monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/strongloop/loopback-next\",\n    \"https://github.com/loopbackio/loopback-next\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepolrnwebcomponents","title":"<code>monorepo:lrnwebcomponents</code>","text":"<p>lrnwebcomponents monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/elmsln/lrnwebcomponents\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepolucide","title":"<code>monorepo:lucide</code>","text":"<p>lucide monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/lucide-icons/lucide\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepomailing","title":"<code>monorepo:mailing</code>","text":"<p>mailing monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/sofn-xyz/mailing\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepomantine","title":"<code>monorepo:mantine</code>","text":"<p>mantine monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/mantinedev/mantine\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepomapstruct","title":"<code>monorepo:mapstruct</code>","text":"<p>mapstruct monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/mapstruct/mapstruct\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepomarten","title":"<code>monorepo:marten</code>","text":"<p>marten monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/JasperFx/marten\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepomasstransit","title":"<code>monorepo:masstransit</code>","text":"<p>masstransit monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/MassTransit/MassTransit\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepomaterial-components-web","title":"<code>monorepo:material-components-web</code>","text":"<p>material-components-web monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/material-components/material-components-web\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepomaterial-ui","title":"<code>monorepo:material-ui</code>","text":"<p>material-ui monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/mui-org/material-ui\",\n    \"https://github.com/mui/material-ui\",\n    \"https://github.com/mui/mui-x\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepomdc-react","title":"<code>monorepo:mdc-react</code>","text":"<p>mdc-react monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/material-components/material-components-web-react\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepomdx","title":"<code>monorepo:mdx</code>","text":"<p>mdx monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/mdx-js/mdx\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepomiddy-js","title":"<code>monorepo:middy-js</code>","text":"<p>middy-js monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/middyjs/middy\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepomikro-orm","title":"<code>monorepo:mikro-orm</code>","text":"<p>mikro-orm monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/mikro-orm/mikro-orm\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoml-dotnet","title":"<code>monorepo:ml-dotnet</code>","text":"<p>ml-dotnet monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/dotnet/machinelearning\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepomockito","title":"<code>monorepo:mockito</code>","text":"<p>mockito monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/mockito/mockito\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepomongo-csharp-driver","title":"<code>monorepo:mongo-csharp-driver</code>","text":"<p>mongo-csharp-driver monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/mongodb/mongo-csharp-driver\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepomongo-java-driver","title":"<code>monorepo:mongo-java-driver</code>","text":"<p>mongo-java-driver monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/mongodb/mongo-java-driver\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepomstest","title":"<code>monorepo:mstest</code>","text":"<p>mstest monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/microsoft/testfx\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepomutation-testing-elements","title":"<code>monorepo:mutation-testing-elements</code>","text":"<p>mutation-testing-elements monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/stryker-mutator/mutation-testing-elements\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreponest","title":"<code>monorepo:nest</code>","text":"<p>nest monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/nestjs/config\",\n    \"https://github.com/nestjs/nest\",\n    \"https://github.com/nestjs/nest-cli\",\n    \"https://github.com/nestjs/passport\",\n    \"https://github.com/nestjs/schematics\",\n    \"https://github.com/nestjs/terminus\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreponest-graphql","title":"<code>monorepo:nest-graphql</code>","text":"<p>nest-graphql monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/nestjs/graphql\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreponetty","title":"<code>monorepo:netty</code>","text":"<p>netty monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/netty/netty\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreponeutrino","title":"<code>monorepo:neutrino</code>","text":"<p>neutrino monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/neutrinojs/neutrino\",\n    \"https://github.com/mozilla-neutrino/neutrino-dev\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreponexpect","title":"<code>monorepo:nexpect</code>","text":"<p>nexpect monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/fluffynuts/NExpect\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreponextjs","title":"<code>monorepo:nextjs</code>","text":"<p>nextjs monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/zeit/next.js\",\n    \"https://github.com/vercel/next.js\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreponextra","title":"<code>monorepo:nextra</code>","text":"<p>nextra monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/shuding/nextra\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepongx-cookie-service","title":"<code>monorepo:ngx-cookie-service</code>","text":"<p>ngx-cookie-service monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/stevermeister/ngx-cookie-service\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepongx-formly","title":"<code>monorepo:ngx-formly</code>","text":"<p>ngx-formly monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/ngx-formly/ngx-formly\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepongxs-store","title":"<code>monorepo:ngxs-store</code>","text":"<p>ngxs-store monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/ngxs/store\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreponivo","title":"<code>monorepo:nivo</code>","text":"<p>nivo monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/plouc/nivo\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreponjson-schema","title":"<code>monorepo:njson-schema</code>","text":"<p>njson-schema monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/RicoSuter/NJsonSchema\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreponswag","title":"<code>monorepo:nswag</code>","text":"<p>nswag monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/RicoSuter/NSwag\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreponuget","title":"<code>monorepo:nuget</code>","text":"<p>nuget monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/NuGet/NuGet.Client\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreponuke-build","title":"<code>monorepo:nuke-build</code>","text":"<p>nuke-build monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/nuke-build/nuke\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreponuxtjs","title":"<code>monorepo:nuxtjs</code>","text":"<p>nuxtjs monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/nuxt/nuxt.js\",\n    \"https://github.com/nuxt/nuxt\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepookhttp","title":"<code>monorepo:okhttp</code>","text":"<p>okhttp monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/square/okhttp\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoopenapi-dotnet","title":"<code>monorepo:openapi-dotnet</code>","text":"<p>openapi-dotnet monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/microsoft/OpenAPI.NET\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoopencost","title":"<code>monorepo:opencost</code>","text":"<p>opencost monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/opencost/opencost\",\n    \"https://github.com/opencost/opencost-ui\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoopeniddict","title":"<code>monorepo:openiddict</code>","text":"<p>openiddict monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/openiddict/openiddict-core\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoopentelemetry-dotnet","title":"<code>monorepo:opentelemetry-dotnet</code>","text":"<p>opentelemetry-dotnet monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/open-telemetry/opentelemetry-dotnet\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoopentelemetry-dotnet-contrib","title":"<code>monorepo:opentelemetry-dotnet-contrib</code>","text":"<p>opentelemetry-dotnet-contrib monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/open-telemetry/opentelemetry-dotnet-contrib\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoopentelemetry-erlang","title":"<code>monorepo:opentelemetry-erlang</code>","text":"<p>opentelemetry-erlang monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/open-telemetry/opentelemetry-erlang\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoopentelemetry-erlang-contrib","title":"<code>monorepo:opentelemetry-erlang-contrib</code>","text":"<p>opentelemetry-erlang-contrib monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/open-telemetry/opentelemetry-erlang-contrib\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoopentelemetry-go","title":"<code>monorepo:opentelemetry-go</code>","text":"<p>opentelemetry-go monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/open-telemetry/opentelemetry-go\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoopentelemetry-go-contrib","title":"<code>monorepo:opentelemetry-go-contrib</code>","text":"<p>opentelemetry-go-contrib monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/open-telemetry/opentelemetry-go-contrib\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoopentelemetry-java","title":"<code>monorepo:opentelemetry-java</code>","text":"<p>opentelemetry-java monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/open-telemetry/opentelemetry-java\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoopentelemetry-java-contrib","title":"<code>monorepo:opentelemetry-java-contrib</code>","text":"<p>opentelemetry-java-contrib monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/open-telemetry/opentelemetry-java-contrib\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoopentelemetry-js","title":"<code>monorepo:opentelemetry-js</code>","text":"<p>opentelemetry-js monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/open-telemetry/opentelemetry-js\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoopentelemetry-js-contrib","title":"<code>monorepo:opentelemetry-js-contrib</code>","text":"<p>opentelemetry-js-contrib monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/open-telemetry/opentelemetry-js-contrib\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoopentelemetry-php","title":"<code>monorepo:opentelemetry-php</code>","text":"<p>opentelemetry-php monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/open-telemetry/opentelemetry-php\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoopentelemetry-php-contrib","title":"<code>monorepo:opentelemetry-php-contrib</code>","text":"<p>opentelemetry-php-contrib monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/open-telemetry/opentelemetry-php-contrib\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoopentelemetry-python","title":"<code>monorepo:opentelemetry-python</code>","text":"<p>opentelemetry-python monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/open-telemetry/opentelemetry-python\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoopentelemetry-python-contrib","title":"<code>monorepo:opentelemetry-python-contrib</code>","text":"<p>opentelemetry-python-contrib monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/open-telemetry/opentelemetry-python-contrib\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoopentelemetry-rust","title":"<code>monorepo:opentelemetry-rust</code>","text":"<p>opentelemetry-rust monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/open-telemetry/opentelemetry-rust\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoopentelemetry-rust-contrib","title":"<code>monorepo:opentelemetry-rust-contrib</code>","text":"<p>opentelemetry-rust-contrib monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/open-telemetry/opentelemetry-rust-contrib\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoorleans","title":"<code>monorepo:orleans</code>","text":"<p>orleans monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/dotnet/orleans\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoorpc","title":"<code>monorepo:orpc</code>","text":"<p>orpc monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/middleapi/orpc\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepopanda-css","title":"<code>monorepo:panda-css</code>","text":"<p>panda-css monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/chakra-ui/panda\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoparcel","title":"<code>monorepo:parcel</code>","text":"<p>parcel monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/parcel-bundler/parcel\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepopayloadcms","title":"<code>monorepo:payloadcms</code>","text":"<p>payloadcms monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/payloadcms/payload\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepopdfme","title":"<code>monorepo:pdfme</code>","text":"<p>pdfme monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/pdfme/pdfme\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepopercy-cli","title":"<code>monorepo:percy-cli</code>","text":"<p>percy-cli monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/percy/cli\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepopicassojs","title":"<code>monorepo:picassojs</code>","text":"<p>picassojs monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/qlik-oss/picasso.js\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepopixijs","title":"<code>monorepo:pixijs</code>","text":"<p>pixijs monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/pixijs/pixi.js\",\n    \"https://github.com/pixijs/pixijs\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoplaywright","title":"<code>monorepo:playwright</code>","text":"<p>playwright monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/microsoft/playwright\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoplaywright-dotnet","title":"<code>monorepo:playwright-dotnet</code>","text":"<p>playwright-dotnet monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/microsoft/playwright-dotnet\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepopnpcore","title":"<code>monorepo:pnpcore</code>","text":"<p>pnpcore monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/pnp/pnpcore\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepopnpjs","title":"<code>monorepo:pnpjs</code>","text":"<p>pnpjs monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/pnp/pnpjs\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepopolly","title":"<code>monorepo:polly</code>","text":"<p>polly monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/App-vNext/Polly\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepopollyjs","title":"<code>monorepo:pollyjs</code>","text":"<p>pollyjs monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Netflix/pollyjs\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepopothos","title":"<code>monorepo:pothos</code>","text":"<p>pothos monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/hayes/pothos\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepopouchdb","title":"<code>monorepo:pouchdb</code>","text":"<p>pouchdb monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/pouchdb/pouchdb\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepopowermock","title":"<code>monorepo:powermock</code>","text":"<p>powermock monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/powermock/powermock\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoprisma","title":"<code>monorepo:prisma</code>","text":"<p>prisma monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/prisma/orm\",\n    \"https://github.com/prisma/prisma\",\n    \"https://github.com/prisma/prisma-cli\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoprometheus-net","title":"<code>monorepo:prometheus-net</code>","text":"<p>prometheus-net monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/prometheus-net/prometheus-net\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepopromster","title":"<code>monorepo:promster</code>","text":"<p>promster monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/tdeekens/promster\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoprotobuf","title":"<code>monorepo:protobuf</code>","text":"<p>protobuf monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/protocolbuffers/protobuf\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoquartznet","title":"<code>monorepo:quartznet</code>","text":"<p>quartznet monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/quartznet/quartznet\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporadix-ui-primitives","title":"<code>monorepo:radix-ui-primitives</code>","text":"<p>radix-ui-primitives monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/radix-ui/primitives\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporeach-ui","title":"<code>monorepo:reach-ui</code>","text":"<p>reach-ui monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/reach/reach-ui\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporeact","title":"<code>monorepo:react</code>","text":"<p>react monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/facebook/react\",\n    \"https://github.com/react/react\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporeact-admin","title":"<code>monorepo:react-admin</code>","text":"<p>react-admin monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/marmelab/react-admin\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporeact-apollo","title":"<code>monorepo:react-apollo</code>","text":"<p>react-apollo monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/apollographql/react-apollo\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporeact-dnd","title":"<code>monorepo:react-dnd</code>","text":"<p>react-dnd monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/react-dnd/react-dnd\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporeact-email","title":"<code>monorepo:react-email</code>","text":"<p>react-email monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/resend/react-email\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporeact-navigation","title":"<code>monorepo:react-navigation</code>","text":"<p>react-navigation monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/react-navigation/react-navigation\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporeact-page","title":"<code>monorepo:react-page</code>","text":"<p>react-page monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/react-page/react-page\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporeact-rails","title":"<code>monorepo:react-rails</code>","text":"<p>react-rails monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/reactjs/react-rails\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporeact-router","title":"<code>monorepo:react-router</code>","text":"<p>react-router monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/ReactTraining/react-router\",\n    \"https://github.com/remix-run/react-router\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporeact-spectrum","title":"<code>monorepo:react-spectrum</code>","text":"<p>react-spectrum monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/adobe/react-spectrum\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporeact-spring","title":"<code>monorepo:react-spring</code>","text":"<p>react-spring monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/pmndrs/react-spring\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporeactivestack-cookies","title":"<code>monorepo:reactivestack-cookies</code>","text":"<p>reactivestack-cookies monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/reactivestack/cookies\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporeakit","title":"<code>monorepo:reakit</code>","text":"<p>reakit monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/reakit/reakit\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporedwood","title":"<code>monorepo:redwood</code>","text":"<p>redwood monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/redwoodjs/redwood\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporefit","title":"<code>monorepo:refit</code>","text":"<p>refit monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/reactiveui/refit\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporeg-suit","title":"<code>monorepo:reg-suit</code>","text":"<p>reg-suit monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/reg-viz/reg-suit\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporemark","title":"<code>monorepo:remark</code>","text":"<p>remark monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/remarkjs/remark\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporemix","title":"<code>monorepo:remix</code>","text":"<p>remix monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/remix-run/remix\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporetrofit","title":"<code>monorepo:retrofit</code>","text":"<p>retrofit monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/square/retrofit\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporiver","title":"<code>monorepo:river</code>","text":"<p>river monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/riverqueue/river\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporjsf","title":"<code>monorepo:rjsf</code>","text":"<p>rjsf monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/rjsf-team/react-jsonschema-form\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporouter5","title":"<code>monorepo:router5</code>","text":"<p>router5 monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/router5/router5\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporspack","title":"<code>monorepo:rspack</code>","text":"<p>rspack monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/web-infra-dev/rspack\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporuby-on-rails","title":"<code>monorepo:ruby-on-rails</code>","text":"<p>ruby-on-rails monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/rails/rails\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporust-analyzer","title":"<code>monorepo:rust-analyzer</code>","text":"<p>rust-analyzer monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/rust-lang/rust-analyzer\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporust-futures","title":"<code>monorepo:rust-futures</code>","text":"<p>rust-futures monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/rust-lang/futures-rs\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporust-wasm-bindgen","title":"<code>monorepo:rust-wasm-bindgen</code>","text":"<p>rust-wasm-bindgen monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/wasm-bindgen/wasm-bindgen\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposanity","title":"<code>monorepo:sanity</code>","text":"<p>sanity monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/sanity-io/sanity\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposcaffdog","title":"<code>monorepo:scaffdog</code>","text":"<p>scaffdog monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/scaffdog/scaffdog\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposcalar","title":"<code>monorepo:scalar</code>","text":"<p>scalar monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/scalar/scalar\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposea-orm","title":"<code>monorepo:sea-orm</code>","text":"<p>sea-orm monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/SeaQL/sea-orm\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposecretlint","title":"<code>monorepo:secretlint</code>","text":"<p>secretlint monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/secretlint/secretlint\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposendgrid-nodejs","title":"<code>monorepo:sendgrid-nodejs</code>","text":"<p>sendgrid-nodejs monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/sendgrid/sendgrid-nodejs\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposentry-dotnet","title":"<code>monorepo:sentry-dotnet</code>","text":"<p>sentry-dotnet monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/getsentry/sentry-dotnet\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposentry-javascript","title":"<code>monorepo:sentry-javascript</code>","text":"<p>sentry-javascript monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/getsentry/sentry-javascript\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposentry-ruby","title":"<code>monorepo:sentry-ruby</code>","text":"<p>sentry-ruby monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/getsentry/sentry-ruby\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposentry-rust","title":"<code>monorepo:sentry-rust</code>","text":"<p>sentry-rust monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/getsentry/sentry-rust\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposerde","title":"<code>monorepo:serde</code>","text":"<p>serde monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/serde-rs/serde\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposerenity-js","title":"<code>monorepo:serenity-js</code>","text":"<p>serenity-js monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/serenity-js/serenity-js\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposerilog-ui","title":"<code>monorepo:serilog-ui</code>","text":"<p>serilog-ui monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/serilog-contrib/serilog-ui\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposervicestack","title":"<code>monorepo:servicestack</code>","text":"<p>servicestack monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/ServiceStack/ServiceStack\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposerwist","title":"<code>monorepo:serwist</code>","text":"<p>serwist monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/serwist/serwist\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposhedlock","title":"<code>monorepo:shedlock</code>","text":"<p>shedlock monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/lukas-krecan/ShedLock\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposhiki","title":"<code>monorepo:shiki</code>","text":"<p>shiki monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/shikijs/shiki\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposhopify-app-bridge","title":"<code>monorepo:shopify-app-bridge</code>","text":"<p>shopify-app-bridge monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Shopify/app-bridge\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepositecore-jss","title":"<code>monorepo:sitecore-jss</code>","text":"<p>sitecore-jss monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Sitecore/jss\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposize-limit","title":"<code>monorepo:size-limit</code>","text":"<p>size-limit monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/ai/size-limit\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposkiasharp","title":"<code>monorepo:skiasharp</code>","text":"<p>skiasharp monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/mono/SkiaSharp\",\n    \"https://go.microsoft.com/fwlink/?linkid=868515\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposlack-net","title":"<code>monorepo:slack-net</code>","text":"<p>slack-net monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/soxtoby/SlackNet\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposlf4j","title":"<code>monorepo:slf4j</code>","text":"<p>slf4j monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/qos-ch/slf4j\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposlim-message-bus","title":"<code>monorepo:slim-message-bus</code>","text":"<p>slim-message-bus monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/zarusz/SlimMessageBus\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepospectre-console","title":"<code>monorepo:spectre-console</code>","text":"<p>spectre-console monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/spectreconsole/spectre.console\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepospectre-console-cli","title":"<code>monorepo:spectre-console-cli</code>","text":"<p>spectre-console-cli monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/spectreconsole/spectre.console.cli\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepospringfox","title":"<code>monorepo:springfox</code>","text":"<p>springfox monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/springfox/springfox\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepostack-exchange-redis-extensions","title":"<code>monorepo:stack-exchange-redis-extensions</code>","text":"<p>stack-exchange-redis-extensions monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/imperugo/StackExchange.Redis.Extensions\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepostatsig-js-client","title":"<code>monorepo:statsig-js-client</code>","text":"<p>statsig-js-client monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/statsig-io/js-client-monorepo\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposteeltoe","title":"<code>monorepo:steeltoe</code>","text":"<p>steeltoe monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/SteeltoeOSS/steeltoe\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepostorybook","title":"<code>monorepo:storybook</code>","text":"<p>storybook monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/storybookjs/storybook\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepostorybook-react-native","title":"<code>monorepo:storybook-react-native</code>","text":"<p>storybook-react-native monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/storybookjs/react-native\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepostrapi","title":"<code>monorepo:strapi</code>","text":"<p>strapi monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/strapi/strapi\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepostrum","title":"<code>monorepo:strum</code>","text":"<p>strum monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Peternator7/strum\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepostryker-js","title":"<code>monorepo:stryker-js</code>","text":"<p>stryker-js monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/stryker-mutator/stryker-js\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepostylex-swc","title":"<code>monorepo:stylex-swc</code>","text":"<p>stylex-swc monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Dwlad90/stylex-swc-plugin\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposurveyjs","title":"<code>monorepo:surveyjs</code>","text":"<p>surveyjs monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/surveyjs/surveyjs\",\n    \"https://github.com/surveyjs/survey-library\",\n    \"https://github.com/surveyjs/survey-creator\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposwashbuckle-aspnetcore","title":"<code>monorepo:swashbuckle-aspnetcore</code>","text":"<p>swashbuckle-aspnetcore monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/domaindrivendev/Swashbuckle.AspNetCore\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposystemioabstractions","title":"<code>monorepo:system.io.abstractions</code>","text":"<p>system.io.abstractions monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/System-IO-Abstractions/System.IO.Abstractions/\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotaiga-ui","title":"<code>monorepo:taiga-ui</code>","text":"<p>taiga-ui monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/taiga-family/taiga-ui\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotailwindcss","title":"<code>monorepo:tailwindcss</code>","text":"<p>tailwindcss monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/tailwindlabs/tailwindcss\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotamagui","title":"<code>monorepo:tamagui</code>","text":"<p>tamagui monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/tamagui/tamagui\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotanstack-form","title":"<code>monorepo:tanstack-form</code>","text":"<p>tanstack-form monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/TanStack/form\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotanstack-query","title":"<code>monorepo:tanstack-query</code>","text":"<p>tanstack-query monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/TanStack/query\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotanstack-router","title":"<code>monorepo:tanstack-router</code>","text":"<p>tanstack-router monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/TanStack/router\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotanstack-table","title":"<code>monorepo:tanstack-table</code>","text":"<p>tanstack-table monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/TanStack/table\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotanstack-virtual","title":"<code>monorepo:tanstack-virtual</code>","text":"<p>tanstack-virtual monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/TanStack/virtual\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotauri","title":"<code>monorepo:tauri</code>","text":"<p>tauri monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/tauri-apps/tauri\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotelus-tds","title":"<code>monorepo:telus-tds</code>","text":"<p>telus-tds monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/telusdigital/tds\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotelus-tds-core","title":"<code>monorepo:telus-tds-core</code>","text":"<p>telus-tds-core monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/telus/tds-core\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotemporalio-ts","title":"<code>monorepo:temporalio-ts</code>","text":"<p>temporalio-ts monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/temporalio/sdk-typescript\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoterraform","title":"<code>monorepo:terraform</code>","text":"<p>terraform monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/hashicorp/terraform\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotestcontainers-dotnet","title":"<code>monorepo:testcontainers-dotnet</code>","text":"<p>testcontainers-dotnet monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/testcontainers/testcontainers-dotnet\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotestcontainers-go","title":"<code>monorepo:testcontainers-go</code>","text":"<p>testcontainers-go monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/testcontainers/testcontainers-go\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotestcontainers-java","title":"<code>monorepo:testcontainers-java</code>","text":"<p>testcontainers-java monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/testcontainers/testcontainers-java\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotestcontainers-node","title":"<code>monorepo:testcontainers-node</code>","text":"<p>testcontainers-node monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/testcontainers/testcontainers-node\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotheme-ui","title":"<code>monorepo:theme-ui</code>","text":"<p>theme-ui monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/system-ui/theme-ui\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotika","title":"<code>monorepo:tika</code>","text":"<p>tika monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/apache/tika\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotimvir","title":"<code>monorepo:timvir</code>","text":"<p>timvir monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/timvir/timvir\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotiptap","title":"<code>monorepo:tiptap</code>","text":"<p>tiptap monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/ueberdosis/tiptap\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotokio-prost","title":"<code>monorepo:tokio-prost</code>","text":"<p>tokio-prost monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/tokio-rs/prost\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotokio-tracing","title":"<code>monorepo:tokio-tracing</code>","text":"<p>tokio-tracing monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/tokio-rs/tracing\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotomcat","title":"<code>monorepo:tomcat</code>","text":"<p>tomcat monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/apache/tomcat\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotonic","title":"<code>monorepo:tonic</code>","text":"<p>tonic monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/hyperium/tonic\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotreat","title":"<code>monorepo:treat</code>","text":"<p>treat monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/seek-oss/treat\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotrpc","title":"<code>monorepo:trpc</code>","text":"<p>trpc monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/trpc/trpc\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotrust-dns","title":"<code>monorepo:trust-dns</code>","text":"<p>trust-dns monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/bluejekyll/trust-dns\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotsoa","title":"<code>monorepo:tsoa</code>","text":"<p>tsoa monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/lukeautry/tsoa\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotunit","title":"<code>monorepo:tunit</code>","text":"<p>tunit monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/thomhurst/TUnit\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoturbo","title":"<code>monorepo:turbo</code>","text":"<p>turbo monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/vercel/turbo\",\n    \"https://github.com/vercel/turborepo\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoturf","title":"<code>monorepo:turf</code>","text":"<p>turf monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Turfjs/turf\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotyped-signalr","title":"<code>monorepo:typed-signalr</code>","text":"<p>typed-signalr monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/nenoNaninu/TypedSignalR.Client.TypeScript\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotypefaces","title":"<code>monorepo:typefaces</code>","text":"<p>typefaces monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/KyleAMathews/typefaces\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotypescript-eslint","title":"<code>monorepo:typescript-eslint</code>","text":"<p>typescript-eslint monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/typescript-eslint/typescript-eslint\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotypography-js","title":"<code>monorepo:typography-js</code>","text":"<p>typography-js monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/KyleAMathews/typography.js\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoui5-webcomponents","title":"<code>monorepo:ui5-webcomponents</code>","text":"<p>ui5-webcomponents monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/SAP/ui5-webcomponents\",\n    \"https://github.com/SAP/ui5-webcomponents-react\",\n    \"https://github.com/SAP/ui5-webcomponents-ngx\",\n    \"https://github.com/UI5/webcomponents\",\n    \"https://github.com/UI5/webcomponents-react\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepounhead","title":"<code>monorepo:unhead</code>","text":"<p>unhead monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/unjs/unhead\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepounocss","title":"<code>monorepo:unocss</code>","text":"<p>unocss monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/unocss/unocss\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepouppy","title":"<code>monorepo:uppy</code>","text":"<p>uppy monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/transloadit/uppy\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoutoipa","title":"<code>monorepo:utoipa</code>","text":"<p>utoipa monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/juhaku/utoipa\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepovaadin-hilla","title":"<code>monorepo:vaadin-hilla</code>","text":"<p>vaadin-hilla monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/vaadin/hilla\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepovaadinwebcomponents","title":"<code>monorepo:vaadinWebComponents</code>","text":"<p>vaadinWebComponents monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/vaadin/web-components\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepovanilla-extract","title":"<code>monorepo:vanilla-extract</code>","text":"<p>vanilla-extract monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/vanilla-extract-css/vanilla-extract\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepovisx","title":"<code>monorepo:visx</code>","text":"<p>visx monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/airbnb/visx\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepovite-plus","title":"<code>monorepo:vite-plus</code>","text":"<p>vite-plus monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/voidzero-dev/vite-plus\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepovitest","title":"<code>monorepo:vitest</code>","text":"<p>vitest monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/vitest-dev/vitest\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepovstest","title":"<code>monorepo:vstest</code>","text":"<p>vstest monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/microsoft/vstest\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepovue","title":"<code>monorepo:vue</code>","text":"<p>vue monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/vuejs/vue\",\n    \"https://github.com/vuejs/core\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepovue-cli","title":"<code>monorepo:vue-cli</code>","text":"<p>vue-cli monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/vuejs/vue-cli\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepovue-language-tools","title":"<code>monorepo:vue-language-tools</code>","text":"<p>vue-language-tools monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/vuejs/language-tools\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepovuepress","title":"<code>monorepo:vuepress</code>","text":"<p>vuepress monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/vuejs/vuepress\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepovueuse","title":"<code>monorepo:vueuse</code>","text":"<p>vueuse monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/vueuse/vueuse\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoweasel","title":"<code>monorepo:weasel</code>","text":"<p>weasel monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/JasperFx/weasel\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoweb3-react","title":"<code>monorepo:web3-react</code>","text":"<p>web3-react monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Uniswap/web3-react\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepowebdriverio","title":"<code>monorepo:webdriverio</code>","text":"<p>webdriverio monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/webdriverio/webdriverio\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepowolverine","title":"<code>monorepo:wolverine</code>","text":"<p>wolverine monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/jasperfx/wolverine\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoworkbox","title":"<code>monorepo:workbox</code>","text":"<p>workbox monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/googlechrome/workbox\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepowyw-in-js","title":"<code>monorepo:wyw-in-js</code>","text":"<p>wyw-in-js monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/Anber/wyw-in-js\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoxstate","title":"<code>monorepo:xstate</code>","text":"<p>xstate monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/statelyai/xstate\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoxterm","title":"<code>monorepo:xterm</code>","text":"<p>xterm monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/xtermjs/xterm.js\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoxunit-dotnet","title":"<code>monorepo:xunit-dotnet</code>","text":"<p>xunit-dotnet monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/xunit/assert.xunit\",\n    \"https://github.com/xunit/visualstudio.xunit\",\n    \"https://github.com/xunit/xunit\",\n    \"https://github.com/xunit/xunit.analyzers\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoyamldotnet","title":"<code>monorepo:yamldotnet</code>","text":"<p>yamldotnet monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/aaubry/YamlDotNet\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoyarn","title":"<code>monorepo:yarn</code>","text":"<p>yarn monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/yarnpkg/berry\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepozag-js","title":"<code>monorepo:zag-js</code>","text":"<p>zag-js monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/chakra-ui/zag\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepozxcvbn-ts","title":"<code>monorepo:zxcvbn-ts</code>","text":"<p>zxcvbn-ts monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/zxcvbn-ts/zxcvbn\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepozxing-net","title":"<code>monorepo:zxing-net</code>","text":"<p>zxing-net monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/micjahn/ZXing.Net\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepohapijs","title":"<code>monorepo:hapijs</code>","text":"<p>hapijs monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/hapijs/**\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepolodash","title":"<code>monorepo:lodash</code>","text":"<p>lodash monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/lodash/**\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepongrx","title":"<code>monorepo:ngrx</code>","text":"<p>ngrx monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/ngrx/**\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreponx","title":"<code>monorepo:nx</code>","text":"<p>nx monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/nrwl/nx**\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepooctokit","title":"<code>monorepo:octokit</code>","text":"<p>octokit monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/octokit/**\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepophp-enqueue","title":"<code>monorepo:php-enqueue</code>","text":"<p>php-enqueue monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/php-enqueue/**\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposemantic-release","title":"<code>monorepo:semantic-release</code>","text":"<p>semantic-release monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/semantic-release/**\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposwc","title":"<code>monorepo:swc</code>","text":"<p>swc monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/swc-project/**\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotwig","title":"<code>monorepo:twig</code>","text":"<p>twig monorepo</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/twigphp/**\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoangularmaterial","title":"<code>monorepo:angularmaterial</code>","text":"<p>angularmaterial monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"/^@angular/material/\",\n    \"/^@angular/cdk/\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoapache-camel","title":"<code>monorepo:apache-camel</code>","text":"<p>apache-camel monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"/^org.apache.camel:/\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoapache-poi","title":"<code>monorepo:apache-poi</code>","text":"<p>apache-poi monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"/^org.apache.poi:/\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoaws-java-sdk","title":"<code>monorepo:aws-java-sdk</code>","text":"<p>aws-java-sdk monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"/^com.amazonaws:aws-java-sdk-/\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoaws-java-sdk-v2","title":"<code>monorepo:aws-java-sdk-v2</code>","text":"<p>aws-java-sdk-v2 monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"/^software.amazon.awssdk:/\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoaxis2","title":"<code>monorepo:axis2</code>","text":"<p>axis2 monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"/^org.apache.axis2:/\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepobabel6","title":"<code>monorepo:babel6</code>","text":"<p>babel6 monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"/^babel6$/\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoembroider","title":"<code>monorepo:embroider</code>","text":"<p>embroider monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"/^@embroider//\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoforge","title":"<code>monorepo:forge</code>","text":"<p>forge monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"/^@forge//\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepofullcalendar","title":"<code>monorepo:fullcalendar</code>","text":"<p>fullcalendar monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"/^@fullcalendar//\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepooracle-database","title":"<code>monorepo:oracle-database</code>","text":"<p>oracle-database monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"/^com.oracle.database.jdbc:/\",\n    \"/^com.oracle.database.nls:/\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepooxlint","title":"<code>monorepo:oxlint</code>","text":"<p>oxlint monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"oxlint\",\n    \"@oxlint/plugins\",\n    \"eslint-plugin-oxlint\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepoprometheus-simpleclient","title":"<code>monorepo:prometheus-simpleclient</code>","text":"<p>prometheus-simpleclient monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"/^io.prometheus:simpleclient/\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreporussh","title":"<code>monorepo:russh</code>","text":"<p>russh monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"/^russh$/\",\n    \"/^russh-keys$/\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposolid","title":"<code>monorepo:solid</code>","text":"<p>solid monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"@solid-design-system/tokens\",\n    \"@solid-design-system/styles\",\n    \"@solid-design-system/components\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepospfx","title":"<code>monorepo:spfx</code>","text":"<p>spfx monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"/^@microsoft/sp-/\",\n    \"/^@microsoft/eslint-.+-spfx$/\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepospock","title":"<code>monorepo:spock</code>","text":"<p>spock monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"/^org\\\\.spockframework:spock-/\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monoreposyncfusion-dotnet","title":"<code>monorepo:syncfusion-dotnet</code>","text":"<p>syncfusion-dotnet monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"/^Syncfusion\\\\./\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepotesting-library","title":"<code>monorepo:testing-library</code>","text":"<p>testing-library monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"/^@testing-library//\"\n  ]\n}\n</code></pre>"},{"location":"presets-monorepo/#monorepowordpress","title":"<code>monorepo:wordpress</code>","text":"<p>wordpress monorepo</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"/^@wordpress/\"\n  ]\n}\n</code></pre>"},{"location":"presets-packages/","title":"Package Presets","text":""},{"location":"presets-packages/#packagesangularjs","title":"<code>packages:angularJs</code>","text":"<p>All AngularJS packages.</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"angular\",\n    \"angular-animate\",\n    \"angular-scroll\",\n    \"angular-sanitize\"\n  ]\n}\n</code></pre>"},{"location":"presets-packages/#packagesapollographql","title":"<code>packages:apollographql</code>","text":"<p>All packages published by Apollo GraphQL.</p> <pre><code>{\n  \"matchSourceUrls\": [\n    \"https://github.com/apollographql/**\"\n  ]\n}\n</code></pre>"},{"location":"presets-packages/#packagesatlaskit","title":"<code>packages:atlaskit</code>","text":"<p>All @atlaskit packages published by Atlassian.</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"@atlaskit/**\"\n  ]\n}\n</code></pre>"},{"location":"presets-packages/#packagesembertemplatelint","title":"<code>packages:emberTemplateLint</code>","text":"<p>All ember-template-lint packages.</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"ember-template-lint**\"\n  ]\n}\n</code></pre>"},{"location":"presets-packages/#packageseslint","title":"<code>packages:eslint</code>","text":"<p>All ESLint packages.</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"*/eslint-plugin\",\n    \"@babel/eslint-parser\",\n    \"@eslint/**\",\n    \"@eslint-community/**\",\n    \"@stylistic/eslint-plugin**\",\n    \"@types/eslint\",\n    \"@types/eslint__**\",\n    \"@typescript-eslint/**\",\n    \"babel-eslint\",\n    \"eslint**\",\n    \"typescript-eslint\"\n  ]\n}\n</code></pre>"},{"location":"presets-packages/#packagesgatsby","title":"<code>packages:gatsby</code>","text":"<p>All packages published by Gatsby.</p> <pre><code>{\n  \"extends\": [\n    \"monorepo:gatsby\" // (1)!\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:gatsby</code>: gatsby monorepo</li> </ol>"},{"location":"presets-packages/#packagesgoogleapis","title":"<code>packages:googleapis</code>","text":"<p>All <code>googleapis</code> packages.</p> <pre><code>{\n  \"matchDatasources\": [\n    \"npm\"\n  ],\n  \"matchPackageNames\": [\n    \"@google-cloud/**\",\n    \"google-auth-library\",\n    \"googleapis\"\n  ]\n}\n</code></pre>"},{"location":"presets-packages/#packagesjstest","title":"<code>packages:jsTest</code>","text":"<p>JavaScript test packages.</p> <pre><code>{\n  \"extends\": [\n    \"packages:jsUnitTest\" // (1)!\n  ]\n}\n</code></pre> <ol> <li><code>packages:jsUnitTest</code>: Unit test packages for JavaScript.</li> </ol>"},{"location":"presets-packages/#packagesjsunittest","title":"<code>packages:jsUnitTest</code>","text":"<p>Unit test packages for JavaScript.</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"@types/chai\",\n    \"@types/ember-mocha\",\n    \"@types/ember-qunit\",\n    \"@types/enzyme\",\n    \"@types/istanbul\",\n    \"@types/jest\",\n    \"@types/mocha\",\n    \"@types/mock-fs\",\n    \"@types/proxyquire\",\n    \"@types/sinon\",\n    \"@types/supertest\",\n    \"coveralls\",\n    \"ember-exam\",\n    \"ember-mocha\",\n    \"ember-qunit\",\n    \"enzyme\",\n    \"istanbul\",\n    \"mock-fs\",\n    \"nock\",\n    \"nyc\",\n    \"proxyquire\",\n    \"supertest\",\n    \"ts-auto-mock\",\n    \"ts-jest\",\n    \"vitest\",\n    \"@jest/**\",\n    \"@testing-library/**\",\n    \"@types/testing-library__**\",\n    \"@vitest/**\",\n    \"chai**\",\n    \"jest**\",\n    \"mocha**\",\n    \"qunit**\",\n    \"should**\",\n    \"sinon**\"\n  ]\n}\n</code></pre>"},{"location":"presets-packages/#packageslinters","title":"<code>packages:linters</code>","text":"<p>All lint-related packages.</p> <pre><code>{\n  \"extends\": [\n    \"packages:emberTemplateLint\", // (1)!\n    \"packages:eslint\", // (2)!\n    \"packages:phpLinters\", // (3)!\n    \"packages:stylelint\", // (4)!\n    \"packages:tslint\" // (5)!\n  ],\n  \"matchPackageNames\": [\n    \"@biomejs/**\",\n    \"@oxlint/**\",\n    \"oxfmt\",\n    \"oxlint\",\n    \"prettier\",\n    \"remark-lint\",\n    \"ruff\",\n    \"rumdl\",\n    \"standard\"\n  ]\n}\n</code></pre> <ol> <li><code>packages:emberTemplateLint</code>: All ember-template-lint packages.</li> <li><code>packages:eslint</code>: All ESLint packages.</li> <li><code>packages:phpLinters</code>: All PHP lint-related packages.</li> <li><code>packages:stylelint</code>: All Stylelint packages.</li> <li><code>packages:tslint</code>: All TSLint packages.</li> </ol>"},{"location":"presets-packages/#packagesmapbox","title":"<code>packages:mapbox</code>","text":"<p>All Mapbox-related packages.</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"leaflet**\",\n    \"mapbox**\"\n  ]\n}\n</code></pre>"},{"location":"presets-packages/#packagesphplinters","title":"<code>packages:phpLinters</code>","text":"<p>All PHP lint-related packages.</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"friendsofphp/php-cs-fixer\",\n    \"squizlabs/php_codesniffer\",\n    \"symplify/easy-coding-standard\"\n  ]\n}\n</code></pre>"},{"location":"presets-packages/#packagesphpunittest","title":"<code>packages:phpUnitTest</code>","text":"<p>Unit test packages for PHP.</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"behat/behat\",\n    \"brianium/paratest\",\n    \"facile-it/paraunit\",\n    \"mockery/mockery\",\n    \"phpspec/prophecy\",\n    \"phpspec/prophecy-phpunit\",\n    \"phpspec/phpspec\",\n    \"phpunit/phpunit\",\n    \"pestphp/**\",\n    \"php-mock/**\"\n  ]\n}\n</code></pre>"},{"location":"presets-packages/#packagespostcss","title":"<code>packages:postcss</code>","text":"<p>All PostCSS packages.</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"postcss\",\n    \"postcss-**\"\n  ]\n}\n</code></pre>"},{"location":"presets-packages/#packagesreact","title":"<code>packages:react</code>","text":"<p>All React packages.</p> <pre><code>{\n  \"matchDatasources\": [\n    \"npm\"\n  ],\n  \"matchPackageNames\": [\n    \"@types/react**\",\n    \"react**\"\n  ]\n}\n</code></pre>"},{"location":"presets-packages/#packagesstylelint","title":"<code>packages:stylelint</code>","text":"<p>All Stylelint packages.</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"stylelint**\"\n  ]\n}\n</code></pre>"},{"location":"presets-packages/#packagestest","title":"<code>packages:test</code>","text":"<p>Test packages.</p> <pre><code>{\n  \"extends\": [\n    \"packages:unitTest\" // (1)!\n  ]\n}\n</code></pre> <ol> <li><code>packages:unitTest</code>: All unit test packages.</li> </ol>"},{"location":"presets-packages/#packagestslint","title":"<code>packages:tslint</code>","text":"<p>All TSLint packages.</p> <pre><code>{\n  \"matchPackageNames\": [\n    \"codelyzer\",\n    \"/\\\\btslint\\\\b/\"\n  ]\n}\n</code></pre>"},{"location":"presets-packages/#packagesunittest","title":"<code>packages:unitTest</code>","text":"<p>All unit test packages.</p> <pre><code>{\n  \"extends\": [\n    \"packages:jsUnitTest\", // (1)!\n    \"packages:phpUnitTest\" // (2)!\n  ]\n}\n</code></pre> <ol> <li><code>packages:jsUnitTest</code>: Unit test packages for JavaScript.</li> <li><code>packages:phpUnitTest</code>: Unit test packages for PHP.</li> </ol>"},{"location":"presets-packages/#packagesvite","title":"<code>packages:vite</code>","text":"<p>All Vite related packages</p> <pre><code>{\n  \"matchDatasources\": [\n    \"npm\"\n  ],\n  \"matchPackageNames\": [\n    \"vite\",\n    \"**vite-plugin**\",\n    \"@vitejs/**\"\n  ]\n}\n</code></pre>"},{"location":"presets-packages/#packagesviteplus","title":"<code>packages:vitePlus</code>","text":"<p>All Vite+ related packages</p> <pre><code>{\n  \"extends\": [\n    \"monorepo:vite-plus\", // (1)!\n    \"monorepo:vitest\" // (2)!\n  ]\n}\n</code></pre> <ol> <li><code>monorepo:vite-plus</code>: vite-plus monorepo</li> <li><code>monorepo:vitest</code>: vitest monorepo</li> </ol>"},{"location":"presets-preview/","title":"Preview Presets","text":""},{"location":"presets-preview/#previewbuildkite","title":"<code>preview:buildkite</code>","text":"<p>Enable Buildkite functionality.</p> <pre><code>{\n  \"buildkite\": {\n    \"enabled\": true\n  }\n}\n</code></pre>"},{"location":"presets-preview/#previewdockercompose","title":"<code>preview:dockerCompose</code>","text":"<p>Enable Docker Compose image updating.</p> <pre><code>{\n  \"docker-compose\": {\n    \"enabled\": true\n  }\n}\n</code></pre>"},{"location":"presets-preview/#previewdockerversions","title":"<code>preview:dockerVersions</code>","text":"<p>Upgrade Docker tags to newer versions.</p> <pre><code>{\n  \"docker-compose\": {\n    \"major\": {\n      \"enabled\": true\n    },\n    \"minor\": {\n      \"enabled\": true\n    }\n  },\n  \"dockerfile\": {\n    \"major\": {\n      \"enabled\": true\n    },\n    \"minor\": {\n      \"enabled\": true\n    }\n  }\n}\n</code></pre>"},{"location":"presets-replacements/","title":"Replacement Presets","text":""},{"location":"presets-replacements/#replacementsall","title":"<code>replacements:all</code>","text":"<p>Apply crowd-sourced package replacement rules.</p> <pre><code>{\n  \"extends\": [\n    \"replacements:actions-attest-build-provenance-to-actions-attest\", // (1)!\n    \"replacements:airbnb-prop-types-to-prop-types-tools\", // (2)!\n    \"replacements:apollo-server-to-scoped\", // (3)!\n    \"replacements:aws-sdk-smithy-client-to-smithy\", // (4)!\n    \"replacements:babel-eslint-to-eslint-parser\", // (5)!\n    \"replacements:base-ui-components-to-base-ui\", // (6)!\n    \"replacements:containerbase\", // (7)!\n    \"replacements:cpx-to-maintenance-fork\", // (8)!\n    \"replacements:cucumber-to-scoped\", // (9)!\n    \"replacements:dev-oidc-provider-to-unscoped\", // (10)!\n    \"replacements:dev-process-manager-to-unscoped\", // (11)!\n    \"replacements:docker-compose\", // (12)!\n    \"replacements:edb-jdbc-to-enterprisedb\", // (13)!\n    \"replacements:eslint-config-standard-with-typescript-to-eslint-config-love\", // (14)!\n    \"replacements:eslint-plugin-eslint-comments-to-maintained-fork\", // (15)!\n    \"replacements:eslint-plugin-node-to-maintained-fork\", // (16)!\n    \"replacements:eslint-plugin-vitest-to-scoped\", // (17)!\n    \"replacements:express-mung-to-express-response-middleware\", // (18)!\n    \"replacements:fakerjs-to-scoped\", // (19)!\n    \"replacements:fastify-to-scoped\", // (20)!\n    \"replacements:framer-motion-to-motion\", // (21)!\n    \"replacements:google-github-action-release-please-to-googleapis\", // (22)!\n    \"replacements:grafana-oss-to-grafana\", // (23)!\n    \"replacements:hapi-to-scoped\", // (24)!\n    \"replacements:home-operations-to-official\", // (25)!\n    \"replacements:jade-to-pug\", // (26)!\n    \"replacements:joi-to-scoped\", // (27)!\n    \"replacements:joi-to-unscoped\", // (28)!\n    \"replacements:k8s-registry-move\", // (29)!\n    \"replacements:kotlin-logging-to-oshai\", // (30)!\n    \"replacements:material-ui-to-mui\", // (31)!\n    \"replacements:mem-rename\", // (32)!\n    \"replacements:messageFormat-to-scoped\", // (33)!\n    \"replacements:middie-to-scoped\", // (34)!\n    \"replacements:monochromata-cucumber-reporting-plugin-to-jvt\", // (35)!\n    \"replacements:now-to-vercel\", // (36)!\n    \"replacements:npm-run-all-to-maintenance-fork\", // (37)!\n    \"replacements:ojdbc-to-ojdbc11\", // (38)!\n    \"replacements:opencost-registry-move\", // (39)!\n    \"replacements:parcel-css-to-lightningcss\", // (40)!\n    \"replacements:passport-saml\", // (41)!\n    \"replacements:pwpush-to-universal-container\", // (42)!\n    \"replacements:react-native-magic-modal-to-magic-modal\", // (43)!\n    \"replacements:react-query-devtools-to-scoped\", // (44)!\n    \"replacements:react-query-to-scoped\", // (45)!\n    \"replacements:react-scripts-ts-to-react-scripts\", // (46)!\n    \"replacements:read-pkg-up-rename\", // (47)!\n    \"replacements:redux-devtools-extension-to-scope\", // (48)!\n    \"replacements:renovate-pep440-to-renovatebot-pep440\", // (49)!\n    \"replacements:rolldown-vite-to-vite\", // (50)!\n    \"replacements:rollup-babel-to-scoped\", // (51)!\n    \"replacements:rollup-json-to-scoped\", // (52)!\n    \"replacements:rollup-node-resolve-to-scoped\", // (53)!\n    \"replacements:rollup-terser-to-scoped\", // (54)!\n    \"replacements:rome-to-biome\", // (55)!\n    \"replacements:scorecard-registry-move\", // (56)!\n    \"replacements:semantic-release-replace-plugin-to-unscoped\", // (57)!\n    \"replacements:spectre-cli-to-spectre-console-cli\", // (58)!\n    \"replacements:standard-version-to-commit-and-tag\", // (59)!\n    \"replacements:temporalio-interceptors-opentelemetry-to-v2\", // (60)!\n    \"replacements:terraform-provider-mrparkers-keycloak-to-keycloak-keycloak\", // (61)!\n    \"replacements:tsconfig-bases-node\", // (62)!\n    \"replacements:typeorm-seeding-to-scoped\", // (63)!\n    \"replacements:ucanaccess-to-io-github-spannm\", // (64)!\n    \"replacements:vitest-coverage-c8-to-coverage-v8\", // (65)!\n    \"replacements:vso-task-lib-to-azure-pipelines-task-lib\", // (66)!\n    \"replacements:vsts-task-lib-to-azure-pipelines-task-lib\", // (67)!\n    \"replacements:wuchale-vite-plugin-to-wuchale\", // (68)!\n    \"replacements:xlsx-to-scoped\", // (69)!\n    \"replacements:xmldom-to-scoped\", // (70)!\n    \"replacements:zap\" // (71)!\n  ]\n}\n</code></pre> <ol> <li><code>replacements:actions-attest-build-provenance-to-actions-attest</code>: <code>actions/attest-build-provenance</code> was renamed to <code>actions/attest</code>.</li> <li><code>replacements:airbnb-prop-types-to-prop-types-tools</code>: <code>airbnb-prop-types</code> was given to a new maintainer and renamed to <code>prop-types-tools</code>.</li> <li><code>replacements:apollo-server-to-scoped</code>: <code>apollo-server</code> packages became scoped.</li> <li><code>replacements:aws-sdk-smithy-client-to-smithy</code>: <code>@aws-sdk/smithy-client</code> was moved to <code>@smithy/smithy-client</code>.</li> <li><code>replacements:babel-eslint-to-eslint-parser</code>: <code>babel-eslint</code> was renamed under the <code>@babel</code> scope.</li> <li><code>replacements:base-ui-components-to-base-ui</code>: <code>@base-ui-components/react</code> was renamed to <code>@base-ui/react</code>.</li> <li><code>replacements:containerbase</code>: Replace containerbase dependencies.</li> <li><code>replacements:cpx-to-maintenance-fork</code>: Maintenance fork of <code>cpx</code></li> <li><code>replacements:cucumber-to-scoped</code>: <code>cucumber</code> became scoped.</li> <li><code>replacements:dev-oidc-provider-to-unscoped</code>: <code>dev-oidc-provider</code> became unscoped.</li> <li><code>replacements:dev-process-manager-to-unscoped</code>: <code>dev-process-manager</code> became unscoped.</li> <li><code>replacements:docker-compose</code>: Compose is now part of the official Docker image.</li> <li><code>replacements:edb-jdbc-to-enterprisedb</code>: <code>com.edb:edb-jdbc</code> and <code>com.edb:edb-jdbc18</code> were moved to <code>com.enterprisedb:edb-jdbc</code>.</li> <li><code>replacements:eslint-config-standard-with-typescript-to-eslint-config-love</code>: <code>eslint-config-standard-with-typescript</code> was renamed to <code>eslint-config-love</code>.</li> <li><code>replacements:eslint-plugin-eslint-comments-to-maintained-fork</code>: Replace <code>eslint-plugin-eslint-comments</code> with a maintained fork: <code>@eslint-community/eslint-plugin-eslint-comments</code>.</li> <li><code>replacements:eslint-plugin-node-to-maintained-fork</code>: Replace stale <code>eslint-plugin-node</code> with a maintained fork: <code>eslint-plugin-n</code>.</li> <li><code>replacements:eslint-plugin-vitest-to-scoped</code>: <code>eslint-plugin-vitest</code> became scoped.</li> <li><code>replacements:express-mung-to-express-response-middleware</code>: Replace stale <code>express-mung</code> with a maintained fork: <code>express-response-middleware</code>.</li> <li><code>replacements:fakerjs-to-scoped</code>: <code>fakerjs</code> packages became scoped.</li> <li><code>replacements:fastify-to-scoped</code>: <code>fastify</code> packages became scoped.</li> <li><code>replacements:framer-motion-to-motion</code>: <code>framer-motion</code> and Motion One have merged under the package name <code>motion</code>, though <code>framer-motion</code> is still being published. <code>motion</code> is now the recommended name.</li> <li><code>replacements:google-github-action-release-please-to-googleapis</code>: <code>google-github-action/release-please</code> was renamed to <code>googleapis/release-please</code>.</li> <li><code>replacements:grafana-oss-to-grafana</code>: <code>grafana/grafana-oss</code> was replaced by <code>grafana/grafana</code> with the same images</li> <li><code>replacements:hapi-to-scoped</code>: <code>hapi</code> became scoped.</li> <li><code>replacements:home-operations-to-official</code>: <code>home-operations</code> only builts these until official versions are released</li> <li><code>replacements:jade-to-pug</code>: Jade was renamed to Pug.</li> <li><code>replacements:joi-to-scoped</code>: <code>joi</code> became scoped under the <code>hapi</code> organization.</li> <li><code>replacements:joi-to-unscoped</code>: <code>joi</code> was moved out of the <code>hapi</code> organization.</li> <li><code>replacements:k8s-registry-move</code>: The Kubernetes container registry has changed from <code>k8s.gcr.io</code> to <code>registry.k8s.io</code>.</li> <li><code>replacements:kotlin-logging-to-oshai</code>: replaces kotlin-logging github organization and maven group from MicroUtils to oshai</li> <li><code>replacements:material-ui-to-mui</code>: The <code>material-ui</code> monorepo org was renamed from <code>@material-ui</code> to <code>@mui</code>.</li> <li><code>replacements:mem-rename</code>: <code>mem</code> was renamed to <code>memoize</code>.</li> <li><code>replacements:messageFormat-to-scoped</code>: The <code>messageformat</code> monorepo package naming scheme changed from <code>messageFormat-{{package}}</code> to <code>@messageformat/{{package}}</code>.</li> <li><code>replacements:middie-to-scoped</code>: <code>middie</code> became scoped.</li> <li><code>replacements:monochromata-cucumber-reporting-plugin-to-jvt</code>: <code>de.monochromata.cucumber:reporting-plugin</code> was moved to <code>me.jvt.cucumber:reporting-plugin</code>.</li> <li><code>replacements:now-to-vercel</code>: <code>now</code> was renamed to <code>vercel</code>.</li> <li><code>replacements:npm-run-all-to-maintenance-fork</code>: Maintenance fork of <code>npm-run-all</code></li> <li><code>replacements:ojdbc-to-ojdbc11</code>: <code>ojdbc:ojdbc</code> and <code>com.oracle.database.jdbc:ojdbc10</code> were moved to <code>com.oracle.database.jdbc:ojdbc11</code>.</li> <li><code>replacements:opencost-registry-move</code>: Replace OpenCost registry from quay.io to ghcr.io.</li> <li><code>replacements:parcel-css-to-lightningcss</code>: <code>@parcel/css</code> was renamed to <code>lightningcss</code>.</li> <li><code>replacements:passport-saml</code>: <code>passport-saml</code> was renamed to <code>@node-saml/passport-saml</code>.</li> <li><code>replacements:pwpush-to-universal-container</code>: Replace deprecated Password Pusher database-specific images with its universal image.</li> <li><code>replacements:react-native-magic-modal-to-magic-modal</code>: <code>react-native-magic-modal</code> was renamed to <code>magic-modal</code> in version 10.0.0. The old name is deprecated but still published at the same version, depending on and re-exporting <code>magic-modal</code>.</li> <li><code>replacements:react-query-devtools-to-scoped</code>: <code>react-query/devtools</code> became scoped under the <code>tanstack</code> organization.</li> <li><code>replacements:react-query-to-scoped</code>: <code>react-query</code> became scoped under the <code>tanstack</code> organization.</li> <li><code>replacements:react-scripts-ts-to-react-scripts</code>: <code>react-scripts</code> supports TypeScript since version <code>2.1.0</code>.</li> <li><code>replacements:read-pkg-up-rename</code>: <code>read-pkg-up</code> was renamed to <code>read-package-up</code>.</li> <li><code>replacements:redux-devtools-extension-to-scope</code>: The <code>redux-devtools-extension</code> package was renamed to <code>@redux-devtools/extension</code>.</li> <li><code>replacements:renovate-pep440-to-renovatebot-pep440</code>: The <code>@renovate/pep440</code> package was renamed to <code>@renovatebot/pep440</code>.</li> <li><code>replacements:rolldown-vite-to-vite</code>: <code>rolldown-vite</code> was merged to <code>vite</code> in version 8.0.0.</li> <li><code>replacements:rollup-babel-to-scoped</code>: The babel plugin for rollup became scoped.</li> <li><code>replacements:rollup-json-to-scoped</code>: The json plugin for rollup became scoped.</li> <li><code>replacements:rollup-node-resolve-to-scoped</code>: The node-resolve plugin for rollup became scoped.</li> <li><code>replacements:rollup-terser-to-scoped</code>: The terser plugin for rollup became scoped.</li> <li><code>replacements:rome-to-biome</code>: The Rome repository is archived, and Biome is the community replacement. Read the Biome announcement for migration instructions.</li> <li><code>replacements:scorecard-registry-move</code>: The OpenSSF Scorecard container images moved from <code>gcr.io/openssf/scorecard</code> to <code>ghcr.io/ossf/scorecard</code>.</li> <li><code>replacements:semantic-release-replace-plugin-to-unscoped</code>: <code>semantic-release-replace-plugin</code> was moved out of the <code>google</code> organization.</li> <li><code>replacements:spectre-cli-to-spectre-console-cli</code>: The <code>Spectre.Cli</code> package was renamed to <code>Spectre.Console.Cli</code>.</li> <li><code>replacements:standard-version-to-commit-and-tag</code>: <code>standard-version</code> is now maintained as <code>commit-and-tag-version</code>.</li> <li><code>replacements:temporalio-interceptors-opentelemetry-to-v2</code>: <code>@temporalio/interceptors-opentelemetry</code> was replaced by <code>@temporalio/interceptors-opentelemetry-v2</code>, which supports OpenTelemetry v2.</li> <li><code>replacements:terraform-provider-mrparkers-keycloak-to-keycloak-keycloak</code>: The Keycloak Terraform/OpenTofu provider was moved to <code>keycloak/keycloak</code>.</li> <li><code>replacements:tsconfig-bases-node</code>: <code>@tsconfig-bases</code> node updates.</li> <li><code>replacements:typeorm-seeding-to-scoped</code>: <code>typeorm-seeding</code> is now maintained as scoped package.</li> <li><code>replacements:ucanaccess-to-io-github-spannm</code>: <code>net.sf.ucanaccess:ucanaccess</code> is no longer maintained, development continues at <code>io.github.spannm:ucanaccess</code>.</li> <li><code>replacements:vitest-coverage-c8-to-coverage-v8</code>: <code>@vitest/coverage-c8</code> was renamed to <code>@vitest/coverage-v8</code>.</li> <li><code>replacements:vso-task-lib-to-azure-pipelines-task-lib</code>: The <code>vso-task-lib</code> package is now published as <code>azure-pipelines-task-lib</code>.</li> <li><code>replacements:vsts-task-lib-to-azure-pipelines-task-lib</code>: The <code>vsts-task-lib</code> package is now published as <code>azure-pipelines-task-lib</code>.</li> <li><code>replacements:wuchale-vite-plugin-to-wuchale</code>: The <code>@wuchale/vite-plugin</code> package is now included in <code>wuchale</code> at <code>wuchale/vite</code>.</li> <li><code>replacements:xlsx-to-scoped</code>: The <code>xlsx</code> package is now published as <code>@e965/xlsx</code>.</li> <li><code>replacements:xmldom-to-scoped</code>: The <code>xmldom</code> package is now published as <code>@xmldom/xmldom</code>.</li> <li><code>replacements:zap</code>: Replace ZAP dependencies.</li> </ol>"},{"location":"presets-replacements/#replacementsactions-attest-build-provenance-to-actions-attest","title":"<code>replacements:actions-attest-build-provenance-to-actions-attest</code>","text":"<p><code>actions/attest-build-provenance</code> was renamed to <code>actions/attest</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=4\",\n      \"matchDatasources\": [\n        \"github-tags\"\n      ],\n      \"matchPackageNames\": [\n        \"actions/attest-build-provenance\"\n      ],\n      \"replacementName\": \"actions/attest\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsairbnb-prop-types-to-prop-types-tools","title":"<code>replacements:airbnb-prop-types-to-prop-types-tools</code>","text":"<p><code>airbnb-prop-types</code> was given to a new maintainer and renamed to <code>prop-types-tools</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"^2\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"airbnb-prop-types\"\n      ],\n      \"replacementName\": \"prop-types-tools\",\n      \"replacementVersion\": \"2.17.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsapollo-server-to-scoped","title":"<code>replacements:apollo-server-to-scoped</code>","text":"<p><code>apollo-server</code> packages became scoped.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=3.10.3\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"apollo-server\",\n        \"apollo-server-core\",\n        \"apollo-server-express\"\n      ],\n      \"replacementName\": \"@apollo/server\",\n      \"replacementVersion\": \"4.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=3.3.1\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"apollo-server-errors\"\n      ],\n      \"replacementName\": \"@apollo/server\",\n      \"replacementVersion\": \"4.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=3.6.3\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"apollo-server-types\",\n        \"apollo-server-plugin-base\"\n      ],\n      \"replacementName\": \"@apollo/server\",\n      \"replacementVersion\": \"4.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=3.7.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"apollo-datasource-rest\"\n      ],\n      \"replacementName\": \"@apollo/datasource-rest\",\n      \"replacementVersion\": \"4.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=3.7.1\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"apollo-server-plugin-response-cache\"\n      ],\n      \"replacementName\": \"@apollo/server-plugin-response-cache\",\n      \"replacementVersion\": \"4.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=3.5.1\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"apollo-server-plugin-operation-registry\"\n      ],\n      \"replacementName\": \"@apollo/server-plugin-operation-registry\",\n      \"replacementVersion\": \"3.5.6\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=3.3.3\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"apollo-reporting-protobuf\"\n      ],\n      \"replacementName\": \"@apollo/usage-reporting-protobuf\",\n      \"replacementVersion\": \"4.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsaws-sdk-smithy-client-to-smithy","title":"<code>replacements:aws-sdk-smithy-client-to-smithy</code>","text":"<p><code>@aws-sdk/smithy-client</code> was moved to <code>@smithy/smithy-client</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@aws-sdk/smithy-client\"\n      ],\n      \"replacementName\": \"@smithy/smithy-client\",\n      \"replacementVersion\": \"1.0.5\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsbabel-eslint-to-eslint-parser","title":"<code>replacements:babel-eslint-to-eslint-parser</code>","text":"<p><code>babel-eslint</code> was renamed under the <code>@babel</code> scope.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=7.11.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"babel-eslint\"\n      ],\n      \"replacementName\": \"@babel/eslint-parser\",\n      \"replacementVersion\": \"7.11.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsbase-ui-components-to-base-ui","title":"<code>replacements:base-ui-components-to-base-ui</code>","text":"<p><code>@base-ui-components/react</code> was renamed to <code>@base-ui/react</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@base-ui-components/react\"\n      ],\n      \"replacementName\": \"@base-ui/react\",\n      \"replacementVersion\": \"1.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsclang-format-to-maintenance-fork","title":"<code>replacements:clang-format-to-maintenance-fork</code>","text":"<p>Maintenance fork of <code>clang-format</code></p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"clang-format\"\n      ],\n      \"replacementName\": \"clang-format-node\",\n      \"replacementVersion\": \"2.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementscontainerbase","title":"<code>replacements:containerbase</code>","text":"<p>Replace containerbase dependencies.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Replace `containerbase/(buildpack|base)` and `renovate/buildpack` with `ghcr.io/containerbase/base`.\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"/^(?:docker\\\\.io/)?containerbase/(?:buildpack|base)$/\",\n        \"/^ghcr\\\\.io/containerbase/buildpack$/\",\n        \"/^(?:docker\\\\.io/)?renovate/buildpack$/\"\n      ],\n      \"replacementName\": \"ghcr.io/containerbase/base\"\n    },\n    {\n      \"description\": \"Replace `containerbase/node` and `renovate/node` with `ghcr.io/containerbase/node`.\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"/^(?:docker\\\\.io/)?(?:containerbase|renovate)/node$/\"\n      ],\n      \"replacementName\": \"ghcr.io/containerbase/node\"\n    },\n    {\n      \"description\": \"Replace `containerbase/sidecar` and `renovate/sidecar` with `ghcr.io/containerbase/sidecar`.\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"/^(?:docker\\\\.io/)?(?:containerbase|renovate)/sidecar$/\"\n      ],\n      \"replacementName\": \"ghcr.io/containerbase/sidecar\"\n    },\n    {\n      \"description\": \"Replace `renovatebot/internal-tools` with `containerbase/internal-tools`.\",\n      \"matchDatasources\": [\n        \"github-tags\"\n      ],\n      \"matchPackageNames\": [\n        \"renovatebot/internal-tools\"\n      ],\n      \"replacementName\": \"containerbase/internal-tools\"\n    },\n    {\n      \"description\": \"Replace `renovate` `slim` docker tag with `latest`.\",\n      \"matchCurrentValue\": \"/^slim$/\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"ghcr.io/renovatebot/renovate\",\n        \"/^(?:docker\\\\.io/)?renovate/renovate$/\"\n      ],\n      \"replacementVersion\": \"latest\"\n    },\n    {\n      \"description\": \"Remove `renovate` `-slim` docker tag suffix.\",\n      \"extractVersion\": \"^(?&lt;version&gt;.+)-slim$\",\n      \"matchCurrentValue\": \"/-slim$/\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"ghcr.io/renovatebot/renovate\",\n        \"/^(?:docker\\\\.io/)?renovate/renovate$/\"\n      ],\n      \"versioning\": \"semver\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementscorentinmusard-otel-cicd-action-to-dash0hq","title":"<code>replacements:corentinmusard-otel-cicd-action-to-dash0hq</code>","text":"<p><code>corentinmusard/otel-cicd-action</code> was transferred to <code>dash0hq/otel-cicd-action</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"github-releases\",\n        \"github-tags\"\n      ],\n      \"matchPackageNames\": [\n        \"corentinmusard/otel-cicd-action\"\n      ],\n      \"replacementName\": \"dash0hq/otel-cicd-action\",\n      \"replacementVersion\": \"4.0.1\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementscpx-to-maintenance-fork","title":"<code>replacements:cpx-to-maintenance-fork</code>","text":"<p>Maintenance fork of <code>cpx</code></p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"cpx\"\n      ],\n      \"replacementName\": \"cpx2\",\n      \"replacementVersion\": \"2.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementscucumber-to-scoped","title":"<code>replacements:cucumber-to-scoped</code>","text":"<p><code>cucumber</code> became scoped.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"cucumber\"\n      ],\n      \"replacementName\": \"@cucumber/cucumber\",\n      \"replacementVersion\": \"7.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsdev-oidc-provider-to-unscoped","title":"<code>replacements:dev-oidc-provider-to-unscoped</code>","text":"<p><code>dev-oidc-provider</code> became unscoped.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=1.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@comet/dev-oidc-provider\"\n      ],\n      \"replacementName\": \"dev-oidc-provider\",\n      \"replacementVersion\": \"2.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsdev-process-manager-to-unscoped","title":"<code>replacements:dev-process-manager-to-unscoped</code>","text":"<p><code>dev-process-manager</code> became unscoped.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=3.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@comet/dev-process-manager\"\n      ],\n      \"replacementName\": \"dev-process-manager\",\n      \"replacementVersion\": \"4.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsdocker-compose","title":"<code>replacements:docker-compose</code>","text":"<p>Compose is now part of the official Docker image.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"docker/compose\"\n      ],\n      \"matchCurrentValue\": \"/^((debian|alpine)-)?1\\\\.29\\\\.2$/\",\n      \"replacementName\": \"docker\",\n      \"replacementVersion\": \"23.0.0-cli\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsedb-jdbc-to-enterprisedb","title":"<code>replacements:edb-jdbc-to-enterprisedb</code>","text":"<p><code>com.edb:edb-jdbc</code> and <code>com.edb:edb-jdbc18</code> were moved to <code>com.enterprisedb:edb-jdbc</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"maven\"\n      ],\n      \"matchPackageNames\": [\n        \"com.edb:edb-jdbc\"\n      ],\n      \"replacementName\": \"com.enterprisedb:edb-jdbc\",\n      \"replacementVersion\": \"42.5.4.2\"\n    },\n    {\n      \"matchDatasources\": [\n        \"maven\"\n      ],\n      \"matchPackageNames\": [\n        \"com.edb:edb-jdbc18\"\n      ],\n      \"replacementName\": \"com.enterprisedb:edb-jdbc\",\n      \"replacementVersion\": \"42.5.4.2\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementseslint-config-standard-with-typescript-to-eslint-config-love","title":"<code>replacements:eslint-config-standard-with-typescript-to-eslint-config-love</code>","text":"<p><code>eslint-config-standard-with-typescript</code> was renamed to <code>eslint-config-love</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"^43.0.1\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"eslint-config-standard-with-typescript\"\n      ],\n      \"replacementName\": \"eslint-config-love\",\n      \"replacementVersion\": \"43.1.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementseslint-plugin-eslint-comments-to-maintained-fork","title":"<code>replacements:eslint-plugin-eslint-comments-to-maintained-fork</code>","text":"<p>Replace <code>eslint-plugin-eslint-comments</code> with a maintained fork: <code>@eslint-community/eslint-plugin-eslint-comments</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"eslint-plugin-eslint-comments\"\n      ],\n      \"matchCurrentVersion\": \"^3.2.0\",\n      \"replacementName\": \"@eslint-community/eslint-plugin-eslint-comments\",\n      \"replacementVersion\": \"3.2.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementseslint-plugin-node-to-maintained-fork","title":"<code>replacements:eslint-plugin-node-to-maintained-fork</code>","text":"<p>Replace stale <code>eslint-plugin-node</code> with a maintained fork: <code>eslint-plugin-n</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"^11.1.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"eslint-plugin-node\"\n      ],\n      \"replacementName\": \"eslint-plugin-n\",\n      \"replacementVersion\": \"14.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementseslint-plugin-vitest-to-scoped","title":"<code>replacements:eslint-plugin-vitest-to-scoped</code>","text":"<p><code>eslint-plugin-vitest</code> became scoped.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=0.5.4\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"eslint-plugin-vitest\"\n      ],\n      \"replacementName\": \"@vitest/eslint-plugin\",\n      \"replacementVersion\": \"1.0.1\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsexpress-mung-to-express-response-middleware","title":"<code>replacements:express-mung-to-express-response-middleware</code>","text":"<p>Replace stale <code>express-mung</code> with a maintained fork: <code>express-response-middleware</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=0.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"express-mung\"\n      ],\n      \"replacementName\": \"express-response-middleware\",\n      \"replacementVersion\": \"1.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsfakerjs-to-scoped","title":"<code>replacements:fakerjs-to-scoped</code>","text":"<p><code>fakerjs</code> packages became scoped.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"faker\"\n      ],\n      \"replacementName\": \"@faker-js/faker\",\n      \"replacementVersion\": \"5.5.3\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=4.0.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"faker\"\n      ],\n      \"replacementName\": \"@faker-js/faker\",\n      \"replacementVersion\": \"4.1.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=3.0.0 &lt;4.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"faker\"\n      ],\n      \"replacementName\": \"@faker-js/faker\",\n      \"replacementVersion\": \"3.1.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=2.0.0 &lt;3.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"faker\"\n      ],\n      \"replacementName\": \"@faker-js/faker\",\n      \"replacementVersion\": \"2.1.5\"\n    },\n    {\n      \"matchCurrentVersion\": \"&lt;2.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"faker\"\n      ],\n      \"replacementName\": \"@faker-js/faker\",\n      \"replacementVersion\": \"1.1.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsfastify-to-scoped","title":"<code>replacements:fastify-to-scoped</code>","text":"<p><code>fastify</code> packages became scoped.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=3.3.0 &lt;4.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-accepts-serializer\"\n      ],\n      \"replacementName\": \"@fastify/accepts-serializer\",\n      \"replacementVersion\": \"4.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=2.3.0 &lt;3.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-accepts\"\n      ],\n      \"replacementName\": \"@fastify/accepts\",\n      \"replacementVersion\": \"3.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=1.2.0 &lt;2.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-auth\"\n      ],\n      \"replacementName\": \"@fastify/auth\",\n      \"replacementVersion\": \"2.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=3.13.0 &lt;4.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-autoload\"\n      ],\n      \"replacementName\": \"@fastify/autoload\",\n      \"replacementVersion\": \"4.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=1.3.0 &lt;2.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-awilix\"\n      ],\n      \"replacementName\": \"@fastify/awilix\",\n      \"replacementVersion\": \"2.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=2.3.0 &lt;3.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-basic-auth\"\n      ],\n      \"replacementName\": \"@fastify/basic-auth\",\n      \"replacementVersion\": \"3.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=6.3.0 &lt;7.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-bearer-auth\"\n      ],\n      \"replacementName\": \"@fastify/bearer-auth\",\n      \"replacementVersion\": \"7.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=6.3.0 &lt;7.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-caching\"\n      ],\n      \"replacementName\": \"@fastify/caching\",\n      \"replacementVersion\": \"7.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=1.2.0 &lt;2.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-circuit-breaker\"\n      ],\n      \"replacementName\": \"@fastify/circuit-breaker\",\n      \"replacementVersion\": \"2.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=4.1.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-compress\"\n      ],\n      \"replacementName\": \"@fastify/compress\",\n      \"replacementVersion\": \"5.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=5.7.0 &lt;6.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-cookie\"\n      ],\n      \"replacementName\": \"@fastify/cookie\",\n      \"replacementVersion\": \"6.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=6.1.0 &lt;7.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-cors\"\n      ],\n      \"replacementName\": \"@fastify/cors\",\n      \"replacementVersion\": \"7.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=1.1.0 &lt;2.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-diagnostics-channel\"\n      ],\n      \"replacementName\": \"@fastify/diagnostics-channel\",\n      \"replacementVersion\": \"2.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=1.2.0 &lt;2.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-elasticsearch\"\n      ],\n      \"replacementName\": \"@fastify/elasticsearch\",\n      \"replacementVersion\": \"2.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=2.2.0 &lt;3.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-env\"\n      ],\n      \"replacementName\": \"@fastify/env\",\n      \"replacementVersion\": \"3.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=1.2.0 &lt;2.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-error\"\n      ],\n      \"replacementName\": \"@fastify/error\",\n      \"replacementVersion\": \"2.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=2.2.0 &lt;3.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-etag\"\n      ],\n      \"replacementName\": \"@fastify/etag\",\n      \"replacementVersion\": \"3.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=0.4.0 &lt;1.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-express\"\n      ],\n      \"replacementName\": \"@fastify/express\",\n      \"replacementVersion\": \"1.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=3.1.0 &lt;4.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-flash\"\n      ],\n      \"replacementName\": \"@fastify/flash\",\n      \"replacementVersion\": \"4.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=5.3.0 &lt;6.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-formbody\"\n      ],\n      \"replacementName\": \"@fastify/formbody\",\n      \"replacementVersion\": \"6.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=1.1.0 &lt;2.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-funky\"\n      ],\n      \"replacementName\": \"@fastify/funky\",\n      \"replacementVersion\": \"2.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=7.1.0 &lt;8.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-helmet\"\n      ],\n      \"replacementName\": \"@fastify/helmet\",\n      \"replacementVersion\": \"8.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=0.3.0 &lt;1.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-hotwire\"\n      ],\n      \"replacementName\": \"@fastify/hotwire\",\n      \"replacementVersion\": \"1.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=6.3.0 &lt;7.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-http-proxy\"\n      ],\n      \"replacementName\": \"@fastify/http-proxy\",\n      \"replacementVersion\": \"7.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=4.2.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-jwt\"\n      ],\n      \"replacementName\": \"@fastify/jwt\",\n      \"replacementVersion\": \"5.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=0.3.0 &lt;1.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-kafka\"\n      ],\n      \"replacementName\": \"@fastify/kafka\",\n      \"replacementVersion\": \"1.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=3.2.0 &lt;4.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-leveldb\"\n      ],\n      \"replacementName\": \"@fastify/leveldb\",\n      \"replacementVersion\": \"4.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=4.2.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-mongodb\"\n      ],\n      \"replacementName\": \"@fastify/mongodb\",\n      \"replacementVersion\": \"5.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=5.4.0 &lt;6.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-multipart\"\n      ],\n      \"replacementName\": \"@fastify/multipart\",\n      \"replacementVersion\": \"6.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=2.2.0 &lt;3.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-mysql\"\n      ],\n      \"replacementName\": \"@fastify/mysql\",\n      \"replacementVersion\": \"3.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=7.3.0 &lt;8.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-nextjs\"\n      ],\n      \"replacementName\": \"@fastify/nextjs\",\n      \"replacementVersion\": \"8.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=4.6.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-oauth2\"\n      ],\n      \"replacementName\": \"@fastify/oauth2\",\n      \"replacementVersion\": \"5.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=0.5.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-passport\"\n      ],\n      \"replacementName\": \"@fastify/passport\",\n      \"replacementVersion\": \"1.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=3.7.0 &lt;4.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-postgres\"\n      ],\n      \"replacementName\": \"@fastify/postgres\",\n      \"replacementVersion\": \"4.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=5.9.0 &lt;6.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-rate-limit\"\n      ],\n      \"replacementName\": \"@fastify/rate-limit\",\n      \"replacementVersion\": \"6.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=4.4.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-redis\"\n      ],\n      \"replacementName\": \"@fastify/redis\",\n      \"replacementVersion\": \"5.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=6.7.0 &lt;7.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-reply-from\"\n      ],\n      \"replacementName\": \"@fastify/reply-from\",\n      \"replacementVersion\": \"7.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=2.3.0 &lt;3.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-request-context\"\n      ],\n      \"replacementName\": \"@fastify/request-context\",\n      \"replacementVersion\": \"3.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=0.3.0 &lt;1.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-response-validation\"\n      ],\n      \"replacementName\": \"@fastify/response-validation\",\n      \"replacementVersion\": \"1.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=2.1.0 &lt;3.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-routes-stats\"\n      ],\n      \"replacementName\": \"@fastify/routes-stats\",\n      \"replacementVersion\": \"3.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=3.2.0 &lt;4.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-routes\"\n      ],\n      \"replacementName\": \"@fastify/routes\",\n      \"replacementVersion\": \"4.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=1.1.0 &lt;2.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-schedule\"\n      ],\n      \"replacementName\": \"@fastify/schedule\",\n      \"replacementVersion\": \"2.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=3.2.0 &lt;4.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-secure-session\"\n      ],\n      \"replacementName\": \"@fastify/secure-session\",\n      \"replacementVersion\": \"4.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=3.2.0 &lt;4.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-sensible\"\n      ],\n      \"replacementName\": \"@fastify/sensible\",\n      \"replacementVersion\": \"4.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=0.3.0 &lt;1.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-soap-client\"\n      ],\n      \"replacementName\": \"@fastify/soap-client\",\n      \"replacementVersion\": \"1.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=4.7.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-static\"\n      ],\n      \"replacementName\": \"@fastify/static\",\n      \"replacementVersion\": \"5.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=5.2.0 &lt;6.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-swagger\"\n      ],\n      \"replacementName\": \"@fastify/swagger\",\n      \"replacementVersion\": \"6.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=3.1.0 &lt;4.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-url-data\"\n      ],\n      \"replacementName\": \"@fastify/url-data\",\n      \"replacementVersion\": \"4.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=4.3.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-websocket\"\n      ],\n      \"replacementName\": \"@fastify/websocket\",\n      \"replacementVersion\": \"5.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=2.1.0 &lt;3.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"fastify-zipkin\"\n      ],\n      \"replacementName\": \"@fastify/zipkin\",\n      \"replacementVersion\": \"3.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsframer-motion-to-motion","title":"<code>replacements:framer-motion-to-motion</code>","text":"<p><code>framer-motion</code> and Motion One have merged under the package name <code>motion</code>, though <code>framer-motion</code> is still being published. <code>motion</code> is now the recommended name.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=11.11.12\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"framer-motion\"\n      ],\n      \"replacementName\": \"motion\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsgoogle-github-action-release-please-to-googleapis","title":"<code>replacements:google-github-action-release-please-to-googleapis</code>","text":"<p><code>google-github-action/release-please</code> was renamed to <code>googleapis/release-please</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"github-tags\"\n      ],\n      \"matchPackageNames\": [\n        \"google-github-actions/release-please-action\"\n      ],\n      \"replacementName\": \"googleapis/release-please-action\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsgrafana-oss-to-grafana","title":"<code>replacements:grafana-oss-to-grafana</code>","text":"<p><code>grafana/grafana-oss</code> was replaced by <code>grafana/grafana</code> with the same images</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"/^(?:docker\\\\.io/)?grafana/grafana-oss$/\"\n      ],\n      \"matchCurrentVersion\": \"12.1.1\",\n      \"replacementName\": \"grafana/grafana\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementshapi-to-scoped","title":"<code>replacements:hapi-to-scoped</code>","text":"<p><code>hapi</code> became scoped.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=18.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"hapi\"\n      ],\n      \"replacementName\": \"@hapi/hapi\",\n      \"replacementVersion\": \"18.2.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementshome-operations-to-official","title":"<code>replacements:home-operations-to-official</code>","text":"<p><code>home-operations</code> only builts these until official versions are released</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=1.18.6\",\n      \"matchDatasources\": [\n        \"helm\",\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"ghcr.io/home-operations/charts-mirror/cilium\"\n      ],\n      \"replacementName\": \"quay.io/cilium/charts/cilium\",\n      \"replacementVersion\": \"1.18.6\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsjade-to-pug","title":"<code>replacements:jade-to-pug</code>","text":"<p>Jade was renamed to Pug.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"jade\"\n      ],\n      \"replacementName\": \"pug\",\n      \"replacementVersion\": \"2.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsjoi-to-scoped","title":"<code>replacements:joi-to-scoped</code>","text":"<p><code>joi</code> became scoped under the <code>hapi</code> organization.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=14.0.0 &lt;14.4.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"joi\"\n      ],\n      \"replacementName\": \"@hapi/joi\",\n      \"replacementVersion\": \"14.4.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsjoi-to-unscoped","title":"<code>replacements:joi-to-unscoped</code>","text":"<p><code>joi</code> was moved out of the <code>hapi</code> organization.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=17.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@hapi/joi\"\n      ],\n      \"replacementName\": \"joi\",\n      \"replacementVersion\": \"17.1.1\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsk8s-registry-move","title":"<code>replacements:k8s-registry-move</code>","text":"<p>The Kubernetes container registry has changed from <code>k8s.gcr.io</code> to <code>registry.k8s.io</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"/^k8s\\\\.gcr\\\\.io/.+$/\"\n      ],\n      \"replacementNameTemplate\": \"{{{replace 'k8s\\\\.gcr\\\\.io/' 'registry.k8s.io/' packageName}}}\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementskotlin-logging-to-oshai","title":"<code>replacements:kotlin-logging-to-oshai</code>","text":"<p>replaces kotlin-logging github organization and maven group from MicroUtils to oshai</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"[3,4)\",\n      \"matchDatasources\": [\n        \"maven\"\n      ],\n      \"matchPackageNames\": [\n        \"/^io\\\\.github\\\\.microutils:kotlin-logging/\"\n      ],\n      \"replacementNameTemplate\": \"{{{replace 'io.github.microutils' 'io.github.oshai' packageName}}}\",\n      \"replacementVersion\": \"5.1.4\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsmem-rename","title":"<code>replacements:mem-rename</code>","text":"<p><code>mem</code> was renamed to <code>memoize</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"^10.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"mem\"\n      ],\n      \"replacementName\": \"memoize\",\n      \"replacementVersion\": \"10.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsmiddie-to-scoped","title":"<code>replacements:middie-to-scoped</code>","text":"<p><code>middie</code> became scoped.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=7.1.0 &lt;8.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"middie\"\n      ],\n      \"replacementName\": \"@fastify/middie\",\n      \"replacementVersion\": \"8.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsmonochromata-cucumber-reporting-plugin-to-jvt","title":"<code>replacements:monochromata-cucumber-reporting-plugin-to-jvt</code>","text":"<p><code>de.monochromata.cucumber:reporting-plugin</code> was moved to <code>me.jvt.cucumber:reporting-plugin</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"maven\"\n      ],\n      \"matchPackageNames\": [\n        \"de.monochromata.cucumber:reporting-plugin\"\n      ],\n      \"replacementName\": \"me.jvt.cucumber:reporting-plugin\",\n      \"replacementVersion\": \"5.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsnow-to-vercel","title":"<code>replacements:now-to-vercel</code>","text":"<p><code>now</code> was renamed to <code>vercel</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=21.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"now\"\n      ],\n      \"replacementName\": \"vercel\",\n      \"replacementVersion\": \"21.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsnpm-run-all-to-maintenance-fork","title":"<code>replacements:npm-run-all-to-maintenance-fork</code>","text":"<p>Maintenance fork of <code>npm-run-all</code></p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"npm-run-all\"\n      ],\n      \"replacementName\": \"npm-run-all2\",\n      \"replacementVersion\": \"5.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsojdbc-to-ojdbc11","title":"<code>replacements:ojdbc-to-ojdbc11</code>","text":"<p><code>ojdbc:ojdbc</code> and <code>com.oracle.database.jdbc:ojdbc10</code> were moved to <code>com.oracle.database.jdbc:ojdbc11</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"maven\"\n      ],\n      \"matchPackageNames\": [\n        \"ojdbc:ojdbc\"\n      ],\n      \"replacementName\": \"com.oracle.database.jdbc:ojdbc11\",\n      \"replacementVersion\": \"21.1.0.0\"\n    },\n    {\n      \"matchDatasources\": [\n        \"maven\"\n      ],\n      \"matchPackageNames\": [\n        \"com.oracle.database.jdbc:ojdbc10\"\n      ],\n      \"replacementName\": \"com.oracle.database.jdbc:ojdbc11\",\n      \"replacementVersion\": \"21.1.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsopencost-registry-move","title":"<code>replacements:opencost-registry-move</code>","text":"<p>Replace OpenCost registry from quay.io to ghcr.io.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Replace `quay.io/kubecost1/kubecost-cost-model` with `ghcr.io/opencost/opencost`.\",\n      \"matchCurrentVersion\": \"1.108.0\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"quay.io/kubecost1/kubecost-cost-model\"\n      ],\n      \"replacementName\": \"ghcr.io/opencost/opencost\",\n      \"replacementVersion\": \"1.109.0\"\n    },\n    {\n      \"description\": \"Replace `quay.io/kubecost1/opencost-ui` with `ghcr.io/opencost/opencost-ui`.\",\n      \"matchCurrentVersion\": \"1.108.0\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"quay.io/kubecost1/opencost-ui\"\n      ],\n      \"replacementName\": \"ghcr.io/opencost/opencost-ui\",\n      \"replacementVersion\": \"1.109.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsparcel-css-to-lightningcss","title":"<code>replacements:parcel-css-to-lightningcss</code>","text":"<p><code>@parcel/css</code> was renamed to <code>lightningcss</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@parcel/css\"\n      ],\n      \"replacementName\": \"lightningcss\",\n      \"replacementVersion\": \"1.14.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementspassport-saml","title":"<code>replacements:passport-saml</code>","text":"<p><code>passport-saml</code> was renamed to <code>@node-saml/passport-saml</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"passport-saml\"\n      ],\n      \"replacementName\": \"@node-saml/passport-saml\",\n      \"replacementVersion\": \"4.0.4\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementspwpush-to-universal-container","title":"<code>replacements:pwpush-to-universal-container</code>","text":"<p>Replace deprecated Password Pusher database-specific images with its universal image.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"1.35.0\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"/^(?:docker\\\\.io/)?pglombardo/pwpush-(?:ephemeral|mysql|postgres)$/\"\n      ],\n      \"prBodyNotes\": [\n        \"\u26a0\ufe0f Follow Password Pusher's [universal-container migration guide](https://docs.pwpush.com/docs/how-to-universal/) before merging. Back up the database and validate existing data after migration.\"\n      ],\n      \"replacementName\": \"pglombardo/pwpush\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsreact-native-magic-modal-to-magic-modal","title":"<code>replacements:react-native-magic-modal-to-magic-modal</code>","text":"<p><code>react-native-magic-modal</code> was renamed to <code>magic-modal</code> in version 10.0.0. The old name is deprecated but still published at the same version, depending on and re-exporting <code>magic-modal</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=10.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"react-native-magic-modal\"\n      ],\n      \"replacementName\": \"magic-modal\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsreact-query-devtools-to-scoped","title":"<code>replacements:react-query-devtools-to-scoped</code>","text":"<p><code>react-query/devtools</code> became scoped under the <code>tanstack</code> organization.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=2.0.0 &lt;4.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"react-query/devtools\"\n      ],\n      \"replacementName\": \"@tanstack/react-query-devtools\",\n      \"replacementVersion\": \"4.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsreact-query-to-scoped","title":"<code>replacements:react-query-to-scoped</code>","text":"<p><code>react-query</code> became scoped under the <code>tanstack</code> organization.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=3.0.0 &lt;4.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"react-query\"\n      ],\n      \"replacementName\": \"@tanstack/react-query\",\n      \"replacementVersion\": \"4.0.5\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsreact-scripts-ts-to-react-scripts","title":"<code>replacements:react-scripts-ts-to-react-scripts</code>","text":"<p><code>react-scripts</code> supports TypeScript since version <code>2.1.0</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"react-scripts-ts\"\n      ],\n      \"replacementName\": \"react-scripts\",\n      \"replacementVersion\": \"2.1.8\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsread-pkg-up-rename","title":"<code>replacements:read-pkg-up-rename</code>","text":"<p><code>read-pkg-up</code> was renamed to <code>read-package-up</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"read-pkg-up\"\n      ],\n      \"replacementName\": \"read-package-up\",\n      \"replacementVersion\": \"11.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsredux-devtools-extension-to-scope","title":"<code>replacements:redux-devtools-extension-to-scope</code>","text":"<p>The <code>redux-devtools-extension</code> package was renamed to <code>@redux-devtools/extension</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"redux-devtools-extension\"\n      ],\n      \"replacementName\": \"@redux-devtools/extension\",\n      \"replacementVersion\": \"3.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsrenovate-pep440-to-renovatebot-pep440","title":"<code>replacements:renovate-pep440-to-renovatebot-pep440</code>","text":"<p>The <code>@renovate/pep440</code> package was renamed to <code>@renovatebot/pep440</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@renovate/pep440\"\n      ],\n      \"replacementName\": \"@renovatebot/pep440\",\n      \"replacementVersion\": \"1.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsrolldown-vite-to-vite","title":"<code>replacements:rolldown-vite-to-vite</code>","text":"<p><code>rolldown-vite</code> was merged to <code>vite</code> in version 8.0.0.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"rolldown-vite\"\n      ],\n      \"replacementName\": \"vite\",\n      \"replacementVersion\": \"8.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsrollup-babel-to-scoped","title":"<code>replacements:rollup-babel-to-scoped</code>","text":"<p>The babel plugin for rollup became scoped.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"rollup-plugin-babel\"\n      ],\n      \"replacementName\": \"@rollup/plugin-babel\",\n      \"replacementVersion\": \"5.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsrollup-json-to-scoped","title":"<code>replacements:rollup-json-to-scoped</code>","text":"<p>The json plugin for rollup became scoped.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"rollup-plugin-json\"\n      ],\n      \"replacementName\": \"@rollup/plugin-json\",\n      \"replacementVersion\": \"4.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsrollup-node-resolve-to-scoped","title":"<code>replacements:rollup-node-resolve-to-scoped</code>","text":"<p>The node-resolve plugin for rollup became scoped.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"rollup-plugin-node-resolve\"\n      ],\n      \"replacementName\": \"@rollup/plugin-node-resolve\",\n      \"replacementVersion\": \"6.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsrollup-terser-to-scoped","title":"<code>replacements:rollup-terser-to-scoped</code>","text":"<p>The terser plugin for rollup became scoped.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=7.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"rollup-plugin-terser\"\n      ],\n      \"replacementName\": \"@rollup/plugin-terser\",\n      \"replacementVersion\": \"0.1.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsrome-to-biome","title":"<code>replacements:rome-to-biome</code>","text":"<p>The Rome repository is archived, and Biome is the community replacement. Read the Biome announcement for migration instructions.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"rome\"\n      ],\n      \"replacementName\": \"@biomejs/biome\",\n      \"replacementVersion\": \"1.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsscorecard-registry-move","title":"<code>replacements:scorecard-registry-move</code>","text":"<p>The OpenSSF Scorecard container images moved from <code>gcr.io/openssf/scorecard</code> to <code>ghcr.io/ossf/scorecard</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"gcr.io/openssf/scorecard\"\n      ],\n      \"replacementName\": \"ghcr.io/ossf/scorecard\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementssemantic-release-replace-plugin-to-unscoped","title":"<code>replacements:semantic-release-replace-plugin-to-unscoped</code>","text":"<p><code>semantic-release-replace-plugin</code> was moved out of the <code>google</code> organization.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@google/semantic-release-replace-plugin\"\n      ],\n      \"replacementName\": \"semantic-release-replace-plugin\",\n      \"replacementVersion\": \"1.2.1\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsspectre-cli-to-spectre-console-cli","title":"<code>replacements:spectre-cli-to-spectre-console-cli</code>","text":"<p>The <code>Spectre.Cli</code> package was renamed to <code>Spectre.Console.Cli</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"nuget\"\n      ],\n      \"matchPackageNames\": [\n        \"Spectre.Cli\"\n      ],\n      \"replacementName\": \"Spectre.Console.Cli\",\n      \"replacementVersion\": \"0.45.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsstandard-version-to-commit-and-tag","title":"<code>replacements:standard-version-to-commit-and-tag</code>","text":"<p><code>standard-version</code> is now maintained as <code>commit-and-tag-version</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"^9.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"standard-version\"\n      ],\n      \"replacementName\": \"commit-and-tag-version\",\n      \"replacementVersion\": \"9.5.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementstemporalio-interceptors-opentelemetry-to-v2","title":"<code>replacements:temporalio-interceptors-opentelemetry-to-v2</code>","text":"<p><code>@temporalio/interceptors-opentelemetry</code> was replaced by <code>@temporalio/interceptors-opentelemetry-v2</code>, which supports OpenTelemetry v2.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=1.19.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@temporalio/interceptors-opentelemetry\"\n      ],\n      \"replacementName\": \"@temporalio/interceptors-opentelemetry-v2\",\n      \"replacementVersion\": \"1.19.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsterraform-provider-mrparkers-keycloak-to-keycloak-keycloak","title":"<code>replacements:terraform-provider-mrparkers-keycloak-to-keycloak-keycloak</code>","text":"<p>The Keycloak Terraform/OpenTofu provider was moved to <code>keycloak/keycloak</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"terraform-provider\"\n      ],\n      \"matchPackageNames\": [\n        \"mrparkers/keycloak\"\n      ],\n      \"matchCurrentVersion\": \"4.4.0\",\n      \"replacementName\": \"keycloak/keycloak\",\n      \"replacementVersion\": \"4.5.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementstsconfig-bases-node","title":"<code>replacements:tsconfig-bases-node</code>","text":"<p><code>@tsconfig-bases</code> node updates.</p> <pre><code>{\n  \"extends\": [\n    \"customManagers:tsconfigNodeVersions\" // (1)!\n  ],\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@tsconfig/node**\"\n      ],\n      \"commitMessageExtra\": \"{{#if isReplacement}}with {{{newName}}}{{else}}to {{{prettyNewVersion}}}{{/if}}\"\n    },\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@tsconfig/node10\"\n      ],\n      \"replacementName\": \"@tsconfig/node12\",\n      \"replacementVersion\": \"12.1.0\"\n    },\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@tsconfig/node12\"\n      ],\n      \"replacementName\": \"@tsconfig/node14\",\n      \"replacementVersion\": \"14.1.0\"\n    },\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@tsconfig/node14\"\n      ],\n      \"replacementName\": \"@tsconfig/node16\",\n      \"replacementVersion\": \"16.1.0\"\n    },\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@tsconfig/node16\",\n        \"@tsconfig/node17\"\n      ],\n      \"replacementName\": \"@tsconfig/node18\",\n      \"replacementVersion\": \"18.2.0\"\n    },\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@tsconfig/node18\",\n        \"@tsconfig/node19\"\n      ],\n      \"replacementName\": \"@tsconfig/node20\",\n      \"replacementVersion\": \"20.1.0\"\n    },\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@tsconfig/node20\",\n        \"@tsconfig/node21\"\n      ],\n      \"replacementName\": \"@tsconfig/node22\",\n      \"replacementVersion\": \"22.0.0\"\n    },\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@tsconfig/node22\",\n        \"@tsconfig/node23\"\n      ],\n      \"replacementName\": \"@tsconfig/node24\",\n      \"replacementVersion\": \"24.0.0\"\n    }\n  ]\n}\n</code></pre> <ol> <li><code>customManagers:tsconfigNodeVersions</code>: Update <code>@tsconfig/node</code> extends  in <code>tsconfig.json</code> and <code>jsconfig.json</code> files.</li> </ol>"},{"location":"presets-replacements/#replacementstypeorm-seeding-to-scoped","title":"<code>replacements:typeorm-seeding-to-scoped</code>","text":"<p><code>typeorm-seeding</code> is now maintained as scoped package.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"1.6.1\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"typeorm-seeding\"\n      ],\n      \"replacementName\": \"@jorgebodega/typeorm-seeding\",\n      \"replacementVersion\": \"2.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsucanaccess-to-io-github-spannm","title":"<code>replacements:ucanaccess-to-io-github-spannm</code>","text":"<p><code>net.sf.ucanaccess:ucanaccess</code> is no longer maintained, development continues at <code>io.github.spannm:ucanaccess</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=5.0.1\",\n      \"matchDatasources\": [\n        \"maven\"\n      ],\n      \"matchPackageNames\": [\n        \"net.sf.ucanaccess:ucanaccess\"\n      ],\n      \"replacementName\": \"io.github.spannm:ucanaccess\",\n      \"replacementVersion\": \"5.1.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsvitest-coverage-c8-to-coverage-v8","title":"<code>replacements:vitest-coverage-c8-to-coverage-v8</code>","text":"<p><code>@vitest/coverage-c8</code> was renamed to <code>@vitest/coverage-v8</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=0.32.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@vitest/coverage-c8\"\n      ],\n      \"replacementName\": \"@vitest/coverage-v8\",\n      \"replacementVersion\": \"0.33.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsvso-task-lib-to-azure-pipelines-task-lib","title":"<code>replacements:vso-task-lib-to-azure-pipelines-task-lib</code>","text":"<p>The <code>vso-task-lib</code> package is now published as <code>azure-pipelines-task-lib</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"vso-task-lib\"\n      ],\n      \"replacementName\": \"azure-pipelines-task-lib\",\n      \"replacementVersion\": \"3.4.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsvsts-task-lib-to-azure-pipelines-task-lib","title":"<code>replacements:vsts-task-lib-to-azure-pipelines-task-lib</code>","text":"<p>The <code>vsts-task-lib</code> package is now published as <code>azure-pipelines-task-lib</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"vsts-task-lib\"\n      ],\n      \"replacementName\": \"azure-pipelines-task-lib\",\n      \"replacementVersion\": \"3.4.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementswuchale-vite-plugin-to-wuchale","title":"<code>replacements:wuchale-vite-plugin-to-wuchale</code>","text":"<p>The <code>@wuchale/vite-plugin</code> package is now included in <code>wuchale</code> at <code>wuchale/vite</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"^0.17.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@wuchale/vite-plugin\"\n      ],\n      \"replacementName\": \"wuchale\",\n      \"replacementVersion\": \"0.22.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsxlsx-to-scoped","title":"<code>replacements:xlsx-to-scoped</code>","text":"<p>The <code>xlsx</code> package is now published as <code>@e965/xlsx</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"0.18.5\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"xlsx\"\n      ],\n      \"replacementName\": \"@e965/xlsx\",\n      \"replacementVersion\": \"0.20.3\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsxmldom-to-scoped","title":"<code>replacements:xmldom-to-scoped</code>","text":"<p>The <code>xmldom</code> package is now published as <code>@xmldom/xmldom</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"xmldom\",\n        \"xmldom-alpha\"\n      ],\n      \"replacementName\": \"@xmldom/xmldom\",\n      \"replacementVersion\": \"0.7.5\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementszap","title":"<code>replacements:zap</code>","text":"<p>Replace ZAP dependencies.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"The `zap-stable` image has moved to the `zaproxy` organization.\",\n      \"matchCurrentVersion\": \"&gt;=2.0.0 &lt;2.14.0\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"/^(?:docker\\\\.io/)?owasp/zap2docker-stable$/\",\n        \"/^(?:docker\\\\.io/)?softwaresecurityproject/zap-stable$/\"\n      ],\n      \"replacementName\": \"zaproxy/zap-stable\",\n      \"replacementVersion\": \"2.14.0\"\n    },\n    {\n      \"description\": \"The `zap-bare` image has moved to the `zaproxy` organization.\",\n      \"matchCurrentVersion\": \"&gt;=2.0.0 &lt;2.14.0\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"/^(?:docker\\\\.io/)?owasp/zap2docker-bare$/\",\n        \"/^(?:docker\\\\.io/)?softwaresecurityproject/zap-bare$/\"\n      ],\n      \"replacementName\": \"zaproxy/zap-bare\",\n      \"replacementVersion\": \"2.14.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsmessageformat-to-scoped","title":"<code>replacements:messageFormat-to-scoped</code>","text":"<p>The <code>messageformat</code> monorepo package naming scheme changed from <code>messageFormat-{{package}}</code> to <code>@messageformat/{{package}}</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=2.0.0 &lt;3.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"messageformat-cli\"\n      ],\n      \"replacementName\": \"@messageformat/cli\",\n      \"replacementVersion\": \"3.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=2.0.0 &lt;3.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"messageformat\"\n      ],\n      \"replacementName\": \"@messageformat/core\",\n      \"replacementVersion\": \"3.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=0.4.0 &lt;1.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"messageformat-convert\"\n      ],\n      \"replacementName\": \"@messageformat/convert\",\n      \"replacementVersion\": \"1.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=0.4.0 &lt;1.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"react-message-context\"\n      ],\n      \"replacementName\": \"@messageformat/react\",\n      \"replacementVersion\": \"1.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=4.0.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"messageformat-parser\"\n      ],\n      \"replacementName\": \"@messageformat/parser\",\n      \"replacementVersion\": \"5.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-replacements/#replacementsmaterial-ui-to-mui","title":"<code>replacements:material-ui-to-mui</code>","text":"<p>The <code>material-ui</code> monorepo org was renamed from <code>@material-ui</code> to <code>@mui</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentVersion\": \"&gt;=4.0.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@material-ui/codemod\"\n      ],\n      \"replacementName\": \"@mui/codemod\",\n      \"replacementVersion\": \"5.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=4.0.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@material-ui/core\"\n      ],\n      \"replacementName\": \"@mui/material\",\n      \"replacementVersion\": \"5.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=4.0.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@material-ui/icons\"\n      ],\n      \"replacementName\": \"@mui/icons-material\",\n      \"replacementVersion\": \"5.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=4.0.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@material-ui/lab\"\n      ],\n      \"replacementName\": \"@mui/lab\",\n      \"replacementVersion\": \"5.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=4.0.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@material-ui/private-theming\"\n      ],\n      \"replacementName\": \"@mui/private-theming\",\n      \"replacementVersion\": \"5.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=4.0.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@material-ui/styled-engine\"\n      ],\n      \"replacementName\": \"@mui/styled-engine\",\n      \"replacementVersion\": \"5.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=4.0.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@material-ui/styled-engine-sc\"\n      ],\n      \"replacementName\": \"@mui/styled-engine-sc\",\n      \"replacementVersion\": \"5.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=4.0.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@material-ui/styles\"\n      ],\n      \"replacementName\": \"@mui/styles\",\n      \"replacementVersion\": \"5.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=4.0.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@material-ui/system\"\n      ],\n      \"replacementName\": \"@mui/system\",\n      \"replacementVersion\": \"5.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=4.0.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@material-ui/types\"\n      ],\n      \"replacementName\": \"@mui/types\",\n      \"replacementVersion\": \"5.0.0\"\n    },\n    {\n      \"matchCurrentVersion\": \"&gt;=4.0.0 &lt;5.0.0\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@material-ui/unstyled\"\n      ],\n      \"replacementName\": \"@mui/core\",\n      \"replacementVersion\": \"5.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-schedule/","title":"Schedule Presets","text":""},{"location":"presets-schedule/#scheduleautomergedaily","title":"<code>schedule:automergeDaily</code>","text":"<p>Schedule automerge daily before 4 AM.</p> <pre><code>{\n  \"automergeSchedule\": [\n    \"* 0-3 * * *\"\n  ]\n}\n</code></pre>"},{"location":"presets-schedule/#scheduleautomergeearlymondays","title":"<code>schedule:automergeEarlyMondays</code>","text":"<p>Schedule automerge on Monday mornings (before 4 AM).</p> <pre><code>{\n  \"automergeSchedule\": [\n    \"* 0-3 * * 1\"\n  ]\n}\n</code></pre>"},{"location":"presets-schedule/#scheduleautomergemonthly","title":"<code>schedule:automergeMonthly</code>","text":"<p>Schedule automerge for the first day of each month, before 4 AM.</p> <pre><code>{\n  \"automergeSchedule\": [\n    \"* 0-3 1 * *\"\n  ]\n}\n</code></pre>"},{"location":"presets-schedule/#scheduleautomergenonofficehours","title":"<code>schedule:automergeNonOfficeHours</code>","text":"<p>Schedule automerge during typical non-office hours on weekdays (i.e., 10 PM - 5 AM) and anytime on weekends.</p> <pre><code>{\n  \"automergeSchedule\": [\n    \"* 0-4,22-23 * * 1-5\",\n    \"* * * * 0,6\"\n  ]\n}\n</code></pre>"},{"location":"presets-schedule/#scheduleautomergeofficehours","title":"<code>schedule:automergeOfficeHours</code>","text":"<p>Schedule automerge during typical office hours on weekdays (i.e., 8 AM - 6 PM).</p> <pre><code>{\n  \"automergeSchedule\": [\n    \"* 8-17 * * 1-5\"\n  ]\n}\n</code></pre>"},{"location":"presets-schedule/#scheduleautomergequarterly","title":"<code>schedule:automergeQuarterly</code>","text":"<p>Schedule automerge on the first day of each quarter (i.e., January, April, July, October).</p> <pre><code>{\n  \"automergeSchedule\": [\n    \"* * 1 */3 *\"\n  ]\n}\n</code></pre>"},{"location":"presets-schedule/#scheduleautomergeweekdays","title":"<code>schedule:automergeWeekdays</code>","text":"<p>Schedule automerge anytime on weekdays.</p> <pre><code>{\n  \"automergeSchedule\": [\n    \"* * * * 1-5\"\n  ]\n}\n</code></pre>"},{"location":"presets-schedule/#scheduleautomergeweekends","title":"<code>schedule:automergeWeekends</code>","text":"<p>Schedule automerge anytime on weekends.</p> <pre><code>{\n  \"automergeSchedule\": [\n    \"* * * * 0,6\"\n  ]\n}\n</code></pre>"},{"location":"presets-schedule/#scheduleautomergeweekly","title":"<code>schedule:automergeWeekly</code>","text":"<p>Schedule automerge weekly.</p> <pre><code>{\n  \"extends\": [\n    \"schedule:automergeEarlyMondays\" // (1)!\n  ]\n}\n</code></pre> <ol> <li><code>schedule:automergeEarlyMondays</code>: Schedule automerge on Monday mornings (before 4 AM).</li> </ol>"},{"location":"presets-schedule/#scheduleautomergeyearly","title":"<code>schedule:automergeYearly</code>","text":"<p>Schedule automerge once a year on the first day of January (not recommended).</p> <pre><code>{\n  \"automergeSchedule\": [\n    \"* * 1 */12 *\"\n  ]\n}\n</code></pre>"},{"location":"presets-schedule/#scheduledaily","title":"<code>schedule:daily</code>","text":"<p>Schedule daily before 4 AM.</p> <pre><code>{\n  \"schedule\": [\n    \"* 0-3 * * *\"\n  ]\n}\n</code></pre>"},{"location":"presets-schedule/#scheduleearlymondays","title":"<code>schedule:earlyMondays</code>","text":"<p>Weekly schedule on early Monday mornings (before 4 AM).</p> <pre><code>{\n  \"schedule\": [\n    \"* 0-3 * * 1\"\n  ]\n}\n</code></pre>"},{"location":"presets-schedule/#schedulemonthly","title":"<code>schedule:monthly</code>","text":"<p>Schedule once a month on the first day of the month before 4 AM.</p> <pre><code>{\n  \"schedule\": [\n    \"* 0-3 1 * *\"\n  ]\n}\n</code></pre>"},{"location":"presets-schedule/#schedulenonofficehours","title":"<code>schedule:nonOfficeHours</code>","text":"<p>Schedule during typical non-office hours on weekdays (i.e., 10 PM - 5 AM) and anytime on weekends.</p> <pre><code>{\n  \"schedule\": [\n    \"* 0-4,22-23 * * 1-5\",\n    \"* * * * 0,6\"\n  ]\n}\n</code></pre>"},{"location":"presets-schedule/#scheduleofficehours","title":"<code>schedule:officeHours</code>","text":"<p>Schedule during typical office hours on weekdays (i.e., 8 AM - 6 PM).</p> <pre><code>{\n  \"schedule\": [\n    \"* 8-17 * * 1-5\"\n  ]\n}\n</code></pre>"},{"location":"presets-schedule/#schedulequarterly","title":"<code>schedule:quarterly</code>","text":"<p>Schedule on the first day of each quarter (i.e., January, April, July, October).</p> <pre><code>{\n  \"schedule\": [\n    \"* * 1 */3 *\"\n  ]\n}\n</code></pre>"},{"location":"presets-schedule/#scheduleweekdays","title":"<code>schedule:weekdays</code>","text":"<p>Schedule for weekdays.</p> <pre><code>{\n  \"schedule\": [\n    \"* * * * 1-5\"\n  ]\n}\n</code></pre>"},{"location":"presets-schedule/#scheduleweekends","title":"<code>schedule:weekends</code>","text":"<p>Schedule for weekends.</p> <pre><code>{\n  \"schedule\": [\n    \"* * * * 0,6\"\n  ]\n}\n</code></pre>"},{"location":"presets-schedule/#scheduleweekly","title":"<code>schedule:weekly</code>","text":"<p>Schedule weekly.</p> <pre><code>{\n  \"extends\": [\n    \"schedule:earlyMondays\" // (1)!\n  ]\n}\n</code></pre> <ol> <li><code>schedule:earlyMondays</code>: Weekly schedule on early Monday mornings (before 4 AM).</li> </ol>"},{"location":"presets-schedule/#scheduleyearly","title":"<code>schedule:yearly</code>","text":"<p>Schedule once a year on the first day of January (not recommended).</p> <pre><code>{\n  \"schedule\": [\n    \"* * 1 */12 *\"\n  ]\n}\n</code></pre>"},{"location":"presets-security/","title":"Security Presets","text":""},{"location":"presets-security/#securitygomodindirectsecurityupdates","title":"<code>security:gomodIndirectSecurityUpdates</code>","text":"<p>Enable go.mod indirect dependency updates only when vulnerabilities have been detected.</p> <pre><code>{\n  \"extends\": [\n    \":enableVulnerabilityAlerts\" // (1)!\n  ],\n  \"packageRules\": [\n    {\n      \"description\": \"Enable lookups for indirect go.mod dependencies\",\n      \"enabled\": true,\n      \"matchDepTypes\": [\n        \"indirect\"\n      ],\n      \"matchManagers\": [\n        \"gomod\"\n      ]\n    },\n    {\n      \"description\": \"Disable non-security updates for indirect go.mod dependencies (vulnerability alerts use force to override this)\",\n      \"enabled\": false,\n      \"matchDepTypes\": [\n        \"indirect\"\n      ],\n      \"matchManagers\": [\n        \"gomod\"\n      ],\n      \"matchUpdateTypes\": [\n        \"major\",\n        \"minor\",\n        \"patch\",\n        \"pin\",\n        \"digest\",\n        \"pinDigest\",\n        \"lockFileMaintenance\",\n        \"rollback\",\n        \"replacement\"\n      ]\n    }\n  ]\n}\n</code></pre> <ol> <li><code>:enableVulnerabilityAlerts</code>: Raise PR when vulnerability alerts are detected.</li> </ol>"},{"location":"presets-security/#securityminimumreleaseagecrate","title":"<code>security:minimumReleaseAgeCrate</code>","text":"<p>Wait until the Crate version is three days old before raising the update. This a) introduces a short delay to allow for malware researchers and scanners to (possibly) detect any malicious behaviour in crates, and b) reduces the risk of upgrading to a newly published crate that its owner deletes during crates.io's initial 72-hour deletion window.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"internalChecksFilter\": \"strict\",\n      \"matchDatasources\": [\n        \"crate\"\n      ],\n      \"minimumReleaseAge\": \"3 days\"\n    },\n    {\n      \"description\": \"Do not require Minimum Release Age for update types that are controlled by the package manager\",\n      \"matchUpdateTypes\": [\n        \"lockFileMaintenance\"\n      ],\n      \"minimumReleaseAge\": null,\n      \"prBodyNotes\": [\n        \"\u26a0\ufe0f Renovate's lock file maintenance functionality does not support validating Minimum Release Age, as the package manager performs the required changes to update package(s). Confirm whether your package manager perform its own validation for the Minimum Release Age of packages.\"\n      ],\n      \"matchDatasources\": [\n        \"crate\"\n      ]\n    },\n    {\n      \"description\": \"Do not require Minimum Release Age for package replacements\",\n      \"matchUpdateTypes\": [\n        \"replacement\"\n      ],\n      \"minimumReleaseAge\": null,\n      \"prBodyNotes\": [\n        \"\u26a0\ufe0f Renovate's replacement functionality [does not currently](https://github.com/renovatebot/renovate/issues/39400) wire in the release age for a package, so the Minimum Release Age checks can apply. You will need to manually validate the Minimum Release Age for these package(s).\"\n      ],\n      \"matchDatasources\": [\n        \"crate\"\n      ]\n    },\n    {\n      \"description\": \"Do not require Minimum Release Age for package pinning\",\n      \"matchUpdateTypes\": [\n        \"pin\"\n      ],\n      \"minimumReleaseAge\": null,\n      \"prBodyNotes\": [\n        \"\u26a0\ufe0f Renovate's pin functionality [does not currently](https://github.com/renovatebot/renovate/issues/40288) wire in the release age for a package, so the Minimum Release Age checks can apply. You will need to manually validate the Minimum Release Age for these package(s).\"\n      ],\n      \"matchDatasources\": [\n        \"crate\"\n      ]\n    },\n    {\n      \"description\": \"Do not require Minimum Release Age for update types that do not provide a release timestamp\",\n      \"matchUpdateTypes\": [\n        \"bump\",\n        \"lockfileUpdate\",\n        \"rollback\"\n      ],\n      \"minimumReleaseAge\": null,\n      \"prBodyNotes\": [\n        \"\u26a0\ufe0f Renovate does not enforce Minimum Release Age for `bump`, `lockfileUpdate`, or `rollback` updates, so these are raised without a Minimum Release Age check. You will need to manually validate the Minimum Release Age for these package(s).\"\n      ],\n      \"matchDatasources\": [\n        \"crate\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-security/#securityminimumreleaseagenpm","title":"<code>security:minimumReleaseAgeNpm</code>","text":"<p>Wait until the npm package is three days old before raising the update. This a) introduces a short delay to allow for malware researchers and scanners to (possibly) detect any malicious behaviour in packages, and b) prevents the maintainer and/or NPM from unpublishing a package you already upgraded to, breaking builds.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"internalChecksFilter\": \"strict\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"minimumReleaseAge\": \"3 days\"\n    },\n    {\n      \"description\": \"Do not require Minimum Release Age for update types that are controlled by the package manager\",\n      \"matchUpdateTypes\": [\n        \"lockFileMaintenance\"\n      ],\n      \"minimumReleaseAge\": null,\n      \"prBodyNotes\": [\n        \"\u26a0\ufe0f Renovate's lock file maintenance functionality does not support validating Minimum Release Age, as the package manager performs the required changes to update package(s). Confirm whether your package manager perform its own validation for the Minimum Release Age of packages.\"\n      ],\n      \"matchDatasources\": [\n        \"npm\"\n      ]\n    },\n    {\n      \"description\": \"Do not require Minimum Release Age for package replacements\",\n      \"matchUpdateTypes\": [\n        \"replacement\"\n      ],\n      \"minimumReleaseAge\": null,\n      \"prBodyNotes\": [\n        \"\u26a0\ufe0f Renovate's replacement functionality [does not currently](https://github.com/renovatebot/renovate/issues/39400) wire in the release age for a package, so the Minimum Release Age checks can apply. You will need to manually validate the Minimum Release Age for these package(s).\"\n      ],\n      \"matchDatasources\": [\n        \"npm\"\n      ]\n    },\n    {\n      \"description\": \"Do not require Minimum Release Age for package pinning\",\n      \"matchUpdateTypes\": [\n        \"pin\"\n      ],\n      \"minimumReleaseAge\": null,\n      \"prBodyNotes\": [\n        \"\u26a0\ufe0f Renovate's pin functionality [does not currently](https://github.com/renovatebot/renovate/issues/40288) wire in the release age for a package, so the Minimum Release Age checks can apply. You will need to manually validate the Minimum Release Age for these package(s).\"\n      ],\n      \"matchDatasources\": [\n        \"npm\"\n      ]\n    },\n    {\n      \"description\": \"Do not require Minimum Release Age for update types that do not provide a release timestamp\",\n      \"matchUpdateTypes\": [\n        \"bump\",\n        \"lockfileUpdate\",\n        \"rollback\"\n      ],\n      \"minimumReleaseAge\": null,\n      \"prBodyNotes\": [\n        \"\u26a0\ufe0f Renovate does not enforce Minimum Release Age for `bump`, `lockfileUpdate`, or `rollback` updates, so these are raised without a Minimum Release Age check. You will need to manually validate the Minimum Release Age for these package(s).\"\n      ],\n      \"matchDatasources\": [\n        \"npm\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-security/#securityminimumreleaseagepypi","title":"<code>security:minimumReleaseAgePypi</code>","text":"<p>Wait until the Python package is three days old before raising the update. This introduces a short delay to allow for malware researchers and scanners to (possibly) detect any malicious behaviour in packages.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"internalChecksFilter\": \"strict\",\n      \"matchDatasources\": [\n        \"pypi\"\n      ],\n      \"minimumReleaseAge\": \"3 days\"\n    },\n    {\n      \"description\": \"Do not require Minimum Release Age for update types that are controlled by the package manager\",\n      \"matchUpdateTypes\": [\n        \"lockFileMaintenance\"\n      ],\n      \"minimumReleaseAge\": null,\n      \"prBodyNotes\": [\n        \"\u26a0\ufe0f Renovate's lock file maintenance functionality does not support validating Minimum Release Age, as the package manager performs the required changes to update package(s). Confirm whether your package manager perform its own validation for the Minimum Release Age of packages.\"\n      ],\n      \"matchDatasources\": [\n        \"pypi\"\n      ]\n    },\n    {\n      \"description\": \"Do not require Minimum Release Age for package replacements\",\n      \"matchUpdateTypes\": [\n        \"replacement\"\n      ],\n      \"minimumReleaseAge\": null,\n      \"prBodyNotes\": [\n        \"\u26a0\ufe0f Renovate's replacement functionality [does not currently](https://github.com/renovatebot/renovate/issues/39400) wire in the release age for a package, so the Minimum Release Age checks can apply. You will need to manually validate the Minimum Release Age for these package(s).\"\n      ],\n      \"matchDatasources\": [\n        \"pypi\"\n      ]\n    },\n    {\n      \"description\": \"Do not require Minimum Release Age for package pinning\",\n      \"matchUpdateTypes\": [\n        \"pin\"\n      ],\n      \"minimumReleaseAge\": null,\n      \"prBodyNotes\": [\n        \"\u26a0\ufe0f Renovate's pin functionality [does not currently](https://github.com/renovatebot/renovate/issues/40288) wire in the release age for a package, so the Minimum Release Age checks can apply. You will need to manually validate the Minimum Release Age for these package(s).\"\n      ],\n      \"matchDatasources\": [\n        \"pypi\"\n      ]\n    },\n    {\n      \"description\": \"Do not require Minimum Release Age for update types that do not provide a release timestamp\",\n      \"matchUpdateTypes\": [\n        \"bump\",\n        \"lockfileUpdate\",\n        \"rollback\"\n      ],\n      \"minimumReleaseAge\": null,\n      \"prBodyNotes\": [\n        \"\u26a0\ufe0f Renovate does not enforce Minimum Release Age for `bump`, `lockfileUpdate`, or `rollback` updates, so these are raised without a Minimum Release Age check. You will need to manually validate the Minimum Release Age for these package(s).\"\n      ],\n      \"matchDatasources\": [\n        \"pypi\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-security/#securityonly-security-updates","title":"<code>security:only-security-updates</code>","text":"<p>Only update dependencies if vulnerabilities have been detected.</p> <pre><code>{\n  \"extends\": [\n    \"config:recommended\" // (1)!\n  ],\n  \"osvVulnerabilityAlerts\": true,\n  \"packageRules\": [\n    {\n      \"enabled\": false,\n      \"matchPackageNames\": [\n        \"*\"\n      ]\n    }\n  ],\n  \"vulnerabilityAlerts\": {\n    \"enabled\": true\n  }\n}\n</code></pre> <ol> <li><code>config:recommended</code>: Recommended configuration for most users. It does not matter what programming language you use.</li> </ol>"},{"location":"presets-security/#securityopenssf-scorecard","title":"<code>security:openssf-scorecard</code>","text":"<p>Show OpenSSF badge on pull requests.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchSourceUrls\": [\n        \"https://github.com/**\"\n      ],\n      \"prBodyColumns\": [\n        \"Package\",\n        \"Type\",\n        \"Update\",\n        \"Change\",\n        \"Pending\",\n        \"OpenSSF\"\n      ],\n      \"prBodyDefinitions\": {\n        \"OpenSSF\": \"[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/{{sourceRepo}}/badge)](https://securityscorecards.dev/viewer/?uri=github.com/{{sourceRepo}})\"\n      }\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-security/#securityphp2shell","title":"<code>security:php2shell</code>","text":"<p>Update vulnerable PHP runtime pins for CVE-2026-109618 and CVE-2026-109619.</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"datasourceTemplate\": \"github-tags\",\n      \"depNameTemplate\": \"php\",\n      \"depTypeTemplate\": \"php2shell-runtime\",\n      \"extractVersionTemplate\": \"^php-(?&lt;version&gt;\\\\S+)\",\n      \"managerFilePatterns\": [\n        \"/(^|/)\\\\.php-version$/\"\n      ],\n      \"matchStrings\": [\n        \"^\\\\s*(?&lt;currentValue&gt;8\\\\.[2-5]\\\\.\\\\d+)\\\\s*$\"\n      ],\n      \"packageNameTemplate\": \"php/php-src\"\n    },\n    {\n      \"customType\": \"jsonata\",\n      \"datasourceTemplate\": \"github-tags\",\n      \"depNameTemplate\": \"php\",\n      \"depTypeTemplate\": \"php2shell-runtime\",\n      \"extractVersionTemplate\": \"^php-(?&lt;version&gt;\\\\S+)\",\n      \"fileFormat\": \"yaml\",\n      \"managerFilePatterns\": [\n        \"/(^|/)(workflow-templates|\\\\.(?:github|gitea|forgejo)/(?:workflows|actions))/.+\\\\.ya?ml$/\",\n        \"/(^|/)action\\\\.ya?ml$/\"\n      ],\n      \"matchStrings\": [\n        \"**[uses and $exists($match(uses, /^shivammathur\\\\/setup-php@/))].with.\\\"php-version\\\"[$type($) = \\\"string\\\" and $exists($match($, /^8\\\\.[2-5]\\\\.\\\\d+$/))].{\\\"currentValue\\\": $}\"\n      ],\n      \"packageNameTemplate\": \"php/php-src\"\n    }\n  ],\n  \"packageRules\": [\n    {\n      \"enabled\": false,\n      \"matchDepTypes\": [\n        \"php2shell-runtime\"\n      ],\n      \"matchManagers\": [\n        \"custom.regex\",\n        \"custom.jsonata\"\n      ]\n    },\n    {\n      \"enabled\": true,\n      \"matchDepTypes\": [\n        \"php2shell-runtime\"\n      ],\n      \"matchJsonata\": [\n        \"(\\n  $value := (manager = \\\"mise\\\" and isLockfileOnly) ? lockedVersion : currentValue;\\n  $version := datasource = \\\"docker\\\" ? $split($value, \\\"-\\\")[0] : $value;\\n  $parts := $match($version, /^(8\\\\.[2-5])\\\\.(\\\\d+)$/).groups;\\n\\n  $not(vulnerabilityAlerts.enabled = false) and $exists($parts)\\n    and $number($parts[1]) &lt; $lookup({\\\"8.2\\\":35,\\\"8.3\\\":36,\\\"8.4\\\":27,\\\"8.5\\\":12}, $parts[0])\\n)\"\n      ],\n      \"matchManagers\": [\n        \"custom.regex\",\n        \"custom.jsonata\"\n      ]\n    },\n    {\n      \"isVulnerabilityAlert\": true,\n      \"matchJsonata\": [\n        \"(\\n  $value := (manager = \\\"mise\\\" and isLockfileOnly) ? lockedVersion : currentValue;\\n  $version := datasource = \\\"docker\\\" ? $split($value, \\\"-\\\")[0] : $value;\\n  $parts := $match($version, /^(8\\\\.[2-5])\\\\.(\\\\d+)$/).groups;\\n\\n  $not(vulnerabilityAlerts.enabled = false) and $exists($parts)\\n    and $number($parts[1]) &lt; $lookup({\\\"8.2\\\":35,\\\"8.3\\\":36,\\\"8.4\\\":27,\\\"8.5\\\":12}, $parts[0])\\n) and (\\n      $version := datasource = \\\"docker\\\" ? $split(newVersion, \\\"-\\\")[0] : newVersion;\\n      $parts := $match($version, /^(8\\\\.[2-5])\\\\.(\\\\d+)$/).groups;\\n\\n      $exists($parts) and $number($parts[1]) &gt;= $lookup({\\\"8.2\\\":35,\\\"8.3\\\":36,\\\"8.4\\\":27,\\\"8.5\\\":12}, $parts[0])\\n    )\"\n      ],\n      \"matchUpdateTypes\": [\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ],\n      \"prBodyNotes\": [\n        \"&gt; \u26a0\ufe0f PHP2Shell vulnerabilities can allow remote code execution. This PR updates affected PHP versions to patched releases. Rebuild affected images, deploy the updates, and restart PHP workers.\\n&gt;\\n&gt; Details: [CVE-2026-109618](https://github.com/php/php-src/security/advisories/GHSA-w8hw-w9fx-j79w) and [CVE-2026-109619](https://github.com/php/php-src/security/advisories/GHSA-6wmf-4rv5-p3rp).\"\n      ],\n      \"schedule\": [],\n      \"matchDatasources\": [\n        \"github-tags\"\n      ],\n      \"matchPackageNames\": [\n        \"containerbase/php-prebuild\",\n        \"php/php-src\"\n      ]\n    },\n    {\n      \"isVulnerabilityAlert\": true,\n      \"matchJsonata\": [\n        \"(\\n  $value := (manager = \\\"mise\\\" and isLockfileOnly) ? lockedVersion : currentValue;\\n  $version := datasource = \\\"docker\\\" ? $split($value, \\\"-\\\")[0] : $value;\\n  $parts := $match($version, /^(8\\\\.[2-5])\\\\.(\\\\d+)$/).groups;\\n\\n  $not(vulnerabilityAlerts.enabled = false) and $exists($parts)\\n    and $number($parts[1]) &lt; $lookup({\\\"8.2\\\":35,\\\"8.3\\\":36,\\\"8.4\\\":27,\\\"8.5\\\":12}, $parts[0])\\n) and (\\n      $version := datasource = \\\"docker\\\" ? $split(newVersion, \\\"-\\\")[0] : newVersion;\\n      $parts := $match($version, /^(8\\\\.[2-5])\\\\.(\\\\d+)$/).groups;\\n\\n      $exists($parts) and $number($parts[1]) &gt;= $lookup({\\\"8.2\\\":35,\\\"8.3\\\":36,\\\"8.4\\\":27,\\\"8.5\\\":12}, $parts[0])\\n    )\"\n      ],\n      \"matchUpdateTypes\": [\n        \"patch\",\n        \"minor\",\n        \"major\"\n      ],\n      \"prBodyNotes\": [\n        \"&gt; \u26a0\ufe0f PHP2Shell vulnerabilities can allow remote code execution. This PR updates affected PHP versions to patched releases. Rebuild affected images, deploy the updates, and restart PHP workers.\\n&gt;\\n&gt; Details: [CVE-2026-109618](https://github.com/php/php-src/security/advisories/GHSA-w8hw-w9fx-j79w) and [CVE-2026-109619](https://github.com/php/php-src/security/advisories/GHSA-6wmf-4rv5-p3rp).\"\n      ],\n      \"schedule\": [],\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"/^(?:(?:docker\\\\.io|index\\\\.docker\\\\.io)\\\\/)?(?:library\\\\/)?php$/\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/","title":"Workaround Presets","text":""},{"location":"presets-workarounds/#workaroundsall","title":"<code>workarounds:all</code>","text":"<p>Apply crowd-sourced workarounds for known problems with packages.</p> <pre><code>{\n  \"extends\": [\n    \"workarounds:mavenCommonsAncientVersion\", // (1)!\n    \"workarounds:ignoreSpringCloudNumeric\", // (2)!\n    \"workarounds:ignoreWeb3jCoreWithOldReleaseTimestamp\", // (3)!\n    \"workarounds:ignoreHttp4sDigestMilestones\", // (4)!\n    \"workarounds:typesNodeVersioning\", // (5)!\n    \"workarounds:nodeDockerVersioning\", // (6)!\n    \"workarounds:doNotUpgradeFromAlpineStableToEdge\", // (7)!\n    \"workarounds:supportRedHatImageVersion\", // (8)!\n    \"workarounds:javaLTSVersions\", // (9)!\n    \"workarounds:disableEclipseLifecycleMapping\", // (10)!\n    \"workarounds:disableGradleReplacements\", // (11)!\n    \"workarounds:disableMavenParentRoot\", // (12)!\n    \"workarounds:containerbase\", // (13)!\n    \"workarounds:bitnamiDockerImageVersioning\", // (14)!\n    \"workarounds:clamavDockerImageVersioning\", // (15)!\n    \"workarounds:grafanaDockerImageVersioning\", // (16)!\n    \"workarounds:k3sKubernetesVersioning\", // (17)!\n    \"workarounds:rke2KubernetesVersioning\", // (18)!\n    \"workarounds:libericaJdkDockerVersioning\", // (19)!\n    \"workarounds:ubuntuDockerVersioning\", // (20)!\n    \"workarounds:groupings\", // (21)!\n    \"workarounds:helmDocs\", // (22)!\n    \"workarounds:guavaVariants\" // (23)!\n  ]\n}\n</code></pre> <ol> <li><code>workarounds:mavenCommonsAncientVersion</code>: Fix some problems with very old Maven commons versions.</li> <li><code>workarounds:ignoreSpringCloudNumeric</code>: Ignore spring cloud <code>1.x</code> releases.</li> <li><code>workarounds:ignoreWeb3jCoreWithOldReleaseTimestamp</code>: Ignore <code>web3j</code> <code>5.0.0</code> release.</li> <li><code>workarounds:ignoreHttp4sDigestMilestones</code>: Ignore <code>http4s</code> digest-based <code>1.x</code> milestones.</li> <li><code>workarounds:typesNodeVersioning</code>: Use node versioning for <code>@types/node</code>.</li> <li><code>workarounds:nodeDockerVersioning</code>: Use node versioning for <code>node</code> docker images.</li> <li><code>workarounds:doNotUpgradeFromAlpineStableToEdge</code>: Do not upgrade from Alpine stable to edge.</li> <li><code>workarounds:supportRedHatImageVersion</code>: Use specific versioning for Red Hat-maintained container images.</li> <li><code>workarounds:javaLTSVersions</code>: Limit Java runtime versions to LTS releases.</li> <li><code>workarounds:disableEclipseLifecycleMapping</code>: Disable Eclipse m2e lifecycle-mapping placeholder package.</li> <li><code>workarounds:disableGradleReplacements</code>: Disable package replacement updates for gradle dependencies.</li> <li><code>workarounds:disableMavenParentRoot</code>: Avoid version fetching for Maven packages detected as project root.</li> <li><code>workarounds:containerbase</code>: Add some containerbase overrides.</li> <li><code>workarounds:bitnamiDockerImageVersioning</code>: Use custom regex versioning for bitnami images</li> <li><code>workarounds:clamavDockerImageVersioning</code>: Use custom regex versioning for ClamAV images</li> <li><code>workarounds:grafanaDockerImageVersioning</code>: Support security releases on Grafana (product) images</li> <li><code>workarounds:k3sKubernetesVersioning</code>: Use custom regex versioning for k3s-io/k3s</li> <li><code>workarounds:rke2KubernetesVersioning</code>: Use custom regex versioning for rancher/rke2</li> <li><code>workarounds:libericaJdkDockerVersioning</code>: Use custom regex versioning for bellsoft/liberica-runtime-container</li> <li><code>workarounds:ubuntuDockerVersioning</code>: Use ubuntu versioning for <code>ubuntu</code> docker images.</li> <li><code>workarounds:groupings</code>: Groupings for specific package updates.</li> <li><code>workarounds:helmDocs</code>: Block helm-docs calver-like versions from 2019</li> <li><code>workarounds:guavaVariants</code>: Keep Guava on its <code>-jre</code> or <code>-android</code> variant.</li> </ol>"},{"location":"presets-workarounds/#workaroundsbitnamidockerimageversioning","title":"<code>workarounds:bitnamiDockerImageVersioning</code>","text":"<p>Use custom regex versioning for bitnami images</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCurrentValue\": \"/^(?&lt;major&gt;\\\\d+)(?:\\\\.(?&lt;minor&gt;\\\\d+)(?:\\\\.(?&lt;patch&gt;\\\\d+))?)?-(?&lt;compatibility&gt;.+)-(?&lt;build&gt;\\\\d+)(?:-r(?&lt;revision&gt;\\\\d+))?$/\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"bitnami/**\",\n        \"docker.io/bitnami/**\",\n        \"gcr.io/bitnami-containers/**\",\n        \"*-docker.pkg.dev/vmw-app-catalog/**\"\n      ],\n      \"versioning\": \"regex:^(?&lt;major&gt;\\\\d+)(?:\\\\.(?&lt;minor&gt;\\\\d+)(?:\\\\.(?&lt;patch&gt;\\\\d+))?)?(:?-(?&lt;compatibility&gt;.+)-(?&lt;build&gt;\\\\d+)(?:-r(?&lt;revision&gt;\\\\d+))?)?$\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundsclamavdockerimageversioning","title":"<code>workarounds:clamavDockerImageVersioning</code>","text":"<p>Use custom regex versioning for ClamAV images</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"clamav/clamav\",\n        \"clamav/clamav-debian\"\n      ],\n      \"versioning\": \"regex:^(?&lt;major&gt;\\\\d+)\\\\.(?&lt;minor&gt;\\\\d+)(\\\\.(?&lt;patch&gt;\\\\d+))?(-(?&lt;build&gt;\\\\d+))?(_(?&lt;compatibility&gt;.+))?$\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundscontainerbase","title":"<code>workarounds:containerbase</code>","text":"<p>Add some containerbase overrides.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Use node versioning for `(containerbase|renovate)/node` images\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"/^(?:(?:docker|ghcr)\\\\.io/)?(?:containerbase|renovate)/node$/\"\n      ],\n      \"versioning\": \"node\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundsdisableeclipselifecyclemapping","title":"<code>workarounds:disableEclipseLifecycleMapping</code>","text":"<p>Disable Eclipse m2e lifecycle-mapping placeholder package.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"enabled\": false,\n      \"matchDatasources\": [\n        \"maven\"\n      ],\n      \"matchPackageNames\": [\n        \"org.eclipse.m2e:lifecycle-mapping\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundsdisablegradlereplacements","title":"<code>workarounds:disableGradleReplacements</code>","text":"<p>Disable package replacement updates for gradle dependencies.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"enabled\": false,\n      \"matchManagers\": [\n        \"gradle\"\n      ],\n      \"matchUpdateTypes\": [\n        \"replacement\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundsdisablemavenparentroot","title":"<code>workarounds:disableMavenParentRoot</code>","text":"<p>Avoid version fetching for Maven packages detected as project root.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"enabled\": false,\n      \"matchDepTypes\": [\n        \"parent-root\"\n      ],\n      \"matchManagers\": [\n        \"maven\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundsdonotupgradefromalpinestabletoedge","title":"<code>workarounds:doNotUpgradeFromAlpineStableToEdge</code>","text":"<p>Do not upgrade from Alpine stable to edge.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"allowedVersions\": \"&lt;20000000\",\n      \"matchCurrentVersion\": \"!/^\\\\d{8}$/\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchDepNames\": [\n        \"alpine\"\n      ]\n    },\n    {\n      \"allowedVersions\": \"&lt;20000000\",\n      \"matchCurrentVersion\": \"!/^\\\\d{8}$/\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"alpine\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundsgrafanadockerimageversioning","title":"<code>workarounds:grafanaDockerImageVersioning</code>","text":"<p>Support security releases on Grafana (product) images</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"grafana/grafana\",\n        \"docker.io/grafana/grafana\",\n        \"grafana/grafana-enterprise\",\n        \"docker.io/grafana/grafana-enterprise\"\n      ],\n      \"versioning\": \"regex:^(?&lt;major&gt;\\\\d+)\\\\.(?&lt;minor&gt;\\\\d+)\\\\.(?&lt;patch&gt;\\\\d+)(?:-security-(?&lt;build&gt;\\\\d+))?(?:-(?&lt;compatibility&gt;.*))?$\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundsgroupings","title":"<code>workarounds:groupings</code>","text":"<p>Groupings for specific package updates.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Group commander major updates, they depend on each other.\",\n      \"groupName\": \"commander\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@commander-js/extra-typings\",\n        \"commander\"\n      ],\n      \"matchUpdateTypes\": [\n        \"major\"\n      ]\n    },\n    {\n      \"description\": \"Group SimpleWebAuthn major updates to keep browser and server compatible.\",\n      \"groupName\": \"SimpleWebAuthn\",\n      \"matchDatasources\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@simplewebauthn/browser\",\n        \"@simplewebauthn/server\"\n      ],\n      \"matchUpdateTypes\": [\n        \"major\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundsguavavariants","title":"<code>workarounds:guavaVariants</code>","text":"<p>Keep Guava on its <code>-jre</code> or <code>-android</code> variant.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"maven\",\n        \"sbt-package\"\n      ],\n      \"matchPackageNames\": [\n        \"com.google.guava:guava\"\n      ],\n      \"versionCompatibility\": \"^(?&lt;version&gt;.+)-(?&lt;compatibility&gt;jre|android)$\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundshelmdocs","title":"<code>workarounds:helmDocs</code>","text":"<p>Block helm-docs calver-like versions from 2019</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"allowedVersions\": \"!/^19\\\\.(0614|0110)$/\",\n      \"matchPackageNames\": [\n        \"norwoodj/helm-docs\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundsignorehttp4sdigestmilestones","title":"<code>workarounds:ignoreHttp4sDigestMilestones</code>","text":"<p>Ignore <code>http4s</code> digest-based <code>1.x</code> milestones.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"allowedVersions\": \"!/^1\\\\.0-\\\\d+-[a-fA-F0-9]{7}$/\",\n      \"matchManagers\": [\n        \"sbt\"\n      ],\n      \"matchPackageNames\": [\n        \"org.http4s:**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundsignorespringcloudnumeric","title":"<code>workarounds:ignoreSpringCloudNumeric</code>","text":"<p>Ignore spring cloud <code>1.x</code> releases.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"allowedVersions\": \"/^[A-Z]/\",\n      \"matchDatasources\": [\n        \"maven\"\n      ],\n      \"matchPackageNames\": [\n        \"org.springframework.cloud:spring-cloud-starter-parent\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundsignoreweb3jcorewitholdreleasetimestamp","title":"<code>workarounds:ignoreWeb3jCoreWithOldReleaseTimestamp</code>","text":"<p>Ignore <code>web3j</code> <code>5.0.0</code> release.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"allowedVersions\": \"!/^5\\\\.0\\\\.0/\",\n      \"matchDatasources\": [\n        \"maven\"\n      ],\n      \"matchPackageNames\": [\n        \"org.web3j:core\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundsjavaltsversions","title":"<code>workarounds:javaLTSVersions</code>","text":"<p>Limit Java runtime versions to LTS releases.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"allowedVersions\": \"/^(?:8|11|17|21|25)(?:\\\\.|-|$)/\",\n      \"description\": \"Limit Java runtime versions to LTS releases. To receive all major releases add `workarounds:javaLTSVersions` to the `ignorePresets` array.\",\n      \"matchDatasources\": [\n        \"docker\",\n        \"java-version\"\n      ],\n      \"matchPackageNames\": [\n        \"eclipse-temurin\",\n        \"amazoncorretto\",\n        \"adoptopenjdk\",\n        \"openjdk\",\n        \"java\",\n        \"java-jdk\",\n        \"java-jre\",\n        \"sapmachine\",\n        \"/^azul/zulu-openjdk/\",\n        \"/^bellsoft/liberica-openj(dk|re)-/\",\n        \"/^cimg/openjdk/\"\n      ],\n      \"versioning\": \"regex:^(?&lt;major&gt;\\\\d+)?(\\\\.(?&lt;minor&gt;\\\\d+))?(\\\\.(?&lt;patch&gt;\\\\d+))?([\\\\._+](?&lt;build&gt;(\\\\d\\\\.?)+)(LTS)?)?(-(?&lt;compatibility&gt;.*))?$\"\n    },\n    {\n      \"allowedVersions\": \"/^(?:8|11|17|21|25)(?:\\\\.|-|$)/\",\n      \"description\": \"Limit Java runtime versions to LTS releases. To receive all major releases add `workarounds:javaLTSVersions` to the `ignorePresets` array.\",\n      \"matchDatasources\": [\n        \"docker\",\n        \"java-version\"\n      ],\n      \"matchDepNames\": [\n        \"eclipse-temurin\",\n        \"amazoncorretto\",\n        \"adoptopenjdk\",\n        \"openjdk\",\n        \"java\",\n        \"java-jre\",\n        \"sapmachine\"\n      ],\n      \"versioning\": \"regex:^(?&lt;major&gt;\\\\d+)?(\\\\.(?&lt;minor&gt;\\\\d+))?(\\\\.(?&lt;patch&gt;\\\\d+))?([\\\\._+](?&lt;build&gt;(\\\\d\\\\.?)+)(LTS)?)?(-(?&lt;compatibility&gt;.*))?$\"\n    },\n    {\n      \"description\": \"Use docker versioning for major-only Java image tags so rolling tags (e.g. 21-jre) are not upgraded to full-precision tags (e.g. 21.0.11_10-jre).\",\n      \"matchCurrentValue\": \"/^\\\\d+(-|$)/\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"eclipse-temurin\",\n        \"amazoncorretto\",\n        \"adoptopenjdk\",\n        \"openjdk\",\n        \"java\",\n        \"java-jdk\",\n        \"java-jre\",\n        \"sapmachine\",\n        \"/^azul/zulu-openjdk/\",\n        \"/^bellsoft/liberica-openj(dk|re)-/\",\n        \"/^cimg/openjdk/\"\n      ],\n      \"versioning\": \"docker\"\n    },\n    {\n      \"description\": \"Use docker versioning for major-only Java image tags so rolling tags (e.g. 21-jre) are not upgraded to full-precision tags (e.g. 21.0.11_10-jre).\",\n      \"matchCurrentValue\": \"/^\\\\d+(-|$)/\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchDepNames\": [\n        \"eclipse-temurin\",\n        \"amazoncorretto\",\n        \"adoptopenjdk\",\n        \"openjdk\",\n        \"java\",\n        \"java-jre\",\n        \"sapmachine\"\n      ],\n      \"versioning\": \"docker\"\n    },\n    {\n      \"description\": \"Use partial semver versioning for partial mise and GitHub Actions Java versions so rolling versions (e.g. 21) are not upgraded to full-precision versions (e.g. 21.0.11+9.0.LTS).\",\n      \"matchCurrentValue\": \"/^\\\\d+(?:\\\\.\\\\d+)?$/\",\n      \"matchDatasources\": [\n        \"java-version\"\n      ],\n      \"matchManagers\": [\n        \"github-actions\",\n        \"mise\"\n      ],\n      \"versioning\": \"semver-partial\"\n    },\n    {\n      \"allowedVersions\": \"/^(?:jdk|jdk-all|jre)-(?:8|11|17|21|25)(?:\\\\.|-|$)/\",\n      \"description\": \"Limit Java runtime versions to LTS releases. To receive all major releases add `workarounds:javaLTSVersions` to the `ignorePresets` array.\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"bellsoft/hardened-liberica-runtime-container\",\n        \"bellsoft/liberica-runtime-container\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundsk3skubernetesversioning","title":"<code>workarounds:k3sKubernetesVersioning</code>","text":"<p>Use custom regex versioning for k3s-io/k3s</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"github-releases\"\n      ],\n      \"matchPackageNames\": [\n        \"k3s-io/k3s\"\n      ],\n      \"versioning\": \"regex:^v(?&lt;major&gt;\\\\d+)\\\\.(?&lt;minor&gt;\\\\d+)\\\\.(?&lt;patch&gt;\\\\d+)(?:-(?&lt;prerelease&gt;[a-z]+\\\\d+))?(?&lt;compatibility&gt;\\\\+k3s)(?&lt;build&gt;\\\\d+)$\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundslibericajdkdockerversioning","title":"<code>workarounds:libericaJdkDockerVersioning</code>","text":"<p>Use custom regex versioning for bellsoft/liberica-runtime-container</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Liberica JDK Lite version optimized for the Cloud\",\n      \"matchCurrentValue\": \"/^jdk-[^a][^l]{2}/\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"bellsoft/hardened-liberica-runtime-container\",\n        \"bellsoft/liberica-runtime-container\"\n      ],\n      \"versioning\": \"regex:^jdk-(?&lt;major&gt;\\\\d+)?(\\\\.(?&lt;minor&gt;\\\\d+))?(\\\\.(?&lt;patch&gt;\\\\d+))?([\\\\._+](?&lt;build&gt;(\\\\d\\\\.?)+))?(-(?&lt;compatibility&gt;.*))?$\"\n    },\n    {\n      \"description\": \"Liberica JDK that can be used to create a custom runtime with a help of jlink tool\",\n      \"matchCurrentValue\": \"/^jdk-all/\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"bellsoft/hardened-liberica-runtime-container\",\n        \"bellsoft/liberica-runtime-container\"\n      ],\n      \"versioning\": \"regex:^jdk-all-(?&lt;major&gt;\\\\d+)?(\\\\.(?&lt;minor&gt;\\\\d+))?(\\\\.(?&lt;patch&gt;\\\\d+))?([\\\\._+](?&lt;build&gt;(\\\\d\\\\.?)+))?(-(?&lt;compatibility&gt;.*))?$\"\n    },\n    {\n      \"description\": \"Liberica JRE (only the runtime without the rest of JDK tools) for running Java applications\",\n      \"matchCurrentValue\": \"/^jre-/\",\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"bellsoft/hardened-liberica-runtime-container\",\n        \"bellsoft/liberica-runtime-container\"\n      ],\n      \"versioning\": \"regex:^jre-(?&lt;major&gt;\\\\d+)?(\\\\.(?&lt;minor&gt;\\\\d+))?(\\\\.(?&lt;patch&gt;\\\\d+))?([\\\\._+](?&lt;build&gt;(\\\\d\\\\.?)+))?(-(?&lt;compatibility&gt;.*))?$\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundsmavencommonsancientversion","title":"<code>workarounds:mavenCommonsAncientVersion</code>","text":"<p>Fix some problems with very old Maven commons versions.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"allowedVersions\": \"!/^200\\\\d{5}(\\\\.\\\\d+)?/\",\n      \"matchDatasources\": [\n        \"maven\",\n        \"sbt-package\"\n      ],\n      \"matchPackageNames\": [\n        \"commons-**\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundsnodedockerversioning","title":"<code>workarounds:nodeDockerVersioning</code>","text":"<p>Use node versioning for <code>node</code> docker images.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"/(?:^|/)node$/\",\n        \"!calico/node\",\n        \"!docker.io/calico/node\",\n        \"!ghcr.io/devcontainers/features/node\",\n        \"!kindest/node\",\n        \"!docker.io/kindest/node\"\n      ],\n      \"versionCompatibility\": \"^(?&lt;version&gt;[^-]+)(?&lt;compatibility&gt;-.*)?$\",\n      \"versioning\": \"node\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundsrke2kubernetesversioning","title":"<code>workarounds:rke2KubernetesVersioning</code>","text":"<p>Use custom regex versioning for rancher/rke2</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"github-releases\"\n      ],\n      \"matchPackageNames\": [\n        \"rancher/rke2\"\n      ],\n      \"versioning\": \"regex:^v(?&lt;major&gt;\\\\d+)\\\\.(?&lt;minor&gt;\\\\d+)\\\\.(?&lt;patch&gt;\\\\d+)(?:-(?&lt;prerelease&gt;[a-z]+\\\\d+))?(?&lt;compatibility&gt;\\\\+rke2r)(?&lt;build&gt;\\\\d+)$\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundssupportredhatimageversion","title":"<code>workarounds:supportRedHatImageVersion</code>","text":"<p>Use specific versioning for Red Hat-maintained container images.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchPackageNames\": [\n        \"registry.access.redhat.com/rhel\",\n        \"registry.access.redhat.com/rhel-atomic\",\n        \"registry.access.redhat.com/rhel-init\",\n        \"registry.access.redhat.com/rhel-minimal\",\n        \"registry.access.redhat.com/rhceph/**\",\n        \"registry.access.redhat.com/rhgs3/**\",\n        \"registry.access.redhat.com/rhel7**\",\n        \"registry.access.redhat.com/rhel8/**\",\n        \"registry.access.redhat.com/rhel9/**\",\n        \"registry.access.redhat.com/rhscl/**\",\n        \"registry.access.redhat.com/ubi*{,/}**\",\n        \"redhat/**\"\n      ],\n      \"versioning\": \"redhat\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundstypesnodeversioning","title":"<code>workarounds:typesNodeVersioning</code>","text":"<p>Use node versioning for <code>@types/node</code>.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchManagers\": [\n        \"npm\"\n      ],\n      \"matchPackageNames\": [\n        \"@types/node\"\n      ],\n      \"versioning\": \"node\"\n    }\n  ]\n}\n</code></pre>"},{"location":"presets-workarounds/#workaroundsubuntudockerversioning","title":"<code>workarounds:ubuntuDockerVersioning</code>","text":"<p>Use ubuntu versioning for <code>ubuntu</code> docker images.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\n        \"docker\"\n      ],\n      \"matchDepNames\": [\n        \"ubuntu\"\n      ],\n      \"versioning\": \"ubuntu\"\n    }\n  ]\n}\n</code></pre>"},{"location":"python/","title":"Python package manager support","text":"<p>Renovate supports several Python package managers, including <code>pip</code>, <code>pipenv</code>, <code>poetry</code>, etc. See all supported managers.</p>"},{"location":"python/#versioning-support","title":"Versioning support","text":"<p>We've written a JavaScript version of the PEP440 specification so we can use it in Renovate. You can find this project in our <code>renovatebot/pep440</code> repository.</p> <p>Our PEP440 implementation supports pinned versions and ranges. Legacy versions with the <code>===</code> prefix are ignored.</p>"},{"location":"python/#how-it-works","title":"How it works","text":"<ol> <li>Renovate searches through each repository for package files</li> <li>Existing dependencies are extracted from the package files</li> <li>Renovate searches for the latest version on PyPI to decide if there are upgrades</li> <li>If the source package includes a GitHub URL as its source, and has a \"changelog\" file or uses GitHub releases, a Release Note will be embedded in the generated PR</li> </ol>"},{"location":"python/#package-name-matching","title":"Package name matching","text":"<p>Your <code>matchPackageName</code> or <code>matchPackagePattern</code> rules will be matching against normalized names. So if you have specified package <code>some.package</code> or <code>ANOTHER_DEP</code> in your package files (<code>requirements.txt</code>, <code>pyproject.toml</code>), they will be treated as <code>some-package</code> and <code>another-dep</code> respectively. Not only they will be case insensitive but will replace any amount <code>._-</code> to a single <code>-</code>. Consult Python packaging documentation for the specification.</p>"},{"location":"python/#alternate-registries","title":"Alternate registries","text":"<p>By default Renovate checks for upgrades on the <code>pypi.org</code> registry.</p> <p>If you want, you can set alternative index URLs. There are three ways to do this:</p> <ul> <li>index-url in <code>requirements.txt</code></li> <li>sources in <code>Pipfile</code></li> <li>sources in <code>pyproject.toml</code></li> <li>set URL in Renovate configuration</li> </ul>"},{"location":"python/#index-url-in-requirementstxt","title":"index-url in <code>requirements.txt</code>","text":"Setting index URL in first line of requirements.txt<pre><code>--index-url http://example.com/private-pypi/\nsome-package==0.3.1\nsome-other-package==1.0.0\n</code></pre>"},{"location":"python/#sources-in-pipfile","title":"Sources in <code>Pipfile</code>","text":"<p>Renovate finds and uses any custom sources in your <code>Pipfile</code>.</p>"},{"location":"python/#sources-in-pyprojecttoml","title":"Sources in <code>pyproject.toml</code>","text":"<p>Renovate detects any custom-configured sources in <code>pyproject.toml</code> and uses them.</p>"},{"location":"python/#specify-url-in-configuration","title":"Specify URL in configuration","text":"<p>Create a <code>packageRules</code> entry with <code>matchDatasources=pypi</code> and a <code>registryUrls</code> array. Fill the array with alternate index URL(s).</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"pypi\"],\n      \"registryUrls\": [\"http://example.com/private-pypi/\"]\n    }\n  ]\n}\n</code></pre> <p>Tip</p> <p>If a <code>requirements.txt</code> file has an index-url then Renovate follows that link, instead of following any link set in the <code>registryUrls</code> array. To override the URL found in <code>requirements.txt</code>, you must create a custom <code>packageRules</code> setting. This is because <code>packageRules</code> are applied after package file extraction.</p>"},{"location":"python/#disabling-python-support","title":"Disabling Python support","text":"Disabling all managers in the Python category<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchCategories\": [\"python\"],\n      \"enabled\": false\n    }\n  ]\n}\n</code></pre> <p>Alternatively, you can use <code>enabledManagers</code> to tell Renovate what package managers it can use.</p> Only use Renovate's npm package manager<pre><code>{\n  \"enabledManagers\": [\"npm\"]\n}\n</code></pre>"},{"location":"reading-list/","title":"Reading list","text":"<p>Renovate's documentation has a lot of pages. To ease you into using Renovate we created reading lists. The reading lists contain the essential information for each type of user.</p> <p>How much you should read depends on how much you want to customize Renovate's behavior.</p>"},{"location":"reading-list/#how-to-use-this-page","title":"How to use this page","text":"<p>We created reading lists for these types of users:</p> <ul> <li>Beginners</li> <li>Intermediate</li> <li>Advanced</li> </ul> <p>Start with the \"Beginners\" reading list. If you're self-hosting or need to update private packages, complete the relevant reading lists for those.</p>"},{"location":"reading-list/#i-dont-know-where-to-start","title":"I don't know where to start","text":"<p>If you're new to Renovate, you should:</p> <ul> <li>Use the Mend Renovate App, or let someone else host Renovate for you</li> <li>Stick with the <code>config:recommended</code> preset</li> <li>Use the Dependency Dashboard (<code>config:recommended</code> enables it automatically)</li> <li>Read the pages in the \"Beginners\" list</li> <li>Only create custom Renovate configuration when really needed</li> </ul>"},{"location":"reading-list/#beginners","title":"Beginners","text":"<p>Start by reading:</p> <ul> <li>Installing &amp; Onboarding</li> <li>Key concepts, Dependency Dashboard</li> <li>Use Cases</li> <li>Running Renovate</li> <li>Troubleshooting</li> <li>Known limitations</li> </ul>"},{"location":"reading-list/#intermediate","title":"Intermediate","text":"<p>First, complete the \"Beginners\" reading list. Read this list after experiencing Renovate's default behavior, once you really want/need to make changes to Renovate's behavior.</p> <ul> <li>Upgrade best practices</li> <li>Key concepts, presets</li> <li>Key concepts, Renovate scheduling</li> <li>Key concepts, automerge</li> <li>Key concepts, pull requests</li> <li>Noise Reduction</li> </ul> <p>Skim the repository configuration options to learn about the kind of customizations you can make to Renovate. Feel free to read up on anything that looks interesting to you.</p>"},{"location":"reading-list/#advanced","title":"Advanced","text":"<p>First, complete the \"Beginners\" and the \"Intermediate\" reading list. Then read:</p> <ul> <li>Define your own custom manager with <code>customManagers</code> (previously <code>regexManagers</code>)</li> <li>Define your own custom datasources with <code>customDatasources</code></li> <li>Shareable config presets</li> </ul>"},{"location":"reading-list/#self-hosting-renovate","title":"Self-hosting Renovate","text":"<p>If you're going to self-host Renovate then read:</p> <ul> <li>Running Renovate</li> <li>Self-hosting examples</li> <li>Skim the self hosted configuration options</li> </ul>"},{"location":"reading-list/#private-packages","title":"Private packages","text":"<p>If you want Renovate to update private packages then read:</p> <ul> <li>Private package support</li> </ul>"},{"location":"ruby/","title":"Automated dependency updates for Ruby Bundler dependencies","text":"<p>Renovate supports upgrading dependencies in Bundler's Gemfiles and associated <code>Gemfile.lock</code> files.</p>"},{"location":"ruby/#how-it-works","title":"How it works","text":"<ol> <li>Renovate searches in each repository for any Gemfiles</li> <li>Existing dependencies are extracted from the Gemfiles</li> <li>Renovate resolves the dependency on Rubygems.org (or elsewhere if configured), and checks for newer versions</li> <li>A PR is created which updates the <code>Gemfile</code> and <code>Gemfile.lock</code> in a single commit</li> </ol>"},{"location":"ruby/#warnings","title":"Warnings","text":"<p>When using <code>\"rangeStrategy\": \"update-lockfile\"</code>, all gems listed in the <code>Gemfile</code> will be updated, even if they do not have a version specified.</p> <p>When using other <code>rangeStrategy</code> options, Renovate doesn't update dependencies without a version constraint. Example: <code>gem 'some-gem', '~&gt; 1.2.3'</code> will update <code>some-gem</code> if a new version matching the constraint is available, but <code>gem 'some-gem'</code> won't. If you always want to have the latest available version, consider specifying <code>gem 'some-gem', '&gt; 0'</code>.</p>"},{"location":"ruby/#enabling","title":"Enabling","text":"<p>You can install the Renovate App on GitHub. Or you can check out Renovate OSS to self-host Renovate.</p>"},{"location":"rust/","title":"Automated Dependency Updates for Rust crates","text":"<p>Renovate supports upgrading dependencies in <code>Cargo.toml</code> files and associated <code>Cargo.lock</code> checksums.</p>"},{"location":"rust/#how-it-works","title":"How it works","text":"<ol> <li>Renovate searches in each repository for any <code>Cargo.toml</code> files</li> <li>Renovate extracts existing dependencies from <code>[dependencies]</code>, <code>[dev-dependencies]</code>, <code>[build-dependencies]</code> and <code>[workspace.dependencies]</code></li> <li>Renovate looks up Cargo configuration to find index URLs for private registries</li> <li>Renovate resolves the dependency's version using the crates.io API or by cloning the index URL</li> <li>If Renovate finds an update, Renovate will use <code>cargo update</code> to update both <code>Cargo.toml</code> and <code>Cargo.lock</code></li> </ol>"},{"location":"rust/#enabling-rust-modules-updating","title":"Enabling Rust Modules Updating","text":"<p>Renovate updates Rust crates by default.</p>"},{"location":"rust/#cargo-configuration-and-private-registry-discovery","title":"Cargo configuration and private registry discovery","text":"<p>Renovate can find private registry URLs in these Cargo configuration files:</p> <ul> <li><code>.cargo/config.toml</code></li> <li><code>.cargo/config</code> (legacy)</li> </ul> <p>If both files exist, Renovate reads <code>.cargo/config</code>, like cargo.</p> <p>Renovate can also find private registry URLs via a <code>CARGO_REGISTRIES_&lt;name&gt;_INDEX</code> environment variable. Read the Rust environment variables docs to learn more.</p>"},{"location":"rust/#private-crate-registries-and-private-git-dependencies","title":"Private crate registries and private Git dependencies","text":"<p>You as user can set authentication for private crates by adding a <code>hostRules</code> configuration to your <code>renovate.json</code> file.</p> <p>All token <code>hostRules</code> with a <code>hostType</code> (e.g. <code>github</code>, <code>gitlab</code>, <code>bitbucket</code>, etc.) and host rules without a <code>hostType</code> will be automatically setup for authentication. You can also configure a <code>hostRules</code> that's only for Cargo authentication (e.g. <code>hostType: 'crate'</code>).</p> Example of authentication for a private GitHub and Cargo registry:<pre><code>module.exports = {\n  hostRules: [\n    {\n      matchHost: 'github.enterprise.com',\n      token: process.env.GITHUB_TOKEN,\n      hostType: 'github',\n    },\n    {\n      matchHost: 'someGitHost.enterprise.com',\n      token: process.env.CARGO_GIT_TOKEN,\n      hostType: 'crate',\n    },\n  ],\n};\n</code></pre>"},{"location":"security-and-permissions/","title":"Security and Permissions","text":"<p>This page talks about our security stance, and explains what permissions are needed for the different ways you can run Renovate.</p>"},{"location":"security-and-permissions/#security-stance","title":"Security Stance","text":"<p>Renovate is open source software, and comes with no guarantees or warranties of any kind. That said, we will try to fix security problems in a reasonable timeframe if possible.</p>"},{"location":"security-and-permissions/#certifications","title":"Certifications","text":"<p>Renovate the open source project is not certified.</p> <p>Mend is the company which maintains Renovate and provides the Mend Renovate App. Mend is ISO 27001 and SOC2 certified.</p>"},{"location":"security-and-permissions/#security-disclosure","title":"Security / Disclosure","text":"<p>If you find any bug with Renovate that may be a security problem, please report it through the GitHub Security Advisories process. This way we can evaluate the bug and hopefully fix it before it gets abused. Please give us enough time to investigate the bug before you report it anywhere else.</p> <p>If you would like to discuss a potential finding before raising the Advisory, then e-mail us at: renovate-disclosure@mend.io.</p> <p>Please do not create GitHub issues for security-related doubts or problems.</p>"},{"location":"security-and-permissions/#permissions","title":"Permissions","text":"<p>We apply the Principle of Least Privilege (PoLP) but do need substantial privileges for our apps to work.</p>"},{"location":"security-and-permissions/#global-permissions","title":"Global Permissions","text":"<p>These permissions are always needed to run the respective app.</p> Permission The Mend Renovate App Forking Renovate Why Dependabot alerts <code>read</code> <code>read</code> Create vulnerability fix PRs Administration <code>read</code> <code>read</code> Read branch protections and to be able to assign teams to PRs Metadata <code>read</code> <code>read</code> Mandatory for all apps Checks <code>read</code> and <code>write</code> not applicable Read and write status checks Code <code>read</code> and <code>write</code> <code>read</code> Read for repository content and write for creating branches Commit statuses <code>read</code> and <code>write</code> <code>read</code> and <code>write</code> Read and write commit statuses for Renovate PRs Issues <code>read</code> and <code>write</code> <code>read</code> and <code>write</code> Create Dependency Dashboard or Config Warning issues Pull Requests <code>read</code> and <code>write</code> <code>read</code> and <code>write</code> Create update PRs Workflows <code>read</code> and <code>write</code> not applicable Explicit permission needed to update workflows"},{"location":"security-and-permissions/#user-permissions","title":"User permissions","text":"<p>Renovate can also request users's permission to the following resources. These permissions will be requested and authorized on an individual-user basis.</p> Permission The Mend Renovate App Forking Renovate Why email <code>read</code> not applicable Per-user consent requested if logging into App dashboard"},{"location":"security-and-permissions/#privacy","title":"Privacy","text":""},{"location":"security-and-permissions/#self-hosted-renovate-oss-cli-mend-renovate-on-premises","title":"Self-hosted (Renovate OSS CLI, Mend Renovate On-Premises)","text":"<p>Renovate is designed to operate autonomously and directly with package and source repositories, so does not \"phone home\", send telemetry, or need to request information from Mend or any project infrastructure. An exception to this is when Merge Confidence badges are requested, because those are hosted on Mend servers. Such badges are public, do not require authentication, and Renovate does not identify the source user or repository when requesting them. Self-hosted Renovate does not send or submit any package data to Mend for the purpose of calculating Merge Confidence figures.</p> <p>According to a strict definition, Renovate may \"send data\" to third-party registries and source code hosts directly to look up new releases. For example, if you have an <code>npm</code> package and do not configure a private registry then Renovate will query URLs on <code>https://registry.npmjs.org</code> including names of packages used in your repositories. You could avoid this by configuring private registries but such registries need to query public registries anyway. We don't know of any public registries which reverse lookup IP addresses to associate companies with packages.</p>"},{"location":"security-and-permissions/#security-awareness-for-self-hosted-renovate-instances","title":"Security awareness for self-hosted Renovate instances","text":""},{"location":"security-and-permissions/#introduction","title":"Introduction","text":"<p>Before you start self-hosting Renovate you must understand the security implications associated with monitoring and updating repositories. The process that Renovate uses to update dependencies runs under the same user context as the Renovate process itself. This also means the process has the same level of access to information and resources as the user context!</p>"},{"location":"security-and-permissions/#trusting-repository-developers","title":"Trusting Repository Developers","text":"<p>All self-hosted Renovate instances must operate under a trust relationship with the developers of the monitored repositories. This has the following implications:</p> <ul> <li>Access to information</li> <li>Execution of code</li> </ul> <p>Keep reading to learn more.</p>"},{"location":"security-and-permissions/#access-to-information","title":"Access to information","text":"<p>Since the update process runs with the same user privileges as the Renovate process, it inherently has access to the same information and resources. This includes sensitive data that may be stored within the environment where Renovate is hosted.</p>"},{"location":"security-and-permissions/#execution-of-code-insider-attack","title":"Execution of code (insider attack)","text":"<p>In certain scenarios, code from the monitored repository is executed as part of the update process. This is particularly true during, for example:</p> <ul> <li><code>postUpgradeTasks</code>, where scripts specified by the repository are run</li> <li>when a wrapper within the repository is called, like <code>gradlew</code> (if setting <code>allowedUnsafeExecutions=[\"gradleWrapper\"]</code>.</li> <li>when <code>mise trust</code> / <code>mise lock</code> are run from the repository checkout (if setting <code>allowedUnsafeExecutions=[\"mise\"]</code>.</li> <li>when <code>pixi lock</code> is run to update <code>pixi.lock</code> (if setting <code>allowedUnsafeExecutions=[\"pixi\"]</code>.</li> </ul> <p>These scripts can contain arbitrary code. This may pose a significant security risk if the repository's integrity is compromised, or if the repository maintainers have malicious intentions.</p> <p>Because such insider attack is an inherent and unavoidable risk, the Renovate project will not issue CVEs (or GHSAs) for such attacks or weaknesses other than in exceptional circumstances.</p> <p>If you require <code>postUpgradeTasks</code> to run inside a shell, you can enable this using <code>allowShellExecutorForPostUpgradeCommands=true</code>. Note that this means that these commands can call out to other commands or access shell variables, if the allowlist via <code>allowedCommands</code> does not restrict it. As it is difficult to craft a regular expression that may deny usage of special characters to shells, it is likely that this will not be possible to avoid at this time.</p>"},{"location":"security-and-permissions/#execution-of-code-outsider-attack","title":"Execution of code (outsider attack)","text":"<p>Separately, there are also opportunities for malicious external code to execute, as part of Renovate's update process.</p> <p>Warning</p> <p>Below are some of the options, but note that this is not exhaustive.</p> <p>For instance:</p> <ul> <li>updates that invoke Gradle (i.e. <code>./gradlew</code>), such as updating the Gradle Wrapper or performing Gradle Verification Metadata<ul> <li>because the Gradle buildscript is evaluated at this time (i.e. to determine which dependencies are available to then update the verification metadata)</li> </ul> </li> <li>executing any <code>postUpgradeTasks</code> in a way that may use an updated dependency<ul> <li>i.e. if you have a postUpgradeTask for <code>make docs</code>, where the version of your docs builder has updated</li> <li>i.e. if your pre-commit hook, where the version of a linter has updated</li> </ul> </li> </ul> <p>Depending on the self-hosted configuration, it may also be possible for package manager scripts to execute post-update (if using <code>allowScripts=true</code> alongside <code>ignoreScripts=false</code>):</p> <ul> <li>when an <code>npm install</code>, <code>composer install</code>, etc is executed on a branch update</li> <li>performing lock file maintenance</li> </ul>"},{"location":"security-and-permissions/#centralized-logging-and-sensitive-information-management","title":"Centralized logging and sensitive information management","text":"<p>Centralized logging is key to monitor and troubleshoot self-hosted Renovate environments. But logging may inadvertently capture and expose sensitive information. Operations that involve <code>customEnvVariables</code>, among others, could expose sensitive data, when logging is used.</p>"},{"location":"security-and-permissions/#recommendations","title":"Recommendations","text":"<p>The Renovate maintainers recommend you follow these guidelines.</p>"},{"location":"security-and-permissions/#vet-and-monitor-repositories","title":"Vet and monitor repositories","text":"<p>Before integrating a repository with your self-hosted Renovate instance, thoroughly vet the repository for security and trustworthiness. This means that you should review the:</p> <ul> <li>repository's ownership</li> <li>contribution history</li> <li>open issues</li> <li>open pull requests</li> </ul>"},{"location":"security-and-permissions/#limit-permissions","title":"Limit permissions","text":"<p>Configure the environment running Renovate with the principle of least privilege. Ensure that the Renovate process has only the permissions needed to perform its tasks and no more. This reduces the impact of any malicious code execution.</p>"},{"location":"security-and-permissions/#regularly-review-post-upgrade-tasks","title":"Regularly review post-upgrade tasks","text":"<p>Regularly review the actions taken by <code>postUpgradeTasks</code> to make sure they do not execute unnecessary or risky operations. Consider implementing a review process for changes to these tasks within repositories.</p> <p>Where possible, restrict the commands executed to an allowlist you control, and try to limit the opportunity for those commands to execute additional commands.</p> <p>For instance, allowlisting the command <code>make lint-fix</code> could run other tasks, including running <code>npm install --foreground-scripts</code>, which would bypass the global <code>allowScripts</code> configuration</p>"},{"location":"security-and-permissions/#use-security-tools","title":"Use security tools","text":"<p>Employ security tools and practices, like code scanning and vulnerability assessments, on the Renovate configuration and the repositories Renovate manages. This helps identify potentially malicious code before it is executed.</p>"},{"location":"security-and-permissions/#securing-environment-variables","title":"Securing environment variables","text":"<p>When configuring <code>customEnvVariables</code>: always use Renovate's secrets management syntax <code>({{ secrets.VAR_NAME }})</code> to reference sensitive variables securely. This makes sure that sensitive data is not exposed as plain text.</p>"},{"location":"security-and-permissions/#logging-infrastructure-security","title":"Logging infrastructure security","text":"<p>Ensure that the logging infrastructure is configured to handle logs as sensitive data. This includes measures like:</p> <ul> <li>log encryption</li> <li>access controls to restrict log viewing to authorized personnel only</li> <li>secure storage and transmission of log data</li> </ul>"},{"location":"security-and-permissions/#log-review-and-redaction-processes","title":"Log review and redaction processes","text":"<p>Implement rigorous log review mechanisms to regularly scan for and redact sensitive information that might be logged inadvertently. Automated tools can assist in identifying patterns indicative of sensitive data, such as credentials or personal information, enabling timely redaction or alerting.</p>"},{"location":"security-and-permissions/#stay-informed","title":"Stay informed","text":"<p>Keep abreast of updates and security advisories related to Renovate itself. Apply updates promptly to ensure that your self-hosted instances get the latest security enhancements and bug fixes.</p>"},{"location":"security-and-permissions/#conclusion","title":"Conclusion","text":"<p>The flexibility and power of self-hosting Renovate also means you must take steps to manage your security. By understanding the risks associated with repository management and taking steps to mitigate those risks, organizations can maintain a secure and efficient development workflow.</p>"},{"location":"security-and-permissions/#hostedsaas-the-mend-renovate-app","title":"Hosted/SaaS (the Mend Renovate App)","text":"<p>Users of the Mend Renovate App fall under Mend's Terms of Service and Privacy Policy.</p> <p>In this case the app needs to temporarily clone source code for Renovate to run, but the app does not keep the source code anywhere after jobs are completed.</p> <p>Mend anonymizes and aggregates package use and update success rates within the hosted app to derive Merge Confidence scores.</p> <p>The app database keeps a list of dependencies and versions per repo, plus basic into about any Renovate PRs it's created.</p>"},{"location":"self-hosted-configuration/","title":"Self-Hosted configuration options","text":"<p>Only use these configuration options when you self-host Renovate.</p> <p>Do not put the self-hosted config options listed on this page in your \"repository config\" file (<code>renovate.json</code> for example), because Renovate will ignore those config options, and may also create a config error issue.</p> <p>The config options below must be configured in the admin config, so in either an environment variable, CLI option, or a special file like <code>config.js</code>.</p> <p>Note</p> <p>Renovate supports <code>JSONC</code> for <code>.json</code> files and any config files without file extension (e.g. <code>.renovaterc</code>).</p> <p>For information about how to configure Renovate with a <code>config.js</code> see the Using <code>config.js</code> documentation.</p> <p>Tip</p> <p>This documentation corresponds with the JSON schema in <code>docs.renovatebot.com/renovate-global-schema.json</code>, and any inherited config options are also present in <code>docs.renovatebot.com/renovate-inherited-schema.json</code>.</p> <p>Please also see Self-Hosted Experimental Options.</p> <p>Note</p> <p>Config options with <code>type=string</code> are always non-mergeable, so <code>mergeable=false</code>.</p>"},{"location":"self-hosted-configuration/#allowcustomcrategitregistries","title":"<code>allowCustomCrateGitRegistries</code>","text":"<p>Set this to <code>true</code> to allow cloning custom Cargo <code>git</code> registries. This only restricts non-sparse registries.</p> Name Value type boolean default <code>false</code> cli <code>--allow-custom-crate-git-registries</code> env <code>RENOVATE_ALLOW_CUSTOM_CRATE_GIT_REGISTRIES</code> previouslyKnownAs <pre><code>[\"allowCustomCrateRegistries\"]\n</code></pre>"},{"location":"self-hosted-configuration/#allowplugins","title":"<code>allowPlugins</code>","text":"<p>Set this to <code>true</code> if repositories are allowed to run install plugins.</p> Name Value type boolean default <code>false</code> cli <code>--allow-plugins</code> env <code>RENOVATE_ALLOW_PLUGINS</code>"},{"location":"self-hosted-configuration/#allowscripts","title":"<code>allowScripts</code>","text":"<p>Set this to <code>true</code> if repositories are allowed to run install scripts.</p> Name Value type boolean default <code>false</code> cli <code>--allow-scripts</code> env <code>RENOVATE_ALLOW_SCRIPTS</code>"},{"location":"self-hosted-configuration/#allowshellexecutorforpostupgradecommands","title":"<code>allowShellExecutorForPostUpgradeCommands</code>","text":"<p>Whether to run commands for <code>postUpgradeTasks</code> inside a shell. This has security implications, as it means that they can call out to other commands or access shell variables. It is difficult to craft an <code>allowedCommands</code> regex to restrict this.</p> Name Value type boolean default <code>false</code> cli <code>--allow-shell-executor-for-post-upgrade-commands</code> env <code>RENOVATE_ALLOW_SHELL_EXECUTOR_FOR_POST_UPGRADE_COMMANDS</code> <p>Enabling this allows <code>postUpgradeTasks</code>' <code>commands</code> to execute as if they're in a shell.</p> <p>This takes effect if you are using shell semantics, such as:</p> allowShellExecutorForPostUpgradeCommands=true will allow this to run as expected<pre><code>{\n  \"postUpgradeTasks\": {\n    \"commands\": [\"echo '...' &gt; go.mod\", \"go mod tidy || true\"],\n    \"fileFilters\": [\"**/*.go\"],\n    \"executionMode\": \"branch\"\n  }\n}\n</code></pre> <p>This will not affect calling a script like:</p> allowShellExecutorForPostUpgradeCommands=true will have not effect<pre><code>{\n  \"postUpgradeTasks\": {\n    \"commands\": [\"bash .scripts/post-yarn-update.sh\"],\n    \"fileFilters\": [\"yarn.lock\", \"**/*.js\"],\n    \"executionMode\": \"update\"\n  }\n}\n</code></pre> <p>Warning</p> <p>This has the risk of arbitrary environment variable access or additional command execution. It is very likely this will be susceptible to these risks, even if you allowlist (via <code>allowedCommands</code>), as there may be special characters included in the given commands that can be leveraged</p>"},{"location":"self-hosted-configuration/#allowedcommands","title":"<code>allowedCommands</code>","text":"<p>A list of regular expressions that decide which commands are allowed in post-upgrade tasks.</p> Name Value type array subType string cli <code>--allowed-commands</code> env <code>RENOVATE_ALLOWED_COMMANDS</code> previouslyKnownAs <pre><code>[\"allowedPostUpgradeCommands\"]\n</code></pre> default <code>[]</code> <p>A list of regular expressions that decide which commands in <code>postUpgradeTasks</code> are allowed to run.</p> <p>If you are using a template command, the regular expression should match the final resolved value. If this list is empty then no tasks will be executed.</p> <p>For example:</p> <pre><code>{\n  \"allowedCommands\": [\"^tslint --fix$\", \"^tslint --[a-z]+$\"]\n}\n</code></pre> <p>This configuration option was formerly known as <code>allowedPostUpgradeCommands</code>.</p>"},{"location":"self-hosted-configuration/#allowedenv","title":"<code>allowedEnv</code>","text":"<p>List of allowed patterns for environment variable names in repository env config.</p> Name Value type array subType string mergeable true cli <code>--allowed-env</code> env <code>RENOVATE_ALLOWED_ENV</code> default <code>[]</code> <p>Administrators can allow users to configure custom environment variables within repo config. Only environment variables matching the list will be accepted in the <code>env</code> configuration.</p> <p>Examples:</p> renovate.json<pre><code>{\n  \"env\": {\n    \"SOME_ENV_VARIABLE\": \"some_value\",\n    \"EXTRA_ENV_NAME\": \"value\"\n  }\n}\n</code></pre> <p>The above would require <code>allowedEnv</code> to be configured similar to the following:</p> config.js<pre><code>module.exports = {\n  allowedEnv: ['SOME_ENV_*', 'EXTRA_ENV_NAME'],\n};\n</code></pre> <p><code>allowedEnv</code> values can be exact match header names, glob patterns, or regex patterns. For more details on the syntax and supported patterns, see Renovate's String Pattern Matching documentation.</p> <p>Note</p> <p><code>allowedEnv</code> constrains what a repository, and the presets it extends, may set - it does not constrain you, the self-hosted administrator.  The <code>env</code> you set in your own config is always applied, as is any <code>env</code> set by a preset you chose to <code>extends</code>, whether in your global config or in a <code>repositories[]</code> entry.  A repository can override one of your environment variables only where its name is in the <code>allowedEnv</code> allowlist.  A repository could override an allowlisted environment variable's value to the empty string, which may or may not disable it, depending on how the tool(s) that consume that environment variable respond. Where the name is not permitted by <code>allowedEnv</code>, the self-hosted administrator's value is always used.</p>"},{"location":"self-hosted-configuration/#allowedheaders","title":"<code>allowedHeaders</code>","text":"<p>List of allowed patterns for header names in repository hostRules config.</p> Name Value type array default <pre><code>[\"X-*\"]\n</code></pre> subType string cli <code>--allowed-headers</code> env <code>RENOVATE_ALLOWED_HEADERS</code> <p><code>allowedHeaders</code> can be useful when a registry uses a authentication system that's not covered by Renovate's default credential handling in <code>hostRules</code>. By default, all headers starting with \"X-\" are allowed. If needed, you can allow additional headers with the <code>allowedHeaders</code> option. Any set <code>allowedHeaders</code> overrides the default \"X-\" allowed headers, so you should include them in your config if you wish for them to remain allowed. The <code>allowedHeaders</code> config option takes an array of minimatch-compatible globs or re2-compatible regex strings. For more details on this syntax see Renovate's string pattern matching documentation.</p> <p><code>allowedHeaders</code> constrains what a repository, and the presets it extends, may set - it does not constrain you, the self-hosted administrator.</p> <p>The <code>headers</code> you set in your own <code>hostRules</code> - whether in your global config or in a <code>repositories[]</code> entry - are always applied, regardless of <code>allowedHeaders</code>, as is any <code>headers</code> set by a preset a <code>repositories[]</code> entry chose to <code>extends</code>.</p> <p>Note</p> <p>This does not (yet) extend to a preset your global config itself chooses to <code>extends</code> when no <code>repositories[]</code> entry is involved: those <code>headers</code> are still constrained by <code>allowedHeaders</code>, unlike the equivalent case for <code>env</code>.</p> <p>Where more than one of your own rules matches a request, the <code>headers</code> of the most specific rule are used, and replace those of the broader rules it matched alongside. So to keep a header away from a host that a broader rule of yours also matches, give that host a rule of its own which sets <code>headers</code>. Whichever of your <code>headers</code> that leaves for a request are then applied over any a repository set, and always with the value you set: a repository's <code>hostRules</code> - or those of a preset it extends - can neither stop one of them being sent, nor replace its value, and can only set a header name of its own where it is permitted by <code>allowedHeaders</code>.</p> <p>Examples:</p> Example header Kind of pattern Explanation <code>/X/</code> Regex Any header with <code>x</code> anywhere in the name <code>!/X/</code> Regex Any header without <code>X</code> anywhere in the name <code>X-*</code> Global pattern Any header starting with <code>X-</code> <code>X</code> Exact match glob Only the header matching exactly <code>X</code> <pre><code>{\n  \"allowedHeaders\": [\"X-Auth-Token\"],\n  \"hostRules\": [\n    {\n      \"matchHost\": \"https://domain.com/all-versions\",\n      \"headers\": {\n        \"X-Auth-Token\": \"secret\"\n      }\n    }\n  ]\n}\n</code></pre> <p>Or with custom <code>allowedHeaders</code>:</p> config.js<pre><code>module.exports = {\n  allowedHeaders: ['custom-header'],\n};\n</code></pre>"},{"location":"self-hosted-configuration/#allowedunsafeexecutions","title":"<code>allowedUnsafeExecutions</code>","text":"<p>List of possibly unsafe executions which are permitted to run. This enables global control over any implicit commands         which are run as part of a renovate run. This is similar to <code>allowedCommands</code> but is specifically used to control executions         which run automatically, and are not explicitly added in <code>postUpgradeTasks</code></p> Name Value type array subType string allowedValues <pre><code>[\"bazelModDeps\", \"goGenerate\", \"gradleWrapper\", \"mise\", \"pixi\"]\n</code></pre> cli <code>--allowed-unsafe-executions</code> env <code>RENOVATE_ALLOWED_UNSAFE_EXECUTIONS</code> default <code>[]</code> <p>This should be configured to a list of commands which are allowed to be run automatically as part of a dependency upgrade.</p> <p>This is a separate class of commands that could be executed compared to <code>allowedCommands</code>, or package managers that are controlled with <code>allowScripts=true</code> and <code>ignoreScripts=false</code>, where seemingly \"safe\" commands can result in code execution. As there is a security risk of running these commands automatically when a dependency upgrades, self hosted implementations need to explicitly declare which commands are permitted for their installation. For more details of where this may be found, see \"Trusting Repository Developers\".</p> <p>Allowed options:</p> Option Description <code>bazelModDeps</code> Allows the <code>bazel mod deps</code> when perfoming bazelisk or bazel-module updates. <code>goGenerate</code> Allows the <code>goGenerate</code> <code>postUpdateOption</code> to run after a go mod update. <code>gradleWrapper</code> Allows using <code>./gradlew</code> or <code>gradle.bat</code> when performing updates with Gradle. <code>mise</code> Allows running any <code>mise</code> commands, for instance <code>mise lock</code> when updating <code>mise.lock</code> files. <code>pixi</code> Allows running <code>pixi lock</code> when updating <code>pixi.lock</code> files (<code>pixi</code> and <code>pep621</code> managers)."},{"location":"self-hosted-configuration/#autodiscover","title":"<code>autodiscover</code>","text":"<p>Autodiscover all repositories.</p> Name Value type boolean default <code>false</code> cli <code>--autodiscover</code> env <code>RENOVATE_AUTODISCOVER</code> <p>When you enable <code>autodiscover</code>, by default, Renovate runs on every repository that the Renovate account can access. You can limit which repositories Renovate can access by using the <code>autodiscoverFilter</code> config option.</p>"},{"location":"self-hosted-configuration/#autodiscoverfilter","title":"<code>autodiscoverFilter</code>","text":"<p>Filter the list of autodiscovered repositories.</p> Name Value type array subType string cli <code>--autodiscover-filter</code> env <code>RENOVATE_AUTODISCOVER_FILTER</code> default <code>[]</code> <p>You can use this option to filter the list of repositories that the Renovate account can access through <code>autodiscover</code>. The pattern matches against the organization/repo path.</p> <p>This option supports an array of minimatch-compatible globs or RE2-compatible regex strings. For more details on this syntax see Renovate's string pattern matching documentation.</p> <p>If you set multiple filters, then the matches of each filter are added to the overall result.</p> <p>If you use an environment variable or the CLI to set the value for <code>autodiscoverFilter</code>, then commas <code>,</code> within filters are not supported. Commas will be used as delimiter for a new filter.</p> <pre><code># DO NOT use commas inside the filter if your are using env or cli variables to configure it.\nRENOVATE_AUTODISCOVER_FILTER=\"/MyOrg/{my-repo,foo-repo}\"\n\n\n# in this example you can use regex instead\nRENOVATE_AUTODISCOVER_FILTER=\"/MyOrg\\/(my|foo)-repo/\"\n</code></pre> <p>Minimatch:</p> <p>The configuration:</p> <pre><code>{\n  \"autodiscoverFilter\": [\"my-org/*\", \"!my-org/old-*\"]\n}\n</code></pre> <p>Glob patterns are case-insensitive.</p> <p>Regex:</p> <p>All text inside the start and end <code>/</code> will be treated as a regular expression. If using negations, all repositories except those who match the regex are added to the result:</p> <pre><code>{\n  \"autodiscoverFilter\": [\"/project/.*/\", \"!/project/old-/\"]\n}\n</code></pre>"},{"location":"self-hosted-configuration/#autodiscovernamespaces","title":"<code>autodiscoverNamespaces</code>","text":"<p>Filter the list of autodiscovered repositories by namespaces.</p> Name Value type array subType string supportedPlatforms forgejo, gitea, gitlab cli <code>--autodiscover-namespaces</code> env <code>RENOVATE_AUTODISCOVER_NAMESPACES</code> default <code>[]</code> <p>You can use this option to autodiscover projects in specific namespaces (a.k.a. groups/organizations/workspaces). In contrast to <code>autodiscoverFilter</code> the filtering is done by the platform and therefore more efficient.</p> <p>For example:</p> <pre><code>{\n  \"platform\": \"gitlab\",\n  \"autodiscoverNamespaces\": [\"a-group\", \"another-group/some-subgroup\"]\n}\n</code></pre> <p>Note</p> <p>On Gitea/Forgejo, you can't use <code>autodiscoverTopics</code> together with <code>autodiscoverNamespaces</code> because both platforms do not support this. Topics are preferred and <code>autodiscoverNamespaces</code> will be ignored when you configure <code>autodiscoverTopics</code> on Gitea/Forgejo.</p>"},{"location":"self-hosted-configuration/#autodiscoverprojects","title":"<code>autodiscoverProjects</code>","text":"<p>Filter the list of autodiscovered repositories by project names.</p> Name Value type array subType string supportedPlatforms bitbucket cli <code>--autodiscover-projects</code> env <code>RENOVATE_AUTODISCOVER_PROJECTS</code> default <code>[]</code> <p>You can use this option to filter the list of autodiscovered repositories by project names. This feature is useful for users who want Renovate to only work on repositories within specific projects or exclude certain repositories from being processed.</p> Example for Bitbucket<pre><code>{\n  \"platform\": \"bitbucket\",\n  \"autodiscoverProjects\": [\"a-group\", \"!another-group/some-subgroup\"]\n}\n</code></pre> <p>The <code>autodiscoverProjects</code> config option takes an array of minimatch-compatible globs or RE2-compatible regex strings. For more details on this syntax see Renovate's string pattern matching documentation.</p>"},{"location":"self-hosted-configuration/#autodiscoverrepoorder","title":"<code>autodiscoverRepoOrder</code>","text":"<p>The order method for autodiscover server side repository search.</p> Name Value type string allowedValues <pre><code>[\"asc\", \"desc\"]\n</code></pre> supportedPlatforms forgejo, gitea, gitlab cli <code>--autodiscover-repo-order</code> env <code>RENOVATE_AUTODISCOVER_REPO_ORDER</code> previouslyKnownAs <pre><code>[\"RENOVATE_X_AUTODISCOVER_REPO_ORDER\"]\n</code></pre> <p>The order method for autodiscover server side repository search.</p> <p>If multiple <code>autodiscoverTopics</code> are used resulting order will be per topic not global.</p>"},{"location":"self-hosted-configuration/#autodiscoverreposort","title":"<code>autodiscoverRepoSort</code>","text":"<p>The sort method for autodiscover server side repository search.</p> Name Value type string allowedValues <pre><code>[\"alpha\", \"created\", \"created_at\", \"updated\", \"updated_at\", \"size\", \"id\"]\n</code></pre> supportedPlatforms forgejo, gitea, gitlab cli <code>--autodiscover-repo-sort</code> env <code>RENOVATE_AUTODISCOVER_REPO_SORT</code> previouslyKnownAs <pre><code>[\"RENOVATE_X_AUTODISCOVER_REPO_SORT\"]\n</code></pre> <p>The sort method for autodiscover server side repository search.</p> <p>Platform supported sort options:</p> Platform Supported sort options GitLab <code>created_at</code>, <code>updated_at</code>, <code>id</code> Forgejo, Gitea <code>alpha</code>, <code>created</code>, <code>updated</code>, <code>size</code>, <code>id</code> <p>If multiple <code>autodiscoverTopics</code> are used resulting order will be per topic not global.</p>"},{"location":"self-hosted-configuration/#autodiscovertopics","title":"<code>autodiscoverTopics</code>","text":"<p>Filter the list of autodiscovered repositories by topics.</p> Name Value type array subType string supportedPlatforms forgejo, gitea, github, gitlab cli <code>--autodiscover-topics</code> env <code>RENOVATE_AUTODISCOVER_TOPICS</code> default <code>[]</code> <p>Some platforms allow you to add tags, or topics, to repositories and retrieve repository lists by specifying those topics. Set this variable to a list of strings, all of which will be topics for the autodiscovered repositories.</p> <p>For example:</p> <pre><code>{\n  \"autodiscoverTopics\": [\"managed-by-renovate\"]\n}\n</code></pre>"},{"location":"self-hosted-configuration/#basedir","title":"<code>baseDir</code>","text":"<p>The base directory for Renovate to store local files, including repository files and cache. If left empty, Renovate will create its own temporary directory to use.</p> Name Value type string cli <code>--base-dir</code> env <code>RENOVATE_BASE_DIR</code> default <code>null</code> <p>By default Renovate uses a temporary directory like <code>/tmp/renovate</code> to store its data. You can override this default with the <code>baseDir</code> option.</p> <p>For example:</p> <pre><code>{\n  \"baseDir\": \"/my-own-different-temporary-folder\"\n}\n</code></pre>"},{"location":"self-hosted-configuration/#bbusedevelopmentbranch","title":"<code>bbUseDevelopmentBranch</code>","text":"<p>Use the repository's development branch as the repository's default branch.</p> Name Value type boolean default <code>false</code> supportedPlatforms bitbucket inheritConfigSupport true cli <code>--bb-use-development-branch</code> env <code>RENOVATE_BB_USE_DEVELOPMENT_BRANCH</code> <p>By default, Renovate will use a repository's \"main branch\" (typically called <code>main</code> or <code>master</code>) as the \"default branch\".</p> <p>Configuring this to <code>true</code> means that Renovate will detect and use the Bitbucket development branch as defined by the repository's branching model.</p> <p>If the \"development branch\" is configured but the branch itself does not exist (e.g. it was deleted), Renovate will fall back to using the repository's \"main branch\". This fall back behavior matches that of the Bitbucket Cloud web interface.</p>"},{"location":"self-hosted-configuration/#binarysource","title":"<code>binarySource</code>","text":"<p>Controls how third-party tools like npm or Gradle are called: directly, via Docker sidecar containers, or via dynamic install.</p> Name Value type string allowedValues <pre><code>[\"global\", \"docker\", \"install\", \"hermit\"]\n</code></pre> default <code>\"install\"</code> cli <code>--binary-source</code> env <code>RENOVATE_BINARY_SOURCE</code> <p>Renovate often needs to use third-party tools in its PRs, like <code>npm</code> to update <code>package-lock.json</code> or <code>go</code> to update <code>go.sum</code>.</p> <p>Renovate supports three possible ways to access those tools:</p> <ul> <li><code>global</code>: Uses pre-installed tools, e.g. <code>npm</code> installed via <code>npm install -g npm</code>.</li> <li><code>install</code> (default): Downloads and installs tools at runtime if running in a Containerbase environment, otherwise falls back to <code>global</code></li> <li><code>hermit</code>: Uses the Hermit tool installation approach.</li> </ul> <p>If you are running Renovate in an environment where runtime download and install of tools is not possible then you should use the \"full\" image.</p> <p>If you are building your own Renovate image, e.g. by installing Renovate using <code>npm</code>, then you will need to ensure that all necessary tools are installed globally before running Renovate so that <code>binarySource=global</code> will work.</p> <p>Warning</p> <p>The usage of <code>binarySource=docker</code> is deprecated, and will be removed in the future.</p> <p>We also have a deprecated <code>docker</code> mode.</p> <p>For this to work, <code>docker</code> needs to be installed and the Docker socket available to Renovate.</p> <p>If you are using this mode, and cannot migrate to <code>binarySource=install</code>, please provide feedback in this Discussion.</p>"},{"location":"self-hosted-configuration/#cachedir","title":"<code>cacheDir</code>","text":"<p>The directory where Renovate stores its cache. If left empty, Renovate creates a subdirectory within the <code>baseDir</code>.</p> Name Value type string cli <code>--cache-dir</code> env <code>RENOVATE_CACHE_DIR</code> default <code>null</code> <p>By default Renovate stores cache data in a temporary directory like <code>/tmp/renovate/cache</code>. Use the <code>cacheDir</code> option to override this default.</p> <p>The <code>baseDir</code> and <code>cacheDir</code> option may point to different directories. You can use one directory for the repo data, and another for the cache data.</p> <p>For example:</p> <pre><code>{\n  \"baseDir\": \"/my-own-different-temporary-folder\",\n  \"cacheDir\": \"/my-own-different-cache-folder\"\n}\n</code></pre>"},{"location":"self-hosted-configuration/#cachehardttlminutes","title":"<code>cacheHardTtlMinutes</code>","text":"<p>Maximum duration in minutes to keep datasource cache entries.</p> Name Value type integer default 10080 cli <code>--cache-hard-ttl-minutes</code> env <code>RENOVATE_CACHE_HARD_TTL_MINUTES</code> <p>This experimental feature configures the physical lifetime of cache entries. Renovate internally uses two types of Time-to-Live (TTL) for its cache:</p> <ul> <li>Soft TTL (logical): When a cache entry's soft TTL expires, Renovate tries to refresh the data from the upstream source.</li> <li>Hard TTL (physical): When a cache entry's hard TTL expires, Renovate permanently removes the data from the cache.</li> </ul> <p>This two-level cache expiry is used for:</p> <ol> <li>HTTP caching with <code>ETag</code>, <code>Last-Modified</code>, and <code>If-Modified-Since</code> headers</li> <li><code>getReleases</code> and <code>getDigest</code> datasource methods, i.e. the package release data</li> </ol> <p>If an upstream request fails, Renovate can still use stale data from the cache as long as its hard TTL has not expired.</p> <p>The <code>cacheHardTtlMinutes</code> option lets you configure the hard TTL. Set this to a non-zero value, the recommended minimum is 60 (one hour).</p> <p>If the soft TTL for a cache entry is longer than the hard TTL, Renovate uses the soft TTL value for both. The soft TTL is hard-coded but can be overridden with <code>cacheTtlOverride</code>.</p> <p>Example:</p> <p>The <code>npm</code> datasource has a default soft TTL of 15 minutes. When <code>cacheHardTtlMinutes</code> is set, for example to 60, Renovate will use the stale <code>npm</code> data in the following ways:</p> <ul> <li>The <code>ETag</code> from the cached result is used in new requests. If the upstream server returns a <code>304 Not Modified</code> response, the cached data is revalidated and used.</li> <li>If an error occurs when querying the <code>npmjs</code> registry, Renovate will use the stale data from the cache as long as it has been cached for less than 60 minutes.</li> </ul>"},{"location":"self-hosted-configuration/#cacheprivatepackages","title":"<code>cachePrivatePackages</code>","text":"<p>Cache private packages in the datasource cache. This is useful for self-hosted setups</p> Name Value type boolean default <code>false</code> cli <code>--cache-private-packages</code> env <code>RENOVATE_CACHE_PRIVATE_PACKAGES</code> <p>In the self-hosted setup, use option to enable caching of private packages to improve performance.</p>"},{"location":"self-hosted-configuration/#cachettloverride","title":"<code>cacheTtlOverride</code>","text":"<p>An object that contains cache namespace TTL override values.</p> Name Value type object additionalProperties <pre><code>{\"type\": \"number\"}\n</code></pre> cli <code>--cache-ttl-override</code> env <code>RENOVATE_CACHE_TTL_OVERRIDE</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>Use this key-value map to override the default package cache TTL values for a specific namespace. This object contains pairs of namespaces and their corresponding TTL values in minutes.</p> <p>Internally, Renovate has the notion of soft TTL and hard TTL. In some contexts they are equal, but when they differ, this option overrides the soft TTL. See <code>cacheHardTtlMinutes</code> for more information.</p> <p>You can use:</p> <ul> <li>Exact matches: Direct namespace names</li> <li>Glob patterns: Wildcards like <code>datasource-*</code> or <code>*</code></li> <li>Regex patterns: Regular expressions like <code>/^datasource-/</code></li> </ul> <p>Priority order:</p> <ol> <li>Exact namespace matches take highest priority</li> <li>If no exact match, the longest (most specific) matching pattern wins</li> </ol> <p>Example:</p> <pre><code>{\n  \"cacheTtlOverride\": {\n    \"datasource-rubygems\": 120,\n    \"datasource-*\": 60,\n    \"datasource-{crate,go}\": 90,\n    \"/^changelog-/\": 45,\n    \"*\": 30\n  }\n}\n</code></pre> <p>In this example:</p> <ul> <li><code>datasource-rubygems</code> gets 120 minutes (exact match - highest priority)</li> <li><code>datasource-crate</code> and <code>datasource-go</code> get 90 minutes (matches <code>datasource-{crate,go}</code> - longest pattern)</li> <li><code>datasource-hex</code> gets 60 minutes (matches <code>datasource-*</code> - shorter pattern)</li> <li><code>changelog-github-release</code> gets 45 minutes (matches <code>/^changelog-/</code> regex)</li> <li><code>preset</code> gets 30 minutes (matches <code>*</code> wildcard - shortest pattern)</li> </ul> <p>Namespaces of special interest follow the pattern <code>datasource-{datasource}</code>. When releases for a datasource are fetched, they are stored in this namespace. Whether caching is enabled for a particular datasource depends on whether it's private or caching is forced with <code>cachePrivatePackages</code>.</p> <p>Other valid cache namespaces are as follows:</p> <ul> <li><code>changelog-bitbucket-notes@v2</code></li> <li><code>changelog-bitbucket-release</code></li> <li><code>changelog-bitbucket-server-notes@v2</code></li> <li><code>changelog-bitbucket-server-release</code></li> <li><code>changelog-forgejo-notes@v2</code></li> <li><code>changelog-forgejo-release</code></li> <li><code>changelog-gitea-notes@v2</code></li> <li><code>changelog-gitea-release</code></li> <li><code>changelog-github-notes@v2</code></li> <li><code>changelog-github-release</code></li> <li><code>changelog-gitlab-notes@v2</code></li> <li><code>changelog-gitlab-release</code></li> <li><code>datasource-apk</code></li> <li><code>datasource-artifactory</code></li> <li><code>datasource-aws-eks-addon</code></li> <li><code>datasource-aws-machine-image</code></li> <li><code>datasource-aws-rds</code></li> <li><code>datasource-azure-bicep-resource</code></li> <li><code>datasource-azure-pipelines-tasks</code></li> <li><code>datasource-azure-tags</code></li> <li><code>datasource-bazel</code></li> <li><code>datasource-bitbucket-server-tags</code></li> <li><code>datasource-bitbucket-tags</code></li> <li><code>datasource-bitrise</code></li> <li><code>datasource-buildpacks-registry</code></li> <li><code>datasource-cdnjs</code></li> <li><code>datasource-conan</code></li> <li><code>datasource-conda</code></li> <li><code>datasource-cpan</code></li> <li><code>datasource-crate</code></li> <li><code>datasource-crate-metadata</code></li> <li><code>datasource-crate-registry-api</code></li> <li><code>datasource-deb</code></li> <li><code>datasource-deno</code></li> <li><code>datasource-docker-architecture</code></li> <li><code>datasource-docker-digest</code></li> <li><code>datasource-docker-hub-cache</code></li> <li><code>datasource-docker-hub-tags</code></li> <li><code>datasource-docker-imageconfig</code></li> <li><code>datasource-docker-labels</code></li> <li><code>datasource-docker-releases-v2</code></li> <li><code>datasource-docker-tags</code></li> <li><code>datasource-dotnet-version</code></li> <li><code>datasource-elm-package</code></li> <li><code>datasource-endoflife-date</code></li> <li><code>datasource-forgejo-releases</code></li> <li><code>datasource-forgejo-tags</code></li> <li><code>datasource-galaxy</code></li> <li><code>datasource-galaxy-collection</code></li> <li><code>datasource-git</code></li> <li><code>datasource-git-refs</code></li> <li><code>datasource-git-tags</code></li> <li><code>datasource-gitea-releases</code></li> <li><code>datasource-gitea-tags</code></li> <li><code>datasource-github-digest</code></li> <li><code>datasource-github-release-attachments</code></li> <li><code>datasource-gitlab-packages</code></li> <li><code>datasource-gitlab-releases</code></li> <li><code>datasource-gitlab-tags</code></li> <li><code>datasource-glasskube-packages</code></li> <li><code>datasource-go</code></li> <li><code>datasource-go-direct</code></li> <li><code>datasource-go-proxy</code></li> <li><code>datasource-go-proxy-timestamps</code></li> <li><code>datasource-golang-version</code></li> <li><code>datasource-gradle-version</code></li> <li><code>datasource-helm</code></li> <li><code>datasource-hermit</code></li> <li><code>datasource-hex</code></li> <li><code>datasource-hexpm-bob</code></li> <li><code>datasource-java-version</code></li> <li><code>datasource-jenkins-plugins</code></li> <li><code>datasource-jsr</code></li> <li><code>datasource-julia-general-metadata</code></li> <li><code>datasource-maven:cache-provider</code></li> <li><code>datasource-maven:metadata-not-found</code></li> <li><code>datasource-maven:pom-cache-provider</code></li> <li><code>datasource-maven:postprocess-reject</code></li> <li><code>datasource-nextcloud</code></li> <li><code>datasource-node-version</code></li> <li><code>datasource-npm:cache-provider</code></li> <li><code>datasource-nuget-v3</code></li> <li><code>datasource-orb</code></li> <li><code>datasource-packagist</code></li> <li><code>datasource-pod</code></li> <li><code>datasource-python-version</code></li> <li><code>datasource-repology</code></li> <li><code>datasource-rpm</code></li> <li><code>datasource-ruby-version</code></li> <li><code>datasource-rubygems</code></li> <li><code>datasource-rust-version</code></li> <li><code>datasource-sbt-package</code></li> <li><code>datasource-terraform</code></li> <li><code>datasource-terraform-module</code></li> <li><code>datasource-terraform-provider</code></li> <li><code>datasource-typst:cache-provider</code></li> <li><code>datasource-typst:registry-releases</code></li> <li><code>datasource-unity3d</code></li> <li><code>datasource-unity3d-packages</code></li> <li><code>github-branches-datasource-v1</code></li> <li><code>github-releases-datasource-v2</code></li> <li><code>github-tags-datasource-v2</code></li> <li><code>merge-confidence</code></li> <li><code>preset</code></li> <li><code>terraform-provider-hash</code></li> <li><code>url-sha256</code></li> </ul>"},{"location":"self-hosted-configuration/#checkedbranches","title":"<code>checkedBranches</code>","text":"<p>A list of branch names to mark for creation or rebasing as if it was selected in the Dependency Dashboard issue.</p> Name Value type array subType string cli <code>--checked-branches</code> env <code>RENOVATE_CHECKED_BRANCHES</code> default <code>[]</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>This array will allow you to set the names of the branches you want to rebase/create, as if you selected their checkboxes in the Dependency Dashboard issue.</p> <p>Warning</p> <p>When using <code>checkedBranches</code>, Renovate treats this as you, the self-hosted administrator, consenting to any updates the given branch introduces. This can lead to branches that have not yet passed their <code>internalChecksFilter</code> / <code>minimumReleaseAge</code> to be created.  There is not currently a way to control this.  </p> <p>It has been designed with the intention of being run on one repository, in a one-off manner, e.g. to \"force\" the rebase of a known existing branch. It is highly unlikely that you should ever need to add this to your permanent global config.</p> <p>Example: <code>renovate --checked-branches=renovate/chalk-4.x renovate-reproductions/checked</code> will rebase the <code>renovate/chalk-4.x</code> branch in the <code>renovate-reproductions/checked</code> repository.</p>"},{"location":"self-hosted-configuration/#configfilenames","title":"<code>configFileNames</code>","text":"<p>List of filenames where repository config will be stored.</p> Name Value type array subType string inheritConfigSupport true cli <code>--config-file-names</code> env <code>RENOVATE_CONFIG_FILE_NAMES</code> default <code>[]</code> <p>A list of filenames where repository config can be stored.</p> <p>This list doesn't replace the existing list of default config filenames used internally, instead these filenames are prepended to the list.</p> <p>Example:</p> <pre><code>{\n  \"configFileNames\": [\"myrenovate.json\"]\n}\n</code></pre> <p>Note</p> <p>If you want renovate to use a custom filename for the onboarding branch you also need to change the <code>onboardingConfigFileName</code>.</p>"},{"location":"self-hosted-configuration/#configvalidationerror","title":"<code>configValidationError</code>","text":"<p>If enabled, config validation errors will be reported as errors instead of warnings, and Renovate will exit with a non-zero exit code.</p> Name Value type boolean default <code>false</code> inheritConfigSupport true cli <code>--config-validation-error</code> env <code>RENOVATE_CONFIG_VALIDATION_ERROR</code> <p>If enabled, config validation errors will be reported as errors instead of warnings, and Renovate will exit with a non-zero exit code.</p> <p>This applies to the repo configuration and any resolved <code>extends</code> presets - any validation issues in that resolved configuration will also abort the repository run. Leave this disabled if your repositories extend presets you do not control, as a problem introduced by a preset would then stop Renovate from running against your repository.</p> <p>Note</p> <p>Violations of sensitive configuration options, like those governed by <code>allowedEnv</code> and <code>allowedHeaders</code>, will always abort the repository, regardless of the <code>configValidationError</code> setting.</p>"},{"location":"self-hosted-configuration/#containerbasedir","title":"<code>containerbaseDir</code>","text":"<p>The directory where Renovate stores its containerbase cache. If left empty, Renovate creates a subdirectory within the <code>cacheDir</code>.</p> Name Value type string cli <code>--containerbase-dir</code> env <code>RENOVATE_CONTAINERBASE_DIR</code> default <code>null</code> <p>This directory is used to cache downloads when <code>binarySource=docker</code> or <code>binarySource=install</code>.</p> <p>Use this option if you need such downloads to be stored outside of Renovate's regular cache directory (<code>cacheDir</code>).</p>"},{"location":"self-hosted-configuration/#customenvvariables","title":"<code>customEnvVariables</code>","text":"<p>Custom environment variables for child processes and sidecar Docker containers.</p> Name Value type object additionalProperties <pre><code>{\"type\": \"string\"}\n</code></pre> cli <code>--custom-env-variables</code> env <code>RENOVATE_CUSTOM_ENV_VARIABLES</code> <p>This configuration will be applied after all other environment variables so you can use it to override defaults.</p> <p>Warning</p> <p>Do not configure any secret values directly into <code>customEnvVariables</code> because they may be logged to stdout. Instead, configure them into <code>secrets</code> first so that they will be redacted in logs.</p> <p>If configuring secrets in to <code>customEnvVariables</code>, take this approach:</p> <pre><code>{\n  secrets: {\n    SECRET_TOKEN: process.env.SECRET_TOKEN,\n  },\n  customEnvVariables: {\n    SECRET_TOKEN: '{{ secrets.SECRET_TOKEN }}',\n  },\n}\n</code></pre> <p>The above configuration approach will mean the values are redacted in logs like in the following example:</p> <pre><code>         \"secrets\": {\"SECRET_TOKEN\": \"***********\"},\n         \"customEnvVariables\": {\"SECRET_TOKEN\": \"{{ secrets.SECRET_TOKEN }}\"},\n</code></pre>"},{"location":"self-hosted-configuration/#deleteadditionalconfigfile","title":"<code>deleteAdditionalConfigFile</code>","text":"<p>If set to <code>true</code>, Renovate tries to delete the additional self-hosted config file after reading it.</p> Name Value type boolean default <code>false</code> cli <code>--delete-additional-config-file</code> env <code>RENOVATE_DELETE_ADDITIONAL_CONFIG_FILE</code> <p>If set to <code>true</code> Renovate tries to delete the additional self-hosted config file after reading it.</p> <p>The process that runs Renovate must have the correct permissions to delete the additional config file.</p> <p>Tip</p> <p>You can tell Renovate where to find your config file with the <code>RENOVATE_ADDITONAL_CONFIG_FILE</code> environment variable.</p>"},{"location":"self-hosted-configuration/#deleteconfigfile","title":"<code>deleteConfigFile</code>","text":"<p>If set to <code>true</code>, Renovate tries to delete the self-hosted config file after reading it.</p> Name Value type boolean default <code>false</code> cli <code>--delete-config-file</code> env <code>RENOVATE_DELETE_CONFIG_FILE</code> previouslyKnownAs <pre><code>[\"RENOVATE_X_DELETE_CONFIG_FILE\"]\n</code></pre> <p>If set to <code>true</code> Renovate tries to delete the self-hosted config file after reading it.</p> <p>The process that runs Renovate must have the correct permissions to delete the config file.</p> <p>Tip</p> <p>You can tell Renovate where to find your config file with the <code>RENOVATE_CONFIG_FILE</code> environment variable.</p>"},{"location":"self-hosted-configuration/#detectglobalmanagerconfig","title":"<code>detectGlobalManagerConfig</code>","text":"<p>If <code>true</code>, Renovate tries to detect global manager configuration from the file system.</p> Name Value type boolean default <code>false</code> cli <code>--detect-global-manager-config</code> env <code>RENOVATE_DETECT_GLOBAL_MANAGER_CONFIG</code> <p>The purpose of this config option is to allow you (as an administrator) to configure manager-specific files such as a global <code>.npmrc</code> file, instead of configuring it in Renovate config.</p> <p>This config option is disabled by default because it may prove surprising or undesirable for some users who don't expect Renovate to go into their home directory and import registry or credential information.</p> <p>Currently this config option is supported for the <code>npm</code> manager only - specifically the <code>~/.npmrc</code> file. If found, it will be imported into <code>config.npmrc</code> with <code>config.npmrcMerge</code> set to <code>true</code>.</p>"},{"location":"self-hosted-configuration/#detecthostrulesfromenv","title":"<code>detectHostRulesFromEnv</code>","text":"<p>If <code>true</code>, Renovate tries to detect host rules from environment variables.</p> Name Value type boolean default <code>false</code> cli <code>--detect-host-rules-from-env</code> env <code>RENOVATE_DETECT_HOST_RULES_FROM_ENV</code> <p>The format of the environment variables must follow:</p> <ul> <li><code>RENOVATE_</code> prefix (at the moment this prefix optional, but usage of prefix will be required in the future)</li> <li>Datasource name (e.g. <code>NPM</code>, <code>PYPI</code>) or Platform name (only <code>GITHUB</code>)</li> <li>Underscore (<code>_</code>)</li> <li><code>matchHost</code> (note: only domains or subdomains are supported - not <code>https://</code> URLs or anything with forward slashes)</li> <li>Underscore (<code>_</code>)</li> <li>Field name (<code>TOKEN</code>, <code>USERNAME</code>, <code>PASSWORD</code>, <code>HTTPSPRIVATEKEY</code>, <code>HTTPSCERTIFICATE</code>, <code>HTTPSCERTIFICATEAUTHORITY</code>)</li> </ul> <p>Hyphens (<code>-</code>) in datasource or host name must be replaced with double underscores (<code>__</code>). Periods (<code>.</code>) in host names must be replaced with a single underscore (<code>_</code>).</p> <p>Note</p> <p>You can't use these prefixes with the <code>detectHostRulesFromEnv</code> config option: <code>npm_config_</code>, <code>npm_lifecycle_</code>, <code>npm_package_</code>. In addition, platform host rules will only be picked up when <code>matchHost</code> is supplied.</p>"},{"location":"self-hosted-configuration/#npmjs-registry-token-example","title":"npmjs registry token example","text":"<p><code>NPM_REGISTRY_NPMJS_ORG_TOKEN=abc123</code>:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"hostType\": \"npm\",\n      \"matchHost\": \"registry.npmjs.org\",\n      \"token\": \"abc123\"\n    }\n  ]\n}\n</code></pre>"},{"location":"self-hosted-configuration/#gitlab-tags-usernamepassword-example","title":"GitLab Tags username/password example","text":"<p><code>GITLAB__TAGS_CODE__HOST_COMPANY_COM_USERNAME=bot GITLAB__TAGS_CODE__HOST_COMPANY_COM_PASSWORD=botpass123</code>:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"hostType\": \"gitlab-tags\",\n      \"matchHost\": \"code-host.company.com\",\n      \"username\": \"bot\",\n      \"password\": \"botpass123\"\n    }\n  ]\n}\n</code></pre>"},{"location":"self-hosted-configuration/#datasource-and-credentials-only","title":"Datasource and credentials only","text":"<p>You can skip the host part, and use only the datasource and credentials.</p> <p><code>DOCKER_USERNAME=bot DOCKER_PASSWORD=botpass123</code>:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"hostType\": \"docker\",\n      \"username\": \"bot\",\n      \"password\": \"botpass123\"\n    }\n  ]\n}\n</code></pre>"},{"location":"self-hosted-configuration/#platform-with-https-authentication-options","title":"Platform with https authentication options","text":"<p><code>GITHUB_SOME_GITHUB__ENTERPRISE_HOST_HTTPSCERTIFICATE=certificate GITHUB_SOME_GITHUB__ENTERPRISE_HOST_HTTPSPRIVATEKEY=private-key GITHUB_SOME_GITHUB__ENTERPRISE_HOST_HTTPSCERTIFICATEAUTHORITY=certificate-authority</code>:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"hostType\": \"github\",\n      \"matchHost\": \"some.github-enterprise.host\",\n      \"httpsPrivateKey\": \"private-key\",\n      \"httpsCertificate\": \"certificate\",\n      \"httpsCertificateAuthority\": \"certificate-authority\"\n    }\n  ]\n}\n</code></pre>"},{"location":"self-hosted-configuration/#dockerchildprefix","title":"<code>dockerChildPrefix</code>","text":"<p>Change this value to add a prefix to the Renovate Docker sidecar container names and labels.</p> Name Value type string default <code>\"renovate_\"</code> cli <code>--docker-child-prefix</code> env <code>RENOVATE_DOCKER_CHILD_PREFIX</code> <p>This feature has been deprecated</p> <p>The usage of <code>binarySource=docker</code> is deprecated, and will be removed in the future</p> <p>Adds a custom prefix to the default Renovate sidecar Docker containers name and label.</p> <p>For example, if you set <code>dockerChildPrefix=myprefix_</code> then the final container created from the <code>ghcr.io/renovatebot/base-image</code> is:</p> <ul> <li>called <code>myprefix_sidecar</code> instead of <code>renovate_sidecar</code></li> <li>labeled <code>myprefix_child</code> instead of <code>renovate_child</code></li> </ul> <p>Note</p> <p>Dangling containers are only removed when Renovate runs again with the same prefix.</p>"},{"location":"self-hosted-configuration/#dockerclioptions","title":"<code>dockerCliOptions</code>","text":"<p>Pass CLI flags to <code>docker run</code> command when <code>binarySource=docker</code>.</p> Name Value type string cli <code>--docker-cli-options</code> env <code>RENOVATE_DOCKER_CLI_OPTIONS</code> default <code>null</code> <p>This feature has been deprecated</p> <p>The usage of <code>binarySource=docker</code> is deprecated, and will be removed in the future</p> <p>You can use <code>dockerCliOptions</code> to pass Docker CLI options to Renovate's sidecar Docker containers.</p> <p>For example, <code>{\"dockerCliOptions\": \"--memory=4g\"}</code> will add a CLI flag to the <code>docker run</code> command that limits the amount of memory Renovate's sidecar Docker container can use to 4 gigabytes.</p> <p>Read the Docker Docs, configure runtime resource constraints to learn more.</p>"},{"location":"self-hosted-configuration/#dockermaxpages","title":"<code>dockerMaxPages</code>","text":"<p>By default, Renovate fetches up to 20 pages of Docker tags from registries. But you can set your own limit with this config option.</p> Name Value type integer default 20 cli <code>--docker-max-pages</code> env <code>RENOVATE_DOCKER_MAX_PAGES</code> previouslyKnownAs <pre><code>[\"RENOVATE_X_DOCKER_MAX_PAGES\"]\n</code></pre> <p>If set to an positive integer, Renovate will use this value as the maximum page number. Setting a different limit is useful for registries that ignore the <code>n</code> parameter in Renovate's query string and thus only return 50 tags per page.</p>"},{"location":"self-hosted-configuration/#dockersidecarimage","title":"<code>dockerSidecarImage</code>","text":"<p>Change this value to override the default Renovate sidecar image.</p> Name Value type string default <code>\"ghcr.io/renovatebot/base-image:13.155.0\"</code> cli <code>--docker-sidecar-image</code> env <code>RENOVATE_DOCKER_SIDECAR_IMAGE</code> <p>This feature has been deprecated</p> <p>The usage of <code>binarySource=docker</code> is deprecated, and will be removed in the future</p> <p>By default Renovate pulls the sidecar Docker containers from <code>ghcr.io/renovatebot/base-image</code>. You can use the <code>dockerSidecarImage</code> option to override this default.</p> <p>Say you want to pull a custom image from <code>ghcr.io/your_company/sidecar</code>. You would put this in your configuration file:</p> <pre><code>{\n  \"dockerSidecarImage\": \"ghcr.io/your_company/sidecar\"\n}\n</code></pre> <p>Now when Renovate pulls a new <code>sidecar</code> image, the final image is <code>ghcr.io/your_company/sidecar</code> instead of <code>ghcr.io/renovatebot/base-image</code>.</p>"},{"location":"self-hosted-configuration/#dockeruser","title":"<code>dockerUser</code>","text":"<p>Set the <code>UID</code> and <code>GID</code> for Docker-based binaries if you use <code>binarySource=docker</code>.</p> Name Value type string default <code>\"12021\"</code> cli <code>--docker-user</code> env <code>RENOVATE_DOCKER_USER</code> <p>This feature has been deprecated</p> <p>The usage of <code>binarySource=docker</code> is deprecated, and will be removed in the future</p> <p>Override default user and group used by Docker-based tools. The user-id (UID) and group-id (GID) must match the user that executes Renovate.</p> <p>Read the Docker run reference for more information on user and group syntax. Set this to <code>1001:1002</code> to use UID 1001 and GID 1002.</p> Setting UID to 1001 and GID to 1002<pre><code>{\n  \"dockerUser\": \"1001:1002\"\n}\n</code></pre> <p>If you use <code>binarySource=docker|install</code> read the section below.</p> <p>If you need to change the Docker user please make sure to use the root (<code>0</code>) group, otherwise you'll get in trouble with missing file and directory permissions. Like this:</p> <pre><code>&gt; export RENOVATE_DOCKER_USER=\"$(id -u):0\" # 500:0 (username:root)\n</code></pre>"},{"location":"self-hosted-configuration/#dryrun","title":"<code>dryRun</code>","text":"<p>If enabled, perform a dry run by logging messages instead of creating/updating/deleting branches and PRs.</p> Name Value type string allowedValues <pre><code>[\"extract\", \"lookup\", \"full\"]\n</code></pre> cli <code>--dry-run</code> env <code>RENOVATE_DRY_RUN</code> <p>Use <code>dryRun</code> to preview the behavior of Renovate in logs, without making any changes to the repository files.</p> <p>You can choose from the following behaviors for the <code>dryRun</code> config option:</p> <ul> <li><code>null</code>: Default behavior - Performs a regular Renovate run including creating/updating/deleting branches and PRs</li> <li><code>\"extract\"</code>: Performs a very quick package file scan to identify the extracted dependencies</li> <li><code>\"lookup\"</code>: Performs a package file scan to identify the extracted dependencies and updates available</li> <li><code>\"full\"</code>: Performs a dry run by logging messages instead of creating/updating/deleting branches and PRs</li> </ul> <p>Information provided mainly in debug log level.</p>"},{"location":"self-hosted-configuration/#encryptedwarning","title":"<code>encryptedWarning</code>","text":"<p>Warning text to use if encrypted config is found.</p> Name Value type string cli <code>--encrypted-warning</code> env <code>RENOVATE_ENCRYPTED_WARNING</code> default <code>null</code> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>Use this if you want to stop supporting <code>encrypted</code> configuration capabilities but want to warn users first to migrate.</p> <p>If set to a string value, Renovate will log warnings with the <code>encryptedWarning</code> text, meaning the message will be visible to users such as on the Dependency Dashboard.</p>"},{"location":"self-hosted-configuration/#endpoint","title":"<code>endpoint</code>","text":"<p>Custom endpoint to use.</p> Name Value type string cli <code>--endpoint</code> env <code>RENOVATE_ENDPOINT</code>"},{"location":"self-hosted-configuration/#executiontimeout","title":"<code>executionTimeout</code>","text":"<p>Default execution timeout in minutes for child processes Renovate creates.</p> Name Value type integer default 15 cli <code>--execution-timeout</code> env <code>RENOVATE_EXECUTION_TIMEOUT</code> <p>Default execution timeout in minutes for child processes Renovate creates. If this option is not set, Renovate will fallback to 15 minutes.</p>"},{"location":"self-hosted-configuration/#exitcodeforerrors","title":"<code>exitCodeForErrors</code>","text":"<p>Exit with an error-specific exit code when a repository run ends in a known error state.</p> Name Value type boolean default <code>false</code> cli <code>--exit-code-for-errors</code> env <code>RENOVATE_EXIT_CODE_FOR_ERRORS</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>Set <code>exitCodeForErrors</code> to <code>true</code> to exit with a code that says which kind of error ended the repository run. The groups are the exported error constants in <code>lib/constants/error-messages.ts</code>:</p> Exit code Repository result <code>0</code> Success, or a <code>RepositoryErrors</code> result <code>1</code> Renovate logged an error, but no repository ended in one of the states below <code>2</code> Renovate could not parse its own configuration <code>3</code> <code>SystemErrors</code> <code>4</code> <code>PlatformErrors</code> <code>5</code> <code>ConfigErrors</code> <code>6</code> <code>TemporaryErrors</code> <code>7</code> External host error, lockfile error, or missing API credentials <code>8</code> Unknown error <p>Codes <code>3</code> to <code>8</code> take precedence over <code>1</code>, so a repository that ends in one of those states sets the exit code even if errors were logged as well. Renovate still exits <code>1</code> when no repository ended in an error state but something was logged at error level, such as a failed changelog fetch during an otherwise successful run.</p> <p>The results in <code>RepositoryErrors</code> map to <code>0</code>, because they mean the repository is disabled, archived, empty and so on, and not that the run failed.</p> <p>When Renovate runs against multiple repositories, the exit code comes from the first repository that ended in an error state. Renovate still processes the remaining repositories.</p> <p>The exit code a repository maps to is always logged in the <code>Repository finished</code> message, even when this option is disabled.</p>"},{"location":"self-hosted-configuration/#exposeallenv","title":"<code>exposeAllEnv</code>","text":"<p>Set this to <code>true</code> to allow passing of all environment variables to package managers.</p> Name Value type boolean default <code>false</code> cli <code>--expose-all-env</code> env <code>RENOVATE_EXPOSE_ALL_ENV</code> previouslyKnownAs <pre><code>[\"exposeEnv\"]\n</code></pre> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>To keep you safe, Renovate only passes a limited set of environment variables to package managers. If you must expose all environment variables to package managers, you can set this option to <code>true</code>.</p> <p>Warning</p> <p>Always consider the security implications of using <code>exposeAllEnv</code>! Secrets and other confidential information stored in environment variables could be leaked by a malicious script, that enumerates all environment variables.</p> <p>Set <code>exposeAllEnv</code> to <code>true</code> only if you have reviewed, and trust, the repositories which Renovate runs against. Alternatively, you can use the <code>customEnvVariables</code> config option to handpick a set of variables you need to expose.</p> <p>Setting this to <code>true</code> also allows for variable substitution in <code>.npmrc</code> files.</p>"},{"location":"self-hosted-configuration/#force","title":"<code>force</code>","text":"<p>Any configuration set in this object will force override existing settings.</p> Name Value type object mergeable true env <code>RENOVATE_FORCE</code> <p>This object is used as a \"force override\" when you need to make sure certain configuration overrides whatever is configured in the repository. For example, forcing a null (no) schedule to make sure Renovate raises PRs on a run even if the repository itself or its preset defines a schedule that's currently inactive.</p> <p>In practice, it is implemented by converting the <code>force</code> configuration into a <code>packageRule</code> that matches all packages.</p>"},{"location":"self-hosted-configuration/#forcecli","title":"<code>forceCli</code>","text":"<p>Decides if CLI configuration options are moved to the <code>force</code> config section.</p> Name Value type boolean default <code>true</code> cli <code>--force-cli</code> env <code>RENOVATE_FORCE_CLI</code> <p>This is set to <code>true</code> by default, meaning that any settings (such as <code>schedule</code>) take maximum priority even against custom settings existing inside individual repositories. It will also override any settings in <code>packageRules</code>.</p>"},{"location":"self-hosted-configuration/#forkcreation","title":"<code>forkCreation</code>","text":"<p>Whether to create forks as needed at runtime when running in \"fork mode\".</p> Name Value type boolean supportedPlatforms github default <code>true</code> cli <code>--fork-creation</code> env <code>RENOVATE_FORK_CREATION</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>This configuration lets you disable the runtime forking of repositories when running in \"fork mode\".</p> <p>Usually you will need to keep this as the default <code>true</code>, and only set to <code>false</code> if you have some out of band process to handle the creation of forks.</p>"},{"location":"self-hosted-configuration/#forkorg","title":"<code>forkOrg</code>","text":"<p>The preferred organization to create or find forked repositories, when in fork mode.</p> Name Value type string supportedPlatforms github cli <code>--fork-org</code> env <code>RENOVATE_FORK_ORG</code> default <code>null</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>This configuration option lets you choose an organization you want repositories forked into when \"fork mode\" is enabled. It must be set to a GitHub Organization name and not a GitHub user account. When set, \"allow edits by maintainers\" will be false for PRs because GitHub does not allow this setting for organizations.</p> <p>This can be used if you're migrating from user-based forks to organization-based forks.</p> <p>If you've set a <code>forkOrg</code> then Renovate will:</p> <ol> <li>Check if a fork exists in the preferred organization before checking it exists in the fork user's account</li> <li>If no fork exists: it will be created in the <code>forkOrg</code>, not the user account</li> </ol>"},{"location":"self-hosted-configuration/#forktoken","title":"<code>forkToken</code>","text":"<p>Set a personal access token here to enable \"fork mode\".</p> Name Value type string supportedPlatforms github cli <code>--fork-token</code> env <code>RENOVATE_FORK_TOKEN</code> default <code>null</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>If this value is configured then Renovate:</p> <ul> <li>forks the target repository into the account that owns the PAT</li> <li>keep this fork's default branch up-to-date with the target</li> </ul> <p>Renovate will then create branches on the fork and opens Pull Requests on the parent repository.</p> <p>Note</p> <p>Forked repositories will always be skipped when <code>forkToken</code> is set, even if <code>includeForks</code> is true.</p>"},{"location":"self-hosted-configuration/#gitnoverify","title":"<code>gitNoVerify</code>","text":"<p>Which Git commands will be run with the <code>--no-verify</code> option.</p> Name Value type array subType string allowedValues <pre><code>[\"commit\", \"push\"]\n</code></pre> default <pre><code>[\"commit\", \"push\"]\n</code></pre> cli <code>--git-no-verify</code> env <code>RENOVATE_GIT_NO_VERIFY</code> <p>Controls when Renovate passes the <code>--no-verify</code> flag to <code>git</code>. The flag can be passed to <code>git commit</code> and/or <code>git push</code>. Read the documentation for git commit --no-verify and git push --no-verify to learn exactly what each flag does. To learn more about Git hooks, read the Pro Git 2 book, section on Git Hooks.</p>"},{"location":"self-hosted-configuration/#gitprivatekey","title":"<code>gitPrivateKey</code>","text":"<p>PGP key to use for signing Git commits.</p> Name Value type string env <code>RENOVATE_GIT_PRIVATE_KEY</code> default <code>null</code> <p>This is a private PGP or SSH key for signing Git commits.</p> <p>For PGP, it should be an armored private key, so the type you get from running <code>gpg --export-secret-keys --armor 92066A17F0D1707B4E96863955FEF5171C45FAE5 &gt; private.key</code>. Replace the newlines with <code>\\n</code> before adding the resulting single-line value to your self-hosted config.</p> <p>Note</p> <p>The private key can't be protected with a passphrase if running in a headless environment. Renovate will not be able to handle entering the passphrase.</p> <p>It will be loaded lazily. Before the first commit in a repository, Renovate will:</p> <ol> <li>Run <code>gpg import</code> (if you haven't before) when using PGP</li> <li>Run <code>git config user.signingkey</code>, <code>git config commit.gpgsign true</code> and <code>git config gpg.format</code></li> </ol> <p>The <code>git</code> commands are run locally in the cloned repo instead of globally. This reduces the chance of unintended consequences with global Git configs on shared systems.</p>"},{"location":"self-hosted-configuration/#gitprivatekeypassphrase","title":"<code>gitPrivateKeyPassphrase</code>","text":"<p>Passphrase for the <code>gitPrivateKey</code></p> Name Value type string env <code>RENOVATE_GIT_PRIVATE_KEY_PASSPHRASE</code> default <code>null</code> <p>Passphrase for the <code>gitPrivateKey</code> when the private key is protected with a passphrase.</p> <p>Currently supported for SSH keys only. When provided, Renovate will automatically decrypt the SSH private key during the signing process.</p> <p>Note</p> <p>Passphrases are not yet supported for GPG keys. If you provide a passphrase for a GPG key, it will be ignored and a warning will be logged.</p> <p>Warning</p> <p>Store this value securely as it provides access to decrypt your private key. Consider using environment variables or secure secret management systems rather than storing it in plain text configuration files.</p>"},{"location":"self-hosted-configuration/#gittimeout","title":"<code>gitTimeout</code>","text":"<p>Configure the timeout with a number of milliseconds to wait for a Git task.</p> Name Value type integer default 0 cli <code>--git-timeout</code> env <code>RENOVATE_GIT_TIMEOUT</code> <p>To handle the case where the underlying Git processes appear to hang, configure the timeout with the number of milliseconds to wait after last received content on either <code>stdOut</code> or <code>stdErr</code> streams before sending a <code>SIGINT</code> kill message.</p>"},{"location":"self-hosted-configuration/#giturl","title":"<code>gitUrl</code>","text":"<p>Overrides the default resolution for Git remote, e.g. to switch GitLab from HTTPS to SSH-based.</p> Name Value type string supportedPlatforms bitbucket-server, forgejo, gerrit, gitea, github, gitlab, scm-manager allowedValues <pre><code>[\"default\", \"ssh\", \"endpoint\"]\n</code></pre> default <code>\"default\"</code> cli <code>--git-url</code> env <code>RENOVATE_GIT_URL</code> <p>Override the default resolution for Git remote, e.g. to switch GitLab from HTTPS to SSH-based.</p> <p>Possible values:</p> <ul> <li><code>default</code>: use HTTPS URLs provided by the platform for Git</li> <li><code>ssh</code>: use SSH URLs provided by the platform for Git</li> <li><code>endpoint</code>: ignore URLs provided by the platform and use the configured endpoint directly</li> </ul> <p>Note</p> <p>On GitHub, <code>default</code> and <code>endpoint</code> are equivalent: both build the HTTPS URL from the configured endpoint with credentials embedded. <code>ssh</code> uses the repository's <code>sshUrl</code> and authenticates via SSH key. In fork mode (<code>forkToken</code> set with <code>forkCreation</code>), <code>ssh</code> applies to both the fork's working URL and the upstream URL.</p>"},{"location":"self-hosted-configuration/#githubtokenwarn","title":"<code>githubTokenWarn</code>","text":"<p>Display warnings about GitHub token not being set.</p> Name Value type boolean default <code>true</code> cli <code>--github-token-warn</code> env <code>RENOVATE_GITHUB_TOKEN_WARN</code> <p>By default, Renovate logs and displays a warning when the <code>RENOVATE_GITHUB_COM_TOKEN</code> is not set. By setting <code>githubTokenWarn</code> to <code>false</code>, Renovate suppresses these warnings on Pull Requests, etc. Disabling the warning is helpful for self-hosted environments that can't access the <code>github.com</code> domain, because the warning is useless in these environments.</p>"},{"location":"self-hosted-configuration/#globalextends","title":"<code>globalExtends</code>","text":"<p>Configuration presets to use or extend for a self-hosted config.</p> Name Value type array subType string cli <code>--global-extends</code> env <code>RENOVATE_GLOBAL_EXTENDS</code> default <code>[]</code> <p>Unlike the <code>extends</code> field, which is passed through unresolved to be part of repository config, any presets in <code>globalExtends</code> are resolved immediately as part of global config. Use the <code>globalExtends</code> field if your preset has any global-only configuration options, such as the list of repositories to run against.</p> <p>Use the <code>extends</code> field instead of this if, for example, you need the ability for a repository config (e.g. <code>renovate.json</code>) to be able to use <code>ignorePresets</code> for any preset defined in global config.</p> <p>Note</p> <p>Renovate applies your own <code>hostRules</code>, <code>internalHostAccess</code>, <code>platform</code> and <code>endpoint</code> when it fetches <code>globalExtends</code> presets. A <code>globalExtends</code> preset on an internal host is judged like any other preset, so a scoped <code>allowInternal</code> grant permits it. The <code>hostRules</code>, <code>internalHostAccess</code> and <code>secrets</code> set inside a <code>globalExtends</code> preset do not apply when Renovate fetches that preset, or the presets it extends.</p> <p>Warning</p> <p>Renovate resolves <code>globalExtends</code> before it initializes the platform, so it does not have the platform <code>token</code> yet. To fetch a private <code>globalExtends</code> preset, including a <code>local&gt;</code> preset, add a <code>hostRules</code> entry with the credentials for its host.</p>"},{"location":"self-hosted-configuration/#goenvfromhostrules","title":"<code>goEnvFromHostRules</code>","text":"<p>Derive <code>GOPROXY</code>, <code>GONOPROXY</code> and <code>GONOSUMDB</code> from host rules when they are not set in the environment.</p> Name Value type boolean default <code>false</code> cli <code>--go-env-from-host-rules</code> env <code>RENOVATE_GO_ENV_FROM_HOST_RULES</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>Set to <code>true</code> to derive the <code>GOPROXY</code>, <code>GONOPROXY</code> and <code>GONOSUMDB</code> environment variables from your host rules, if you have not set them yourself. Read the Go Modules docs to learn more.</p>"},{"location":"self-hosted-configuration/#hostrules","title":"<code>hostRules</code>","text":"<p>These <code>hostRules</code> fields are only allowed in self-hosted config, and are ignored (or rejected with a config error) if set in repository config or a preset. See <code>hostRules</code> for the rest of the available fields.</p> <p>When Renovate prepares outgoing HTTP traffic, it considers:</p> <p>could this outbound HTTP call lead to configuration being included? (i.e. it's part of an <code>extends</code>, but not part of i.e. <code>customDatasources</code>)</p> <p>If it is, Renovate treats it more cautiously, alongside the current configuration for <code>internalHostAccess</code>.</p> Could request become config <code>internalHostAccess</code> setting Host being requested Result How to allow traffic Yes <code>internalHostAccess=block</code> <code>https://docs.renovatebot.com</code> Allowed Yes <code>internalHostAccess=block</code> <code>169.254.169.254</code> Blocked Not possible Yes <code>internalHostAccess=block</code> <code>http://172.16.1.5:8081/artifactory/repo/internal-presets/default.json</code> Blocked Create a host rule setting <code>allowInternal=true</code>, scoped with a <code>hostType</code> or a URL-prefix <code>matchHost</code> No <code>internalHostAccess=block</code> <code>https://docs.renovatebot.com</code> Allowed No <code>internalHostAccess=block</code> <code>169.254.169.254</code> Blocked Not possible No <code>internalHostAccess=block</code> <code>http://172.16.1.5:8081/artifactory/repo/internal-presets/default.json</code> Blocked Create a host rule naming the host with <code>matchHost</code> (trusted<sup>1</sup>), or one setting <code>allowInternal=true</code> Yes <code>internalHostAccess=warn</code> <code>https://docs.renovatebot.com</code> Allowed Yes <code>internalHostAccess=warn</code> <code>169.254.169.254</code> Blocked Not possible Yes <code>internalHostAccess=warn</code> <code>http://172.16.1.5:8081/artifactory/repo/internal-presets/default.json</code> Allowed, with a WARN log Create a host rule setting <code>allowInternal=true</code>, scoped with a <code>hostType</code> or a URL-prefix <code>matchHost</code><sup>2</sup> No <code>internalHostAccess=warn</code> <code>https://docs.renovatebot.com</code> Allowed No <code>internalHostAccess=warn</code> <code>169.254.169.254</code> Blocked Not possible No <code>internalHostAccess=warn</code> <code>http://172.16.1.5:8081/artifactory/repo/internal-presets/default.json</code> Allowed, with a WARN log Create a host rule naming the host with <code>matchHost</code> (trusted<sup>1</sup>), or one setting <code>allowInternal=true</code><sup>2</sup> Yes <code>internalHostAccess=allow</code> <code>https://docs.renovatebot.com</code> Allowed Yes <code>internalHostAccess=allow</code> <code>169.254.169.254</code> Blocked Not possible Yes <code>internalHostAccess=allow</code> <code>http://172.16.1.5:8081/artifactory/repo/internal-presets/default.json</code> Allowed, no warning Already allowed - no host rule needed No <code>internalHostAccess=allow</code> <code>https://docs.renovatebot.com</code> Allowed No <code>internalHostAccess=allow</code> <code>169.254.169.254</code> Blocked Not possible No <code>internalHostAccess=allow</code> <code>http://172.16.1.5:8081/artifactory/repo/internal-presets/default.json</code> Allowed, no warning Already allowed - no host rule needed <p><sup>1</sup>: a \"trusted\" host rule is one that's configured by the self-hosted administrator</p> <p><sup>2</sup>: under <code>internalHostAccess=warn</code>, the request is allowed either way - the host rule only silences the WARN log, it isn't required for the request to go through</p>"},{"location":"self-hosted-configuration/#hostrulesallowinternal","title":"<code>hostRules.allowInternal</code>","text":"<p>Whether requests to this host may reach internal addresses when <code>internalHostAccess=block</code>. Only honored from the self-hosted administrator's own configuration, or from inherited config when <code>inheritConfigTrusted=true</code>.</p> Name Value type boolean parents <code>hostRules</code> inheritConfigSupport true default <code>true</code> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>As seen above, specifying <code>allowInternal</code> is required when Renovate interacts with private addresses, and is dependent on how <code>internalHostAccess</code> is configured.</p> <p>If a host is being used i.e. in a <code>customDatasources</code> or a <code>registryUrl</code> configuration, then an implicit grant is sufficient. For instance, if the self-hosted configuration authenticates to a private Artifactory deployment:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"http://172.16.1.5:8081/artifactory\",\n      \"username\": \"renovate-user\",\n      \"password\": \"{{ secrets.ARTIFACTORY_PASSWORD }}\"\n    }\n  ]\n}\n</code></pre> <p>Warning</p> <p>An implicit grant does not depend on the rule carrying credentials. Any host rule in your own configuration whose <code>matchHost</code> matches the host grants internal access to it, even a rule that only sets something like <code>timeout</code> or <code>concurrentRequestLimit</code>. This means that when you upgrade, the <code>hostRules</code> you already have silently become internal-access grants for the hosts they name.</p> <p>If there are hosts that you do not want Renovate to access, it is worth explicitly blocking them with:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"http://localhost:8500/v1/flags/\",\n      \"allowInternal\": false\n    }\n  ]\n}\n</code></pre> <p>Setting <code>allowInternal=false</code> is also how you keep a rule you need for another reason - credentials, for instance - without it granting internal access to the host it names.</p> <p>It is recommended to use a URL-prefix <code>matchHost</code> (as above) over a bare hostname when permitting loopback addresses, so that only the intended service - and not everything else running on the same host - becomes reachable. Include the port in that prefix for the same reason. A bare hostname <code>matchHost</code> also matches every subdomain of that host, so prefer a URL prefix whenever you want the grant to stay narrow.</p> <p>If a host is being used i.e. in an <code>extends</code>, an explicit grant is required to permit fetching that configuration. This covers HTTP presets, and <code>npm:</code> presets - whose registry a repository can point at any host with its own <code>npmrc</code>. The grant must be deliberately scoped, by setting <code>allowInternal</code> on a rule with a <code>hostType</code>, or on one with a URL-prefix <code>matchHost</code>:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"hostType\": \"preset\",\n      \"matchHost\": \"https://config-server.corp/renovate-presets/\",\n      \"allowInternal\": true\n    },\n    {\n      \"hostType\": \"npm\",\n      \"matchHost\": \"https://registry.corp/\",\n      \"allowInternal\": true\n    }\n  ]\n}\n</code></pre> <p>The first rule permits HTTP presets from that server, the second <code>npm:</code> presets from that registry.</p> <p>Note</p> <p>A URL-form <code>matchHost</code> is scoped enough on its own, so a <code>hostType</code> is not required. A rule such as <code>{ \"matchHost\": \"http://10.1.2.3\", \"allowInternal\": true }</code> therefore permits config-fetching requests - such as HTTP presets - to that URL prefix, and not only lookups. A bare hostname such as <code>{ \"matchHost\": \"10.1.2.3\", \"allowInternal\": true }</code> is not scoped, and permits lookups only.</p> <p>Cloud instance-metadata endpoints are always blocked, and cannot be permitted with this field.</p>"},{"location":"self-hosted-configuration/#httpcachettldays","title":"<code>httpCacheTtlDays</code>","text":"<p>Maximum duration in days to keep HTTP cache entries.</p> Name Value type integer default 90 cli <code>--http-cache-ttl-days</code> env <code>RENOVATE_HTTP_CACHE_TTL_DAYS</code> <p>This option sets the number of days that Renovate will cache HTTP responses. The default value is 90 days. Value of <code>0</code> means no caching.</p> <p>Warning</p> <p>When you set <code>httpCacheTtlDays</code> to <code>0</code>, Renovate will remove the cached HTTP data.</p>"},{"location":"self-hosted-configuration/#ignoreprauthor","title":"<code>ignorePrAuthor</code>","text":"<p>Set to <code>true</code> to fetch the entire list of PRs instead of only those authored by the Renovate user.</p> Name Value type boolean default <code>false</code> cli <code>--ignore-pr-author</code> env <code>RENOVATE_IGNORE_PR_AUTHOR</code> <p>This is usually needed if someone needs to migrate the account Renovate runs as, including from the Mend Renovate App to self-hosted. An additional use case is for GitLab users of project or group access tokens who need to rotate them.</p> <p>If <code>ignorePrAuthor</code> is configured to true, it means Renovate will fetch the entire list of repository PRs instead of optimizing to fetch only those PRs which it created itself. You should only want to enable this if you are changing the account Renovate runs as (e.g. from <code>@old-bot</code> to <code>@new-bot</code>) and want <code>@new-bot</code> to find and update any existing PRs created by <code>@old-bot</code>.</p> <p>Setting this field to <code>true</code> in Github or GitLab will also mean that all Issues will be fetched instead of only those by Renovate itself.</p>"},{"location":"self-hosted-configuration/#includemirrors","title":"<code>includeMirrors</code>","text":"<p>Whether to process repositories that are mirrors. By default, repositories that are mirrors are skipped.</p> Name Value type boolean default <code>false</code> supportedPlatforms gitlab cli <code>--include-mirrors</code> env <code>RENOVATE_INCLUDE_MIRRORS</code> <p>By default, Renovate does not autodiscover repositories that are mirrors.</p> <p>Change this setting to <code>true</code> to include repositories that are mirrors as Renovate targets.</p>"},{"location":"self-hosted-configuration/#inheritconfig","title":"<code>inheritConfig</code>","text":"<p>If <code>true</code>, Renovate will inherit configuration from the <code>inheritConfigFileName</code> file in <code>inheritConfigRepoName</code>.</p> Name Value type boolean default <code>false</code> cli <code>--inherit-config</code> env <code>RENOVATE_INHERIT_CONFIG</code> <p>When you enable this option, Renovate will look for the <code>inheritConfigFileName</code> file in the <code>inheritConfigRepoName</code> repository before processing a repository, and read this in as config.</p> <p>If the repository is in a nested organization or group on a supported platform such as GitLab, such as <code>topGroup/nestedGroup/projectName</code> then Renovate will look in <code>topGroup/nestedGroup/renovate-config</code>.</p> <p>If <code>inheritConfig</code> is <code>true</code> but the inherited config file does not exist then Renovate will proceed without warning. If the file exists but cannot be parsed, then Renovate will raise a config warning issue and abort the job.</p> <p>The inherited config may include all valid repository config and these config options:</p> <ul> <li><code>bbUseDevelopmentBranch</code></li> <li><code>configFileNames</code></li> <li><code>configValidationError</code></li> <li><code>hostRules.allowInternal</code></li> <li><code>onboarding</code></li> <li><code>onboardingAutoCloseAge</code></li> <li><code>onboardingBranch</code></li> <li><code>onboardingCommitMessage</code></li> <li><code>onboardingConfig</code></li> <li><code>onboardingConfigFileName</code></li> <li><code>onboardingNoDeps</code></li> <li><code>onboardingPrTitle</code></li> <li><code>requireConfig</code></li> </ul> <p>This way organizations can change/control the default behavior, like whether configs are required and how repositories are onboarded.</p> <p>Configured <code>hostRules</code> in inherited config are treated as if they are repository configuration, when applying precedence and whether <code>internalHostAccess</code> can be configured. If you trust each organisation onboarded to this Renovate deployment to be able to specify at an organisation level whether they should be able to access internal hosts, you can set <code>inheritConfigTrusted=true</code>.</p> <p>We disabled <code>inheritConfig</code> in the Mend Renovate App to avoid wasting millions of API calls per week. This is because each <code>404</code> response from the GitHub API due to a missing org inherited config counts as a used API call. We will add a smart/dynamic approach in future, so that we can selectively enable <code>inheritConfig</code> per organization.</p>"},{"location":"self-hosted-configuration/#inheritconfigfilename","title":"<code>inheritConfigFileName</code>","text":"<p>Renovate will look for this config file name in the <code>inheritConfigRepoName</code>.</p> Name Value type string default <code>\"org-inherited-config.json\"</code> cli <code>--inherit-config-file-name</code> env <code>RENOVATE_INHERIT_CONFIG_FILE_NAME</code> <p>Change this setting if you want Renovate to look for a different file name within the <code>inheritConfigRepoName</code> repository. You may use nested files, for example: <code>\"some-dir/config.json\"</code>.</p>"},{"location":"self-hosted-configuration/#inheritconfigreponame","title":"<code>inheritConfigRepoName</code>","text":"<p>Renovate will look in this repo for the <code>inheritConfigFileName</code>.</p> Name Value type string default <code>\"{{parentOrg}}/renovate-config\"</code> supportsTemplating true cli <code>--inherit-config-repo-name</code> env <code>RENOVATE_INHERIT_CONFIG_REPO_NAME</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Change this setting if you want Renovate to look in an alternative repository for the inherited config. The repository must be on the same platform and endpoint, and Renovate's token must have <code>read</code> permissions to the repository.</p>"},{"location":"self-hosted-configuration/#inheritconfigstrict","title":"<code>inheritConfigStrict</code>","text":"<p>If <code>true</code>, any <code>inheritedConfig</code> fetch error will result in an aborted run.</p> Name Value type boolean default <code>false</code> cli <code>--inherit-config-strict</code> env <code>RENOVATE_INHERIT_CONFIG_STRICT</code> <p>By default Renovate will silently (debug log message only) ignore cases where <code>inheritConfig=true</code> but no inherited config is found. When you set <code>inheritConfigStrict=true</code> then Renovate will abort the run and raise a config error if Renovate can't find the inherited config.</p> <p>Warning</p> <p>Only set this config option to <code>true</code> if every organization has an inherited config file and you want to make sure Renovate always uses that inherited config.</p>"},{"location":"self-hosted-configuration/#inheritconfigtrusted","title":"<code>inheritConfigTrusted</code>","text":"<p>If <code>true</code>, <code>hostRules</code> in inherited config may grant access to internal hosts.</p> Name Value type boolean default <code>false</code> cli <code>--inherit-config-trusted</code> env <code>RENOVATE_INHERIT_CONFIG_TRUSTED</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>Warning</p> <p>Only set this to <code>true</code> if everyone who can push to the <code>inheritConfigRepoName</code> repositories are trusted to control these additional settings. This trust is transitive: <code>hostRules</code> defined in any preset the inherited config <code>extends</code> are trusted at the same level, so everyone who can change those preset sources must be trusted too. If you're running a multi-tenant platform, it is recommended you leave this disabled.</p>"},{"location":"self-hosted-configuration/#host-rules","title":"Host Rules","text":"<p>By default, <code>hostRules</code> in inherited config are treated like a repository's own: they may carry credentials or headers, but they cannot grant access to internal hosts.</p> <p>This is because the <code>inheritConfigRepoName</code> repository is controlled by each organization's administrators, rather than the self-hosted administrators themselves. As this repository is outside of the self-hosted administrator's control, there may be looser access control than may be wanted on the repository and its ability to provide settings, and so an additional level of opt-in trust is required.</p> <p>If you opt in by setting <code>inheritConfigTrusted=true</code>, this will permit the inherited config to set <code>hostRules</code>:</p> <ul> <li>set <code>allowInternal</code>, which is otherwise a fatal config error there</li> <li>implicitly permit an internal host by naming it in a rule's <code>matchHost</code> - whether or not the rule carries credentials - the same way the self-hosted config's <code>hostRules</code> do</li> </ul> <p>A self-hosted administrator's configuration still takes precedence for:</p> <ul> <li>specifying <code>allowInternal</code>, allowing you to \"veto\" access to any hosts</li> <li><code>headers</code>, which are applied last</li> <li><code>enabled</code>, which cannot be overridden by inherited config</li> <li>inherited config still cannot change <code>internalHostAccess</code>, or any other option that is not marked <code>inheritConfigSupport</code></li> </ul> <p>Inherited config cannot permit the hosts of its own <code>extends</code> presets, whatever this option is set to: those presets are resolved before its <code>hostRules</code> are registered. A preset that inherited config extends from an internal host still needs a grant in global config.</p> <p>Trust does however extend to the <code>hostRules</code> defined in those presets: once the inherited config's <code>extends</code> are resolved, the <code>hostRules</code> they contribute are registered at the same inherited trust level, as if the inherited config had defined them itself.</p>"},{"location":"self-hosted-configuration/#internalhostaccess","title":"<code>internalHostAccess</code>","text":"<p>Whether Renovate may make HTTP requests to internal hosts, such as loopback, private-range and link-local addresses. <code>warn</code> logs the requests which <code>block</code> would refuse.</p> Name Value type string allowedValues <pre><code>[\"allow\", \"warn\", \"block\"]\n</code></pre> default <code>\"warn\"</code> cli <code>--internal-host-access</code> env <code>RENOVATE_INTERNAL_HOST_ACCESS</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>Controls whether Renovate may make HTTP requests to internal hosts: loopback, RFC1918 private ranges, link-local, carrier-grade NAT, IPv6 unique-local, and similar special-use addresses. This applies whether the URL names an IP address directly, or a hostname which resolves to one, and covers redirects too.</p> <ul> <li><code>warn</code> (default): requests to internal hosts are permitted, but each request that <code>block</code> would refuse is logged as a warning</li> <li><code>block</code>: requests to internal hosts are refused, unless the host is your configured platform <code>endpoint</code>, or is permitted by a <code>hostRule</code> in your own (self-hosted administrator) configuration</li> <li><code>allow</code>: requests to internal hosts are permitted, and not logged</li> </ul> <p>The default will become <code>block</code> in a future major release, so treat the warnings as the work to do before then. Hosted platforms, such as the Mend Renovate App, may run with <code>block</code> regardless of this setting.</p> <p>Warning</p> <p><code>allow</code> is a migration escape hatch, and we plan to remove it in a future major release. After that, every internal host Renovate should reach needs a <code>hostRules</code> entry permitting it, and there is no way to silence the warnings in bulk. Use the time before then to add those grants, rather than to keep <code>allow</code> set.</p> <p>The policy applies no matter where the URL came from - repository configuration such as <code>extends</code> presets or <code>registryUrls</code>, package file contents, or your own configuration - if Renovate should be able to reach an internal host, you need to permit it with a <code>hostRule</code> rather than setting <code>allow</code>.</p> <p>For most deployments there is nothing to do: internal registries nearly always already have a <code>hostRules</code> entry carrying their credentials, which permits them implicitly, and so are never warned about. Hosts without one only need naming:</p> <pre><code>{\n  \"hostRules\": [\n    { \"matchHost\": \"artifactory.corp\" },\n    {\n      \"hostType\": \"preset\",\n      \"matchHost\": \"https://config-server.corp/renovate-presets/\",\n      \"allowInternal\": true\n    }\n  ]\n}\n</code></pre> <p>The first rule permits an internal registry the same way a credentialed rule would, and the second deliberately permits fetching HTTP presets from an internal host. Anything whose response becomes configuration - HTTP presets, and <code>npm:</code> presets - always requires such an explicit, scoped <code>allowInternal</code> grant, even for a host your other rules already permit.</p> <p>Once your grants are in place and the warnings have stopped, set <code>internalHostAccess=block</code> to enforce the policy today, rather than waiting for the default to change. Set <code>internalHostAccess=allow</code> only as a temporary escape hatch while you work out which hosts to permit.</p> <p>If you manage <code>hostRules</code> centrally through <code>inheritConfig</code>, those rules do not grant anything by default, because that repository is the organization's rather than yours. Either opt into trusting them with <code>inheritConfigTrusted=true</code>, or move the rules for internal hosts into your own global config or a <code>repositories[]</code> entry.</p> <p>Cloud instance-metadata endpoints (such as <code>169.254.169.254</code>, <code>169.254.170.2</code> and <code>metadata.google.internal</code>) are always blocked, regardless of <code>internalHostAccess</code>' setting, as Renovate's HTTP layer never has a legitimate reason to request them. This does not affect Renovate's cloud environment detection or cloud SDK authentication, which do not use Renovate's HTTP layer - see <code>useCloudMetadataServices</code>.</p> <p>If you run Renovate behind a proxy (<code>HTTP_PROXY</code> or <code>HTTPS_PROXY</code>), the proxy resolves the target hostname, so Renovate cannot check the address it actually connects to. Renovate still checks the URL itself and every redirect target, and resolves the hostname up front as a best-effort check, but as the proxy resolves the name again the two answers can differ - such as with DNS rebinding, or split-horizon DNS. Renovate lets the request through when it cannot resolve the hostname itself, which is common in locked-down proxy environments. Restrict what your proxy may reach with egress controls on the proxy, for defense in depth.</p>"},{"location":"self-hosted-configuration/#logcontext","title":"<code>logContext</code>","text":"<p>Add a global or per-repo log context to each log entry.</p> Name Value type string cli <code>--log-context</code> env <code>RENOVATE_LOG_CONTEXT</code> <p><code>logContext</code> is included with each log entry only if <code>logFormat=\"json\"</code> - it is not included in the pretty log output. If left as default (null), a random short ID will be selected.</p>"},{"location":"self-hosted-configuration/#mergeconfidencedatasources","title":"<code>mergeConfidenceDatasources</code>","text":"<p>If set, Renovate will query the merge-confidence JSON API only for datasources that are part of this list.</p> Name Value allowedValues <pre><code>[\"go\", \"maven\", \"npm\", \"nuget\", \"packagist\", \"pypi\", \"rubygems\"]\n</code></pre> default <pre><code>[\"go\", \"maven\", \"npm\", \"nuget\", \"packagist\", \"pypi\", \"rubygems\"]\n</code></pre> type array subType string cli <code>--merge-confidence-datasources</code> env <code>RENOVATE_MERGE_CONFIDENCE_DATASOURCES</code> previouslyKnownAs <pre><code>[\"RENOVATE_X_MERGE_CONFIDENCE_SUPPORTED_DATASOURCES\"]\n</code></pre> <p>This feature is applicable only if you have an access token for Mend's Merge Confidence API.</p> <p>If set, Renovate will query the merge-confidence JSON API only for datasources that are part of this list. Otherwise, it queries all the supported datasources (check default value).</p> <p>Example:</p> <pre><code>module.exports = {\n  mergeConfidenceDatasources: ['npm'],\n};\n</code></pre>"},{"location":"self-hosted-configuration/#mergeconfidenceendpoint","title":"<code>mergeConfidenceEndpoint</code>","text":"<p>If set, Renovate will query this API for Merge Confidence data.</p> Name Value type string default <code>\"https://developer.mend.io/\"</code> cli <code>--merge-confidence-endpoint</code> env <code>RENOVATE_MERGE_CONFIDENCE_ENDPOINT</code> previouslyKnownAs <pre><code>[\"RENOVATE_X_MERGE_CONFIDENCE_API_BASE_URL\"]\n</code></pre> <p>Warning</p> <p>For advanced use only! Use at your own risk!</p> <p>This feature is applicable only if you have an access token for Mend's Merge Confidence API.</p> <p>If set, Renovate will retrieve Merge Confidence data by querying this API. Otherwise, it will use the default URL, which is https://developer.mend.io/.</p> <p>If you use the Mend Renovate Enterprise Edition (Renovate EE) and:</p> <ul> <li>have a static merge confidence token that you set via <code>MEND_RNV_MC_TOKEN</code></li> <li>or set <code>MEND_RNV_MC_TOKEN</code> to <code>auto</code></li> </ul> <p>Then you must set this variable at the server and the workers.</p> <p>But if you have specified the token as a <code>matchConfidence</code> <code>packageRule</code>, you only need to set this variable at the workers.</p> <p>This feature is in private beta.</p>"},{"location":"self-hosted-configuration/#migratepresets","title":"<code>migratePresets</code>","text":"<p>Define presets here which have been removed or renamed and should be migrated automatically.</p> Name Value type object additionalProperties <pre><code>{\"type\": \"string\"}\n</code></pre> cli <code>--migrate-presets</code> env <code>RENOVATE_MIGRATE_PRESETS</code> <p>Use this if you have repositories that extend from a particular preset, which has now been renamed or removed. This is handy if you have a large number of repositories that all extend from a particular preset which you want to rename, without the hassle of manually updating every repository individually. Use an empty string to indicate that the preset should be ignored rather than replaced.</p> <p>Example:</p> <pre><code>module.exports = {\n  migratePresets: {\n    '@company': 'local&gt;org/renovate-config',\n  },\n};\n</code></pre> <p>In the above example any reference to the <code>@company</code> preset will be replaced with <code>local&gt;org/renovate-config</code>.</p> <p>Tip</p> <p>Combine <code>migratePresets</code> with <code>configMigration</code> if you'd like your config migrated by PR.</p>"},{"location":"self-hosted-configuration/#onboarding","title":"<code>onboarding</code>","text":"<p>Require a Configuration PR first.</p> Name Value type boolean inheritConfigSupport true cli <code>--onboarding</code> env <code>RENOVATE_ONBOARDING</code> default <code>true</code> <p>Only set this to <code>false</code> if all three statements are true:</p> <ul> <li>You've configured Renovate entirely on the admin side (e.g. empty <code>renovate.json</code> in repositories)</li> <li>You want to run Renovate on every repository Renovate has access to</li> <li>You want to skip all onboarding PRs</li> </ul>"},{"location":"self-hosted-configuration/#onboardingautocloseage","title":"<code>onboardingAutoCloseAge</code>","text":"<p>Maximum number of days after which Renovate will stop trying to onboard the repository, and will close any existing onboarding PRs</p> Name Value type integer inheritConfigSupport true env <code>RENOVATE_ONBOARDING_AUTO_CLOSE_AGE</code> <p>Maximum number of days after which Renovate will stop trying to onboard the repository, and will close any existing onboarding PRs.</p> <p>By default this option is set to <code>null</code>.</p>"},{"location":"self-hosted-configuration/#onboardingbranch","title":"<code>onboardingBranch</code>","text":"<p>Change this value to override the default onboarding branch name.</p> Name Value type string default <code>\"renovate/configure\"</code> inheritConfigSupport true env <code>RENOVATE_ONBOARDING_BRANCH</code> <p>Note</p> <p>This setting is independent of <code>branchPrefix</code>.</p> <p>For example, if you configure <code>branchPrefix</code> to be <code>renovate-</code> then you'd still have the onboarding PR created with branch <code>renovate/configure</code> until you configure <code>onboardingBranch=renovate-configure</code> or similar. If you have an existing Renovate installation and you change <code>onboardingBranch</code> then it's possible that you'll get onboarding PRs for repositories that had previously closed the onboarding PR unmerged.</p>"},{"location":"self-hosted-configuration/#onboardingcommitmessage","title":"<code>onboardingCommitMessage</code>","text":"<p>Change this value to override the default onboarding commit message.</p> Name Value type string inheritConfigSupport true env <code>RENOVATE_ONBOARDING_COMMIT_MESSAGE</code> <p>If <code>commitMessagePrefix</code> or <code>semanticCommits</code> values are set then they will be prepended to the commit message using the same logic that is used for adding them to non-onboarding commit messages.</p>"},{"location":"self-hosted-configuration/#onboardingconfig","title":"<code>onboardingConfig</code>","text":"<p>Configuration to use for onboarding PRs.</p> Name Value type object default <pre><code>{\"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\"}\n</code></pre> inheritConfigSupport true mergeable true cli <code>--onboarding-config</code> env <code>RENOVATE_ONBOARDING_CONFIG</code>"},{"location":"self-hosted-configuration/#onboardingconfigfilename","title":"<code>onboardingConfigFileName</code>","text":"<p>Change this value to override the default onboarding config file name.</p> Name Value type string default <code>\"renovate.json\"</code> inheritConfigSupport true env <code>RENOVATE_ONBOARDING_CONFIG_FILE_NAME</code> <p>If set to one of the valid config file names, the onboarding PR will create a configuration file with the provided name instead of <code>renovate.json</code>. Falls back to <code>renovate.json</code> if the name provided is not valid.</p> <p>Note</p> <p>If you want renovate to use a custom filename for the onboarding branch you need add allow that filename using the <code>configFileNames</code> option.</p>"},{"location":"self-hosted-configuration/#onboardingnodeps","title":"<code>onboardingNoDeps</code>","text":"<p>Onboard the repository even if no dependencies are found.</p> Name Value type string default <code>\"auto\"</code> allowedValues <pre><code>[\"auto\", \"enabled\", \"disabled\"]\n</code></pre> inheritConfigSupport true cli <code>--onboarding-no-deps</code> env <code>RENOVATE_ONBOARDING_NO_DEPS</code> <p>The default <code>auto</code> setting is converted to <code>disabled</code> if <code>autodiscoverRepositories</code> is <code>true</code>, or converted to <code>enabled</code> if false.</p> <p>In other words, the default behavior is:</p> <ul> <li>If you run Renovate on discovered repositories then it will skip onboarding those without dependencies detected, but</li> <li>If you run Renovate on specific repositories then Renovate will onboard all such repositories even if no dependencies are found</li> </ul>"},{"location":"self-hosted-configuration/#onboardingprtitle","title":"<code>onboardingPrTitle</code>","text":"<p>Change this value to override the default onboarding PR title.</p> Name Value type string default <code>\"Configure Renovate\"</code> inheritConfigSupport true env <code>RENOVATE_ONBOARDING_PR_TITLE</code> <p>If you have an existing Renovate installation and you change the <code>onboardingPrTitle</code>: then you may get onboarding PRs again for repositories with closed non-merged onboarding PRs. This is similar to what happens when you change the <code>onboardingBranch</code> config option.</p>"},{"location":"self-hosted-configuration/#onboardingrebasecheckbox","title":"<code>onboardingRebaseCheckbox</code>","text":"<p>Set to enable rebase/retry markdown checkbox for onboarding PRs.</p> Name Value type boolean default <code>false</code> supportedPlatforms forgejo, gitea, github, gitlab cli <code>--onboarding-rebase-checkbox</code> env <code>RENOVATE_ONBOARDING_REBASE_CHECKBOX</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.To track this feature visit the following GitHub issue #17633.</p>"},{"location":"self-hosted-configuration/#optimizefordisabled","title":"<code>optimizeForDisabled</code>","text":"<p>Set to <code>true</code> to perform a check for disabled config prior to cloning.</p> Name Value type boolean default <code>false</code> cli <code>--optimize-for-disabled</code> env <code>RENOVATE_OPTIMIZE_FOR_DISABLED</code> <p>When this option is <code>true</code>, Renovate will do the following during repository initialization:</p> <ol> <li>Try to fetch the default config file (e.g. <code>renovate.json</code>)</li> <li>Check if the file contains <code>\"enabled\": false</code></li> <li>If so, skip cloning and skip the repository immediately</li> </ol> <p>If <code>onboardingConfigFileName</code> is set, that file name will be used instead of the default.</p> <p>If the file exists and the config is disabled, Renovate will skip the repo without cloning it. Otherwise, it will continue as normal.</p> <p><code>optimizeForDisabled</code> can make initialization quicker in cases where most repositories are disabled, but it uses an extra API call for enabled repositories.</p> <p>A second, advanced, use also exists when the global config has <code>extends: [\":disableRenovate\"]</code>. In that case, Renovate searches the repository config file for any of these configurations:</p> <ul> <li><code>extends: [\":enableRenovate\"]</code></li> <li><code>ignorePresets: [\":disableRenovate\"]</code></li> <li><code>enabled: true</code></li> </ul> <p>If Renovate finds any of the above configurations, it continues initializing the repository. If not, then Renovate skips the repository without cloning it.</p>"},{"location":"self-hosted-configuration/#password","title":"<code>password</code>","text":"<p>Password for authentication.</p> Name Value type string supportedPlatforms azure, bitbucket, bitbucket-server cli <code>--password</code> env <code>RENOVATE_PASSWORD</code> default <code>null</code>"},{"location":"self-hosted-configuration/#persistrepodata","title":"<code>persistRepoData</code>","text":"<p>If set to <code>true</code>: keep repository data between runs instead of deleting the data.</p> Name Value type boolean default <code>false</code> cli <code>--persist-repo-data</code> env <code>RENOVATE_PERSIST_REPO_DATA</code> <p>Set this to <code>true</code> if you want Renovate to persist repo data between runs. The intention is that this allows Renovate to do a faster <code>git fetch</code> between runs rather than <code>git clone</code>. It also may mean that ignored directories like <code>node_modules</code> can be preserved and save time on operations like <code>npm install</code>.</p>"},{"location":"self-hosted-configuration/#platform","title":"<code>platform</code>","text":"<p>Platform type of repository.</p> Name Value type string allowedValues <pre><code>[\n  \"azure\",\n  \"bitbucket\",\n  \"bitbucket-server\",\n  \"codecommit\",\n  \"forgejo\",\n  \"gerrit\",\n  \"gitea\",\n  \"github\",\n  \"gitlab\",\n  \"local\",\n  \"scm-manager\"\n]\n</code></pre> default <code>\"github\"</code> cli <code>--platform</code> env <code>RENOVATE_PLATFORM</code>"},{"location":"self-hosted-configuration/#prcachesyncmaxpages","title":"<code>prCacheSyncMaxPages</code>","text":"<p>Maximum number of pages to fetch when syncing the pull request cache.</p> Name Value type integer default 100 supportedPlatforms github cli <code>--pr-cache-sync-max-pages</code> env <code>RENOVATE_PR_CACHE_SYNC_MAX_PAGES</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.To track this feature visit the following GitHub issue #41485.</p> <p>Maximum number of pages to fetch when syncing the pull request cache.</p>"},{"location":"self-hosted-configuration/#prcommitsperrunlimit","title":"<code>prCommitsPerRunLimit</code>","text":"<p>Set the maximum number of commits per Renovate run. By default there is no limit.</p> Name Value type integer default 0 cli <code>--pr-commits-per-run-limit</code> env <code>RENOVATE_PR_COMMITS_PER_RUN_LIMIT</code> <p>Parameter to reduce CI load. CI jobs are usually triggered by these events: pull-request creation, pull-request update, automerge events. Set as an integer. Default is no limit.</p>"},{"location":"self-hosted-configuration/#presetcachepersistence","title":"<code>presetCachePersistence</code>","text":"<p>Cache resolved presets in package cache.</p> Name Value type boolean default <code>false</code> cli <code>--preset-cache-persistence</code> env <code>RENOVATE_PRESET_CACHE_PERSISTENCE</code> <p>When this feature is enabled, resolved presets will be cached in Renovate's package cache, enabling reuse across multiple repositories.</p> <p>TTL is 15 minutes by default, and it is adjustable in cacheTtlOverride.</p> <p>Warning</p> <p>Doing so improves efficiency because shared presets don't need to be reloaded/resolved for every repository, however it also means that private presets can be \"leaked\" between repositories. You should only enable this when all repositories are trusted, such as a corporate environment.</p>"},{"location":"self-hosted-configuration/#privatekey","title":"<code>privateKey</code>","text":"<p>Server-side private key.</p> Name Value type string replaceLineReturns true cli <code>--private-key</code> env <code>RENOVATE_PRIVATE_KEY</code> default <code>null</code> <p>This private key is used to decrypt config files.</p> <p>The corresponding public key can be used to create encrypted values for config files. If you want a UI to encrypt values you can put the public key in a HTML page similar to https://app.renovatebot.com/encrypt.</p> <p>To create the PGP key pair with GPG use the following commands:</p> <ul> <li><code>gpg --full-generate-key</code> and follow the prompts to generate a key. Name and email are not important to Renovate, and do not configure a passphrase. Use a 4096bit key.</li> </ul> key generation log <pre><code>\u276f gpg --full-generate-key\ngpg (GnuPG) 2.2.24; Copyright (C) 2020 Free Software Foundation, Inc.\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law.\n\nPlease select what kind of key you want:\n   (1) RSA and RSA (default)\n   (2) DSA and Elgamal\n   (3) DSA (sign only)\n   (4) RSA (sign only)\n  (14) Existing key from card\nYour selection? 1\nRSA keys may be between 1024 and 4096 bits long.\nWhat keysize do you want? (3072) 4096\nRequested keysize is 4096 bits\nPlease specify how long the key should be valid.\n         0 = key does not expire\n      &lt;n&gt;  = key expires in n days\n      &lt;n&gt;w = key expires in n weeks\n      &lt;n&gt;m = key expires in n months\n      &lt;n&gt;y = key expires in n years\nKey is valid for? (0)\nKey does not expire at all\nIs this correct? (y/N) y\n\nGnuPG needs to construct a user ID to identify your key.\n\nReal name: Renovate\nEmail address: renovate@whitesourcesoftware.com\nComment:\nYou selected this USER-ID:\n    \"Renovate &lt;renovate@whitesourcesoftware.com&gt;\"\n\nChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O\n\ngpg: key 0649CC3899F22A66 marked as ultimately trusted\ngpg: revocation certificate stored as '/Users/rhys/.gnupg/openpgp-revocs.d/794B820F34B34A8DF32AADB20649CC3899F22A66.rev'\npublic and secret key created and signed.\n\npub   rsa4096 2021-09-10 [SC]\n      794B820F34B34A8DF32AADB20649CEXAMPLEONLY\nuid                      Renovate &lt;renovate@whitesourcesoftware.com&gt;\nsub   rsa4096 2021-09-10 [E]\n</code></pre> <p>Note</p> <p>If you use GnuPG <code>v2.4</code> (or newer) to generate the key, then you must disable <code>AEAD</code> preferences. This is needed to allow Renovate to decrypt the encrypted values.</p> key edit log <pre><code>\u276f gpg --edit-key renovate@whitesourcesoftware.com\ngpg&gt; showpref\n[ultimate] (1). Renovate &lt;renovate@whitesourcesoftware.com&gt;\n     Cipher: AES256, AES192, AES, 3DES\n     AEAD: OCB, EAX\n     Digest: SHA512, SHA384, SHA256, SHA224, SHA1\n     Compression: ZLIB, BZIP2, ZIP, Uncompressed\n     Features: MDC, AEAD, Keyserver no-modify\n\ngpg&gt; setpref AES256 AES192 AES 3DES SHA512 SHA384 SHA256 SHA224 SHA1 ZLIB BZIP2 ZIP\nSet preference list to:\n     Cipher: AES256, AES192, AES, 3DES\n     AEAD:\n     Digest: SHA512, SHA384, SHA256, SHA224, SHA1\n     Compression: ZLIB, BZIP2, ZIP, Uncompressed\n     Features: MDC, Keyserver no-modify\nReally update the preferences? (y/N) y\ngpg&gt; save\n</code></pre> <ul> <li>Copy the key ID from the output (<code>794B820F34B34A8DF32AADB20649CEXAMPLEONLY</code> in the above example) or run <code>gpg --list-secret-keys</code> if you forgot to take a copy</li> <li>Run <code>gpg --armor --export-secret-keys YOUR_NEW_KEY_ID &gt; renovate-private-key.asc</code> to generate an armored (text-based) private key file</li> <li>Run <code>gpg --armor --export YOUR_NEW_KEY_ID &gt; renovate-public-key.asc</code> to generate an armored (text-based) public key file</li> </ul> <p>The private key should then be added to your Renovate global config (either using <code>privateKeyPath</code> or exporting it to the <code>RENOVATE_PRIVATE_KEY</code> environment variable). The public key can be used to replace the existing key in https://app.renovatebot.com/encrypt for your own use.</p> <p>Base64 Encoding Support</p> <p>Renovate supports base64-encoded private keys for easier handling in environment variables or configuration files. Simply provide the base64-encoded version of your private key, and Renovate will automatically detect and decode it. This works for both GPG and SSH private keys.</p> <p>Any PGP-encrypted secrets must have a mandatory organization/group scope, and optionally can be scoped for a single repository only. The reason for this is to avoid \"replay\" attacks where someone could learn your encrypted secret and then reuse it in their own Renovate repositories. Instead, with scoped secrets it means that Renovate ensures that the organization and optionally repository values encrypted with the secret match against the running repository.</p> <p>Note</p> <p>You could use public key encryption with earlier versions of Renovate. We deprecated this approach and removed the documentation for it. If you're still using public key encryption then we recommend that you use private keys instead.</p>"},{"location":"self-hosted-configuration/#privatekeyold","title":"<code>privateKeyOld</code>","text":"<p>Secondary or old private key to try.</p> Name Value type string replaceLineReturns true cli <code>--private-key-old</code> env <code>RENOVATE_PRIVATE_KEY_OLD</code> default <code>null</code> <p>Use this field if you need to perform a \"key rotation\" and support more than one keypair at a time. Decryption with this key will be tried after <code>privateKey</code>.</p> <p>If you are migrating from the legacy public key encryption approach to use a PGP key, then move your legacy private key from <code>privateKey</code> to <code>privateKeyOld</code> and then put your new PGP private key in <code>privateKey</code>. Doing so will mean that Renovate will first try to decrypt using the PGP key but fall back to the legacy key and try that next.</p> <p>You can remove the <code>privateKeyOld</code> config option once all the old encrypted values have been migrated, or if you no longer want to support the old key and let the processing of repositories fail.</p> <p>Note</p> <p>Renovate now logs a warning whenever repositories use non-PGP encrypted config variables.</p>"},{"location":"self-hosted-configuration/#privatekeypath","title":"<code>privateKeyPath</code>","text":"<p>Path to the Server-side private key.</p> Name Value type string cli <code>--private-key-path</code> env <code>RENOVATE_PRIVATE_KEY_PATH</code> default <code>null</code> <p>Used as an alternative to <code>privateKey</code>, if you want the key to be read from disk instead.</p>"},{"location":"self-hosted-configuration/#privatekeypathold","title":"<code>privateKeyPathOld</code>","text":"<p>Path to the Server-side old private key.</p> Name Value type string cli <code>--private-key-path-old</code> env <code>RENOVATE_PRIVATE_KEY_PATH_OLD</code> default <code>null</code> <p>Used as an alternative to <code>privateKeyOld</code>, if you want the key to be read from disk instead.</p>"},{"location":"self-hosted-configuration/#processenv","title":"<code>processEnv</code>","text":"<p>Environment variables to be used in global config only.</p> Name Value type object additionalProperties <pre><code>{\"type\": \"string\"}\n</code></pre> cli <code>--process-env</code> env <code>RENOVATE_PROCESS_ENV</code> <p>Used to set environment variables through the configuration file instead of using actual environment variables.</p> <p>Example:</p> <pre><code>{\n  \"processEnv\": {\n    \"AWS_ACCESS_KEY_ID\": \"AKIAIOSFODNN7EXAMPLE\",\n    \"AWS_SECRET_ACCESS_KEY\": \"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY\",\n    \"AWS_DEFAULT_REGION\": \"us-west-2\"\n  }\n}\n</code></pre> <p>Note</p> <ul> <li>All values must be provided as strings, e.g., <code>\"true\"</code> instead of <code>true</code></li> <li>Only supported in file configuration (not via CLI or environment).</li> </ul>"},{"location":"self-hosted-configuration/#productlinks","title":"<code>productLinks</code>","text":"<p>Links which are used in PRs, issues and comments.</p> Name Value type object mergeable true default <pre><code>{\n  \"documentation\": \"https://docs.renovatebot.com/\",\n  \"help\": \"https://github.com/renovatebot/renovate/discussions\",\n  \"homepage\": \"https://github.com/renovatebot/renovate\"\n}\n</code></pre> additionalProperties <pre><code>{\"type\": \"string\", \"format\": \"uri\"}\n</code></pre> cli <code>--product-links</code> env <code>RENOVATE_PRODUCT_LINKS</code> <p>Override this object if you want to change the URLs that Renovate links to, e.g. if you have an internal forum for asking for help.</p>"},{"location":"self-hosted-configuration/#rebaseallopenbranches","title":"<code>rebaseAllOpenBranches</code>","text":"<p>Rebase all open branches at once, as if the rebase-all-open-PRs checkbox was selected in the Dependency Dashboard issue.</p> Name Value type boolean cli <code>--rebase-all-open-branches</code> default <code>false</code> env <code>RENOVATE_REBASE_ALL_OPEN_BRANCHES</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>It has been designed with the intention of being run on one repository, in a one-off manner, e.g. to \"force\" the rebase of all open PRs. It is highly unlikely that you should ever need to add this to your permanent global config.</p> <p>Example: <code>renovate --rebase-all-open-branches=true renovate-reproductions/checked</code> will rebase all open PRs in the <code>renovate-reproductions/checked</code> repository.</p>"},{"location":"self-hosted-configuration/#redisprefix","title":"<code>redisPrefix</code>","text":"<p>Key prefix for redis cache entries.</p> Name Value type string cli <code>--redis-prefix</code> env <code>RENOVATE_REDIS_PREFIX</code> default <code>null</code> <p>If this value is set then Renovate will prepend this string to the name of all Redis cache entries used in Renovate. It's only used if <code>redisUrl</code> is configured.</p>"},{"location":"self-hosted-configuration/#redisurl","title":"<code>redisUrl</code>","text":"<p>If set, this Redis URL will be used for caching instead of the file system.</p> Name Value type string cli <code>--redis-url</code> env <code>RENOVATE_REDIS_URL</code> default <code>null</code> <p>If this value is set then Renovate will use Redis for its global cache instead of the local file system. The global cache is used to store lookup results (e.g. dependency versions and changelogs) between repositories and runs.</p> <p>For non encrypted connections,</p> <p>Example URL structure: <code>redis://[[username]:[password]]@localhost:6379/0</code>.</p> <p>For TLS/SSL-enabled connections, use rediss prefix</p> <p>Example URL structure: <code>rediss://[[username]:[password]]@localhost:6379/0</code>.</p> <p>Renovate also supports connecting to Redis clusters as well. In order to connect to a cluster, provide the connection string using the <code>redis+cluster</code> or <code>rediss+cluster</code> schema as appropriate.</p> <p>Example URL structure: <code>redis+cluster://[[username]:[password]]@redis.cluster.local:6379/0</code></p>"},{"location":"self-hosted-configuration/#reportformatting","title":"<code>reportFormatting</code>","text":"<p>If set to <code>true</code>, Renovate will format the report JSON with Prettier before writing.</p> Name Value type boolean default <code>false</code> env <code>RENOVATE_REPORT_FORMATTING</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>This option only applies when <code>reportType</code> is <code>file</code> or <code>s3</code>.</p>"},{"location":"self-hosted-configuration/#reportpath","title":"<code>reportPath</code>","text":"<p>Path to where the file should be written. In case of <code>s3</code> this has to be a full S3 URI.</p> Name Value type string cli <code>--report-path</code> env <code>RENOVATE_REPORT_PATH</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p><code>reportPath</code> describes the location where the report is written to.</p> <p>If <code>reportType</code> is set to <code>file</code>, then set <code>reportPath</code> to a filepath. For example: <code>/foo/bar.json</code>.</p> <p>If the value <code>s3</code> is used in <code>reportType</code>, then use a S3 URI. For example: <code>s3://bucket-name/key-name</code>.</p>"},{"location":"self-hosted-configuration/#reporttype","title":"<code>reportType</code>","text":"<p>Set how, or if, reports should be generated.</p> Name Value type string allowedValues <pre><code>[\"logging\", \"file\", \"s3\"]\n</code></pre> cli <code>--report-type</code> env <code>RENOVATE_REPORT_TYPE</code> <p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>Defines how the report is exposed:</p> <ul> <li><code>&lt;unset&gt;</code> If unset, no report will be provided, though the debug logs will still have partial information of the report</li> <li><code>logging</code> The report will be printed as part of the log messages on <code>INFO</code> level</li> <li><code>file</code> The report will be written to a path provided by <code>reportPath</code></li> <li><code>s3</code> The report is pushed to an S3 bucket defined by <code>reportPath</code>. This option reuses <code>s3Endpoint</code> and <code>s3PathStyle</code></li> </ul>"},{"location":"self-hosted-configuration/#repositories","title":"<code>repositories</code>","text":"<p>List of Repositories, or an object that contains a <code>repository</code>, and any Global or Repo config to target that specific repository.</p> Name Value type array subType string env <code>RENOVATE_REPOSITORIES</code> default <code>[]</code> <p>The <code>repositories</code> array can contain a mix of repository names, and objects which can override Global and Repo configuration for a specified repository.</p> <p>For instance:</p> <pre><code>module.exports = {\n  repositories: [\n    // we trust this repository's authors to run `make generate` in some cases\n    {\n      repository: 'g/r1',\n      allowedCommands: ['^make generate$'],\n    },\n    // this repository doesn't get any specific configuration\n    'g/r2',\n  ],\n};\n</code></pre>"},{"location":"self-hosted-configuration/#repositorycache","title":"<code>repositoryCache</code>","text":"<p>This option decides if Renovate uses a JSON cache to speed up extractions.</p> Name Value type string allowedValues <pre><code>[\"disabled\", \"enabled\", \"reset\"]\n</code></pre> default <code>\"disabled\"</code> cli <code>--repository-cache</code> env <code>RENOVATE_REPOSITORY_CACHE</code> <p>Set this to <code>\"enabled\"</code> to have Renovate maintain a JSON file cache per-repository to speed up extractions. Set to <code>\"reset\"</code> if you ever need to bypass the cache and have it overwritten. JSON files will be stored inside the <code>cacheDir</code> beside the existing file-based package cache.</p>"},{"location":"self-hosted-configuration/#repositorycacheforcelocal","title":"<code>repositoryCacheForceLocal</code>","text":"<p>If set to <code>true</code>, Renovate will persist repository cache locally after uploading to S3.</p> Name Value type boolean default <code>false</code> cli <code>--repository-cache-force-local</code> env <code>RENOVATE_REPOSITORY_CACHE_FORCE_LOCAL</code> previouslyKnownAs <pre><code>[\"RENOVATE_X_REPO_CACHE_FORCE_LOCAL\"]\n</code></pre> <p>If set to <code>true</code>, Renovate will persist repository cache locally after uploading to S3.</p> <p>This is useful if you want to keep a local copy of the cache for debugging purposes or for faster access to the cache.</p>"},{"location":"self-hosted-configuration/#repositorycachetype","title":"<code>repositoryCacheType</code>","text":"<p>Set the type of renovate repository cache if <code>repositoryCache</code> is enabled.</p> Name Value type string default <code>\"local\"</code> cli <code>--repository-cache-type</code> env <code>RENOVATE_REPOSITORY_CACHE_TYPE</code> Set repositoryCacheType to an S3 URI to enable S3 backed repository cache<pre><code>{\n  repositoryCacheType: 's3://bucket-name';\n}\n</code></pre> <p>Renovate uses the AWS SDK for JavaScript V3 to connect to the S3 instance. Therefore, Renovate supports all the authentication methods supported by the AWS SDK. Read more about the default credential provider chain for AWS SDK for JavaScript V3.</p> <p>Tip</p> <p>If you're storing the repository cache on Amazon S3 then you may set a folder hierarchy as part of <code>repositoryCacheType</code>. For example, <code>repositoryCacheType: 's3://bucket-name/dir1/.../dirN/'</code>.</p> <p>Note</p> <p>S3 repository is used as a repository cache (e.g. extracted dependencies) and not a lookup cache (e.g. available versions of dependencies). To keep the latter remotely, define Redis URL.</p>"},{"location":"self-hosted-configuration/#requireconfig","title":"<code>requireConfig</code>","text":"<p>Controls Renovate's behavior regarding repository config files such as <code>renovate.json</code>.</p> Name Value type string default <code>\"required\"</code> allowedValues <pre><code>[\"required\", \"optional\", \"ignored\"]\n</code></pre> inheritConfigSupport true cli <code>--require-config</code> env <code>RENOVATE_REQUIRE_CONFIG</code> <p>By default, Renovate needs a Renovate config file in each repository where it runs before it will propose any dependency updates.</p> <p>You can choose any of these settings:</p> <ul> <li><code>\"required\"</code> (default): a repository config file must be present</li> <li><code>\"optional\"</code>: if a config file exists, Renovate will use it when it runs</li> <li><code>\"ignored\"</code>: config files in the repo will be ignored, and have no effect</li> </ul> <p>This feature is closely related to the <code>onboarding</code> config option. The combinations of <code>requireConfig</code> and <code>onboarding</code> are:</p> <code>onboarding=true</code> <code>onboarding=false</code> <code>requireConfig=required</code> An onboarding PR will be created if no config file exists. If the onboarding PR is closed and there's no config file, then the repository is skipped. Repository is skipped unless a config file is added manually. <code>requireConfig=optional</code> An onboarding PR will be created if no config file exists. If the onboarding PR is closed and there's no config file, the repository will be processed. Repository is processed regardless of config file presence. <code>requireConfig=ignored</code> No onboarding PR will be created and repo will be processed while ignoring any config file present. Repository is processed, any config file is ignored."},{"location":"self-hosted-configuration/#s3endpoint","title":"<code>s3Endpoint</code>","text":"<p>If set, Renovate will use this string as the <code>endpoint</code> when creating the AWS S3 client instance.</p> Name Value type string cli <code>--s3-endpoint</code> env <code>RENOVATE_S3_ENDPOINT</code> previouslyKnownAs <pre><code>[\"RENOVATE_X_S3_ENDPOINT\"]\n</code></pre> default <code>null</code> <p>If set, Renovate will use this string as the <code>endpoint</code> when creating the AWS S3 client instance.</p>"},{"location":"self-hosted-configuration/#s3pathstyle","title":"<code>s3PathStyle</code>","text":"<p>If set, Renovate will enable <code>forcePathStyle</code> when creating the AWS S3 client instance.</p> Name Value type boolean default <code>false</code> cli <code>--s3-path-style</code> env <code>RENOVATE_S3_PATH_STYLE</code> previouslyKnownAs <pre><code>[\"RENOVATE_X_S3_PATH_STYLE\"]\n</code></pre> <p>If set, Renovate will enable <code>forcePathStyle</code> when creating the AWS S3 client instance.</p> <p>For example:</p> <code>s3PathStyle</code> Path <code>off</code> <code>https://bucket.s3.amazonaws.com/</code> <code>on</code> <code>https://s3.amazonaws.com/bucket/</code> <p>Read the AWS S3 docs, Interface BucketEndpointInputConfig to learn more about path-style URLs.</p>"},{"location":"self-hosted-configuration/#secrets","title":"<code>secrets</code>","text":"<p>Object which holds secret name/value pairs.</p> Name Value type object mergeable true additionalProperties <pre><code>{\"type\": \"string\"}\n</code></pre> cli <code>--secrets</code> env <code>RENOVATE_SECRETS</code> <p>Secrets may be configured by an administrator in <code>config.js</code>, which will then make them available for templating within repository configs. For example, to configure a <code>GOOGLE_TOKEN</code> to be accessible by all repositories:</p> <pre><code>module.exports = {\n  secrets: {\n    GOOGLE_TOKEN: 'abc123',\n  },\n};\n</code></pre> <p>They can also be configured per repository, e.g.</p> <pre><code>module.exports = {\n  repositories: [\n    {\n      repository: 'abc/def',\n      secrets: {\n        GOOGLE_TOKEN: 'abc123',\n      },\n    },\n  ],\n};\n</code></pre> <p>It could then be used in a repository config or preset like so:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"google.com\",\n      \"token\": \"{{ secrets.GOOGLE_TOKEN }}\"\n    }\n  ]\n}\n</code></pre> <p>Secret names must start with an upper or lower case character and can have only characters, digits, or underscores.</p>"},{"location":"self-hosted-configuration/#token","title":"<code>token</code>","text":"<p>Repository Auth Token.</p> Name Value type string cli <code>--token</code> env <code>RENOVATE_TOKEN</code> default <code>null</code>"},{"location":"self-hosted-configuration/#unicodeemoji","title":"<code>unicodeEmoji</code>","text":"<p>Enable or disable Unicode emoji.</p> Name Value type boolean default <code>true</code> cli <code>--unicode-emoji</code> env <code>RENOVATE_UNICODE_EMOJI</code> <p>If enabled emoji shortcodes are replaced with their Unicode equivalents. For example: <code>:warning:</code> will be replaced with <code>\u26a0\ufe0f</code>.</p>"},{"location":"self-hosted-configuration/#usecloudmetadataservices","title":"<code>useCloudMetadataServices</code>","text":"<p>If <code>false</code>, Renovate does not try to access cloud metadata services.</p> Name Value type boolean default <code>true</code> env <code>RENOVATE_USE_CLOUD_METADATA_SERVICES</code> <p>Some cloud providers offer services to receive metadata about the current instance, for example AWS Instance metadata or GCP VM metadata. You can control if Renovate should try to access these services with the <code>useCloudMetadataServices</code> config option.</p> <p>Note</p> <p>This should only be set via an environment variable, as it is used before Renovate initialises its global configuration.</p>"},{"location":"self-hosted-configuration/#useragent","title":"<code>userAgent</code>","text":"<p>Sets the <code>user-agent</code> header to be sent with HTTP requests. Supports <code>{{renovateVersion}}</code> as a template variable for the current Renovate version.</p> Name Value type string default <code>\"Renovate/{{renovateVersion}} (https://github.com/renovatebot/renovate)\"</code> supportsTemplating true cli <code>--user-agent</code> env <code>RENOVATE_USER_AGENT</code> <p>This option supports Renovate's template syntax</p> <p>See templates for available variables and helpers.</p> <p>Specifies the <code>user-agent</code> header sent with HTTP requests. Supports <code>{{renovateVersion}}</code> as a template variable for the current Renovate version.</p>"},{"location":"self-hosted-configuration/#username","title":"<code>username</code>","text":"<p>Username for authentication.</p> Name Value type string supportedPlatforms azure, bitbucket, bitbucket-server, scm-manager cli <code>--username</code> env <code>RENOVATE_USERNAME</code> default <code>null</code> <p>The only time where <code>username</code> is required is if using <code>username</code> + <code>password</code> credentials for the <code>bitbucket</code> platform. You don't need to configure <code>username</code> directly if you have already configured <code>token</code>. Renovate will use the token to discover its username on the platform, including if you're running Renovate as a GitHub App.</p>"},{"location":"self-hosted-configuration/#variables","title":"<code>variables</code>","text":"<p>Object which holds variable name/value pairs.</p> Name Value type object mergeable true additionalProperties <pre><code>{\"type\": \"string\"}\n</code></pre> cli <code>--variables</code> env <code>RENOVATE_VARIABLES</code> <p>Variables may be configured by an administrator in <code>config.js</code>, which will then make them available for templating within repository configs. This config option behaves exactly like secrets, except that it won't be masked in the logs. For example, to configure a <code>SOME_VARIABLE</code> to be accessible by all repositories:</p> <pre><code>module.exports = {\n  variables: {\n    SOME_VARIABLE: 'abc123',\n  },\n};\n</code></pre> <p>They can also be configured per repository, e.g.</p> <pre><code>module.exports = {\n  repositories: [\n    {\n      repository: 'abc/def',\n      variables: {\n        SOME_VARIABLE: 'abc123',\n      },\n    },\n  ],\n};\n</code></pre> <p>It could then be used in a repository config or preset like so:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchUpdateTypes\": [\"patch\"],\n      \"addLabels\": [\"{{ variables.SOME_VARIABLE }}\"]\n    }\n  ]\n}\n</code></pre>"},{"location":"self-hosted-configuration/#writediscoveredrepos","title":"<code>writeDiscoveredRepos</code>","text":"<p>Writes discovered repositories to a JSON file and then exit.</p> Name Value type string cli <code>--write-discovered-repos</code> env <code>RENOVATE_WRITE_DISCOVERED_REPOS</code> default <code>null</code> <p>By default, Renovate processes each repository that it finds. You can use this optional parameter so Renovate writes the discovered repositories to a JSON file and exits.</p> <p>Known use cases consist, among other things, of horizontal scaling setups. See Scaling Renovate on self-hosted GitLab.</p> <p>Usage: <code>renovate --write-discovered-repos=/tmp/renovate-repos.json</code></p> <pre><code>[\"myOrg/myRepo\", \"myOrg/anotherRepo\"]\n</code></pre>"},{"location":"self-hosted-experimental/","title":"Self-hosted experimental environment variables","text":"<p>The following environment variables are \"experimental\" because they:</p> <ul> <li>are not commonly needed</li> <li>are typically an effort to work around some other service's or platform's problem</li> <li>can be removed at any time</li> <li>are variables for Renovate's internal use to validate they work as intended</li> </ul> <p>Experimental variables which are commonly used and for which there is no external solution in sight can be converted to an official configuration option by the Renovate developers.</p> <p>Use these experimental variables at your own risk. We do not follow Semantic Versioning for any experimental variables. These variables may be removed or have their behavior changed in any version. We will try to keep breakage to a minimum, but make no guarantees that an experimental variable will keep working.</p>"},{"location":"self-hosted-experimental/#otel_exporter_otlp_endpoint","title":"<code>OTEL_EXPORTER_OTLP_ENDPOINT</code>","text":"<p>If set, Renovate will export OpenTelemetry data to the supplied endpoint. For more information see the OpenTelemetry docs.</p>"},{"location":"self-hosted-experimental/#renovate_paginate_all","title":"<code>RENOVATE_PAGINATE_ALL</code>","text":"<p>If set to any value, Renovate will always paginate requests to GitHub fully, instead of stopping after 10 pages.</p>"},{"location":"self-hosted-experimental/#renovate_x_docker_hub_disable_label_lookup","title":"<code>RENOVATE_X_DOCKER_HUB_DISABLE_LABEL_LOOKUP</code>","text":"<p>If set to any value, Renovate will skip attempting to get release labels (e.g. gitRef, sourceUrl) from manifest annotations for <code>https://index.docker.io</code>.</p> <p>Due to the missing label information like sourceUrl, Renovate will not be able to perform certain actions dependent on these information for the images.</p> <p>This includes the following:</p> <ul> <li>Generating changelogs</li> <li>Applying package rules dependent on the labels</li> <li>Including the sourceUrls in PR bodies</li> </ul>"},{"location":"self-hosted-experimental/#renovate_x_docker_hub_tags_disable","title":"<code>RENOVATE_X_DOCKER_HUB_TAGS_DISABLE</code>","text":"<p>If set to any value, Renovate will stop using the Docker Hub API (<code>https://hub.docker.com</code>) to fetch tags and instead use the normal Docker API for images pulled from <code>https://index.docker.io</code>.</p>"},{"location":"self-hosted-experimental/#renovate_x_docker_pagination_allow_cross_origin","title":"<code>RENOVATE_X_DOCKER_PAGINATION_ALLOW_CROSS_ORIGIN</code>","text":"<p>Warning</p> <p>This is an explicit opt-out of a security control.</p> <p>If set to any value, the <code>docker</code> datasource will follow paginated <code>next</code> links pointing to a different origin than the registry it is querying.</p> <p>By default Renovate drops such cross-origin pagination links, so a malicious or compromised registry cannot redirect an authenticated request to an attacker-controlled host and exfiltrate credentials. Set this only if you trust the registry and it legitimately paginates across hosts (for example, an absolute <code>next</code> link pointing at a CDN or backend host).</p>"},{"location":"self-hosted-experimental/#renovate_x_encrypted_strict","title":"<code>RENOVATE_X_ENCRYPTED_STRICT</code>","text":"<p>If set to <code>\"true\"</code>, a config error Issue will be raised in case repository config contains <code>encrypted</code> objects without any <code>privateKey</code> defined.</p>"},{"location":"self-hosted-experimental/#renovate_x_exec_gpid_handle","title":"<code>RENOVATE_X_EXEC_GPID_HANDLE</code>","text":"<p>If set, Renovate will terminate the whole process group of a terminated child process spawned by Renovate.</p>"},{"location":"self-hosted-experimental/#renovate_x_gitlab_auto_approve_token","title":"<code>RENOVATE_X_GITLAB_AUTO_APPROVE_TOKEN</code>","text":"<p>If set, when <code>autoApprove</code> is enabled, the provided token is used to authenticate GitLab approve requests instead of the default one. This is useful in environments where a user cannot approve its own PRs.</p>"},{"location":"self-hosted-experimental/#renovate_x_gitlab_auto_mergeable_check_attemps","title":"<code>RENOVATE_X_GITLAB_AUTO_MERGEABLE_CHECK_ATTEMPS</code>","text":"<p>If set to an positive integer, Renovate will use this as the number of attempts to check if a merge request on GitLab is mergeable before trying to automerge. The formula for the delay between attempts is <code>RENOVATE_X_GITLAB_MERGE_REQUEST_DELAY * attempt * attempt</code> milliseconds.</p> <p>Default value: <code>5</code> (attempts results in max. 13.75 seconds timeout).</p>"},{"location":"self-hosted-experimental/#renovate_x_gitlab_branch_status_check_attempts","title":"<code>RENOVATE_X_GITLAB_BRANCH_STATUS_CHECK_ATTEMPTS</code>","text":"<p>If set to a positive integer, Renovate will use this as the number of attempts to check branch status before trying to add a status check. The delay between attempts is <code>RENOVATE_X_GITLAB_BRANCH_STATUS_DELAY</code> milliseconds.</p> <p>Default value: <code>2</code> (attempts results in maximum 2 seconds timeout).</p> <p>!!! warning Increasing this value too much penalizes projects that do not have defined pipelines, Renovate will systematically wait <code>RENOVATE_X_GITLAB_BRANCH_STATUS_CHECK_ATTEMPTS * RENOVATE_X_GITLAB_BRANCH_STATUS_DELAY</code> milliseconds on these projects and slow down the Renovate analyzes.</p>"},{"location":"self-hosted-experimental/#renovate_x_gitlab_branch_status_delay","title":"<code>RENOVATE_X_GITLAB_BRANCH_STATUS_DELAY</code>","text":"<p>Adjust default time (in milliseconds) given to GitLab to create pipelines for a commit pushed by Renovate.</p> <p>Can be useful for slow-running, self-hosted GitLab instances that don't react fast enough for the default delay to help.</p> <p>Default value: <code>1000</code> (milliseconds).</p>"},{"location":"self-hosted-experimental/#renovate_x_gitlab_merge_request_delay","title":"<code>RENOVATE_X_GITLAB_MERGE_REQUEST_DELAY</code>","text":"<p>If set, Renovate will use this as a delay to proceed with an automerge.</p> <p>Default value: <code>250</code> (milliseconds).</p>"},{"location":"self-hosted-experimental/#renovate_x_gitlab_skip_status_without_pipeline","title":"<code>RENOVATE_X_GITLAB_SKIP_STATUS_WITHOUT_PIPELINE</code>","text":"<p>If set to <code>true</code> value, Renovate will skip setting a branch status check on GitLab when no pipeline is found for the commit. This is useful for GitLab configurations where pipelines are only created for merge requests, not for branches. If the merge request has a merged results pipeline, Renovate sets the status check on that pipeline instead of skipping it.</p>"},{"location":"self-hosted-experimental/#renovate_x_hard_exit","title":"<code>RENOVATE_X_HARD_EXIT</code>","text":"<p>If set to any value, Renovate will use a \"hard\" <code>process.exit()</code> once all work is done, even if a sub-process is otherwise delaying Node.js from exiting. See issue 8660 for background on why this was created.</p>"},{"location":"self-hosted-experimental/#renovate_x_ignore_containerbase_version","title":"<code>RENOVATE_X_IGNORE_CONTAINERBASE_VERSION</code>","text":"<p>If set to any value, Renovate skips the check that the version of the Containerbase image is compatible with Renovate. An image is compatible when it has the same major version as the <code>@containerbase/base</code> package bundled with Renovate and the same or a newer minor or patch version.</p> <p>For instance, when Renovate bundles <code>@containerbase/base</code> <code>14.46.0</code>:</p> Image version Compatible Reason <code>14.46.0</code> yes same version <code>14.46.1</code> yes newer patch version <code>14.50.0</code> yes newer minor version <code>14.45.0</code> no older minor version <code>13.20.0</code> no other major version <code>15.0.0</code> no other major version <p>Development images are not checked. This must be set in the environment of the Renovate process, not via <code>customEnvVariables</code>.</p>"},{"location":"self-hosted-experimental/#renovate_x_ignore_re2","title":"<code>RENOVATE_X_IGNORE_RE2</code>","text":"<p>Skip initializing <code>RE2</code> for regular expressions and instead use Node-native <code>RegExp</code> instead.</p>"},{"location":"self-hosted-experimental/#renovate_x_nuget_download_nupkgs","title":"<code>RENOVATE_X_NUGET_DOWNLOAD_NUPKGS</code>","text":"<p>If set to any value, Renovate will download <code>nupkg</code> files for determining package metadata.</p>"},{"location":"self-hosted-experimental/#renovate_x_nuget_pagination_allow_cross_origin","title":"<code>RENOVATE_X_NUGET_PAGINATION_ALLOW_CROSS_ORIGIN</code>","text":"<p>Warning</p> <p>This is an explicit opt-out of a security control.</p> <p>If set to any value, the <code>nuget</code> datasource will follow paginated <code>next</code> links pointing to a different origin than the feed it is querying.</p> <p>By default Renovate drops such cross-origin pagination links, so a malicious or compromised feed cannot redirect an authenticated request to an attacker-controlled host and exfiltrate credentials. Set this only if you trust the feed and it legitimately paginates across hosts (for example, an absolute <code>next</code> link pointing at a backend host).</p>"},{"location":"self-hosted-experimental/#renovate_x_pgp_runtime","title":"<code>RENOVATE_X_PGP_RUNTIME</code>","text":"<p>Specify which PGP runtime to use for decrypting Renovate config. Allowed values are <code>js-java</code>, <code>wasm-java</code> and <code>wasm-dotnet</code>.</p> <p>Note</p> <p><code>js-java</code> and <code>wasm-dotnet</code> are not recommended due to performance reasons. Incompatible with <code>RENOVATE_X_USE_OPENPGP</code>.</p> <p>Default: <code>wasm-java</code>.</p>"},{"location":"self-hosted-experimental/#renovate_x_platform_version","title":"<code>RENOVATE_X_PLATFORM_VERSION</code>","text":"<p>Specify this string for Renovate to skip API checks and provide Bitbucket server, Forgejo or GitLab version directly. Particularly useful with GitLab's <code>CI_JOB_TOKEN</code> to authenticate Renovate or to reduce API calls for Bitbucket.</p> <p>Read platform details to learn why we need the server version on GitLab.</p>"},{"location":"self-hosted-experimental/#renovate_x_rebase_pagination_links","title":"<code>RENOVATE_X_REBASE_PAGINATION_LINKS</code>","text":"<p>If set, Renovate will rewrite GitHub Enterprise Server's pagination responses to use the <code>endpoint</code> URL from the Renovate config.</p> <p>Note</p> <p>For the GitHub Enterprise Server platform only.</p>"},{"location":"self-hosted-experimental/#renovate_x_sqlite_busy_timeout","title":"<code>RENOVATE_X_SQLITE_BUSY_TIMEOUT</code>","text":"<p>Set the SQLite busy timeout in milliseconds. Defaults to <code>5000</code>.</p> <p>Only applies when <code>RENOVATE_X_SQLITE_PACKAGE_CACHE</code> is set.</p>"},{"location":"self-hosted-experimental/#renovate_x_sqlite_package_cache","title":"<code>RENOVATE_X_SQLITE_PACKAGE_CACHE</code>","text":"<p>If set, Renovate will use SQLite as the backend for the package cache. Don't combine with <code>redisUrl</code>, Redis would be preferred over SQlite.</p>"},{"location":"self-hosted-experimental/#renovate_x_static_repo_config_file","title":"<code>RENOVATE_X_STATIC_REPO_CONFIG_FILE</code>","text":"<p>If set to a valid path pointing to a file containing a valid Renovate configuration in <code>JSON</code> format, it will be applied to the repository config before resolving the actual configuration file within the repository.</p> <p>Warning</p> <p>If the file is missing or contains invalid configuration, the scan will be aborted.</p> <p>Note</p> <p>You probably shouldn\u2019t use this unless you have a very specific reason to override the repository\u2019s normal configuration resolution process.</p>"},{"location":"self-hosted-experimental/#renovate_x_suppress_pre_commit_warning","title":"<code>RENOVATE_X_SUPPRESS_PRE_COMMIT_WARNING</code>","text":"<p>Suppress the pre-commit support warning in PR bodies.</p>"},{"location":"self-hosted-experimental/#renovate_x_use_openpgp","title":"<code>RENOVATE_X_USE_OPENPGP</code>","text":"<p>Note</p> <p>Incompatible with <code>RENOVATE_X_PGP_RUNTIME</code>.</p> <p>Use <code>openpgp</code> instead of Bouncy Castle for <code>PGP</code> decryption.</p>"},{"location":"self-hosted-experimental/#renovate_x_yarn_proxy","title":"<code>RENOVATE_X_YARN_PROXY</code>","text":"<p>Configure global Yarn proxy settings if HTTP proxy environment variables are detected.</p>"},{"location":"semantic-commits/","title":"Semantic Commit messages","text":"<p>Renovate looks at the last 20 commit messages in the base branch to decide if the repository uses semantic commits. If there are Semantic Commits, Renovate uses an algorithm inspired by the conventional-commits-detector package to decide what convention the commit messages follow. Merge commits are ignored when looking for semantic commits, so they do not affect the result.</p> <p>Renovate can only find conventional commits style (including Angular-style conventional commits), it does not \"understand\" other commit conventions.</p> <p>When Renovate finds conventional commits, Renovate creates commit messages and PR titles like this:</p> <ul> <li>chore(deps): update eslint to v7.30.0</li> </ul> <p>By default, Renovate uses the <code>chore</code> prefix.</p> <p>If you extend from <code>config:recommended</code> then Renovate uses the <code>chore</code> prefix for nearly all updates. There are some exceptions:</p> <ul> <li>if the <code>depType</code> is a known \"production dependency\" type (e.g. <code>dependencies</code> or <code>require</code>), then Renovate uses the <code>fix</code> prefix</li> <li>if an update uses the <code>maven</code> datasource and <code>matchDepTypes</code> is a known production type (e.g. <code>compile</code>, <code>provided</code>, <code>runtime</code>, <code>system</code>, <code>import</code> or <code>parent</code>) then Renovate uses the <code>fix</code> prefix</li> </ul> <p>Be aware that the semantic commits feature does not work if you have a <code>commitMessagePrefix</code> configured - <code>commitMessagePrefix</code> will take priority.</p>"},{"location":"semantic-commits/#manually-enabling-or-disabling-semantic-commits","title":"Manually enabling or disabling semantic commits","text":"<p>You can override the default settings, and disable or enable Semantic Commits.</p> If you want Renovate to use Semantic Commits<pre><code>{\n  \"extends\": [\":semanticCommits\"]\n}\n</code></pre> If you want Renovate to stop using Semantic Commits<pre><code>{\n  \"extends\": [\":semanticCommitsDisabled\"]\n}\n</code></pre>"},{"location":"semantic-commits/#changing-the-semantic-commit-type","title":"Changing the Semantic Commit type","text":"<p>You can change the Semantic Commit type that Renovate uses. For example:</p> <ul> <li> <p>If you want Renovate to use the \"chore\" type for every PR, add <code>\":semanticCommitTypeAll(chore)\"</code> to your <code>extends</code> array:</p> <pre><code>{\n  \"extends\": [\":semanticCommitTypeAll(chore)\"]\n}\n</code></pre> <p>PR titles and commit messages start with <code>chore(deps):</code>.</p> </li> <li> <p>If you want Renovate to use the \"ci\" type for every PR, add <code>\":semanticCommitTypeAll(ci)\"</code> to your <code>extends</code> array:</p> <pre><code>{\n  \"extends\": [\":semanticCommitTypeAll(ci)\"]\n}\n</code></pre> <p>PR titles and commit messages start with <code>ci(deps):</code>.</p> </li> </ul>"},{"location":"semantic-commits/#changing-the-semantic-commit-scope","title":"Changing the Semantic Commit scope","text":"<p>You can set your own word for the scope, if you do not like the default \"deps\" scope. For example, to set the scope to \"package\", add the preset <code>\":semanticCommitScope(package)\"</code> to your <code>extends</code> array:</p> <pre><code>{\n  \"extends\": [\":semanticCommitScope(package)\"]\n}\n</code></pre> <p>To remove the Semantic Commit scope, so Renovate uses <code>chore:</code> instead of <code>chore(deps):</code>, add the <code>\":semanticCommitScopeDisabled\"</code> preset to your <code>extends</code> array:</p> <pre><code>{\n  \"extends\": [\":semanticCommitScopeDisabled\"]\n}\n</code></pre>"},{"location":"string-pattern-matching/","title":"String Pattern Matching - Regex or Glob","text":"<p>Renovate string matching syntax for some configuration options allows you, as user, to choose between:</p> <ul> <li><code>minimatch</code> glob patterns, including exact strings matches</li> <li>regular expression (regex) patterns</li> </ul> <p>In cases where there are potentially multiple inputs, e.g. managers can have multiple categories, then the matcher will return <code>true</code> if any of them match.</p>"},{"location":"string-pattern-matching/#special-case-match-everything","title":"Special case: Match everything","text":"<p>The value <code>*</code> is a special case which means \"match everything\". It is not valid to combine <code>*</code> with any other positive or negative match.</p> Example of valid wildcard use<pre><code>{\n  \"allowedEnv\": [\"*\"]\n}\n</code></pre> Example of invalid wildcard use with additional match<pre><code>{\n  \"allowedEnv\": [\"*\", \"ABC\"]\n}\n</code></pre> Example of invalid wildcard use with negation<pre><code>{\n  \"allowedEnv\": [\"*\", \"!ABC\"]\n}\n</code></pre> <p>In the latter case, the <code>*</code> can be omitted and achieve the same thing.</p>"},{"location":"string-pattern-matching/#regex-matching","title":"Regex matching","text":"<p>A valid regex pattern:</p> <ol> <li>Starts with <code>/</code> or <code>!/</code></li> <li>Ends with <code>/</code> or <code>/i</code></li> </ol>"},{"location":"string-pattern-matching/#regex-is-case-sensitive-by-default","title":"Regex is case sensitive by default","text":"<p>By default, regex patterns are evaluated as case sensitive. To ignore case sensitivity you must set the <code>i</code> flag, see the regex patterns table for an example.</p>"},{"location":"string-pattern-matching/#renovate-uses-re2-syntax","title":"Renovate uses re2 syntax","text":"<p>Renovate uses the <code>re2</code> library for regex matching. <code>re2</code> is different from the full regex specification, because <code>re2</code> has a different syntax/support.</p> <p>For the full <code>re2</code> syntax, read the <code>re2</code> syntax wiki page.</p>"},{"location":"string-pattern-matching/#example-regex-patterns","title":"Example regex patterns","text":"Pattern Regex pattern explanation <code>/^abc/</code> matches any string starting with lower-case <code>abc</code> <code>/^abc/i</code> matches any string starting with <code>abc</code> in lower or upper case, or a mix <code>!/^a/</code> matches any string not starting with <code>a</code> in lower case"},{"location":"string-pattern-matching/#use-regex101-to-test-your-patterns","title":"Use regex101 to test your patterns","text":"<p>If you want to test your patterns interactively online, we recommend regex101.com. You can use the Code Generator in the sidebar and copy the regex in the generated \"Alternative syntax\" comment into JSON.</p> <p>Escape the backslashes from regex101</p> <p>Before you copy/paste the regex from regex101 into your Renovate config, you must escape the backslashes (<code>\\</code>) first. For example: <code>\\n\\s</code> \u2192 <code>\\\\n\\\\s</code>.</p>"},{"location":"string-pattern-matching/#glob-matching","title":"Glob matching","text":"<p>If the string provided is not a regex pattern then it will be treated as a glob pattern and parsed using the <code>minimatch</code> library. Although glob patterns were designed originally for file name matching, many users find glob syntax easier to understand than regex so prefer it.</p>"},{"location":"string-pattern-matching/#glob-patterns-always-ignore-casing","title":"Glob patterns always ignore casing","text":"<p>Glob patterns are always evaluated with case insensitivity and you can not change this. If you need a case-sensitive pattern you must use a regex pattern.</p>"},{"location":"string-pattern-matching/#example-glob-patterns","title":"Example glob patterns","text":"Pattern Glob pattern explanation <code>abc123</code> matches <code>abc123</code> exactly, or <code>AbC123</code> <code>abc*</code> matches <code>abc</code>, <code>abc123</code>, <code>ABCabc</code>, but not <code>abc/def</code> <code>abc**/*</code> matches <code>abc/def</code> but not <code>abc</code>, <code>abcd</code>, or <code>abc/def/ghi</code>, <code>abc**/**</code> matches <code>abc/def</code> and <code>abc/def/ghi</code>, but not <code>abc</code> or <code>abcd</code> <code>abc{/,}**</code> matches <code>abc</code>, <code>abcd</code>, <code>abc/def</code>, and <code>abc/def/ghi</code> <p>All matches above are case-insensitive, even if not shown.</p>"},{"location":"string-pattern-matching/#test-your-glob-patterns","title":"Test your glob patterns","text":"<p>If you want to test your glob patterns interactively online, we recommend Digital Ocean's glob tool.</p>"},{"location":"string-pattern-matching/#negative-matching","title":"Negative matching","text":"<p>Renovate has a specific approach to negative matching strings.</p> <p>\"Positive\" matches are patterns (in glob or regex) which do not start with <code>!</code>. \"Negative\" matches are patterns starting with <code>!</code>, like <code>!/^a/</code> or <code>!b*</code>.</p> <p>For an array of patterns to match, the following must be true:</p> <ul> <li>If any positive matches are included, at least one must match</li> <li>If any negative matches are included, none must match</li> </ul> <p>For example, the pattern <code>[\"/^abc/\", \"!/^abcd/\", \"!/abce/\"]</code>:</p> <ul> <li>matches <code>\"abc\"</code> and <code>\"abcf\"</code></li> <li>does not match <code>\"foo\"</code>, <code>\"abcd\"</code>, <code>\"abce\"</code>, or <code>\"abcdef\"</code></li> </ul> <p>If you find yourself in a situation where you need to positive-match a string which starts with <code>!</code>, then you need to do so using a regular expression pattern. For example, <code>[\"/^!abc$/\"]</code> will positively match against the string <code>\"!abc\"</code>.</p> <p>One limitation of negative matching is when there may be multiple inputs to match against. For example, a manager may have multiple categories, such as <code>java</code> and <code>docker</code>. If you have a rule such as <code>\"matchCategories\": [\"!docker\"]</code> then this will return <code>true</code> because the <code>java</code> category satisfies this rule.</p>"},{"location":"string-pattern-matching/#usage-in-renovate-configuration-options","title":"Usage in Renovate configuration options","text":"<p>Renovate has evolved its approach to string pattern matching over time, but this means that existing configurations may have a mix of approaches and not be entirely consistent with each other.</p> <p>The configuration options that support \"regex or glob\" syntax mention this in their documentation, and also link to this page.</p>"},{"location":"templates/","title":"Template fields","text":"<p>In order to provide flexible configuration, Renovate supports using \"templates\" for certain fields like <code>addLabels</code>, <code>branchName</code>, <code>extractVersionTemplate</code>, <code>labels</code>.</p> <p>Renovate's templates use handlebars under the hood. You can recognize templates when you see strings like <code>{{depName}}</code> in configuration fields.</p> <p>Below you can find lists of fields/values that you can use in templates. Some are configuration options passed through, while others are generated as part of Renovate's run.</p> <p><code>logJSON</code> and <code>releases</code> are only allowed in <code>commitBody</code> template.</p>"},{"location":"templates/#options-that-support-templating","title":"Options that support templating","text":"<p>The following configuration options accept Handlebars template syntax in their values:</p> <ul> <li><code>additionalBranchPrefix</code></li> <li><code>addLabels</code></li> <li><code>allowedVersions</code></li> <li><code>autoReplaceStringTemplate</code></li> <li><code>branchName</code></li> <li><code>branchPrefix</code></li> <li><code>branchTopic</code></li> <li><code>bumpType</code></li> <li><code>changelogUrl</code></li> <li><code>commands</code></li> <li><code>commitBody</code></li> <li><code>commitMessage</code></li> <li><code>commitMessageAction</code></li> <li><code>commitMessageExtra</code></li> <li><code>commitMessagePrefix</code></li> <li><code>commitMessageSuffix</code></li> <li><code>commitMessageTopic</code></li> <li><code>commitTrailers</code></li> <li><code>currentValueTemplate</code></li> <li><code>dataFileTemplate</code></li> <li><code>datasourceTemplate</code></li> <li><code>defaultRegistryUrlTemplate</code></li> <li><code>dependencyDashboardFooter</code></li> <li><code>dependencyDashboardHeader</code></li> <li><code>depNameTemplate</code></li> <li><code>depTypeTemplate</code></li> <li><code>extractVersionTemplate</code></li> <li><code>filePatterns</code></li> <li><code>gitAuthor</code></li> <li><code>groupName</code></li> <li><code>groupSlug</code></li> <li><code>inheritConfigRepoName</code></li> <li><code>labels</code></li> <li><code>matchStrings</code></li> <li><code>overrideDepName</code></li> <li><code>overridePackageName</code></li> <li><code>packageNameTemplate</code></li> <li><code>prBodyNotes</code></li> <li><code>prBodyTemplate</code></li> <li><code>prFooter</code></li> <li><code>prHeader</code></li> <li><code>prTitle</code></li> <li><code>registryUrlTemplate</code></li> <li><code>replacementNameTemplate</code></li> <li><code>replacementVersionTemplate</code></li> <li><code>semanticCommitScope</code></li> <li><code>semanticCommitType</code></li> <li><code>sourceDirectory</code></li> <li><code>sourceUrl</code></li> <li><code>transformTemplates</code></li> <li><code>userAgent</code></li> <li><code>versioningTemplate</code></li> <li><code>workingDirTemplate</code></li> </ul>"},{"location":"templates/#exposed-config-options","title":"Exposed config options","text":"<p>The following configuration options are passed through for templating: </p> <ul> <li><code>addLabels</code></li> <li><code>additionalBranchPrefix</code></li> <li><code>allowedVersions</code></li> <li><code>branchName</code></li> <li><code>branchPrefix</code></li> <li><code>branchTopic</code></li> <li><code>commitBody</code></li> <li><code>commitMessage</code></li> <li><code>commitMessageAction</code></li> <li><code>commitMessageExtra</code></li> <li><code>commitMessagePrefix</code></li> <li><code>commitMessageSuffix</code></li> <li><code>commitMessageTopic</code></li> <li><code>gitAuthor</code></li> <li><code>group</code></li> <li><code>groupName</code></li> <li><code>groupSlug</code></li> <li><code>labels</code></li> <li><code>prBodyColumns</code></li> <li><code>prBodyDefinitions</code></li> <li><code>prBodyNotes</code></li> <li><code>prTitle</code></li> <li><code>semanticCommitScope</code></li> <li><code>semanticCommitType</code></li> <li><code>separateMajorMinor</code></li> <li><code>separateMinorPatch</code></li> <li><code>separateMultipleMinor</code></li> <li><code>sourceDirectory</code></li> </ul>"},{"location":"templates/#other-available-fields","title":"Other available fields","text":"<p>The following runtime values are passed through for templating: </p> <ul> <li><code>baseBranch</code>: The baseBranch for this branch/PR</li> <li><code>body</code>: The body of the release notes</li> <li><code>categories</code>: The categories of the manager of the dependency being updated</li> <li><code>currentValue</code>: The extracted current value of the dependency being updated</li> <li><code>currentVersion</code>: The version that would be currently installed. For example, if currentValue is ^3.0.0 then currentVersion might be 3.1.0.</li> <li><code>currentVersionAgeInDays</code>: The age of the current version in days</li> <li><code>currentVersionTimestamp</code>: The timestamp of the current version</li> <li><code>currentDigest</code>: The extracted current digest of the dependency being updated</li> <li><code>currentDigestShort</code>: The extracted current short digest of the dependency being updated</li> <li><code>datasource</code>: The datasource used to look up the upgrade</li> <li><code>depName</code>: The name of the dependency being updated</li> <li><code>depNameLinked</code>: The dependency name already linked to its home page using markdown</li> <li><code>depNameSanitized</code>: The depName field sanitized for use in branches after removing spaces and special characters</li> <li><code>depType</code>: The dependency type (if extracted - manager-dependent)</li> <li><code>depTypes</code>: A deduplicated array of dependency types (if extracted - manager-dependent) in a branch</li> <li><code>displayFrom</code>: The current value, formatted for display</li> <li><code>displayPending</code>: Latest pending update, if internalChecksFilter is in use</li> <li><code>displayTo</code>: The to value, formatted for display</li> <li><code>effectiveDatasource</code>: The datasources used to fetch releases after delegation</li> <li><code>hasReleaseNotes</code>: true if the upgrade has release notes</li> <li><code>indentation</code>: The indentation of the dependency being updated</li> <li><code>isGroup</code>: true if the upgrade is part of a group</li> <li><code>isLockfileUpdate</code>: true if the branch is a lock file update</li> <li><code>isMajor</code>: true if the upgrade is major</li> <li><code>isMinor</code>: true if the upgrade is minor</li> <li><code>isPatch</code>: true if the upgrade is a patch upgrade</li> <li><code>isPin</code>: true if the upgrade is pinning dependencies</li> <li><code>isPinDigest</code>: true if the upgrade is pinning digests</li> <li><code>isRollback</code>: true if the upgrade is a rollback PR</li> <li><code>isReplacement</code>: true if the upgrade is a replacement</li> <li><code>isRange</code>: true if the new value is a range</li> <li><code>isSingleVersion</code>: true if the upgrade is to a single version rather than a range</li> <li><code>isVulnerabilityAlert</code>: true if the upgrade is a vulnerability alert</li> <li><code>logJSON</code>: ChangeLogResult object for the upgrade</li> <li><code>manager</code>: The (package) manager which detected the dependency</li> <li><code>newDigest</code>: The new digest value</li> <li><code>newDigestShort</code>: A shortened version of newDigest, for use when the full digest is too long to be conveniently displayed</li> <li><code>newMajor</code>: The major version of the new version. e.g. \"3\" if the new version is \"3.1.0\"</li> <li><code>newMinor</code>: The minor version of the new version. e.g. \"1\" if the new version is \"3.1.0\"</li> <li><code>newPatch</code>: The patch version of the new version. e.g. \"0\" if the new version is \"3.1.0\"</li> <li><code>newName</code>: The name of the new dependency that replaces the current deprecated dependency</li> <li><code>newNameLinked</code>: The new dependency name already linked to its home page using markdown</li> <li><code>newValue</code>: The new value in the upgrade. Can be a range or version e.g. \"^3.0.0\" or \"3.1.0\"</li> <li><code>newVersion</code>: The new version in the upgrade, e.g. \"3.1.0\"</li> <li><code>newVersionAgeInDays</code>: The age of the new version in days</li> <li><code>major</code>: The major version of the current version. e.g. \"3\" if the current version is \"3.1.0\"</li> <li><code>minor</code>: The minor version of the current version. e.g. \"1\" if the current version is \"3.1.0\"</li> <li><code>patch</code>: The patch version of the current version. e.g. \"0\" if the current version is \"3.1.0\"</li> <li><code>packageFile</code>: The filename that the dependency was found in</li> <li><code>packageFileDir</code>: The directory with full path where the packageFile was found</li> <li><code>packageName</code>: The full name that was used to look up the dependency</li> <li><code>packageScope</code>: The scope of the package name. Supports Maven group ID only</li> <li><code>parentDir</code>: The name of the directory that the dependency was found in, without full path</li> <li><code>parentOrg</code>: The name of the parent organization for the current repository</li> <li><code>platform</code>: VCS platform in use, e.g. \"github\", \"gitlab\", etc.</li> <li><code>prettyDepType</code>: Massaged depType</li> <li><code>prettyNewMajor</code>: The new major value with v prepended to it.</li> <li><code>prettyNewVersion</code>: The new version value with v prepended to it.</li> <li><code>project</code>: ChangeLogProject object</li> <li><code>recreateClosed</code>: If true, this PR will be recreated if closed</li> <li><code>references</code>: A list of references for the upgrade</li> <li><code>releases</code>: An array of releases for an upgrade</li> <li><code>releaseNotes</code>: A ChangeLogNotes object for the release</li> <li><code>releaseTimestamp</code>: The timestamp of the release</li> <li><code>renovateVersion</code>: The currently running Renovate version.</li> <li><code>repository</code>: The current repository</li> <li><code>semanticPrefix</code>: The fully generated semantic prefix for commit messages</li> <li><code>sourceRepo</code>: The repository in the sourceUrl, if present</li> <li><code>sourceRepoName</code>: The repository name in the sourceUrl, if present</li> <li><code>sourceRepoOrg</code>: The repository organization in the sourceUrl, if present</li> <li><code>sourceRepoSlug</code>: The slugified pathname of the sourceUrl, if present</li> <li><code>sourceUrl</code>: The source URL for the package</li> <li><code>topLevelOrg</code>: The name of the top-level organization for the current repository</li> <li><code>updateType</code>: One of digest, pin, rollback, patch, minor, major, replacement, pinDigest</li> <li><code>upgrades</code>: An array of upgrade objects in the branch</li> <li><code>url</code>: The url of the release notes</li> <li><code>version</code>: The version number of the changelog</li> <li><code>versioning</code>: The versioning scheme in use</li> <li><code>versions</code>: An array of ChangeLogRelease objects in the upgrade</li> <li><code>vulnerabilitySeverity</code>: The severity for a vulnerability alert upgrade (LOW, MEDIUM, MODERATE, HIGH, CRITICAL, UNKNOWN)</li> </ul>"},{"location":"templates/#additional-handlebars-helpers","title":"Additional Handlebars helpers","text":""},{"location":"templates/#add","title":"add","text":"<p>Returns the sum of the fields.</p> <p><code>{{add major 1}}</code></p> <p>In the example above, it will add <code>1</code> to the <code>major</code> of current version and return the value.</p>"},{"location":"templates/#and","title":"and","text":"<p>Returns <code>true</code> only if all expressions are <code>true</code>.</p> <p><code>{{#if (and isMajor hasReleaseNotes)}}Backwards Incompatible release! Check out the Release notes.{{/if}}</code></p> <p>In the example above, it will only show a text if <code>isMajor=true</code> and <code>hasReleaseNotes=true</code>.</p>"},{"location":"templates/#containsstring","title":"containsString","text":"<p>Returns <code>true</code> if a given string is a substring.</p> <p><code>{{#if (containsString depName 'python')}}Python{{else}}Other{{/if}}</code></p>"},{"location":"templates/#decodebase64","title":"decodeBase64","text":"<p>If you want to convert a Base64 value to a string, use the built-in function <code>decodeBase64</code> like this:</p> <p><code>{{{decodeBase64 body}}}</code></p> <p>In the example above <code>body</code> is the base64 encoded value you want to decode.</p>"},{"location":"templates/#decodeuricomponent","title":"decodeURIComponent","text":"<p>If you want to decode a percent-encoded string, use the built-in function <code>decodeURIComponent</code> like this:</p> <p><code>{{{decodeURIComponent depName}}}</code></p> <p>In the example above <code>depName</code> is the string you want to decode.</p> <p>Read the MDN Web Docs, decodeURIComponent() to learn more.</p>"},{"location":"templates/#distinct","title":"distinct","text":"<p>Removes duplicate elements from an array.</p> <p><code>{{#each (distinct (lookupArray (lookupArray upgrades \"prBodyDefinitions\") \"Issue\"))}} {{{.}}}{{/each}}</code></p>"},{"location":"templates/#encodebase64","title":"encodeBase64","text":"<p>If you want to convert a string to Base64, use the built-in function <code>encodeBase64</code> like this:</p> <p><code>{{{encodeBase64 body}}}</code></p> <p>In the example above <code>body</code> is the string you want to transform into a Base64-encoded value.</p>"},{"location":"templates/#encodeuricomponent","title":"encodeURIComponent","text":"<p>If you want to convert a string to a valid URI, use the built-in function <code>encodeURIComponent</code> like this:</p> <p><code>{{{encodeURIComponent baseDir}}}</code></p> <p>In the example above <code>baseDir</code> is the string you want to transform into a valid URI.</p> <p>Read the MDN Web Docs, encodeURIComponent() to learn more.</p>"},{"location":"templates/#equals","title":"equals","text":"<p>Returns <code>true</code> if two values are equal (checks strict equality, i.e. <code>===</code>).</p> <p><code>{{#if (equals datasource 'git-refs')}}git-refs{{else}}Other{{/if}}</code></p>"},{"location":"templates/#includes","title":"includes","text":"<p>Returns <code>true</code> if an array contains a given string element.</p> <p><code>{{#if (includes labels 'ci')}}Has CI label{{else}}No CI label{{/if}}</code></p>"},{"location":"templates/#lookuparray","title":"lookupArray","text":"<p>Similar to the built-in <code>lookup</code> helper, but performs lookups in every element of an array, instead of just one object.</p> <p>For example:</p> <p><code>{{#each (lookupArray upgrades \"prBodyDefinitions\")}} {{{Issue}}}{{/each}}</code></p> <p>will produce the same output as:</p> <p><code>{{#each upgrades}}{{#with prBodyDefinitions}} {{{Issue}}}{{/with}}{{/each}}</code>.</p> <p>The return value of <code>lookupArray</code> can be passed to other helpers - for example, to <code>distinct</code>.</p>"},{"location":"templates/#lowercase","title":"lowercase","text":"<p>The <code>lowercase</code> helper converts a given string to lower case.</p> <p><code>{{{ lowercase depName }}}</code></p>"},{"location":"templates/#or","title":"or","text":"<p>Returns <code>true</code> if at least one expression is <code>true</code>.</p> <p><code>{{#if (or isPatch isSingleVersion}}Small update, safer to merge and release.{{else}}Check out the changelog for all versions before merging!{{/if}}</code></p>"},{"location":"templates/#replace","title":"replace","text":"<p>The <code>replace</code> helper replaces all found strings matching the given regex with the replacement string. If you want to replace some characters in a string, use the built-in function <code>replace</code> like this:</p> <p><code>{{{replace '[a-z]+\\\\.github\\\\.com' 'ghc' depName}}}</code></p> <p>In the example above all matches of the regex <code>[a-z]+\\.github\\.com</code> will be replaced by <code>ghc</code> in <code>depName</code>.</p> <p>Read the MDN Web Docs, String.prototype.replace() to learn more.</p>"},{"location":"templates/#split","title":"split","text":"<p>Splits a string into an array of substrings.</p> <p>This example splits a package name by <code>-</code> and gets the second part: <code>{{ lookup (split packageName '-') 1 }}</code> An input of <code>foo-bar-test</code> therefore would return <code>bar</code>.</p>"},{"location":"templates/#stringtoprettyjson","title":"stringToPrettyJSON","text":"<p>If you want to print pretty JSON with Handlebars you can use the built-in function <code>stringToPrettyJSON</code> like this:</p> <p><code>{{{stringToPrettyJSON myvar}}}</code></p> <p>In the example above <code>myvar</code> is a variable/field, that has valid JSON.</p>"},{"location":"templates/#toarray","title":"toArray","text":"<p>If you want to convert elements to an array, use <code>toArray</code>, e.g.,</p> <p><code>{{{ toJSON (toArray 'value1' 'value2' 'value3') }}}</code> will render <code>[\"value1\",\"value2\",\"value3\"]</code>.</p>"},{"location":"templates/#tojson","title":"toJSON","text":"<p>If you want to convert an object to a JSON string, you can use the built-in function <code>toJSON</code> like this:</p> <p><code>{{{ toJSON upgrades }}}</code></p>"},{"location":"templates/#toobject","title":"toObject","text":"<p>If you want to convert key-value pairs to an object, use <code>toObject</code>, e.g.,</p> <p><code>{{{ toJSON (toObject 'key1' 'value1' 'key2' 'value2') }}}</code> will render <code>{\"key1\":\"value1\",\"key2\":\"value2\"}</code>.</p>"},{"location":"templates/#uppercase","title":"uppercase","text":"<p>The <code>uppercase</code> helper converts a given string to upper case.</p> <p><code>{{{ uppercase depName }}}</code></p>"},{"location":"templates/#environment-variables","title":"Environment variables","text":"<p>By default, templates can only access a subset of environment variables like <code>HOME</code> or <code>PATH</code>. This is for security reasons.</p> <p>You can reference environment variables like so:</p> <p><code>HOME is {{env.HOME}}</code></p> <p>If you're self-hosting Renovate, you can expose more variables with the <code>customEnvVariables</code> config option, which will also be available to all child processes.</p> <p>See also: environment variable handling.</p> <p>Warning</p> <p>It is possible to use the <code>exposeAllEnv</code> config option to allow all environment variables in templates, but make sure to consider the security implications of giving the scripts unrestricted access to all variables.</p>"},{"location":"troubleshooting/","title":"Troubleshooting Renovate","text":"<p>Learn how to troubleshoot problems with Renovate, where to find the logging output, and how to get help if needed.</p>"},{"location":"troubleshooting/#getting-the-logs","title":"Getting the logs","text":"<p>Renovate's debug-level logs are usually enough to help troubleshoot most problems. Where you can find the logs depends on how you're running Renovate.</p>"},{"location":"troubleshooting/#the-mend-renovate-app","title":"The Mend Renovate App","text":"<p>Each pull request from the Mend Renovate App has a link to the Mend Developer Portal in the PR body text.</p> <p>The text you're looking for is:</p> <p>This PR was generated by Mend Renovate CLI. View the repository job log.</p> <p>Select the blue text \"repository job log\" to go to the Recent jobs page in the Mend Developer Portal. Sign in with your GitHub account. Once you're logged in, you can see the logs for the Renovate jobs on your repository. You should have access to any repository which you have write access to and which has Renovate installed.</p> <p>The Mend Renovate App provides logs for the most recent 2 weeks of logs, for each repository.</p> <p>After selecting a recent job, you can select the debug level that you care about. For a full overview, select the <code>DEBUG</code> log level.</p>"},{"location":"troubleshooting/#self-hosted","title":"Self-hosted","text":"<p>The easiest way to gather logs from Renovate for any platform is to use the default logging to <code>stdout</code>/console. By default, Renovate will log in a human-readable format at <code>INFO</code> level.</p> <p>For troubleshooting it's recommended to increase logging to <code>DEBUG</code> level by adding <code>LOG_LEVEL=debug</code> to your environment variables before invoking Renovate.</p> <p>If your Renovate logs are being processed by a log service before you access them, you may find it better to have Renovate output logs in JSON format instead so that they can be reliably parsed and filtered. This can be achieved by adding <code>LOG_FORMAT=json</code> to your environment variables before invoking Renovate.</p>"},{"location":"troubleshooting/#log-debug-levels","title":"Log debug levels","text":"<p>There are different severity levels for the log output. From least severe to most severe:</p> <ul> <li><code>DEBUG</code></li> <li><code>INFO</code></li> <li><code>WARN</code></li> <li><code>ERROR</code></li> <li><code>FATAL</code></li> </ul> <p>To check for problems, look for <code>WARN</code> or <code>ERROR</code> logs (level 40 or 50 if in JSON format). To troubleshoot further, you usually need to look at <code>DEBUG</code> logs.</p>"},{"location":"troubleshooting/#resolving-problems-using-logs","title":"Resolving problems using logs","text":"<p>We recommend you follow this process:</p> <ol> <li>Try to narrow in on the problem area e.g. by looking for relevant branches or <code>WARN</code> or <code>ERROR</code> messages</li> <li>Find all relevant <code>DEBUG</code> or <code>INFO</code> messages from before and after the problem occurred</li> <li>Copy/paste the relevant parts of the logs into your discussion post or bug report</li> </ol> <p>If you cannot fix the problem yourself after reading the logs, and reading - or searching through - our documentation, search the <code>renovatebot/renovate</code> discussion forum to see if somebody has asked a similar or related question.</p> <p>If none of these steps have helped you, then create a new discussion post to get help from the Renovate maintainers.</p> <p>Please locate the relevant parts of the logs as described earlier before asking for help or posting a bug report. Do not expect the Renovate maintainers to read through the full logs when trying to help you, as that takes a lot of time on our part. If later it turns out that the full logs are necessary, you will be asked for them then.</p>"},{"location":"troubleshooting/#validating-configuration-changes","title":"Validating configuration changes","text":"<p>Sometimes you will have to change your Renovate configuration to solve a problem. The <code>renovate-config-validator</code> program helps validate such configuration changes without committing them to your repository.</p>"},{"location":"updating-rebasing/","title":"Updating and rebasing branches","text":"<p>There are many situations in which Renovate must update/rebase a branch.</p> <p>Here is a list of the most common cases where Renovate must update/rebase the branch:</p> <ul> <li>When a pull request has conflicts due to changes on the base branch</li> <li>When you have enabled \"Require branches to be up to date before merging\" on GitHub</li> <li>When you have manually told Renovate to rebase when behind the base branch with <code>\"rebaseWhen\": \"behind-base-branch\"</code></li> <li>When you have set <code>keepUpdatedLabel</code> and included the label on a PR</li> <li>When a newer version of the dependency is released</li> <li>When you request a manual rebase from Renovate</li> <li>When you use <code>\"automerge\": true</code> and <code>\"rebaseWhen\": \"auto\"</code> on a branch / pr</li> </ul> <p>Renovate uses its own version of \"rebasing\", which is not the same as doing a <code>git rebase</code> with Git. Instead, Renovate reapplies all updates into a new commit based off of the head of the base branch.</p>"},{"location":"updating-rebasing/#no-rebasing-if-you-have-made-edits","title":"No rebasing if you have made edits","text":"<p>First of all, here is the one time when Renovate won't update branches. If you push a new commit to a Renovate branch, for example to fix your code so the tests pass, then Renovate stops all updates of that branch. It is up to you to either finish the job and merge the PR, or rename it and close it so that Renovate can take over again.</p> <p>Warning</p> <p>Do not amend Renovate's commits, because Renovate will rebase over your amended commit. Keep your work safe and always push your own new commit to any Renovate branch.</p>"},{"location":"updating-rebasing/#rebasing-conflicted-prs","title":"Rebasing conflicted PRs","text":"<p>If new commits to the base branch - such as merging another Renovate PR - result in an open Renovate PR having merge conflicts, then Renovate will recreate (\"rebase\") any conflicted PRs. This applies both to commits to dependency files such as <code>package.json</code> as well as lock files such as <code>yarn.lock</code>. You should not ever need to resolve such conflicts manually. You can disable this functionality by configuring <code>\"rebaseWhen\": \"never\"</code> (not recommended).</p>"},{"location":"updating-rebasing/#rebasing-out-of-date-branches","title":"Rebasing out-of-date branches","text":"<p>There are multiple cases where Renovate will rebase its branches off the base branch every time they are out of date:</p> <ol> <li>If you configure <code>\"rebaseWhen\": \"behind-base-branch\"</code></li> <li>If you use the default configuration <code>\"rebaseWhen\": \"auto\"</code> and the repository has a requirement that branches must be up-to-date before merging (e.g. \"Require branches to be up to date before merging\" on GitHub, or fast-forward-only settings on Bitbucket Server or GitLab)</li> <li>If you use the default configuration <code>\"rebaseWhen\" : \"auto\"</code> and configure <code>\"automerge\" : true</code></li> </ol> <p>In that case Renovate PRs will be rebased off the repository's base branch whenever they are behind the base branch, even if the PRs are not conflicted.</p>"},{"location":"updating-rebasing/#newer-dependency-versions","title":"Newer dependency versions","text":"<p>If an existing PR is open to upgrade dependency \"foo\" to v1.1.0 and then v1.1.1 is released, then Renovate will regenerate the branch again. This way:</p> <ul> <li>Each Renovate branch will always have 1 and only 1 commit</li> <li>The newest version will be based off the latest base branch commit at the time</li> </ul>"},{"location":"updating-rebasing/#manual-rebasing","title":"Manual rebasing","text":"<p>You can request that Renovate rebase a PR by selecting the rebase/retry checkbox on GitHub or GitLab. Or you can add a \"rebase\" label to the PR. The label name is configurable via the <code>rebaseLabel</code> option.</p> <p>If you apply a rebase label then Renovate will regenerate its commit for the branch, even if the branch has been modified. The rebase label is useful in situations like:</p> <ul> <li>If a branch is behind the base branch but you don't have <code>rebaseWhen=behind-base-branch</code> enabled</li> <li>If a branch has been edited and you want to discard the edits and have Renovate create it again</li> <li>If a branch was created with an error (e.g. lockfile generation) and you want Renovate to try again</li> </ul>"},{"location":"upgrade-best-practices/","title":"Upgrade best practices","text":"<p>This page explains what we (the Renovate maintainers) recommend you do to update your dependencies.</p>"},{"location":"upgrade-best-practices/#general-recommendations","title":"General recommendations","text":"<p>In general, you should:</p> <ul> <li>Run Renovate on every repository</li> <li>Use the <code>config:best-practices</code> preset, instead of the <code>config:recommended</code> preset</li> <li>Use the Dependency Dashboard issue (it's on by default)</li> <li>Update your dependencies often</li> <li>Read the changelogs for the updates</li> <li>Update to new <code>major</code> versions in good time</li> <li>Talk with your team about the update strategy</li> </ul> <p>If Renovate is too noisy for you, read the noise reduction docs.</p>"},{"location":"upgrade-best-practices/#use-the-configbest-practices-preset","title":"Use the <code>config:best-practices</code> preset","text":"<p>The <code>config:recommended</code> preset is the recommended configuration for most Renovate users. Renovate also has a <code>config:best-practices</code> preset that includes our upgrade best practices.</p> <p>You should extend from the <code>config:best-practices</code> preset:</p> <pre><code>{\n  \"extends\": [\"config:best-practices\"]\n}\n</code></pre> <p>If you're using <code>config:recommended</code> now, replace it with <code>config:best-practices</code>:</p> <pre><code>- \"extends\": [\"config:recommended\"]\n+ \"extends\": [\"config:best-practices\"]\n</code></pre>"},{"location":"upgrade-best-practices/#whats-in-the-configbest-practices-preset","title":"What's in the <code>config:best-practices</code> preset?","text":"<p>The <code>config:best-practices</code> preset has this configuration:</p> <pre><code>{\n  \"extends\": [\n    \"config:recommended\",\n    \"docker:pinDigests\",\n    \"helpers:pinGitHubActionDigests\",\n    \":configMigration\",\n    \":pinDevDependencies\",\n    \"abandonments:recommended\",\n    \"security:minimumReleaseAgeNpm\",\n    \":maintainLockFilesWeekly\"\n  ]\n}\n</code></pre> <p>The next sections explain what each part of the preset does.</p>"},{"location":"upgrade-best-practices/#config-migration","title":"Config migration","text":"<p>Renovate creates a config migration PR to replace old config option names with their new replacements. This way your configuration file and the Renovate docs always use the same terms.</p> <p>You'll get config migration PRs no matter how you run Renovate: self-hosting or the Mend Renovate app.</p>"},{"location":"upgrade-best-practices/#extends-configrecommended","title":"Extends <code>config:recommended</code>","text":"<p>The <code>config:recommended</code> preset is a good base to start from. That's why we extend from it.</p>"},{"location":"upgrade-best-practices/#extends-dockerpindigests","title":"Extends <code>docker:pinDigests</code>","text":"<p>The Renovate docs, Docker Digest pinning section explains why you should pin your Docker containers to an exact digest.</p>"},{"location":"upgrade-best-practices/#extends-helperspingithubactiondigests","title":"Extends <code>helpers:pinGitHubActionDigests</code>","text":"<p>The GitHub Docs, using third-party actions recommend that you pin third-party GitHub Actions to a full-length commit SHA.</p> <p>We recommend pinning all Actions. That's why the <code>helpers:pinGitHubActionDigests</code> preset pins all GitHub Actions.</p> <p>For an in-depth explanation why you should pin your Github Actions, read the Palo Alto Networks blog post about the GitHub Actions worm.</p>"},{"location":"upgrade-best-practices/#extends-pindevdependencies","title":"Extends <code>:pinDevDependencies</code>","text":"<p>Pinning your development dependencies means you, and your team, are using the same versions of development tools. This makes the developer-tool side of your builds reproducible. Debugging faulty versions of your tools is easier, because you can use Git to check out different versions of the tools.</p>"},{"location":"upgrade-best-practices/#why-updating-often-is-easier-faster-and-safer","title":"Why updating often is easier, faster and safer","text":"<p>You may think that updating takes too much time. But updating regularly actually saves you time, because:</p> <ul> <li>Regular updates tend to be small</li> <li>Applying <code>major</code> updates is easier</li> <li>You'll be ready for CVE patches</li> <li>You'll look for ways to automate the updates</li> </ul>"},{"location":"upgrade-best-practices/#regular-updates-tend-to-be-small","title":"Regular updates tend to be small","text":"<p>Firstly, when you update regularly updates tend to be small. The update's changelogs are small, quick to read, and easy to understand. You probably only need to make changes in a few places (if at all) to merge the PR and get going again. Because you're reading the changelogs regularly, you'll get a feel for the direction of the upstream project.</p>"},{"location":"upgrade-best-practices/#applying-major-updates-is-easier","title":"Applying <code>major</code> updates is easier","text":"<p>Secondly, when you're current with upstream, <code>major</code> updates are easier. This is because you already:</p> <ul> <li>follow the latest best practices of upstream</li> <li>use the latest names for features/variables</li> <li>read the previous changelogs</li> </ul>"},{"location":"upgrade-best-practices/#youll-be-ready-for-cve-patches","title":"You'll be ready for CVE patches","text":"<p>Thirdly, you'll be ready when a upstream package releases a patch for a critical CVE. If you're current, you can review and merge Renovate's PR quickly.</p> <p>When you're behind on updates, you'll have a bad time, because you must read more changelogs and make more changes before you can merge the critical patch.</p>"},{"location":"upgrade-best-practices/#youll-look-for-ways-to-automate-the-updates","title":"You'll look for ways to automate the updates","text":"<p>Finally, when you're updating often, you'll start looking for ways to automate the updates. You may start to <code>automerge</code> development dependencies like Prettier, or ESLint when the linter passes. Or you may decide to automerge any <code>patch</code> type upgrades, by using the <code>default:automergePatch</code> preset.</p>"},{"location":"upgrade-best-practices/#wait-two-weeks-before-automerging-third-party-dependencies","title":"Wait two weeks before automerging third-party dependencies","text":"<p>If you <code>automerge</code> third-party dependencies, we recommend setting <code>minimumReleaseAge</code> to <code>\"14 days\"</code>. By waiting two weeks before automerging the dependencies, you give the upstream registries time to pull malicious dependencies, before Renovate merges them. If you want a third-party dependency update now, instead of waiting two weeks, you can request the update from the Dependency Dashboard.</p>"},{"location":"upgrade-best-practices/#use-github-pull-request-merge-queues","title":"Use GitHub Pull Request Merge Queues","text":"<p>You may also start using GitHub's pull request merge queues to speed up the merge process. On GitLab projects with merge trains enabled, Renovate adds automerged MRs to the merge train automatically (requires GitLab 17.11 or later).</p>"},{"location":"upgrade-best-practices/#starting-from-a-new-project","title":"Starting from a new project","text":"<p>Let's assume you're starting a new project. You created a new Git repository, installed the latest frameworks, libraries and development tools. After pushing the initial commit, you should enable and onboard Renovate.</p> <p>Now you'll have to stay on the \"update often\" train.</p>"},{"location":"upgrade-best-practices/#project-with-one-year-old-dependencies","title":"Project with one year old dependencies","text":"<p>If you have a project that's a year behind on dependencies, you'll need to do some work. Let's assume that most dependencies need a <code>patch</code> or <code>minor</code> update, and at least one dependency needs a <code>major</code> update.</p> <p>Start small, and get the <code>patch</code> and <code>minor</code> updates first. Read the changelogs for your updates. You may have to make small changes to get things working again.</p> <p>When you have the latest <code>patch</code> and <code>minor</code> versions, you are ready for <code>major</code> updates. Start with <code>major</code> version updates for tools like Prettier or ESLint.</p> <p>Then work on <code>major</code> updates for your framework or library. Take your time, read the changelogs, and make the necessary changes. Let multiple team members review your work before merging, it's easy to miss something.</p> <p>Finally, update your development tools.</p> <p>Now you're up to date, you should think how to make updating a regular habit.</p>"},{"location":"upgrade-best-practices/#project-with-five-year-old-dependencies","title":"Project with five year old dependencies","text":"<p>Let's assume your Dependency Dashboard lists more than 50 updates, and you have a few <code>major</code> version updates pending. If your project is this badly behind on updates, you have two problems:</p> <ul> <li>Updating your dependencies</li> <li>Improving your update process</li> </ul>"},{"location":"upgrade-best-practices/#focus-on-critical-updates-first","title":"Focus on critical updates first","text":"<p>Fix the easier problem first: getting back up to date. Update any dependencies that have critical updates for CVEs or other security related improvements.</p> <p>If you're on the GitHub platform: follow the steps listed in the <code>vulnerabilityAlerts</code> docs to make sure Renovate is reading GitHub's Vulnerability Alerts.</p> <p>You may want to enable the experimental <code>osvVulnerabilityAlerts</code> config option, to get OSV-based vulnerability alerts for direct dependencies. Read the <code>osvVulnerabilityAlerts</code> config option docs to learn more.</p>"},{"location":"upgrade-best-practices/#fix-blocking-updates","title":"Fix blocking updates","text":"<p>Next, update any dependency that's blocking another update. You may need to update dependency <code>A</code> before you can update dependency <code>B</code> or <code>C</code>. In that case, update dependency <code>A</code> first.</p>"},{"location":"upgrade-best-practices/#update-to-latest-minor-or-patch-of-current-version","title":"Update to latest <code>minor</code> or <code>patch</code> of current version","text":"<p>Then update all dependencies to their latest <code>minor</code> or <code>patch</code> version, to prepare for the <code>major</code> updates.</p>"},{"location":"upgrade-best-practices/#take-major-updates-in-sequence","title":"Take <code>major</code> updates in sequence","text":"<p>Take <code>major</code> updates in sequence. This way you'll read the changelogs for each <code>major</code> version, and learn why upstream made certain breaking changes.</p> <p>Say you're on version <code>1</code> of a dependency, and the latest <code>major</code> version is at <code>4</code>. You should update to <code>2</code>, then <code>3</code> and finally <code>4</code>. Avoid updating from <code>1</code> directly to <code>4</code>.</p> <p>Use the <code>:separateMultipleMajorReleases</code> preset to get separate <code>major</code> updates.</p>"},{"location":"upgrade-best-practices/#update-development-tools","title":"Update development tools","text":"<p>Finally update development tools like Prettier, ESLint, TSLint, Cypress, and so on.</p>"},{"location":"upgrade-best-practices/#improve-the-human-side","title":"Improve the human side","text":"<p>You're done with the technical side. Now comes the harder part, fixing the human side. There are probably a number of reasons why the project got this badly out of date.</p> <p>When working on the human side, focus on the process, rules, and habits. Avoid blaming developers for not updating often.</p>"},{"location":"upgrade-best-practices/#why-developers-avoid-updating","title":"Why developers avoid updating","text":"<p>Let's assume most developers want a project that's up to date. So why are your developers avoiding updates? Some common reasons:</p> <ul> <li>Developers get blamed when things break in production</li> <li>There are no tests, so merging updates is scary</li> <li>The test suite is slow</li> <li>Releasing a new version of the project must be done by hand</li> <li>Updating must be done by hand</li> <li>The company doesn't allow developer time for updates</li> <li>The company has complex rules about updates</li> </ul> <p>If updating is painful, or takes a lot of time, developers tend to avoid it. Make it easy and fast to update dependencies.</p>"},{"location":"upgrade-best-practices/#talk-with-your-team-about-the-update-process","title":"Talk with your team about the update process","text":"<p>Listen to your team, write down their problems. Then fix each problem as best as you can.</p>"},{"location":"upgrade-best-practices/#make-updating-easy-and-fast","title":"Make updating easy and fast","text":"<p>Respect your developer's time and brains:</p> <ul> <li>Run Renovate on all projects</li> <li>Use Renovate to propose updates</li> <li>Building the project must be as fast as possible</li> <li>Have automated tests for the critical path of your project</li> <li>Run the automated tests on every pull request</li> <li>If you're on GitHub: use GitHub's Merge Queue to speed up merges</li> <li>Follow SemVer versioning</li> <li>Use the <code>semantic-release</code> bot to automate the release process</li> <li>Refactor existing code to make future changes easier</li> </ul>"},{"location":"upgrade-best-practices/#ground-rules","title":"Ground rules","text":"<p>As a starting point:</p> <ul> <li>Avoid long lived branches that diverge from <code>main</code> over time</li> <li>Dig beyond \"developer error\" when things go wrong, again: focus on the process</li> <li>Ensure company policy allows frequent updates</li> </ul>"},{"location":"upgrade-best-practices/#how-we-use-renovate","title":"How we use Renovate","text":"<ul> <li>We run Renovate on all repositories</li> <li>Most of our repositories have automated tests for the critical path of the application</li> <li>We automerge some dependencies, but request <code>major</code> updates from the Dependency Dashboard</li> <li>When a developer merges a breaking change, we revert to a known-good version, and try again later</li> <li>We automated the release with the <code>semantic-release</code> bot</li> <li>We spend time to make our build and automated tests as fast as possible</li> </ul>"},{"location":"upgrade-best-practices/#how-others-use-renovate","title":"How others use Renovate","text":"<p>Read the Swissquote user story to see how they use Renovate.</p>"},{"location":"upgrade-best-practices/#recommended-reading","title":"Recommended reading","text":"<p>There's a lot of good information out there, so we can only highlight a few resources.</p> <p>Martin Fowler has two great resources:</p> <ul> <li>The free page Patterns for Managing Source Code Branches to help you decide what Git branch pattern to use</li> <li>The book Refactoring, Improving the Design of Existing Code to help your developers gradually refactor to clean, modular and easy to read code</li> </ul> <p>The <code>git bisect</code> command can help you find the commit that introduced a bug, or other behavior change. Read the ProGit 2 book, section on binary search to learn more.</p>"},{"location":"examples/opentelemetry/","title":"OpenTelemetry","text":"<p>Requirements:</p> <ul> <li>docker-compose</li> </ul>"},{"location":"examples/opentelemetry/#prepare-setup","title":"Prepare setup","text":"<p>Create a <code>docker-compose.yaml</code> and <code>otel-collector-config.yml</code> file as seen below in a folder.</p> docker-compose.yaml<pre><code>name: renovate-otel-demo\n\nservices:\n  # Jaeger for storing traces\n  jaeger:\n    image: jaegertracing/jaeger:2.22.0\n    ports:\n      - '16686:16686' # Web UI\n      - '4317' # OTLP gRPC\n      - '4318' # OTLP HTTP\n\n  # Prometheus for storing metrics\n  prometheus:\n    image: prom/prometheus:v3.15.1\n    ports:\n      - '9090:9090' # Web UI\n      - '4318' # OTLP HTTP\n    command:\n      - --web.enable-otlp-receiver\n      # Mirror these flags from the Dockerfile, because `command` overwrites the default flags.\n      # https://github.com/prometheus/prometheus/blob/5b5fee08af4c73230b2dae35964816f7b3c29351/Dockerfile#L23-L24\n      - --config.file=/etc/prometheus/prometheus.yml\n      - --storage.tsdb.path=/prometheus\n\n  otel-collector:\n    # Using the Contrib version to access the spanmetrics connector.\n    # If you don't need the spanmetrics connector, you can use the standard version\n    image: otel/opentelemetry-collector-contrib:0.163.2\n    volumes:\n      - ./otel-collector-config.yml:/etc/otelcol-contrib/config.yaml\n    ports:\n      - '4318:4318' # OTLP HTTP ( exposed to the host )\n      - '4317:4317' # OTLP gRPC ( exposed to the host )\n    depends_on:\n      - jaeger\n      - prometheus\n</code></pre> otel-collector-config.yml<pre><code>receivers:\n  otlp:\n    protocols:\n      grpc:\n        endpoint: 0.0.0.0:4317\n      http:\n        endpoint: 0.0.0.0:4318\n\nexporters:\n  otlp/jaeger:\n    endpoint: jaeger:4317\n    tls:\n      insecure: true\n  otlphttp/prometheus:\n    endpoint: http://prometheus:9090/api/v1/otlp\n  debug:\n  # verbosity: normal\n\nconnectors:\n  spanmetrics:\n    histogram:\n      exponential:\n    dimensions:\n      - name: http.method\n        default: GET\n      - name: http.status_code\n      - name: http.host\n    dimensions_cache_size: 1000\n    aggregation_temporality: 'AGGREGATION_TEMPORALITY_CUMULATIVE'\n    exemplars:\n      enabled: true\n\nprocessors:\n  batch:\n\nextensions:\n  health_check:\n  pprof:\n  zpages:\n\nservice:\n  extensions: [pprof, zpages, health_check]\n  pipelines:\n    traces:\n      receivers: [otlp]\n      exporters:\n        - otlp/jaeger\n        # Send traces to connector for metrics calculation\n        - spanmetrics\n        # Enable debug exporter to see traces in the logs\n        #- debug\n      processors: [batch]\n\n    metrics:\n      receivers:\n        - otlp # Receive metrics from Renovate.\n        - spanmetrics # Receive metrics calculated by the spanmetrics connector.\n      processors: [batch]\n      exporters:\n        - otlphttp/prometheus\n        # Enable debug exporter to see metrics in the logs\n        # - debug\n</code></pre> <p>Start setup using this command inside the folder containing the files created in the earlier steps:</p> <pre><code>docker-compose up\n</code></pre> <p>This command will start:</p> <ul> <li>an OpenTelemetry Collector</li> <li>an instance of Jaeger for traces</li> <li>and Prometheus</li> </ul> <p>Jaeger will be now reachable under http://localhost:16686.</p>"},{"location":"examples/opentelemetry/#run-renovate-with-opentelemetry","title":"Run Renovate with OpenTelemetry","text":"<p>To start Renovate with OpenTelemetry enabled run following command, after pointing to your <code>config.js</code> config file:</p> <pre><code>docker run \\\n  --rm \\\n  --network renovate-otel-demo_default \\\n  -e OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4318 \\\n  -v \"/path/to/your/config.js:/usr/src/app/config.js\" \\\n  renovate/renovate:latest\n</code></pre> <p>You should now see <code>trace_id</code> and <code>span_id</code> fields in the logs.</p> <pre><code> INFO: Repository finished (repository=org/example)\n       \"durationMs\": 5574,\n       \"trace_id\": \"f9a4c33852333fc2a0fbdc163100c987\",\n       \"span_id\": \"4ac1323eeaee\n</code></pre>"},{"location":"examples/opentelemetry/#traces","title":"Traces","text":"<p>Open now Jaeger under http://localhost:16686.</p> <p>You should now be able to pick <code>renovate</code> under in the field <code>service</code> field.</p> <p></p> <p>Select <code>Find Traces</code> to search for all Renovate traces and then select one of the found traces to open the trace view.</p> <p></p> <p>You should be able to see now the full trace view which shows more information about what is happening, such as HTTP requests, execution of commands or Git operations, and how long Renovate takes to process a given branch:</p> <p></p>"},{"location":"examples/opentelemetry/#metrics","title":"Metrics","text":"<p>Additional to the received traces some metrics are calculated. This is achieved using the spanmetrics connector. The previously implemented setup will produce following metrics, which pushed to Prometheus:</p> <pre><code>### Example of internal spans\ntraces_span_metrics_calls_total{http_method=\"GET\", job=\"renovatebot.com/renovate\", service_name=\"renovate\", span_kind=\"SPAN_KIND_INTERNAL\", span_name=\"repository\", status_code=\"STATUS_CODE_UNSET\"} 2\ntraces_span_metrics_calls_total{http_method=\"GET\", job=\"renovatebot.com/renovate\", service_name=\"renovate\", span_kind=\"SPAN_KIND_INTERNAL\", span_name=\"run\", status_code=\"STATUS_CODE_UNSET\"} 2\n\n### Example of http calls from Renovate to external services\ntraces_span_metrics_calls_total{http_host=\"api.github.com:443\", http_method=\"POST\", http_status_code=\"200\", job=\"renovatebot.com/renovate\", service_name=\"renovate\", span_kind=\"SPAN_KIND_CLIENT\", span_name=\"POST\", status_code=\"STATUS_CODE_UNSET\"} 4\n\n\n### Example histogram metrics\ntraces_span_metrics_duration_milliseconds_bucket{http_method=\"GET\", job=\"renovatebot.com/renovate\", le=\"8\", service_name=\"renovate\", span_kind=\"SPAN_KIND_INTERNAL\", span_name=\"repository\", status_code=\"STATUS_CODE_UNSET\"} 0\n...\ntraces_span_metrics_duration_milliseconds_bucket{http_method=\"GET\", job=\"renovatebot.com/renovate\", le=\"2000\", service_name=\"renovate\", span_kind=\"SPAN_KIND_INTERNAL\", span_name=\"repository\", status_code=\"STATUS_CODE_UNSET\"} 0\ntraces_span_metrics_duration_milliseconds_bucket{http_method=\"GET\", job=\"renovatebot.com/renovate\", le=\"5000\", service_name=\"renovate\", span_kind=\"SPAN_KIND_INTERNAL\", span_name=\"repository\", status_code=\"STATUS_CODE_UNSET\"} 1\ntraces_span_metrics_duration_milliseconds_bucket{http_method=\"GET\", job=\"renovatebot.com/renovate\", le=\"15000\", service_name=\"renovate\", span_kind=\"SPAN_KIND_INTERNAL\", span_name=\"repository\", status_code=\"STATUS_CODE_UNSET\"} 1\ntraces_span_metrics_duration_milliseconds_bucket{http_method=\"GET\", job=\"renovatebot.com/renovate\", le=\"10000\", service_name=\"renovate\", span_kind=\"SPAN_KIND_INTERNAL\", span_name=\"repository\", status_code=\"STATUS_CODE_UNSET\"} 1\ntraces_span_metrics_duration_milliseconds_bucket{http_method=\"GET\", job=\"renovatebot.com/renovate\", le=\"+Inf\", service_name=\"renovate\", span_kind=\"SPAN_KIND_INTERNAL\", span_name=\"repository\", status_code=\"STATUS_CODE_UNSET\"} 1\n\ntraces_span_metrics_duration_milliseconds_sum{http_method=\"GET\", job=\"renovatebot.com/renovate\", service_name=\"renovate\", span_kind=\"SPAN_KIND_INTERNAL\", span_name=\"repository\", status_code=\"STATUS_CODE_UNSET\"} 4190.694209\ntraces_span_metrics_duration_milliseconds_count{http_method=\"GET\", job=\"renovatebot.com/renovate\", service_name=\"renovate\", span_kind=\"SPAN_KIND_INTERNAL\", span_name=\"repository\", status_code=\"STATUS_CODE_UNSET\"} 1\n</code></pre> <p>The spanmetrics connector creates two sets of metrics.</p>"},{"location":"examples/opentelemetry/#calls-metric","title":"Calls metric","text":"<p>At first there are the <code>traces_span_metrics_calls_total</code> metrics. These metrics show how often specific trace spans have been observed.</p> <p>For example:</p> <ul> <li><code>traces_span_metrics_calls_total{http_method=\"GET\", job=\"renovatebot.com/renovate\", service_name=\"renovate\", span_kind=\"SPAN_KIND_INTERNAL\", span_name=\"repositories\", status_code=\"STATUS_CODE_UNSET\"} 2</code> signals that 2 repositories have been renovated.</li> <li><code>traces_span_metrics_calls_total{http_method=\"GET\", job=\"renovatebot.com/renovate\", service_name=\"renovate\", span_kind=\"SPAN_KIND_INTERNAL\", span_name=\"run\", status_code=\"STATUS_CODE_UNSET\"} 1</code> represents how often Renovate has been run.</li> </ul> <p>If we combine this using the PrometheusQueryLanguage ( PromQL ), we can calculate the average count of repositories each Renovate run handles.</p> <pre><code>traces_span_metrics_calls_total{span_name=\"repository\",service_name=\"renovate\"} / traces_span_metrics_calls_total{span_name=\"run\",service_name=\"renovate\"}\n</code></pre> <p>These metrics are generated for HTTP call spans too:</p> <pre><code>traces_span_metrics_calls_total{http_host=\"prometheus-community.github.io:443\", http_method=\"GET\", http_status_code=\"200\", job=\"renovatebot.com/renovate\", service_name=\"renovate\", span_kind=\"SPAN_KIND_CLIENT\", span_name=\"GET\", status_code=\"STATUS_CODE_UNSET\"} 5\n</code></pre>"},{"location":"examples/opentelemetry/#latency-buckets","title":"Latency buckets","text":"<p>The second class of metrics exposed are the latency-focused buckets, that allow creating heatmaps. A request is added to a backed if the latency is bigger than the bucket value (<code>le</code>). <code>request_duration =&gt; le</code></p> <p>As an example if we receive a request which need <code>1.533s</code> to complete get following metrics:</p> <pre><code>traces_span_metrics_duration_milliseconds_bucket{http_host=\"api.github.com:443\",le=\"0.1\"} 0\ntraces_span_metrics_duration_milliseconds_bucket{http_host=\"api.github.com:443\",le=\"1\"} 0\ntraces_span_metrics_duration_milliseconds_bucket{http_host=\"api.github.com:443\",le=\"2\"} 1\ntraces_span_metrics_duration_milliseconds_bucket{http_host=\"api.github.com:443\",le=\"6\"} 1\ntraces_span_metrics_duration_milliseconds_bucket{http_host=\"api.github.com:443\",le=\"10\"} 1\ntraces_span_metrics_duration_milliseconds_bucket{http_host=\"api.github.com:443\",le=\"100\"} 1\ntraces_span_metrics_duration_milliseconds_bucket{http_host=\"api.github.com:443\",le=\"250\"} 1\ntraces_span_metrics_duration_milliseconds_bucket{http_host=\"api.github.com:443\",le=\"9.223372036854775e+12\"} 1\ntraces_span_metrics_duration_milliseconds_bucket{http_host=\"api.github.com:443\",le=\"+Inf\"} 1\ntraces_span_metrics_duration_milliseconds_sum{http_host=\"api.github.com:443\"} 1.533\ntraces_span_metrics_duration_milliseconds_count{http_host=\"api.github.com:443\"} 1\n</code></pre> <p>Now we have another request which this time takes 10s to complete:</p> <pre><code>traces_span_metrics_duration_milliseconds_bucket{http_host=\"api.github.com:443\",le=\"0.1\"} 0\ntraces_span_metrics_duration_milliseconds_bucket{http_host=\"api.github.com:443\",le=\"1\"} 0\ntraces_span_metrics_duration_milliseconds_bucket{http_host=\"api.github.com:443\",le=\"2\"} 1\ntraces_span_metrics_duration_milliseconds_bucket{http_host=\"api.github.com:443\",le=\"6\"} 1\ntraces_span_metrics_duration_milliseconds_bucket{http_host=\"api.github.com:443\",le=\"10\"} 2\ntraces_span_metrics_duration_milliseconds_bucket{http_host=\"api.github.com:443\",le=\"100\"} 2\ntraces_span_metrics_duration_milliseconds_bucket{http_host=\"api.github.com:443\",le=\"250\"} 2\ntraces_span_metrics_duration_milliseconds_bucket{http_host=\"api.github.com:443\",le=\"9.223372036854775e+12\"} 2\ntraces_span_metrics_duration_milliseconds_bucket{http_host=\"api.github.com:443\",le=\"+Inf\"} 2\ntraces_span_metrics_duration_milliseconds_sum{http_host=\"api.github.com:443\"} 11.533\ntraces_span_metrics_duration_milliseconds_count{http_host=\"api.github.com:443\"} 2\n</code></pre> <p>More about the functionality can be found on the Prometheus page for metric types.</p>"},{"location":"examples/self-hosting/","title":"Self-Hosting Examples","text":"<p>Warning</p> <p>All self-hosted Renovate instances must operate under a trust relationship with the developers of the monitored repositories. Because of this, there are security implications when running a self-hosted Renovate instance, which you must consider carefully.</p> <p>Warning</p> <p>Most Open Source packages are hosted on github.com, including a number of tools that Renovate may pull at run-time. GitHub greatly rate limits unauthenticated API requests, so you need to configure credentials for <code>github.com</code> or your deployment will get rate limited quickly. \u00a0 Read Running Renovate, GitHub.com token for changelogs to learn more.</p>"},{"location":"examples/self-hosting/#installing-renovate-oss-cli","title":"Installing Renovate OSS CLI","text":""},{"location":"examples/self-hosting/#npmjs","title":"npmjs","text":"<pre><code>npm install -g renovate\n</code></pre> <p>Renovate does not embed <code>npm</code>, <code>pnpm</code> and <code>yarn</code> as its own dependencies. If you want to use these package managers to update your lockfiles, you must ensure that the correct versions are installed globally.</p> <pre><code>npm install -g yarn pnpm\n</code></pre> <p>The same goes for any other third-party binary tool like <code>gradle</code> or <code>poetry</code> - you need to make sure it is installed and the correct version before running Renovate.</p>"},{"location":"examples/self-hosting/#docker","title":"Docker","text":"<p>Renovate is available for Docker via an automated build at <code>renovate/renovate</code> on Docker Hub. It builds <code>latest</code> based on the <code>main</code> branch and all SemVer tags are published too.</p> Example of valid tags<pre><code>docker run --rm renovate/renovate\ndocker run --rm renovate/renovate:44\ndocker run --rm renovate/renovate:44.133\ndocker run --rm renovate/renovate:44.133.0\n</code></pre> <p>Warning</p> <p>Do not use the example tags listed above, as they will be out-of-date. Go to the <code>renovate/renovate</code> tags on DockerHub to grab the latest tagged release from Renovate.</p> <p>If you want to configure Renovate using a <code>config.js</code> file then map it to <code>/usr/src/app/config.js</code> using Docker volumes. For example:</p> <pre><code>docker run --rm -v \"/path/to/your/config.js:/usr/src/app/config.js\" renovate/renovate\n</code></pre>"},{"location":"examples/self-hosting/#kubernetes","title":"Kubernetes","text":"<p>Renovate's official Docker image is compatible with Kubernetes. The following is an example manifest of running Renovate against a GitHub Enterprise server.</p> Kubernetes manifest<pre><code>apiVersion: batch/v1\nkind: CronJob\nmetadata:\n  name: renovate\nspec:\n  schedule: '@hourly'\n  concurrencyPolicy: Forbid\n  jobTemplate:\n    spec:\n      template:\n        spec:\n          containers:\n            - name: renovate\n              # Update this to the latest available and then enable Renovate on\n              # the manifest\n              image: renovate/renovate:44.133.0\n              args:\n                - user/repo\n              # Environment Variables\n              env:\n                - name: LOG_LEVEL\n                  value: debug\n              envFrom:\n                - secretRef:\n                    name: renovate-env\n          restartPolicy: Never\n</code></pre> <p>And the <code>secret.yaml</code> that goes with it:</p> secret.yaml<pre><code>apiVersion: v1\nkind: Secret\nmetadata:\n  name: renovate-env\ntype: Opaque\nstringData:\n  RENOVATE_GITHUB_COM_TOKEN: 'any-personal-user-token-for-github-com-for-fetching-changelogs'\n  # You can set RENOVATE_AUTODISCOVER to true to run Renovate on all repos you have push access to\n  RENOVATE_AUTODISCOVER: 'false'\n  RENOVATE_ENDPOINT: 'https://github.company.com/api/v3'\n  RENOVATE_GIT_AUTHOR: 'Renovate &lt;bot@renovateapp.com&gt;'\n  RENOVATE_PLATFORM: 'github'\n  RENOVATE_TOKEN: 'your-github-enterprise-renovate-user-token'\n</code></pre> <p>A <code>config.json</code> file can be added to the manifest using a <code>ConfigMap</code> as shown in the following example (using a \"dry run\" in github.com):</p> Adding a config.json file to the manifest with configMap<pre><code>---\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: renovate-config\ndata:\n  config.json: |-\n    {\n      \"repositories\": [\"orgname/repo\",\"username/repo\"],\n      \"dryRun\" : \"full\"\n    }\n\n---\napiVersion: batch/v1\nkind: CronJob\nmetadata:\n  name: renovate-bot\nspec:\n  schedule: '@hourly'\n  concurrencyPolicy: Forbid\n  jobTemplate:\n    spec:\n      template:\n        spec:\n          containers:\n            - image: renovate/renovate:44.133.0\n              name: renovate-bot\n              env: # For illustration purposes, please use secrets.\n                - name: RENOVATE_PLATFORM\n                  value: 'github'\n                - name: RENOVATE_TOKEN\n                  value: 'some-token'\n                - name: RENOVATE_AUTODISCOVER\n                  value: 'false'\n                - name: RENOVATE_BASE_DIR\n                  value: '/tmp/renovate/'\n                - name: RENOVATE_CONFIG_FILE\n                  value: '/opt/renovate/config.json'\n                - name: LOG_LEVEL\n                  value: debug\n              volumeMounts:\n                - name: config-volume\n                  mountPath: /opt/renovate/\n                - name: work-volume\n                  mountPath: /tmp/renovate/\n          restartPolicy: Never\n          volumes:\n            - name: config-volume\n              configMap:\n                name: renovate-config\n            - name: work-volume\n              emptyDir: {}\n</code></pre>"},{"location":"examples/self-hosting/#circleci","title":"CircleCI","text":"<p>Warning</p> <p>The CircleCI configuration examples are for version <code>2</code> of <code>daniel-shuy/renovate</code>, which is outdated. Do you know how to get <code>daniel-shuy/renovate</code> version <code>3</code> working? Then please open a pull request to update the docs and close Renovate issue #13428.</p> <p>If you are using CircleCI, you can use the third-party daniel-shuy/renovate orb to run a self-hosted instance of Renovate on CircleCI.</p> <p>By default, the orb looks for the self-hosted configuration file in the project root, but you can specify another path to the configuration file with the <code>config_file_path</code> parameter.</p> <p>Secrets should be configured using environment variables (e.g. <code>RENOVATE_TOKEN</code>, <code>RENOVATE_GITHUB_COM_TOKEN</code>).</p> <p>Configure environment variables in CircleCI Project Settings. To share environment variables across projects, use CircleCI Contexts.</p> This runs Renovate hourly, and looks for the self-hosted config file at renovate-config.js<pre><code>version: '2.1'\norbs:\n  renovate: daniel-shuy/renovate@2.2.0\nworkflows:\n  renovate:\n    jobs:\n      - renovate/self-hosted:\n          config_file_path: renovate-config.js\n    nightly:\n      triggers:\n        - schedule:\n            cron: 0 * * * *\n            filters:\n              branches:\n                only:\n                  - main\n</code></pre>"},{"location":"examples/self-hosting/#renovate-config-file-validation-when-using-circleci","title":"Renovate config file validation when using CircleCI","text":"Validate your config as part of your workflow<pre><code>version: '2.1'\norbs:\n  renovate: daniel-shuy/renovate@2.2.0\nworkflows:\n  lint:\n    jobs:\n      - renovate/validate-config\n</code></pre>"},{"location":"examples/self-hosting/#gitlab-cicd-pipeline","title":"GitLab CI/CD pipeline","text":"<p>For GitLab pipelines we recommend you use the <code>renovate-runner</code> project on GitLab. We created some pipeline templates to help you run Renovate on pipeline schedules. You can also find the configuration steps there.</p> <p>For self-hosted GitLab clone/import the <code>renovate-runner</code> project on GitLab project to your instance.</p>"},{"location":"examples/self-hosting/#filedirectory-usage","title":"File/directory usage","text":"<p>By default, Renovate stores all files in the <code>renovate/</code> subdirectory of the operating system's temporary directory, e.g. <code>/tmp/renovate/</code>.</p> <p>Repository data is copied or cloned into unique subdirectories under <code>repos/</code>, e.g. <code>/tmp/renovate/repos/github/owner1/repo-a/</code>.</p> <p>Renovate's cache, and the caches(s) for npm, Yarn, Composer, and so on, are stored in <code>/tmp/renovate/cache</code>.</p>"},{"location":"examples/self-hosting/#overriding-the-default-directory","title":"Overriding the default directory","text":"<p>If you don't want to use the default <code>tmp/renovate</code> directory you can:</p> <ul> <li>Set a value for <code>baseDir</code> in <code>config.js</code></li> <li>Use an environment variable <code>RENOVATE_BASE_DIR</code></li> <li>Use the CLI to pass a base directory: <code>--base-dir=</code></li> </ul>"},{"location":"examples/self-hosting/#overriding-the-default-cache-directory","title":"Overriding the default cache directory","text":"<p>If you want to override the cache directory then set your own value for <code>cacheDir</code>.</p>"},{"location":"examples/self-hosting/#usage","title":"Usage","text":"<p>The following example uses the Renovate CLI tool, which you can install by running <code>npm i -g renovate</code>.</p> <p>If running your own Renovate deployment, then you will need a user account that Renovate will run as. We recommend you create and use a dedicated account for the bot, e.g. name it <code>renovate-bot</code> if on your own instance. Create and save a PAT for this account.</p> <p>Create a Renovate config file, for example:</p> <pre><code>module.exports = {\n  endpoint: 'https://self-hosted.gitlab/api/v4/',\n  token: '**gitlab_token**',\n  platform: 'gitlab',\n  onboardingConfig: {\n    extends: ['config:recommended'],\n  },\n  repositories: ['username/repo', 'orgname/repo'],\n};\n</code></pre> <p>Here change the <code>repositories</code> to something appropriate. Also replace <code>gitlab-token</code> value with the one created during the previous step.</p> <p>If you're running against GitHub Enterprise Server, then change the <code>gitlab</code> values in the example to the equivalent GitHub ones.</p> <p>You can save this file as anything you want and then use the <code>RENOVATE_CONFIG_FILE</code> environment variable to tell Renovate where to find it.</p> <p>Most people use <code>cron</code> to schedule when Renovate runs, usually on an hourly schedule.</p> Example bash script that you can point cron to<pre><code>#!/bin/bash\n\nexport PATH=\"/home/user/.yarn/bin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH\"\nexport RENOVATE_CONFIG_FILE=\"/home/user/renovate-config.js\"\nexport RENOVATE_TOKEN=\"**some-token**\" # GitHub, GitLab, Azure DevOps\nexport RENOVATE_GITHUB_COM_TOKEN=\"**github-token**\" # Delete this if using github.com\n\n# Renovate\nrenovate\n</code></pre> <p>Save the script file, and run the script manually. Only add the script to <code>cron</code> after you checked it works.</p> <p>Note</p> <p>The GitHub.com token as an environment variable is needed to fetch changelogs that are usually hosted on github.com. You don't need to add it if you are already running Renovate against github.com, but you do need to add it if you're using GitHub Enterprise Server, GitLab, Azure DevOps, or Bitbucket.</p>"},{"location":"examples/self-hosting/#kubernetes-for-gitlab-using-git-over-ssh","title":"Kubernetes for GitLab, using Git over SSH","text":"<p>This section describes how to use a Git binary with SSH for GitLab, to avoid API shortcomings.</p> <p>You need to first create a SSH key, then add the public part to GitLab (see this guide).</p> <p>Then, you need to create the secret to add the SSH key, and the following config to your container:</p> <pre><code>host gitlab.com\n  HostName gitlab.com\n  StrictHostKeyChecking no\n  IdentityFile ~/.ssh/id_rsa\n  User git\n</code></pre> <p>To easily create the secret, you can do the following (see docs).</p> <pre><code>kubectl create secret generic ssh-key-secret --from-file=config=/path/to/config --from-file=id_rsa=/path/to/.ssh/id_rsa --from-file=id_rsa.pub=/path/to/.ssh/id_rsa.pub\n</code></pre> <p>It creates something like this:</p> <pre><code>apiVersion: v1\ndata:\n  config: aG9zdCBnaXRsYWIuY29tCiAgSG9zdE5hbWUgZ2l0bGFiLmNvbQogIFN0cmljdEhvc3RLZXlDaGVja2luZyBubwogIElkZW50aXR5RmlsZSB+Ly5zc2gvaWRfcnNhCiAgVXNlciBnaXQ=\n  id_rsa: &lt;base64String&gt;\n  id_rsa.pub: &lt;base64String&gt;\nkind: Secret\nmetadata:\n  name: ssh-key-secret\n  namespace: &lt;namespace&gt;\n</code></pre> <p>Then you need to add a Git author, and configure the mount volumes. The final configuration should look something like this:</p> <pre><code>---\napiVersion: v1\nkind: Namespace\nmetadata:\n  name: &lt;namespace, for example renovate&gt;\n\n---\napiVersion: v1\nkind: Secret\nmetadata:\n  name: renovate-env\n  namespace: &lt;namespace&gt;\ntype: Opaque\nstringData:\n  RENOVATE_GITHUB_COM_TOKEN: 'any-personal-user-token-for-github-com-for-fetching-changelogs'\n  RENOVATE_AUTODISCOVER: 'false'\n  RENOVATE_ENDPOINT: 'https://github.company.com/api/v3'\n  RENOVATE_GIT_AUTHOR: 'Renovate &lt;bot@renovateapp.com&gt;'\n  RENOVATE_PLATFORM: 'github'\n  RENOVATE_TOKEN: 'your-github-enterprise-renovate-user-token'\n---\napiVersion: v1\ndata:\n  config: aG9zdCBnaXRsYWIuY29tCiAgSG9zdE5hbWUgZ2l0bGFiLmNvbQogIFN0cmljdEhvc3RLZXlDaGVja2luZyBubwogIElkZW50aXR5RmlsZSB+Ly5zc2gvaWRfcnNhCiAgVXNlciBnaXQ=\n  id_rsa: &lt;base64String&gt;\n  id_rsa.pub: &lt;base64String&gt;\nkind: Secret\nmetadata:\n  name: ssh-key-secret\n  namespace: &lt;namespace&gt;\n---\napiVersion: batch/v1beta1\nkind: CronJob\nmetadata:\n  name: renovate\n  namespace: &lt;namespace&gt;\nspec:\n  schedule: '@hourly'\n  concurrencyPolicy: Forbid\n  jobTemplate:\n    spec:\n      template:\n        spec:\n          volumes:\n            - name: ssh-key-volume\n              secret:\n                secretName: ssh-key-secret\n          containers:\n            - name: renovate\n              # Update this to the latest available and then enable Renovate on the manifest\n              image: renovate/renovate:44.133.0\n              volumeMounts:\n                - name: ssh-key-volume\n                  readOnly: true\n                  mountPath: '/home/ubuntu/.ssh'\n              args:\n                - &lt;repository&gt;\n              # Environment Variables\n              envFrom:\n                - secretRef:\n                    name: renovate-env\n          restartPolicy: Never\n</code></pre>"},{"location":"examples/self-hosting/#logging","title":"Logging","text":"<p>If you're ingesting/parsing logs into another system then we recommend you set <code>LOG_LEVEL=debug</code> and <code>LOG_FORMAT=json</code> in your environment variables. Debug logging is usually needed for any debugging, while JSON format will mean that the output is parsable.</p>"},{"location":"examples/self-hosting/#about-the-log-level-numbers","title":"About the log level numbers","text":"<p>When you use <code>LOG_LEVEL=debug</code> and <code>LOG_FORMAT=json</code>, Renovate uses numbers in the <code>level</code> field.</p> <p>The logging level output is controlled by the Bunyan logging library.</p> Level Meaning 10 trace 20 debug 30 info 40 warn 50 error 60 fatal"},{"location":"examples/self-hosting/#self-signed-tlsssl-certificates","title":"Self-signed TLS/SSL certificates","text":"<p>Renovate and invoked helper programs (like Git, or npm) use a secure TLS connection (e.g. HTTPS) to connect to remote source code and dependency hosts. If the remote hosts uses self-signed certificates or certificate authorities then Renovate must be told to trust them.</p>"},{"location":"examples/self-hosting/#renovate-nodejs-app","title":"Renovate Node.js app","text":"<p>For the main Renovate Node.js application set the environment variable <code>NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/self-signed-certificate.crt</code>. The Renovate application now trusts the <code>self-signed-certificate.crt</code> file. This means Renovate can safely connect to systems using that certificate or certificates signed by this certificate authority.</p>"},{"location":"examples/self-hosting/#helper-programs-like-git-or-npm","title":"Helper programs like Git or npm","text":"<p>Helper programs like Git and npm use the system trust store. For those programs to trust a self-signed certificate you must add it to the systems trust store. On Ubuntu/Debian and many Linux-based systems, this can be done by:</p> <ol> <li>copying the self-signed certificate (e.g. <code>self-signed-certificate.crt</code>) to <code>/usr/local/share/ca-certificates/</code></li> <li>and running <code>update-ca-certificates</code> to update the system trust store afterwards</li> </ol>"},{"location":"examples/self-hosting/#renovate-docker-image","title":"Renovate Docker image","text":"<p>If you're using the official Renovate Docker image then we recommend you add the self-signed certificate and build your own modified Docker image.</p> Example of a Dockerfile that uses a self-signed certificate<pre><code>FROM renovate/renovate\n\n# Changes to the certificate authority require root permissions\nUSER root\n\n# Copy and install the self signed certificate\nCOPY self-signed-certificate.crt /usr/local/share/ca-certificates/\nRUN update-ca-certificates\n\n# Change back to the Ubuntu user\nUSER 12021\n\n# OpenSSL\nENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt\n</code></pre>"},{"location":"examples/self-hosting/#proxy-environment-variable-configuration","title":"Proxy Environment Variable Configuration","text":"<p>If your environment uses an HTTP proxy configured via environment variables (<code>HTTP_PROXY</code>, <code>HTTPS_PROXY</code>, <code>NO_PROXY</code>, and their lowercase variants), Renovate inherits these settings and prefers the lowercase variant.</p> <p>In some cases, you may need to adjust the <code>NO_PROXY</code> variable if Renovate encounters network or TLS errors when accessing internal or excluded domains.</p> <p>Renovate uses the global-agent library to manage proxy connections.</p> <p>To exclude a domain and all its subdomains, you must use a wildcard \u2014 for example:</p> <pre><code>NO_PROXY=*.example.org\n</code></pre> <p>This configuration ensures that both <code>example.org</code> and <code>www.example.org</code> are accessed directly, bypassing the proxy for Renovate.</p> <p>If a tool that Renovate runs (such as git) still has proxy-related issues, note that different tools interpret NO_PROXY formats differently. See GitLab\u2019s detailed explanation for guidance on tool-specific behavior.</p> <p>To debug the proxy configuration behavior you can set the environment variable <code>ROARR_LOG=true</code> to enable log printing to stdout.</p>"},{"location":"getting-started/installing-onboarding/","title":"Installing and onboarding Renovate into repositories","text":""},{"location":"getting-started/installing-onboarding/#about-the-security-and-privacy-of-installing-renovate","title":"About the security and privacy of installing Renovate","text":"<p>Read the Security and Permissions page to learn more about:</p> <ul> <li>Renovate's security stance</li> <li>What to do if you need to use certified software</li> <li>The security/disclosure process</li> <li>Permissions</li> <li>Privacy</li> </ul>"},{"location":"getting-started/installing-onboarding/#repository-installation","title":"Repository installation","text":"<p>Renovate administrators can configure Renovate to either \"autodiscover\" installed repositories, or configure a fixed list of repository names to operate on.</p> <p>If the administrator has configured a fixed list of repositories then the only way to \"install\" Renovate on a extra repository is for it to be manually added for the next run or restart.</p> <p>Otherwise, the process for adding new repositories to a Renovate installation can vary:</p> <ul> <li>Most commonly, you run Renovate as a dedicated account with global config option <code>autodiscover</code> set to <code>true</code>, meaning that it will run on every repository which it's been granted access to</li> <li>If using a GitHub App (including the Mend Renovate App) then you can install the app into a user or organization account and select either \"All repositories\", or \"Select repositories\" and pick them manually</li> </ul>"},{"location":"getting-started/installing-onboarding/#hosted-githubcom-app","title":"Hosted GitHub.com App","text":"<p>Follow these steps to install and enable the Mend Renovate App:</p> <p>First, navigate to https://github.com/apps/renovate and select the Install button:</p> <p></p> <p>The only choice you need to make is whether to run Renovate on all repositories or on selected repositories:</p> <p></p> <p>Renovate will ignore any repositories that don't have known package files, as well as any forks, so you can enable Renovate for all your repositories with no problems. That said, most people run Renovate on selected repositories. Unfortunately GitHub doesn't offer a \"select all except X, Y, Z\" option, so you must select each repository where you want Renovate to run.</p> <p>Once you're done selecting repositories for Renovate to run on, select the green Install button at the bottom of the page and Renovate will be enabled for those repositories and start the onboarding process.</p> <p>Note</p> <p>If you are using the Mend Renovate App then it has a custom behavior for forked repositories. If you choose \"All repositories\" when installing then forked repositories will be skipped by default, while if you choose \"Select repositories\" then they will be processed by Renovate even if they're a fork.</p>"},{"location":"getting-started/installing-onboarding/#hosted-gitlabcom-app","title":"Hosted GitLab.com App","text":"<p>Mend relaunched its hosted Renovate app for GitLab.com in July 2026, using a more secure architecture than the original version.</p> <p>You can set it up by following these instructions when logging into the Mend Developer Platform.</p> <p>We currently only support installing the app on a Group on GitLab.com. We do have plans to support User installations, but we do not have any planned timelines.</p>"},{"location":"getting-started/installing-onboarding/#self-hosting-on-windows","title":"Self-hosting on Windows","text":"<p>We recommend you set <code>core.autocrlf = input</code> in your Git config. You can do this by running this Git command:</p> <pre><code>git config --global core.autocrlf input\n</code></pre> <p>This prevents the carriage return <code>\\r\\n</code> which may confuse Renovate. You can also set the line endings in your repository by adding <code>* text=auto eol=lf</code> to your <code>.gitattributes</code> file.</p>"},{"location":"getting-started/installing-onboarding/#repository-onboarding","title":"Repository onboarding","text":"<p>Once you have enabled Renovate on a repository, you will get a \"Configure Renovate\" Pull Request looking something like this:</p> <p></p> <p>Note</p> <p>If you self-host Renovate, and want to add the rebase/retry checkbox to Renovate's onboarding PRs: enable the <code>onboardingRebaseCheckbox</code> config option first.</p>"},{"location":"getting-started/installing-onboarding/#no-risk-onboarding","title":"No risk onboarding","text":"<p>Conveniently, Renovate will not make any changes to your repository or raise any further Pull Requests until after you merge the onboarding Pull Request. If there is anything about the Pull Request that you don't like or understand, take your time to read the documentation or ask questions on the discussions forum on GitHub and merge the PR only once you're satisfied with the result.</p> <p>You can edit your Renovate configuration within the <code>renovate/configure</code> branch and Renovate will keep updating the description in the PR to match, so you can work on the config until you're satisfied with the results.</p> <p>If you wish to opt-out of having Renovate run for your repo, simply close the onboarding Pull Request without merging it. This action is reversible - you can re-request an onboarding PR by renaming the (closed) onboarding PR, or you can commit a Renovate configuration file to your default branch to manually onboard.</p>"},{"location":"getting-started/installing-onboarding/#check-for-warnings","title":"Check for warnings","text":"<p>If you have any Warnings or Errors listed, see if you need or want to make any changes to fix them. Warnings and errors should be fixed on the base branch (e.g. <code>main</code>) so that Renovate can recreate its Configure Renovate PR on its next cycle.</p>"},{"location":"getting-started/installing-onboarding/#configuration-location","title":"Configuration location","text":"<p>The \"Configure Renovate\" PR will include a <code>renovate.json</code> file in the root directory, with suggested default settings. If you don't want a <code>renovate.json</code> file in your repository you can use one of the following files instead:</p> <ul> <li><code>renovate.json5</code></li> <li><code>.github/renovate.json</code></li> <li><code>.github/renovate.json5</code></li> <li><code>.gitlab/renovate.json</code></li> <li><code>.gitlab/renovate.json5</code></li> <li><code>.renovaterc</code></li> <li><code>.renovaterc.json</code></li> <li><code>.renovaterc.json5</code></li> <li><code>package.json</code> (deprecated)</li> </ul> <p>Or in a custom file present within the <code>configFileNames</code>. Renovate first checks all the files in the <code>configFileNames</code> array before checking from the above file list.</p>"},{"location":"getting-started/installing-onboarding/#packagejson","title":"package.json","text":"<p>Warning</p> <p>This approach has been deprecated and will be removed in a future release.</p> <p>You can add the same settings to a <code>\"renovate\"</code> section in your <code>package.json</code> file instead. The <code>package.json</code> file must be located at the root of your repository. This is handy if you are already using a <code>package.json</code> file anyway, e.g. when you're working on a JavaScript project. The configuration in your <code>package.json</code> will apply to the whole project (this includes other, nested <code>package.json</code> files).</p>"},{"location":"getting-started/installing-onboarding/#customized-defaults","title":"Customized defaults","text":"<p>Renovate provides a <code>renovate.json</code> file, with default settings that will work for most cases. Sometimes Renovate detects that an override to these defaults is needed, and will add this override automatically, such as:</p> <ul> <li>Automatically enabling Angular-style semantic commits if your repository uses them</li> <li>Determining whether to use dependency range pinning depending on the detected project type (app vs library)</li> </ul>"},{"location":"getting-started/installing-onboarding/#common-overrides","title":"Common overrides","text":"<p>Please check the docs on this website for an exhaustive Configuration Reference. To help you get started, here are some of the most commonly changed (overridden) configuration settings:</p> <ul> <li>rangeStrategy: By default (with zero config) it's <code>\"replace\"</code> but the <code>\"config:recommended\"</code> preset overrides it to <code>\"auto\"</code>. Some prefer <code>\"bump\"</code>.</li> <li>labels: Labels to assign to Pull Requests</li> <li>assignees: GitHub user(s) to assign the Pull Requests to</li> </ul> <p>Renovate will update your PR description each time it finds changes.</p>"},{"location":"getting-started/installing-onboarding/#merge","title":"Merge","text":"<p>Once you're done checking and configuring in your Configure Renovate PR, it's time to merge it to enable the real Pull Requests to begin.</p>"},{"location":"getting-started/installing-onboarding/#repository-re-configuration","title":"Repository re-configuration","text":"<p>There will be times when you need to change your Renovate config. There are two recommended approaches:</p> <ul> <li>Reconfigure via PR</li> <li>Nuke the config and re-onboard</li> </ul>"},{"location":"getting-started/installing-onboarding/#reconfigure-via-pr","title":"Reconfigure via PR","text":"<p>If you want to make config edits directly, follow these steps:</p> <ol> <li>Create a new branch named <code>renovate/reconfigure</code></li> <li>Edit your Renovate configuration file</li> <li>Create a pull request from the <code>renovate/reconfigure</code> branch</li> <li>Run renovate on your repository(if self-hosted), or wait for the hosted app to process the changes</li> <li>Renovate will comment on your PR, outlining the expected changes from your modified configuration</li> <li>You can continue to edit the configuration file in the same PR, and Renovate will update its comment accordingly</li> <li>If you only want to validate your configuration changes, check out: Validate your config</li> </ol> <p>Note</p> <p>The reconfigure branch is only meant for changes to your Renovate configuration. Renovate reads the config from the reconfigure branch, but extracts dependencies from your default branch. Any other file changes in the reconfigure branch, like new package files or dependency versions, are not extracted and do not show in the comment.</p>"},{"location":"getting-started/installing-onboarding/#nuke-config-and-re-onboard","title":"Nuke config and re-onboard","text":"<p>Perhaps you really liked the interactive onboarding PR and want to use it again. You can follow the steps below to nuke the config and get a new PR. Any existing Renovate PRs will be closed after you've completed these steps.</p> <ol> <li>Find your original <code>Configure Renovate</code> PR</li> <li>Rename the original PR to something else, e.g. <code>Configure Renovate - old</code></li> <li>Remove the current Renovate configuration file (e.g. <code>renovate.json</code>) from your mainline branch</li> </ol> <p>Following these steps will trick Renovate into thinking that your repository was never onboarded, and will trigger a new \"Configure Renovate\" PR. If you're using the Mend Renovate App and you don't get a new onboarding PR within a few hours, then please create a Discussions post to request staff trigger it manually.</p>"},{"location":"getting-started/private-packages/","title":"Private package support","text":"<p>It's a very common requirement to be able to support private module/dependency lookups. This page describes Renovate's approach to authentication.</p> <p>First, a quick note on terminology:</p> <ul> <li>The terms <code>module</code>, <code>package</code> and <code>dependency</code> can mostly be used interchangeably below</li> <li>The terms <code>credentials</code>, <code>secrets</code> and <code>authentication</code> are also used interchangeably</li> </ul>"},{"location":"getting-started/private-packages/#when-does-renovate-need-credentials","title":"When does Renovate need credentials?","text":"<p>By default, the only credentials Renovate has are those for the \"platform\", i.e. GitHub, GitLab, etc. If the token used has sufficient permissions, this will enable Renovate to lookup dependencies located in alternative repositories on the same host or any hosted on any embedded package registry on the same host.</p> <p>It's also quite common to need to look up packages on other protected hosts, including npmjs, Docker Hub, or private registries like Nexus or Artifactory. Any time you need Renovate to access such registries with credentials then you will need to provision them as part of your config.</p> <p>There are four times in Renovate's behavior when it may need credentials:</p> <ul> <li>Resolving private config presets</li> <li>Looking up dependency versions</li> <li>Looking up changelogs</li> <li>Passing to package managers when updating lock files or checksums</li> </ul> <p>Note</p> <p>If you self-host Renovate, and have a self-hosted registry which doesn't require authentication to access, then such modules/packages are not considered \"private\" to Renovate.</p>"},{"location":"getting-started/private-packages/#private-config-presets","title":"Private Config Presets","text":"<p>Renovate supports config presets, including those which are private.</p> <p>Although npm presets were the first type supported, they are now deprecated and it is recommend that all users migrate to git-hosted \"local\" presets instead. However if you do still use them, private modules should work if you configure <code>hostRules</code> (recommended) or <code>npmrc</code> including token credentials in your global self-hosted config. It is strongly recommended not to use private modules on a private registry and a warning will be logged if that is found. Credentials stored on disk (e.g. in <code>~/.npmrc</code>) are no longer supported.</p> <p>The recommended way of using local presets is to configure them using \"local\" presets, e.g. <code>\"extends\": [\"local&gt;myorg/renovate-config\"]</code>, and ensure that the platform token has access to that repo.</p> <p>It's not recommended that you use a private repository to host your config while then extending it from a public repository. If your preset doesn't have secrets then you should make it public, while if it does have secrets then it's better to split your preset between a public one which all repos extend, and a private one with secrets which only other private repos extend.</p> <p>In summary, the recommended approach to private presets is:</p> <ul> <li>Host the presets on the same server/platform as other repositories</li> <li>Make sure you install Renovate into the preset repository so that it has credentials to access it from other private repos</li> <li>Use <code>local&gt;....</code> syntax to refer to private presets</li> </ul>"},{"location":"getting-started/private-packages/#dependency-version-lookups","title":"Dependency Version Lookups","text":"<p>Whenever Renovate detects that a project uses a particular dependency, it tries to look up that dependency to see if any new versions exist. If such a package is private, then Renovate must be configured with the relevant credentials. Renovate does not use any package managers for this step and performs all HTTP(S) lookups itself, including insertion of authentication headers.</p> <p>Configuring Renovate with credentials requires <code>hostRules</code>. Each host rule consists of a <code>hostType</code> value and/or a way to match against hosts using <code>matchHost</code>.</p> <p><code>hostType</code> is not particularly important at this step unless you have different credentials for the same host, but it is sometimes useful in later steps so is good to include if you can. It can be either a \"platform\" name (e.g. <code>github</code>, <code>azure</code>, etc) or a \"datasource\" name (e.g. <code>npm</code>, <code>maven</code>, <code>github-tags</code>, etc).</p> <p>If you want to apply credentials only for a nested path within a host then write <code>matchHost</code> as a base URL like <code>https://registry.company.com/nested/path/</code>. If the same credentials apply to all paths on a host and not on any subdomains of it then configure <code>matchHost</code> with a protocol like <code>https://registry.company.com</code>. Finally, to apply credentials to all hosts within the domain, use a <code>matchHost</code> value with no <code>https://</code> prefix, e.g. <code>company.com</code> or <code>registry.company.com</code>, both of which would apply to a host like <code>beta.registry.company.com</code>.</p> <p>In addition to the above options to match against a host, you need to add the credentials. Typically they are either <code>token</code>, or <code>username</code> + <code>password</code>. Other credential terms are not supported yet.</p> Example host rules<pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"registry.npmjs.org\",\n      \"token\": \"abc123\"\n    },\n    {\n      \"matchHost\": \"https://registry.company.com/pypi-simple/\",\n      \"username\": \"engineering\",\n      \"password\": \"abc123\"\n    }\n  ]\n}\n</code></pre> <p>Renovate applies these <code>hostRules</code> to every HTTP(s) request which is sent, so they are largely independent of any platform or datasource logic. With <code>hostRules</code> in place, private package lookups should all work.</p>"},{"location":"getting-started/private-packages/#github-and-enterprise-repo-scoped-credentials","title":"GitHub (and Enterprise) repo scoped credentials","text":"<p>If you need to use different credentials for a specific GitHub repo, then you can configure <code>hostRules</code> like one of the following:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"https://api.github.com/repos/org/repo\",\n      \"token\": \"abc123\"\n    },\n    {\n      \"matchHost\": \"https://github.domain.com/api/v3/repos/org/repo\",\n      \"token\": \"abc123\"\n    }\n  ]\n}\n</code></pre> <p>Renovate will use those credentials for all requests to <code>org/repo</code>.</p>"},{"location":"getting-started/private-packages/#example-for-gomod","title":"Example for gomod","text":"<p>Here's an example for <code>gomod</code> with private <code>github.com</code> repos. Assume this config is used on the <code>github.com/some-other-org</code> repo:</p> <pre><code>{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"dependencyDashboard\": true,\n  \"hostRules\": [\n    {\n      \"matchHost\": \"https://gitlab.com\",\n      \"token\": \"glpat-token_for_different_git_platform\",\n      \"hostType\": \"gitlab\"\n    },\n    {\n      \"matchHost\": \"https://github.com/some-org\",\n      \"token\": \"ghp_token_for_different_org\",\n      \"hostType\": \"go\"\n    },\n    {\n      \"matchHost\": \"https://api.github.com/repos/some-org\",\n      \"token\": \"ghp_token_for_different_org\",\n      \"hostType\": \"github\"\n    }\n  ],\n  \"customEnvVariables\": {\n    \"GOPRIVATE\": \"github.com/some-org,github.com/some-other-org,gitlab.com/some-org\",\n    \"GONOSUMDB\": \"github.com/some-org,github.com/some-other-org,gitlab.com/some-org\",\n    \"GONOPROXY\": \"github.com/some-org,github.com/some-other-org,gitlab.com/some-org\"\n  },\n  \"postUpdateOptions\": [\"gomodTidy\"]\n}\n</code></pre> <p>If you use private Go modules hosted on GitLab, read private Go modules hosted on GitLab to learn how to authenticate the module resolution requests.</p>"},{"location":"getting-started/private-packages/#looking-up-changelogs","title":"Looking up changelogs","text":"<p>When Renovate creates Pull Requests, its default behavior is to locate and embed release notes/changelogs of packages. These release notes are fetched from the source repository of packages and not from the registries themselves, so if they are private then they will require different credentials.</p> <p>When it comes to open source, most packages host their source on <code>github.com</code> in public repositories. GitHub greatly rate limits unauthenticated API requests, so you need to configure credentials for <code>github.com</code> or your deployment will get rate limited quickly. It can be confusing for people who host their own source code privately to be asked to configure a <code>github.com</code> token but without it changelogs for most open source packages will be blocked.</p> <p>Currently the preferred way to configure <code>github.com</code> credentials for self-hosted Renovate is:</p> <ul> <li>Create a read-only Personal Access Token (PAT) for a <code>github.com</code> account. This can be any GitHub account, but we recommend you create an \"empty\" account for this purpose.</li> <li>Add the PAT to Renovate using the environment variable <code>RENOVATE_GITHUB_COM_TOKEN</code></li> </ul> <p>Note</p> <p><code>GITHUB_COM_TOKEN</code> is still parsed and takes precedence over <code>RENOVATE_GITHUB_COM_TOKEN</code>, but is considered deprecated and will be removed in a future major update.</p>"},{"location":"getting-started/private-packages/#package-manager-credentials-for-artifact-updating","title":"Package Manager Credentials for Artifact Updating","text":"<p>In Renovate terminology, \"artifacts\" includes lock files, checksum files, and vendored dependencies. One way of understanding artifacts is: \"everything else that needs to be updated when the dependency version changes\".</p> <p>Not all package managers supported by Renovate require artifact updating, because not all use lock or checksum files. But when such files need updating, Renovate does so by using the package managers themselves instead of trying to \"reverse engineer\" each package manager's file formats and behavior. Importantly, such package managers are run via shell commands and do not understand Renovate's <code>hostRules</code> objects, so Renovate needs to reformat the credentials into formats (such as environment variables or configuration files) which the package manager understands.</p> <p>Because of this need to convert <code>hostRules</code> credentials into a format which package managers understand, sometimes artifact updating can fail due to missing credentials. Sometimes this can be resolved by changing Renovate configuration, but other times it may be due to a feature gap. The following details the most common/popular manager artifacts updating and how credentials are passed:</p>"},{"location":"getting-started/private-packages/#bundler","title":"bundler","text":"<p><code>hostRules</code> with <code>hostType=rubygems</code> are converted into environment variables which Bundler supports.</p>"},{"location":"getting-started/private-packages/#composer","title":"composer","text":"<p>Any <code>hostRules</code> token for <code>github.com</code> or <code>gitlab.com</code> are found and written out to <code>COMPOSER_AUTH</code> in env for Composer to parse. Any <code>hostRules</code> with <code>hostType=packagist</code> are also included. For dependencies on <code>github.com</code> without a Packagist server: use a Personal Access Token for <code>hostRule</code> with <code>hostType=git-tags</code>, do not use an application token. Avoid adding a <code>hostRule</code> with <code>hostType=github</code> because:</p> <ul> <li>it overrides the default Renovate application token for everything else</li> <li>it causes unwanted side effects</li> </ul> <p>The repository in <code>composer.json</code> should have the <code>vcs</code> type with a <code>https</code> URL. For example:</p> <pre><code>{\n  \"repositories\": [\n    {\n      \"type\": \"vcs\",\n      \"url\": \"https://github.com/organization/private-repository\"\n    }\n  ]\n}\n</code></pre>"},{"location":"getting-started/private-packages/#gomod","title":"gomod","text":"<p>If a <code>github.com</code> token is found in <code>hostRules</code>, then it is written out to local GIT_CONFIG_ variables prior to running <code>go</code> commands. The environment variables used are: <code>GIT_CONFIG_KEY_0=url.https://x-access-token:${token}@github.com/.insteadOf GIT_CONFIG_VALUE_0=https://github.com/ GIT_CONFIG_COUNT=1</code>.</p> <p>For git hosts that Renovate doesn't recognise, a token-only host rule is sent as the username without a password. Some git and curl versions don't send such credentials again after a redirect, so configure <code>username</code> and <code>password</code> instead.</p>"},{"location":"getting-started/private-packages/#helm","title":"helm","text":"<p>Maybe you're running your own ChartMuseum server to host your private Helm Charts. This is how you connect to a private Helm repository:</p> Connecting to a private Helm repository<pre><code>module.exports = {\n  hostRules: [\n    {\n      matchHost: 'your.host.io',\n      hostType: 'helm',\n      username: '&lt;your-username&gt;',\n      password: process.env.SELF_HOSTED_HELM_CHARTS_PASSWORD,\n    },\n  ],\n};\n</code></pre> <p>If you need to configure per-repository credentials then you can also configure the above within a repository's Renovate config (e.g. <code>renovate.json</code>).</p>"},{"location":"getting-started/private-packages/#npm","title":"npm","text":"<p>The recommended approaches in order of preference are:</p> <ol> <li>Self-hosted hostRules: Configure a hostRules entry in your self-hosted <code>config.js</code> with the <code>hostType</code>, <code>matchHost</code> and <code>token</code> specified</li> <li>The Mend Renovate App with private modules from npmjs.org: Add an encrypted <code>npmToken</code> to your Renovate config</li> <li>The Mend Renovate App with a private registry: Add an plaintext <code>npmrc</code> plus an encrypted <code>npmToken</code> in config</li> </ol> <p>These approaches are described in full below.</p>"},{"location":"getting-started/private-packages/#add-hostrule-to-self-hosted-config","title":"Add hostRule to self-hosted config","text":"<p>Define <code>hostRules</code> like this:</p> <pre><code>module.exports = {\n  hostRules: [\n    {\n      hostType: 'npm',\n      matchHost: 'registry.npmjs.org',\n      token: process.env.NPMJS_TOKEN,\n    },\n    {\n      hostType: 'npm',\n      matchHost:\n        'https://pkgs.dev.azure.com/{organization}/{project}/_packaging/{feed}/npm/registry/',\n      username: 'VssSessionToken',\n      password: process.env.AZURE_NPM_TOKEN,\n    },\n    {\n      // https://www.jfrog.com/confluence/display/JFROG/npm+Registry\n      // Will be passed as `//artifactory.my-company.com/artifactory/api/npm/npm:_auth=&lt;TOKEN&gt;` to `.npmrc`\n      hostType: 'npm',\n      matchHost: 'https://artifactory.my-company.com/artifactory/api/npm/npm/',\n      token: process.env.ARTIFACTORY_NPM_TOKEN,\n      authType: 'Basic',\n    },\n  ],\n};\n</code></pre> <p>Tip</p> <p>Remember to put a trailing slash at the end of your <code>matchHost</code> URL.</p>"},{"location":"getting-started/private-packages/#add-npmrc-string-to-renovate-config","title":"Add npmrc string to Renovate config","text":"<p>You can add an <code>.npmrc</code> authentication line to your Renovate config under the field <code>npmrc</code>. e.g. a <code>renovate.json</code> might look like this:</p> <pre><code>{\n  \"npmrc\": \"//some.registry.com/:_authToken=abcdefghi-1234-jklmno-aac6-12345567889\"\n}\n</code></pre> <p>If configured like this, Renovate will use this to authenticate with npm and will ignore any <code>.npmrc</code> files(s) it finds checked into the repository. If you wish for the values in your <code>config.npmrc</code> to be merged (prepended) with any values found in repos then also set <code>config.npmrcMerge=true</code>. This merge approach is similar to how <code>npm</code> itself behaves if <code>.npmrc</code> is found in both the user home directory as well as a project.</p>"},{"location":"getting-started/private-packages/#add-npmtoken-to-renovate-config","title":"Add npmToken to Renovate config","text":"<p>If you are using the main npmjs registry then you can configure only the <code>npmToken</code> instead:</p> <pre><code>{\n  \"npmToken\": \"abcdefghi-1234-jklmno-aac6-12345567889\"\n}\n</code></pre>"},{"location":"getting-started/private-packages/#add-an-encrypted-npm-token-to-renovate-config","title":"Add an encrypted npm token to Renovate config","text":"<p>If you don't want all users of the repository to see the plaintext token, you can encrypt it with Renovate's public key instead, so that only Renovate can decrypt it.</p> <p>Go to https://app.renovatebot.com/encrypt, paste in your npm token, select \"Encrypt\", then copy the encrypted result.</p> <p>Paste the encrypted result inside an <code>encrypted</code> object like this:</p> <pre><code>{\n  \"encrypted\": {\n    \"npmToken\": \"xxT19RIdhAh09lkhdrK39HzKNBn3etoLZAwHdeJ25cX+5y52a9kAC7flXmdw5JrkciN08aQuRNqDaKxp53IVptB5AYOnQPrt8MCT+x0zHgp4A1zv1QOV84I6uugdWpFSjPUkmLGMgULudEZJMlY/dAn/IVwf/IImqwazY8eHyJAA4vyUqKkL9SXzHjvS+OBonQ/9/AHYYKmDJwT8vLSRCKrXxJCdUfH7ZnikZbFqjnURJ9nGUHP44rlYJ7PFl05RZ+X5WuZG/A27S5LuBvguyQGcw8A2AZilHSDta9S/4eG6kb22jX87jXTrT6orUkxh2WHI/xvNUEout0gxwWMDkA==\"\n  }\n}\n</code></pre> <p>If you have no <code>.npmrc</code> file then Renovate creates one for you, pointing to the default npmjs registry. If instead you use an alternative registry or need an <code>.npmrc</code> file for some other reason, you should configure it too and substitute the npm token with <code>${NPM_TOKEN}</code> for it to be replaced. e.g.</p> <pre><code>{\n  \"encrypted\": {\n    \"npmToken\": \"xxT19RIdhAh09lkhdrK39HzKNBn3etoLZAwHdeJ25cX+5y52a9kAC7flXmdw5JrkciN08aQuRNqDaKxp53IVptB5AYOnQPrt8MCT+x0zHgp4A1zv1QOV84I6uugdWpFSjPUkmLGMgULudEZJMlY/dAn/IVwf/IImqwazY8eHyJAA4vyUqKkL9SXzHjvS+OBonQ/9/AHYYKmDJwT8vLSRCKrXxJCdUfH7ZnikZbFqjnURJ9nGUHP44rlYJ7PFl05RZ+X5WuZG/A27S5LuBvguyQGcw8A2AZilHSDta9S/4eG6kb22jX87jXTrT6orUkxh2WHI/xvNUEout0gxwWMDkA==\"\n  },\n  \"npmrc\": \"registry=https://my.custom.registry/npm\\n//my.custom.registry/npm:_authToken=${NPM_TOKEN}\"\n}\n</code></pre> <p>Renovate will then use the following logic:</p> <ol> <li>If no <code>npmrc</code> string is present in config then one will be created with the <code>_authToken</code> pointing to the default npmjs registry</li> <li>If an <code>npmrc</code> string is present and has a <code>${NPM_TOKEN}</code> then that placeholder will be replaced with the decrypted token</li> <li>If an <code>npmrc</code> string is present but doesn't have a <code>${NPM_TOKEN}</code> then the file will have <code>_authToken=&lt;token&gt;</code> appended to it</li> </ol>"},{"location":"getting-started/private-packages/#encrypted-entire-npmrc-file-into-config","title":"Encrypted entire .npmrc file into config","text":"<p>Copy the entire <code>.npmrc</code>, replace newlines with <code>\\n</code> characters , and then try encrypting it at https://app.renovatebot.com/encrypt.</p> <p>You will then get an encrypted string that you can substitute into your <code>renovate.json</code> instead. The end-result looks like this:</p> <pre><code>{\n  \"encrypted\": {\n    \"npmrc\": \"WOTWu+jliBtXYz3CU2eI7dDyMIvSJKS2N5PEHZmLB3XKT3vLaaYTGCU6m92Q9FgdaM/q2wLYun2JrTP4GPaW8eGZ3iiG1cm7lgOR5xPnkCzz0DUmSf6Cc/6geeVeSFdJ0zqlEAhdNMyJ4pUW6iQxC3WJKgM/ADvFtme077Acvc0fhCXv0XvbNSbtUwHF/gD6OJ0r2qlIzUMGJk/eI254xo5SwWVctc1iZS9LW+L0/CKjqhWh4SbyglP3lKE5shg3q7mzWDZepa/nJmAnNmXdoVO2aPPeQCG3BKqCtCfvLUUU/0LvnJ2SbQ1obyzL7vhh2OF/VsATS5cxbHvoX/hxWQ==\"\n  }\n}\n</code></pre>"},{"location":"getting-started/private-packages/#automatically-authenticate-for-npm-package-stored-in-private-github-npm-repository","title":"Automatically authenticate for npm package stored in private GitHub npm repository","text":"<pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"https://npm.pkg.github.com/\",\n      \"hostType\": \"npm\",\n      \"encrypted\": {\n        \"token\": \"&lt;Encrypted PAT Token&gt;\"\n      }\n    }\n  ],\n  \"npmrc\": \"@organizationName:registry=https://npm.pkg.github.com/\"\n}\n</code></pre>"},{"location":"getting-started/private-packages/#yarn-2","title":"Yarn 2+","text":"<p>Renovate doesn't support reading <code>npmRegistries</code> and <code>npmScopes</code> from <code>.yarnrc.yml</code>, so <code>hostRules</code> (or <code>npmToken</code>) and <code>npmrc</code> should be configured like above. Renovate updates <code>npmRegistries</code> in <code>.yarnrc.yml</code> with resolved <code>hostRules</code> before running Yarn. For Renovate to overwrite existing <code>npmRegistries</code> entry, the key should match the <code>matchHost</code> minus the protocol (<code>http:</code> or <code>https:</code>) plus the trailing slash.</p> <p>For example, the Renovate configuration:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"https://npm.pkg.github.com/\",\n      \"hostType\": \"npm\",\n      \"encrypted\": {\n        \"token\": \"&lt;Encrypted PAT Token&gt;\"\n      }\n    }\n  ]\n}\n</code></pre> <p>will update <code>.yarnrc.yml</code> as following:</p> <p>If no registry currently set</p> <pre><code>npmRegistries:\n  //npm.pkg.github.com/:\n    npmAuthToken: &lt;Decrypted PAT Token&gt;\n</code></pre> <p>If current registry key has protocol set:</p> <pre><code>npmRegistries:\n  https://npm.pkg.github.com:\n    npmAuthToken: &lt;Decrypted PAT Token&gt;\n</code></pre>"},{"location":"getting-started/private-packages/#pnpm","title":"pnpm","text":"<p>Renovate reads private registries declared in <code>pnpm-workspace.yaml</code> (supported by pnpm v11+): the top-level <code>registry</code> key and the <code>registries</code> map, including its <code>default</code> key and scoped keys like <code>@my-org</code>.</p> <pre><code>registry: https://registry.npmjs.org/\nregistries:\n  default: https://registry.npmjs.org/\n  '@my-org': https://private.example.com/\n</code></pre> <p>These registries are applied to dependencies in member <code>package.json</code> files as well as to <code>catalog</code>/<code>catalogs</code> and <code>overrides</code> entries in the workspace file itself. Registries set this way take precedence over <code>registry=</code>/<code>@scope:registry=</code> lines in <code>.npmrc</code>.</p> <p>Renovate does not read <code>namedRegistries</code>. Authentication is still read from <code>.npmrc</code>/<code>hostRules</code> (pnpm does not store auth in <code>pnpm-workspace.yaml</code>), so configure tokens as described above. Registry values that contain a <code>${...}</code> placeholder are ignored, matching pnpm's own behavior since v11.5.3.</p>"},{"location":"getting-started/private-packages/#maven","title":"maven","text":"<p>GitLab package registry can be authorized using <code>Authorization: Bearer &lt;token&gt;</code>. In GitLab Pipelines authorization can be achieved using following config:</p> <pre><code>hostRules: [\n  {\n    hostType: 'maven',\n    matchHost: 'https://gitlab.host.com/api/v4',\n    token: process.env.CI_JOB_TOKEN,\n  },\n];\n</code></pre>"},{"location":"getting-started/private-packages/#nuget","title":"nuget","text":"<p>For each known NuGet registry, Renovate searches for <code>hostRules</code> with <code>hostType=nuget</code> and matching host. For those found, a command like the following is run: <code>dotnet nuget add source ${registryInfo.feedUrl} --configfile ${nugetConfigFile} --username ${username} --password ${password} --store-password-in-clear-text</code>.</p> <pre><code>hostRules: [\n  {\n    matchHost: 'https://pkgs.dev.azure.com/&lt;org&gt;/',\n    hostType: 'nuget',\n    username: 'user', // doesn't matter for azure\n    password: '&lt;PAT&gt;',\n  },\n];\n</code></pre>"},{"location":"getting-started/private-packages/#pip","title":"pip","text":"<p>If a <code>requirements.txt</code> file has an index-url then Renovate follows that link, instead of following any link set in the <code>registryUrls</code> array. To override the URL found in <code>requirements.txt</code>, you must create a custom <code>packageRules</code> setting. This is because <code>packageRules</code> are applied after package file extraction.</p> <p>For example:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchManagers\": [\"pip_requirements\"],\n      \"registryUrls\": [\"https://docker.mycompany.domain\"]\n    }\n  ]\n}\n</code></pre>"},{"location":"getting-started/private-packages/#pipenv","title":"pipenv","text":"<p>If a <code>Pipfile</code> contains a <code>source</code> with <code>USERNAME</code> or <code>PASSWORD</code> environment variables and there is a <code>hostRules</code> entry with a matching host plus <code>username</code> and <code>password</code> fields, then these variables would be passed to <code>pipenv lock</code>.</p> <p>For example:</p> <pre><code>[[source]]\nurl = \"https://$USERNAME:${PASSWORD}@mypypi.example.com/simple\"\nverify_ssl = true\nname = \"pypi\"\n</code></pre>"},{"location":"getting-started/private-packages/#pip-compile","title":"pip-compile","text":"<p>The pip-compile manager can extract these directives from the input file given to Renovate:</p> <ul> <li><code>--index-url</code></li> <li><code>--extra-index-url</code></li> </ul> <p>Renovate matches those URLs with credentials from matching <code>hostRules</code> blocks in the Renovate configuration. Then Renovate passes the information to <code>pip-compile</code> via environment variables.</p> <p>Put directives in the .in file, avoid the lockfile</p> <p>You must put the <code>--[extra-]index-url</code> directive(s) in the <code>.in</code> file, for <code>pip-compile</code> to use during Renovate jobs. Do not put the directive(s) in the lockfile, as this is not supported.</p> requirements.in<pre><code>--extra-index-url https://pypi.my.domain/simple\n\nprivate-package==1.2.3\n</code></pre> <pre><code>{\n  \"pip-compile\": {\n    \"managerFilePatterns\": [\"requirements.txt\"]\n  },\n  \"hostRules\": [\n    {\n      \"matchHost\": \"pypi.my.domain\",\n      \"username\": \"myuser\",\n      \"password\": \"mypassword\"\n    }\n  ]\n}\n</code></pre>"},{"location":"getting-started/private-packages/#packages-that-renovate-needs","title":"Packages that Renovate needs","text":"<p>Renovate relies on <code>pip</code>'s integration with the Python keyring package along with the keyrings.envvars backend for this.</p>"},{"location":"getting-started/private-packages/#self-hosting-renovate","title":"Self-hosting Renovate","text":"<p>This section only applies to users who self-host Renovate. If you self-host and use Containerbase, or our Docker sidecar container, then Renovate can already access the packages it needs.</p> <p>But if you are self-hosting Renovate and:</p> <ul> <li>not running Renovate in a Containerbase environment</li> <li>or, not using the Docker sidecar container</li> </ul> <p>Then you must install the Python keyring package and the keyrings.envvars package into your self-hosted environment.</p>"},{"location":"getting-started/private-packages/#poetry","title":"poetry","text":"<p>For every Poetry source, a <code>hostRules</code> search is done and then any found credentials are added to env like <code>POETRY_HTTP_BASIC_X_USERNAME</code> and <code>POETRY_HTTP_BASIC_X_PASSWORD</code>, where <code>X</code> represents the normalized name of the source in <code>pyproject.toml</code>.</p> <pre><code>module.exports = {\n  hostRules: [\n    {\n      matchHost: 'pypi.example.com',\n      hostType: 'pypi',\n      username: process.env.PYPI_USERNAME,\n      password: process.env.PYPI_PASSWORD,\n    },\n  ],\n};\n</code></pre> <p>If you're self-hosting Renovate via the GitLab Runner and want to access packages from private GitLab registries, you can use the GitLab CI job token for authentication:</p> <pre><code>module.exports = {\n  hostRules: [\n    {\n      matchHost: 'gitlab.example.com',\n      hostType: 'pypi',\n      username: 'gitlab-ci-token',\n      password: process.env.CI_JOB_TOKEN,\n    },\n  ],\n};\n</code></pre>"},{"location":"getting-started/private-packages/#automatic-hostrules-credentials-for-platform-hosted-registries","title":"Automatic hostRules credentials for platform-hosted registries","text":""},{"location":"getting-started/private-packages/#github-packages","title":"GitHub Packages","text":"<p>For GitHub Packages, Renovate will automatically provision hostRules for both <code>ghcr.io</code> (containers) and <code>*.pkg.github.com</code> (maven, npm, nuget, rubygems) using the GitHub platform token. This means that any private packages hosted on GitHub will be automatically authenticated if they are accessible using the same token by Renovate.</p> <p>If you wish to override this authentication by providing a different token, then your rule must be at least as specific as the automatic rule that Renovate generates. For example:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"npm.pkg.github.com\",\n      \"hostType\": \"npm\",\n      \"token\": \"some-personal-access-token\"\n    }\n  ]\n}\n</code></pre>"},{"location":"getting-started/private-packages/#encryption-and-the-mend-renovate-app","title":"Encryption and the Mend Renovate App","text":"<p>Many users use the Mend Renovate App, which is hosted by Mend. If you are a user of this app, and have private modules, then the following is applicable.</p>"},{"location":"getting-started/private-packages/#private-presets-with-public-repositories","title":"Private presets with public repositories","text":"<p>If you have a preset in a private repo but reference (\"extend\") it from a public repository then it won't work. This is because public repositories are provided with a token scoped to only that particular repository, and not for all repositories within the organization. This is a security measure so that if a the token is accidentally leaked publicly, the damage is limited to the public repository it leaked to and not to every repository within the organization.</p> <p>The solution to this is that you should break your presets into public and private ones, and reference only the public ones from public repositories.</p>"},{"location":"getting-started/private-packages/#encrypting-secrets","title":"Encrypting secrets","text":"<p>It is strongly recommended that you avoid committing secrets to repositories, including private ones, and this includes secrets needed by Renovate to access private modules. The preferred approach to secrets is that the administrator configures them as <code>hostRules</code> which are then applied to all repositories which Renovate accesses.</p> <p>Store secrets for your Mend-hosted app via the web UI</p> <p>Mend no longer supports putting encrypted secrets in the Renovate config file on your repository. Going forward, all secrets must be stored in the App settings via the web UI. If you have encrypted secrets in your Renovate config, you must migrate them to the web UI. Read Migrating Secrets from Repo Config to App Settings to learn how.</p> <p>If you need to provide credentials to the Mend Renovate App, please do this:</p> <ol> <li> <p>Add each secret string in the Credentials section of Organisation or Repository settings in the web UI at http://developer.mend.io.</p> <p></p> </li> <li> <p>Reference secrets inside your Renovate config files with notation: <code>{{ secrets.YOUR_SECRET }}</code>.</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"github.com\",\n      \"token\": \"{{ secrets.RENOVATE_GITHUB_COM_TOKEN }}\"\n    }\n  ]\n}\n</code></pre> </li> </ol> <p>For more details, see Using Secrets with Mend Cloud Apps.</p>"},{"location":"getting-started/private-packages/#access-to-github-actions-secrets","title":"Access to GitHub Actions Secrets","text":"<p>The Mend Renovate App does not run using GitHub Actions, but such secrets would be a bad fit for the app anyway for the following reasons:</p> <ul> <li>The app would be granted access to all the repository/org secrets, not just the ones you want</li> <li>If Renovate wants access to such secrets, it would need to ask for them from every user, not just the ones who want to use this approach (GitHub does not support the concept of optional permissions for Apps, so people do not have the option to decline)</li> </ul>"},{"location":"getting-started/private-packages/#admin-config-vs-userrepository-config-for-self-hosted-users","title":"Admin config vs User/Repository config for Self-hosted users","text":"<p>\"Admin config\" refers to the config which the Renovate administrator provides at startup, e.g. using environment variables, CLI parameters, or the <code>config.js</code> configuration file. User/Repository config refers to the in-repository config file which defaults to <code>renovate.json</code> but has a large number of alternative filenames supported.</p> <p>If there is a need to supply custom rules for certain repository, it can still be done using the <code>config.js</code> file and the <code>repositories</code> array.</p> <p>If per-repository config must be done within the repository, it is still recommended against committing secrets directly (including e.g. <code>.npmrc</code> files with tokens) and instead encrypting them with a custom public key first. For instructions on this, see the above section on encrypting secrets for the Mend Renovate App but instead:</p> <ul> <li>Save a copy of the https://app.renovatebot.com/encrypt HTML file locally, or host it locally</li> <li>Generate a public/private key pair for the app using the instructions in privateKey</li> <li>Replace the existing public key in the HTML with the public key you generated in the step prior</li> <li>Use the resulting HTML encrypt page to encrypt secrets for your app before adding them to user/repository config</li> <li>Configure the app to run with <code>privateKey</code> set to the private key you generated above</li> </ul> <p>Note</p> <p>Encrypted values can't be used in the \"Admin config\".</p>"},{"location":"getting-started/private-packages/#hostrules-configuration-using-environment-variables","title":"hostRules configuration using environment variables","text":"<p>Self-hosted users can enable the option <code>detectHostRulesFromEnv</code> to configure the most common types of <code>hostRules</code> via environment variables.</p>"},{"location":"getting-started/running/","title":"Running Renovate","text":"<p>As end user, you can choose from these ways to run Renovate:</p> <ul> <li>You use the Mend Renovate App</li> <li>You self-administer/host your own Renovate instance</li> <li>Someone else is hosting Renovate, and you install/configure it for the repositories you choose</li> </ul> <p>If you're using the Mend Renovate App, or if someone else is hosting Renovate for you, skip ahead to the installing &amp; onboarding page.</p>"},{"location":"getting-started/running/#self-hosting-renovate","title":"Self-Hosting Renovate","text":"<p>When self-hosting Renovate you're the \"administrator\" of that deployment, this means you:</p> <ul> <li>provide the infrastructure that Renovate runs on,</li> <li>provision Renovate's global config,</li> <li>make sure Renovate runs regularly,</li> <li>make sure Renovate itself is updated</li> </ul> <p>If you're self-hosting Renovate on Windows, read Self-hosting on Windows to prevent line endings from confusing Renovate.</p> <p>If you're running Renovate Community Edition or Renovate Enterprise Edition, refer to the documentation on the <code>mend/renovate-ce-ee</code> GitHub repository.</p>"},{"location":"getting-started/running/#available-distributions","title":"Available distributions","text":""},{"location":"getting-started/running/#npm-package-cli","title":"npm package (CLI)","text":"<p>Renovate's Open Source CLI is built and distributed as the npm package <code>renovate</code>. You can run this package in any Node.js environment - even via <code>npx</code> - and it will process all the repositories it is configured with, before exiting.</p> <p>When installing Renovate via npm you are responsible for installing any third-party tools or languages like Ruby, Python, Composer, Bundler, Poetry, etc.</p> <p>The <code>renovate</code> npm package is compatible with all of Renovate's supported platforms.</p>"},{"location":"getting-started/running/#docker-images","title":"Docker images","text":"<p>Renovate is also distributed as Docker images on Docker Hub (<code>renovate/renovate</code>) and GitHub container registry (<code>ghcr.io/renovatebot/renovate</code>). These Docker images work on all the hosting platforms that Renovate supports.</p> <p>Both <code>linux/amd64</code> and <code>linux/arm64</code> architectures are supported, but you may still find some bugs in the <code>arm64</code> image. You can't run the Docker images in a Windows or macOS container.</p> <p>In general, you can run Renovate natively on Windows as long as you have all tools it will need (e.g. <code>npm</code>, <code>pipenv</code>, etc.) preinstalled before you run Renovate.</p> <p>There are two Docker image flavors:</p> <ul> <li>The default image, which installs required tools at runtime (default for <code>latest</code> tag),</li> <li>The <code>-full</code> image, which comes with latest or very recent versions of every tool pre-installed</li> </ul>"},{"location":"getting-started/running/#the-default-image-formerly-slim","title":"The default image (formerly <code>slim</code>)","text":"<p>The default image only comes with the Node.js environment. Renovate will then install any needed tools when it runs. Read the <code>binarySource=install</code> documentation for more details. We recommend this default image for most users.</p> <p>Renovate supports a persistent cache for downloaded tools, so that it only needs to unpack the tools on later runs. Use the <code>containerbaseDir</code> config option to control where Renovate stores its containerbase cache.</p> <p>Warning</p> <p>The usage of <code>binarySource=docker</code> is deprecated, and will be removed in the future.</p> <p>If you want, you can map the Docker socket into the container so that Renovate can dynamically invoke \"sidecar\" images when needed. You'll need to set <code>binarySource=docker</code> for this to work. Read the <code>binarySource</code> config option docs for more information.</p>"},{"location":"getting-started/running/#the-full-image","title":"The full image","text":"<p>The <code>-full</code> image comes with most package managers that Renovate supports, but not all package managers. Update your Docker images regularly to keep the pre-installed tools up-to-date.</p> <p>The full image is for users who don't want to download or install things at runtime. This image has some downsides, because it:</p> <ul> <li>Comes pre-installed with one version of each language/manager - usually the latest</li> <li>Weighs several gigabytes</li> </ul>"},{"location":"getting-started/running/#github-action","title":"GitHub Action","text":"<p>Renovate's npm tool is also provided as a GitHub Action on <code>renovatebot/github-action</code>. Details on how to use it can be found in the repository.</p>"},{"location":"getting-started/running/#gitlab-runner","title":"GitLab Runner","text":"<p>The Renovate team provide a \"Renovate Runner\" project to make it easier to run Renovate as a CI pipeline job. This supports both <code>gitlab.com</code> and self-hosted GitLab. Details for how it works can be found in the project.</p>"},{"location":"getting-started/running/#mend-renovate-self-hosted-community-edition-enterprise-edition","title":"Mend Renovate Self-Hosted (Community Edition / Enterprise Edition)","text":"<p>Mend Renovate Self-Hosted Community Edition (sometimes \"Renovate CE\"/\"CE\") and Enterprise Edition (sometimes \"Renovate EE\"/\"EE\") are closed-source offerings of Renovate for self-hosted users.</p> <p>It is built similarly to the default \"full\" Renovate image described above, but with these differences:</p> <ul> <li>It is a stateful app and does not exit after processing all repositories</li> <li>It is installed as an App on GitHub, and behaves similarly on GitLab - for example responding to webhooks</li> <li>It includes a priority job queue which prioritizes events like merged PRs over scheduled jobs</li> <li>It is released every 2 weeks in a slightly slower and more stable cadence than Renovate OSS, which releases on every commit</li> <li>It's licensed using an end-user license agreement (EULA) and not the Affero General Public License (AGPL-3.0-only)</li> </ul> <p>Plus, the Enterprise Edition has:</p> <ul> <li>Horizontal scaling to run multiple 'worker' containers</li> <li>Dedicated support from Mend.io</li> <li>Premium features, including Smart Merge Control</li> </ul> <p>Mend Renovate Self-Hosted CE and EE have support for GitHub.com, GitHub Enterprise Server, GitLab.com, GitLab Self-Managed, and Bitbucket Data Center.</p> <p>Go to the Mend.io website to learn more about Renovate Enterprise Edition.</p> <p>To learn how to configure Renovate CE or Renovate EE, read the documentation on the public GitHub repository <code>mend/renovate-ce-ee</code>.</p>"},{"location":"getting-started/running/#mend-remediate","title":"Mend Remediate","text":"<p>Mend Remediate is part of Mend's Classic Repository Integrations product which is for Mend commercial customers, with full enterprise support.</p> <p>It is integrated with Mend's vulnerability detection capabilities and additionally supports the capability of \"horizontal\" scalability - the ability to configure many Renovate \"worker\" containers which share a common job queue in order to not conflict with each other.</p> <p>Mend Remediate supports GitHub Enterprise Server, GitLab self-hosted, and Bitbucket Server.</p>"},{"location":"getting-started/running/#forking-renovate-app","title":"Forking Renovate app","text":"<p>\"Forking Renovate\" is the sister app to the Mend Renovate App. The difference is that Forking Renovate does not need <code>write</code> permissions to create branches within the repo, and instead submits PRs from its own fork. Because of how it works, it functions on public repositories only and additionally cannot support <code>automerge</code> capabilities.</p> <p>Install Forking Renovate from GitHub App store.</p>"},{"location":"getting-started/running/#benefits","title":"Benefits","text":"<p>Forking Renovate needs only <code>read</code> level access to the code of any repository it runs on.</p>"},{"location":"getting-started/running/#drawbacks","title":"Drawbacks","text":"<p>If you use Forking Renovate, you'll miss out on these features of the regular Renovate app:</p> <ul> <li>Automerge</li> <li>The <code>baseBranchPatterns</code> config option</li> </ul>"},{"location":"getting-started/running/#hosting-renovate","title":"Hosting Renovate","text":"<p>After deciding on a Renovate distribution, you need to decide where and how to run it.</p> <p>For the GitHub Action and GitLab Runner approaches, they will naturally run on their respective CI infrastructure. For the npm package approach or Docker images, you will need some form of VM or container infrastructure to run Renovate on.</p> <p>In all the above cases you must make sure that some form of cron-like capability exists to schedule when Renovate runs. We recommend that you run Renovate hourly, if possible.</p> <p>Mend Renovate On-Premises and Mend Remediate both run as long-lived containers, so they do not need any cron-like concept as it is built-in.</p>"},{"location":"getting-started/running/#global-config","title":"Global config","text":"<p>Renovate's server-side/admin config is referred to as its \"global\" config, and can be set by using either:</p> <ul> <li>a config file, or</li> <li>an additional config file, or</li> <li>environment variables, or</li> <li>CLI parameters</li> </ul> <p>By default Renovate checks if a file named <code>config.js</code> is present. Any other (<code>*.js</code>, <code>*.ts</code>, <code>*.json</code>, <code>*.json5</code>, <code>*.yaml</code> or <code>*.yml</code>) file is supported, when you reference it with the <code>RENOVATE_CONFIG_FILE</code> environment variable (for example: <code>RENOVATE_CONFIG_FILE=config.yaml</code>).</p> <p>Renovate checks for the additional config file only if the <code>RENOVATE_ADDITIONAL_CONFIG_FILE</code> is set. Behaviour wise this config is similar to the file config, except that it has higher priority than the default config file.</p> <p>Some config is global-only, meaning that either it is only applicable to the administrator or it can only be controlled by the administrator and not repository users. Those are documented in Self-hosted Configuration. Your global config can include both global as well as non-global configuration options, while user/repo config can only include non-global options. We recommend that you keep as much of the non-global config as possible in repository config files. This way the Renovate end users can see as much of the configuration as possible.</p> <p>If you are configuring Renovate using environment variables, there are two possibilities:</p> <ul> <li>Upper-cased, camel-cased, <code>RENOVATE_</code>-prefixed single config options like <code>RENOVATE_TOKEN=abc123</code> or <code>RENOVATE_GIT_AUTHOR=a@b.com</code></li> <li>Set <code>RENOVATE_CONFIG</code> to a stringified version of the full JSON config, for example: <code>RENOVATE_CONFIG='{\"token\":\"abc123\",\"gitAuthor\":\"a@b.com\"}'</code></li> </ul> <p>If you combine both of the above then any single config option in the environment variable will override what's in <code>RENOVATE_CONFIG</code>. Mergeable options, like <code>hostRules</code> or <code>packageRules</code>, are combined instead: lists are appended and objects are merged.</p> <p>Note</p> <p>It's also possible to change the default prefix from <code>RENOVATE_</code> using <code>ENV_PREFIX</code>. For example: <code>ENV_PREFIX=RNV_ RNV_TOKEN=abc123 renovate</code>.</p>"},{"location":"getting-started/running/#using-configjs","title":"Using <code>config.js</code>","text":"<p>If you use a <code>config.js</code>, it will be expected to export a configuration via <code>module.exports</code>. The value can be either a plain JavaScript object like in this example where <code>config.js</code> exports a plain object:</p> <pre><code>module.exports = {\n  token: 'abcdefg',\n};\n</code></pre> <p><code>config.js</code> may also export a <code>Promise</code> of such an object, or a function that will return either a plain JavaScript object or a <code>Promise</code> of such an object. This allows one to include the results of asynchronous operations in the exported value. An example of a <code>config.js</code> that exports an <code>async</code> function (which is a function that returns a <code>Promise</code>) can be seen in a comment for #10011: Allow autodiscover filtering for repo topic and more examples can be seen in <code>file.spec.ts</code>.</p>"},{"location":"getting-started/running/#using-typescript-config-files","title":"Using TypeScript config files","text":"<p>Renovate supports TypeScript config files (<code>.ts</code>, <code>.mts</code>, <code>.cts</code>) via Node.js's built-in type stripping. Set the <code>RENOVATE_CONFIG_FILE</code> environment variable to point to your TypeScript config file:</p> <pre><code>RENOVATE_CONFIG_FILE=config.ts renovate\n</code></pre> <p>An example <code>config.ts</code>:</p> <pre><code>import type { AllConfig } from 'renovate/dist/config/types';\n\nconst config: AllConfig = {\n  platform: 'github',\n  token: process.env.RENOVATE_TOKEN,\n  repositories: ['my-org/my-repo'],\n};\n\nexport default config;\n</code></pre> <p>TypeScript config files follow the same rules as JavaScript config files: they can export a plain object, a <code>Promise</code>, or a function. The <code>.mts</code> extension is always treated as an ES module, and <code>.cts</code> is always treated as CommonJS.</p>"},{"location":"getting-started/running/#authentication","title":"Authentication","text":"<p>Regardless of platform, you need to select a user account for <code>renovate</code> to assume the identity of, and generate a Personal Access Token. We recommend you use <code>@renovate-bot</code> as username if you're on a self-hosted server where you can set all usernames. We also recommend you configure <code>config.gitAuthor</code> with the same identity as your Renovate user, for example: <code>\"gitAuthor\": \"Renovate &lt;renovate@some.domain.test&gt;\"</code>.</p> <p>Warning</p> <p>We recommend you use a single, dedicated username for your Renovate. Never share the Renovate username with your other bots, as this can cause flip-flopping.</p>"},{"location":"getting-started/running/#docs","title":"Docs","text":"<p>Read the platform-specific docs to learn how to setup authentication on your platform:</p> <ul> <li>Azure DevOps</li> <li>Bitbucket Cloud</li> <li>Bitbucket Server</li> <li>Forgejo</li> <li>Gitea</li> <li>github.com and GitHub Enterprise Server</li> <li>GitLab</li> <li>SCM-Manager</li> </ul>"},{"location":"getting-started/running/#githubcom-token-for-changelogs-and-tools","title":"GitHub.com token for changelogs (and tools)","text":"<p>If you are running on any platform except github.com, you should also set the environment variable <code>RENOVATE_GITHUB_COM_TOKEN</code> and put the Personal Access Token for github.com in it. This account can be any account on GitHub, and needs only <code>read-only</code> access. It's used when fetching changelogs for repositories, as well as some Renovate-specific tools at runtime, in order to increase the hourly API limit. It's also OK to configure the same as a host rule instead, if you prefer that.</p> <p>Note</p> <p>If you're using Renovate in a project where dependencies are loaded from github.com (such as Go modules hosted on GitHub), we highly recommend that you add a <code>github.com</code> PAT (classic). Otherwise you will exceed the rate limit for the github.com API, which will lead to Renovate closing and reopening PRs because it could not get reliable info on updated dependencies.</p>"},{"location":"getting-started/running/#self-hosting-examples","title":"Self-hosting examples","text":"<p>For more examples on running Renovate self-hosted, read our Self-hosted examples page.</p>"},{"location":"getting-started/running/#community-tools","title":"Community tools","text":"<p>There are also some community-maintained tools which may help running Renovate.</p>"},{"location":"getting-started/use-cases/","title":"Use Cases","text":"<p>This page describes common use cases for Renovate.</p>"},{"location":"getting-started/use-cases/#development-dependency-updates","title":"Development dependency updates","text":"<p>The original use case, and the most popular one, is for developers to automate dependency updating in their software projects.</p>"},{"location":"getting-started/use-cases/#updating-of-package-files","title":"Updating of package files","text":"<p>We use the term \"package file\" to describe files which reference dependencies. Package files are managed by a \"package manager\".</p> <p>Example package files include:</p> <ul> <li><code>package.json</code>, managed by npm or Yarn</li> <li><code>Gemfile</code>, managed by Bundler</li> <li><code>go.mod</code>, managed by <code>go</code> modules</li> </ul>"},{"location":"getting-started/use-cases/#how-renovate-updates-a-package-file","title":"How Renovate updates a package file","text":"<p>Renovate:</p> <ol> <li>Scans your repositories to find package files and their dependencies</li> <li>Checks if any newer versions exist</li> <li>Raises Pull Requests for available updates</li> </ol> <p>The Pull Requests patch the package files directly, and include changelogs for the newer versions (if they are available).</p> <p>By default:</p> <ul> <li>You'll get separate Pull Requests for each dependency</li> <li>Major updates are kept separate from non-major updates</li> </ul>"},{"location":"getting-started/use-cases/#package-managers-with-lock-files","title":"Package managers with lock files","text":"<p>Many package managers support \"lock files\", which \"freeze\" the entire dependency tree including transitive dependencies. npm, Yarn, Bundler, Composer, Poetry, Pipenv, and Cargo all support or use lock files.</p> <p>If you use a lock file then changes to your package file must come with a compatible change to the lock file. Renovate can patch/update package files directly, but can't \"reverse engineer\" lock files. This is why Renovate lets the package manager do the lock file update. A simplified example:</p> <ol> <li>The repository has a <code>package.json</code> and <code>package-lock.json</code> with version <code>1.0.0</code> of a dependency</li> <li>Renovate sees that version <code>1.1.0</code> is available</li> <li>Renovate patches the <code>package.json</code> to change the dependency's version from <code>1.0.0</code> to <code>1.1.0</code></li> <li>Renovate runs <code>npm install</code> to let <code>npm</code> update the <code>package-lock.json</code></li> <li>Renovate commits the <code>package.json</code> and <code>package-lock.json</code></li> <li>Renovate creates the PR</li> </ol>"},{"location":"getting-started/use-cases/#custom-dependency-extraction","title":"Custom dependency extraction","text":"<p>Renovate supports 90+ types of package files. By default, Renovate finds most dependencies, but there are exceptions. This can be because:</p> <ul> <li>The package manager/file format is not supported, or</li> <li>The file format is not a standard or is proprietary</li> </ul> <p>If your dependencies are not found by default, you can use our <code>custom</code> manager to set your own custom patterns to extract dependencies. You configure the custom manager by telling it:</p> <ul> <li>Which file pattern(s) to match</li> <li>How to find the dependency name and version from within the file</li> <li>Which datasource (e.g. Docker registry, npm registry, etc) to use to look up new versions</li> </ul> <p>The end result is that Renovate can keep dependencies in custom file formats up-to-date as long as the dependency datasource is known to Renovate.</p>"},{"location":"getting-started/use-cases/#devops-tooling","title":"DevOps tooling","text":"<p>Renovate is increasingly used for purposes which are traditionally described as DevOps instead of Developer.</p>"},{"location":"getting-started/use-cases/#devops-infrastructure-as-code-updates","title":"DevOps / Infrastructure as Code updates","text":"<p>It's common for repositories to have DevOps-related files like CI/CD configs, or \"Infrastructure as Code\" (IaC) files. Examples of IaC files are Docker, Kubernetes or Terraform files. Renovate handles IaC files as \"package managers\" and \"package files\" and can find and update them.</p>"},{"location":"getting-started/use-cases/#docker-compatible-images","title":"Docker-compatible images","text":"<p>Docker-compatible images are a key building block of modern software. These images are commonly found in CI/CD pipeline configs or referenced in IaC files. Renovate finds these IaC files and then searches Docker registries to see if there are newer tags or digests.</p>"},{"location":"getting-started/use-cases/#tag-based-updating","title":"Tag-based updating","text":"<p>An example of tag-based updating are <code>node</code> images from Docker Hub. The <code>node</code> images use these tag formats:</p> <ul> <li><code>14.17.4</code></li> <li><code>14.17.4-alpine3.11</code></li> </ul> <p>Renovate understands both formats and raises updates like these:</p> <ul> <li>From <code>14.17.4</code> to <code>14.17.5</code></li> <li>From <code>14.17.4-alpine3.11</code> to <code>14.17.5-alpine3.11</code></li> </ul>"},{"location":"getting-started/use-cases/#docker-digests","title":"Docker digests","text":"<p>You can check and update versions like <code>14.17.4</code> yourself. But looking up image digests like <code>341976f40d963a425d627a349a9b0034e1eafffbf4c82a173c1465ee403878d9</code> and updating them yourself doesn't scale. So let Renovate update your Docker digests.</p> <p>You can even configure Renovate to \"pin\" your Docker digests. When you're using tag+digest based images, you'll have immutable builds.</p>"},{"location":"getting-started/use-cases/#internal-package-updates","title":"Internal package updates","text":"<p>Your company typically has dozens of repositories, if not hundreds or thousands. These repositories often rely on other repositories and may have upstream or downstream internal dependencies. In such cases, it is best practice to:</p> <ul> <li>Update downstream links as soon as possible, and</li> <li>Keep internal version use as consistent as possible</li> </ul> <p>You can use Renovate to follow this best practice. Renovate finds and updates internal dependencies just like external or Open Source dependencies.</p>"},{"location":"getting-started/use-cases/#automerge-internal-dependencies","title":"Automerge internal dependencies","text":"<p>Renovate's automerge feature is really useful for internal dependencies where you can say \"if it passes tests let's merge it\".</p> <p>To learn more about \"automerge\" read the key concepts, automerge documentation.</p>"},{"location":"getting-started/use-cases/#example-of-automerging-internal-dependencies","title":"Example of automerging internal dependencies","text":"<p>We use these Renovate features to automerge an internal dependency:</p> <ul> <li>Git submodule support</li> <li><code>automerge</code> set to <code>true</code></li> <li><code>automergeType</code> set to <code>branch</code></li> </ul>"},{"location":"getting-started/use-cases/#background-information","title":"Background information","text":"<p>We split our work over two repositories:</p> <ol> <li>The <code>renovatebot/renovate</code> repository, which has the Renovate code, and most of the Markdown documentation files</li> <li>The <code>renovatebot/renovatebot.github.io</code> repository, which has a submodule link to the <code>renovatebot/renovate</code> repository</li> </ol>"},{"location":"getting-started/use-cases/#update-process","title":"Update process","text":"<ol> <li>We edit our documentation files on the main Renovate repository <code>renovatebot/renovate</code></li> <li>Renovate sees the change(s) to the <code>renovatebot/renovate</code> Git submodule, and creates an update branch on the documentation build repository</li> <li>If the tests pass Renovate automerges the update branch into the <code>main</code> branch.</li> <li>A GitHub Actions workflow runs on <code>main</code> to build the documentation site and push the build live on our GitHub Pages domain</li> </ol>"},{"location":"getting-started/use-cases/#benefits","title":"Benefits","text":"<p>The way we've set things up means we avoid:</p> <ul> <li>reviewing PRs</li> <li>manually merging PRs</li> </ul> <p>In fact we don't even get the update PR anymore!</p>"},{"location":"getting-started/use-cases/#advanced-configuration","title":"Advanced configuration","text":"<p>The capabilities listed below are commonly needed for all the above use cases.</p>"},{"location":"getting-started/use-cases/#batched-updates","title":"Batched updates","text":"<p>Renovate defaults to separating each dependency update into its own PR. But you may want to batch or \"group\" updates together. For example, group all patch updates into one PR or even all non-major updates together (patches and minor updates).</p> <p>You can configure batched updates by setting a <code>groupName</code> as part of <code>packageRules</code>.</p> <p>To learn more about batched updates, see Package grouping.</p>"},{"location":"getting-started/use-cases/#scheduled-updates","title":"Scheduled updates","text":"<p>You may want to limit the times when Renovate is allowed to raise updates. This reduces \"noise\" during your working hours, and reduces the chance of CI contention. You can tell Renovate to \"not bother you\" during times when you're using the CI resources, or want to focus on your work.</p> <p>You can set the time ranges during which Renovate creates updates in the <code>schedule</code> field.</p>"},{"location":"getting-started/use-cases/#on-demand-updates-via-dependency-dashboard","title":"On-demand updates via Dependency Dashboard","text":"<p>You can use Renovate's \"Dependency Dashboard\" on platforms which support dynamic Markdown checkboxes:</p> <ul> <li>Forgejo</li> <li>Gitea</li> <li>GitHub</li> <li>GitLab</li> </ul> <p>When you enable the Dependency Dashboard, Renovate creates a \"Dependency Dashboard\" issue. This issue lists all updates which are pending, in progress, or were previously closed ignored.</p> <p>If you want to get an update ahead of schedule, or want to retry a previously closed update: select the update's checkbox in the Dependency Dashboard.</p>"},{"location":"getting-started/use-cases/#dependency-dashboard-approval","title":"Dependency Dashboard Approval","text":"<p>If you enable the Dependency Dashboard you can opt-in to a different workflow for some, or even all of your packages. We call this the \"Dependency Dashboard Approval\" workflow.</p> <p>Here's how it works:</p> <ul> <li>You tell Renovate which package updates need \"Dashboard Approval\" by setting a custom <code>packageRule</code></li> <li>Renovate only raises updates for packages that need \"Dashboard Approval\" after you select the corresponding checkbox on the dashboard</li> </ul>"},{"location":"getting-started/use-cases/#benefits-of-using-dependency-dashboard-approval","title":"Benefits of using Dependency Dashboard Approval","text":"<ul> <li>By not raising PRs automatically, it allows you to request updates on-demand when you're ready, and</li> <li>It offers you an alternative to permanently ignoring/disabling certain types of updates, like major updates</li> </ul> <p>When you use the Dependency Dashboard Approval workflow you have full visibility and control over your updates.</p>"},{"location":"getting-started/use-cases/#configuration-presets","title":"Configuration presets","text":"<p>You may run Renovate on many, or even all your repositories. This also means that you might want a similar config for all of your repositories. You can use configuration \"presets\" to avoid duplicating your configuration across your repositories.</p> <p>Configuration presets are JSON configuration files which are committed to repositories and then referenced from others. Renovate includes over 100 built-in presets, like the default recommended <code>config:recommended</code> preset.</p> <p>The typical workflow for a company is:</p> <ul> <li>Create a dedicated repository to store the company's default Renovate settings</li> <li>Set that repository as the default <code>extends</code> value when onboarding new repositories</li> </ul> <p>This means that repositories get the centralized config by default, and any changes made to the centralized config repository are propagated to other repositories immediately.</p>"},{"location":"getting-started/use-cases/#how-others-use-renovate","title":"How others use Renovate","text":"<p>You can learn a lot by seeing how others use Renovate. Check out the Swissquote user story.</p>"},{"location":"key-concepts/automerge/","title":"Introduction","text":"<p>You can choose to automate some dependency updates by letting Renovate automerge its PR. Renovate will wait for the required tests to pass before it automerges.</p>"},{"location":"key-concepts/automerge/#renovate-automerges-take-time","title":"Renovate automerges take time","text":"<p>Renovate automerges take time, so Renovate can't automerge a PR the second it passes your required tests. Before you start troubleshooting, wait! Give Renovate about two hours, so Renovate can run in a state where your tests have passed, and the PR branch is up-to-date with the base branch. If you or others keep committing to the default branch then Renovate cannot find a suitable gap to automerge into!</p> <p>After Renovate automerges a branch, Renovate must calculate the \"Git state\" again, for all remaining branches. Merging one branch may result in another branch's updates being changed, or even removed as no longer needed. Renovate requires automerging branches to be up-to-date with their target branch, before automerging. As merging more than one branch in a row does not work reliably, Renovate will only automerge one branch/PR, per target branch, per run. Then you'll have to wait for the next time Renovate runs.</p>"},{"location":"key-concepts/automerge/#recommendations-from-the-renovate-maintainers","title":"Recommendations from the Renovate maintainers","text":"<p>In general, we recommend you enable automerge for any dependency update where you would select \"merge\" anyway. Keep automerge disabled for updates where you want to read the changelogs or code before the merge.</p> <p>Automerge often works well for <code>devDependencies</code>. It can work for production <code>dependencies</code> too, but your project should have good test coverage.</p> <p>For example, if you have Jest or Mocha as a development dependency, and it has an upgrade with passing tests... automerge them! If you have a linter like ESLint or TSLint and its update passes... automerge them! If you have an API with 100% test coverage and Express is updated... automerge it!</p> <p></p>"},{"location":"key-concepts/automerge/#configuration-examples","title":"Configuration examples","text":""},{"location":"key-concepts/automerge/#automerge-lock-file-maintenance","title":"Automerge lock file maintenance","text":"<p>The lowest risk type of update to automerge is probably <code>lockFileMaintenance</code>. When Renovate performs lock file maintenance, it leaves the project dependency definitions unchanged, but refreshes the lock file completely. This means Renovate installs the latest versions, that match the package file constraints.</p> Example of automerging lock file maintenance<pre><code>{\n  \"lockFileMaintenance\": {\n    \"enabled\": true,\n    \"automerge\": true\n  }\n}\n</code></pre>"},{"location":"key-concepts/automerge/#automerge-lint-tool-updates","title":"Automerge lint tool updates","text":"<p>Automerging lint tool updates can be a real time-saver. Often a new lint tool version pass the updated tests, without any code changes on your end. If the tests pass you may as well automerge the PR.</p> <p>In cases where you need to make changes to your code, the Renovate PR will fail the linter check. You can then make the necessary code changes directly in the Renovate branch for that PR, confirm the tests pass with your changes, and manually merge the PR.</p> Example of automerging lint and Prettier development packages<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDepTypes\": [\"devDependencies\"],\n      \"matchPackageNames\": [\"lint\", \"prettier\"],\n      \"automerge\": true\n    }\n  ]\n}\n</code></pre>"},{"location":"key-concepts/automerge/#automerge-non-major-updates","title":"Automerge non-major updates","text":"<p>Non-major updates in SemVer ecosystems shouldn't have breaking changes (if they follow the spec), so many users enable automerge for these too:</p> Example of automerging non-major updates in SemVer ecosystem<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchUpdateTypes\": [\"minor\", \"patch\"],\n      \"matchCurrentVersion\": \"!/^0/\",\n      \"automerge\": true\n    }\n  ]\n}\n</code></pre> <p>The <code>matchCurrentVersion</code> setting above is a rule to exclude any dependencies which are pre-1.0.0 because those can make breaking changes at any time according to the SemVer spec.</p>"},{"location":"key-concepts/automerge/#automerge-monorepo-prs","title":"Automerge monorepo PRs","text":"<p>Say you want to automerge <code>patch</code> and <code>minor</code> updates for packages in the <code>group:ionic-nativeMonorepo</code> preset:</p> Example of automerging patch and minor updates in a group from a preset<pre><code>{\n  \"packageRules\": [\n    {\n      \"extends\": [\"monorepo:ionic-native\"],\n      \"matchUpdateTypes\": [\"patch\", \"minor\"],\n      \"automerge\": true\n    }\n  ]\n}\n</code></pre>"},{"location":"key-concepts/automerge/#faster-merges-with-platform-native-automerge","title":"Faster merges with platform-native automerge","text":"<p>By default, Renovate uses platform-native automerge to speed up automerging. If you don't want Renovate to use the platform-native automerge, then set <code>platformAutomerge</code> to <code>false</code>.</p> Example of disabling platform-native automerge<pre><code>{\n  \"lockFileMaintenance\": {\n    \"enabled\": true,\n    \"automerge\": true,\n    \"automergeType\": \"pr\",\n    \"platformAutomerge\": false\n  }\n}\n</code></pre> <p>For more information read <code>platformAutomerge</code>.</p>"},{"location":"key-concepts/automerge/#github-merge-queue","title":"GitHub Merge Queue","text":"<p>Renovate supports GitHub's Merge Queue.</p> <p>Read the GitHub Docs, managing a merge queue first.</p> <p>The steps to enable GitHub's Merge Queue differ based on whether you use GitHub Actions or another CI provider.</p> <p>With <code>platformAutomerge</code> enabled (which is the default), GitHub's auto-merge takes care of adding the PR to the merge queue. This requires the \"Allow auto-merge\" checkbox in the repository settings to be enabled, as described in the steps below.</p> <p>Merge queues also work with <code>platformAutomerge=false</code>: Renovate first attempts to merge the PR directly, which succeeds when Renovate is on the merge queue's bypass list. If that merge is refused and the base branch has a merge queue, configured via classic branch protection or repository rulesets, Renovate adds the PR to the merge queue itself once all checks have passed. In that case the \"Allow auto-merge\" checkbox is not needed. PRs that are already waiting in the merge queue are left untouched on later runs. We recommend enabling the \"Automatically delete head branches\" repository setting, so branches get cleaned up after the merge queue merges the PR.</p> <p>Warning</p> <p>Branch automerge (<code>automergeType=branch</code>) only works if the base branch has a merge queue when Renovate is on the merge queue's bypass list, because pushing directly to the base branch is not possible otherwise. Renovate logs a warning and creates a PR instead if the merge queue rejects the push. Configure <code>automergeType=pr</code> in such repositories, or add Renovate to the bypass list.</p> <p>GitHub Merge Queue overview page</p> <p>GitHub has a page that shows all the PRs in the Merge Queue. The page link follows this pattern: <code>https://github.com/organization-name/repository-name/queue/base-branch-name</code>. For example, here's Renovate's main repository's Merge Queue overview.</p>"},{"location":"key-concepts/automerge/#if-you-use-github-actions","title":"If you use GitHub Actions","text":"<p>If you use GitHub Actions as your CI provider, follow these steps:</p> <p>Add the <code>on.merge_group</code> event to your GitHub Action <code>.yaml</code> files, for example:</p> <pre><code>on:\n  pull_request:\n  merge_group:\n</code></pre> <p>On <code>github.com</code>, go to your repository's \"homepage\", click on Settings, scroll down to the Pull Requests section and enable the \"Allow auto-merge\" checkbox.</p> <p>Then go to your repository's branch protection rules for your base branch (usually <code>main</code>) and enable the \"Require merge queue\" setting. Confirm you've set the correct \"required checks\" for your base branch.</p> <p>Finally, allow Renovate to automerge by setting <code>automerge=true</code> in your Renovate config file, for example:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Automerge non-major updates\",\n      \"matchUpdateTypes\": [\"minor\", \"patch\"],\n      \"automerge\": true\n    }\n  ]\n}\n</code></pre>"},{"location":"key-concepts/automerge/#if-you-dont-use-github-actions","title":"If you don't use GitHub Actions","text":"<p>If you don't use GitHub Actions as your CI provider, follow these steps:</p> <p>Update your CI provider's configuration so it also runs tests on the temporary <code>gh-readonly-queue/{base_branch}</code> branches, read your CI providers's documentation to learn how to do this.</p> <p>On <code>github.com</code>, go to your repository's \"homepage\", click on Settings, scroll down to the Pull Requests section and enable the \"Allow auto-merge\" checkbox. Go to your repository's branch protection rules for your base branch (usually <code>main</code>) and enable the \"Require merge queue\" setting. Confirm you've set the correct \"required checks\" for your base branch.</p> <p>Finally, allow Renovate to automerge by setting <code>automerge=true</code> in your Renovate config file (see earlier example).</p>"},{"location":"key-concepts/automerge/#gitlab-merge-trains","title":"GitLab Merge Trains","text":"<p>Renovate supports GitLab's merge trains. Renovate detects whether merge trains are enabled on the project and then:</p> <ul> <li>With <code>platformAutomerge</code> enabled (the default), Renovate asks GitLab to add the MR to the merge train once its pipeline succeeds. This requires GitLab 17.11 or later.</li> <li>With <code>platformAutomerge=false</code>, Renovate adds the MR to the merge train itself once all checks have passed, instead of merging it directly.</li> <li><code>rebaseWhen=auto</code> resolves to <code>conflicted</code> instead of <code>behind-base-branch</code>, because the merge train already tests MRs against the head of the target branch.</li> </ul> <p>Warning</p> <p>Branch automerge (<code>automergeType=branch</code>) only works with merge trains if Renovate is allowed to push to the protected target branch. If the push is rejected, Renovate logs a warning and creates a MR instead. Configure <code>automergeType=pr</code> in such projects, or allow Renovate to push to the target branch.</p>"},{"location":"key-concepts/automerge/#automerging-and-scheduling","title":"Automerging and scheduling","text":"<p>Automerging is particularly beneficial if you have configured a schedule, because Renovate on its own may be able to automerge the majority of your updates. And this is especially so if your repository needs rebasing, like when you use lock files. Let's say you have dependencies <code>abc</code> and <code>xyz</code> with upgrades, and you use a <code>yarn.lock</code> file.</p> <ul> <li>At the start of the schedule, <code>Renovate</code> will create branches for <code>abc</code> and <code>xyz</code> upgrades, including <code>yarn.lock</code> updates</li> <li>After <code>abc</code> passes tests, <code>Renovate</code> will automerge it into the base branch</li> <li>The <code>xyz</code> branch has a <code>yarn.lock</code> conflict now</li> <li>Renovate will immediately check all other branches and rebase them</li> <li>The change to <code>xyz</code> branch will trigger another round of CI tests</li> <li>After the updated <code>xyz</code> branch passes, Renovate will automerge it too</li> </ul> <p>This is a lot better than you waking up to two PRs and then having to deal with conflicts yourself after you merge the first one.</p>"},{"location":"key-concepts/automerge/#branch-vs-pr-automerging","title":"Branch vs PR automerging","text":"<p>Even if you automerge PRs, you are likely to still get notification noise - one when the PR is created and another when it is merged. For this reason we recommend you consider setting <code>automergeType=branch</code> which will mean:</p> <ul> <li>Renovate first creates a branch and no PR</li> <li>If tests pass, Renovate pushes a commit directly to the base branch without PR</li> <li>If tests fail, Renovate raises a PR for you to review</li> </ul> <p>Add the <code>renovate/**</code> branch to your testing workflow files, or Renovate will not work properly with the <code>automergeType=branch</code> setting.</p> <p>The result is that passing updates are essentially \"silent\" - the only sign of them are the commits Renovate pushes to your base branch. If you have enabled branch protection which prevents Renovate from automerging directly to the base branch, then this won't work and you should stick with the default PR-based automerging instead.</p>"},{"location":"key-concepts/automerge/#assignees-and-reviewers","title":"Assignees and Reviewers","text":"<p>When automerge is enabled on a PR, Renovate will not add assignees or reviewers at PR creation time, in order to decrease notifications noise a little. If tests subsequently fail, making automerge not possible, then Renovate will add the configured assignees and/or reviewers.</p> <p>Note: Renovate won't add assignees and reviewers to a PR with failing checks if the PR already has assignees or reviewers present. If there are accounts you wish to ignore (i.e. add assignees and reviewers regardless) then add them to <code>ignoreReviewers</code> to specify those which should be filtered out in such consideration.</p> <p>If you want Renovate to always add assigness and reviewers to a PR regardless of automerge configuration, activate the <code>assignAutomerge</code> option.</p>"},{"location":"key-concepts/automerge/#frequent-problems-and-how-to-resolve-them","title":"Frequent problems and how to resolve them","text":""},{"location":"key-concepts/automerge/#automerge-not-enabled-correctly-in-config","title":"Automerge not enabled correctly in config","text":"<p>Sometimes, the reason Renovate is not automerging a PR is because of a configuration mistake. You can confirm that Renovate knows you want it to automerge by checking if the PR body includes the text \"Automerge: Enabled\". If you see \"Automerge: Disabled by config\" it means you need to make a config change for automerge to work.</p>"},{"location":"key-concepts/automerge/#absence-of-tests","title":"Absence of tests","text":"<p>By default, Renovate will not automerge until it sees passing status checks / check runs for the branch. If you have no tests but still want Renovate to automerge, you need to add <code>\"ignoreTests\": true</code> to your configuration.</p> <p>Tip</p> <p>We strongly recommend you have tests in any project where you are regularly updating dependencies.</p>"},{"location":"key-concepts/automerge/#committer-restrictions","title":"Committer restrictions","text":"<p>If you have protected your base branch with a list of allowed committers, and Renovate is not on that list, then naturally automerge can't work.</p>"},{"location":"key-concepts/automerge/#pull-requests-required","title":"Pull Requests Required","text":"<p>If you have configured your project to require Pull Requests before merging, it means that branch automerging is not possible, even if Renovate has rights to commit to the base branch.</p>"},{"location":"key-concepts/automerge/#required-pull-request-reviews","title":"Required Pull Request reviews","text":"<p>If you have mandatory Pull Request reviews then it means Renovate can't automerge its own PR until such a review has happened.</p> <p>If you're on <code>github.com</code> or GitHub Enterprise Server (<code>&gt;=3.4</code>) you can let Renovate bypass the mandatory Pull Request reviews using the \"Allow specified actors to bypass required pull requests\" option in your branch protection rules.</p> <p>Alternatively, if you use the Mend Renovate App, you can also install the helper apps renovate-approve and renovate-approve-2 and they will mark all automerging Pull Requests by Renovate as approved. These approval helper apps are only available for GitHub.</p> <p>On Azure/Gerrit/Gitlab, you can activate the <code>autoApprove</code> option.</p>"},{"location":"key-concepts/automerge/#codeowners","title":"Codeowners","text":"<p>Depending on the platform, having a <code>CODEOWNERS</code> file could block automerging, because it means a code owner must review the PR.</p>"},{"location":"key-concepts/automerge/#overriding-global-automerge","title":"Overriding global automerge","text":"<p>You might have setup a global configuration in a <code>.github</code> repository, that has a <code>renovate.json</code> file that turns on automerge for certain dependencies. It does not matter where you've put the global config, the important point in this example is that you're extending from a global config that's somewhere else. For this example we'll assume you put your config in a repository on GitHub, called <code>.github</code>.</p> <p>Repositories in the organization all extend from this global configuration, and so they \"inherit\" the automerge settings as well.</p> <p>To turn off automerge for all dependencies of a selected repository, you need to make a config that overrides all <code>packageRules</code> in the repository's <code>renovate.json</code> file, like this:</p> <pre><code>{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"extends\": [\"local&gt;org-name/.github:renovate-config\"],\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"*\"],\n      \"automerge\": false\n    }\n  ]\n}\n</code></pre>"},{"location":"key-concepts/changelogs/","title":"Renovate and changelogs","text":"<p>This page explains how Renovate fetches changelogs, when it can display them, and more.</p>"},{"location":"key-concepts/changelogs/#how-renovate-detects-changelogs","title":"How Renovate detects changelogs","text":"<p>Renovate detects and populates changelogs by:</p> <ol> <li>Identifying a source URL from the datasource response for a package, and saving that internally as <code>sourceUrl</code> if found</li> <li>Checking if Renovate's internal sourceUrl data for the package includes a source URL</li> <li>Looking up the source URL, if it resides on a supported platform (e.g. GitHub)</li> <li>Checking for both \"Releases\" metadata in the repository and any commonly known \"changelog\" file names</li> <li>Filtering the found releases to only include those versions being updated by the current PR</li> <li>Formatting and embedding the results into the PR body</li> </ol>"},{"location":"key-concepts/changelogs/#changelogs-for-private-packages","title":"Changelogs for private packages","text":"<p>For private packages, the algorithm is mostly the same as described above, with the additional considerations:</p> <ul> <li>Renovate must be able to access the private package in the first place</li> <li>The private registry must include the source URL in its response</li> <li>Renovate must be able to detect and authenticate with whatever private repository corresponds to the source URL</li> </ul> <p>For more details, see Private packages, looking up changelogs.</p>"},{"location":"key-concepts/changelogs/#relevant-configuration-options","title":"Relevant configuration options","text":""},{"location":"key-concepts/changelogs/#fetchchangelogs","title":"<code>fetchChangeLogs</code>","text":"<p>Top-level configuration that controls when to fetch changelogs for addition to pull-request and branch commit-messages. If you want more finely-grained control over changelog fetching (disabling for specific packages, source repositories, etc), use packageRules to override the <code>fetchChangeLogs</code> value for matching packages.</p> <p>Set to <code>off</code> if changelog fetching is causing a problem.</p> <p>Set to <code>branch</code> if you have an advanced use case where you're embedding changelogs in the Git commit itself, we don't recommend this due to its potential size.</p>"},{"location":"key-concepts/changelogs/#changelogurl","title":"<code>changelogUrl</code>","text":"<p>This doesn't help with fetching the changelogs, but if you configure it then Renovate will include a link to this URL in the PR body, so users can click through to read the changelog.</p>"},{"location":"key-concepts/changelogs/#platforms-that-renovate-can-fetch-changelogs-from","title":"Platforms that Renovate can fetch changelogs from","text":"<p>See the list of platforms in the <code>fetchChangeLogs</code> config option docs.</p>"},{"location":"key-concepts/changelogs/#running-renovate-on-a-non-github-platform","title":"Running Renovate on a non-GitHub platform","text":"<p>Most Open Source packages are hosted on github.com, which means most changelogs are hosted there too. Fetching changelogs from github.com requires a GitHub token because GitHub blocks unauthenticated GraphQL API use.</p> <p>This means that if you run Renovate on self-hosted GitHub Enterprise Server, or any non-GitHub platform which Renovate supports, then you need to configure a github.com Personal Access Token in Renovate in order to fetch changelogs.</p> <p>Read Running Renovate, GitHub.com token for changelogs to learn more.</p>"},{"location":"key-concepts/changelogs/#troubleshooting-missing-changelogs","title":"Troubleshooting missing changelogs","text":"<p>Follow these steps to find out why Renovate does not find a changelog:</p> <ol> <li>The datasource for this package does not support sourceUrls.<ul> <li>If the registry fundamentally does not provide this data, then the only possibility is for it to be manually populated through PRs to Renovate's source code</li> <li>If the registry provides source URLs in its response but Renovate does not understand the required fields, then raise a feature request with examples, or better yet a Pull Request to implement support for the source URL parsing/mapping yourself</li> <li>Sometimes self-hosted versions of registries don't include the full metadata compared to what the public registries do</li> </ul> </li> <li>The package was published without source URL information being included.<ul> <li>For example, occasionally <code>npm</code> packages don't have <code>repository</code> fields included</li> <li>For example, Docker images regularly do not have the required <code>LABEL</code> entry</li> </ul> </li> <li>Renovate cannot access the source repository<ul> <li>This is typically a concern for private repositories only</li> <li>Check if the token Renovate uses has access rights to the repository you need it to access</li> </ul> </li> <li>Renovate cannot detect the file names or release name convention within the repository<ul> <li>In this case an enhancement to Renovate might be needed to better detect the releases/formats, assuming the package/repository has a reasonable convention to follow</li> </ul> </li> <li>Renovate cannot detect the release version in the changelog file<ul> <li>Ensure the changelog header for the section contains the version being released, or in the case of a monorepo where this may not be the case, ensure the body has a line that contains both the package name and the version.</li> <li>Otherwise an enhancement to Renovate might be needed to better detect the versions, assuming the package/repository has a reasonable convention to follow</li> </ul> </li> </ol> <p>If none of this helps, search the Renovate issues and discussions to see if this is a known problem.</p>"},{"location":"key-concepts/changelogs/#advice-for-package-maintainers","title":"Advice for package maintainers","text":"<p>This section is for package maintainers that want to make sure Renovate can see their changelogs.</p> <p>There isn't much information to add other than what's already written above.</p> <p>Make sure that you have the required source URL in your package metadata, not just in your repository but also in the final data which the registry returns. For example, we have seen cases where the <code>repository</code> field in npm's <code>package.json</code> is populated correctly in the repository, but stripped out as part of the publishing process.</p>"},{"location":"key-concepts/changelogs/#let-renovate-understand-your-versioning-and-changelogs","title":"Let Renovate understand your versioning and changelogs","text":"<p>In general, Renovate can understand your versions and changelogs best when you:</p> <ul> <li>Use SemVer versioning, so <code>major.minor.patch</code></li> <li>Use the <code>semantic-release</code> bot to automate the release process</li> </ul> <p>Try to avoid things like:</p> <ul> <li>Stripping out the trailing <code>.0</code> unnecessarily (e.g. having a package <code>3.1.0</code> on a registry but using only <code>3.1</code> in your changelogs)</li> <li>Using \"Release names\" in a way which makes the actual version hard to discern (e.g. instead of <code>3.0.0</code> you title your release notes <code>Big news! v3 is here</code></li> </ul>"},{"location":"key-concepts/changelogs/#npm-package-maintainers","title":"npm package maintainers","text":"<p>As maintainer, make sure the <code>package.json</code> has a filled in <code>repository</code> field, read the npm Docs, configuring npm <code>repository</code> field to learn more. If your repository uses the monorepo pattern make sure each <code>package.json</code> file has a <code>repository</code> field.</p>"},{"location":"key-concepts/changelogs/#maven-package-maintainers","title":"maven package maintainers","text":"<p>Read <code>maven</code> datasource, making your changelogs fetchable.</p>"},{"location":"key-concepts/changelogs/#docker-image-maintainers","title":"Docker image maintainers","text":"<p>Read the Docker datasource docs.</p>"},{"location":"key-concepts/changelogs/#nuget-package-maintainers","title":"NuGet package maintainers","text":"<p>See Renovate issue #14128 about using NuGet's changelogs.</p>"},{"location":"key-concepts/dashboard/","title":"Introduction","text":"<p>Renovate has a Dependency Dashboard that shows an overview of the state of your repositories' dependencies.</p> <p>When the Dependency Dashboard is enabled, Renovate will create a new issue in the repository. This issue has a \"dashboard\" where you can get an overview of the status of all updates.</p> <p>Having the Dependency Dashboard also enables the concept of an \"approval\" workflow for new upgrades, either for selected dependencies (recommended) or even for all.</p>"},{"location":"key-concepts/dashboard/#supported-platforms","title":"Supported platforms","text":"<p>The Dependency Dashboard requires that the host platforms supports the concept of issues with dynamic Markdown checkboxes. Read our FAQ, Renovate core features not supported on all platforms to see if your platform can use the Dependency Dashboard feature.</p>"},{"location":"key-concepts/dashboard/#how-to-enable-the-dashboard","title":"How to enable the dashboard","text":"<p>To turn on the Dashboard manually, add the <code>:dependencyDashboard</code> preset to your <code>extends</code> array in the Renovate configuration file:</p> <pre><code>{\n  \"extends\": [\"schedule:automergeDaily\", \":dependencyDashboard\"]\n}\n</code></pre> <p>Or set <code>dependencyDashboard</code> to <code>true</code>:</p> <pre><code>{\n  \"dependencyDashboard\": true\n}\n</code></pre>"},{"location":"key-concepts/dashboard/#how-to-disable-the-dashboard","title":"How to disable the dashboard","text":"<p>To disable the Dependency Dashboard, add the preset <code>:disableDependencyDashboard</code> or set <code>dependencyDashboard</code> to <code>false</code>.</p> <pre><code>{\n  \"extends\": [\"config:recommended\", \":disableDependencyDashboard\"]\n}\n</code></pre>"},{"location":"key-concepts/dashboard/#use-cases","title":"Use cases","text":"<p>This section explains some common use cases where having the Dependency Dashboard can help.</p>"},{"location":"key-concepts/dashboard/#warnings-for-deprecated-dependencies","title":"Warnings for deprecated dependencies","text":"<p>If Renovate finds:</p> <ul> <li>packages flagged as deprecated on their registry, or</li> <li>packages that have a community-sourced replacement PR available</li> </ul> <p>Then Renovate adds a prominent warning about these packages near the top of the Dependency Dashboard. Here is an example of how this can look:</p> <p>The following dependencies are deprecated:</p> Datasource Name Replacement? npm <code>airbnb-prop-types</code> npm <code>left-pad</code>"},{"location":"key-concepts/dashboard/#abandonment-detection","title":"Abandonment detection","text":"<p>Renovate includes the <code>abandonments:recommended</code> preset (automatically included in <code>config:best-practices</code>) to help identify potentially abandoned packages. This preset:</p> <ul> <li>Sets a default <code>abandonmentThreshold</code> of <code>1 year</code> for all packages</li> <li>Includes community-sourced overrides for packages that appear abandoned but are still maintained</li> <li>Prevents updates to truly abandoned packages while allowing updates to packages with irregular release schedules</li> </ul> <p>Usage:</p> <pre><code>{\n  \"extends\": [\"abandonments:recommended\"]\n}\n</code></pre> <p>You can contribute additional overrides by updating the <code>abandonments.json</code> file.</p>"},{"location":"key-concepts/dashboard/#visibility-into-rejecteddeferred-updates","title":"Visibility into rejected/deferred updates","text":"<p>Renovate's Dependency Dashboard shows an overview of all updates that are still \"to do\".</p> <p>If you close an update PR from Renovate without merging, the Dashboard will list this update in the Closed/Ignored section. If you later change your mind about the update, you can get a new PR by selecting the corresponding checkbox on the dashboard.</p>"},{"location":"key-concepts/dashboard/#dependency-dashboard-approval-workflow","title":"Dependency Dashboard Approval workflow","text":"<p>Sometimes you want Renovate to wait for your approval before creating an update PR. You can customize this \"wait for approval\" behavior however you like best.</p> <p>At a high level the options are:</p> <ul> <li>Require approval for all updates</li> <li>Require approval for a type of updates (<code>major</code> for example)</li> <li>Require approval for specific packages</li> </ul> <p>You can mix and match these options as well.</p>"},{"location":"key-concepts/dashboard/#require-approval-for-all-updates","title":"Require approval for all updates","text":"<p>We do not recommend that you require approval for all updates. When you require prior approval, you need to check the dashboard issue regularly to check for important updates. You'll probably forget to check often enough, and out of sight means out of mind!</p> <p>Maybe you find Renovate too noisy, and want to opt-out of getting automatic updates whenever they're ready.</p> <p>In this case, you can tell Renovate to wait for your approval before making any pull requests. This means that you have full control over when you get updates.</p> <p>But vulnerability remediation PRs will still get created immediately without requiring approval.</p> <p>To require manual approval for all updates, add the <code>:dependencyDashboardApproval</code> presets to the <code>extends</code> array in your Renovate configuration file:</p> <pre><code>{\n  \"extends\": [\"config:recommended\", \":dependencyDashboardApproval\"]\n}\n</code></pre>"},{"location":"key-concepts/dashboard/#require-approval-for-major-updates","title":"Require approval for major updates","text":"<p>Major updates often have breaking changes which require manual changes in your code before they can be merged. So maybe you only want to get major updates when you have sufficient time to check them carefully.</p> <p>Dependency Dashboard Approval is far superior to disabling major updates because at least you can fully see what's pending on the dashboard, instead of updates being totally invisible.</p> <p>If you want to require approval for major updates, set <code>dependencyDashboardApproval</code> to <code>true</code> within a <code>major</code> object:</p> <pre><code>{\n  \"major\": {\n    \"dependencyDashboardApproval\": true\n  }\n}\n</code></pre>"},{"location":"key-concepts/dashboard/#require-approval-for-specific-packages","title":"Require approval for specific packages","text":"<p>Sometimes you only want to update specific packages when you say so.</p> <p>Maybe a package doesn't follow Semantic Versioning, and has breaking changes on every new release, so you want to update on your terms.</p> <p>Or maybe you have a package that updates too rapidly for you to keep up with, and you want to update once in a while manually.</p> <p>If you want to approve specific packages, set <code>dependencyDashboardApproval</code> to <code>true</code> within a <code>packageRules</code> entry where you have defined a specific package or pattern.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"@somescope/**\"],\n      \"dependencyDashboardApproval\": true\n    }\n  ]\n}\n</code></pre>"},{"location":"key-concepts/how-renovate-works/","title":"Introduction","text":"<p>Renovate usually performs these steps:</p> <ul> <li>Cloning the repository</li> <li>Scanning package files to extract dependencies</li> <li>Looking up registries to check for updates</li> <li>Applying any grouping rules defined</li> <li>Pushing branches and raising Pull Requests</li> </ul> <p>Because Renovate must support a lot of dependency naming and versioning conventions, it has modules for each known convention. You can contribute your own modules, if you want.</p>"},{"location":"key-concepts/how-renovate-works/#modules","title":"Modules","text":"<p>Renovate's modules are:</p> <ul> <li>datasource</li> <li>manager</li> <li>platform</li> <li>versioning</li> </ul> <p>Renovate uses these modules in order:</p> <ol> <li>The platform module interacts with the source control platform and clones the repository</li> <li>The manager module looks for files based on their name and extracts the dependencies (each dependency has a datasource)</li> <li>The datasource module looks up versions of the dependency</li> <li>The versioning module validates and sorts the returned versions</li> </ol> <p>For example:</p> <ol> <li>The <code>gitlabci</code> manager finds a dependency: <code>python:3.10-alpine</code> which has the <code>docker</code> datasource</li> <li>The <code>docker</code> datasource looks for versions and finds: <code>[python:3.9,python:3.9-alpine,python:3.10,python:3.10-alpine,python:3.11,python:3.11-alpine]</code></li> <li>The <code>docker</code> versioning returns <code>python:3.11-alpine</code>, because that version is compatible with <code>python:3.10-alpine</code></li> </ol>"},{"location":"key-concepts/how-renovate-works/#workflow","title":"Workflow","text":"<p>Here's an overview of the workflow:</p> <pre><code>flowchart TB\n    subgraph INITIALIZATION\n        direction TB\n        MC[Merge configurations &lt;br&gt; most important to least: &lt;br&gt; cli &gt; env &gt; file &gt; default]\n        MC --&gt; IP[Initialize platform]\n        IP --&gt; AD[Query the platform for repositories]\n        AD --&gt; NFIL[Narrow the list with filters]\n    end\n\n    subgraph REPOSITORY\n       direction TB\n       FER{{For each repository}}\n\n      subgraph EXTRACTD[EXTRACT DEPENDENCIES]\n          direction TB\n          CLBRANCH[Extract base branches]\n          CLBRANCH --&gt; VULN[Check for vulnerabilities]\n          VULN --&gt; CC{{For each manager}}\n          CC --&gt;|manager A| CD[\"...\"]\n          CC --&gt;|manager B| CCF[\"match files\"]\n          CCF --&gt; CFEF{{For each file}}\n          CFEF --&gt;|file 1| CCD1[Extract dependency]\n          CFEF --&gt;|file 2| CCD2[...]\n      end\n\n      subgraph LOOKUP[LOOK UP UPDATES]\n          direction TB\n          UC{{For each manager}}\n          UC --&gt;|manager A| UD[\"...\"]\n          UC --&gt;|manager B| UFEF{{For each file}}\n          UFEF --&gt;|file 1| FED{{For each dependency}}\n          UFEF --&gt;|file 2| FED2[...]\n          FED --&gt;|dep 1| D1[...]\n          D1 -..-&gt; CU\n          FED --&gt;|dep 2| D2[use datasource to &lt;br&gt; fetch versions]\n          D2 --&gt; J[use versioning to find &lt;br&gt; next valid update]\n          FED2 -...-&gt; CU\n          UD -....-&gt; CU\n          J --&gt; CU[Look up updates]\n      end\n\n      subgraph WRITEU[WRITE UPDATES]\n        direction TB\n        FEU{{For each update}}\n        FEU --&gt; AUCOND[Check if branch needed: &lt;br&gt; existing/rebase/concurrent amount]\n        AUCOND --&gt; AU[Create branch&lt;br&gt;Apply update&lt;br&gt;Create PR]\n      end\n\n      subgraph FINALIZE[FINALIZE]\n      direction TB\n        CM[Check for config migration]\n        CM --&gt; CSB[Clean stale branches]\n\n      end\n\n      FER --&gt; IRPO[Initialize repository]\n\n      IRPO --&gt; EXTRACTD\n      EXTRACTD --&gt; LOOKUP\n\n      LOOKUP --&gt; WRITEU\n\n      WRITEU --&gt; FINALIZE\n\n    end\n\n    INITIALIZATION --&gt; REPOSITORY</code></pre>"},{"location":"key-concepts/minimum-release-age/","title":"Minimum Release Age","text":""},{"location":"key-concepts/minimum-release-age/#what-is-minimum-release-age","title":"What is Minimum Release Age?","text":"<p><code>minimumReleaseAge</code> is a feature that requires Renovate to wait for a specified amount of time before suggesting a dependency update.</p> <p>The use of <code>minimumReleaseAge</code> is not to slow down fast releasing project updates, but to provide a means to reduce risk supply chain security risks.</p> <p>In other ecosystems and package managers, this may be referred to as a \"dependency cooldown\".</p> <p>For example, <code>minimumReleaseAge=14 days</code> would ensure that a package update is not suggested by Renovate until 14 days after its release, which allows plenty of time to allow security researchers and automated security tools to catch malicious intent in packages.</p> <p>Note: Renovate will wait for the set duration to pass for each separate version. Renovate does not wait until the package has seen no releases for x time-duration(<code>minimumReleaseAge</code>).</p> <p>When the time passed since the release is less than the set <code>minimumReleaseAge</code>: Renovate adds a \"pending\" status check to that update's branch. After enough days have passed: Renovate replaces the \"pending\" status with a \"passing\" status check.</p>"},{"location":"key-concepts/minimum-release-age/#configuration-options","title":"Configuration options","text":"<p>The following configuration options can be used to enable and tune the functionality of Minimum Release Age:</p> <ul> <li><code>minimumReleaseAge</code> (previously known as <code>stabilityDays</code>)</li> <li><code>minimumReleaseAgeBehaviour</code></li> <li><code>internalChecksFilter</code></li> </ul>"},{"location":"key-concepts/minimum-release-age/#minimumreleaseagebehaviourtimestamp-optional-warning","title":"<code>minimumReleaseAgeBehaviour=timestamp-optional</code> warning","text":"<p>When Renovate runs with <code>minimumReleaseAgeBehaviour=timestamp-optional</code>, Renovate will log a warning, which is then also shown on the Dependency Dashboard.</p> <p>This warning serves to inform users about at least one dependency not being able to adhere to the minimum release age due to the configuration.</p> <p>In cases where this is not desired, you can remap the warning to a lower log level with <code>logLevelRemap</code>:</p> <pre><code>{\n  \"logLevelRemap\": [\n    {\n      \"matchMessage\": \"/Some .+ did not have a releaseTimestamp, but as we're running with minimumReleaseAgeBehaviour=timestamp-optional, proceeding/\",\n      \"newLogLevel\": \"info\"\n    }\n  ]\n}\n</code></pre>"},{"location":"key-concepts/minimum-release-age/#faqs","title":"FAQs","text":""},{"location":"key-concepts/minimum-release-age/#where-does-the-release-timestamp-need-to-be-set","title":"Where does the release timestamp need to be set?","text":"<p>To prevent supply-chain attacks, Renovate requires that the registry/datasource provides the timestamp.</p> <p>This ensures that a package maintainer cannot specify (maliciously or accidentally) a different timestamp to when the package was actually published.</p> <p>Warning</p> <p>For instance, a suggestion for the Docker ecosystem is to use the <code>org.opencontainers.image.created</code> image annotation.  Unfortunately, the publisher controls this annotation, so could allow a maintainer to say that their image was published earlier than it had been to bypass Minimum Release Age restrictions.</p> <p>As long as the registry/datasource provides the release timestamp, Renovate will add support for it.</p>"},{"location":"key-concepts/minimum-release-age/#my-package-manager-has-support-for-minimum-release-age-how-does-renovate-work-with-that-do-i-need-to-set-it-in-both","title":"My package manager has support for minimum release age, how does Renovate work with that? Do I need to set it in both?","text":"<p>We recommend specifying minimum release age in both your Renovate and package manager configuration.</p> <p>Renovate's concept of <code>minimumReleaseAge</code> is set independently to your package manager's configuration, and is used by Renovate to decide whether to suggest dependency updates. A manager may read the minimum release age from the configuration of your package manager. If it does, Renovate uses the larger of that value and <code>minimumReleaseAge</code>. Setting <code>minimumReleaseAge</code> to <code>null</code> does not turn off the value from the configuration of your package manager.</p> <p>When Renovate performs a dependency update, it may delegate to your package manager to update artifacts, such as the lockfile. In some cases, this can lead to a transitive dependency being introduced, which Renovate is not aware of, and so could lead to a dependency being introduced without Renovate's <code>minimumReleaseAge</code> check being followed.</p> <p>To protect against this, it's recommended to ensure that your package manager configuration includes the relevant minimum release age checks, too.</p> <p>There is ongoing work to integrate more closely with package manager checks to make sure that Renovate's minimum release age configuration is specified when calling package managers that support it. If you have a package manager you'd like supported, please raise a Suggest an Idea Discussion.</p> <p>The table below lists the managers with a known integration, per package manager. Managers that are not listed do not integrate with the minimum release age of their package manager.</p> Manager Package manager Passed to the package manager Reads its setting Enforced in lock file maintenance Notes mise-en-place mise \u274c \u274c \u274c mise has its own <code>minimum_release_age</code> setting, which Renovate does not read yet. npm npm \u2705 \u274c \u274c Passes <code>--before</code>. Uses the older date if the repository <code>.npmrc</code> has a <code>before</code> setting. Skipped if the <code>.npmrc</code> has <code>min-release-age</code>. npm pnpm \u274c \u274c \u274c npm yarn \u274c \u274c \u274c PEP 621 pdm \u274c \u274c \u274c PEP 621 uv \u274c \u274c \u274c Poetry poetry \u2705<code>&gt;=2.4.0</code> \u274c \u274c Sets <code>POETRY_SOLVER_MIN_RELEASE_AGE</code>, rounded up to whole days. Older Poetry versions ignore it."},{"location":"key-concepts/minimum-release-age/#npm","title":"npm","text":"<p>When <code>minimumReleaseAge</code> is configured, Renovate passes <code>--before=&lt;date&gt;</code> to npm commands during lock file generation. This ensures that npm only resolves package versions that were available before the cooldown threshold, protecting against newly published (and potentially malicious) transitive dependencies.</p> <p>The <code>--before</code> date is calculated as <code>now - minimumReleaseAge</code>. If a <code>before=&lt;date&gt;</code> or <code>min-release-age=&lt;days&gt;</code> setting already exists in the project's <code>.npmrc</code>, Renovate uses the stricter (older) of the two dates.</p> <p>If the existing lock file contains packages published after the <code>--before</code> cutoff (for example, from dependencies merged before <code>minimumReleaseAge</code> was configured), npm will fail with an <code>ETARGET</code> error. In this case, Renovate automatically retries without <code>--before</code> and logs a warning. This ensures existing lock files are never broken by the <code>--before</code> flag.</p> <p>After the next lock file maintenance run (which regenerates the lock file from scratch with <code>--before</code>), subsequent updates will fully enforce the <code>minimumReleaseAge</code> constraint.</p>"},{"location":"key-concepts/minimum-release-age/#poetry","title":"Poetry","text":"<p>When <code>minimumReleaseAge</code> is configured, Renovate sets the <code>POETRY_SOLVER_MIN_RELEASE_AGE</code> environment variable when running <code>poetry update --lock</code>. This ensures that Poetry only resolves package versions that are at least as old as the cooldown threshold. Poetry added this setting in v2.4.0, and older versions ignore it.</p> <p>The value is calculated as <code>ceil(minimumReleaseAge / 1 day)</code> and passed as an integer number of days.</p>"},{"location":"key-concepts/minimum-release-age/#what-happens-if-the-datasource-andor-registry-does-not-provide-a-release-timestamp-when-using-minimumreleaseage","title":"What happens if the datasource and/or registry does not provide a release timestamp, when using <code>minimumReleaseAge</code>?","text":"<p>Warning</p> <p>Renovate 42 changed the behaviour detailed below. In Renovate 42, the absence of a release timestamp will be treated as if the release is not yet past the timestamp, which provides a safer default. Prior to Renovate 42, we would treat the dependency without a release timestamp as if it has passed the <code>minimumReleaseAge</code>, and will immediately suggest that dependency update. If using Renovate prior you can opt into the more secure behaviour (which is default in Renovate 42) by using <code>minimumReleaseAgeBehaviour=timestamp-required</code> (added in 41.150.0)</p> <p>Consider that:</p> <ul> <li>we have set <code>minimumReleaseAge</code> to apply to a given dependency</li> <li>that dependency has 4 updates available<ul> <li>1 of which has a release timestamp that has passed</li> <li>2 of which have a release timestamp that has not yet passed</li> <li>1 of which does not have a release timestamp</li> </ul> </li> </ul> <p>Renovate will create a PR for the 1 dependency update that has passed the release timestamp, and the others will be marked as \"Pending Status Checks\" on the Dependency Dashboard. As time goes on, if the 2 updates with a release timestamp are now passed the minimum release age, Renovate will add them to the PR (or create a new one).</p>"},{"location":"key-concepts/minimum-release-age/#what-happens-when-an-update-is-not-yet-passing-the-minimum-release-age-checks","title":"What happens when an update is not yet passing the minimum release age checks?","text":"<p>Renovate will decide whether it will create a branch for a dependency update using <code>internalChecksFilter</code>.</p>"},{"location":"key-concepts/minimum-release-age/#internalchecksfilterstrict","title":"<code>internalChecksFilter=strict</code>","text":"<p>If you have not configured <code>internalChecksFilter</code>, Renovate will use <code>internalChecksFilter=strict</code> as the default.</p> <p>This will make sure that branches are not created if the <code>minimumReleaseAge</code> status check, <code>renovate/stability-days</code>, does not pass.</p> Debug logs example when <code>internalChecksFilter=strict</code> <pre><code>DEBUG: Branch renovate/actions-checkout-5.x creation is disabled because internalChecksFilter was not met (repository=..., branch=renovate/actions-checkout-5.x)\n</code></pre> <p>In this case, no branch is created.</p> <p>If you have a Dependency Dashboard enabled, it will be found in the Dependency Dashboard in the \"Pending Status Checks\".</p> <p>You can force the dependency update by requesting it via the Dependency Dashboard, or if you are self-hosting, you can use the <code>checkedBranches</code> to force the branch creation.</p> <p>Note</p> <p>A previous version of the documentation (up until Renovate 42.19.9) recommended configuring <code>prCreation</code>. This is no longer the case.</p> <p>If no branch is created, Renovate will not raise a PR, regardless of <code>prCreation</code>'s settings.</p>"},{"location":"key-concepts/minimum-release-age/#recommended-settings","title":"Recommended settings","text":"<p>The recommendation is to set <code>internalChecksFilter=strict</code> when using <code>minimumReleaseAge</code>, so Renovate will create neither branches (nor PRs) on updates that haven't yet met minimum release age checks.</p>"},{"location":"key-concepts/minimum-release-age/#which-update-types-take-minimumreleaseage-into-account","title":"Which update types take <code>minimumReleaseAge</code> into account?","text":"<p>Depending on your manager, datasource and the given package(s), it may be that some updates provide a release timestamp that can have <code>minimumReleaseAge</code> enforced.</p> Update Type Supports <code>minimumReleaseAge</code>? Notes <code>major</code> \u2705 Depends on the Manager, Datasource, and package(s) <code>minor</code> \u2705 Depends on the Manager, Datasource, and package(s) <code>patch</code> \u2705 Depends on the Manager, Datasource, and package(s) <code>pin</code> \u274c Not yet supported <code>digest</code> \ud83d\udfe1 Depends on the Manager, Datasource, and package(s). See below for more info. <code>pinDigest</code> \ud83d\udfe1 Depends on the Manager, Datasource, and package(s). See below for more info. <code>lockFileMaintenance</code> \u274c It can only be enforced by your package manager. See below for more info. <code>lockfileUpdate</code> \u274c <code>rollback</code> \u274c <code>bump</code> \u274c <code>replacement</code> \u274c Not yet supported <p>You can validate which update types may have release timestamps by following something similar to how verify if the registry you're using.</p>"},{"location":"key-concepts/minimum-release-age/#digest-updates","title":"<code>digest</code> updates","text":"<p>A <code>digest</code> update repoints an existing digest - usually a <code>sha256:...</code> Docker image digest, or the commit a floating tag like <code>v7</code> points to - at whatever the current version resolves to now.</p> <p>For instance:</p> <pre><code>   steps:\n-    - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7\n+    - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7\n</code></pre> <p>In this case, the version <code>v7</code> is not updated, but the digest is. When Renovate resolves this update, it looks for the newest version matching the current value (which would be the <code>v7.0.1</code> version in this case), and then ages the update against the release timestamp for this new version.</p> <p>Warning</p> <p>Most registries do not expose when a digest itself was published, so to determine the Minimum Release Age cutoff, we age against the release timestamp of the matched version. The strength of the guarantee depends on what that timestamp means for your datasource.</p> <p>What this means in practice:</p> <ul> <li>On Docker Hub, the release timestamp is the tag's <code>tag_last_pushed</code> field, so re-pushing an existing tag restarts the delay and the digest update is held.</li> <li>Registries which do not return release timestamps (such as GHCR, Quay or ECR) cannot be aged, and the same applies to unversioned tags like <code>latest</code>, where no matching version exists to age against.   With the default <code>minimumReleaseAgeBehaviour=timestamp-required</code>, these digest updates are held indefinitely - configure <code>minimumReleaseAgeBehaviour=timestamp-optional</code> to raise them without an age check instead.</li> <li>Datasources whose timestamps reflect when the matched version was first released (such as <code>github-tags</code> for digest-pinned GitHub Actions) cannot detect re-published content.   If an existing tag is force-pushed to new commits, the digest update ages against the original release date, so it may pass Minimum Release Age immediately.<ul> <li>Note that this is not true when using <code>github-releases</code>, which has metadata to indicate when the GitHub Release was created and published, whereas <code>github-tags</code> uses the <code>committedDate</code>, which is separate from when it was pushed.   GitHub no longer provides that metadata in their API.</li> </ul> </li> </ul>"},{"location":"key-concepts/minimum-release-age/#pindigest-updates","title":"<code>pinDigest</code> updates","text":"<p>A <code>pinDigest</code> update (enabled via <code>pinDigests</code>) pins an existing versioned tag to its currently resolved digest, without changing the tag itself.</p> <p>For instance:</p> <pre><code>-    - uses: actions/checkout@v7\n+    - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7\n</code></pre> <p>Unlike a <code>digest</code> update, <code>pinDigest</code> doesn't repoint the reference to a different value - it freezes whatever the current value already resolves to. The reference itself (e.g. the <code>v7</code> major tag above) is floating though, so what it resolves to right now may not be what <code>currentVersion</code> would resolve to under your configured <code>rangeStrategy</code> (for example, <code>rangeStrategy=bump</code> resolves <code>currentVersion</code> to the oldest matching release). So, like <code>digest</code>, a <code>pinDigest</code> update is aged against the release timestamp of the newest version matching the current value, not whatever <code>currentVersion</code> resolves to.</p> <p>Unlike <code>digest</code> updates, an unversioned current value (such as <code>latest</code>) is exempt from <code>minimumReleaseAge</code> entirely, rather than being held indefinitely: pinning a reference which already floats to the latest content is strictly safer than leaving it unpinned, so holding it back would only prolong the less-safe, unpinned state.</p> <p>If the current value does resolve to a version, but that version's datasource doesn't expose a release timestamp (for example GHCR, Quay or ECR), the same caveats as <code>digest</code> updates apply: the update is held indefinitely under the default <code>minimumReleaseAgeBehaviour=timestamp-required</code>, and needs <code>minimumReleaseAgeBehaviour=timestamp-optional</code> configured to raise it without an age check.</p>"},{"location":"key-concepts/minimum-release-age/#avoiding-pindigest-updates-not-being-raised-due-to-frequently-releasing-packages","title":"Avoiding <code>pinDigest</code> updates not being raised due to frequently-releasing packages","text":"<p>Because a <code>pinDigest</code> update ages against the newest matching version, a reference that releases faster than your configured <code>minimumReleaseAge</code> may never clear the check - leaving it perpetually unpinned, which is less safe than pinning to a slightly-stale release.</p> <p>In particular, because Renovate raises a <code>pinDigest</code> PR across all applicable dependencies (by grouping them together), this can lead to the whole <code>pinDigest</code> update group being delayed.</p> <p>Renovate does not fall back to pinning an older, already-aged release instead: doing so would mean the pin no longer reflects what the reference currently, genuinely points to, which is the property <code>pinDigest</code> exists to preserve.</p> <p>If you want Renovate to raise <code>pinDigest</code> updates sooner than your regular version/digest updates, scope a shorter (or disabled) <code>minimumReleaseAge</code> to it specifically, using <code>packageRules</code> and <code>matchUpdateTypes</code>:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchUpdateTypes\": [\"pinDigest\"],\n      \"minimumReleaseAge\": null\n    }\n  ]\n}\n</code></pre> <p>This decouples \"how fresh must a release be before I trust it enough to upgrade to it\" (your regular <code>minimumReleaseAge</code>) from \"how long to wait before freezing whatever's already there\" (the <code>pinDigest</code>-scoped override) - the same idea as using <code>digest.minimumReleaseAge</code>:</p> <pre><code>{\n  \"digest\": {\n    \"minimumReleaseAge\": null\n  }\n}\n</code></pre> <p>These are functionally identical options.</p>"},{"location":"key-concepts/minimum-release-age/#lockfilemaintenance-updates","title":"<code>lockFileMaintenance</code> updates","text":"<p>Lock file maintenance delegates to the package manager to update package(s), so the updated packages have no release timestamp for Renovate to check.</p> <p>A manager can tell Renovate that its package manager enforces the minimum release age itself while it regenerates the lock file. In that case, Renovate does not wait for a release timestamp, and the <code>renovate/stability-days</code> status check of the lock file maintenance branch passes straight away.</p> <p>For all other managers, lock file maintenance is treated like any other update without a release timestamp. With the default <code>minimumReleaseAgeBehaviour=timestamp-required</code>, the <code>renovate/stability-days</code> status check stays pending while <code>minimumReleaseAge</code> is set. The <code>security:minimumReleaseAge*</code> presets set <code>minimumReleaseAge=null</code> for lock file maintenance, so these branches are not held back.</p>"},{"location":"key-concepts/minimum-release-age/#what-happens-to-security-updates","title":"What happens to security updates?","text":"<p>Security updates bypass any <code>minimumReleaseAge</code> checks, and so will be raised as soon as Renovate detects them.</p>"},{"location":"key-concepts/minimum-release-age/#what-happens-if-a-package-has-multiple-updates-available","title":"What happens if a package has multiple updates available?","text":"<p>Note</p> <p>This is based on the recommended settings above</p> <p>Renovate waits for the set duration to pass for each separate version.</p> <p>If Renovate sees that a package has multiple updates available, it will only raise update(s) that are passing the <code>minimumReleaseAge</code> check.</p> <p>Let us consider a repository with <code>minimumReleaseAge=1 hour</code>, and with the following timeline:</p> <ul> <li>0000: Renovate runs, and sees no updates</li> <li>0010: Package releases 1.1.0</li> <li>0030: Renovate runs, and sees 1.1.0 and marks it as pending</li> <li>0100: Renovate runs, still sees 1.1.0 as pending</li> <li>0110: Package releases 1.1.1</li> <li>0130: Renovate runs, and sees 1.1.0 and 1.1.1 releases. As 1.1.0 is now past the <code>minimumReleaseAge</code>, Renovate raises a PR, and marks 1.1.1 as pending</li> <li>0200: Renovate runs, still sees 1.1.1 as pending</li> <li>0230: No humans have merged the PR for 1.1.0, so when Renovate runs, it sees 1.1.1 is now past the <code>minimumReleaseAge</code>, so updates the existing PR to bump the version to 1.1.1</li> </ul>"},{"location":"key-concepts/minimum-release-age/#what-happens-to-transitive-dependencies","title":"What happens to transitive dependencies?","text":"<p>Renovate does not currently manage any transitive dependencies - instead leaving that to package managers and <code>lockFileMaintenance</code>.</p>"},{"location":"key-concepts/minimum-release-age/#how-do-i-opt-out-dependencies-from-minimum-release-age-checks","title":"How do I opt out dependencies from minimum release age checks?","text":"<p>To opt out a dependency from minimum release age checks, create a package rule with <code>minimumReleaseAge=null</code>:</p> <pre><code>{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"extends\": [\n    // for instance\n    \"security:minimumReleaseAgeNpm\",\n  ],\n  \"packageRules\": [\n    {\n      \"description\": \"Disable minimum release age checks for internal dependencies\",\n      \"matchPackageNames\": [\"@super-secret-organisation/*\"],\n      \"minimumReleaseAge\": null,\n    },\n  ],\n}\n</code></pre> <p>Note</p> <p>As of Renovate 42.19.5, using <code>minimumReleaseAge=0 days</code> is treated the same as <code>minimumReleaseAge=null</code>.</p>"},{"location":"key-concepts/minimum-release-age/#which-datasources-support-release-timestamps","title":"Which datasources support release timestamps?","text":"<p>The datasource that Renovate uses must have a release timestamp for the <code>minimumReleaseAge</code> config option to work. Some datasources may have a release timestamp, but in a format Renovate does not support. In those cases a feature request needs to be implemented.</p> <p>The table below lists every datasource Renovate supports, and whether it provides a release timestamp.</p> Datasource Supports release timestamp? Notes Apk \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>buildDate</code> field in the results. Artifactory \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the date-like text, next to the version hyperlink tag in the results. Aws Eks Addon \u274c Aws Machine Image \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>CreationDate</code> field in the results. Aws Rds \u274c Azure Bicep Resource \u274c Azure Pipelines Tasks \u274c Azure Tags \u274c Bazel \u274c Bitbucket Server Tags \u274c Bitbucket Tags \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>date</code> field in the results. Bitrise \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>published_at</code> field in the results. Buildpacks Registry \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>published_at</code> field in the results. Cdnjs \u274c Clojure \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>Last-Modified</code> header or the <code>lastModified</code> field in the results. Conan \u274c Conda \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>upload_time</code> field of the files of a version when using the Anaconda.org API, or from the <code>createdAt</code> field of the variants of a version when using prefix.dev. All files of a version are assumed to be published at roughly the same time. Cpan \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>date</code> field in the results. Crate \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from <code>pubtime</code> field from crates.io index if available, or <code>version.created_at</code> field from crates.io API otherwise. Custom \u274c Dart \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>published</code> field in the results. Dart Version \u274c Deb \u274c Deno \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>uploaded_at</code> field in the results. Devbox \ud83d\udfe0Maybe<sup>1</sup> Docker \ud83d\udfe0Maybe<sup>1</sup> Only supported on Docker Hub: The release timestamp is determined from the <code>tag_last_pushed</code> field in the results. NOTE: Currently, digests will receive the same release timestamp as the <code>tag_last_pushed</code>, which means that digests may appear newer than they are - see https://github.com/renovatebot/renovate/issues/38659 Dotnet Version \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>release-date</code> field in the results. Elm Package \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the Unix timestamp in the results. Endoflife Date \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>releaseDate</code> field in the results. Flutter Version \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>release_date</code> field in the results. Forgejo Releases \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>published_at</code> field in the results. Forgejo Tags \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>created</code> field in the results. Galaxy \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>created</code> field in the results. Galaxy Collection \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>created_at</code> field in the results. Git Refs \u274c Git Tags \u274c Gitea Releases \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>published_at</code> field in the results. Gitea Tags \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>created</code> field in the results. Github Digest \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the commit date. Github Release Attachments \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>releaseTimestamp</code> field from the response. Github Releases \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>releaseTimestamp</code> field from the response. Github Runners \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is manually specified in Renovate's code, based on the date GitHub announced the runner image as generally available on their changelog Github Tags \ud83d\udfe0Maybe<sup>1</sup> The get release timestamp is determined from the <code>releaseTimestamp</code> field in the results. Gitlab Packages \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>created_at</code> field in the results. Gitlab Releases \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>released_at</code> field in the results. Gitlab Tags \ud83d\udfe0Maybe<sup>1</sup> To get release timestamp we use the <code>created_at</code> field from the response. Glasskube Packages \u274c Go \ud83d\udfe0Maybe<sup>1</sup> If the release timestamp is not returned from the respective datasoure used to fetch the releases, then Renovate uses the <code>Time</code> field in the results instead. For modules hosted on GitHub, a later GitHub Release publication time or git tag creation time takes precedence over both. Golang Version \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>Date</code> field in the results. Gradle Version \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>buildTime</code> field in the results. Hackage \u274c Helm \ud83d\udfe0Maybe<sup>1</sup> The release timstamp is determined from the <code>created</code> field in the results. Hermit \u274c Hex \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined the <code>inserted_at</code> field in the results. Hexpm Bob \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>buildDate</code> field in the results. Java Version \u274c Jenkins Plugins \ud83d\udfe0Maybe<sup>1</sup> The releaseTimestamp is determined from the <code>releaseTimestamp</code> or <code>buildDate</code> field in the results. Jsr \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>createdAt</code> field in the results. For packages without explicit timestamps, defaults to 2025-09-18. Julia General Metadata \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>registered</code> field in the results. Kubernetes Api \u274c Maven \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>Last-Modified</code> header or the <code>lastModified</code> field in the results. Nextcloud \u274c Node Version \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>date</code> field. Npm \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>time</code> field in the results. Nuget \ud83d\udfe0Maybe<sup>1</sup> For the v2 API, the release timestamp is determined from the <code>Published</code> tag. And, for the v3 API, the release timestamp is determined from the <code>published</code> field in the results. Orb \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>created_at</code> field in the results. Packagist \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>time</code> field in the results. Pod \u274c Puppet Forge \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>created_at</code> field from the response. Pypi \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the earliest <code>upload_time</code> field of the files of a version. When using the Simple API, timestamps are available if the server supports the JSON-based Simple API (PEP 691). Python Version \u274c Repology \u274c Rpm \u274c Ruby Version \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>release-list</code> table in the results. Rubygems \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>created_at</code> field in the results. Rust Version \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is parsed from the release manifest URL. Sbt Package \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>Last-Modified</code> header or the <code>lastModified</code> field in the results. Sbt Plugin \u274c Terraform Module \ud83d\udfe0Maybe<sup>1</sup> For <code>registry.terraform.io</code> and <code>registry.opentofu.org</code> (via <code>api.opentofu.org</code>), release timestamps are available for all versions. For <code>app.terraform.io</code>, only the latest version is annotated, using the <code>published_at</code> field from the extended module endpoint. Terraform Provider \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is only available for <code>registry.terraform.io</code> (v2 API) and <code>registry.opentofu.org</code> (via <code>api.opentofu.org</code>). Other registries using the Provider Registry Protocol do not provide timestamps. Typst \u274c Unity3d \ud83d\udfe0Maybe<sup>1</sup> The release timestamp is determined from the <code>releaseDate</code> field in the results. Unity3d Packages \u274c <p><sup>1</sup> Whether release timestamps are actually available depends on the registry you use - check Which registries support release timestamps?.</p>"},{"location":"key-concepts/minimum-release-age/#which-registries-support-release-timestamps","title":"Which registries support release timestamps?","text":"<p>The below is a non-exhaustive list of public registries which support release timestamps:</p> Datasource Registry URL Supported Notes <code>crate</code> <code>https://crates.io</code> \u2705 <code>rubygems</code> <code>https://rubygems.org</code> \u2705 <code>docker</code> <code>https://index.docker.io</code> \u2705 <code>docker</code> (not Docker Hub) \u274c Issue <code>docker</code> <code>https://ghcr.io</code> \u274c Issue <code>docker</code> <code>https://quay.io</code> \u274c Issue <code>github-releases</code> <code>https://github.com</code> \u2705 <code>terraform-module</code> <code>https://registry.terraform.io</code> \u2705 <code>terraform-module</code> <code>https://registry.opentofu.org</code> \u2705 Queries <code>api.opentofu.org</code> for release timestamps <code>terraform-provider</code> <code>https://registry.terraform.io</code> \u2705 <code>terraform-provider</code> <code>https://registry.opentofu.org</code> \u2705 Queries <code>api.opentofu.org</code> for release timestamps <code>github-tags</code> <code>https://github.com</code> \u2705 <code>go</code> <code>https://proxy.golang.org,</code> \u2705 <code>golang-version</code> <code>https://raw.githubusercontent.com/golang/website</code> \u2705 <code>maven</code> <code>https://repo1.maven.org/maven2</code> \u2705 <code>node-version</code> <code>https://nodejs.org/dist</code> \u2705 <code>npm</code> <code>https://registry.npmjs.org</code> \u2705 <code>nuget</code> <code>https://api.nuget.org/v3/index.json</code> \u2705 <code>pypi</code> <code>https://pypi.org/pypi/</code> \u2705 <code>ruby-version</code> <code>https://www.ruby-lang.org</code> \u2705 <code>jsr</code> <code>https://jsr.io</code> \u2705 For packages without explicit timestamps, defaults to 2025-09-18 <p>It is likely that if you are using a public registry (i.e. <code>registry.npmjs.org</code>, <code>repo1.maven.org</code>, etc) the release timestamp data will be present. We welcome user contributions to this table.</p> <p>If you use a custom registry, for instance as a pull-through cache, additional configuration may be required.</p> <p>If you are using a custom registry, or unsure about a public registry, you can confirm this using Renovate's debug logs by looking for the <code>packageFiles with updates</code> debug log line, which may contain a <code>releaseTimestamp</code> field in dependency updates:</p> <code>packageFiles with updates</code> debug log example <pre><code>DEBUG: packageFiles with updates\n{\n  \"baseBranch\": \"main\",\n  \"config\": {\n    \"dockerfile\": [\n      {\n        \"deps\": [\n          // NOTE that we're not seeing a release timestamp for this Docker digest\n          {\n            \"depName\": \"ghcr.io/renovatebot/base-image\",\n            \"packageName\": \"ghcr.io/renovatebot/base-image\",\n            \"currentValue\": \"10.67.5\",\n            \"currentDigest\": \"sha256:d67e849707f38e11c8674a59d3fffef1ea6977757f3a65d9d1a3a198bdd160cf\",\n            \"replaceString\": \"ghcr.io/renovatebot/base-image:10.67.5@sha256:d67e849707f38e11c8674a59d3fffef1ea6977757f3a65d9d1a3a198bdd160cf\",\n            \"autoReplaceStringTemplate\": \"{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}\",\n            \"datasource\": \"docker\",\n            \"depType\": \"stage\",\n            \"updates\": [\n              {\n                \"bucket\": \"major\",\n                \"newVersion\": \"11.40.5\",\n                \"newValue\": \"11.40.5\",\n                \"newMajor\": 11,\n                \"newMinor\": 40,\n                \"newPatch\": 5,\n                \"updateType\": \"major\",\n                \"isBreaking\": true,\n                \"newDigest\": \"sha256:81bbc8c8c561f6c4c2d059a5bcdfc95ef837682a41ac45bfbc1380d8d07dc941\",\n                \"branchName\": \"renovate/main-ghcr.io-renovatebot-base-image-11.x\"\n              }\n            ],\n          }\n      // ...\n    ],\n    \"github-actions\": [\n      {\n        \"deps\": [\n          // NOTE that we get a release timestamp for this GitHub Action major version bump, as well as the current version's timestamp\n          {\n            \"depName\": \"actions/setup-node\",\n            \"commitMessageTopic\": \"{{{depName}}} action\",\n            \"datasource\": \"github-tags\",\n            \"versioning\": \"docker\",\n            \"depType\": \"action\",\n            \"replaceString\": \"actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0\",\n            \"autoReplaceStringTemplate\": \"{{depName}}@{{#if newDigest}}{{newDigest}}{{#if newValue}} # {{newValue}}{{/if}}{{/if}}{{#unless newDigest}}{{newValue}}{{/unless}}\",\n            \"currentValue\": \"v4.4.0\",\n            \"currentDigest\": \"49933ea5288caeca8642d1e84afbd3f7d6820020\",\n            \"updates\": [\n              {\n                \"bucket\": \"major\",\n                \"newVersion\": \"v6.0.0\",\n                \"newValue\": \"v6.0.0\",\n                \"newDigest\": \"2028fbc5c25fe9cf00d9f06a71cc4710d4507903\",\n                \"releaseTimestamp\": \"2025-10-14T02:37:06.000Z\",\n                \"newVersionAgeInDays\": 10,\n                \"newMajor\": 6,\n                \"newMinor\": 0,\n                \"newPatch\": 0,\n                \"updateType\": \"major\",\n                \"isBreaking\": true,\n                \"libYears\": 0.5323368531202435,\n                \"branchName\": \"renovate/main-actions-setup-node-6.x\"\n              }\n            ],\n            \"packageName\": \"actions/setup-node\",\n            \"warnings\": [],\n            \"sourceUrl\": \"https://github.com/actions/setup-node\",\n            \"registryUrl\": \"https://github.com\",\n            \"mostRecentTimestamp\": \"2025-10-14T02:37:06.000Z\",\n            \"isAbandoned\": false,\n            \"currentVersion\": \"v4.4.0\",\n            \"currentVersionTimestamp\": \"2025-04-02T19:20:51.000Z\",\n            \"currentVersionAgeInDays\": 204,\n            \"isSingleVersion\": true,\n            \"fixedVersion\": \"v4.4.0\"\n          },\n</code></pre> <p>Given a log line such as \u261d\ufe0f you can also use the following <code>jq</code> query to identify any dependencies (or their updates) that are missing the <code>currentVersionTimestamp</code> or <code>releaseTimestamp</code> fields like so:</p> <code>jq</code> query <pre><code># Code snippet licensed under the Apache-2.0, and co-authored-by: gpt-oss:20b\njq '\n{\n  # -------- missing currentVersionTimestamp ----------\n  missingCurrentVersionTimestamps: [\n    .config\n    | to_entries[] as $ent\n    | $ent.value[] as $group\n    | $group.deps[] as $dep\n    | select($dep.currentVersionTimestamp == null)\n    | {\n        manager: $ent.key,\n        depName: $dep.depName,\n        packageFile: $group.packageFile,\n        datasource: $dep.datasource,\n        registryUrls: (\n          ($dep.registryUrl? | if . != null then [.] else [] end)\n          + ($dep.registryUrls // [])\n        )\n      }\n  ],\n  # -------- missing releaseTimestamp in updates ----------\n  missingReleaseTimestamps: [\n    .config\n    | to_entries[] as $ent\n    | $ent.value[] as $group\n    | $group.deps[] as $dep\n    | select(any($dep.updates[]?; .releaseTimestamp == null))\n    | {\n        manager: $ent.key,\n        depName: $dep.depName,\n        packageFile: $group.packageFile,\n        datasource: $dep.datasource,\n        registryUrls: (\n          ($dep.registryUrl? | if . != null then [.] else [] end)\n          + ($dep.registryUrls // [])\n        ),\n        missingUpdates: [\n          $dep.updates[]?\n          | select(.releaseTimestamp == null)\n          | . + {\n              dependencyCurrentVersionTimestamp: $dep.currentVersionTimestamp,\n              datasource: $dep.datasource\n            }\n        ]\n      }\n  ]\n}\n' debug-log.txt\n</code></pre> <p>Will then output:</p> <code>jq</code> query output <pre><code>{\n  \"missingCurrentVersionTimestamps\": [\n    {\n      \"manager\": \"dockerfile\",\n      \"datasource\": \"docker\",\n      \"depName\": \"ghcr.io/containerbase/devcontainer\",\n      \"packageFile\": \".devcontainer/Dockerfile\",\n      \"registryUrls\": [\"https://ghcr.io\"]\n    },\n    {\n      \"manager\": \"renovate-config\",\n      \"datasource\": null,\n      \"depName\": \"renovatebot/.github\",\n      \"packageFile\": \"renovate.json\",\n      \"registryUrls\": []\n    },\n    {\n      \"manager\": \"regex\",\n      \"datasource\": \"docker\",\n      \"depName\": \"ghcr.io/renovatebot/base-image\",\n      \"packageFile\": \"lib/config/options/index.ts\",\n      \"registryUrls\": [\"https://ghcr.io\"]\n    }\n  ],\n  \"missingReleaseTimestamps\": [\n    {\n      \"manager\": \"dockerfile\",\n      \"datasource\": \"docker\",\n      \"depName\": \"ghcr.io/renovatebot/base-image\",\n      \"packageFile\": \"tools/docker/Dockerfile\",\n      \"registryUrls\": [\"https://ghcr.io\"],\n      \"missingUpdates\": [\n        {\n          \"bucket\": \"major\",\n          \"newVersion\": \"11.40.5\",\n          \"newValue\": \"11.40.5\",\n          \"newMajor\": 11,\n          \"newMinor\": 40,\n          \"newPatch\": 5,\n          \"updateType\": \"major\",\n          \"isBreaking\": true,\n          \"newDigest\": \"sha256:81bbc8c8c561f6c4c2d059a5bcdfc95ef837682a41ac45bfbc1380d8d07dc941\",\n          \"branchName\": \"renovate/main-ghcr.io-renovatebot-base-image-11.x\",\n          \"dependencyCurrentVersionTimestamp\": null,\n          \"dependencyDatasource\": \"docker\"\n        }\n      ]\n    },\n    {\n      \"manager\": \"dockerfile\",\n      \"datasource\": \"docker\",\n      \"depName\": \"ghcr.io/renovatebot/base-image\",\n      \"packageFile\": \"tools/docker/Dockerfile\",\n      \"registryUrls\": [\"https://ghcr.io\"],\n      \"missingUpdates\": [\n        {\n          \"bucket\": \"major\",\n          \"newVersion\": \"11.40.5\",\n          \"newValue\": \"11.40.5-full\",\n          \"newMajor\": 11,\n          \"newMinor\": 40,\n          \"newPatch\": 5,\n          \"updateType\": \"major\",\n          \"isBreaking\": true,\n          \"newDigest\": \"sha256:824737973a79d8c280f8ab1928017780fb936396dc83075a4f7770610eda37bd\",\n          \"branchName\": \"renovate/main-ghcr.io-renovatebot-base-image-11.x\",\n          \"dependencyCurrentVersionTimestamp\": null,\n          \"dependencyDatasource\": \"docker\"\n        }\n      ]\n    },\n    {\n      \"manager\": \"dockerfile\",\n      \"datasource\": \"docker\",\n      \"depName\": \"ghcr.io/renovatebot/base-image\",\n      \"packageFile\": \"tools/docker/Dockerfile\",\n      \"registryUrls\": [\"https://ghcr.io\"],\n      \"missingUpdates\": [\n        {\n          \"bucket\": \"major\",\n          \"newVersion\": \"11.40.5\",\n          \"newValue\": \"11.40.5\",\n          \"newMajor\": 11,\n          \"newMinor\": 40,\n          \"newPatch\": 5,\n          \"updateType\": \"major\",\n          \"isBreaking\": true,\n          \"newDigest\": \"sha256:81bbc8c8c561f6c4c2d059a5bcdfc95ef837682a41ac45bfbc1380d8d07dc941\",\n          \"branchName\": \"renovate/main-ghcr.io-renovatebot-base-image-11.x\",\n          \"dependencyCurrentVersionTimestamp\": null,\n          \"dependencyDatasource\": \"docker\"\n        }\n      ]\n    }\n  ]\n}\n</code></pre> <p>Notice that this indicates that:</p> <ul> <li>There are 3 dependencies that do not have a release timestamp, across different Managers and Datasources</li> <li>There are 3 dependency updates, where neither the dependency nor the dependency update itself have a release timestamp</li> </ul>"},{"location":"key-concepts/minimum-release-age/#how-do-i-add-timestamp-data-to-custom-registries","title":"How do I add timestamp data to custom registries?","text":"<p>Renovate requires release timestamp to be provided by the registry.</p> <p>A common solution is to point Renovate to a registry that does have the release timestamp in the form that Renovate is expecting. You can achieve this by using <code>packageRules</code> to prepend the public registry's URL to the <code>registryUrls</code>.</p> <p>You can see exact examples below:</p>"},{"location":"key-concepts/minimum-release-age/#maven-datasource","title":"Maven datasource","text":"<p>For <code>minimumReleaseAge</code> to work, the Maven source must return reliable <code>last-modified</code> headers.</p> <p>If your custom Maven source registry is pull-through and does not support the <code>last-modified</code> header, like GAR (Google Artifact Registry's Maven implementation) then you can extend the Maven source registry URL with <code>https://repo1.maven.org/maven2</code> as the first item. Then the <code>currentVersionTimestamp</code> via <code>last-modified</code> will be taken from Maven central for public dependencies.</p> <pre><code>{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"maven\"],\n      \"registryUrls\": [\n        \"https://repo1.maven.org/maven2\",\n        \"https://europe-maven.pkg.dev/org-artifacts/maven-virtual\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"key-concepts/minimum-release-age/#pypi-datasource","title":"Pypi datasource","text":"<pre><code>{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"pypi\"],\n      \"registryUrls\": [\n        \"https://pypi.org/pypi/\",\n        \"https://custom-registry.example.com/pypi/some-repo/simple/\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"key-concepts/presets/","title":"Presets","text":"<p>Renovate presets are reusable bits of configuration, stored in JSON, JSON5 or JSONC format.</p> <p>Presets that are included with Renovate are referenced by their name, like <code>:dependencyDashboard</code> and <code>security:minimumReleaseAgeNpm</code>.</p> <p>Custom presets are referenced by repository location. To learn how to create and host them, read the Shareable Config Presets page.</p>"},{"location":"key-concepts/presets/#why-you-should-use-presets","title":"Why you should use presets","text":"<p>Use presets to:</p> <ul> <li>Set up Renovate with good default settings</li> <li>Avoid duplicating your configuration</li> <li>Share your configuration with others</li> <li>Use somebody else's configuration as-is, or extend it with your own rules</li> </ul>"},{"location":"key-concepts/presets/#how-to-use-presets","title":"How to use presets","text":"<p>Say you're using the <code>config:recommended</code> preset, and want to pin your GitHub Action digests. Instead of writing your own Renovate config, you search the docs, and find the <code>helpers:pinGitHubActionDigests</code> preset. Then you add the preset to the <code>\"extends\"</code> array in your Renovate configuration file:</p> <pre><code>{\n  \"extends\": [\"config:recommended\", \"helpers:pinGitHubActionDigests\"]\n}\n</code></pre> <p>In the example above, Renovate follows the rules from the <code>config:recommended</code> preset, plus the rules for <code>helpers:pinGitHubActionDigests</code>.</p> <p>Tip</p> <p>If there is a logical conflict between presets, then the last preset in the <code>\"extends\"</code> array \"wins\".</p>"},{"location":"key-concepts/presets/#managing-config-for-many-repositories","title":"Managing config for many repositories","text":"<p>If you manage the Renovate configuration for many repositories, we recommend that you:</p> <ol> <li>Create a global preset configuration</li> <li>Extend from the global preset in all of the repositories that should use your global preset as base</li> </ol> <p>This way, when you want to change your global Renovate configuration, you only need to edit the global preset file.</p>"},{"location":"key-concepts/presets/#presets-are-modular","title":"Presets are modular","text":"<p>Preset configs are modular: a preset can be as small or large as you need. A preset can even extend from other presets.</p>"},{"location":"key-concepts/presets/#built-in-presets","title":"Built-in presets","text":"<p>Renovate comes with many built-in presets. We recommend you browse Renovate's default presets. Again, to use the preset: add it to the <code>\"extends\"</code> array in your Renovate config file.</p>"},{"location":"key-concepts/presets/#contributing-a-new-built-in-preset","title":"Contributing a new built-in preset","text":"<p>If you have a Renovate config that may help others, you can put it into Renovate's built-in presets. Read Contributing to presets to learn how.</p>"},{"location":"key-concepts/presets/#summary","title":"Summary","text":"<p>In short:</p> <ul> <li>Browse Renovate's default presets, or our other presets, to find helpful presets</li> <li>Use presets by putting them in the <code>\"extends\"</code> array in your Renovate config file</li> <li>To manage the Renovate configuration for many repositories at once, create a global preset config file</li> <li>The order of presets matters: in a logical conflict, the last preset in the <code>\"extends\"</code> array \"wins\"</li> </ul>"},{"location":"key-concepts/pull-requests/","title":"Pull requests","text":"<p>This page describes how Renovate pull requests work.</p>"},{"location":"key-concepts/pull-requests/#how-renovate-finds-existing-prs","title":"How Renovate finds existing PRs","text":"<p>Renovate does not need to maintain any database/state about open or closed Pull Requests. Instead, it uses the code platform's APIs to search and find such PRs.</p> <p>Renovate finds existing PRs (open or closed) by matching both:</p> <ul> <li>the branch name, for example: <code>renovate/lodash-4.x</code>,</li> <li>and the Pull Request title, for example: <code>Update lodash to v4.17.21</code></li> </ul> <p>In cases like the above, there is typically one existing PR with a matching branch name and PR title. But if you group PRs and use titles like \"All non-major updates\", then multiple past PRs may match.</p>"},{"location":"key-concepts/pull-requests/#normal-prs","title":"Normal PRs","text":"<p>As explained above, Renovate PRs normally have some \"uniqueness\" in their title relating to the version in the upgrade. When you close a \"unique\" PR, Renovate assumes you don't want to see that PR again in future, for example:</p> <ol> <li>You ignored <code>lodash@4.17.21</code> by closing Renovate's PR</li> <li>Renovate assumes you don't want any updates to <code>4.17.21</code> of <code>lodash</code></li> <li>Renovate creates a new PR when the branch + title \"uniqueness\" exists again, like when <code>lodash@4.17.22</code> releases</li> </ol> <p>Renovate behaves similarly for <code>major</code> updates, for example:</p> <ol> <li>You ignored a <code>major</code> update for Lodash (pr title: \"Update lodash to v4\") by closing Renovate's PR</li> <li>Renovate assumes you don't want any updates to <code>v4</code> of <code>lodash</code></li> <li>Renovate won't create any update PRs for <code>v4</code> of <code>lodash</code>, even if there are newer versions of <code>v4</code></li> </ol>"},{"location":"key-concepts/pull-requests/#immortal-prs","title":"Immortal PRs","text":"<p>Some Renovate pull requests have a section like this:</p> <p>\ud83d\udc7b Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.</p> <p>An immortal PR keeps popping up again after you close it.</p> <p>This document explains why we have immortal PRs, and how you can fix them.</p>"},{"location":"key-concepts/pull-requests/#why-we-have-immortal-prs","title":"Why we have immortal PRs","text":"<p>First off, we don't have immortal PRs for some philosophical reason like: \"don't ignore this update, it's good for you!\". We have no good way to ignore some PRs after they're closed.</p>"},{"location":"key-concepts/pull-requests/#branch-name-and-pr-title-are-cache-keys","title":"Branch name and PR title are cache keys","text":"<p>Renovate uses the branch name and PR title like a cache key. If the same key exists and the PR was closed, then we ignore the PR.</p>"},{"location":"key-concepts/pull-requests/#cache-keys-can-cause-problems","title":"Cache keys can cause problems","text":"<p>Let's say you have an \"All non-major updates\" PR. If you close the PR, and Renovate ignores it based on the PR title, then you would never get a non-major update again.</p>"},{"location":"key-concepts/pull-requests/#only-unique-version-prs-can-be-ignored","title":"Only unique version PRs can be ignored","text":"<p>Renovate can only ignore PRs if they have a unique version, like \"to v16.1.2\" or \"to v16\" in the title.</p>"},{"location":"key-concepts/pull-requests/#grouped-updates-with-different-versions","title":"Grouped updates with different versions","text":"<p>The problem comes when there are groups of updates which have different versions. Then the update becomes \"Update react (major)\", which is not safely ignorable, instead of \"Update react to v16\".</p>"},{"location":"key-concepts/pull-requests/#future-plans-for-immortal-prs","title":"Future plans for immortal PRs","text":"<p>In the future we may embed metadata in each PR identifying the exact files and packages + versions that PR contains. Then we could allow such PRs to be closed/ignored but then as soon as there's any chance to files/packages/versions being updated then we'd be cache busted and create a new PR. If you regularly wish to close immortal PRs, it's an indication that you may be grouping too widely.</p>"},{"location":"key-concepts/pull-requests/#how-to-fix-immortal-prs","title":"How to fix immortal PRs","text":"<p>Avoid grouping dependencies together which have different versions, or which you have a high chance of wanting to ignore. If you have immortal PRs which you want to keep closed, then set <code>\"recreateWhen\": \"never\"</code>.</p>"},{"location":"key-concepts/pull-requests/#major-updates-require-dependency-dashboard-approval","title":"Major updates require Dependency Dashboard approval","text":"<p>Avoid grouping major upgrades together unless they are related dependencies. Instead, set <code>\"dependencyDashboardApproval\": true</code> for major updates so that you have control about when they are created.</p>"},{"location":"key-concepts/pull-requests/#abandoned-prs","title":"Abandoned PRs","text":"<p>Renovate normally cleans up its own branches and PRs once it decides they are no longer needed, for example after you merge or close a PR. Depending on the state of the branch, Renovate either autocloses the PR and deletes the branch, or, if the branch has been modified, flags the PR as abandoned.</p> <p>If someone other than Renovate modified the branch, Renovate will not destroy that work by autoclosing the PR and deleting the branch.</p> <p>Instead, Renovate flags the PR as abandoned by:</p> <ul> <li>Appending <code>- abandoned</code> to the PR title</li> <li>Adding a comment to the PR explaining that autoclosing was skipped</li> </ul> <p>This tells you that Renovate no longer considers the branch or PR its own, and will not autoclose or delete it.</p>"},{"location":"key-concepts/pull-requests/#recommended-actions-for-abandoned-prs","title":"Recommended actions for abandoned PRs","text":"<p>Renovate will not rebase, update, or close an abandoned PR again, so you need to deal with it manually:</p> <ul> <li>If the changes are still wanted, review and merge the PR yourself</li> <li>If the changes are no longer wanted, close the PR and delete the branch yourself</li> <li>If you want Renovate to manage the update again, delete the branch so Renovate can recreate it on its next run, if still needed</li> </ul> <p>Related config option: <code>pruneStaleBranches</code>.</p>"},{"location":"key-concepts/pull-requests/#ignoring-prs","title":"Ignoring PRs","text":"<p>Close a Renovate PR to ignore it.</p> <p>Note</p> <p>Renovate re-creates any PRs that are marked \"immortal\". This means that any immortal PR you close, pops up again the next time Renovate runs. To ignore immortal PRs, follow the advice in the How to fix immortal PRs section.</p>"},{"location":"key-concepts/scheduling/","title":"Renovate scheduling","text":"<p>This document describes Renovate's scheduling.</p>"},{"location":"key-concepts/scheduling/#default-behavior","title":"Default behavior","text":"<p>On the backend side, Renovate runs as often as its administrator has configured Renovate to run. For example, the administrator configure Renovate to begin its runs hourly, daily, or outside office hours only. How often Renovate runs per-repository subsequently depends on how many repositories there are to check, and how many updates are pending for each repository at the time. If the backend configuration for Renovate means it runs scheduled jobs per-repo approximately every X hours, it is not possible for repository configuration to reduce that to less than X, or to force Renovate to run at exact times on specific repos.</p>"},{"location":"key-concepts/scheduling/#default-timezone","title":"Default timezone","text":"<p>By default, Renovate schedules use the UTC timezone. But you can set your own timezone with the <code>timezone</code> config option.</p>"},{"location":"key-concepts/scheduling/#how-long-renovate-takes-to-run-when-scheduled","title":"How long Renovate takes to run when scheduled","text":"<p>How often Renovate processes individual repositories depends on:</p> <ul> <li>How often Renovate runs</li> <li>How many repositories Renovate is onboarded to, in your organization or user account</li> <li>How much work Renovate must do in each repository</li> </ul> <p>The table below shows how the number of dependencies and repositories affect Renovate run times.</p> Dependencies to update Repositories with the dependencies Run time 1 1 Very fast 1 10 Fast 1 100 Slow 50 1 Slow 100 100 Very slow"},{"location":"key-concepts/scheduling/#global-schedule-vs-specific-schedule","title":"Global schedule vs specific schedule","text":"<p>At a high level, you have two ways to schedule Renovate, a \"global way\" and a \"specific way\":</p> Way to schedule Renovate What this does Notes Global Decides when Renovate runs. This schedule is usually controlled by your organization's administrator. For the Mend Renovate app, Mend decides when Renovate runs. Specific When Renovate runs it checks the schedule to see if it should look for updates to a specific dependency. Usually set in the <code>renovate.json</code> config file, or similar config file. <p>Renovate can only update a dependency if both of these conditions are true:</p> <ul> <li>The Renovate program is running (on your hardware, or on Mend's hardware)</li> <li>The schedule set in the Renovate config file(s) allows Renovate to look for updates for that dependency</li> </ul>"},{"location":"key-concepts/scheduling/#managing-update-frequency","title":"Managing update frequency","text":"<p>Because Renovate defaults to \"always on\" and \"open PRs right away\" it can overwhelm you with \"new PR\" notifications. Use the schedule to control when Renovate looks for updates, for example:</p> <ul> <li>Limit Renovate to check for updates in your repository to once a week. (In your repository's Renovate config file)</li> <li>Set update schedules for a package, or group of packages</li> </ul>"},{"location":"key-concepts/scheduling/#scheduling-use-cases","title":"Scheduling use cases","text":"<p>You can use the scheduling tools to:</p> <ul> <li>Run Renovate outside office hours, to free up continous integration resources for your developers</li> <li>Get updates for certain packages on a regular interval, instead of right away</li> <li>Reduce Renovate PR notifications during the day</li> </ul>"},{"location":"key-concepts/scheduling/#customizing-the-schedule","title":"Customizing the schedule","text":"<p>Use the <code>timezone</code> and <code>schedule</code> configuration options to control when Renovate runs.</p> <p>At a high level you need to follow these steps:</p> <ol> <li>Tell Renovate what <code>timezone</code> you want to use</li> <li>Learn about the scheduling syntax</li> <li>Optional set an \"in-repository schedule\"</li> <li>Optional set packageRules with a custom <code>schedule</code> for a package, or group of packages</li> </ol>"},{"location":"key-concepts/scheduling/#setting-your-timezone","title":"Setting your timezone","text":"<p>By default, Renovate's schedules use the UTC timezone.</p> <p>If you want Renovate to use your local time, use the <code>timezone</code> configuration option. You must use a valid IANA time zone!</p> Setting a specific timezone in your local config file<pre><code>{\n  \"timezone\": \"America/Los_Angeles\"\n}\n</code></pre> <p>Also read the <code>timezone</code> config option docs.</p>"},{"location":"key-concepts/scheduling/#scheduling-syntax","title":"Scheduling syntax","text":"<p>After you've set your local timezone, you can set \"days of the week\" or \"hours of the day\" in which Renovate is allowed to make changes.</p>"},{"location":"key-concepts/scheduling/#recommended-cron-syntax","title":"Recommended cron syntax","text":"<p>We recommend you use the <code>cron</code> syntax in your Renovate schedules.</p> Description Cron syntax every weekend <code>* * * * 0,6</code> before 5:00am <code>* 0-4 * * *</code> after 10pm and before 5am every weekday <code>* 22-23,0-4 * * 1-5</code> on friday and saturday <code>* * * * 5,6</code> every 3 months on the first day of the month <code>* * 1 */3 *</code> <p>Note</p> <p>For Cron schedules, you must use the <code>*</code> wildcard for the minutes value, as Renovate doesn't support minute granularity. And the cron schedule must have five parts.</p>"},{"location":"key-concepts/scheduling/#deprecated-breejslater-syntax","title":"Deprecated breejs/later syntax","text":"<p>This section explains the deprecated <code>@breejs/later</code> syntax. We plan to remove the <code>@breejs/later</code> library in a future major Renovate release if we can find a way to migrate all valid schedules to cron syntax. Due to this upcoming change, we strongly recommend you use <code>cron</code> schedules.</p> <p>Renovate uses the <code>@breejs/later</code> library to parse the text. For Renovate to understand the schedule, you must use valid <code>@breejs/later</code> syntax. Read the @breejs/later parses docs at breejs.github.io for more details. The <code>@breejs/later</code> library also controls the interpretation of \"days\", time_before\", and \"time_after\" keywords.</p> Valid, but deprecated later syntax Cron syntax every weekend <code>* * * * 0,6</code> before 5:00am <code>* 0-4 * * *</code> after 10pm and before 5am every weekday <code>* 22-23,0-4 * * 1-5</code> on friday and saturday <code>* * * * 5,6</code> every 3 months on the first day of the month <code>* * 1 */3 *</code> <p>Warning</p> <p>Renovate does not support scheduled minutes or \"at an exact time\" granularity. Granularity must be at least one hour.</p>"},{"location":"key-concepts/scheduling/#in-repository-schedule-configuration","title":"In-repository schedule configuration","text":"<p>Important: when the Renovate process runs is usually controlled by the administrator, using tools such as <code>cron</code>. For the Mend Renovate App, the Mend maintainers control when the Renovate process runs, usually hourly.</p> <p>If you control the hardware that Renovate runs on, we recommend you:</p> <ul> <li>Schedule enough time on the hardware for Renovate to process your repositories</li> <li>Avoid schedules like \"Run Renovate for an hour each Sunday\" as you will run into problems</li> </ul> <p>Some config examples:</p> Renovate should run each day before 4 am<pre><code>{\n  \"description\": \"Schedule daily before 4 AM\",\n  \"schedule\": [\"* 0-3 * * *\"]\n}\n</code></pre> Renovate should run outside of common office hours<pre><code>{\n  \"description\": \"Schedule during typical non-office hours on weekdays (i.e., 10 PM - 5 AM) and anytime on weekends\",\n  \"schedule\": [\"* 0-4,22-23 * * 1-5\", \"* * * * 0,6\"]\n}\n</code></pre>"},{"location":"key-concepts/scheduling/#schedule-presets","title":"Schedule presets","text":"<p>Renovate has built-in presets for common schedules, like \"once a week\", \"outside office hours\" and so on. Before you create your own custom schedule, check if the Schedule Presets has what you need.</p> <p>The preset schedules only decide when Renovate looks for updates, and do not affect any specific dependencies/packages.</p>"},{"location":"key-concepts/scheduling/#schedule-when-to-update-specific-dependencies","title":"Schedule when to update specific dependencies","text":"<p>With Renovate's scheduling features you can \"limit the noise\" from frequently updating dependencies, like the AWS SDK:</p> Restrict AWS SDK to weekly updates<pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Schedule AWS SDK updates on Sunday nights (9 PM - 12 AM)\",\n      \"matchPackageNames\": [\"@aws-sdk/*\"],\n      \"schedule\": [\"* 21-23 * * 0\"]\n    }\n  ]\n}\n</code></pre> <p>Important tips for the <code>\"schedule\"</code> property:</p> <ul> <li>Always use the array syntax <code>[]</code>, even if you only set a single schedule</li> <li>Separate entries with a comma, like this: <code>[\"cron for schedule 1\", \"cron for schedule 2\"]</code></li> <li>Multiple entries in the <code>\"schedule\"</code> array are interpreted with the Boolean OR logic</li> </ul> <p>Read the schedule config option documentation to learn more.</p>"},{"location":"mend-hosted/credentials/","title":"Using secrets with Mend cloud Apps","text":"<p>The information on this page is for the Mend-hosted cloud apps:</p> <ul> <li>Renovate App on GitHub</li> <li>Mend App on Bitbucket</li> <li>Mend App on Azure DevOps</li> </ul> <p>If you self-host, you can skip reading this page.</p>"},{"location":"mend-hosted/credentials/#migrate-secrets-in-your-renovate-config-file","title":"Migrate secrets in your Renovate config file","text":"<p>The Mend Renovate cloud apps no longer read <code>encrypted</code> secrets from Renovate config files in your repositories. You must migrate any secrets you currently keep in a Renovate config file, and upload them as secrets to org or repo settings pages on developer.mend.io. To add secrets you must have admin-level rights.</p> <p>Read Migrating encrypted secrets from Repo Config to App Settings to learn more.</p>"},{"location":"mend-hosted/credentials/#managing-secrets-via-the-web-ui","title":"Managing secrets via the Web UI","text":"<p>This section explains how to manage secrets for the Mend-hosted cloud apps via the Web UI.</p> <p>Only administrators of an Org or Repo can manage the secrets for that Org or Repo.</p>"},{"location":"mend-hosted/credentials/#adding-a-secret-through-the-ui","title":"Adding a secret through the UI","text":"<p>To add a secret for the Mend cloud app:</p> <ol> <li>Go to the web UI at developer.mend.io.</li> <li>Open your organization/repository settings.</li> <li> <p>Put the secret in the Credentials section:</p> <p></p> </li> <li> <p>Reference the secret from Renovate config files inside the repo.    Alternatively, you can use the Host Rules UI (see below).</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"github.com\",\n      \"token\": \"{{ secrets.MY_ORG_SECRET }}\"\n    }\n  ]\n}\n</code></pre> </li> </ol>"},{"location":"mend-hosted/credentials/#adding-a-host-rule-through-the-ui","title":"Adding a host rule through the UI","text":"<p>You can centrally add/configure Host Rules through the Mend UI as an alternative to including them in Renovate presets.</p> <ol> <li>Open the Credentials section of the settings page for the relevant Org or Repo.</li> <li> <p>Select <code>ADD HOST RULE</code> to open the \"Add a Host Rule\" dialog box.</p> <p></p> </li> <li> <p>Fill out the details for your host rule.</p> <p>As an example, if you are a Bitbucket or Azure DevOps user, and you want to specify a github.com token to fetch release notes and enable github-based datasources, you could create a host rule like this:</p> <p></p> </li> </ol>"},{"location":"mend-hosted/credentials/#organization-secrets-vs-repository-secrets","title":"Organization secrets vs repository secrets","text":""},{"location":"mend-hosted/credentials/#secret-scope","title":"Secret scope","text":"<p>Secrets can be scoped to your organization or to your repository:</p> Secret scoped to your What will happen? Organization Secrets are inherited by all repositories in your organization Repository Secrets are referenced by that repository only"},{"location":"mend-hosted/credentials/#make-changes-on-the-right-page","title":"Make changes on the right page","text":"<p>The web UI has two settings pages. One page is for the organization, and the other page is for the repository.</p> <p>Make sure you're making the changes on the right page!</p>"},{"location":"mend-hosted/credentials/#example","title":"Example","text":"<p>The screenshot shows inherited organization secrets and specific repository secrets.</p>"},{"location":"mend-hosted/credentials/#managing-organization-level-secrets","title":"Managing organization-level secrets","text":"<p>The Installed Repositories table means you are on your organization's page. Select the Settings button to manage your organization secrets:</p> <p></p>"},{"location":"mend-hosted/credentials/#managing-repository-level-secrets","title":"Managing repository-level secrets","text":"<p>The Recent jobs table means you are on your repository's page. Select the Settings button to manage your repository secrets:</p> <p></p>"},{"location":"mend-hosted/credentials/#automating-secrets-via-apis-github-only","title":"Automating secrets via APIs (GitHub only)","text":"<p>Administrators of GitHub organizations and repositories can use the Developer Platform APIs to manage secrets.</p> <p>See the Developer Platform API documentation for details.</p>"},{"location":"mend-hosted/credentials/#authenticating-the-apis","title":"Authenticating the APIs","text":"<p>Calls to the APIs require authentication with a personal access token from the GitHub user making the request. The token must be included in the request header as the <code>authorization</code> property.</p> <p>You can use a classic token or a fine-grained token. Mend recommends the use of fine-grained tokens for enhanced security.</p>"},{"location":"mend-hosted/credentials/#scopes-and-permissions-for-tokens","title":"Scopes and permissions for tokens","text":"<p>No additional scopes or permissions need to be added when calling APIs on public repositories. When calling APIs on private repositories, the following scopes and permissions are required:</p> <ul> <li>Classic tokens require <code>repo</code> scope (Full control of private repositories)</li> <li>Fine-grained tokens must set the \"Resource owner\" as the org that the API is being called on, and must have a minimum of <code>metadata:read-only</code> permission on the selected repositories.</li> </ul>"},{"location":"mend-hosted/credentials/#fine-grained-token-example","title":"Fine-grained token example","text":"<p>To create a fine-grained token for the APIs, follow these steps:</p> <ul> <li>Provide a name for the token in the \"Token name\" field.</li> <li>[Optional] Provide a description for the token.</li> </ul> <p></p> <ul> <li>Set the \"Resource owner\" to be the User or Org for the APIs that will be called.</li> </ul> <p></p> <ul> <li> <p>Choose an expiry date in the \"Expiration\" field.</p> </li> <li> <p>Choose the \"Repository access\" setting. If using APIs to update secrets on a private-repository, choose \"All repositories\" or \"Only selected repositories\".</p> </li> <li> <p>In the \"Permissions\" section, add permissions for \"Metadata\" (read-only).</p> </li> </ul> <p></p>"},{"location":"mend-hosted/credentials/#known-issues","title":"Known Issues","text":""},{"location":"mend-hosted/credentials/#error-deleting-host-rule-from-developer-portal","title":"Error deleting host rule from Developer Portal","text":"<p>Problem: When deleting a host rule from the Developer Portal, an error is shown \"Error deleting host rule\".</p> <p>Workaround: Update the host rule to point to a valid host that you are not using in your repo. This way, the host rule will have no effect.</p>"},{"location":"mend-hosted/environment-variables/","title":"Environment Variables","text":"<p>There are per-plan differences on what can be specified which you can see below.</p>"},{"location":"mend-hosted/environment-variables/#community-free-users-environment-variables","title":"Community (Free) users' environment variables","text":"<p>Community (Free) users can control anything that is repository config, via environment variables.</p> <p>This, for instance, allows a more straightforward way to default <code>minimumReleaseAge</code></p>"},{"location":"mend-hosted/environment-variables/#community-oss-users-environment-variables","title":"Community (OSS) users' environment variables","text":"<p>Community (OSS) projects have the same access as Community (Free) users.</p>"},{"location":"mend-hosted/environment-variables/#enterprise-and-mend-appsec-users-environment-variables","title":"Enterprise and Mend AppSec users' environment variables","text":"<p>If you are a paying Mend customer, in addition to being able to control repository config, you also have access to control the following environment variables:</p> Variable Config option <code>RENOVATE_ALLOWED_COMMANDS</code> <code>allowedCommands</code> <code>RENOVATE_ALLOWED_ENV</code> <code>allowedEnv</code> <code>RENOVATE_ALLOWED_HEADERS</code> <code>allowedHeaders</code> <code>RENOVATE_ALLOWED_UNSAFE_EXECUTIONS</code> <code>allowedUnsafeExecutions</code> <code>RENOVATE_ALLOW_PLUGINS</code> <code>allowPlugins</code> <code>RENOVATE_ALLOW_SCRIPTS</code> <code>allowScripts</code> <code>RENOVATE_ALLOW_SHELL_EXECUTOR_FOR_POST_UPGRADE_COMMANDS</code> <code>allowShellExecutorForPostUpgradeCommands</code> <code>RENOVATE_CUSTOM_ENV_VARIABLES</code> <code>customEnvVariables</code> <code>RENOVATE_FORK_PROCESSING</code> <code>forkProcessing</code> <code>RENOVATE_INHERIT_CONFIG</code> <code>inheritConfig</code> <code>RENOVATE_INHERIT_CONFIG_FILE_NAME</code> <code>inheritConfigFileName</code> <code>RENOVATE_INHERIT_CONFIG_REPO_NAME</code> <code>inheritConfigRepoName</code> <code>RENOVATE_INHERIT_CONFIG_STRICT</code> <code>inheritConfigStrict</code> <code>RENOVATE_ONBOARDING_NO_DEPS</code> <code>onboardingNoDeps</code>"},{"location":"mend-hosted/faq/","title":"Frequently Asked Questions","text":""},{"location":"mend-hosted/faq/#im-hitting-a-timeout-kernel-out-of-memory-limit-with-a-pnpmyarn-project","title":"I'm hitting a <code>timeout</code> / <code>kernel-out-of-memory</code> limit with a <code>pnpm</code>/<code>yarn</code> project","text":"<p>If you're seeing that your jobs are regularly hitting a <code>timeout</code> / <code>kernel-out-of-memory</code>, this might be due to a package manager trying to update a large set of dependencies.</p> <p>On Mend-hosted apps, it is recommended to use the repo-level configuration, <code>toolSettings.nodeMaxMemory</code>, to tune the maximum memory available for the <code>pnpm</code>/<code>yarn</code> commands to use this.</p> <p>Mend-hosted apps don't set a maximum allowed <code>nodeMaxMemory</code>, so you can use the upper limit of memory from your plan as the maximum limit.</p> <p>It is recommended to set this between 1.5GB and 2.5GB but may require tweaking according to your repository.</p> <p>Note</p> <p>It is at the discretion of Mend to raise the memory limit for repositories, in a similar way to how there are increased resources for Open Source projects on Renovate Cloud.</p>"},{"location":"mend-hosted/faq/#how-can-i-run-arbitrary-commands-through-postupgradetasks","title":"How can I run arbitrary commands through <code>postUpgradeTasks</code>?","text":"<p>As noted in the <code>postUpgradeTasks</code> documentation, a self-hosted administrator must allowlist any arbitrary commands that can run on their deployment. This is to prevent both an \"insider attack\" and an \"outsider attack\" that may occur when arbitrary commands execute. ../configuration-options.md#toolsettingsnodemaxmemory</p> <p>Often, Renovate is a central service within a company, where there is some level of trust in its users. However, with Mend-hosted Renovate we're hosting a mix of users on the public Internet that we can't necessarily trust.</p> <p>Although we harden Mend-hosted infrastructure more than a typical Renovate deployment, we still do not allow arbitrary command execution through <code>postUpgradeTasks</code>. Depending on which plan of Renovate Cloud you're using, we may make it possible to allowlist command(s) you wish to run.</p>"},{"location":"mend-hosted/faq/#community-free-users","title":"Community (Free) users","text":"<p>Free users cannot modify nor request arbitrary commands for <code>postUpgradeTasks</code>.</p>"},{"location":"mend-hosted/faq/#community-oss-users","title":"Community (OSS) users","text":"<p>Trusted Open Source projects on the Community (OSS) plan can raise a Mend Hosted Request on our GitHub Discussions, requesting the allowlisting of a given command.</p> <p>Acceptance is at the discretion of Mend.</p>"},{"location":"mend-hosted/faq/#enterprise-and-mend-appsec-users","title":"Enterprise and Mend AppSec users","text":"<p>If you are a paying Mend customer, you have access to control a number of self-hosted configuration options for Renovate.</p> <p>One such variable is <code>RENOVATE_ALLOWED_COMMANDS</code>, which allows controlling the <code>allowedCommands</code> that a repository can run. By configuring this, you can allow commands to run in your repository.</p> <p>These variables can be managed by a repository administrator, and can also be set on the organisation level.</p> <p>There is a balance between ease of use and security - remember that allowlisting commands can lead to a malicious dependency then executing within your project (an \"outsider attack\").</p> <p>We recommend you restrict this to a subset of commands that need to run:</p> <pre><code>RENOVATE_ALLOWED_COMMANDS=[\"^make tidy$\"]\n</code></pre> <p>However, note that by calling a <code>make</code> task, other arbitrary command execution can occur.</p> <p>Tip</p> <p>There is currently no validation pre-save to confirm if you're entering values that are valid Renovate configuration.  After making a change to variable(s), we recommend triggering a new job to ensure that the job does not fail with <code>config-validation</code>.</p>"},{"location":"mend-hosted/faq/#what-environment-variables-can-i-set","title":"What environment variables can I set?","text":"<p>In June 2026, Mend allowed all repositories to be able to set environment variables, separate from repository secrets.</p> <p>For more details, see the separate Environment Variables documentation page.</p>"},{"location":"mend-hosted/faq/#what-ip-addresses-are-used-by-mend-renovate-cloud","title":"What IP Addresses are used by Mend Renovate Cloud?","text":"<p>If you are looking at restricting access to your source code via IP allowlisting, you will need to know which public IPs Mend's Developer Platform accesses from.</p> <p>These can be found documented on the Mend docs site under the <code>developer-platform</code> section.</p> <ul> <li>the <code>us</code> grouping is for <code>developer.mend.io</code></li> <li>the <code>eu</code> grouping is for <code>developer-eu.mend.io/</code></li> </ul>"},{"location":"mend-hosted/github-com-token/","title":"Purpose of github.com Token","text":"<p>Users of Mend's Renovate apps on Bitbucket Cloud and Azure DevOps need to provide a github.com token to retrieve release notes and changelogs, plus some package files.</p> <p>If github.com credentials are not provided, Renovate will continue to run, but with the following limitations:</p> <ul> <li>release notes and changelogs will be disabled in Renovate pull requests</li> <li>lookups for packages hosted on github.com may fail due to rate limiting</li> </ul>"},{"location":"mend-hosted/github-com-token/#do-i-need-to-provide-a-githubcom-token","title":"Do I need to provide a github.com token?","text":""},{"location":"mend-hosted/github-com-token/#githubcom-cloud-users","title":"github.com (Cloud) users","text":"<p>If your repositories are hosted on github.com (Cloud) and you are using the Renovate App on GitHub, you do not need to provide a token for github.com because the Renovate App already has access to GitHub.</p>"},{"location":"mend-hosted/github-com-token/#bitbucket-and-azure-devops-users","title":"Bitbucket and Azure DevOps users","text":"<p>If your repositories are hosted on Bitbucket or Azure DevOps, you will need to provide a github.com token if you want your Renovate PRs to contain release notes and changelogs, or if you want updates on packages that live exclusively on github.com.</p> <p>If the github.com token is not provided, a warning will be shown in the Developer Portal and in the Dependency Dashboard.</p> <p></p>"},{"location":"mend-hosted/github-com-token/#how-to-provide-a-githubcom-token","title":"How to provide a github.com token","text":"<p>Renovate will accept a github.com token from any GitHub user. The token requires no special access or permissions.</p>"},{"location":"mend-hosted/github-com-token/#step-1-acquire-a-githubcom-token","title":"Step 1: Acquire a github.com token","text":"<ol> <li>Log in to github.com (any user)</li> <li>Navigate to Personal access tokens in Developer settings</li> <li>Choose <code>Generate new token</code> (either fine-grained or classic)</li> <li>Provide a <code>Token name</code> (fine-grained) or <code>Note</code> (optional for classic token)</li> <li>Choose the expiration date. (No additional scopes or repository permissions are required.)</li> <li>Press <code>Generate token</code></li> <li>Copy the token when it is presented on the screen</li> </ol> <p>[!IMPORTANT]</p> <p>Make sure to copy your personal access token now as you will not be able to see this again.</p>"},{"location":"mend-hosted/github-com-token/#step-2-add-the-token-to-the-orgrepo-credentials","title":"Step 2: Add the token to the Org/Repo credentials","text":"<p>Use the token generated in the previous step to provide a secret and host rule for the Org or Repos.</p> <p>[!NOTE]</p> <p>If a github.com token is added to the settings for an Org, Workspace or Project, the token will be inherited by all of its child repositories.</p> <ol> <li>Log in to Developer Portal</li> <li>Navigate to the Settings for an Org/Workspace/Project or a Repo</li> <li>Go to the <code>Credentials</code> settings page</li> <li>Choose <code>ADD SECRET</code> and create a secret to store the token<ul> <li>Provide a <code>Secret Name</code> (e.g. <code>GITHUB_TOKEN</code>)</li> <li>Store the github.com token in the <code>Secret Value</code></li> </ul> </li> <li>Choose <code>ADD HOST RULE</code> and create a host rule for <code>github</code><ul> <li>Select host type <code>github</code></li> <li>Select Secret Type as <code>Token</code></li> <li>Select the github.com token as the secret</li> </ul> </li> </ol> <p></p> <p>For more information about providing Secrets and Host Rules in the Developer Portal UI, see the documentation for Credentials.</p>"},{"location":"mend-hosted/hosted-apps-config/","title":"Mend-hosted Apps Configuration","text":"<p>This page:</p> <ul> <li>covers all non-default Renovate behavior of these Mend-hosted apps</li> <li>is a supplement to the CLI documentation</li> </ul> <p>Note</p> <p>For general configuration of the Renovate CLI, read the main Configuration/Overview section.</p>"},{"location":"mend-hosted/hosted-apps-config/#finding-the-logs","title":"Finding the logs","text":"<p>The Renovate logs for the Mend-hosted apps are on the Mend Developer Portal.</p> <p>Reading the logs can help you understand the configuration that Renovate used.</p>"},{"location":"mend-hosted/hosted-apps-config/#renovate-version","title":"Renovate Version","text":"<p>The Renovate version used by the Mend-hosted apps is updated manually by the maintainers of the app. The maintainers don't follow any release schedule or release cadence, but try to update at least once a week. This means the Mend Renovate App can lag a few hours to a week behind the open source version.</p> <p>Major releases of Renovate are held back until the maintainers are reasonably certain it works for most users.</p>"},{"location":"mend-hosted/hosted-apps-config/#which-version-is-the-mend-renovate-app-using","title":"Which version is the Mend Renovate app using?","text":"<p>Follow these steps to see which version the Mend Renovate app used for a specific job:</p> <ol> <li>Sign in to the Mend Developer Portal with your GitHub or Bitbucket account</li> <li>Select your organization</li> <li>Select a installed repository</li> <li>Select a job from the Recent jobs overview</li> <li>Select the Info Log Level from the dropdown menu</li> <li> <p>You should see something like this:</p> <pre><code>INFO: Renovate started\n{\n  \"renovateVersion\": \"44.133.0\"\n}\n...\nINFO: Repository started\n{\n  \"renovateVersion\": \"44.133.0\"\n}\n</code></pre> </li> </ol> <p>Tip</p> <p>The PRs that Renovate creates have a link to the \"repository job log\" in the footer of the PR body text.</p>"},{"location":"mend-hosted/hosted-apps-config/#onboarding-behavior","title":"Onboarding behavior","text":""},{"location":"mend-hosted/hosted-apps-config/#installing-renovate-into-all-repositories-leads-to-silent-mode","title":"Installing Renovate into all repositories leads to silent mode","text":"<p>If an Organization installed Renovate with \"All repositories\" (instead of \"Selected repositories\"), then Renovate defaults to \"Silent\" mode (<code>dryRun=lookup</code>). We chose this behavior because:</p> <ul> <li>Too often an account or org administrator selects the \"All repositories\" option and accidentally onboards hundreds of repositories, and</li> <li>By offering this option, it means that org administrators can install Renovate into \"All repositories\" without worrying about the noise, and let individual repository admins decide if/when to start onboarding</li> </ul>"},{"location":"mend-hosted/hosted-apps-config/#why-we-call-this-silent-mode","title":"Why we call this silent mode","text":"<ul> <li>It's not just no PRs, it's also no Issues</li> <li>It's a common term across other Mend capabilities, such as OSS security and SAST security, where status checks also use silent/non-silent</li> </ul>"},{"location":"mend-hosted/hosted-apps-config/#get-onboarding-prs-from-renovate-by-getting-out-of-silent-mode","title":"Get onboarding PRs from Renovate by getting out of silent mode","text":"<p>If Renovate is installed, and you can see a job log, but Renovate is not onboarding your repository: look for <code>dryRun</code> in the logs to confirm you are in Silent mode. To get a onboarding PR from Renovate, change to Interactive mode either at the Repository level or Organization level.</p>"},{"location":"mend-hosted/hosted-apps-config/#installing-renovate-into-selected-repositories-always-leads-to-onboarding-prs","title":"Installing Renovate into selected repositories always leads to onboarding PRs","text":"<p>Additionally, if an Organization is installed with \"Selected repositories\" then the app will change <code>onboardingNoDeps</code> to <code>\"enabled\"</code>. This change causes Renovate to create an Onboarding PR, even if Renovate does not detect any dependencies.</p>"},{"location":"mend-hosted/hosted-apps-config/#fork-processing","title":"Fork Processing","text":"<p>If an Organization installs Renovate with the \"All repositories\" option, then <code>forkProcessing</code> will remain set to its default value <code>disabled</code>. This means forked repositories are not onboarded, Renovate ignores them. To change this behavior, push a <code>renovate.json</code> file to the repository with <code>\"forkProcessing\": \"enabled\"</code>.</p> <p>If an Organization installs Renovate with \"Selected repositories\", we assume the organization wants to onboard all of the selected repositories, even forked repositories. Therefore we set <code>forkProcessing</code> to \"enabled\".</p>"},{"location":"mend-hosted/hosted-apps-config/#inherited-config","title":"Inherited config","text":"<p>The Mend Renovate app automatically applies inherited config to all installed repositories in an organization, if these conditions are met:</p> <ol> <li>A repository called <code>renovate-config</code> exists in the same organization, and the organization has installed the Mend Renovate app. The repository does not need to be onboarded</li> <li>Renovate finds a file called <code>org-inherited-config.json</code> in the <code>renovate-config</code> repository</li> </ol> <p>Tip</p> <p>If you're an Enterprise customer on Mend-hosted apps, you can change these settings through their respective environment variables.</p> <p>To avoid wasted API calls, Mend apps will enable <code>inheritConfig</code> in an org only when Renovate detects a commit for the <code>inheritConfig</code> file. This means the <code>inheritConfig</code> file will not be detected if the Mend Renovate app is not installed on the <code>renovate-config</code> repository at the time of adding or changing the file. If you have such a file but the Mend app has not enabled <code>inheritConfig</code> in your org, try pushing a commit to that file and wait a minute to see if Renovate detects the change.</p>"},{"location":"mend-hosted/hosted-apps-config/#default-presets","title":"Default presets","text":"<p>The Mend Renovate app automatically adds the <code>mergeConfidence:all-badges</code> preset to the <code>extends</code> array. If you do not want the Merge Confidence badges: add the <code>mergeConfidence:all-badges</code> preset to the <code>ignorePresets</code> array.</p> <p>Additionally, the preset <code>config:recommended</code> is added to <code>onboardingConfig</code>.</p>"},{"location":"mend-hosted/hosted-apps-config/#allowed-post-upgrade-commands","title":"Allowed Post-upgrade commands","text":"<p>A limited set of approved <code>postUpgradeTasks</code> commands are allowed in the app. The commands are not documented, as they may change over time.</p> <p>You can find the allowed <code>postUpgradeTasks</code> commands in Renovate's log output, when searching for a log line which references <code>allowedCommands</code>.</p>"},{"location":"mend-hosted/hosted-apps-config/#validating-configuration","title":"Validating configuration","text":"<p>As noted in Validation of Renovate config change PRs, Renovate will automagically validate your configuration changes when pushing to the \"reconfigure\" branch.</p> <p>Tip</p> <p>When using a Mend-hosted app, the \"reconfigure\" branch defaults to <code>renovate/reconfigure</code>.</p> <p>When pushing to this specific branch name, Renovate will run its validation and report a status check to the Platform whether this passes/fails validation.</p> <p>Note</p> <p>The reconfigure branch must be pushed to the source repository that Renovate runs against, not a fork.</p> <p>If you have a Pull Request open from this branch (including draft PRs), Renovate will comment on the PR to note:</p> <ul> <li>If there are any failures, and if so, what's wrong</li> <li>If the configuration passed validation, and if so, what the new configuration will do</li> </ul> <p>For example, when failing validation:</p> <p></p> <p>And when the PR then passes validation:</p> <p></p>"},{"location":"mend-hosted/job-scheduling/","title":"Job Scheduling &amp; Renovate Status","text":"<p>Mend Renovate Cloud will automatically schedule Renovate jobs to be run on installed repos. When the scheduler runs, selected repositories are added to the Job Queue, and eventually executed by the job runners.</p>"},{"location":"mend-hosted/job-scheduling/#job-schedulers","title":"Job Schedulers","text":"<p>There are four types of job schedulers, each with a different frequency and selection of repositories.</p> Job Scheduler Frequency Renovate statuses Active jobs 4-hourly<sup>1</sup> new, activated Inactive jobs Daily onboarded, onboarding, silent, failed Blocked Weekly timeout, resource-limit, kernel-out-of-memory, unknown All repos Monthly All installed repos (including disabled) <p>(1) Renovate Enterprise jobs are scheduled every hour for repositories on GitHub and Azure DevOps.</p>"},{"location":"mend-hosted/job-scheduling/#renovate-status","title":"Renovate Status","text":"<p>Each repository installed with Renovate Cloud has a Renovate Status. The Renovate Status is used by the job scheduler to determine which repositories will be selected. The status appears in the list of repositories shown on the Org page of the Developer Portal.</p> <p>The table below describes all the Renovate statuses.</p> Renovate Status Description Schedule &lt;-blank-&gt; New repo. Renovate has never run on this repo. Hourly onboarding Onboarding PR has not been merged Daily onboarded Onboarding PR has been merged. No Renovate PRs merged Daily activated At least one Renovate PR has been merged Hourly silent Renovate will run, but not deliver PRs or issues Daily failed An error occurred while running the last job Daily timeout A timeout occurred while running the last job Weekly kernel-out-of-memory An OOM error occurred while running the last job Weekly resource-limit A resource limit was hit while running the last job Weekly unknown An unknown error occurred while running the last job Weekly disabled Renovate will not run on this repository Monthly <pre><code>flowchart TD\n    A[Installed Repository] --&gt; B{Renovate Status}\n    B --&gt;|&lt;code&gt;new&lt;/code&gt;| C[Active jobs&lt;br&gt;4-hourly #40;1#41;]\n    B --&gt;|&lt;code&gt;activated&lt;/code&gt;| C\n    B --&gt;|&lt;code&gt;onboarded&lt;/code&gt;| D[Inactive jobs&lt;br&gt;Daily]\n    B --&gt;|&lt;code&gt;onboarding&lt;/code&gt;| D\n    B --&gt;|&lt;code&gt;silent&lt;/code&gt;| D\n    B --&gt;|&lt;code&gt;failed&lt;/code&gt;| D\n    B --&gt;|&lt;code&gt;timeout&lt;/code&gt;| E[Blocked jobs&lt;br&gt;Weekly]\n    B --&gt;|&lt;code&gt;resource-limit&lt;/code&gt;| E\n    B --&gt;|&lt;code&gt;kernel-out-of-memory&lt;/code&gt;| E\n    B --&gt;|&lt;code&gt;unknown&lt;/code&gt;| E\n    B --&gt;|&lt;code&gt;disabled&lt;/code&gt;| F[All repos&lt;br&gt;Monthly]\n    C --&gt; G[Job Queue]\n    D --&gt; G\n    E --&gt; G\n    F --&gt; G\n    G --&gt; H[Job Runner]</code></pre> <p><sup>1</sup> Renovate Enterprise jobs are scheduled every hour for repositories on GitHub and Azure DevOps.</p>"},{"location":"mend-hosted/migrating-secrets/","title":"Migrating Secrets from Repo Config to App Settings","text":"<p>The Mend Renovate Cloud apps no longer read encrypted secrets from Renovate config files in your repositories. Previously, you could encrypt a secret with the Renovate encryption tool and then put it in your Renovate config file.</p> <p>When using the Mend Renovate Cloud apps, all secrets must be stored in the App settings on the cloud. The secrets can be referenced from the Renovate config files inside the repo using <code>{{ secrets.SECRET_NAME }}</code> notation.</p>"},{"location":"mend-hosted/migrating-secrets/#old-method","title":"Old method","text":"<p>This method is deprecated:</p> Put encrypted secret in Renovate config<pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"github.com\",\n      \"encrypted\": {\n        \"token\": \"drsMDVf6M2hTZCN......+gQm/0Rpw\"\n      }\n    }\n  ]\n}\n</code></pre>"},{"location":"mend-hosted/migrating-secrets/#new-method","title":"New method","text":"<p>This is the new method that you should start using:</p> Reference the app secret in the Renovate config<pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"github.com\",\n      \"token\": \"{{ secrets.GITHUB_COM_TOKEN }}\"\n    }\n  ]\n}\n</code></pre>"},{"location":"mend-hosted/migrating-secrets/#tips","title":"Tips","text":""},{"location":"mend-hosted/migrating-secrets/#do-not-change-the-secret-during-migration","title":"Do not change the secret during migration","text":"<p>Mend recommends that you do not change the secret during the migration, as this introduces an extra point of failure. After the migration you can of course change/rotate the secret.</p>"},{"location":"mend-hosted/migrating-secrets/#migrate-your-secrets-in-the-raw-form-plain-text","title":"Migrate your secrets in the raw form (plain text)","text":"<p>When migrating secrets, DO NOT migrate the encrypted form of the secret. You must input the secret in the web UI from plain text. (The web UI will store the value securely.) If you do not have the original plain text form of the secret being migrated, you will need to create a new secret.</p>"},{"location":"mend-hosted/migrating-secrets/#how-to-migrate-secrets","title":"How to migrate secrets","text":""},{"location":"mend-hosted/migrating-secrets/#use-plain-text-values-not-encrypted-values","title":"Use Plain text values - not encrypted values","text":"<p>You must Migrate encrypted secrets using the PLAIN TEXT value. You can not use the encrypted version of the secret.</p>"},{"location":"mend-hosted/migrating-secrets/#add-the-secret-to-the-correct-org-or-repo","title":"Add the secret to the correct Org or Repo","text":"<p>When you migrate a secret from a repository, make sure you are adding the secret to the same organization or repository for which you generated the secret!</p> <ul> <li>A secret generated for a specific repository can only be added to that same repository.</li> <li>A secret generated for a specific repository can only be added to the repository settings for the matching repository. This secret can not be added to the organization's settings.</li> <li>A secret generated without a specific repository can be added into the organization or into the repository settings under that organization.</li> </ul>"},{"location":"mend-hosted/migrating-secrets/#steps-to-migrate-a-secret-to-the-renovate-cloud-app","title":"Steps to migrate a secret to the Renovate Cloud App","text":"<ol> <li> <p>Go to the correct settings page for your organization or repository in the web UI at developer.mend.io.</p> </li> <li> <p>On the Credentials page, select <code>ADD SECRET</code> to add the plaintext secret.    </p> </li> <li> <p>Give a value for <code>Secret name</code>, paste the plaintext secret into the <code>Secret Value</code> field, and select <code>SAVE</code>.    </p> </li> <li> <p>Wait for the confirmation dialog: \u201cSuccessfully stored secret\u201d.    </p> </li> </ol>"},{"location":"mend-hosted/migrating-secrets/#using-the-api","title":"Using the API","text":"<p>The Mend Developer Platform has an API, allowing programmatic management of repo secrets and org secrets.</p>"},{"location":"mend-hosted/migrating-secrets/#troubleshooting","title":"Troubleshooting","text":""},{"location":"mend-hosted/migrating-secrets/#secret-is-stored-successfully-but-it-doesnt-work-when-used-in-the-app","title":"Secret is stored successfully, but it doesn't work when used in the app","text":"<p>The secret might be wrong. Try uploading the secret again.</p> <ul> <li>Ensure that the PLAIN TEXT value of the secret is used - not the encrypted value.</li> <li>Ensure that the secret was uploaded to the correct Org or Repo.</li> </ul>"},{"location":"mend-hosted/migrating-secrets/#related-links","title":"Related links","text":"<ul> <li>Using Secrets with Mend Cloud Apps</li> <li>Mend Developer Platform API (1.0)</li> </ul>"},{"location":"mend-hosted/overview/","title":"Mend Renovate Cloud-hosted (Community and Enterprise)","text":"<p>Mend provides cloud hosting services for running Renovate in free and paid versions:</p> <ul> <li>Mend Renovate Community Cloud (Free)</li> <li>Mend Renovate Enterprise Cloud (Paid)</li> </ul> <p>They are available for Git repositories hosted on the following cloud platforms:</p> <ul> <li>GitHub</li> <li>Bitbucket Cloud</li> <li>Azure DevOps</li> </ul> <p>Mend Renovate cloud will regularly schedule Renovate jobs against all installed repositories. It also listens to webhooks and enqueues a Renovate job when relevant changes occur in a repo, or when actions are triggered from the Renovate PRs or Dashboard issue. There is a web UI with functionality to view and interact with installed repositories, their jobs and job logs.</p>"},{"location":"mend-hosted/overview/#getting-started","title":"Getting started","text":"<p>To get started using Mend Renovate Cloud versions, access the Developer Portal at https://developer.mend.io/.</p> <p>Developers can log in using the OAuth credentials from their cloud-based Git repository.</p> <p></p> <p>Features of the Developer Portal include:</p> <ul> <li>Ability to install, uninstall and view installed repositories</li> <li>Trigger Renovate jobs to run on demand</li> <li>View logs for all Renovate jobs</li> <li>Configure settings that apply at the Org-level or Repo-level</li> </ul>"},{"location":"mend-hosted/overview/#plans","title":"Plans","text":""},{"location":"mend-hosted/overview/#mend-renovate-community-cloud","title":"Mend Renovate Community Cloud","text":"<p>A generous free tier, available for all across an unlimited number of public and private repositories.</p>"},{"location":"mend-hosted/overview/#mend-renovate-community-oss-cloud","title":"Mend Renovate Community (OSS) Cloud","text":"<p>As part of Mend's commitment to support the Open Source community, we provide an enhanced free offering for maintainers of the projects the ecosystem rely upon.</p> <p>This offering provides increased resources and concurrency, as well as access to Merge Confidence Workflows to allow maintainers to more intelligently receive updates based on signals Mend collects from other projects.</p> <p>Projects licensed under an Open Source Initiative (OSI) approved license can request increased resources on Mend Renovate Cloud under the Community (OSS) plan.</p> <p>Tip</p> <p>To request increased resources, create a Mend Hosted Request on the Renovate GitHub Discussions board.  Acceptance is at the discretion of Mend.</p>"},{"location":"mend-hosted/overview/#mend-renovate-enterprise-cloud","title":"Mend Renovate Enterprise Cloud","text":"<p>Mend's premium offering for our Cloud product, with support, enhanced scalability and scheduling, and access to Merge Confidence Workflows.</p> <p>Contact Mend at sales@mend.io for purchase details.</p>"},{"location":"mend-hosted/overview/#resources-and-scheduling","title":"Resources and Scheduling","text":"<p>The resources, scheduling and concurrency of Renovate jobs is determined by the Mend Renovate plan used by the Org, which can be seen below:</p> Mend Renovate Community Cloud Mend Renovate Community (OSS) Cloud Mend Renovate Enterprise Cloud Concurrent jobs per Org 1 2 16 Job scheduling (active repos) Every 4 hours Every 4 hours Hourly<sup>1</sup> Job runner CPUs 1 vCPU 1 vCPU 2 vCPU Job runner Memory 3GB 6GB 8GB Job runner Disk space 15GB 25GB 40GB Job timeout 30 minutes 60 minutes 60 minutes Merge Confidence Workflows \u274c Not included \u2705 Included \u2705 Included Mend.io Helpdesk Support \u274c Not included \u274c Not included \u2705 Included <p><sup>1</sup> Bitbucket repositories running Mend Renovate Enterprise are scheduled to run every 4 hours, to avoid hitting rate limits on GitHub APIs.</p>"},{"location":"modules/","title":"Modules introduction","text":"<p>Renovate modules, please select a subsection.</p>"},{"location":"modules/#supported-modules","title":"Supported modules","text":"<ul> <li>Datasources</li> <li>Managers</li> <li>Platform</li> <li>Versioning</li> </ul>"},{"location":"modules/datasource/","title":"Datasources","text":"<p>After Renovate's manager scanned the files and extracted the dependencies, it assigns a <code>datasource</code> to each extracted package file or dependency. The <code>datasource</code> tells Renovate how to search for new versions.</p> <p>You don't need to configure or override datasources. But you may use datasources in a <code>packageRules</code> array to configure Renovate's behavior, for example:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"npm\"],\n      \"matchPackageNames\": [\"lodash\"],\n      \"automerge\": true\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/datasource/#supported-datasources","title":"Supported Datasources","text":"<p>Supported values for <code>datasource</code> are:</p> <ul> <li><code>apk</code></li> <li><code>artifactory</code></li> <li><code>aws-eks-addon</code></li> <li><code>aws-machine-image</code></li> <li><code>aws-rds</code></li> <li><code>azure-bicep-resource</code></li> <li><code>azure-pipelines-tasks</code></li> <li><code>azure-tags</code></li> <li><code>bazel</code></li> <li><code>bitbucket-server-tags</code></li> <li><code>bitbucket-tags</code></li> <li><code>bitrise</code></li> <li><code>buildpacks-registry</code></li> <li><code>cdnjs</code></li> <li><code>clojure</code></li> <li><code>conan</code></li> <li><code>conda</code></li> <li><code>cpan</code></li> <li><code>crate</code></li> <li><code>custom</code></li> <li><code>dart</code></li> <li><code>dart-version</code></li> <li><code>deb</code></li> <li><code>deno</code></li> <li><code>devbox</code></li> <li><code>docker</code></li> <li><code>dotnet-version</code></li> <li><code>elm-package</code></li> <li><code>endoflife-date</code></li> <li><code>flutter-version</code></li> <li><code>forgejo-releases</code></li> <li><code>forgejo-tags</code></li> <li><code>galaxy</code></li> <li><code>galaxy-collection</code></li> <li><code>git-refs</code></li> <li><code>git-tags</code></li> <li><code>gitea-releases</code></li> <li><code>gitea-tags</code></li> <li><code>github-digest</code></li> <li><code>github-release-attachments</code></li> <li><code>github-releases</code></li> <li><code>github-runners</code></li> <li><code>github-tags</code></li> <li><code>gitlab-packages</code></li> <li><code>gitlab-releases</code></li> <li><code>gitlab-tags</code></li> <li><code>glasskube-packages</code></li> <li><code>go</code></li> <li><code>golang-version</code></li> <li><code>gradle-version</code></li> <li><code>hackage</code></li> <li><code>helm</code></li> <li><code>hermit</code></li> <li><code>hex</code></li> <li><code>hexpm-bob</code></li> <li><code>java-version</code></li> <li><code>jenkins-plugins</code></li> <li><code>jsr</code></li> <li><code>julia-general-metadata</code></li> <li><code>kubernetes-api</code></li> <li><code>maven</code></li> <li><code>nextcloud</code></li> <li><code>node-version</code></li> <li><code>npm</code></li> <li><code>nuget</code></li> <li><code>orb</code></li> <li><code>packagist</code></li> <li><code>pod</code></li> <li><code>puppet-forge</code></li> <li><code>pypi</code></li> <li><code>python-version</code></li> <li><code>repology</code></li> <li><code>rpm</code></li> <li><code>ruby-version</code></li> <li><code>rubygems</code></li> <li><code>rust-version</code></li> <li><code>sbt-package</code></li> <li><code>sbt-plugin</code></li> <li><code>terraform-module</code></li> <li><code>terraform-provider</code></li> <li><code>typst</code></li> <li><code>unity3d</code></li> <li><code>unity3d-packages</code></li> </ul>"},{"location":"modules/datasource/apk/","title":"Apk Datasource","text":""},{"location":"modules/datasource/apk/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>apk</code> Default versioning <code>apk</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>buildDate</code> field in the results. Source URL support No"},{"location":"modules/datasource/apk/#description","title":"Description","text":"<p>The APK datasource is designed to work with Alpine Linux package repositories. It can fetch package information from APK repositories and provide version updates for Alpine Linux packages.</p> <p>Alpine Linux uses the APK package manager, and packages are distributed through repositories. Each repository contains an <code>APKINDEX.tar.gz</code> file that contains metadata about all available packages.</p> <p>Files are typically located in this structure:</p> <pre><code>https://dl-cdn.alpinelinux.org/alpine/v3.19/main/x86_64/APKINDEX.tar.gz\nhttps://dl-cdn.alpinelinux.org/alpine/v3.19/community/x86_64/APKINDEX.tar.gz\n</code></pre>"},{"location":"modules/datasource/apk/#set-url-when-using-an-apk-repository","title":"Set URL when using an APK repository","text":"<p>To use an APK repository with the datasource, you must set a properly formatted URL with specific query parameters as <code>registryUrl</code>:</p> <ul> <li><code>arch</code>: Architecture of the binary packages (e.g. <code>x86_64</code>, <code>aarch64</code>, <code>armv7</code>).</li> <li><code>branch</code>: Alpine branch, either a rolling alias like <code>latest-stable</code> or <code>edge</code>, or a fixed release like <code>v3.19</code>.   Omit this parameter for repositories which do not have a branch in their path.</li> <li><code>components</code>: Comma-separated list of repository components (e.g. <code>main,community,testing</code>).   Omit this parameter for repositories which serve their index directly below the repository root.</li> </ul> <p>Note</p> <p>Renovate does not fetch the <code>registryUrl</code> as-is. It combines the base URL with these parameters to build the actual index URLs, for example <code>&lt;base&gt;/&lt;branch&gt;/&lt;component&gt;/&lt;arch&gt;/APKINDEX.tar.gz</code>. Only the parameters above are accepted, so that a typo fails loudly instead of being ignored.</p> <p>Examples:</p> <pre><code>https://dl-cdn.alpinelinux.org/alpine?branch=v3.19&amp;components=main,community&amp;arch=x86_64\nhttps://packages.wolfi.dev/os?arch=x86_64\n</code></pre> <p>The first URL points to the <code>v3.19</code> branch of the Alpine repository for the <code>x86_64</code> architecture, including the <code>main</code> and <code>community</code> components. Renovate looks up the package in every component you list, and aggregates the releases it finds.</p> <p>The second URL points to the Wolfi repository, which has no branch or component in its path.</p>"},{"location":"modules/datasource/apk/#how-renovate-builds-the-index-urls","title":"How Renovate builds the index URLs","text":"<p>Say you set this <code>registryUrl</code> in your Renovate config:</p> Set the apk registryUrl in renovate.json<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"apk\"],\n      \"registryUrls\": [\n        \"https://dl-cdn.alpinelinux.org/alpine?branch=v3.19&amp;components=main,community&amp;arch=x86_64\"\n      ]\n    }\n  ]\n}\n</code></pre> <p>Renovate then fetches one index per component:</p> <pre><code>https://dl-cdn.alpinelinux.org/alpine/v3.19/main/x86_64/APKINDEX.tar.gz\nhttps://dl-cdn.alpinelinux.org/alpine/v3.19/community/x86_64/APKINDEX.tar.gz\n</code></pre>"},{"location":"modules/datasource/apk/#versioning","title":"Versioning","text":"<p>This datasource uses <code>apk</code> versioning by default, which follows Alpine's version format (<code>3.2.1-r0</code>, <code>2.39.0_rc1-r0</code>, <code>6.5_p20250503-r0</code>) and understands APK's version constraints.</p> <p>This means a <code>currentValue</code> may be a constraint rather than a plain version, e.g. <code>=~8.12.1</code> to accept any <code>8.12.1-rN</code>. Read the <code>apk</code> versioning docs for the operators it supports.</p> <p>Depending on which APK repository you are using, you may want to use the <code>loose</code> versioning scheme, like so:</p> Specify loose versioning for apk lookups<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"apk\"],\n      \"versioning\": \"loose\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/datasource/apk/#dockerfile-support","title":"Dockerfile support","text":"<p>When using distributions built on <code>apk</code> packages, it is common to use a version pin for your packages, like so:</p> <pre><code>FROM alpine:3.18\nRUN apk add --no-cache bash=5.2.37-r2\n</code></pre> <p>This provides reproducibility in the case that the upstream package updates under you.</p> <p>The <code>dockerfile</code> manager extracts these packages, allowing updates to them directly, without needing a Custom Manager.</p> <p>The <code>dockerfile</code> manager does not work out a <code>registryUrl</code> from your base image, so it skips these packages with <code>skipReason: unknown-registry</code> rather than look them up against a registry which may hold versions your image cannot install. Set the <code>registryUrls</code> which match your base image with a <code>packageRules</code> entry to have them looked up.</p> Override apk registryUrl with a packageRules entry<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchFileNames\": [\"Dockerfile\"],\n      \"matchDatasources\": [\"apk\"],\n      \"matchPackageNames\": [\"nginx\"],\n      \"registryUrls\": [\n        \"https://dl-cdn.alpinelinux.org/alpine?branch=v3.18&amp;components=main,community&amp;arch=x86_64\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/datasource/apk/#wolfi-and-chainguard-images-example","title":"Wolfi and Chainguard Images example","text":"<p>Wolfi serves its index directly below the repository root, so its <code>registryUrl</code> needs neither <code>branch</code> nor <code>components</code> - only <code>arch</code>:</p> Point apk lookups at the Wolfi repository<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"apk\"],\n      \"registryUrls\": [\"https://packages.wolfi.dev/os?arch=x86_64\"]\n    }\n  ]\n}\n</code></pre> <p>Renovate then fetches a single index:</p> <pre><code>https://packages.wolfi.dev/os/x86_64/APKINDEX.tar.gz\n</code></pre> <p>Use <code>arch=aarch64</code> for an arm64 image.</p>"},{"location":"modules/datasource/apk/#pinning-packages-in-a-wolfi-image","title":"Pinning packages in a Wolfi image","text":"<p>As the Wolfi (un)distribution follows a rolling release cadence, it is common to pin the version of a package you depend on. Similarly, the package's revision (<code>-rN</code>) changes more often than its version.</p> <p>For instance, you may have a Docker image like so:</p> <pre><code>FROM cgr.dev/chainguard/wolfi-base:latest@sha256:96ff486b326d15db16aa1fbd41a17043a557bebf76d2c0ac932e717534025940\n\nRUN apk add --no-cache \\\n      curl=~8.12.1 \\\n      jq=1.7.1-r4 \\\n      bash\n</code></pre> <p>In this case:</p> <ul> <li><code>curl=~8.12.1</code> is a prefix constraint, so it already accepts every <code>8.12.1-rN</code>.   Renovate doesn't propose an update while there are only revision-based updates.   Once <code>8.13.0</code> exists, Renovate will provide an update to <code>curl=~8.13.0</code>.</li> <li><code>jq=1.7.1-r4</code> is an exact pin, so Renovate raises a PR for a new revision (<code>jq=1.7.1-r5</code>) as well as for a new version (<code>jq=1.8.0-r0</code>).</li> <li><code>bash</code> has no version at all, so Renovate skips with <code>skipReason: unsupported-version</code></li> </ul>"},{"location":"modules/datasource/apk/#mixing-alpine-and-wolfi-in-one-repository","title":"Mixing Alpine and Wolfi in one repository","text":"<p>A <code>registryUrl</code> applies per lookup, so a repository holding both Alpine and Wolfi images needs the two scoped apart. Match on the file the dependency was found in:</p> Separate apk registries for Alpine and Wolfi Dockerfiles<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"apk\"],\n      \"registryUrls\": [\n        \"https://dl-cdn.alpinelinux.org/alpine?branch=v3.21&amp;components=main,community&amp;arch=x86_64\"\n      ]\n    },\n    {\n      \"matchDatasources\": [\"apk\"],\n      \"matchFileNames\": [\"**/*.wolfi\", \"**/Dockerfile.wolfi\"],\n      \"registryUrls\": [\"https://packages.wolfi.dev/os?arch=x86_64\"]\n    }\n  ]\n}\n</code></pre> <p>A later rule overrides an earlier one, so set the repository you use most as the first rule and narrow it with the rules after it. Putting the narrower rule first would let the broader one overwrite its <code>registryUrls</code> again.</p>"},{"location":"modules/datasource/apk/#default-configuration","title":"Default configuration","text":"<pre><code>{\n  \"commitMessageTopic\": \"{{{depName}}} APK package\",\n  \"commitMessageExtra\": \"to {{#if isMajor}}{{{prettyNewMajor}}}{{else}}{{{prettyNewVersion}}}{{/if}}\"\n}\n</code></pre>"},{"location":"modules/datasource/artifactory/","title":"Artifactory Datasource","text":""},{"location":"modules/datasource/artifactory/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>artifactory</code> Default versioning No default versioning Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the date-like text, next to the version hyperlink tag in the results. Source URL support No"},{"location":"modules/datasource/artifactory/#description","title":"Description","text":"<p>Artifactory is the recommended registry for Conan packages.</p> <p>This datasource returns releases from given custom <code>registryUrl</code>(s).</p> <p>The target URL is composed by the <code>registryUrl</code> and the <code>packageName</code>.</p> <p>The release timestamp is taken from the date in the directory listing, and is assumed to be in UTC time.</p> <p>Directory listings often contain file names instead of plain version numbers. Use <code>extractVersion</code> to get the version from the file name. For example, this custom manager updates a URL like <code>https://artifactory.example.com/artifactory/my-repo/path/to/api/api-definition_v1.2.3.yaml</code>:</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/^openapi\\\\.ts$/\"],\n      \"matchStrings\": [\n        \"'(?&lt;registryUrl&gt;https://[^'/]+/artifactory/[^'/]+/)(?&lt;packageName&gt;[^']+/)(?&lt;filePrefix&gt;[a-z-]+_)(?&lt;currentValue&gt;v?[0-9.]+)\\\\.yaml'\"\n      ],\n      \"datasourceTemplate\": \"artifactory\",\n      \"extractVersionTemplate\": \"^{{{filePrefix}}}(?&lt;version&gt;v?[0-9.]+)\\\\.yaml$\"\n    }\n  ]\n}\n</code></pre> <p>Here <code>extractVersionTemplate</code> turns the listed file <code>api-definition_v1.2.3.yaml</code> into the version <code>v1.2.3</code>. <code>currentValue</code> is captured as <code>v1.2.3</code> directly, because <code>extractVersion</code> is not applied to it.</p>"},{"location":"modules/datasource/aws-eks-addon/","title":"Aws Eks Addon Datasource","text":""},{"location":"modules/datasource/aws-eks-addon/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>aws-eks-addon</code> Default versioning <code>aws-eks-addon</code> Custom registry support Yes Release timestamp support No Source URL support No"},{"location":"modules/datasource/aws-eks-addon/#description","title":"Description","text":"<p>This <code>datasource</code> returns the addon versions available for use on AWS EKS via the AWS API.</p> <p>AWS API configuration</p> <ul> <li>Amazon EKS add-ons</li> <li>Available Amazon EKS add-ons from AWS</li> </ul> <p>See Calling AWS Services from Renovate for how to configure your credentials.</p> <p>You can also provide credentials specifically for this datasource with a <code>hostRules</code> entry. Set <code>hostType</code> to <code>aws-eks-addon</code>, <code>username</code> to the access key ID, <code>password</code> to the secret access key, and optionally <code>token</code> to the session token:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"hostType\": \"aws-eks-addon\",\n      \"username\": \"access-key-id\",\n      \"password\": \"secret-access-key\",\n      \"token\": \"session-token\"\n    }\n  ]\n}\n</code></pre> <p>These credentials only apply to AWS EKS Addon lookups. When this host rule is absent or incomplete, Renovate uses the default AWS credential provider chain.</p> <p>You can also specify different <code>region</code> and <code>profile</code> for each addon.</p> <p>The minimal IAM privileges required for this datasource are:</p> <pre><code>{\n  \"Sid\": \"AllowDescribeEKSAddonVersions\",\n  \"Effect\": \"Allow\",\n  \"Action\": [\"eks:DescribeAddonVersions\"],\n  \"Resource\": \"*\"\n}\n</code></pre> <p>Read the AWS EKS IAM reference for more information.</p> <p>Usage</p> <p>Because Renovate has no manager for the AWS EKS Addon datasource, you need to help Renovate by configuring the custom manager to identify the AWS EKS Addons you want updated.</p> <p>When configuring the custom manager, you have to pass in the Kubernetes version and addon names as a minified JSON object as the <code>packageName</code> For example:</p> <pre><code># Getting the vpc-cni version for Kubernetes 1.30\n{\n   \"kubernetesVersion\": \"1.30\",\n   \"addonName\": \"vpc-cni\"\n}\n\n# In order to use it with this datasource, you have to minify it:\n{\"kubernetesVersion\":\"1.30\",\"addonName\":\"vpc-cni\"}\n</code></pre> <p>Although it's unlikely that EKS might support different addon versions across regions, you can optionally specify the <code>region</code> and/or <code>profile</code> in the minified JSON object to discover the addon versions specific to this region.</p> <pre><code># discover kube-proxy addon versions without specifying a cluster version.\nrenovate: eksAddonsFilter={\"addonName\":\"kube-proxy\"}\n\n# discover kube-proxy default addon versions\nrenovate: eksAddonsFilter={\"addonName\":\"kube-proxy\", \"default\":true}\n\n# discover vpc-cni addon versions on Kubernetes 1.30 in us-east-1 region using environmental AWS credentials.\nrenovate: eksAddonsFilter={\"kubernetesVersion\":\"1.30\",\"addonName\":\"vpc-cni\",\"region\":\"eu-west-1\"}\n\n# discover vpc-cni addon versions on Kubernetes 1.30 in us-east-1 region using AWS credentials from `renovate-east` profile.\nrenovate: eksAddonsFilter={\"kubernetesVersion\":\"1.30\",\"addonName\":\"vpc-cni\",\"region\":\"us-east-1\",\"profile\":\"renovate-east\"}\n</code></pre> <p>Here's an example of using the custom manager to configure this datasource:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"aws-eks-addon\"],\n      \"overrideDepName\": \"{{replace '.*\\\"addonName\\\":\\\"([^\\\"]+)\\\".*' '$1' depName}}\"\n    }\n  ],\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/.*\\\\.tf/\"],\n      \"matchStrings\": [\n        \".*# renovate: eksAddonsFilter=(?&lt;packageName&gt;.*?)\\n.*?[a-zA-Z0-9-_:]*[ ]*?[:|=][ ]*?[\\\"|']?(?&lt;currentValue&gt;[a-zA-Z0-9-_.]+)[\\\"|']?.*\"\n      ],\n      \"datasourceTemplate\": \"aws-eks-addon\",\n      \"versioningTemplate\": \"aws-eks-addon\" // Optional. Default value is 'aws-eks-addon'\n    }\n  ]\n}\n</code></pre> <p>The configuration above matches every terraform file, and recognizes these lines:</p> <pre><code>variable \"vpc_cni_version\" {\n  type        = string\n  description = \"EKS vpc-cni add-on version\"\n  # kubernetesVersion and addonName provided\n  # renovate: eksAddonsFilter={\"kubernetesVersion\":\"1.30\",\"addonName\":\"vpc-cni\"}\n  default     = \"v1.18.1-eksbuild.3\"\n}\n</code></pre> <p>or</p> <pre><code>addons:\n  - name: vpc-cni\n    # only addon name and the supported default version\n    # renovate: eksAddonsFilter={\"addonName\":\"vpc-cni\", \"default\":true}\n    version: v1.18.5-eksbuild.1\n</code></pre>"},{"location":"modules/datasource/aws-machine-image/","title":"Aws Machine Image Datasource","text":""},{"location":"modules/datasource/aws-machine-image/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>aws-machine-image</code> Default versioning <code>aws-machine-image</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>CreationDate</code> field in the results. Source URL support No"},{"location":"modules/datasource/aws-machine-image/#description","title":"Description","text":"<p>Warning</p> <p>This datasource is experimental. Its syntax and behavior may change at any time!</p> <p>This datasource returns the latest Amazon Machine Image via the AWS API.</p> <p>See Calling AWS Services from Renovate for how to configure your credentials.</p> <p>You can also provide credentials specifically for this datasource with a <code>hostRules</code> entry. Set <code>hostType</code> to <code>aws-machine-image</code>, <code>username</code> to the access key ID, <code>password</code> to the secret access key, and optionally <code>token</code> to the session token:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"hostType\": \"aws-machine-image\",\n      \"username\": \"access-key-id\",\n      \"password\": \"secret-access-key\",\n      \"token\": \"session-token\"\n    }\n  ]\n}\n</code></pre> <p>These credentials only apply to Amazon Machine Image lookups. When this host rule is absent or incomplete, Renovate uses the default AWS credential provider chain.</p> <p>Read the Developer guide for more information on configuration options.</p> <p>The least IAM privileges required for this datasource are:</p> <pre><code>{\n  \"Sid\": \"AllowEc2ImageLookup\",\n  \"Effect\": \"Allow\",\n  \"Action\": [\"ec2:DescribeImages\"],\n  \"Resource\": \"*\"\n}\n</code></pre> <p>Read the AWS IAM Reference for more information.</p> <p>Because there is no general <code>packageName</code>, you have to use the describe images filter as minified JSON as a <code>packageName</code>.</p> <p>Example:</p> <pre><code># Getting the latest official EKS image from AWS (account '602401143452' for eu-central-1) for EKS 1.21 (name matches 'amazon-eks-node-1.21-*') would look as a describe images filter like:\n\n[\n  {\n    \"Name\": \"owner-id\",\n    \"Values\": [ \"602401143452\" ]\n  },\n  {\n    \"Name\": \"name\",\n    \"Values\": [ \"amazon-eks-node-1.21-*\" ]\n  }\n]\n\n# In order to use it with this datasource, you have to minify it:\n\n[{\"Name\":\"owner-id\",\"Values\":[\"602401143452\"]},{\"Name\":\"name\",\"Values\":[\"amazon-eks-node-1.21-*\"]}]\n</code></pre> <p>At the moment, this datasource has no \"manager\". You have to use the custom manager for this.</p> <p>Usage Example</p> <p>Here's an example of using the custom manager:</p> <pre><code>module.exports = {\n  customManagers: [\n    {\n      customType: 'regex',\n      managerFilePatterns: ['/.*/'],\n      matchStrings: [\n        '.*amiFilter=(?&lt;packageName&gt;.*?)\\n(.*currentImageName=(?&lt;currentDigest&gt;.*?)\\n)?(.*\\n)?.*?(?&lt;depName&gt;[a-zA-Z0-9-_:]*)[ ]*?[:|=][ ]*?[\"|\\']?(?&lt;currentValue&gt;ami-[a-z0-9]{17})[\"|\\']?.*',\n      ],\n      datasourceTemplate: 'aws-machine-image',\n      versioningTemplate: 'aws-machine-image',\n    },\n  ],\n};\n</code></pre> <p>Or as JSON:</p> <pre><code>{\n  'customManagers':\n    [\n      {\n        'customType': 'regex',\n        'managerFilePatterns': ['/.*/'],\n        'matchStrings':\n          [\n            \".*amiFilter=(?&lt;packageName&gt;.*?)\\n(.*currentImageName=(?&lt;currentDigest&gt;.*?)\\n)?(.*\\n)?.*?(?&lt;depName&gt;[a-zA-Z0-9-_:]*)[ ]*?[:|=][ ]*?[\\\"|']?(?&lt;currentValue&gt;ami-[a-z0-9]{17})[\\\"|']?.*\",\n          ],\n        'datasourceTemplate': 'aws-machine-image',\n        'versioningTemplate': 'aws-machine-image',\n      },\n    ],\n}\n</code></pre> <p>Note about <code>currentImageName</code>:</p> <p>The optional <code>currentImageName</code> comment is automatically updated by Renovate to track the actual AMI name corresponding to the AMI ID. This provides human-readable context about which image version is being used. When Renovate finds a newer AMI, it will update both the AMI ID and the <code>currentImageName</code> comment.</p> <p>This would match every file, and would recognize the following lines:</p> <pre><code># With AMI name mentioned in the comments\n# amiFilter=[{\"Name\":\"owner-id\",\"Values\":[\"602401143452\"]},{\"Name\":\"name\",\"Values\":[\"amazon-eks-node-1.21-*\"]}]\n# currentImageName=amazon-eks-node-1.21-v20240703\nmy_ami1: ami-02ce3d9008cab69cb\n\n# Only AMI, no name mentioned\n# amiFilter=[{\"Name\":\"owner-id\",\"Values\":[\"602401143452\"]},{\"Name\":\"name\",\"Values\":[\"amazon-eks-node-1.20-*\"]}]\n# currentImageName=amazon-eks-node-1.20-v20240615\nmy_ami2: ami-0083e9407e275acf2\n\n# Using custom aws profile and region\n# amiFilter=[{\"Name\":\"owner-id\",\"Values\":[\"602401143452\"]},{\"Name\":\"name\",\"Values\":[\"amazon-eks-node-1.20-*\"]},{\"profile\":\"test\",\"region\":\"eu-central-1\"}]\n# currentImageName=amazon-eks-node-1.20-v20240615\nami = \"ami-0083e9407e275acf2\"\n\n# Without currentImageName comment (also works!)\n# amiFilter=[{\"Name\":\"owner-id\",\"Values\":[\"602401143452\"]},{\"Name\":\"name\",\"Values\":[\"amazon-eks-node-1.19-*\"]}]\nmy_ami3: ami-0a1b2c3d4e5f6g7h8\n</code></pre> <pre><code>const myConfigObject = {\n  // With AMI name mentioned in the comments\n  // amiFilter=[{\"Name\":\"owner-id\",\"Values\":[\"602401143452\"]},{\"Name\":\"name\",\"Values\":[\"amazon-eks-node-1.21-*\"]}]\n  // currentImageName=amazon-eks-node-1.21-v20240703\n  my_ami1: 'ami-02ce3d9008cab69cb',\n};\n\n/**\n * AMI with name tracked in comment\n * amiFilter=[{\"Name\":\"owner-id\",\"Values\":[\"602401143452\"]},{\"Name\":\"name\",\"Values\":[\"amazon-eks-node-1.20-*\"]}]\n * currentImageName=amazon-eks-node-1.20-v20240615\n */\nconst my_ami2 = 'ami-0083e9407e275acf2';\n\n/**\n * Without currentImageName comment\n * amiFilter=[{\"Name\":\"owner-id\",\"Values\":[\"602401143452\"]},{\"Name\":\"name\",\"Values\":[\"amazon-eks-node-1.19-*\"]}]\n */\nconst my_ami3 = 'ami-0a1b2c3d4e5f6g7h8';\n</code></pre> <pre><code>resource \"aws_instance\" \"web\" {\n\n    # AMI with name tracked in comment\n    # amiFilter=[{\"Name\":\"owner-id\",\"Values\":[\"602401143452\"]},{\"Name\":\"name\",\"Values\":[\"amazon-eks-node-1.20-*\"]}]\n    # currentImageName=amazon-eks-node-1.20-v20240615\n    ami = \"ami-0083e9407e275acf2\"\n\n    count = 2\n    source_dest_check = false\n\n    connection {\n        user = \"root\"\n    }\n}\n\nresource \"aws_instance\" \"app\" {\n    # Without currentImageName comment\n    # amiFilter=[{\"Name\":\"owner-id\",\"Values\":[\"602401143452\"]},{\"Name\":\"name\",\"Values\":[\"amazon-eks-node-1.19-*\"]}]\n    ami = \"ami-0a1b2c3d4e5f6g7h8\"\n\n    count = 1\n}\n</code></pre>"},{"location":"modules/datasource/aws-machine-image/#default-configuration","title":"Default configuration","text":"<pre><code>{\n  \"commitMessageExtra\": \"to {{{newVersion}}}\",\n  \"prBodyColumns\": [\n    \"Change\",\n    \"Image\"\n  ],\n  \"prBodyDefinitions\": {\n    \"Image\": \"```{{{newDigest}}}```\"\n  },\n  \"digest\": {\n    \"commitMessageExtra\": \"to {{{newDigest}}}\",\n    \"prBodyColumns\": [\n      \"Image\"\n    ],\n    \"prBodyDefinitions\": {\n      \"Image\": \"```{{{newDigest}}}```\"\n    }\n  }\n}\n</code></pre>"},{"location":"modules/datasource/aws-rds/","title":"Aws Rds Datasource","text":""},{"location":"modules/datasource/aws-rds/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>aws-rds</code> Default versioning No default versioning Custom registry support Yes Release timestamp support No Source URL support No"},{"location":"modules/datasource/aws-rds/#description","title":"Description","text":"<p>This datasource returns the database engine versions available for use on AWS RDS via the AWS API.</p> <p>Generally speaking, all publicly released database versions are available for use on RDS. However, new versions may not be available on RDS for a few weeks or months after their release while AWS tests them. In addition, AWS may pull existing versions if serious problems arise during their use.</p> <p>Warning</p> <p>The default versioning of the <code>aws-rds</code> datasource is not compatible with AWS Aurora! If you use AWS Aurora, you must set your own custom versioning. Scroll down to see an example.</p>"},{"location":"modules/datasource/aws-rds/#aws-api-configuration","title":"AWS API configuration","text":"<p>See Calling AWS Services from Renovate for how to configure your credentials.</p> Minimal IAM privileges needed for this datasource<pre><code>{\n  \"Sid\": \"AllowDBEngineVersionLookup\",\n  \"Effect\": \"Allow\",\n  \"Action\": [\"rds:DescribeDBEngineVersions\"],\n  \"Resource\": \"*\"\n}\n</code></pre> <p>Read the AWS RDS IAM reference for more information.</p>"},{"location":"modules/datasource/aws-rds/#usage","title":"Usage","text":"<p>Because Renovate has no manager for the AWS RDS datasource, you need to help Renovate by configuring the custom manager to identify the RDS dependencies you want updated.</p> <p>When configuring the custom manager, you have to pass a filter as minified JSON as the <code>packageName</code>. For example:</p> <pre><code># Getting the latest supported MySQL 5.7 version from RDS as a filter would look like:\n\n[\n  {\n    \"Name\": \"engine\",\n    \"Values\": [ \"mysql\" ]\n  },\n  {\n    \"Name\": \"engine-version\",\n    \"Values\": [ \"5.7\" ]\n  }\n]\n\n# In order to use it with this datasource, you have to minify it:\n\n[{\"Name\":\"engine\",\"Values\":[\"mysql\"]},{\"Name\":\"engine-version\",\"Values\":[\"5.7\"]}]\n</code></pre> Using a custom manager to configure this datasource<pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"**.yaml\"],\n      \"matchStrings\": [\n        \".*rdsFilter=(?&lt;packageName&gt;.+?)[ ]*\\n[ ]*(?&lt;depName&gt;[a-zA-Z0-9-_:]*)[ ]*?:[ ]*?[\\\"|']?(?&lt;currentValue&gt;[.\\\\d]+)[\\\"|']?.*\"\n      ],\n      \"datasourceTemplate\": \"aws-rds\"\n    }\n  ]\n}\n</code></pre> <p>The configuration above matches every YAML file, and recognizes these lines:</p> <pre><code>spec:\n  # rdsFilter=[{\"Name\":\"engine\",\"Values\":[\"mysql\"]},{\"Name\":\"engine-version\",\"Values\":[\"5.7\"]}]\n  engineVersion: 5.7.34\n</code></pre>"},{"location":"modules/datasource/aws-rds/#using-terraform-aws-rds-datasource-and-aurora-mysql","title":"Using Terraform, <code>aws-rds</code> datasource and Aurora MySQL","text":"<p>Here is the Renovate configuration to use Terraform, <code>aws-rds</code> and Aurora MySQL:</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"description\": \"Update RDS\",\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/.+\\\\.tf$/\"],\n      \"matchStrings\": [\n        \"\\\\s*#\\\\s*renovate:\\\\s*rdsFilter=(?&lt;packageName&gt;.+?) depName=(?&lt;depName&gt;.*) versioning=(?&lt;versioning&gt;.*)\\\\s*.*_version\\\\s*=\\\\s*\\\"(?&lt;currentValue&gt;.*)\\\"\"\n      ],\n      \"datasourceTemplate\": \"aws-rds\"\n    }\n  ]\n}\n</code></pre> <p>The above configuration is an example of updating an AWS RDS version inside a Terraform file, using a custom manager.</p> <pre><code># renovate:rdsFilter=[{\"Name\":\"engine\",\"Values\":[\"aurora-mysql\"]},{\"Name\":\"engine-version\",\"Values\":[\"8.0\"]}] depName=aurora-mysql versioning=loose\nengine_version = \"8.0.mysql_aurora.3.05.2\"\n</code></pre>"},{"location":"modules/datasource/azure-bicep-resource/","title":"Azure Bicep Resource Datasource","text":""},{"location":"modules/datasource/azure-bicep-resource/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>azure-bicep-resource</code> Default versioning <code>azure-rest-api</code> Custom registry support Yes Release timestamp support No Source URL support No"},{"location":"modules/datasource/azure-bicep-resource/#description","title":"Description","text":"<p>This data source returns available Bicep resource versions from the official index, which is also used by all Bicep tooling: https://github.com/Azure/bicep-types-az</p>"},{"location":"modules/datasource/azure-bicep-resource/#default-configuration","title":"Default configuration","text":"<pre><code>{\n  \"commitMessageTopic\": \"resource {{depName}}\",\n  \"commitMessageExtra\": \"to {{{newVersion}}}\",\n  \"prBodyColumns\": [\n    \"Resource\",\n    \"Change\"\n  ],\n  \"prBodyDefinitions\": {\n    \"Resource\": \"{{{depNameLinked}}}\"\n  }\n}\n</code></pre>"},{"location":"modules/datasource/azure-pipelines-tasks/","title":"Azure Pipelines Tasks Datasource","text":""},{"location":"modules/datasource/azure-pipelines-tasks/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>azure-pipelines-tasks</code> Default versioning <code>loose</code> Custom registry support No Release timestamp support No Source URL support No"},{"location":"modules/datasource/azure-pipelines-tasks/#description","title":"Description","text":"<p>This datasource returns versions of the built-in Azure Pipelines tasks and from all public extensions on the Visual Studio Marketplace.</p>"},{"location":"modules/datasource/azure-tags/","title":"Azure Tags Datasource","text":""},{"location":"modules/datasource/azure-tags/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>azure-tags</code> Default versioning No default versioning Custom registry support Yes Release timestamp support No Source URL support No"},{"location":"modules/datasource/bazel/","title":"Bazel Datasource","text":""},{"location":"modules/datasource/bazel/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>bazel</code> Default versioning <code>bazel-module</code> Custom registry support Yes Release timestamp support No Source URL support No"},{"location":"modules/datasource/bazel/#description","title":"Description","text":"<p>The <code>bazel</code> datasource is designed to query one or more Bazel registries or file based BCR using the first successful result.</p>"},{"location":"modules/datasource/bitbucket-server-tags/","title":"Bitbucket Server Tags Datasource","text":""},{"location":"modules/datasource/bitbucket-server-tags/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>bitbucket-server-tags</code> Default versioning No default versioning Custom registry support Yes Release timestamp support No Source URL support Yes The source URL is determined by using the <code>packageName</code> and <code>registryUrl</code>."},{"location":"modules/datasource/bitbucket-tags/","title":"Bitbucket Tags Datasource","text":""},{"location":"modules/datasource/bitbucket-tags/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>bitbucket-tags</code> Default versioning No default versioning Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>date</code> field in the results. Source URL support Yes The source URL is determined by using the <code>packageName</code> and <code>registryUrl</code>."},{"location":"modules/datasource/bitrise/","title":"Bitrise Datasource","text":""},{"location":"modules/datasource/bitrise/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>bitrise</code> Default versioning No default versioning Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>published_at</code> field in the results. Source URL support Yes The source URL is determined from the <code>source_code_url</code> field of the release object in the results."},{"location":"modules/datasource/bitrise/#description","title":"Description","text":"<p>Renovate uses this datasource to fetch Bitrise steps from GitHub repositories.</p> Renovate field What value to use? <code>packageName</code> Name of the Bitrise step <code>registryUrl</code> GitHub HTTP Git URL, as used by Bitrise <p>For example, in the YAML snippet below:</p> <ul> <li><code>packageName</code> is <code>script</code></li> <li><code>registryUrl</code> is <code>https://github.com/bitrise-io/bitrise-steplib.git</code></li> </ul> <pre><code>format_version: 11\ndefault_step_lib_source: https://github.com/bitrise-io/bitrise-steplib.git\nproject_type: android\napp:\n  envs:\n    - MY_NAME: My Name\nworkflows:\n  test:\n    steps:\n      - script@1.1.5:\n          inputs:\n            - content: echo \"Hello ${MY_NAME}!\"\n</code></pre>"},{"location":"modules/datasource/buildpacks-registry/","title":"Buildpacks Registry Datasource","text":""},{"location":"modules/datasource/buildpacks-registry/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>buildpacks-registry</code> Default versioning No default versioning Custom registry support No Release timestamp support Yes The release timestamp is determined from the <code>published_at</code> field in the results. Source URL support Yes The source URL is determined from the <code>source_code_url</code> field of the release object in the results."},{"location":"modules/datasource/cdnjs/","title":"Cdnjs Datasource","text":""},{"location":"modules/datasource/cdnjs/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>cdnjs</code> Default versioning No default versioning Custom registry support No Release timestamp support No Source URL support Yes The source URL is determined from the <code>repository</code> field in the results."},{"location":"modules/datasource/clojure/","title":"Clojure Datasource","text":""},{"location":"modules/datasource/clojure/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>clojure</code> Default versioning <code>maven</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>Last-Modified</code> header or the <code>lastModified</code> field in the results. Source URL support Yes The source URL is determined from the <code>scm</code> tags in the results."},{"location":"modules/datasource/conan/","title":"Conan Datasource","text":""},{"location":"modules/datasource/conan/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>conan</code> Default versioning No default versioning Custom registry support Yes Release timestamp support No Source URL support Yes The source URL is supported only if the package is served from the Artifactory servers. In which case we determine it from the <code>properties[conan.package.url]</code> field in the results."},{"location":"modules/datasource/conda/","title":"Conda Datasource","text":""},{"location":"modules/datasource/conda/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>conda</code> Default versioning No default versioning Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>upload_time</code> field of the files of a version when using the Anaconda.org API, or from the <code>createdAt</code> field of the variants of a version when using prefix.dev. All files of a version are assumed to be published at roughly the same time. Source URL support Yes The source URL is determined from the <code>dev_url</code> field in the results."},{"location":"modules/datasource/conda/#description","title":"Description","text":"<p>This datasource returns releases for package from anaconda registry and prefix.dev. Other repositories are not supported currently.</p> <p>This datasource support following cases:</p> <p>Look up <code>numpy</code> in <code>conda-forge</code> channel on anaconda.</p> <pre><code>{\n  packageName: 'conda-forge/numpy',\n}\n</code></pre> <p>Look up <code>numpy</code> in <code>conda-forge</code> channel from prefix.dev using API <code>https://prefix.dev/api/graphql</code>.</p> <pre><code>{\n  packageName: 'numpy',\n  registryUrls: [\"https://prefix.dev/conda-forge/\"]\n}\n</code></pre>"},{"location":"modules/datasource/conda/#multiple-channels-support","title":"Multiple channels support","text":"<pre><code>{\n  packageName: 'some-package',\n  registryUrls: [\n    \"https://api.anaconda.org/package/conda-forge/\",\n    \"https://prefix.dev/conda-forge/\",\n  ]\n}\n</code></pre> <p>The above example will lookup try to find the package on anaconda first, if the package can not be found on prefix.dev.</p>"},{"location":"modules/datasource/cpan/","title":"Cpan Datasource","text":""},{"location":"modules/datasource/cpan/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>cpan</code> Default versioning <code>perl</code> Custom registry support No Release timestamp support Yes The release timestamp is determined from the <code>date</code> field in the results. Source URL support No"},{"location":"modules/datasource/crate/","title":"Crate Datasource","text":""},{"location":"modules/datasource/crate/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>crate</code> Default versioning <code>cargo</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from <code>pubtime</code> field from crates.io index if available, or <code>version.created_at</code> field from crates.io API otherwise. Source URL support Yes The source URL is determined from the <code>repository</code> field in the results."},{"location":"modules/datasource/custom/","title":"Custom Datasource","text":""},{"location":"modules/datasource/custom/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>custom</code> Default versioning No default versioning Custom registry support Yes Release timestamp support No Source URL support No"},{"location":"modules/datasource/custom/#description","title":"Description","text":"<p>This <code>custom</code> datasource allows requesting version data from generic HTTP(S) endpoints.</p>"},{"location":"modules/datasource/custom/#usage","title":"Usage","text":"<p>The <code>customDatasources</code> option takes a record of <code>customDatasource</code> configs. This example shows how to update the <code>k3s.version</code> file with a custom datasource and a regex custom manager:</p> <p>Options:</p> option default description defaultRegistryUrlTemplate <code>\"\"</code> URL used if no <code>registryUrl</code> is provided when looking up new releases format <code>\"json\"</code> format used by the API. Available values are: <code>html</code>, <code>json</code>, <code>plain</code>, <code>toml</code>, <code>yaml</code> transformTemplates <code>[]</code> JSONata rules to transform the API output. Each rule will be evaluated after another and the result will be used as input to the next <p>Tip</p> <p>Use JSONata Exerciser to test your JSONata rules.</p> <p>Available template variables:</p> <ul> <li><code>packageName</code></li> <li><code>currentValue</code></li> </ul> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/k3s.version/\"],\n      \"matchStrings\": [\"(?&lt;currentValue&gt;\\\\S+)\"],\n      \"depNameTemplate\": \"k3s\",\n      \"versioningTemplate\": \"semver-coerced\",\n      \"datasourceTemplate\": \"custom.k3s\"\n    }\n  ],\n  \"customDatasources\": {\n    \"k3s\": {\n      \"defaultRegistryUrlTemplate\": \"https://update.k3s.io/v1-release/channels\",\n      \"transformTemplates\": [\n        \"{\\\"releases\\\":[{\\\"version\\\": $$.(data[id = 'stable'].latest),\\\"sourceUrl\\\":\\\"https://github.com/k3s-io/k3s\\\",\\\"changelogUrl\\\":$join([\\\"https://github.com/k3s-io/k3s/releases/tag/\\\",data[id = 'stable'].latest])}],\\\"sourceUrl\\\": \\\"https://github.com/k3s-io/k3s\\\",\\\"homepage\\\": \\\"https://k3s.io/\\\"}\"\n      ]\n    }\n  }\n}\n</code></pre> <p>After all transformations, the resulting JSON must match one of these formats:</p> <p>Minimal-supported object:</p> <pre><code>{\n  \"releases\": [\n    {\n      \"version\": \"v1.1.0\"\n    },\n    {\n      \"version\": \"v1.2.0\"\n    }\n  ]\n}\n</code></pre> <p>All available options:</p> <pre><code>{\n  \"releases\": [\n    {\n      \"version\": \"v1.0.0\",\n      \"isDeprecated\": true,\n      \"releaseTimestamp\": \"2022-12-24T18:21Z\",\n      \"changelogUrl\": \"https://github.com/demo-org/demo/blob/main/CHANGELOG.md#v0710\",\n      \"sourceUrl\": \"https://github.com/demo-org/demo\",\n      \"sourceDirectory\": \"monorepo/folder\",\n      \"digest\": \"c667f758f9e46e1d8111698e8d3a181c0b10f430\",\n      \"isStable\": true\n    }\n  ],\n  \"sourceUrl\": \"https://github.com/demo-org/demo\",\n  \"sourceDirectory\": \"monorepo/folder\",\n  \"changelogUrl\": \"https://github.com/demo-org/demo/blob/main/CHANGELOG.md\",\n  \"homepage\": \"https://demo.org\"\n}\n</code></pre>"},{"location":"modules/datasource/custom/#debugging","title":"Debugging","text":"<p>Renovate writes tracing logs entries before transformation. If Renovate finds an unexpected dataformat, it also writes a tracing log after transformation.</p>"},{"location":"modules/datasource/custom/#getting-trace-level-logs-on-hosted-app","title":"Getting trace level logs on hosted app","text":"<p>If you use the Mend Renovate app, use the <code>logLevelRemap</code> config option to get the trace log.</p> Getting trace logs from the Mend Renovate app<pre><code>{\n  \"logLevelRemap\": [\n    {\n      \"matchMessage\": \"/^Custom datasource/\",\n      \"newLogLevel\": \"info\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/datasource/custom/#getting-trace-level-logs-when-self-hosting","title":"Getting trace level logs when self-hosting","text":"<p>If you self-host Renovate, follow these steps to get the trace logs:</p> <ol> <li>Set the <code>LOG_FILE_LEVEL</code> env var to <code>trace</code></li> <li>Run Renovate in <code>dryRun</code> mode</li> </ol>"},{"location":"modules/datasource/custom/#formats","title":"Formats","text":""},{"location":"modules/datasource/custom/#json","title":"JSON","text":"<p>If <code>json</code> is used processing works as described above. The returned body will be directly interpreted as JSON and forwarded to the transformation rules.</p>"},{"location":"modules/datasource/custom/#plain","title":"Plain","text":"<p>If the format is set to <code>plain</code>, Renovate will call the HTTP endpoint with the <code>Accept</code> header value <code>text/plain</code>. The body of the response will be treated as plain text and will be converted into JSON.</p> <p>Suppose the body of the HTTP response is as follows:</p> <pre><code>1.0.0\n2.0.0\n3.0.0\n</code></pre> <p>When Renovate receives this response with the <code>plain</code> format, it will convert it into the following:</p> <pre><code>{\n  \"releases\": [\n    {\n      \"version\": \"1.0.0\"\n    },\n    {\n      \"version\": \"2.0.0\"\n    },\n    {\n      \"version\": \"3.0.0\"\n    }\n  ]\n}\n</code></pre> <p>After the conversion, any <code>jsonata</code> rules defined in the <code>transformTemplates</code> section will be applied as usual to further process the JSON data.</p>"},{"location":"modules/datasource/custom/#yaml","title":"Yaml","text":"<p>If <code>yaml</code> is used, response is parsed and converted into JSON for further processing.</p> <p>Suppose the body of the HTTP response is as follows:</p> <pre><code>releases:\n  - version: 1.0.0\n  - version: 2.0.0\n  - version: 3.0.0\n</code></pre> <p>When Renovate receives this response with the <code>yaml</code> format, it will convert it into the following:</p> <pre><code>{\n  \"releases\": [\n    {\n      \"version\": \"1.0.0\"\n    },\n    {\n      \"version\": \"2.0.0\"\n    },\n    {\n      \"version\": \"3.0.0\"\n    }\n  ]\n}\n</code></pre> <p>After the conversion, any <code>jsonata</code> rules defined in the <code>transformTemplates</code> section will be applied as usual to further process the JSON data.</p>"},{"location":"modules/datasource/custom/#toml","title":"TOML","text":"<p>If <code>toml</code> is used, response is parsed and converted into TOML for further processing.</p> <p>The below TOML document</p> <pre><code>[[releases]]\nversion = \"1.0.0\"\n[[releases]]\nversion = \"2.0.0\"\n[[releases]]\nversion = \"3.0.0\"\n</code></pre> <p>Will convert applying any <code>jsonata</code> rules defined in the <code>transformTemplates</code> section will be applied.</p> <pre><code>{\n  \"releases\": [\n    {\n      \"version\": \"1.0.0\"\n    },\n    {\n      \"version\": \"2.0.0\"\n    },\n    {\n      \"version\": \"3.0.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/datasource/custom/#html","title":"HTML","text":"<p>If the format is set to <code>html</code>, Renovate will call the HTTP endpoint with the <code>Accept</code> header value <code>text/html</code>. The body of the response will be treated as a HTML document, and all hyperlinks will be converted to versions.</p> <p>For the following HTML document:</p> <pre><code>&lt;html&gt;\n  &lt;body&gt;\n    &lt;a href=\"package-1.0.tar.gz\"&gt;package-1.0.tar.gz&lt;/a&gt;\n    &lt;a href=\"package-2.0.tar.gz\"&gt;package-2.0.tar.gz&lt;/a&gt;\n  &lt;/body&gt;\n&lt;/html&gt;\n</code></pre> <p>The following JSON will be generated:</p> <pre><code>{\n  \"releases\": [\n    {\n      \"version\": \"package-1.0.tar.gz\"\n    },\n    {\n      \"version\": \"package-1.0.tar.gz\"\n    }\n  ]\n}\n</code></pre> <p>After the conversion, any <code>jsonata</code> rules defined in the <code>transformTemplates</code> section will be applied to process the JSON data.</p> <p>To extract the version number, you may use <code>extractVersion</code> or JSONata rules.</p>"},{"location":"modules/datasource/custom/#examples","title":"Examples","text":""},{"location":"modules/datasource/custom/#k3s","title":"K3s","text":"<p>You can use this configuration to request the newest version available to K3s</p> <pre><code>{\n  \"customDatasources\": {\n    \"k3s\": {\n      \"defaultRegistryUrlTemplate\": \"https://update.k3s.io/v1-release/channels\",\n      \"transformTemplates\": [\n        \"{\\\"releases\\\":[{\\\"version\\\": $$.(data[id = 'stable'].latest),\\\"sourceUrl\\\":\\\"https://github.com/k3s-io/k3s\\\",\\\"changelogUrl\\\":$join([\\\"https://github.com/k3s-io/k3s/releases/tag/\\\",data[id = 'stable'].latest])}],\\\"sourceUrl\\\": \\\"https://github.com/k3s-io/k3s\\\",\\\"homepage\\\": \\\"https://k3s.io/\\\"}\"\n      ]\n    }\n  }\n}\n</code></pre>"},{"location":"modules/datasource/custom/#hashicorp","title":"Hashicorp","text":"<p>You can use this configuration to request the newest versions of the Hashicorp products:</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/\\\\.yml$/\"],\n      \"datasourceTemplate\": \"custom.hashicorp\",\n      \"matchStrings\": [\n        \"#\\\\s*renovate:\\\\s*(datasource=(?&lt;datasource&gt;.*?) )?depName=(?&lt;depName&gt;.*?)( versioning=(?&lt;versioning&gt;.*?))?\\\\s*\\\\w*:\\\\s*(?&lt;currentValue&gt;.*)\\\\s\"\n      ],\n      \"versioningTemplate\": \"{{#if versioning}}{{{versioning}}}{{else}}semver{{/if}}\"\n    }\n  ],\n  \"customDatasources\": {\n    \"hashicorp\": {\n      \"defaultRegistryUrlTemplate\": \"https://api.releases.hashicorp.com/v1/releases/{{packageName}}?license_class=oss\",\n      \"transformTemplates\": [\n        \"{ \\\"releases\\\": $map($, function($v) { { \\\"version\\\": $v.version, \\\"releaseTimestamp\\\": $v.timestamp_created, \\\"changelogUrl\\\": $v.url_changelog, \\\"sourceUrl\\\": $v.url_source_repository } }), \\\"homepage\\\": $[0].url_project_website, \\\"sourceUrl\\\": $[0].url_source_repository }\"\n      ]\n    }\n  }\n}\n</code></pre> <p>To have the latest Nomad version in your Ansible variables, use this snippet after adding the above configuration:</p> <pre><code># renovate: depName=nomad\nnomad_version: 1.6.0\n</code></pre>"},{"location":"modules/datasource/custom/#grafana-dashboard","title":"Grafana Dashboard","text":"<p>You can use the following configuration to upgrade the Grafana Dashboards versions in your Grafana Helm chart:</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/\\\\.yml$/\"],\n      \"matchStrings\": [\n        \"#\\\\s+renovate:\\\\s+depName=\\\"(?&lt;depName&gt;.*)\\\"\\\\n\\\\s+gnetId:\\\\s+(?&lt;packageName&gt;.*?)\\\\n\\\\s+revision:\\\\s+(?&lt;currentValue&gt;.*)\"\n      ],\n      \"versioningTemplate\": \"regex:^(?&lt;major&gt;\\\\d+)$\",\n      \"datasourceTemplate\": \"custom.grafana-dashboards\"\n    }\n  ],\n  \"customDatasources\": {\n    \"grafana-dashboards\": {\n      \"defaultRegistryUrlTemplate\": \"https://grafana.com/api/dashboards/{{packageName}}\",\n      \"format\": \"json\",\n      \"transformTemplates\": [\n        \"{\\\"releases\\\":[{\\\"version\\\": $string(revision)}]}\"\n      ]\n    }\n  }\n}\n</code></pre> <p>Grafana Helm chart <code>values.yaml</code> snippet:</p> <pre><code>dashboards:\n  default:\n    1860-node-exporter-full:\n      # renovate: depName=\"Node Exporter Full\"\n      gnetId: 1860\n      revision: 31\n      datasource: Prometheus\n    15760-kubernetes-views-pods:\n      # renovate: depName=\"Kubernetes / Views / Pods\"\n      gnetId: 15760\n      revision: 20\n      datasource: Prometheus\n</code></pre>"},{"location":"modules/datasource/custom/#custom-offline-dependencies","title":"Custom offline dependencies","text":"<p>Sometimes the \"dependency version source\" is not available via an API. To work around a missing API, you can create dependency \"files\". These files are served via HTTP(S), so that Renovate can access them. For example, imagine the following file <code>versiontracker.json</code> for the software <code>something</code>:</p> <pre><code>[\n  {\n    \"version\": \"77\"\n  },\n  {\n    \"version\": \"76\"\n  }\n]\n</code></pre> <p>By writing a custom datasource, Renovate can process the <code>versiontracker.json</code> file, see below. This example uses Nexus as the webserver.</p> <pre><code>{\n  \"customDatasources\": {\n    \"nexus_generic\": {\n      \"defaultRegistryUrlTemplate\": \"https://nexus.example.com/repository/versiontrackers/{{packageName}}/versiontracker.json\",\n      \"transformTemplates\": [\n        \"{ \\\"releases\\\": $map($, function($v) { { \\\"version\\\": $v.version, \\\"sourceUrl\\\": $v.filelink } }) }\"\n      ]\n    }\n  }\n}\n</code></pre> <p>This could be used to update Ansible YAML files with the latest version through a custom manager. For example, with the following Ansible content:</p> <pre><code># renovate: datasource=custom.nexus_generic depName=something versioning=loose\nsomething_version: '77'\n</code></pre> <p>And the following custom manager:</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/\\\\.yml$/\"],\n      \"datasourceTemplate\": \"custom.nexus_generic\",\n      \"matchStrings\": [\n        \"#\\\\s*renovate:\\\\s*(datasource=(?&lt;datasource&gt;.*?)\\\\s*)?depName=(?&lt;depName&gt;.*?)(\\\\s*versioning=(?&lt;versioning&gt;.*?))?\\\\s*\\\\w*:\\\\s*[\\\"']?(?&lt;currentValue&gt;.+?)[\\\"']?\\\\s\"\n      ],\n      \"versioningTemplate\": \"{{#if versioning}}{{{versioning}}}{{else}}semver{{/if}}\"\n    }\n  ]\n}\n</code></pre> <p>Or if you have the datasource locally, you can also define your local registry by prefixing it with <code>file://</code>:</p> <pre><code>{\n  \"customDatasources\": {\n    \"local_generic\": {\n      \"defaultRegistryUrlTemplate\": \"file://dependencies/{{packageName}}/versiontracker.json\",\n      \"transformTemplates\": [\n        \"{ \\\"releases\\\": $map($, function($v) { { \\\"version\\\": $v.version, \\\"sourceUrl\\\": $v.filelink } }) }\"\n      ]\n    }\n  }\n}\n</code></pre> <p>Renovate will then parse your file from your current folder to access it.</p>"},{"location":"modules/datasource/custom/#nginx-directory-listing","title":"nginx directory listing","text":"<p>Sometimes all you have is a directory with files, and a HTTP server that can generate directory listings.</p> <p>Let's use nginx itself as an example:</p> <pre><code>{\n  \"customDatasources\": {\n    \"nginx\": {\n      \"defaultRegistryUrlTemplate\": \"https://nginx.org/download\",\n      \"format\": \"html\"\n    }\n  },\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"custom.nginx\"],\n      \"extractVersion\": \"^nginx-(?&lt;version&gt;.+)\\\\.tar\\\\.gz$\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/datasource/custom/#html-page","title":"HTML page","text":"<p>You can use the <code>html</code> format to extract versions from a typical \"Downloads\" page:</p> <pre><code>{\n  \"customDatasources\": {\n    \"curl\": {\n      \"defaultRegistryUrlTemplate\": \"https://curl.se/download.html\",\n      \"format\": \"html\"\n    }\n  },\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"custom.curl\"],\n      \"extractVersion\": \"/curl-(?&lt;version&gt;.+)\\\\.tar\\\\.gz$\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/datasource/dart/","title":"Dart Datasource","text":""},{"location":"modules/datasource/dart/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>dart</code> Default versioning <code>npm</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>published</code> field in the results. Source URL support Yes The source URL is determined from the <code>repository</code> field of the latest release object in the results."},{"location":"modules/datasource/dart-version/","title":"Dart Version Datasource","text":""},{"location":"modules/datasource/dart-version/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>dart-version</code> Default versioning No default versioning Custom registry support No Release timestamp support No Source URL support Yes We use the URL: https://github.com/dart-lang/sdk."},{"location":"modules/datasource/deb/","title":"Deb Datasource","text":""},{"location":"modules/datasource/deb/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>deb</code> Default versioning <code>deb</code> Custom registry support Yes Release timestamp support No Source URL support No"},{"location":"modules/datasource/deb/#description","title":"Description","text":"<p>Renovate uses the Debian datasource to update packages from Debian repositories. The <code>debian</code> datasource is meant for projects that:</p> <ul> <li>depend on Debian-based systems, or</li> <li>depend on Debian-based distributions, like Ubuntu</li> </ul> <p>The <code>dockerfile</code> manager detects packages installed by <code>apt install</code> or <code>apt-get install</code> in a <code>RUN</code> instruction. Anywhere else, you must combine the Debian datasource with regex managers for Renovate to detect your dependencies.</p>"},{"location":"modules/datasource/deb/#set-url-when-using-a-debian-repository","title":"Set URL when using a Debian repository","text":"<p>To use a Debian repository with the datasource, you must set a properly formatted URL with specific query parameters as <code>registryUrl</code>:</p> <ul> <li><code>components</code>: Comma-separated list of repository components (e.g., <code>main,contrib,non-free</code>).</li> <li><code>binaryArch</code>: Architecture of the binary packages (e.g., <code>amd64</code>,<code>all</code>).</li> <li><code>suite</code>:<ul> <li>A rolling release alias like <code>stable</code>.</li> <li>A fixed release name such as <code>bullseye</code> or <code>buster</code>.</li> </ul> </li> </ul> <p>Note</p> <p>These parameters are used to give Renovate context and are not directly used to call the repository. Therefore, the <code>registryUrl</code> has not to be a valid URL for a repository.</p> <p>Example:</p> <pre><code>https://deb.debian.org/debian?suite=stable&amp;components=main,contrib,non-free&amp;binaryArch=amd64\n</code></pre> <p>This URL points to the <code>stable</code> suite of the Debian repository for <code>amd64</code> architecture, including <code>main</code>, <code>contrib</code>, and <code>non-free</code> components.</p>"},{"location":"modules/datasource/deb/#dockerfile-support","title":"Dockerfile support","text":"<p>When using Debian-based images, it is common to use a version pin for your packages, like so:</p> <pre><code>FROM debian:trixie\nRUN apt-get update \\\n  &amp;&amp; apt-get install -y --no-install-recommends curl=8.14.1-2 \\\n  &amp;&amp; rm -rf /var/lib/apt/lists/*\n</code></pre> <p>This provides reproducibility in the case that the upstream package updates under you.</p> <p>The <code>dockerfile</code> manager extracts these packages, allowing updates to them directly, without needing a Custom Manager.</p> <p>The <code>dockerfile</code> manager does not work out a <code>registryUrl</code> from your base image, so it skips these packages with <code>skipReason: unknown-registry</code> rather than look them up against a suite which may hold versions your image cannot install. Set the <code>registryUrls</code> which match your base image with a <code>packageRules</code> entry to have them looked up.</p> Point deb lookups at the Debian trixie repositories<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchFileNames\": [\"Dockerfile\"],\n      \"matchDatasources\": [\"deb\"],\n      \"registryUrls\": [\n        \"https://deb.debian.org/debian?suite=trixie&amp;components=main,contrib,non-free&amp;binaryArch=amd64\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/datasource/deb/#usage-example","title":"Usage Example","text":"<p>Where the version is not given to <code>apt</code> directly - say it is held in an environment variable - you can extract it with a custom manager.</p> <p>First you would set a custom manager in your <code>renovate.json</code> file for <code>Dockerfile</code>:</p> <pre><code>{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/^Dockerfile$/\"],\n      \"matchStrings\": [\n        \"#\\\\s*renovate:\\\\s*?(suite=(?&lt;suite&gt;.*?))?\\\\s*depName=(?&lt;depName&gt;.*?)?\\\\sENV .*?_VERSION=\\\"(?&lt;currentValue&gt;.*)\\\"\"\n      ],\n      \"registryUrlTemplate\": \"https://deb.debian.org/debian?suite={{#if suite }}{{suite}}{{else}}stable{{/if}}&amp;components=main,contrib,non-free&amp;binaryArch=amd64\",\n      \"datasourceTemplate\": \"deb\"\n    }\n  ]\n}\n</code></pre> <p>Then you would put comments in your Dockerfile, to tell Renovate where to find the updates:</p> <pre><code>FROM debian:bullseye\n\n# renovate: suite=bullseye depName=gcc-11\nENV GCC_VERSION=\"11.2.0-19\"\n\nRUN apt-get update &amp;&amp; \\\n    apt-get install -y \\\n    gcc-11=\"${GCC_VERSION}\" &amp;&amp; \\\n    apt-get clean\n</code></pre> <p>When the apt package for <code>gcc</code> is updated, Renovate updates the environment variable.</p> Override deb registryUrl with a packageRules entry<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"deb\"],\n      \"matchPackageNames\": [\"gcc-11\"],\n      \"registryUrls\": [\n        \"https://deb.debian.org/debian?suite=stable&amp;components=main,contrib,non-free&amp;binaryArch=amd64\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/datasource/deb/#artifactory","title":"Artifactory","text":"<p>The Debian datasource can be used with Artifactory.</p>"},{"location":"modules/datasource/deb/#supported-repository-types","title":"Supported repository types","text":"<p>The <code>debian</code> datasource supports these repository types:</p> <ul> <li>virtual</li> <li>local</li> <li>remote</li> </ul>"},{"location":"modules/datasource/deb/#set-a-registryurl","title":"Set a <code>registryUrl</code>","text":"<p>To use Artifactory, first configure the <code>deb</code> datasource by setting the <code>registryUrl</code>.</p> Example of valid registryUrl format<pre><code>https://&lt;host&gt;:&lt;port&gt;/artifactory/&lt;repository-slug&gt;?suite=&lt;suite&gt;&amp;components=&lt;components&gt;&amp;binaryArch=&lt;binaryArch&gt;\nhttps://artifactory.example.com:443/artifactory/debian?suite=bookworm&amp;components=main,contrib,non-free&amp;binaryArch=amd64\n</code></pre>"},{"location":"modules/datasource/deb/#authenticating-to-artifactory","title":"Authenticating to Artifactory","text":"<p>If Artifactory asks for authentication, you must set up a host rule. First, generate a password for Renovate with Artifactory's \"Set Me Up\" feature. Then, add the following configuration:</p> Example Artifactory host rule configuration, with username and password<pre><code>{\n  \"hostRules\": [\n    {\n      \"hostType\": \"deb\",\n      \"matchHost\": \"https://artifactory.example.com:443/artifactory/debian\",\n      \"username\": \"myuser\",\n      \"password\": \"&lt; the generated password &gt;\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/datasource/deno/","title":"Deno Datasource","text":""},{"location":"modules/datasource/deno/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>deno</code> Default versioning <code>semver</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>uploaded_at</code> field in the results. Source URL support Yes The source URL is determined from the <code>repository</code> field in the results."},{"location":"modules/datasource/deno/#description","title":"Description","text":"<p>This datasource extracts dependencies from a <code>denoland/apiland</code> compatible registry server.</p> <p>By default, Renovate uses the official Deno registry. You can override this by setting your own <code>registryUrl</code>.</p>"},{"location":"modules/datasource/devbox/","title":"Devbox Datasource","text":""},{"location":"modules/datasource/devbox/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>devbox</code> Default versioning <code>devbox</code> Custom registry support Yes Release timestamp support Yes Source URL support No"},{"location":"modules/datasource/docker/","title":"Docker Datasource","text":""},{"location":"modules/datasource/docker/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>docker</code> Default versioning <code>docker</code> Custom registry support Yes Release timestamp support Yes Only supported on Docker Hub: The release timestamp is determined from the <code>tag_last_pushed</code> field in the results. NOTE: Currently, digests will receive the same release timestamp as the <code>tag_last_pushed</code>, which means that digests may appear newer than they are - see https://github.com/renovatebot/renovate/issues/38659 Source URL support Yes The source URL is determined from the <code>org.opencontainers.image.source</code> and <code>org.label-schema.vcs-url</code> labels present in the metadata of the latest stable image found on the Docker registry."},{"location":"modules/datasource/docker/#description","title":"Description","text":"<p>This datasource identifies an image's source repository according to the pre-defined annotation keys of the OCI Image Format Specification.</p> <p>This datasource looks for the metadata of the latest stable image found on the Docker registry and uses the value of the label <code>org.opencontainers.image.source</code> and <code>org.label-schema.vcs-url</code> as the <code>sourceUrl</code>. Additionally, it uses the value of the label <code>org.opencontainers.image.revision</code> as the <code>gitRef</code>.</p> <p>The Label Schema is superseded by OCI annotations, use the <code>org.opencontainers.image.source</code> label if possible.</p> <p>If you maintain a Docker image and want Renovate to find your changelogs, add a <code>org.opencontainers.image.source</code> field to your Dockerfile. The link must point to your GitHub or GitLab repository. Here's an example from our <code>renovate/renovate</code> Dockerfile:</p> <pre><code>LABEL org.opencontainers.image.source=\"https://github.com/renovatebot/renovate\"\n</code></pre> <p>If you use Harbor as a proxy cache for Docker Hub, then you must use Harbor version <code>2.5.0</code> or higher.</p>"},{"location":"modules/datasource/docker/#default-configuration","title":"Default configuration","text":"<pre><code>{\n  \"commitMessageTopic\": \"{{{depName}}} Docker tag\",\n  \"commitMessageExtra\": \"to {{#if isPinDigest}}{{{newDigestShort}}}{{else}}{{#if isMajor}}{{{prettyNewMajor}}}{{else}}{{{prettyNewVersion}}}{{/if}}{{/if}}\",\n  \"digest\": {\n    \"branchTopic\": \"{{{depNameSanitized}}}-{{{currentValue}}}\",\n    \"commitMessageExtra\": \"to {{newDigestShort}}\",\n    \"commitMessageTopic\": \"{{{depName}}}{{#if currentValue}}:{{{currentValue}}}{{/if}} Docker digest\",\n    \"group\": {\n      \"commitMessageTopic\": \"{{{groupName}}}\",\n      \"commitMessageExtra\": \"\"\n    }\n  },\n  \"pin\": {\n    \"commitMessageExtra\": \"\",\n    \"groupName\": \"Docker digests\",\n    \"group\": {\n      \"commitMessageTopic\": \"{{{groupName}}}\",\n      \"branchTopic\": \"digests-pin\"\n    }\n  }\n}\n</code></pre>"},{"location":"modules/datasource/dotnet-version/","title":"Dotnet Version Datasource","text":""},{"location":"modules/datasource/dotnet-version/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>dotnet-version</code> Default versioning No default versioning Custom registry support No Release timestamp support Yes The release timestamp is determined from the <code>release-date</code> field in the results. Source URL support Yes We use the URL https://github.com/dotnet/sdk for the <code>dotnet-sdk</code> package and, the https://github.com/dotnet/runtime URL for the <code>dotnet-runtime</code> package."},{"location":"modules/datasource/dotnet-version/#description","title":"Description","text":"<p>This datasource returns releases of the .NET Runtime and SDK. It only accepts dependencies with the name <code>dotnet-sdk</code> or <code>dotnet-runtime</code>.</p>"},{"location":"modules/datasource/elm-package/","title":"Elm Package Datasource","text":""},{"location":"modules/datasource/elm-package/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>elm-package</code> Default versioning <code>elm</code> Custom registry support No Release timestamp support Yes The release timestamp is determined from the Unix timestamp in the results. Source URL support Yes The source URL is determined from the package name using the GitHub pattern."},{"location":"modules/datasource/elm-package/#description","title":"Description","text":"<p>This datasource uses the Elm Package Registry API to fetch versions for published Elm packages.</p> <p>Elm packages use strict semantic versioning. The datasource fetches release timestamps from the registry's per-package releases endpoint.</p> <p>By design, all Elm packages must be published from GitHub repositories. The package name is the GitHub repository path (e.g., <code>elm/core</code> is published from <code>github.com/elm/core</code>). This is enforced by the <code>elm publish</code> command, which requires packages to be tagged and pushed to GitHub before publishing. Therefore, the source URL is reliably derived from the package name.</p>"},{"location":"modules/datasource/endoflife-date/","title":"Endoflife Date Datasource","text":""},{"location":"modules/datasource/endoflife-date/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>endoflife-date</code> Default versioning <code>loose</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>releaseDate</code> field in the results. Source URL support No"},{"location":"modules/datasource/endoflife-date/#description","title":"Description","text":"<p>endoflife.date provides version and end-of-life information for different packages.</p> <p>To find the right \"package\" name for the software you're trying to update, use the endoflife.date \"All packages\" API endpoint. You can find it in the endoflife.date API documentation.</p> <p>By default, this datasource uses <code>loose</code> versioning. If possible, we recommend you use a stricter versioning like <code>semver</code> instead of <code>loose</code>.</p> <p>Usage Example</p> <p>Say you're using Amazon EKS and want Renovate to update the versions in a Terraform <code>.tfvars</code> file. For example, you have this <code>.tfvars</code> file:</p> <pre><code># renovate: datasource=endoflife-date depName=amazon-eks versioning=loose\nkubernetes_version = \"1.26\"\n</code></pre> <p>Given the above <code>.tfvars</code> file, you put this in your <code>renovate.json</code>:</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"description\": \"Update Kubernetes version for Amazon EKS in tfvars files\",\n      \"managerFilePatterns\": [\"/.+\\\\.tfvars$/\"],\n      \"matchStrings\": [\n        \"#\\\\s*renovate:\\\\s*datasource=(?&lt;datasource&gt;.*?) depName=(?&lt;depName&gt;.*?)( versioning=(?&lt;versioning&gt;.*?))?\\\\s.*?_version\\\\s*=\\\\s*\\\"(?&lt;currentValue&gt;.*)\\\"\"\n      ],\n      \"versioningTemplate\": \"{{#if versioning}}{{{versioning}}}{{/if}}\"\n    }\n  ],\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"endoflife-date\"],\n      \"matchPackageNames\": [\"amazon-eks\"],\n      \"extractVersion\": \"^(?&lt;version&gt;.*)-eks.+$\"\n    }\n  ]\n}\n</code></pre> <p>With this configuration, Renovate will parse all <code>*.tfvars</code> files in the repository. It will then update variables that end with <code>_version</code> and have the <code># renovate: datasource=endoflife-date depName=dependency-name versioning=versioning</code> comment set in the line above when any new versions are available.</p> <p>For <code>amazon-eks</code>, the defined <code>packageRule</code> above will also strip the <code>-eks-${eks-release-version}</code> suffix to only set the Kubernetes minor version.</p>"},{"location":"modules/datasource/flutter-version/","title":"Flutter Version Datasource","text":""},{"location":"modules/datasource/flutter-version/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>flutter-version</code> Default versioning <code>semver</code> Custom registry support No Release timestamp support Yes The release timestamp is determined from the <code>release_date</code> field in the results. Source URL support Yes We use the URL: https://github.com/flutter/flutter."},{"location":"modules/datasource/forgejo-releases/","title":"Forgejo Releases Datasource","text":""},{"location":"modules/datasource/forgejo-releases/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>forgejo-releases</code> Default versioning No default versioning Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>published_at</code> field in the results. Source URL support Yes The source URL is determined by using the <code>packageName</code> and <code>registryUrl</code>."},{"location":"modules/datasource/forgejo-releases/#description","title":"Description","text":"<p>This datasource allows to lookup releases from a Forgejo repositories.</p> <p>By default it will use <code>https://code.forgejo.org</code> to lookup releases.</p>"},{"location":"modules/datasource/forgejo-tags/","title":"Forgejo Tags Datasource","text":""},{"location":"modules/datasource/forgejo-tags/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>forgejo-tags</code> Default versioning No default versioning Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>created</code> field in the results. Source URL support Yes The source URL is determined by using the <code>packageName</code> and <code>registryUrl</code>."},{"location":"modules/datasource/forgejo-tags/#description","title":"Description","text":"<p>This datasource allows to lookup git tags from a Forgejo repositories.</p> <p>By default it will use <code>https://code.forgejo.org</code> to lookup tags.</p>"},{"location":"modules/datasource/galaxy/","title":"Galaxy Datasource","text":""},{"location":"modules/datasource/galaxy/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>galaxy</code> Default versioning <code>pep440</code> Custom registry support No Release timestamp support Yes The release timestamp is determined from the <code>created</code> field in the results. Source URL support Yes The source URL is determined from the <code>github_user</code> and <code>github_repo</code> fields in the results."},{"location":"modules/datasource/galaxy-collection/","title":"Galaxy Collection Datasource","text":""},{"location":"modules/datasource/galaxy-collection/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>galaxy-collection</code> Default versioning <code>pep440</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>created_at</code> field in the results. Source URL support Yes The <code>sourceUrl</code> is determined from the <code>repository</code> field in the results."},{"location":"modules/datasource/galaxy-collection/#description","title":"Description","text":"<p>By default, the <code>galaxy-collection</code> datasource checks for dependencies on <code>https://galaxy.ansible.com</code>. But you can override the default if you want.</p> <p>Set your own registries by:</p> <ul> <li>setting a <code>source</code> in your <code>requirements.yaml</code> file, or</li> <li>writing a <code>packageRule</code> to set a new <code>registryURLs</code></li> </ul> <p>Then you can use Renovate with a private automation hub or an ansible repository on artifactory.</p> Example config for requirements.yaml<pre><code>---\ncollections:\n  - name: community.general\n    version: 3.0.0\n    source: https://hub.mydomain.com/api/galaxy/content/community/\n</code></pre> Example config for renovate.json<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"galaxy-collection\"],\n      \"registryUrls\": [\n        \"https://hub.mydomain.com/api/galaxy/content/community/\",\n        \"https://hub.mydomain.com/api/galaxy/content/certified/\",\n        \"https://hub.mydomain.com/api/galaxy/content/myprivaterepo/\",\n        \"https://mydomain.com/artifactory/api/ansible/myrepository/\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/datasource/git-refs/","title":"Git Refs Datasource","text":""},{"location":"modules/datasource/git-refs/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>git-refs</code> Default versioning No default versioning Custom registry support No Release timestamp support No Source URL support Yes The source URL is determined by using the <code>packageName</code> and <code>registryUrl</code>."},{"location":"modules/datasource/git-refs/#description","title":"Description","text":"<p>You can use this datasource plus regex managers to update git-based dependencies that are not natively supported by Renovate.</p> <p>The <code>git-refs</code> datasource returns a reference from a Git repository.</p> <p>The <code>packageName</code> must be a fully qualified domain name.</p> <p>To fetch the latest digest of a reference instead of the named reference: put the named reference in <code>currentValue</code> and match on the <code>currentDigest</code>.</p> <p>Usage example</p> <p>Say you want to maintain the <code>HEAD</code> digest of the <code>master</code> branch of a repository. You would configure a custom manager in your Renovate config file for files named <code>versions.ini</code>:</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/^versions.ini$/\"],\n      \"matchStrings\": [\"GOOGLE_API_VERSION=(?&lt;currentDigest&gt;.*?)\\\\n\"],\n      \"currentValueTemplate\": \"master\",\n      \"depNameTemplate\": \"googleapis\",\n      \"packageNameTemplate\": \"https://github.com/googleapis/googleapis\",\n      \"datasourceTemplate\": \"git-refs\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/datasource/git-tags/","title":"Git Tags Datasource","text":""},{"location":"modules/datasource/git-tags/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>git-tags</code> Default versioning No default versioning Custom registry support No Release timestamp support No Source URL support Yes The source URL is determined by using the <code>packageName</code> and <code>registryUrl</code>."},{"location":"modules/datasource/gitea-releases/","title":"Gitea Releases Datasource","text":""},{"location":"modules/datasource/gitea-releases/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>gitea-releases</code> Default versioning No default versioning Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>published_at</code> field in the results. Source URL support Yes The source URL is determined by using the <code>packageName</code> and <code>registryUrl</code>."},{"location":"modules/datasource/gitea-releases/#description","title":"Description","text":"<p>This datasource allows to lookup releases from a Gitea repositories.</p> <p>Note</p> <p>Use <code>forgejo-releases</code> as the datasource if you are using Forgejo. Forgejo support will be removed from <code>gitea-releases</code> datasource in a future release.</p> <p>By default it will use <code>https://gitea.com</code> to lookup releases.</p>"},{"location":"modules/datasource/gitea-tags/","title":"Gitea Tags Datasource","text":""},{"location":"modules/datasource/gitea-tags/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>gitea-tags</code> Default versioning No default versioning Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>created</code> field in the results. Source URL support Yes The source URL is determined by using the <code>packageName</code> and <code>registryUrl</code>."},{"location":"modules/datasource/gitea-tags/#description","title":"Description","text":"<p>This datasource allows to lookup git tags from a Gitea repositories.</p> <p>Note</p> <p>Use <code>forgejo-tags</code> as the datasource if you are using Forgejo. Forgejo support will be removed from <code>gitea-tags</code> datasource in a future release.</p> <p>By default it will use <code>https://gitea.com</code> to lookup tags.</p>"},{"location":"modules/datasource/github-digest/","title":"Github Digest Datasource","text":""},{"location":"modules/datasource/github-digest/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>github-digest</code> Default versioning <code>exact</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the commit date. Source URL support Yes The source URL is determined by using the <code>packageName</code> and <code>registryUrl</code>."},{"location":"modules/datasource/github-digest/#description","title":"Description","text":"<p>This datasource fetches both tags and branches from GitHub repositories, prioritizing tags over branches when names conflict.</p> <p>It's designed for GitHub Actions that reference non-semver refs like branch names (<code>main</code>, <code>master</code>) or commit SHAs. It uses exact versioning, meaning no version ordering is performed - only digest pinning updates are supported.</p>"},{"location":"modules/datasource/github-release-attachments/","title":"Github Release Attachments Datasource","text":""},{"location":"modules/datasource/github-release-attachments/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>github-release-attachments</code> Default versioning No default versioning Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>releaseTimestamp</code> field from the response. Source URL support Yes The source URL is determined by using the <code>packageName</code> and <code>registryUrl</code>."},{"location":"modules/datasource/github-releases/","title":"Github Releases Datasource","text":""},{"location":"modules/datasource/github-releases/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>github-releases</code> Default versioning No default versioning Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>releaseTimestamp</code> field from the response. Source URL support Yes The source URL is determined by using the <code>packageName</code> and <code>registryUrl</code>."},{"location":"modules/datasource/github-releases/#description","title":"Description","text":"<p>This datasource allows lookup releases from GitHub.com and GitHub Enterprise repositories.</p> <ul> <li><code>registryUrl</code>: The URL of the GitHub registry to use. Defaults to <code>https://github.com/</code>.</li> <li><code>packageName</code>: The name of the repository to lookup. in the format <code>owner/repo</code>. e.g. <code>renovatebot/renovate</code>.</li> </ul>"},{"location":"modules/datasource/github-runners/","title":"Github Runners Datasource","text":""},{"location":"modules/datasource/github-runners/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>github-runners</code> Default versioning <code>docker</code> Custom registry support Yes Release timestamp support Yes The release timestamp is manually specified in Renovate's code, based on the date GitHub announced the runner image as generally available on their changelog Source URL support Yes We use the URL: https://github.com/actions/runner-images."},{"location":"modules/datasource/github-runners/#description","title":"Description","text":"<p>This datasource returns a list of all runners that are hosted by GitHub. The datasource is based on GitHub's <code>runner-images</code> and <code>partner-runner-images</code> repositories.</p> <p>Examples: <code>windows-2025</code> / <code>ubuntu-24.04</code> / <code>macos-15</code>.</p>"},{"location":"modules/datasource/github-runners/#maintenance","title":"Maintenance","text":""},{"location":"modules/datasource/github-runners/#adding-a-new-version","title":"Adding a new version","text":"<p>New runner versions must be added to the datasource with a pull request.</p>"},{"location":"modules/datasource/github-runners/#unstable-runners","title":"Unstable runners","text":"<p>Unstable runners are tagged as <code>[beta]</code> in the <code>runner-images</code> repository's readme and should get the <code>isStable:false</code> property in our code.</p>"},{"location":"modules/datasource/github-runners/#promoting-a-version-to-stable","title":"Promoting a version to stable","text":"<p>Once a runner version becomes stable, the <code>[beta]</code> tag is removed and the suffix <code>latest</code> is added to its YAML label. We then remove the <code>isStable:false</code> property in our code.</p>"},{"location":"modules/datasource/github-runners/#deprecating-a-version","title":"Deprecating a version","text":"<p>Deprecated runners are tagged as <code>[deprecated]</code> in the <code>runner-images</code> repository's readme and we should give it the <code>isDeprecated:true</code> property. If a runner is very old, the readme may drop it completely, but we should still give it the <code>isDeprecated:true</code> property.</p>"},{"location":"modules/datasource/github-tags/","title":"Github Tags Datasource","text":""},{"location":"modules/datasource/github-tags/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>github-tags</code> Default versioning No default versioning Custom registry support Yes Release timestamp support Yes The get release timestamp is determined from the <code>releaseTimestamp</code> field in the results. Source URL support Yes The source URL is determined by using the <code>packageName</code> and <code>registryUrl</code>."},{"location":"modules/datasource/github-tags/#description","title":"Description","text":"<p>This datasource allows lookup Git tags from GitHub.com and GitHub Enterprise repositories.</p> <ul> <li><code>registryUrl</code>: The URL of the GitHub registry to use. Defaults to <code>https://github.com/</code>.</li> <li><code>packageName</code>: The name of the repository to lookup. in the format <code>owner/repo</code>. e.g. <code>renovatebot/renovate</code>.</li> </ul>"},{"location":"modules/datasource/gitlab-packages/","title":"Gitlab Packages Datasource","text":""},{"location":"modules/datasource/gitlab-packages/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>gitlab-packages</code> Default versioning No default versioning Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>created_at</code> field in the results. Source URL support No"},{"location":"modules/datasource/gitlab-packages/#description","title":"Description","text":"<p>GitLab Packages API supports looking up package versions from all types of packages registry supported by GitLab and can be used in combination with regex managers to keep dependencies up-to-date which are not specifically supported by Renovate.</p> <p>To specify which specific repository should be queried when looking up a package, the <code>packageName</code> should be formed with the project path first, then a <code>:</code> and finally the package name.</p> <p>As an example, <code>gitlab-org/ci-cd/package-stage/feature-testing/new-packages-list:@gitlab-org/nk-js</code> would look for the<code>@gitlab-org/nk-js</code> packages in the generic packages repository of the <code>gitlab-org/ci-cd/package-stage/feature-testing/new-packages-list</code> project.</p> <p>To specify where to find a self-hosted GitLab instance, specify <code>registryUrl</code>. An example would be <code>https://gitlab.company.com</code>.</p> <p>If you are using a self-hosted GitLab instance, please note the following requirements:</p> <ul> <li>If you are on the <code>Free</code> edition, this datasource requires at least GitLab 13.3</li> <li>If you are on the <code>Premium</code> or the <code>Ultimate</code> edition, this datasource requires at least GitLab 11.8, but GitLab 12.9 or more is recommended if you have a lot of packages with different names in the same project</li> </ul> <p>Usage Example</p> <p>A real-world example for this specific datasource would be maintaining package versions in a config file. This can be achieved by configuring a custom manager in <code>renovate.json</code> for files named <code>versions.ini</code>:</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/^versions.ini$/\"],\n      \"matchStrings\": [\n        \"# renovate: datasource=(?&lt;datasource&gt;.*?) depName=(?&lt;depName&gt;.*?)( versioning=(?&lt;versioning&gt;.*?))?( registryUrl=(?&lt;registryUrl&gt;.*?))?\\\\s.*?_VERSION=(?&lt;currentValue&gt;.*)\\\\s\"\n      ],\n      \"versioningTemplate\": \"{{#if versioning}}{{{versioning}}}{{else}}semver{{/if}}\"\n    }\n  ]\n}\n</code></pre> <p>Now you may use comments in your <code>versions.ini</code> files to automatically update dependencies, which could look like this:</p> <pre><code># renovate: datasource=gitlab-packages depName=gitlab-org/ci-cd/package-stage/feature-testing/new-packages-list:@gitlab-org/nk-js versioning=semver registryUrl=https://gitlab.com\nNKJS_VERSION=3.4.0\n</code></pre> <p>By default, <code>gitlab-packages</code> uses the <code>docker</code> versioning scheme.</p>"},{"location":"modules/datasource/gitlab-releases/","title":"Gitlab Releases Datasource","text":""},{"location":"modules/datasource/gitlab-releases/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>gitlab-releases</code> Default versioning No default versioning Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>released_at</code> field in the results. Source URL support Yes The source URL is determined by using the <code>packageName</code> and <code>registryUrl</code>."},{"location":"modules/datasource/gitlab-releases/#description","title":"Description","text":"<p>GitLab Releases API supports looking up releases supported by GitLab and can be used in combination with regex managers to keep dependencies up-to-date which are not specifically supported by Renovate.</p> <p>To specify which specific repository should be queried when looking up a package, the <code>packageName</code> should be set to the project path.</p> <p>As an example, <code>gitlab-org/ci-cd/package-stage/feature-testing/new-packages-list</code> would look for releases in the <code>gitlab-org/ci-cd/package-stage/feature-testing/new-packages-list</code> project.</p> <p>To specify where to find a self-hosted GitLab instance, specify <code>registryUrl</code>. An example would be <code>https://gitlab.company.com</code>.</p> <p>Please note the following requirements:</p> <ul> <li>This datasource requires at least GitLab 11.7</li> </ul> <p>Usage Example</p> <p>A real-world example for this specific datasource would be maintaining package versions in a config file. This can be achieved by configuring a custom manager in <code>renovate.json</code> for files named <code>versions.ini</code>:</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/^versions.ini$/\"],\n      \"matchStrings\": [\n        \"# renovate: datasource=(?&lt;datasource&gt;.*?) depName=(?&lt;depName&gt;.*?)( versioning=(?&lt;versioning&gt;.*?))?( registryUrl=(?&lt;registryUrl&gt;.*?))?\\\\s.*?_VERSION=(?&lt;currentValue&gt;.*)\\\\s\"\n      ],\n      \"versioningTemplate\": \"{{#if versioning}}{{{versioning}}}{{else}}semver{{/if}}\"\n    }\n  ]\n}\n</code></pre> <p>Now you may use comments in your <code>versions.ini</code> files to automatically update dependencies, which could look like this:</p> <pre><code># renovate: datasource=gitlab-releases depName=gitlab-org/ci-cd/package-stage/feature-testing/new-packages-list versioning=semver registryUrl=https://gitlab.com\nNKJS_VERSION=3.4.0\n</code></pre> <p>By default, <code>gitlab-releases</code> uses the <code>semver-coerced</code> versioning scheme.</p>"},{"location":"modules/datasource/gitlab-tags/","title":"Gitlab Tags Datasource","text":""},{"location":"modules/datasource/gitlab-tags/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>gitlab-tags</code> Default versioning No default versioning Custom registry support Yes Release timestamp support Yes To get release timestamp we use the <code>created_at</code> field from the response. Source URL support Yes The source URL is determined by using the <code>packageName</code> and <code>registryUrl</code>."},{"location":"modules/datasource/gitlab-tags/#description","title":"Description","text":"<p>GitLab Tags API supports looking up Git tags and can be used in combination with regex managers to keep dependencies up-to-date which are not specifically supported by Renovate.</p> <p>To specify which specific repository should be queried when looking up a package, the <code>packageName</code> should be set to the project path.</p> <p>As an example, <code>gitlab-org/ci-cd/package-stage/feature-testing/new-packages-list</code> would look for releases in the <code>gitlab-org/ci-cd/package-stage/feature-testing/new-packages-list</code> project.</p> <p>To specify where to find a self-hosted GitLab instance, specify <code>registryUrl</code>. An example would be <code>https://gitlab.company.com</code>.</p> <p>Usage Example</p> <p>A real-world example for this specific datasource would be maintaining package versions in a config file. This can be achieved by configuring a custom manager in <code>renovate.json</code> for files named <code>versions.ini</code>:</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/^versions.ini$/\"],\n      \"matchStrings\": [\n        \"# renovate: datasource=(?&lt;datasource&gt;.*?) depName=(?&lt;depName&gt;.*?)( versioning=(?&lt;versioning&gt;.*?))?( registryUrl=(?&lt;registryUrl&gt;.*?))?\\\\s.*?_VERSION=(?&lt;currentValue&gt;.*)\\\\s\"\n      ],\n      \"versioningTemplate\": \"{{#if versioning}}{{{versioning}}}{{else}}semver{{/if}}\"\n    }\n  ]\n}\n</code></pre> <p>Now you may use comments in your <code>versions.ini</code> files to automatically update dependencies, which could look like this:</p> <pre><code># renovate: datasource=gitlab-tags depName=gitlab-org/ci-cd/package-stage/feature-testing/new-packages-list versioning=semver registryUrl=https://gitlab.com\nNKJS_VERSION=3.4.0\n</code></pre> <p>By default, <code>gitlab-tags</code> uses the <code>semver-coerced</code> versioning scheme.</p>"},{"location":"modules/datasource/glasskube-packages/","title":"Glasskube Packages Datasource","text":""},{"location":"modules/datasource/glasskube-packages/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>glasskube-packages</code> Default versioning <code>glasskube</code> Custom registry support Yes Release timestamp support No Source URL support No"},{"location":"modules/datasource/go/","title":"Go Datasource","text":""},{"location":"modules/datasource/go/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>go</code> Default versioning <code>semver</code> Custom registry support No Release timestamp support Yes If the release timestamp is not returned from the respective datasoure used to fetch the releases, then Renovate uses the <code>Time</code> field in the results instead. For modules hosted on GitHub, a later GitHub Release publication time or git tag creation time takes precedence over both. Source URL support Yes The source URL is determined from the <code>packageName</code> and <code>registryUrl</code>."},{"location":"modules/datasource/go/#description","title":"Description","text":"<p>The best way to lookup Go Modules is using Go proxies.</p>"},{"location":"modules/datasource/go/#goproxy-settings","title":"GOPROXY settings","text":"<p>This datasource will use default <code>GOPROXY</code> settings of <code>https://proxy.golang.org,direct</code> if the environment variable is unset.</p> <p>To override this default and use a different proxy in self-hosted environments, configure <code>GOPROXY</code> to an alternative setting in env.</p> <p>To override this default and stop using any proxy at all, set <code>GOPROXY</code> to the value <code>direct</code>.</p>"},{"location":"modules/datasource/go/#pseudo-versions","title":"Pseudo versions","text":"<p>Go proxies return an empty list of versions when queried (<code>@v/list</code>) for a package which uses pseudo versions, but return the latest pseudo-version when queried for <code>@latest</code>.</p> <p>If the <code>@latest</code> endpoint returns a pseudo-version, and the release list is empty, then this datasource will return the latest pseudo-version as the only release/version for the package.</p>"},{"location":"modules/datasource/go/#checking-for-new-major-releases","title":"Checking for new major releases","text":"<p>When a Go proxy is queried for <code>@v/list</code> it returns only versions for v0 or v1 of a package. Therefore Renovate will also query <code>@v2/list</code> just in case there also exists a v2 of the package. Similarly, if the dependency is already on a higher version such as <code>v5</code>, Renovate will check in case higher major versions exist. You do not need to be worried about any 403/404 responses which result from such checks - they are the only way for Renovate to know if newer major releases exist.</p>"},{"location":"modules/datasource/go/#release-timestamps","title":"Release timestamps","text":"<p>A Go proxy reports the commit time of the tagged commit as a version's <code>Time</code>, which can be different to when the release first existed. This inconsistency can lead to <code>minimumReleaseAge</code> being applied incorrectly to the Go module's updates.</p> <p>Note</p> <p>For modules hosted on GitHub, Renovate will look up the repository's GitHub Releases and git tags, and use whichever of the Release's publication time or the tag's own creation time is later than the timestamp reported by the Go proxy. A Release's publication time takes precedence over a tag's creation time if both exist for the same version.  This lookup needs a GitHub token to be configured, and is skipped if the lookup fails, leaving the timestamp reported by the Go proxy in place.</p> <p>For example, this happens when:</p> <ul> <li>an infrequently updated repository prepares a GitHub Release by creating a draft release</li> <li>some time passes, and the maintainers publish the Release</li> <li>no new commits are pushed to the release branch (i.e. <code>main</code>) in that time</li> </ul> <p>Similarly, a lightweight git tag has no creation time of its own and always matches the commit it points to, but an annotated git tag carries its own, separate creation time that can be later than the commit it points to, even without a GitHub Release ever being published.</p>"},{"location":"modules/datasource/go/#fallback-to-direct-lookups","title":"Fallback to direct lookups","text":"<p>If no result is found from Go proxy lookups then Renovate will fall back to direct lookups. A direct lookup reports the datasource which served it, such as <code>github-tags</code> or <code>git-tags</code>, as <code>effectiveDatasource</code>, which templates and <code>matchJsonata</code> can read.</p>"},{"location":"modules/datasource/go/#default-configuration","title":"Default configuration","text":"<pre><code>{\n  \"commitMessageTopic\": \"module {{depName}}\"\n}\n</code></pre>"},{"location":"modules/datasource/golang-version/","title":"Golang Version Datasource","text":""},{"location":"modules/datasource/golang-version/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>golang-version</code> Default versioning <code>semver</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>Date</code> field in the results. Source URL support Yes We use the URL: https://github.com/golang/go."},{"location":"modules/datasource/gradle-version/","title":"Gradle Version Datasource","text":""},{"location":"modules/datasource/gradle-version/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>gradle-version</code> Default versioning <code>gradle</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>buildTime</code> field in the results. Source URL support Yes We use the URL: https://github.com/gradle/gradle."},{"location":"modules/datasource/hackage/","title":"Hackage Datasource","text":""},{"location":"modules/datasource/hackage/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>hackage</code> Default versioning <code>pvp</code> Custom registry support No Release timestamp support No Source URL support No"},{"location":"modules/datasource/hackage/#description","title":"Description","text":"<p>This datasource uses the Hackage JSON API to fetch versions for published Haskell packages.</p> <p>While not all versions use PVP, the majority does. This manager assumes a default versioning set to PVP. Versioning can be overwritten using <code>packageRules</code>, e.g. with <code>matchDatasources</code>.</p>"},{"location":"modules/datasource/helm/","title":"Helm Datasource","text":""},{"location":"modules/datasource/helm/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>helm</code> Default versioning <code>helm</code> Custom registry support Yes Release timestamp support Yes The release timstamp is determined from the <code>created</code> field in the results. Source URL support Yes The source URL is determined from the <code>home</code> field or the <code>sources</code> field in the results."},{"location":"modules/datasource/helm/#description","title":"Description","text":"<p>This datasource reads <code>index.yaml</code> from a Helm chart repository.</p>"},{"location":"modules/datasource/helm/#amazon-s3-repositories","title":"Amazon S3 repositories","text":"<p>In addition to HTTP(S) repositories, an <code>s3://</code> registry URL is supported, so charts hosted in an Amazon S3 bucket (or an S3-compatible backend) can be looked up:</p> <pre><code>dependencies:\n  - name: my-chart\n    version: 1.0.0\n    repository: s3://my-bucket/charts\n</code></pre> <p>Renovate then reads <code>s3://my-bucket/charts/index.yaml</code> with the AWS SDK, which signs the request with AWS Signature Version 4. See Calling AWS Services from Renovate for how to configure your credentials.</p> <p>For S3-compatible backends, set the self-hosted <code>s3Endpoint</code> and <code>s3PathStyle</code> configuration options.</p> <p>You can also provide credentials specifically for a bucket with a <code>hostRules</code> entry. Set <code>hostType</code> to <code>helm</code>, <code>matchHost</code> to the bucket name, <code>username</code> to the access key ID, <code>password</code> to the secret access key, and optionally <code>token</code> to the session token:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"hostType\": \"helm\",\n      \"matchHost\": \"my-bucket\",\n      \"username\": \"AKIAIOSFODNN7EXAMPLE\",\n      \"password\": \"wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY\"\n    }\n  ]\n}\n</code></pre> <p>If no matching host rule provides both <code>username</code> and <code>password</code>, the default AWS credential provider chain is used.</p>"},{"location":"modules/datasource/helm/#default-configuration","title":"Default configuration","text":"<pre><code>{\n  \"commitMessageTopic\": \"Helm release {{depName}}\"\n}\n</code></pre>"},{"location":"modules/datasource/hermit/","title":"Hermit Datasource","text":""},{"location":"modules/datasource/hermit/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>hermit</code> Default versioning <code>hermit</code> Custom registry support Yes Release timestamp support No Source URL support Yes The source URL is determined from the <code>Repository</code> field in the results."},{"location":"modules/datasource/hermit/#description","title":"Description","text":"<p>By default Hermit looks up packages from the open source project https://github.com/cashapp/hermit-packages.</p> <p>Hermit supports private packages. To get Renovate to find your private packages, follow these steps:</p> <ol> <li>perform <code>hermit search --json</code> with your private Hermit distribution and save the file to <code>index.json</code></li> <li>make a GitHub release in your private packages repository named <code>index</code> with the asset <code>index.json</code> generated in step 1.</li> <li>setup a CI pipeline to repeat step 1 &amp; 2 on new commits to the private packages repository.</li> <li> <p>Add a package rule for the Hermit manager, so that Renovate knows where to find your private packages:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchManagers\": [\"hermit\"],\n      \"defaultRegistryUrls\": [\n        \"https://github.com/your/private-hermit-packages\"\n      ]\n    }\n  ]\n}\n</code></pre> </li> </ol>"},{"location":"modules/datasource/hex/","title":"Hex Datasource","text":""},{"location":"modules/datasource/hex/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>hex</code> Default versioning <code>hex</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined the <code>inserted_at</code> field in the results. Source URL support Yes The source URL is determined from the <code>Github</code> field in the results."},{"location":"modules/datasource/hexpm-bob/","title":"Hexpm Bob Datasource","text":""},{"location":"modules/datasource/hexpm-bob/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>hexpm-bob</code> Default versioning <code>semver</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>buildDate</code> field in the results. Source URL support Yes We use the URL https://github.com/elixir-lang/elixir.git for the <code>elixir</code> package and the https://github.com/erlang/otp.git URL for the <code>erlang</code> package."},{"location":"modules/datasource/hexpm-bob/#description","title":"Description","text":"<p>This datasource returns releases from Bob the builder.</p> <p>Supported values for <code>packageName</code>:</p> <ul> <li><code>elixir</code>, Elixir homepage</li> <li><code>otp/[OS/Version]</code>, Erlang/OTP homepage</li> </ul> <p>Read the Bob the builder docs, Erlang builds for a list of supported operating systems and versions.</p>"},{"location":"modules/datasource/java-version/","title":"Java Version Datasource","text":""},{"location":"modules/datasource/java-version/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>java-version</code> Default versioning No default versioning Custom registry support No Release timestamp support No Source URL support No"},{"location":"modules/datasource/java-version/#description","title":"Description","text":"<p>This datasource returns releases from the Adoptium API.</p> <p>It uses <code>image_type=&lt;jre|jdk&gt;&amp;project=jdk&amp;release_type=ga&amp;sort_method=DATE&amp;sort_order=DESC</code> as filter parameters. This means that the datasource finds:</p> <ul> <li>JRE or JDK images</li> <li>with a JDK project</li> <li>which have the General Availability status   And finally, the results are sorted in descending order.</li> </ul> <p>When Renovate contacts the Adoptium API, it fetches 50 pages. Each page has 50 items. So 2500 items are fetched from the API in total.</p> <p>If you want to get releases which come with the JDK, set the <code>packageName</code> to <code>java-jdk</code> or <code>java</code>.</p> <p>If you want to get releases which come with the JRE, set the <code>packageName</code> to <code>java-jre</code>. LTS releases of Java will have a version that comes with the JRE. Non-LTS releases may not always include the JRE.</p> <p>Additionally you can filter by <code>os</code> and <code>architecture</code>. For example, to get only Linux x64 jre releases, you can pass <code>java-jre?os=linux&amp;architecture=x64</code> as <code>packageName</code>. See https://api.adoptium.net/q/swagger-ui/#/Release%20Info/getReleaseVersions for allowed values.</p> <p>Use <code>java?system=true</code> to let renovate detect the current <code>os</code> and <code>architecture</code>.</p>"},{"location":"modules/datasource/jenkins-plugins/","title":"Jenkins Plugins Datasource","text":""},{"location":"modules/datasource/jenkins-plugins/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>jenkins-plugins</code> Default versioning No default versioning Custom registry support Yes Release timestamp support Yes The releaseTimestamp is determined from the <code>releaseTimestamp</code> or <code>buildDate</code> field in the results. Source URL support Yes The source URL is determined from the <code>scm</code> field in the results."},{"location":"modules/datasource/jenkins-plugins/#description","title":"Description","text":"<p>The <code>jenkins-plugins</code> datasource supports lookups from the Jenkins Update Center or custom registries.</p> <p>When you define a custom registry with the <code>registryUrl</code> config option, you must follow Jenkins' update site layout.</p> <p>The <code>update-center.actual.json</code> and <code>plugin-versions.json</code> files must be in the <code>current</code> path, so Renovate can find them. For example, the files could be put in the <code>https://custom.registry.renovatebot.com/current</code> directory.</p>"},{"location":"modules/datasource/jsr/","title":"Jsr Datasource","text":""},{"location":"modules/datasource/jsr/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>jsr</code> Default versioning <code>semver</code> Custom registry support No Release timestamp support Yes The release timestamp is determined from the <code>createdAt</code> field in the results. For packages without explicit timestamps, defaults to 2025-09-18. Source URL support No"},{"location":"modules/datasource/julia-general-metadata/","title":"Julia General Metadata Datasource","text":""},{"location":"modules/datasource/julia-general-metadata/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>julia-general-metadata</code> Default versioning <code>julia</code> Custom registry support No Release timestamp support Yes The release timestamp is determined from the <code>registered</code> field in the results. Source URL support No"},{"location":"modules/datasource/julia-general-metadata/#description","title":"Description","text":"<p>This datasource returns release information for Julia packages registered in the public General registry, via the <code>GeneralMetadata.jl</code> JSON API at <code>https://juliaregistries.github.io/GeneralMetadata.jl/api/{Package}/versions.json</code>.</p> <p>Because the <code>GeneralMetadata.jl</code> API only offers information on packages registered in the General registry, this datasource does not support custom registry URLs. Private or alternative Julia registries (e.g. those managed via <code>LocalRegistry.jl</code>) need a different datasource.</p> <p>The package name is the case-sensitive Julia package name, e.g. <code>Example</code>.</p>"},{"location":"modules/datasource/kubernetes-api/","title":"Kubernetes Api Datasource","text":""},{"location":"modules/datasource/kubernetes-api/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>kubernetes-api</code> Default versioning <code>kubernetes-api</code> Custom registry support Yes Release timestamp support No Source URL support No"},{"location":"modules/datasource/kubernetes-api/#description","title":"Description","text":"<p>Kubernetes API upgrade versions are manually transcribed from the Kubernetes API deprecation guide. The Kubernetes API deprecation guide is updated regularly, so this list may be out of date. This also contains some flux custom resources which where also manually added from flux releases as well as external secrets custom resources.</p>"},{"location":"modules/datasource/maven/","title":"Maven Datasource","text":""},{"location":"modules/datasource/maven/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>maven</code> Default versioning <code>maven</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>Last-Modified</code> header or the <code>lastModified</code> field in the results. Source URL support Yes The source URL is determined from the <code>scm</code> tags in the results."},{"location":"modules/datasource/maven/#description","title":"Description","text":""},{"location":"modules/datasource/maven/#maven-central-rate-limiting-and-caching","title":"Maven Central rate limiting and caching","text":"<p>Maven Central, hosted by Sonatype, receives a very large number of requests and has implemented rate limiting measures to manage organizational overconsumption. If you're experiencing 429 (rate limited) responses from Maven Central, you may need to optimize your caching strategy.</p> <p>Renovate includes Maven caching optimizations, but they rely on having a persistent datasource cache. By default, Renovate uses a file-based cache, which means:</p> <ul> <li>Persistent environments (like self-hosted runners with persistent storage) will benefit from cross-run caching</li> <li>Ephemeral environments (like GitHub Actions or other CI/CD with fresh containers each run) won't benefit from caching across runs</li> </ul> <p>To maximize caching effectiveness and reduce Maven Central requests:</p> <ol> <li>Use Redis for persistent caching: Configure a Redis instance for your Renovate datasource cache</li> <li>Ensure cache persistence: If using file-based caching, ensure the cache directory persists between Renovate runs</li> <li>Monitor rate limit warnings: Renovate will log warnings when receiving 429 responses from Maven Central</li> </ol> <p>If you continue to experience rate limiting issues after implementing persistent caching, you may need to:</p> <ul> <li>Reduce the frequency of Renovate runs</li> <li>Consider using a Maven repository proxy with its own caching layer</li> </ul> <p>Note</p> <p>Dependencies that appear to be Gradle plugins (where the groupId or artifactId ends with <code>.gradle.plugin</code>) will not be looked up in Maven Central.</p>"},{"location":"modules/datasource/maven/#making-your-changelogs-fetchable","title":"Making your changelogs fetchable","text":"<p>In case you are publishing artifacts and you want to ensure that your changelogs are fetchable by <code>Renovate</code>, you need to configure the scm section on their <code>pom.xml</code> file.</p> <p>For example:</p> <pre><code>&lt;scm&gt;\n    &lt;url&gt;scm:git:https://github.com/path_to_repository&lt;/url&gt;\n&lt;/scm&gt;\n</code></pre> <p>This is what allows <code>Renovate</code> to determine the <code>sourceUrl</code>, that it then uses to fetch the changelogs.</p> <p>Note</p> <p>This also works for private repositories. It can leverage the same <code>token</code> that you had to configure in order to be able to reach the private Artifactory.</p>"},{"location":"modules/datasource/maven/#specifying-your-project-homepage","title":"Specifying your project homepage","text":"<p>When opening a Pull Request <code>Renovate</code> uses the top level <code>url</code> property to determine the homepage of your project and shows it inside the Pull Request. To customize you can set it inside your <code>pom.xml</code>.</p> <p>For example:</p> <pre><code>&lt;url&gt;https://project.example.com&lt;/url&gt;\n</code></pre>"},{"location":"modules/datasource/maven/#latest-and-release-tags","title":"latest and release tags","text":"<p>When <code>latest</code> or <code>release</code> values are present in a package's <code>maven-metadata.xml</code>, Renovate will map these to its <code>tags</code> concept. This enables the use of Renovate's <code>followTag</code> feature.</p> <p>However, Renovate will set <code>respectLatest=false</code> whenever the <code>latest</code> tag is found, because many Maven registries have been found to populate the tag unreliably. You should use <code>packageRules</code> to set <code>respectLatest=true</code> if you wish to use this feature.</p>"},{"location":"modules/datasource/nextcloud/","title":"Nextcloud Datasource","text":""},{"location":"modules/datasource/nextcloud/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>nextcloud</code> Default versioning <code>semver</code> Custom registry support Yes Release timestamp support No Source URL support No"},{"location":"modules/datasource/nextcloud/#description","title":"Description","text":"<p>This datasource finds Nextcloud application updates from Nextcloud feeds.</p> <p>By default, Renovate has no default registry url for this datasource. You need to override the default behavior with the <code>registryUrls</code> config option. For example:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"nextcloud\"],\n      \"registryUrls\": [\n        \"https://apps.nextcloud.com/api/v1/platform/30.0.0/apps.json\"\n      ]\n    }\n  ]\n}\n</code></pre> <p>Additionally, if you want Renovate to automatically update the platform version, you can create a custom manager. For example:</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/(^|/)renovate.json$/\"],\n      \"matchStrings\": [\n        \"https://apps.nextcloud.com/api/v1/platform/(?&lt;currentValue&gt;\\\\d+\\\\.\\\\d+\\\\.\\\\d+)/apps.json\"\n      ],\n      \"depNameTemplate\": \"nextcloud/server\",\n      \"datasourceTemplate\": \"github-releases\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/datasource/node-version/","title":"Node Version Datasource","text":""},{"location":"modules/datasource/node-version/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>node-version</code> Default versioning <code>node</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>date</code> field. Source URL support Yes We use the URL: https://github.com/nodejs/node"},{"location":"modules/datasource/node-version/#description","title":"Description","text":"<p>This datasource returns NodeJS releases from nodejs.org API.</p>"},{"location":"modules/datasource/npm/","title":"Npm Datasource","text":""},{"location":"modules/datasource/npm/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>npm</code> Default versioning <code>npm</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>time</code> field in the results. Source URL support Yes The source URL is determined from the <code>repository</code> field in the results."},{"location":"modules/datasource/nuget/","title":"Nuget Datasource","text":""},{"location":"modules/datasource/nuget/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>nuget</code> Default versioning <code>nuget</code> Custom registry support Yes Release timestamp support Yes For the v2 API, the release timestamp is determined from the <code>Published</code> tag. And, for the v3 API, the release timestamp is determined from the <code>published</code> field in the results. Source URL support Yes For the v2 API, the source URL is determined from the <code>ProjectUrl</code> tag. And, for the v3 API, the source URL is determined from the <code>metadata.repository@url</code> field in the results."},{"location":"modules/datasource/orb/","title":"Orb Datasource","text":""},{"location":"modules/datasource/orb/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>orb</code> Default versioning No default versioning Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>created_at</code> field in the results. Source URL support No"},{"location":"modules/datasource/packagist/","title":"Packagist Datasource","text":""},{"location":"modules/datasource/packagist/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>packagist</code> Default versioning <code>composer</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>time</code> field in the results. Source URL support Yes The source URL is determined from <code>source</code> field in the results."},{"location":"modules/datasource/pod/","title":"Pod Datasource","text":""},{"location":"modules/datasource/pod/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>pod</code> Default versioning No default versioning Custom registry support Yes Release timestamp support No Source URL support No"},{"location":"modules/datasource/puppet-forge/","title":"Puppet Forge Datasource","text":""},{"location":"modules/datasource/puppet-forge/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>puppet-forge</code> Default versioning No default versioning Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>created_at</code> field from the response. Source URL support No"},{"location":"modules/datasource/pypi/","title":"Pypi Datasource","text":""},{"location":"modules/datasource/pypi/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>pypi</code> Default versioning <code>pep440</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the earliest <code>upload_time</code> field of the files of a version. When using the Simple API, timestamps are available if the server supports the JSON-based Simple API (PEP 691). Source URL support Yes The source URL is determined from the <code>homepage</code> field if it is a github repository, else we use the <code>project_urls</code> field."},{"location":"modules/datasource/pypi/#description","title":"Description","text":"<p>This datasource uses the following logic to determine lookup URLs:</p> <ul> <li>If the normalized registryUrl ends in <code>/simple/</code> or <code>/+simple/</code> then only the simple API will be tried</li> <li>Otherwise, the JSON API will be tried first</li> <li>If the JSON API returns a result, it will be used</li> <li>If the JSON API throws an error (e.g. 403, 404) then the simple API will be tried</li> </ul> <p>The Simple API supports both the HTML serialization (PEP 503) and the JSON serialization (PEP 691). Renovate uses content negotiation (an <code>Accept</code> header) to prefer the JSON serialization, falling back to HTML automatically if the registry does not support it. If the registry responds <code>406</code> because it cannot serve any of the negotiated types, Renovate retries the request without that header.</p> <p>Renovate reads the release timestamp from the <code>upload_time</code> of a version's files, or the <code>upload-time</code> (PEP 700), which the Simple JSON API exposes, so <code>minimumReleaseAge</code> works against it.</p> <p>If you are using Artifactory, you must explicitly enable the generation of <code>upload-time</code> metadata server-side.</p>"},{"location":"modules/datasource/python-version/","title":"Python Version Datasource","text":""},{"location":"modules/datasource/python-version/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>python-version</code> Default versioning <code>python</code> Custom registry support No Release timestamp support No Source URL support No"},{"location":"modules/datasource/python-version/#description","title":"Description","text":"<p>This datasource returns Python releases from the python.org API.</p> <p>It also fetches deprecated versions from the Endoflife Date datasource.</p> <p>Because Renovate depends on <code>containerbase/python-prebuild</code> it will also fetch releases from the GitHub API.</p>"},{"location":"modules/datasource/python-version/#example-custom-manager","title":"Example custom manager","text":"<p>Below is a custom regex manager to update the Python versions in a Dockerfile. Python versions sometimes drop the dot that separate the major and minor number: so <code>3.11</code> becomes <code>311</code>. The example below handles this case.</p> <pre><code>ARG PYTHON_VERSION=311\nFROM image-python${PYTHON_VERSION}-builder:1.0.0\n</code></pre> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/^Dockerfile$/\"],\n      \"matchStringsStrategy\": \"any\",\n      \"matchStrings\": [\n        \"ARG PYTHON_VERSION=\\\"?(?&lt;currentValue&gt;3(?&lt;minor&gt;\\\\d+))\\\"?\\\\s\"\n      ],\n      \"autoReplaceStringTemplate\": \"ARG PYTHON_VERSION={{{replace '\\\\.' '' newValue}}}\\n\",\n      \"currentValueTemplate\": \"3.{{{minor}}}\",\n      \"datasourceTemplate\": \"python-version\",\n      \"versioningTemplate\": \"python\",\n      \"depNameTemplate\": \"python\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/datasource/repology/","title":"Repology Datasource","text":""},{"location":"modules/datasource/repology/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>repology</code> Default versioning No default versioning Custom registry support Yes Release timestamp support No Source URL support No"},{"location":"modules/datasource/repology/#description","title":"Description","text":"<p>With Repology you can look up package versions from many package repositories. You can combine Repology with regex managers to update dependencies which are not supported by Renovate.</p> <p>The <code>packageName</code> field should be constructed using the repository identifier and the actual package name separated by a slash. For example: <code>alpine_3_12/gcc</code> would look for a binary (or source package) called <code>gcc</code> within the <code>alpine_3_12</code> repository.</p> <p>A list of all supported repositories can be found on the Repology homepage.</p> <p>To find the correct identifier, select the repository you want and copy the identifier in the URL: <code>https://repology.org/repository/&lt;identifier&gt;</code>. For example, the <code>Alpine Linux 3.12</code> repository has this URL: <code>https://repology.org/repository/alpine_3_12</code> and has this repository identifier: <code>alpine_3_12</code>.</p> <p>Usage Example</p> <p>Say you're using system packages in a Dockerfile and want to update them with Repology. With the Repology datasource you can \"pin\" each dependency, and get automatic updates.</p> <p>First you would set a custom manager in your <code>renovate.json</code> file for <code>Dockerfile</code>:</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/^Dockerfile$/\"],\n      \"matchStrings\": [\n        \"#\\\\s*renovate:\\\\s*datasource=(?&lt;datasource&gt;.*?) depName=(?&lt;depName&gt;.*?)( versioning=(?&lt;versioning&gt;.*?))?\\\\sENV .*?_VERSION=\\\"(?&lt;currentValue&gt;.*)\\\"\\\\s\"\n      ],\n      \"versioningTemplate\": \"{{#if versioning}}{{{versioning}}}{{else}}semver{{/if}}\"\n    }\n  ]\n}\n</code></pre> <p>Then you would put comments in your Dockerfile, to tell Renovate where to find the updates:</p> <pre><code>FROM alpine:3.12.0@sha256:a15790640a6690aa1730c38cf0a440e2aa44aaca9b0e8931a9f2b0d7cc90fd65\n\n# renovate: datasource=repology depName=alpine_3_12/gcc versioning=loose\nENV GCC_VERSION=\"9.3.0-r2\"\n# renovate: datasource=repology depName=alpine_3_12/musl-dev versioning=loose\nENV MUSL_DEV_VERSION=\"1.1.24-r8\"\n\nRUN apk add --no-cache \\\n    gcc=\"${GCC_VERSION}\" \\\n    musl-dev=\"${MUSL_DEV_VERSION}\"\n</code></pre> <p>When the operating system package for <code>gcc</code> of <code>Alpine Linux 3.12</code> is updated, Renovate updates the environment variable.</p> <p>Tip</p> <p>We recommend you try <code>loose</code> or <code>deb</code> versioning for distribution packages first. This is because the version number usually doesn't match Renovate's default <code>semver-coerced</code> specification.</p>"},{"location":"modules/datasource/rpm/","title":"Rpm Datasource","text":""},{"location":"modules/datasource/rpm/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>rpm</code> Default versioning No default versioning Custom registry support Yes Release timestamp support No Source URL support No"},{"location":"modules/datasource/rpm/#description","title":"Description","text":"<p>This datasource <code>rpm</code> returns releases of the RPM packages. It assumes the RPM repository is following the RPM standard and by default it has a repomd.xml in the directory provided by user in the <code>registryUrl</code>. According to this Pulp project doc, https://docs.pulpproject.org/en/2.10/plugins/pulp_rpm/tech-reference/rpm.html,</p> <p>repomd.xml is the metadata file that clients use to discover what repository metadata files exist in the repository. It should always be located at repodata/repomd.xml relative to the root of the repository.</p>"},{"location":"modules/datasource/rpm/#set-url-when-using-an-rpm-repository","title":"Set URL when using an RPM repository","text":"<p>To use an RPM repository with the datasource, you must set a <code>registryUrl</code> with the directory that contains the <code>repomd.xml</code> and corresponding <code>primary.xml</code>.</p> <p>Example:</p> <p>If we have</p> <ul> <li><code>http://example.com/repo/repodata/repomd.xml</code></li> <li><code>http://example.com/repo/repodata/&lt;SHA256&gt;-primary.xml</code> where <code>&lt;SHA256&gt;</code> is a dynamically generated SHA256 pattern.</li> </ul> <p>Then the <code>registryUrl</code> should set as <code>http://example.com/repo/repodata/</code> or <code>http://example.com/repo/repodata</code>.</p>"},{"location":"modules/datasource/rpm/#usage-example","title":"Usage Example","text":"<p>Say you're defining dnf/tdnf/yum packages in a <code>manifest.json</code> and you want Renovate to update them.</p> <p>Assuming your <code>manifest.json</code> looks like this.</p> <pre><code>{\n  \"example-package1\": \"1.0.0-1.azl3\",\n  \"example-package2\": \"1.1.0\"\n}\n</code></pre> <p>where the versioning format could be <code>&lt;semantic version&gt;-&lt;revision or release&gt;</code>, or just <code>&lt;semantic version&gt;</code></p> <pre><code>{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\n        \"path_to_manifest_json\"\n      ],\n      \"registryUrlTemplate\": \"http://example.com/repo/repodata/\",\n      \"datasourceTemplate\": \"rpm\"\n    }\n  ]\n}\n</code></pre> <p>In an RPM repository, the <code>&lt;SHA256&gt;-primary.xml</code> looks like this:</p> <pre><code>`&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;metadata xmlns=\"http://linux.duke.edu/metadata/common\"&gt;\n  &lt;package type=\"rpm\"&gt;\n    &lt;name&gt;example-package1&lt;/name&gt;\n    &lt;arch&gt;x86_64&lt;/arch&gt;\n    &lt;version epoch=\"0\" ver=\"1.0\" rel=\"2.azl3\"/&gt;\n  &lt;/package&gt;\n  &lt;package type=\"rpm\"&gt;\n    &lt;name&gt;example-package1&lt;/name&gt;\n    &lt;arch&gt;x86_64&lt;/arch&gt;\n    &lt;version epoch=\"0\" ver=\"1.1\" rel=\"1.azl3\"/&gt;\n  &lt;/package&gt;\n  &lt;package type=\"rpm\"&gt;\n    &lt;name&gt;example-package1&lt;/name&gt;\n    &lt;arch&gt;x86_64&lt;/arch&gt;\n    &lt;version epoch=\"0\" ver=\"1.1\" rel=\"2.azl3\"/&gt;\n  &lt;/package&gt;\n  &lt;package type=\"rpm\"&gt;\n    &lt;name&gt;example-package1&lt;/name&gt;\n    &lt;arch&gt;x86_64&lt;/arch&gt;\n    &lt;version epoch=\"0\" ver=\"1.2\"/&gt;\n  &lt;/package&gt;\n...\n...\n&lt;/metadata&gt;\n</code></pre> <p>You may also check the <code>yum/dnf info</code> for the package to find version and release:</p> <pre><code># dnf info example-package1\nLast metadata expiration check: 18:34:13 ago on Tue Oct  7 13:58:36 2025.\nInstalled Packages\nName         : example-package1\nVersion      : 1.0.0\nRelease      : 1.azl3\nArchitecture : x86_64\n[...]\n</code></pre> <p>You can see that <code>ver</code> and <code>rel</code> (<code>release</code>/<code>revision</code>) is stored separately. The RPM datasource implementation will combine these together as <code>ver-rel</code>. That's why the version is defined as <code>1.0.0-1.az3</code>, if <code>rel</code> (like <code>example-package1</code>) is available. Or just <code>1.1.0</code> if <code>rel</code> (like <code>example-package2</code>) is not available.</p>"},{"location":"modules/datasource/rpm/#limitation-and-consideration","title":"Limitation and Consideration","text":"<p>In real-world scenarios, the decompressed <code>primary.xml</code> file from an RPM repository can be extremely large. To handle this efficiently, this implementation uses streaming XML parsing, which processes the file incrementally and avoids loading the entire XML into memory.</p> <p>Streaming XML parsing is a practical solution for large files in Node.js, but for extremely large or complex cases (e.g., files exceeding ~512MB), you may still encounter memory or performance issues. For such scenarios, consider using more robust approaches such as native modules, optimized SAX parsers, or external tools. Contributions and suggestions for further improving large file handling are welcome.</p>"},{"location":"modules/datasource/ruby-version/","title":"Ruby Version Datasource","text":""},{"location":"modules/datasource/ruby-version/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>ruby-version</code> Default versioning <code>ruby</code> Custom registry support No Release timestamp support Yes The release timestamp is determined from the <code>release-list</code> table in the results. Source URL support Yes We use the URL: https://github.com/ruby/ruby."},{"location":"modules/datasource/rubygems/","title":"Rubygems Datasource","text":""},{"location":"modules/datasource/rubygems/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>rubygems</code> Default versioning <code>ruby</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>created_at</code> field in the results. Source URL support Yes The source URL is determined from the <code>source_code_uri</code> field in the results."},{"location":"modules/datasource/rubygems/#description","title":"Description","text":""},{"location":"modules/datasource/rubygems/#rubygems-datasource_1","title":"Rubygems datasource","text":"<p>Datasource query order depends on the registry.</p>"},{"location":"modules/datasource/rubygems/#querying-rubygemsorg","title":"Querying <code>rubygems.org</code>","text":"<p>Rubygems rate limits are easy to hit, so we need to be careful with the queries. This is implemented with two-level cache:</p> <ul> <li> <p>First, we query <code>https://rubygems.org/versions</code> endpoint for current versions for all packages.</p> <p>Either full or delta sync is performed, depending on the cache state.</p> <p>All the data of this layer is stored in-memory as the mapping <code>packageName \u2192 version[]</code>.</p> <pre><code>stateDiagram-v2\n  [*] --&gt; Empty\n\n  state \"Empty\" as Empty\n  Empty --&gt; FullSync: getPkgReleases()\n\n  state \"Synced\" as Synced\n  Synced --&gt; DeltaSync\n\n  state \"Unsupported\" as Unsupported\n  Unsupported --&gt; [*]\n\n  state \"Full sync\" as FullSync : GET /versions (~20Mb)\n  state full_sync_result &lt;&lt;choice&gt;&gt;\n  FullSync --&gt; full_sync_result: Response\n  full_sync_result --&gt; Synced: (1) Status 200\n  full_sync_result --&gt; Unsupported: (2) Status 404\n  full_sync_result --&gt; Empty: (3) Status other than 200 or 404\\n Clear cache and throw ExternalHostError\n\n  state \"Delta sync\" as DeltaSync: GET /versions with \"Range\" header\n  state delta_sync_result &lt;&lt;choice&gt;&gt;\n  DeltaSync --&gt; delta_sync_result: Successful response\n  delta_sync_result --&gt; Synced: (1) Status other than 206\\nFull data is received, extract and replace old cache\\n (as if it is the full sync)\n  delta_sync_result --&gt; FullSync: (2) The head of response doesn't match\\n the tail of the previously fetched data\n  delta_sync_result --&gt; Synced: (3) The head of response matches\\n the tail of the previously fetched data\n\n  state delta_sync_error &lt;&lt;choice&gt;&gt;\n  DeltaSync --&gt; delta_sync_error: Error response\n  delta_sync_error --&gt; FullSync: (1) Status 416 should not happen\\nbut moves to full sync\n  delta_sync_error --&gt; Unsupported: (2) Status 404\n  delta_sync_error --&gt; Empty: (3) Status other than 404 or 416</code></pre> </li> <li> <p>Then, more data is obtained from <code>https://rubygems.org/api/v1/versions/&lt;package&gt;.json</code> and <code>https://rubygems.org/api/v1/gems/&lt;package&gt;.json</code>.</p> <p>From the previous layer, the cache key is formed from the <code>packageName</code>, and the list of versions is additionally hashed and stored to ensure consistency, so that we reach these API endpoints only when the key has expired or when the list of versions has changed.</p> <p>The data for this cache layer is being persisted in the longer-term package cache.</p> </li> </ul>"},{"location":"modules/datasource/rubygems/#querying-rubygemspkggithubcom-or-gitlabcom","title":"Querying <code>rubygems.pkg.github.com</code> or <code>gitlab.com</code>","text":"<p>These particular registries are queried using obsolete API</p> <ul> <li><code>/api/v1/dependencies</code></li> </ul>"},{"location":"modules/datasource/rubygems/#other-registries","title":"Other registries","text":"<ul> <li>Fetch from <code>/api/v1/versions/&lt;package&gt;.json</code></li> <li>Fallback to <code>/info/&lt;package&gt;</code>, if above fails</li> <li>Fallback to the obsolete <code>/api/v1/dependencies</code>, if above fails</li> </ul>"},{"location":"modules/datasource/rust-version/","title":"Rust Version Datasource","text":""},{"location":"modules/datasource/rust-version/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>rust-version</code> Default versioning <code>rust-release-channel</code> Custom registry support No Release timestamp support Yes The release timestamp is parsed from the release manifest URL. Source URL support Yes"},{"location":"modules/datasource/rust-version/#description","title":"Description","text":"<p>This datasource fetches available Rust compiler versions from the official Rust distribution infrastructure at https://static.rust-lang.org/manifests.txt.</p>"},{"location":"modules/datasource/rust-version/#how-it-works","title":"How it works","text":"<p>The datasource retrieves version information from a single source file (<code>manifests.txt</code>) which contains chronological URLs to manifest files for all Rust releases. Rather than fetching each individual manifest TOML file, version information is extracted directly from the URL patterns using regex parsing.</p>"},{"location":"modules/datasource/rust-version/#supported-versions","title":"Supported Versions","text":"<p>The datasource only returns versions that correspond to specific Rust releases:</p> <ul> <li>Stable releases: <code>1.81.0</code>, <code>1.82.0</code>, etc.</li> <li>Beta releases: <code>1.83.0-beta.4</code>, <code>1.83.0-beta.5</code>, etc.</li> <li>Dated nightlies: <code>nightly-2025-11-23</code>, <code>nightly-2025-11-24</code>, etc.</li> </ul>"},{"location":"modules/datasource/rust-version/#version-extraction","title":"Version Extraction","text":"<p>Manifest URLs follow this pattern:</p> <pre><code>static.rust-lang.org/dist/YYYY-MM-DD/channel-rust-{identifier}.toml\n</code></pre> <p>Examples:</p> <ul> <li><code>static.rust-lang.org/dist/2025-11-24/channel-rust-nightly.toml</code>   \u2192 Version: <code>nightly-2025-11-24</code></li> <li><code>static.rust-lang.org/dist/2024-10-17/channel-rust-1.82.0.toml</code>   \u2192 Version: <code>1.82.0</code></li> <li><code>static.rust-lang.org/dist/2025-01-15/channel-rust-1.83.0-beta.5.toml</code>   \u2192 Version: <code>1.83.0-beta.5</code></li> </ul>"},{"location":"modules/datasource/rust-version/#release-timestamps","title":"Release Timestamps","text":"<p>Release timestamps are derived from the date in the manifest URL and set to midnight UTC (<code>YYYY-MM-DDTHH:MM:SS.000Z</code>). This provides day-level precision for release timing.</p>"},{"location":"modules/datasource/rust-version/#versioning-scheme","title":"Versioning Scheme","text":"<p>This datasource uses the <code>rust-release-channel</code> versioning scheme, which understands Rust's release channels, dated nightlies, and semantic versioning for stable and beta releases.</p>"},{"location":"modules/datasource/sbt-package/","title":"Sbt Package Datasource","text":""},{"location":"modules/datasource/sbt-package/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>sbt-package</code> Default versioning <code>ivy</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>Last-Modified</code> header or the <code>lastModified</code> field in the results. Source URL support Yes The source URL is determined from the <code>scm</code> tags in the results."},{"location":"modules/datasource/sbt-package/#description","title":"Description","text":"<p>This datasource finds SBT package updates from Maven repositories.</p> <p>By default, Renovate checks <code>https://repo.maven.apache.org/maven2</code> for SBT packages. You can override the default behavior with the <code>registryUrls</code> config option. For example:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"sbt-package\"],\n      \"registryUrls\": [\n        \"https://repo.maven.apache.org/maven2\",\n        \"https://oss.sonatype.org/content/repositories/snapshots\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/datasource/sbt-plugin/","title":"Sbt Plugin Datasource","text":""},{"location":"modules/datasource/sbt-plugin/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>sbt-plugin</code> Default versioning <code>ivy</code> Custom registry support Yes Release timestamp support No Source URL support Yes The source URL is determined from the <code>scm</code> tags in the results."},{"location":"modules/datasource/sbt-plugin/#description","title":"Description","text":"<p>This datasource finds SBT plugin updates from Maven repositories.</p> <p>By default, Renovate:</p> <ol> <li>Checks <code>https://repo1.maven.org/maven2/</code> for SBT plugins</li> <li>If the above URL returns no results, then Renovate tries the legacy URL: <code>https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases</code></li> </ol> <p>You can override the default behavior with the <code>registryUrls</code> config option. For example:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"sbt-plugin\"],\n      \"registryUrls\": [\n        \"https://repo1.maven.org/maven2/\",\n        \"https://oss.sonatype.org/content/repositories/snapshots\",\n        \"https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/datasource/terraform-module/","title":"Terraform Module Datasource","text":""},{"location":"modules/datasource/terraform-module/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>terraform-module</code> Default versioning <code>hashicorp</code> Custom registry support Yes Release timestamp support Yes For <code>registry.terraform.io</code> and <code>registry.opentofu.org</code> (via <code>api.opentofu.org</code>), release timestamps are available for all versions. For <code>app.terraform.io</code>, only the latest version is annotated, using the <code>published_at</code> field from the extended module endpoint. Source URL support Yes For <code>registry.terraform.io</code> and <code>app.terraform.io</code>, the source URL is taken from the <code>source</code> field of the registry response. For <code>registry.opentofu.org</code>, it is derived from the package name following the OpenTofu registry policy of <code>github.com/NAMESPACE/terraform-TARGETSYSTEM-NAME</code>."},{"location":"modules/datasource/terraform-provider/","title":"Terraform Provider Datasource","text":""},{"location":"modules/datasource/terraform-provider/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>terraform-provider</code> Default versioning <code>hashicorp</code> Custom registry support Yes Release timestamp support Yes The release timestamp is only available for <code>registry.terraform.io</code> (v2 API) and <code>registry.opentofu.org</code> (via <code>api.opentofu.org</code>). Other registries using the Provider Registry Protocol do not provide timestamps. Source URL support Yes For <code>registry.terraform.io</code>, the source URL is taken from the <code>source</code> field of the v2 API response. For <code>registry.opentofu.org</code>, it is derived from the package name following the OpenTofu registry policy of <code>github.com/NAMESPACE/terraform-provider-NAME</code>."},{"location":"modules/datasource/typst/","title":"Typst Datasource","text":""},{"location":"modules/datasource/typst/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>typst</code> Default versioning <code>semver-coerced</code> Custom registry support No Release timestamp support No Source URL support No"},{"location":"modules/datasource/unity3d/","title":"Unity3d Datasource","text":""},{"location":"modules/datasource/unity3d/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>unity3d</code> Default versioning <code>unity3d</code> Custom registry support Yes Release timestamp support Yes The release timestamp is determined from the <code>releaseDate</code> field in the results. Source URL support No"},{"location":"modules/datasource/unity3d-packages/","title":"Unity3d Packages Datasource","text":""},{"location":"modules/datasource/unity3d-packages/#table-of-values","title":"Table of values","text":"Name Value Notes Identifier <code>unity3d-packages</code> Default versioning <code>unity3d-packages</code> Custom registry support Yes Release timestamp support No Source URL support No"},{"location":"modules/datasource/unity3d-packages/#description","title":"Description","text":"<p>This datasource finds Unity package updates from Unity package feeds.</p> <p>By default, Renovate checks <code>https://packages.unity.com</code> for Unity packages.</p> <p>You can override the default behavior with the <code>registryUrls</code> config option. For example:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"unity3d-packages\"],\n      \"registryUrls\": [\"https://package.openupm.com\"]\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/manager/","title":"Managers","text":"<p>Renovate is based around the concept of \"package managers\", or \"managers\" for short. These range from traditional package managers like npm, Bundler and Composer through to less traditional concepts like CircleCI or Travis config files.</p> <p>The goal of Renovate is to detect and maintain all third-party dependencies in your repositories, through the use of managers.</p>"},{"location":"modules/manager/#supported-managers","title":"Supported Managers","text":"Group Category ID Managers Ansible <code>ansible</code> <code>ansible</code>, <code>ansible-galaxy</code> Batect <code>batect</code> <code>batect</code>, <code>batect-wrapper</code> Bazel <code>bazel</code> <code>bazel</code>, <code>bazel-module</code>, <code>bazelisk</code> C and C++ <code>c</code> <code>conan</code> Continuous Delivery <code>cd</code> <code>argocd</code>, <code>buildpacks</code>, <code>cdnurl</code>, <code>fleet</code>, <code>flux</code>, <code>glasskube</code>, <code>helmfile</code>, <code>helmsman</code>, <code>html</code>, <code>sveltos</code>, <code>tekton</code> Continuous Integration <code>ci</code> <code>azure-pipelines</code>, <code>bitbucket-pipelines</code>, <code>bitrise</code>, <code>buildkite</code>, <code>buildpacks</code>, <code>circleci</code>, <code>cloudbuild</code>, <code>crow</code>, <code>droneci</code>, <code>github-actions</code>, <code>gitlabci</code>, <code>gitlabci-include</code>, <code>jenkins</code>, <code>tekton</code>, <code>travis</code>, <code>velaci</code>, <code>woodpecker</code> Custom Managers <code>custom</code> <code>regex</code>, <code>jsonata</code> Dart <code>dart</code> <code>fvm</code>, <code>pub</code> Docker <code>docker</code> <code>buildpacks</code>, <code>devcontainer</code>, <code>docker-compose</code>, <code>dockerfile</code>, <code>quadlet</code> .NET <code>dotnet</code> <code>cake</code>, <code>nuget</code>, <code>paket</code>, <code>unity3d</code> Elixir <code>elixir</code> <code>gleam</code>, <code>mix</code> Go <code>golang</code> <code>gomod</code>, <code>ocb</code> Haskell <code>haskell</code> <code>haskell-cabal</code> Helm <code>helm</code> <code>helm-requirements</code>, <code>helm-values</code>, <code>helmfile</code>, <code>helmsman</code>, <code>helmv3</code>, <code>vendir</code> Infrastructure as Code <code>iac</code> <code>ansible</code>, <code>ansible-galaxy</code>, <code>bicep</code>, <code>crossplane</code>, <code>puppet</code>, <code>terraform</code>, <code>terragrunt</code> Java <code>java</code> <code>ant</code>, <code>deps-edn</code>, <code>gradle</code>, <code>gradle-wrapper</code>, <code>kotlin-script</code>, <code>leiningen</code>, <code>maven</code>, <code>maven-wrapper</code>, <code>osgi</code>, <code>sbt</code>, <code>scalafmt</code>, <code>smithy</code> JavaScript <code>js</code> <code>bun</code>, <code>bun-version</code>, <code>deno</code>, <code>meteor</code>, <code>nodenv</code>, <code>npm</code>, <code>nvm</code> Kubernetes <code>kubernetes</code> <code>argocd</code>, <code>crossplane</code>, <code>fleet</code>, <code>flux</code>, <code>glasskube</code>, <code>helm-requirements</code>, <code>helm-values</code>, <code>helmfile</code>, <code>helmsman</code>, <code>helmv3</code>, <code>jsonnet-bundler</code>, <code>kubernetes</code>, <code>kustomize</code>, <code>sveltos</code>, <code>vendir</code> Node.js <code>node</code> <code>nodenv</code>, <code>nvm</code> Perl <code>perl</code> <code>cpanfile</code> PHP <code>php</code> <code>composer</code> Python <code>python</code> <code>copier</code>, <code>homeassistant-manifest</code>, <code>pep621</code>, <code>pep723</code>, <code>pip-compile</code>, <code>pip_requirements</code>, <code>pip_setup</code>, <code>pipenv</code>, <code>pixi</code>, <code>poetry</code>, <code>pyenv</code>, <code>runtime-version</code>, <code>setup-cfg</code> Ruby <code>ruby</code> <code>bundler</code>, <code>puppet</code>, <code>ruby-version</code> Rust <code>rust</code> <code>cargo</code>, <code>rust-toolchain</code> Swift <code>swift</code> <code>cocoapods</code>, <code>mint</code>, <code>swift</code>, <code>xcodegen</code> Terraform <code>terraform</code> <code>terraform</code>, <code>terraform-version</code>, <code>terragrunt</code>, <code>terragrunt-version</code>, <code>tflint-plugin</code> No Category n/a <code>apm</code>, <code>asdf</code>, <code>devbox</code>, <code>git-submodules</code>, <code>hermit</code>, <code>homebrew</code>, <code>mise</code>, <code>nix</code>, <code>pre-commit</code>, <code>proto</code>, <code>renovate-config</code>, <code>typst</code>"},{"location":"modules/manager/#configuring-managers","title":"Configuring Managers","text":""},{"location":"modules/manager/#file-matching","title":"File Matching","text":"<p>Most Renovate managers have a default <code>managerFilePatterns</code> array. The <code>managerFilePatterns</code> array can hold a regular expression or glob pattern, that match against the repository file list.</p>"},{"location":"modules/manager/#managers-with-no-default-managerfilepatterns","title":"Managers with no default managerFilePatterns","text":"<p>Some managers have no default <code>managerFilePatterns</code>, because they have no filename convention that would let Renovate intelligently filter them. If there is no default <code>filePattern</code>, the manager is disabled. For the manager to work, you must create a <code>managerFilePatterns</code> regular expression, or glob pattern. For example:</p> <pre><code>{\n  \"kubernetes\": {\n    \"managerFilePatterns\": [\"/^config/.*\\\\.yaml$/\"]\n  }\n}\n</code></pre>"},{"location":"modules/manager/#extending-a-managers-default-managerfilepatterns","title":"Extending a manager's default managerFilePatterns","text":"<p>If the default <code>managerFilePatterns</code> for a manager does not match your file(s), you can extend the pattern. You extend the pattern by configuring the manager's <code>managerFilePatterns</code>. For example:</p> <pre><code>{\n  \"dockerfile\": {\n    \"managerFilePatterns\": [\"does-not-look-like-a-docker-file\"]\n  }\n}\n</code></pre>"},{"location":"modules/manager/#ignoring-files-that-match-the-default-managerfilepatterns","title":"Ignoring files that match the default managerFilePatterns","text":"<p>Renovate will extend the existing <code>managerFilePatterns</code>, meaning you don't need to include the default patterns like <code>Dockerfile</code> in your own array. In other words, the patterns are \"additive\". If a manager matches a file that you don't want it to, ignore it using the <code>ignorePaths</code> configuration option. Also, if you ever find that Renovate is not matching a file name that you're certain it should, check your preset config isn't the cause of it. The <code>config:recommended</code> preset ignores common test and example directory names, for example.</p>"},{"location":"modules/manager/#enabling-and-disabling-managers","title":"Enabling and disabling managers","text":""},{"location":"modules/manager/#enabling-experimental-managers","title":"Enabling experimental managers","text":"<p>Most managers are enabled by default. For those that aren't, typically because they are considered experimental, you can opt-in manually. If there was a manager called <code>some-new-manager</code> you would enable it like this:</p> <pre><code>{\n  \"some-new-manager\": {\n    \"enabled\": true\n  }\n}\n</code></pre>"},{"location":"modules/manager/#disabling-managers","title":"Disabling managers","text":"Example of disabling a specific manager (gradle)<pre><code>{\n  \"gradle\": {\n    \"enabled\": false\n  }\n}\n</code></pre> <p>Please check the list of supported managers.</p>"},{"location":"modules/manager/#limiting-enabled-managers","title":"Limiting enabled managers","text":"<p>Say you only want to use Renovate for JavaScript packages, and to update your Dockerfile, and don't want any other updates. You can use the <code>enabledManagers</code> array, to list the managers you want to use (<code>npm</code>, <code>dockerfile</code>):</p> <pre><code>{\n  \"enabledManagers\": [\"npm\", \"dockerfile\"]\n}\n</code></pre> <p>Using the <code>enabledManagers</code> array disables all other managers, this includes Bundler, Composer, Docker Compose, etc.</p>"},{"location":"modules/manager/ansible/","title":"Automated Dependency Updates for Ansible","text":"<p>Categories: <code>ansible</code>, <code>iac</code></p> <p>Renovate supports updating Ansible dependencies.</p>"},{"location":"modules/manager/ansible/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)tasks/[^/]+\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/ansible/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>.</p>"},{"location":"modules/manager/ansible/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/ansible/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)tasks/[^/]+\\\\.ya?ml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/ansible/#additional-information","title":"Additional Information","text":"<p>Supports Docker-type dependency extraction from Ansible configuration files.</p> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p>"},{"location":"modules/manager/ansible-galaxy/","title":"Automated Dependency Updates for Ansible Galaxy","text":"<p>Categories: <code>ansible</code>, <code>iac</code></p> <p>Renovate supports updating Ansible Galaxy dependencies.</p>"},{"location":"modules/manager/ansible-galaxy/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)(galaxy|requirements)(\\.ansible)?\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/ansible-galaxy/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>galaxy-collection</code>, <code>git-tags</code>, <code>github-tags</code>.</p>"},{"location":"modules/manager/ansible-galaxy/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>galaxy-collection</code> Ansible Galaxy collection <code>role</code> Ansible role"},{"location":"modules/manager/ansible-galaxy/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)(galaxy|requirements)(\\\\.ansible)?\\\\.ya?ml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/ansible-galaxy/#additional-information","title":"Additional Information","text":"<p>Extracts Ansible Galaxy dependencies from configuration files used by the <code>ansible-galaxy</code> CLI tool.</p>"},{"location":"modules/manager/ant/","title":"Automated Dependency Updates for Apache Ant","text":"<p>Categories: <code>java</code></p> <p>Renovate supports updating Apache Ant dependencies.</p>"},{"location":"modules/manager/ant/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>**/build.xml</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/ant/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>maven</code>.</p>"},{"location":"modules/manager/ant/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/ant/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"**/build.xml\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/ant/#additional-information","title":"Additional Information","text":"<p>Extracts Apache Ant dependencies from <code>build.xml</code> files that use the <code>maven-resolver-ant-tasks</code> or <code>maven-ant-tasks</code> library. Dependencies are looked up using the Maven datasource.</p>"},{"location":"modules/manager/ant/#supported-syntax","title":"Supported syntax","text":"<p>Renovate extracts dependencies from <code>&lt;dependency&gt;</code> elements in two formats:</p> <ul> <li>Separate attributes: <code>groupId</code>, <code>artifactId</code>, <code>version</code>, and optional <code>scope</code></li> <li>Coords attribute: <code>coords=\"group:artifact:version\"</code> or <code>coords=\"group:artifact:version:scope\"</code></li> </ul>"},{"location":"modules/manager/ant/#property-resolution","title":"Property resolution","text":"<p>Version values can reference Ant properties defined via <code>&lt;property name=\"...\" value=\"...\"/&gt;</code> or loaded from external <code>.properties</code> files via <code>&lt;property file=\"...\"/&gt;</code>. Ant's first-definition-wins semantics are respected.</p>"},{"location":"modules/manager/ant/#file-traversal","title":"File traversal","text":"<p>Renovate follows <code>&lt;import file=\"...\"/&gt;</code> elements to extract dependencies from imported build files. Properties defined before an <code>&lt;import&gt;</code> are available in the imported file.</p>"},{"location":"modules/manager/ant/#registry-urls","title":"Registry URLs","text":"<p>Renovate discovers Maven registry URLs from:</p> <ul> <li><code>settingsFile</code> attribute on <code>&lt;artifact:dependencies&gt;</code> elements (parsed as a Maven <code>settings.xml</code>)</li> <li>Inline <code>&lt;remoteRepository url=\"...\" /&gt;</code> elements within dependency blocks</li> </ul> <p>Discovered registries are scoped to their dependency block.</p>"},{"location":"modules/manager/apm/","title":"Automated Dependency Updates for APM","text":"<p>Categories: <code>no-category</code></p> <p>Renovate supports updating APM dependencies.</p>"},{"location":"modules/manager/apm/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)apm\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/apm/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>git-tags</code>, <code>github-tags</code>, <code>gitlab-tags</code>.</p>"},{"location":"modules/manager/apm/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/apm/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)apm\\\\.ya?ml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/apm/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>apm.lock.yaml</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/apm/#additional-information","title":"Additional Information","text":"<p>The <code>apm</code> manager keeps APM (Agent Package Manager) dependencies up to date.</p> <p>Renovate reads the <code>apm.yml</code> manifest and updates the git-pinned entries under <code>dependencies.apm</code> and <code>devDependencies.apm</code>. Each entry uses the form <code>[host/]owner/repo[/subpath]#&lt;ref&gt;</code>, for example:</p> <pre><code>name: your-project\nversion: 1.0.0\ndependencies:\n  apm:\n    - microsoft/apm-sample-package#v1.0.0\n    - gitlab.com/team/project#v2.3.0\ndevDependencies:\n  apm:\n    - owner/repo#v1.2.3\n</code></pre> <p>Only entries that pin an exact <code>#&lt;ref&gt;</code> are updated. Entries without a <code>#&lt;ref&gt;</code> are skipped because there is no version to bump.</p> <p>APM also documents pinning to a commit SHA with the release tag kept as a trailing comment (<code>owner/repo#&lt;sha&gt; # v2.0.0</code>). With <code>pinDigests</code> enabled (part of the <code>config:best-practices</code> preset) Renovate keeps both the SHA and the tag comment current, the same way it does for <code>github-actions</code> (<code>uses: owner/action@&lt;sha&gt; # v4</code>). A SHA pin without a tag comment is skipped, as there is no version to track.</p> <p>When an <code>apm.lock.yaml</code> lockfile is present, Renovate refreshes it by running <code>apm install</code> after updating the manifest. This requires the <code>apm</code> CLI to be available (for example, with <code>binarySource=global</code>).</p>"},{"location":"modules/manager/argocd/","title":"Automated Dependency Updates for Argo CD","text":"<p>Categories: <code>kubernetes</code>, <code>cd</code></p> <p>Renovate supports updating Argo CD dependencies.</p>"},{"location":"modules/manager/argocd/#file-matching","title":"File Matching","text":"<p>Because file names for <code>argocd</code> cannot be easily determined automatically, Renovate will not attempt to match any <code>argocd</code> files by default. For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/argocd/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>, <code>git-tags</code>, <code>helm</code>.</p>"},{"location":"modules/manager/argocd/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/argocd/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": []\n}\n</code></pre>"},{"location":"modules/manager/argocd/#additional-information","title":"Additional Information","text":"<p>To use the <code>argocd</code> manager you must set your own <code>managerFilePatterns</code> pattern. The <code>argocd</code> manager has no default <code>managerFilePatterns</code> pattern, because there is no common filename or directory name convention for Argo CD YAML files. By setting your own <code>managerFilePatterns</code> Renovate avoids having to check each <code>*.yaml</code> file in a repository for a Argo CD definition.</p> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p> <p>Some configuration examples:</p> If most .yaml files in your repository are for Argo CD<pre><code>{\n  \"argocd\": {\n    \"managerFilePatterns\": [\"/\\\\.yaml$/\"]\n  }\n}\n</code></pre> Argo CD YAML files are in a argocd/ directory<pre><code>{\n  \"argocd\": {\n    \"managerFilePatterns\": [\"/argocd/.+\\\\.yaml$/\"]\n  }\n}\n</code></pre> One Argo CD file in a directory<pre><code>{\n  \"argocd\": {\n    \"managerFilePatterns\": [\"/^config/applications\\\\.yaml$/\"]\n  }\n}\n</code></pre>"},{"location":"modules/manager/argocd/#oci-helm-charts","title":"OCI Helm charts","text":"<p>Renovate looks up Helm charts stored in OCI registries with the <code>docker</code> datasource. Use <code>registryAliases</code> to map a registry host, for example a pull-through cache, to the registry Renovate should query instead.</p>"},{"location":"modules/manager/asdf/","title":"Automated Dependency Updates for asdf","text":"<p>Categories: <code>no-category</code></p> <p>Renovate supports updating asdf dependencies.</p>"},{"location":"modules/manager/asdf/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)\\.tool-versions$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/asdf/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>dart-version</code>, <code>docker</code>, <code>dotnet-version</code>, <code>flutter-version</code>, <code>github-releases</code>, <code>github-tags</code>, <code>hexpm-bob</code>, <code>java-version</code>, <code>node-version</code>, <code>npm</code>, <code>pypi</code>, <code>ruby-version</code>, <code>rust-version</code>.</p>"},{"location":"modules/manager/asdf/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/asdf/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)\\\\.tool-versions$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/asdf/#additional-information","title":"Additional Information","text":"<p>Keeps the asdf <code>.tool-versions</code> file updated.</p> <p>Because <code>asdf</code> supports versioning for many different tools, specific tool support must be added one-by-one. The following tools are currently supported:</p> <ul> <li>act</li> <li>actionlint</li> <li>adr-tools</li> <li>apm</li> <li>argocd</li> <li>asdf-plugin-manager</li> <li>atmos</li> <li>awscli</li> <li>azure-cli</li> <li>bun</li> <li>cargo-make</li> <li>checkov</li> <li>clojure</li> <li>clusterctl</li> <li>conftest</li> <li>container-structure-test</li> <li>cookiecutter</li> <li>cosign</li> <li>crystal</li> <li>dart</li> <li>deno</li> <li>direnv</li> <li>dotnet-core</li> <li>dprint</li> <li>ecspresso</li> <li>editorconfig-checker</li> <li>elixir</li> <li>elm</li> <li>erlang</li> <li>flutter</li> <li>flux2</li> <li>gauche</li> <li>github-cli</li> <li>gitleaks</li> <li>ginkgo</li> <li>gleam</li> <li>gohugo</li> <li>golang</li> <li>golangci-lint</li> <li>gomplate</li> <li>gotestsum</li> <li>hadolint</li> <li>haskell</li> <li>helm</li> <li>helm-docs</li> <li>helmfile</li> <li>hugo</li> <li>idris</li> <li>istioctl</li> <li>java</li> <li>julia</li> <li>just</li> <li>k3s</li> <li>kind</li> <li>kotlin</li> <li>kubebuilder</li> <li>kubectl</li> <li>kubetail</li> <li>kustomize</li> <li>localstack</li> <li>lua</li> <li>markdownlint-cli2</li> <li>maven</li> <li>mimirtool</li> <li>minikube</li> <li>mockery</li> <li>nim</li> <li>nodejs</li> <li>ocaml</li> <li>oci</li> <li>opa</li> <li>opentofu</li> <li>packer</li> <li>perl</li> <li>php</li> <li>pnpm</li> <li>poetry</li> <li>pre-commit</li> <li>protoc</li> <li>pulumi</li> <li>python</li> <li>rebar</li> <li>ruby</li> <li>rust</li> <li>sbt</li> <li>scala</li> <li>shellcheck</li> <li>shfmt</li> <li>skaffold</li> <li>sops</li> <li>steampipe</li> <li>talhelper</li> <li>talosctl</li> <li>terraform</li> <li>terraform-docs</li> <li>terraformer</li> <li>terragrunt</li> <li>terramate</li> <li>tflint</li> <li>tfsec</li> <li>trivy</li> <li>vault</li> <li>yamllint</li> <li>yq</li> <li>zig</li> <li>maestro</li> <li>detekt</li> <li>ktlint</li> <li>yamlfmt</li> <li>tuist</li> <li>typos</li> <li>uv</li> </ul> <p>Note</p> <p>Only the first version entry for each supported tool is managed, this is because <code>.tool-versions</code> supports fallback versions.</p>"},{"location":"modules/manager/azure-pipelines/","title":"Automated Dependency Updates for Azure Pipelines","text":"<p>Categories: <code>ci</code></p> <p>Renovate supports updating Azure Pipelines dependencies.</p>"},{"location":"modules/manager/azure-pipelines/#enabling","title":"Enabling","text":"<p>Azure Pipelines functionality is currently in beta testing, so you must opt-in to test it. To enable it, add a configuration like this to either your self-hosted config or your <code>renovate.json</code>:</p> <pre><code>{\n  \"azure-pipelines\": {\n    \"enabled\": true\n  }\n}\n</code></pre> <p>If you find any bugs, please create a new discussion first. If you find that it works well, then let us know too.</p>"},{"location":"modules/manager/azure-pipelines/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>/(^|/).azuredevops/.+\\.ya?ml$/\n/azure.*pipelines?.*\\.ya?ml$/\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/azure-pipelines/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>azure-pipelines-tasks</code>, <code>git-tags</code>.</p>"},{"location":"modules/manager/azure-pipelines/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>docker</code> A Docker image reference in a <code>container:</code> field in Azure Pipelines <code>gitTags</code> A Git repository resource referenced by tag (e.g. <code>refs/tags/v1.0.0</code>)"},{"location":"modules/manager/azure-pipelines/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/).azuredevops/.+\\\\.ya?ml$/\",\n    \"/azure.*pipelines?.*\\\\.ya?ml$/\"\n  ],\n  \"enabled\": false\n}\n</code></pre>"},{"location":"modules/manager/azure-pipelines/#additional-information","title":"Additional Information","text":"<p>The <code>azure-pipelines</code> manager is disabled by default. This is because there's no way for Renovate to know whether new task versions are yet available with the Azure DevOps environment, so new versions proposed by Renovate could fail.</p> <p>To opt into running it, set the following:</p> <pre><code>{\n  \"azure-pipelines\": {\n    \"enabled\": true\n  }\n}\n</code></pre> <p>In most cases only major version numbers are specified in YAML when referencing a task version: <code>NodeTool@0</code>. By default, Renovate replaces these with the full version: <code>NodeTool@0.216.0</code>.</p> <p>To use the standard convention for Azure Pipelines, add:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"azure-pipelines-tasks\"],\n      \"extractVersion\": \"^(?&lt;version&gt;\\\\d+)\"\n    }\n  ]\n}\n</code></pre> <p>Renovate now updates container and repository resources from the <code>resources</code> block, plus tasks from <code>steps</code> blocks.</p> <p>For example:</p> <pre><code>resources:\n  repositories:\n    - type: github\n      name: renovate/renovate\n      ref: refs/heads/main\n    - type: github\n      name: user/repo\n      ref: refs/tags/v0.5.1\n  containers:\n    - container: linux\n      image: ubuntu:24.04\n    - container: python\n      image: python:3.14@sha256:90bdf58a84b9ed919c2942fddafd6c4c8256b22073cc95ecd2710ea255671eba\n\nstages:\n  - stage: StageOne\n    jobs:\n      - job: JobOne\n        steps:\n          - task: Bash@3\n            inputs:\n              script: 'echo Hello World'\n</code></pre> <p>Read the resources block and the tasks block Azure Pipelines documentation for more information.</p> <p>The <code>azure-pipelines</code> manager can process these files:</p> <ul> <li><code>.azure-pipelines/**/*.yaml</code></li> <li><code>.azure-pipelines.yaml</code></li> <li><code>.azure-pipelines.yml</code></li> <li><code>azure-pipelines/**/*.yaml</code></li> <li><code>azure-pipelines.yaml</code></li> <li><code>azure-pipelines.yml</code></li> <li><code>azure-pipeline/**/*.yaml</code></li> <li><code>azure-pipeline.yaml</code></li> <li><code>azure-pipeline.yml</code></li> </ul> <p>Warning</p> <p>Renovate can't update (root) container-element in containers jobs, see issue #21987. Renovate can't read Azure repositories defined in resource blocks, see issue #15028.</p>"},{"location":"modules/manager/batect/","title":"Automated Dependency Updates for Batect","text":"<p>Categories: <code>batect</code></p> <p>Renovate supports updating Batect dependencies.</p>"},{"location":"modules/manager/batect/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)batect(-bundle)?\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/batect/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>, <code>git-tags</code>.</p>"},{"location":"modules/manager/batect/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/batect/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)batect(-bundle)?\\\\.ya?ml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/batect/#additional-information","title":"Additional Information","text":"<p>Extracts all Docker images and Batect bundles from Batect configuration files.</p> <p>For updates to Batect itself, see batect-wrapper.</p>"},{"location":"modules/manager/batect/#files-searched","title":"Files searched","text":"<p>By default, the manager searches for files called <code>batect.yml</code> or <code>batect-bundle.yml</code>.</p> <p>If you keep your Batect configuration in other files, you'll need to tell Renovate where to find them. Files included in your main configuration file with <code>include</code> don't need to be listed.</p> <p>You do this by creating a <code>\"batect\"</code> object in your <code>renovate.json</code> file. This object should have a <code>managerFilePatterns</code> array with regular expressions that match the configuration file names.</p> <p>For example:</p> <pre><code>{\n  \"batect\": {\n    \"managerFilePatterns\": [\n      \"/(^|/)batect(-bundle)?\\\\.yml$/\",\n      \"/(^|/)my-other-batect-file\\\\.yml$/\",\n      \"/^a-directory/[^/]*\\\\.yml$/\"\n    ]\n  }\n}\n</code></pre>"},{"location":"modules/manager/batect/#bundle-versioning","title":"Bundle versioning","text":"<p>This manager assumes that any bundles referenced use tags for versioning, and that these tags use SemVer. The implementation of SemVer is strict - versions must follow the <code>X.Y.Z</code> or <code>vX.Y.Z</code> format. Versions that don't match this format (eg. <code>X.Y</code>) will be ignored.</p>"},{"location":"modules/manager/batect-wrapper/","title":"Automated Dependency Updates for Batect Wrapper","text":"<p>Categories: <code>batect</code></p> <p>Renovate supports updating Batect Wrapper dependencies.</p>"},{"location":"modules/manager/batect-wrapper/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)batect$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/batect-wrapper/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>github-releases</code>.</p>"},{"location":"modules/manager/batect-wrapper/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/batect-wrapper/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)batect$/\"\n  ],\n  \"versioning\": \"semver\"\n}\n</code></pre>"},{"location":"modules/manager/batect-wrapper/#additional-information","title":"Additional Information","text":"<p>Configuration for Batect wrapper updates. The default configuration will automatically update both <code>batect</code> and <code>batect.cmd</code>, similar to running <code>./batect --upgrade</code>.</p> <p>See also: Batect image reference updates</p>"},{"location":"modules/manager/bazel/","title":"Automated Dependency Updates for Bazel","text":"<p>Categories: <code>bazel</code></p> <p>Renovate supports updating Bazel dependencies.</p>"},{"location":"modules/manager/bazel/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>/(^|/)WORKSPACE(|\\.bazel|\\.bzlmod)$/\n/\\.WORKSPACE\\.bazel$/\n/\\.bzl$/\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/bazel/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>, <code>github-releases</code>, <code>github-tags</code>, <code>go</code>.</p>"},{"location":"modules/manager/bazel/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>container_pull</code> A Docker container image pulled via <code>container_pull</code> <code>_container_pull</code> A Docker container image pulled via the private <code>_container_pull</code> rule <code>git_repository</code> A Git repository dependency via <code>git_repository</code> <code>_git_repository</code> A Git repository dependency via the private <code>_git_repository</code> rule <code>new_git_repository</code> A Git repository with a custom BUILD file via <code>new_git_repository</code> <code>_new_git_repository</code> A Git repository with a custom BUILD file via the private <code>_new_git_repository</code> rule <code>go_repository</code> A Go module dependency via <code>go_repository</code> <code>_go_repository</code> A Go module dependency via the private <code>_go_repository</code> rule <code>http_archive</code> An archive downloaded over HTTP via <code>http_archive</code> <code>_http_archive</code> An archive downloaded over HTTP via the private <code>_http_archive</code> rule <code>http_file</code> A file downloaded over HTTP via <code>http_file</code> <code>_http_file</code> A file downloaded over HTTP via the private <code>_http_file</code> rule <code>oci_pull</code> An OCI container image pulled via <code>oci_pull</code> <code>_oci_pull</code> An OCI container image pulled via the private <code>_oci_pull</code> rule <code>maven_install</code> A Maven artifact installed via <code>maven_install</code> <code>_maven_install</code> A Maven artifact installed via the private <code>_maven_install</code> rule"},{"location":"modules/manager/bazel/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)WORKSPACE(|\\\\.bazel|\\\\.bzlmod)$/\",\n    \"/\\\\.WORKSPACE\\\\.bazel$/\",\n    \"/\\\\.bzl$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/bazel/#additional-information","title":"Additional Information","text":"<p>Bazel is quite unlike most other \"package managers\" that Renovate supports, which usually focus on a particular ecosystem like JavaScript, Ruby or Docker. Instead, Bazel is a build tool so supports a multitude of languages/datasources. Renovate does not support all possible Bazel references, although would like to, and feature requests are welcome.</p> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p>"},{"location":"modules/manager/bazel-module/","title":"Automated Dependency Updates for Bazel Module","text":"<p>Categories: <code>bazel</code></p> <p>Renovate supports updating Bazel Module dependencies.</p>"},{"location":"modules/manager/bazel-module/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/|\\.)MODULE\\.bazel$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/bazel-module/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>bazel</code>, <code>crate</code>, <code>docker</code>, <code>github-tags</code>, <code>maven</code>.</p>"},{"location":"modules/manager/bazel-module/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>bazel_dep</code> A direct Bazel module dependency via <code>bazel_dep</code> <code>git_override</code> A Git-based override for a Bazel module dependency via <code>git_override</code> <code>archive_override</code> An archive-based override for a Bazel module dependency via <code>archive_override</code> <code>local_path_override</code> A local path override for a Bazel module dependency via <code>local_path_override</code> <code>single_version_override</code> A version or registry override for a Bazel module dependency via <code>single_version_override</code> <code>git_repository</code> A Git repository dependency via <code>git_repository</code> in a module extension <code>new_git_repository</code> A Git repository with a custom BUILD file via <code>new_git_repository</code> in a module extension <code>oci_pull</code> An OCI container image pulled via the <code>oci.pull</code> module extension tag <code>maven_install</code> A Maven artifact installed via the <code>maven</code> module extension <code>crate_spec</code> A Rust crate dependency via the <code>crate.spec</code> module extension tag <code>rules_img_pull</code> A container image pulled via a <code>rules_img</code> repo rule in a module extension"},{"location":"modules/manager/bazel-module/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/|\\\\.)MODULE\\\\.bazel$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/bazel-module/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>MODULE.bazel.lock</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/bazel-module/#additional-information","title":"Additional Information","text":"<p>The <code>bazel-module</code> manager can update Bazel module (bzlmod) enabled workspaces.</p>"},{"location":"modules/manager/bazel-module/#maven","title":"Maven","text":"<p>It also takes care about maven artifacts initalized with bzlmod. For simplicity the name of extension variable is limited to <code>maven*</code>. E.g.:</p> <pre><code>maven = use_extension(\"@rules_jvm_external//:extensions.bzl\", \"maven\")\n</code></pre> <pre><code>maven_1 = use_extension(\"@rules_jvm_external//:extensions.bzl\", \"maven\")\n</code></pre> <p>Both <code>install</code> and <code>artifact</code> methods are supported:</p> <pre><code>maven.install(\n    artifacts = [\n        \"org.seleniumhq.selenium:selenium-java:4.4.0\",\n    ],\n)\n\nmaven.artifact(\n    artifact = \"javapoet\",\n    group = \"com.squareup\",\n    neverlink = True,\n    version = \"1.11.1\",\n)\n</code></pre>"},{"location":"modules/manager/bazel-module/#docker","title":"Docker","text":"<p>Similarly, it updates Docker / OCI images pulled with oci_pull.</p> <p>Note that the extension must be called <code>oci</code>:</p> <pre><code>oci = use_extension(\"@rules_oci//oci:extensions.bzl\", \"oci\")\n\noci.pull(\n    name = \"nginx_image\",\n    digest = \"sha256:287ff321f9e3cde74b600cc26197424404157a72043226cbbf07ee8304a2c720\",\n    image = \"index.docker.io/library/nginx\",\n    platforms = [\"linux/amd64\"],\n    tag = \"1.27.1\",\n)\n</code></pre> <p>It also supports Docker images pulled with rules_img pull:</p> <pre><code>pull = use_repo_rule(\"@rules_img//img:pull.bzl\", \"pull\")\npull(\n    name = \"ubuntu\",\n    digest = \"sha256:1e622c5f9ac0c0144d577702ba5f2cce79fc8e3cf89ec88291739cd4eee3b7b9\",\n    registry = \"index.docker.io\",\n    repository = \"library/ubuntu\",\n    tag = \"24.04\",\n)\n</code></pre>"},{"location":"modules/manager/bazel-module/#crate","title":"Crate","text":"<p>It also supports Rust crate dependencies initialized with rules_rust crate_universe. For simplicity the name of extension variable is limited to <code>crate*</code>. E.g.:</p> <pre><code>crate = use_extension(\"@rules_rust//crate_universe:extension.bzl\", \"crate\")\n</code></pre> <pre><code>crate_1 = use_extension(\"@rules_rust//crate_universe:extension.bzl\", \"crate\")\n</code></pre> <p>The <code>spec</code> method is supported:</p> <pre><code>crate.spec(\n    package = \"axum\",\n    version = \"0.8.4\",\n)\n\ncrate.spec(\n    package = \"tokio\",\n    version = \"1.45.1\",\n    features = [\n        \"full\",\n    ],\n)\n\ncrate.spec(\n    package = \"custom_crate\",\n    git = \"https://github.com/example/custom_crate.git\",\n    tag = \"v1.0.0\",\n)\n</code></pre>"},{"location":"modules/manager/bazel-module/#lockfile-support","title":"Lockfile support","text":"<p>The <code>bazel-module</code> manager updates the <code>MODULE.bazel.lock</code> file when dependencies change. After updating <code>MODULE.bazel</code>, Renovate runs <code>bazel mod deps</code> to regenerate the lockfile.</p> <p>Requirements:</p> <ul> <li>A <code>MODULE.bazel.lock</code> file must already exist in the repository</li> <li>Bazelisk must be available (Renovate installs it automatically when using containerbase)</li> <li>Bazelisk determines the correct Bazel version from the <code>.bazelversion</code> file in the repository (if present)</li> </ul> <p>If no <code>MODULE.bazel.lock</code> file is found, the lockfile update step is skipped.</p> <p>It will only run if the <code>allowedUnsafeExecutions</code> global option includes <code>bazelModDeps</code>.</p>"},{"location":"modules/manager/bazelisk/","title":"Automated Dependency Updates for Bazelisk","text":"<p>Categories: <code>bazel</code></p> <p>Renovate supports updating Bazelisk dependencies.</p>"},{"location":"modules/manager/bazelisk/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)\\.bazelversion$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/bazelisk/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>github-releases</code>.</p>"},{"location":"modules/manager/bazelisk/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/bazelisk/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)\\\\.bazelversion$/\"\n  ],\n  \"pinDigests\": false,\n  \"versioning\": \"semver\"\n}\n</code></pre>"},{"location":"modules/manager/bazelisk/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>MODULE.bazel.lock</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/bazelisk/#additional-information","title":"Additional Information","text":"<p>Simply keeps the <code>.bazelversion</code> file updated.</p>"},{"location":"modules/manager/bazelisk/#lockfile-support","title":"Lockfile support","text":"<p>When a <code>MODULE.bazel.lock</code> file exists in the repository, updating the Bazel version also regenerates the lockfile. See the bazel-module manager docs for details.</p> <p>It will only run if the <code>allowedUnsafeExecutions</code> global option includes <code>bazelModDeps</code>.</p>"},{"location":"modules/manager/bicep/","title":"Automated Dependency Updates for Bicep","text":"<p>Categories: <code>iac</code></p> <p>Renovate supports updating Bicep dependencies.</p>"},{"location":"modules/manager/bicep/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/\\.bicep$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/bicep/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>azure-bicep-resource</code>.</p>"},{"location":"modules/manager/bicep/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/bicep/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/\\\\.bicep$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/bicep/#additional-information","title":"Additional Information","text":"<p>Updates the Azure REST API version of <code>resource</code>s in Bicep files.</p>"},{"location":"modules/manager/bitbucket-pipelines/","title":"Automated Dependency Updates for Bitbucket Pipelines","text":"<p>Categories: <code>ci</code></p> <p>Renovate supports updating Bitbucket Pipelines dependencies.</p>"},{"location":"modules/manager/bitbucket-pipelines/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>**/*-pipelines.yml</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/bitbucket-pipelines/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>.</p>"},{"location":"modules/manager/bitbucket-pipelines/#references","title":"References","text":"<ul> <li>https://support.atlassian.com/bitbucket-cloud/docs/bitbucket-pipelines-configuration-reference</li> </ul>"},{"location":"modules/manager/bitbucket-pipelines/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>bitbucket-tags</code> A Bitbucket pipe reference resolved via Bitbucket tags <code>docker</code> A Docker image used as the build image or in a service definition"},{"location":"modules/manager/bitbucket-pipelines/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"**/*-pipelines.yml\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/bitbucket-pipelines/#additional-information","title":"Additional Information","text":"<p>Extracts dependencies from Bitbucket Pipelines config files.</p> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p>"},{"location":"modules/manager/bitrise/","title":"Automated Dependency Updates for Bitrise","text":"<p>Categories: <code>ci</code></p> <p>Renovate supports updating Bitrise dependencies.</p>"},{"location":"modules/manager/bitrise/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)bitrise\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/bitrise/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>bitrise</code>, <code>git-tags</code>.</p>"},{"location":"modules/manager/bitrise/#references","title":"References","text":"<ul> <li>https://devcenter.bitrise.io/en/steps-and-workflows/introduction-to-steps.html</li> </ul>"},{"location":"modules/manager/bitrise/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/bitrise/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)bitrise\\\\.ya?ml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/bitrise/#additional-information","title":"Additional Information","text":"<p>Updates step references of <code>bitrise.yml</code> files.</p>"},{"location":"modules/manager/buildkite/","title":"Automated Dependency Updates for Buildkite","text":"<p>Categories: <code>ci</code></p> <p>Renovate supports updating Buildkite dependencies.</p>"},{"location":"modules/manager/buildkite/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>/buildkite\\.ya?ml/\n/\\.buildkite/.+\\.ya?ml$/\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/buildkite/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>bitbucket-tags</code>, <code>github-tags</code>.</p>"},{"location":"modules/manager/buildkite/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/buildkite/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/buildkite\\\\.ya?ml/\",\n    \"/\\\\.buildkite/.+\\\\.ya?ml$/\"\n  ],\n  \"commitMessageTopic\": \"buildkite plugin {{depName}}\",\n  \"commitMessageExtra\": \"to {{#if isMajor}}{{{prettyNewMajor}}}{{else}}{{{newValue}}}{{/if}}\"\n}\n</code></pre>"},{"location":"modules/manager/buildkite/#additional-information","title":"Additional Information","text":"<p>Used for updating Docker dependencies in Buildkite configuration files.</p> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p>"},{"location":"modules/manager/buildpacks/","title":"Automated Dependency Updates for Buildpacks","text":"<p>Categories: <code>docker</code>, <code>ci</code>, <code>cd</code></p> <p>Renovate supports updating Buildpacks dependencies.</p>"},{"location":"modules/manager/buildpacks/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)project\\.toml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/buildpacks/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>buildpacks-registry</code>, <code>docker</code>.</p>"},{"location":"modules/manager/buildpacks/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/buildpacks/#default-config","title":"Default config","text":"<pre><code>{\n  \"commitMessageTopic\": \"buildpack {{depName}}\",\n  \"managerFilePatterns\": [\n    \"/(^|/)project\\\\.toml$/\"\n  ],\n  \"pinDigests\": false\n}\n</code></pre>"},{"location":"modules/manager/buildpacks/#additional-information","title":"Additional Information","text":"<p>The <code>buildpacks</code> manager updates Cloud Native Buildpacks project descriptors in <code>project.toml</code> files. A <code>project.toml</code> file can reference builder / buildpack images by URIs. Renovate can update a <code>project.toml</code> file if:</p> <ul> <li>It can find the file</li> <li>The file follows the project descriptor specifications</li> <li>The buildpack <code>uri</code> is an OCI image reference (references to a local file or buildpack registry are ignored)</li> </ul> <p>Note: If you use buildpacks in the <code>io.buildpacks.group</code> array, then you must configure the Docker reference (<code>uri</code>) for Renovate to work.</p> Example of a project.toml file with Docker reference URIs<pre><code>[_]\nschema-version = \"0.2\"\n\n[io.buildpacks]\nbuilder = \"registry.corp/builder/noble:1.1.1\"\n\n[[io.buildpacks.group]]\nuri = \"docker://buildpacks/java:2.2.2\"\n\n[[io.buildpacks.group]]\nuri = \"buildpacks/nodejs:3.3.3\"\n\n[[io.buildpacks.group]]\nuri = \"file://local.oci\" # will be ignored\n</code></pre>"},{"location":"modules/manager/bun/","title":"Automated Dependency Updates for Bun","text":"<p>Categories: <code>js</code></p> <p>Renovate supports updating Bun dependencies.</p>"},{"location":"modules/manager/bun/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>/(^|/)bun\\.lockb?$/\n/(^|/)package\\.json$/\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/bun/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>github-tags</code>, <code>npm</code>.</p>"},{"location":"modules/manager/bun/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/bun/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)bun\\\\.lockb?$/\",\n    \"/(^|/)package\\\\.json$/\"\n  ],\n  \"digest\": {\n    \"prBodyDefinitions\": {\n      \"Change\": \"{{#if displayFrom}}`{{{displayFrom}}}` \u2192 {{else}}{{#if currentValue}}`{{{currentValue}}}` \u2192 {{/if}}{{/if}}{{#if displayTo}}`{{{displayTo}}}`{{else}}`{{{newValue}}}`{{/if}}\"\n    }\n  },\n  \"prBodyDefinitions\": {\n    \"Change\": \"[{{#if displayFrom}}`{{{displayFrom}}}` \u2192 {{else}}{{#if currentValue}}`{{{currentValue}}}` \u2192 {{/if}}{{/if}}{{#if displayTo}}`{{{displayTo}}}`{{else}}`{{{newValue}}}`{{/if}}]({{#if depName}}https://renovatebot.com/diffs/npm/{{replace '/' '%2f' depName}}/{{{currentVersion}}}/{{{newVersion}}}{{/if}})\"\n  }\n}\n</code></pre>"},{"location":"modules/manager/bun/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>bun.lockb</code></li> <li><code>bun.lock</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/bun/#additional-information","title":"Additional Information","text":"<p>Used for updating bun projects. Bun is a tool for JavaScript projects and therefore an alternative to managers like npm, pnpm and Yarn.</p> <p>If a <code>package.json</code> is found to be part of <code>bun</code> manager results then the same file will be excluded from the <code>npm</code> manager results unless an npm/pnpm/Yarn lock file is also found.</p>"},{"location":"modules/manager/bun-version/","title":"Automated Dependency Updates for Bun Version","text":"<p>Categories: <code>js</code></p> <p>Renovate supports updating Bun Version dependencies.</p>"},{"location":"modules/manager/bun-version/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)\\.bun-version$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/bun-version/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>npm</code>.</p>"},{"location":"modules/manager/bun-version/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/bun-version/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)\\\\.bun-version$/\"\n  ],\n  \"versioning\": \"npm\"\n}\n</code></pre>"},{"location":"modules/manager/bun-version/#additional-information","title":"Additional Information","text":"<p>Simply keeps the <code>.bun-version</code> file updated.</p>"},{"location":"modules/manager/bundler/","title":"Automated Dependency Updates for Bundler","text":"<p>Categories: <code>ruby</code></p> <p>Renovate supports updating Bundler dependencies.</p>"},{"location":"modules/manager/bundler/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)Gemfile$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/bundler/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>ruby-version</code>, <code>rubygems</code>.</p>"},{"location":"modules/manager/bundler/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/bundler/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)Gemfile$/\"\n  ],\n  \"versioning\": \"ruby\"\n}\n</code></pre>"},{"location":"modules/manager/bundler/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>Gemfile.lock</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/bundler/#additional-information","title":"Additional Information","text":"<p>Renovate uses the <code>bundler</code> manager to extract dependencies from <code>Gemfile</code> and <code>Gemfile.lock</code> files.</p>"},{"location":"modules/manager/bundler/#authenticating-private-registry","title":"Authenticating private registry","text":"<p>If:</p> <ul> <li>you need Bundler to authenticate to a private registry</li> <li>and that private registry is not on the same host as Renovate (your GitHub/GitLab/etc)</li> </ul> <p>Then you should authenticate Renovate with <code>hostRules</code>. For example:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"private-registry.company.com\",\n      \"hostType\": \"rubygems\",\n      \"token\": \"abc123\"\n    }\n  ]\n}\n</code></pre> <p>Important notes:</p> <ul> <li><code>hostType</code> is a required field, set <code>hostType=rubygems</code></li> <li>If you use the same registry for more than one package type, you may need more than one <code>hostRules</code> entry</li> <li>Instead of <code>token</code>, you can use a <code>username</code> and <code>password</code></li> </ul> <p>To avoid committing raw secrets to your repository, either:</p> <ul> <li>If self-hosting: add the <code>hostRules</code> to your self-hosted config file, instead of the repository configuration file, or</li> <li>If using the Mend Renovate App: use the <code>encrypted</code> config option</li> </ul>"},{"location":"modules/manager/cake/","title":"Automated Dependency Updates for Cake","text":"<p>Categories: <code>dotnet</code></p> <p>Renovate supports updating Cake dependencies.</p>"},{"location":"modules/manager/cake/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/\\.cake$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/cake/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>nuget</code>.</p>"},{"location":"modules/manager/cake/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/cake/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/\\\\.cake$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/cake/#additional-information","title":"Additional Information","text":"<p>Extracts dependencies from <code>*.cake</code> files.</p> <p>It can also extract <code>dotnet:</code> tool packages when used in .NET single file builds, when they are used with the <code>InstallTool</code> or <code>InstallTools</code> method. Keep in mind that those files are usually not <code>*.cake</code> files but C# code files. Those are not included in the <code>managerFilePatterns</code> per default - make sure to include them manually in your configuration if you want to use this feature.<code>#:package</code>or<code>#:sdk</code> directives are not handled by the cake manager as this is a dotnet feature. Those are separately handled by the nuget manager.</p>"},{"location":"modules/manager/cargo/","title":"Automated Dependency Updates for Cargo","text":"<p>Categories: <code>rust</code></p> <p>Renovate supports updating Cargo dependencies.</p>"},{"location":"modules/manager/cargo/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)Cargo\\.toml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/cargo/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>crate</code>, <code>git-refs</code>, <code>git-tags</code>, <code>github-tags</code>, <code>gitlab-tags</code>.</p>"},{"location":"modules/manager/cargo/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/cargo/#default-config","title":"Default config","text":"<pre><code>{\n  \"commitMessageTopic\": \"Rust crate {{depName}}\",\n  \"managerFilePatterns\": [\n    \"/(^|/)Cargo\\\\.toml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/cargo/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>Cargo.lock</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/cargo/#additional-information","title":"Additional Information","text":"<p>Extracts dependencies from <code>Cargo.toml</code> files, and also updates <code>Cargo.lock</code> files too if found.</p> <p>When using the default rangeStrategy=auto:</p> <ul> <li>If a \"less than\" instruction is found (e.g. <code>&lt;2</code>) then <code>rangeStrategy=widen</code> will be selected,</li> <li>Otherwise, <code>rangeStrategy=update-lockfile</code> will be selected.</li> </ul> <p>The <code>update-lockfile</code> default means that most upgrades will update <code>Cargo.lock</code> files without the need to change the value in <code>Cargo.toml</code>.</p>"},{"location":"modules/manager/cargo/#private-modules-authentication","title":"Private Modules Authentication","text":"<p>Before running the <code>cargo</code> commands to update the <code>cargo.lock</code>, Renovate exports <code>git</code> <code>insteadOf</code> directives in environment variables.</p> <p>Renovate uses this logic before it updates any \"artifacts\":</p> <p>The token from the <code>hostRules</code> entry matching <code>hostType=github</code> and <code>matchHost=api.github.com</code> is added as the default authentication for <code>github.com</code>. For those running against <code>github.com</code>, this token will be the default platform token.</p> <p>Next, all <code>hostRules</code> with both a token or username/password and <code>matchHost</code> will be fetched, except for any <code>github.com</code> one from above.</p> <p>Rules from this list are converted to environment variable directives if they match any of these characteristics:</p> <ul> <li>No <code>hostType</code> is defined, or</li> <li><code>hostType</code> is <code>cargo</code> or <code>crate</code>, or</li> <li><code>hostType</code> is a platform (<code>github</code>, <code>gitlab</code>, <code>azure</code>, etc.)</li> </ul>"},{"location":"modules/manager/cargo/#git-index-registries","title":"Git index registries","text":"<p>When Renovate clones a git index registry over <code>http(s)</code> to look up versions, it exports the same <code>insteadOf</code> directives as for artifact updates, with <code>hostType=crate</code> in place of <code>hostType=cargo</code>. Because artifact updates accept <code>hostType=crate</code> rules too, a single <code>crate</code> rule covers both the lookup and the <code>Cargo.lock</code> update. Git uses the credentials of the directive whose URL matches the index URL. Cloning a git index registry other than the crates.io index (<code>https://index.crates.io/</code>) requires <code>allowCustomCrateGitRegistries</code>. Sparse registries (<code>sparse+https://</code>) are fetched over HTTP, and use <code>hostRules</code> like other datasources.</p>"},{"location":"modules/manager/cdnurl/","title":"Automated Dependency Updates for CDN URL","text":"<p>Categories: <code>cd</code></p> <p>Renovate supports updating CDN URL dependencies.</p>"},{"location":"modules/manager/cdnurl/#file-matching","title":"File Matching","text":"<p>Because file names for <code>cdnurl</code> cannot be easily determined automatically, Renovate will not attempt to match any <code>cdnurl</code> files by default. For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/cdnurl/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>cdnjs</code>.</p>"},{"location":"modules/manager/cdnurl/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/cdnurl/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [],\n  \"versioning\": \"semver\"\n}\n</code></pre>"},{"location":"modules/manager/cdnurl/#additional-information","title":"Additional Information","text":"<p>To enable this manager, add the matching files to <code>cdnurl.managerFilePatterns</code>. For example:</p> <pre><code>{\n  \"cdnurl\": {\n    \"managerFilePatterns\": [\"/\\\\.html?$/\"]\n  }\n}\n</code></pre> <p>Warning</p> <p>This manager does not read or update Subresource Integrity (SRI) hashes. It replaces any matching URL it finds, without adding or updating script integrity hashes. We recommend you use the <code>html</code> manager if you need SRI updating.</p>"},{"location":"modules/manager/circleci/","title":"Automated Dependency Updates for CircleCI","text":"<p>Categories: <code>ci</code></p> <p>Renovate supports updating CircleCI dependencies.</p>"},{"location":"modules/manager/circleci/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)\\.circleci/.+\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/circleci/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>, <code>orb</code>.</p>"},{"location":"modules/manager/circleci/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>orb</code> CircleCI orb reference <code>docker</code> Docker image in executor/job configuration"},{"location":"modules/manager/circleci/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)\\\\.circleci/.+\\\\.ya?ml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/circleci/#additional-information","title":"Additional Information","text":"<p>The <code>circleci</code> manager extracts both <code>docker</code> as well as <code>orb</code> datasources from CircleCI config files.</p> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p>"},{"location":"modules/manager/circleci/#private-orbs","title":"Private orbs","text":"<p>To get private orbs working you should:</p> <ol> <li>Encrypt your CircleCI token with the Renovate encryption page</li> <li>Create a new <code>hostRules</code> entry in your Renovate config file</li> <li>Put the encrypted token in the <code>token</code> field</li> </ol> <p>The end-result should look like this:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"circleci.com\",\n      \"authType\": \"Token-Only\",\n      \"encrypted\": {\n        \"token\": \"****\"\n      }\n    }\n  ]\n}\n</code></pre> <p>This config strips the Bearer/Basic prefix from the <code>authorization</code> header.</p>"},{"location":"modules/manager/cloudbuild/","title":"Automated Dependency Updates for Cloud Build","text":"<p>Categories: <code>ci</code></p> <p>Renovate supports updating Cloud Build dependencies.</p>"},{"location":"modules/manager/cloudbuild/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)cloudbuild\\.ya?ml/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/cloudbuild/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>.</p>"},{"location":"modules/manager/cloudbuild/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/cloudbuild/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)cloudbuild\\\\.ya?ml/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/cloudbuild/#additional-information","title":"Additional Information","text":"<p>The <code>cloudbuild</code> manager extracts <code>docker</code> datasources from Cloud Build config files.</p> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p>"},{"location":"modules/manager/cocoapods/","title":"Automated Dependency Updates for CocoaPods","text":"<p>Categories: <code>swift</code></p> <p>Renovate supports updating CocoaPods dependencies.</p>"},{"location":"modules/manager/cocoapods/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)Podfile$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/cocoapods/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>git-tags</code>, <code>github-tags</code>, <code>gitlab-tags</code>, <code>pod</code>.</p>"},{"location":"modules/manager/cocoapods/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/cocoapods/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)Podfile$/\"\n  ],\n  \"versioning\": \"ruby\"\n}\n</code></pre>"},{"location":"modules/manager/cocoapods/#additional-information","title":"Additional Information","text":"<p>The <code>cocoapods</code> manager supports extracting both \"pod\" type references as well as dependencies on GitHub repositories that use versioned tags.</p> <p>Whenever a <code>Podfile</code> is updated, Renovate will also update any associated <code>Podfile.lock</code> file. This is done using the <code>cocoapods</code> gem, which runs within the Ruby runtime.</p>"},{"location":"modules/manager/composer/","title":"Automated Dependency Updates for Composer","text":"<p>Categories: <code>php</code></p> <p>Renovate supports updating Composer dependencies.</p>"},{"location":"modules/manager/composer/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)([\\w-]*)composer\\.json$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/composer/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>bitbucket-tags</code>, <code>git-tags</code>, <code>packagist</code>.</p>"},{"location":"modules/manager/composer/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>require</code> Production dependency from <code>require</code> section <code>require-dev</code> Development dependency from <code>require-dev</code> section"},{"location":"modules/manager/composer/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)([\\\\w-]*)composer\\\\.json$/\"\n  ],\n  \"versioning\": \"composer\"\n}\n</code></pre>"},{"location":"modules/manager/composer/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>composer.lock</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/composer/#additional-information","title":"Additional Information","text":"<p>Extracts dependencies from <code>composer.json</code> files, and keeps the associated <code>composer.lock</code> file updated too.</p> <p>If you use VCS repositories then Renovate needs a hint via the <code>name</code> property, which must match the relevant package. For example, the package <code>acme/foo</code> would need an entry in repositories similar to the following:</p> <pre><code>{\n  \"name\": \"acme/foo\",\n  \"type\": \"vcs\",\n  \"url\": \"http://vcs-of-acme.org/acme/foo.git\"\n}\n</code></pre> <p>By default, Renovate will invoke <code>composer update</code> with the <code>--with-dependencies</code> flag. Add <code>composerWithAll</code> to your <code>postUpdateOptions</code> array to use the <code>--with-all-dependencies</code> flag instead.</p>"},{"location":"modules/manager/conan/","title":"Automated Dependency Updates for Conan","text":"<p>Categories: <code>c</code></p> <p>Renovate supports updating Conan dependencies.</p>"},{"location":"modules/manager/conan/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)conanfile\\.(txt|py)$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/conan/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>conan</code>.</p>"},{"location":"modules/manager/conan/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>build_requires</code> A build-time dependency declared in <code>[build_requires]</code> or <code>build_requirements()</code> <code>python_requires</code> A Python-based Conan recipe dependency declared via <code>python_requires</code> <code>requires</code> A runtime dependency declared in <code>[requires]</code> or <code>requirements()</code>"},{"location":"modules/manager/conan/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)conanfile\\\\.(txt|py)$/\"\n  ],\n  \"datasource\": \"conan\",\n  \"versioning\": \"conan\"\n}\n</code></pre>"},{"location":"modules/manager/conan/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>conan.lock</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/conan/#additional-information","title":"Additional Information","text":"<p>Renovate can upgrade dependencies in <code>conanfile.txt</code> or <code>conanfile.py</code> files and also updates <code>conan.lock</code> files too if found.</p> <p>How it works:</p> <ol> <li>Renovate searches in each repository for any <code>conanfile.txt</code> or <code>conanfile.py</code> file</li> <li>Renovate extracts existing dependencies from:<ul> <li>the <code>[requires]</code> and <code>[build_requires]</code> sections in the <code>conanfile.txt</code> format</li> <li>the <code>requirements()</code> and <code>build_requirements()</code> functions in the <code>conanfile.py</code> format</li> <li>and the <code>python_requires</code>, <code>requires</code> and <code>build_requires</code> variables in the <code>conanfile.py</code> format</li> </ul> </li> <li>Renovate resolves the dependency's version using the Conan v2 API</li> <li>If Renovate finds an update, Renovate will update <code>conanfile.txt</code> or <code>conanfile.py</code></li> <li>Renovate also updates <code>conan.lock</code> file if exists</li> </ol>"},{"location":"modules/manager/copier/","title":"Automated Dependency Updates for Copier","text":"<p>Categories: <code>python</code></p> <p>Renovate supports updating Copier dependencies.</p>"},{"location":"modules/manager/copier/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)\\.copier-answers(\\..+)?\\.ya?ml/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/copier/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>git-tags</code>.</p>"},{"location":"modules/manager/copier/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>template</code> Copier project template source"},{"location":"modules/manager/copier/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)\\\\.copier-answers(\\\\..+)?\\\\.ya?ml/\"\n  ],\n  \"versioning\": \"pep440\"\n}\n</code></pre>"},{"location":"modules/manager/copier/#additional-information","title":"Additional Information","text":"<p>Keeps Copier templates up to date. Supports multiple <code>.copier-answers(...).y(a)ml</code> files in a single repository. If a template requires unsafe features, Copier must be invoked with the <code>--trust</code> flag. Enabling this behavior must be allowed in the self-hosted configuration via <code>allowScripts</code>. Actually enable it in the configuration by setting <code>ignoreScripts</code> to <code>false</code>.</p> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p>"},{"location":"modules/manager/copier/#private-modules-authentication","title":"Private Modules Authentication","text":"<p>To look up new template versions, Renovate converts SSH-style <code>_src_path</code> URLs (like <code>git+ssh://git@gitlab.com/some-org/some-template.git</code>) to their HTTPS equivalent, the same way the <code>git-submodules</code> manager does. This way the lookup works with <code>hostRules</code> credentials on setups which access the Git host via HTTPS only. The answers file itself keeps the original URL.</p> <p>Before running the <code>copier</code> command to update from the template, Renovate exports <code>git</code> <code>insteadOf</code> directives in environment variables.</p> <p>Renovate uses this logic before it updates the template copy:</p> <p>The token from the <code>hostRules</code> entry matching <code>hostType=github</code> and <code>matchHost=api.github.com</code> is added as the default authentication for <code>github.com</code>. For those running against <code>github.com</code>, this token will be the default platform token.</p> <p>Next, all <code>hostRules</code> with both a token or username/password and <code>matchHost</code> will be fetched, except for any <code>github.com</code> one from above.</p> <p>Rules from this list are converted to environment variable directives if they match any of these characteristics:</p> <ul> <li>No <code>hostType</code> is defined, or</li> <li><code>hostType</code> is <code>git-tags</code>, or</li> <li><code>hostType</code> is a platform (<code>github</code>, <code>gitlab</code>, <code>azure</code>, etc.)</li> </ul>"},{"location":"modules/manager/cpanfile/","title":"Automated Dependency Updates for cpanfile","text":"<p>Categories: <code>perl</code></p> <p>Renovate supports updating cpanfile dependencies.</p>"},{"location":"modules/manager/cpanfile/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)cpanfile$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/cpanfile/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>cpan</code>, <code>github-tags</code>.</p>"},{"location":"modules/manager/cpanfile/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>configure</code> Dependencies needed during the configure phase <code>build</code> Dependencies needed during the build phase <code>test</code> Dependencies needed during the test phase <code>runtime</code> Dependencies needed at runtime <code>develop</code> Dependencies needed during development (author_requires)"},{"location":"modules/manager/cpanfile/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)cpanfile$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/cpanfile/#additional-information","title":"Additional Information","text":"<p>The <code>cpanfile</code> manager is used to extract dependencies from <code>cpanfile</code>.</p>"},{"location":"modules/manager/crossplane/","title":"Automated Dependency Updates for Crossplane","text":"<p>Categories: <code>kubernetes</code>, <code>iac</code></p> <p>Renovate supports updating Crossplane dependencies.</p>"},{"location":"modules/manager/crossplane/#file-matching","title":"File Matching","text":"<p>Because file names for <code>crossplane</code> cannot be easily determined automatically, Renovate will not attempt to match any <code>crossplane</code> files by default. For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/crossplane/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>.</p>"},{"location":"modules/manager/crossplane/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>provider</code> A Crossplane Provider package <code>configuration</code> A Crossplane Configuration package <code>function</code> A Crossplane Function package"},{"location":"modules/manager/crossplane/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": []\n}\n</code></pre>"},{"location":"modules/manager/crossplane/#additional-information","title":"Additional Information","text":"<p>To use the <code>crossplane</code> manager you must set your own <code>managerFilePatterns</code> pattern. The <code>crossplane</code> manager has no default <code>managerFilePatterns</code> pattern, because there is no common filename or directory name convention for Crossplane YAML files. By setting your own <code>managerFilePatterns</code> Renovate avoids having to check each <code>*.yaml</code> file in a repository for a Crossplane Package definition.</p> <p>The <code>crossplane</code> manager supports these <code>depType</code>s:</p> <ul> <li><code>configuration</code></li> <li><code>function</code></li> <li><code>provider</code></li> </ul> <p>You can use these <code>depType</code>'s to control which dependencies Renovate will upgrade.</p> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p> <p>Some configuration examples:</p> If most .yaml files are for Crossplane<pre><code>{\n  \"crossplane\": {\n    \"managerFilePatterns\": [\"/\\\\.yaml$/\"]\n  }\n}\n</code></pre> For Crossplane files in a packages/ directory<pre><code>{\n  \"crossplane\": {\n    \"managerFilePatterns\": [\"/packages/.+\\\\.yaml$/\"]\n  }\n}\n</code></pre> For a single Crossplane file<pre><code>{\n  \"crossplane\": {\n    \"managerFilePatterns\": [\"/^config/provider\\\\.yaml$/\"]\n  }\n}\n</code></pre>"},{"location":"modules/manager/crow/","title":"Automated Dependency Updates for Crow","text":"<p>Categories: <code>ci</code></p> <p>Renovate supports updating Crow dependencies.</p>"},{"location":"modules/manager/crow/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/^\\.crow(?:/[^/]+)?\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/crow/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>.</p>"},{"location":"modules/manager/crow/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/crow/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/^\\\\.crow(?:/[^/]+)?\\\\.ya?ml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/crow/#additional-information","title":"Additional Information","text":"<p>Extracts all Docker images from Crow CI Pipeline YAML files.</p> <ul> <li>Crow CI homepage</li> <li>Crow CI Docs: Workflow Syntax</li> <li>Crow CI JSON schema</li> </ul>"},{"location":"modules/manager/deno/","title":"Automated Dependency Updates for Deno","text":"<p>Categories: <code>js</code></p> <p>Renovate supports updating Deno dependencies.</p>"},{"location":"modules/manager/deno/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>/(^|/)deno\\.lock$/\n/(^|/)deno\\.(json|jsonc)$/\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/deno/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>deno</code>, <code>jsr</code>, <code>npm</code>.</p>"},{"location":"modules/manager/deno/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/deno/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)deno\\\\.lock$/\",\n    \"/(^|/)deno\\\\.(json|jsonc)$/\"\n  ],\n  \"digest\": {\n    \"prBodyDefinitions\": {\n      \"Change\": \"{{#if displayFrom}}`{{{displayFrom}}}` -&gt; {{else}}{{#if currentValue}}`{{{currentValue}}}` -&gt; {{/if}}{{/if}}{{#if displayTo}}`{{{displayTo}}}`{{else}}`{{{newValue}}}`{{/if}}\"\n    }\n  },\n  \"prBodyDefinitions\": {\n    \"Change\": \"{{#if (equals datasource \\\"npm\\\")}}[{{#if displayFrom}}`{{{displayFrom}}}` -&gt; {{else}}{{#if currentValue}}`{{{currentValue}}}` -&gt; {{/if}}{{/if}}{{#if displayTo}}`{{{displayTo}}}`{{else}}`{{{newValue}}}`{{/if}}]({{#if depName}}https://renovatebot.com/diffs/npm/{{replace '/' '%2f' depName}}/{{{currentVersion}}}/{{{newVersion}}}{{/if}}){{else}}{{#if displayFrom}}`{{{displayFrom}}}` -&gt; {{else}}{{#if currentValue}}`{{{currentValue}}}` -&gt; {{/if}}{{/if}}{{#if displayTo}}`{{{displayTo}}}`{{else}}`{{{newValue}}}`{{/if}}{{/if}}\"\n  }\n}\n</code></pre>"},{"location":"modules/manager/deno/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>deno.lock</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/deno/#additional-information","title":"Additional Information","text":"<p>Extracts dependencies from the Deno's projects <code>deno.json</code> and <code>deno.jsonc</code> files. The deno manager also supports the <code>package.json</code> file for Deno's node-compat as long as a <code>deno.lock</code> file is placed next to the <code>package.json</code> file. It could support another lock filename that specified in <code>deno.json</code> or <code>deno.jsonc</code>.</p>"},{"location":"modules/manager/deno/#supported-dependency-types","title":"Supported Dependency Types","text":"<p>The following <code>depTypes</code> of <code>deno.json</code> or <code>deno.jsonc</code> are currently supported by the deno manager:</p> <ul> <li><code>imports</code></li> <li><code>scopes.&lt;mapping&gt;.&lt;specifier&gt;</code></li> <li><code>tasks.&lt;name&gt;</code>, <code>tasks.command.&lt;name&gt;</code>: Renovate will not update any lock files.</li> <li><code>compilerOptions.types</code>, <code>compilerOptions.jsxImportSource</code>, <code>compilerOptions.jsxImportSourceTypes</code></li> <li><code>lint.plugins</code></li> </ul> <p>Additionally, an import map JSON file containing <code>imports</code> and <code>scopes.&lt;mapping&gt;.&lt;specifier&gt;</code> like the examples above is supported.</p> <p>The deno manager also supports some <code>depTypes</code> that supported by npm manager.</p> <p>Note</p> <p>Deno cli supports private npm compatible registries itself, however the deno managaer is not yet ready to support Private npm module.</p> <p>Note</p> <p>In source dependencies are not supported.</p> <pre><code>import { assert } from 'jsr:@std/assert@1.0.0';\n</code></pre>"},{"location":"modules/manager/deps-edn/","title":"Automated Dependency Updates for deps.edn","text":"<p>Categories: <code>java</code></p> <p>Renovate supports updating deps.edn dependencies.</p>"},{"location":"modules/manager/deps-edn/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)(?:deps|bb)\\.edn$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/deps-edn/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>clojure</code>.</p>"},{"location":"modules/manager/deps-edn/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/deps-edn/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)(?:deps|bb)\\\\.edn$/\"\n  ],\n  \"versioning\": \"maven\"\n}\n</code></pre>"},{"location":"modules/manager/deps-edn/#additional-information","title":"Additional Information","text":"<p>Extracts Maven dependencies from <code>deps.edn</code> files.</p>"},{"location":"modules/manager/devbox/","title":"Automated Dependency Updates for Devbox","text":"<p>Categories: <code>no-category</code></p> <p>Renovate supports updating Devbox dependencies.</p>"},{"location":"modules/manager/devbox/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)devbox\\.json$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/devbox/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>devbox</code>.</p>"},{"location":"modules/manager/devbox/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/devbox/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)devbox\\\\.json$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/devbox/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>devbox.lock</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/devbox/#additional-information","title":"Additional Information","text":"<p>Used for updating devbox projects.</p> <p>Devbox is a tool for creating isolated, reproducible development environments that run anywhere.</p> <p>It uses nix packages sourced from the devbox package registry.</p>"},{"location":"modules/manager/devbox/#package-versioning","title":"Package versioning","text":"<p>Some packages in the devbox registry don't follow the basic versioning we have set up. We have allowed for defining an versioning API override within <code>tool-versioning.ts</code>.</p>"},{"location":"modules/manager/devcontainer/","title":"Automated Dependency Updates for Devcontainer","text":"<p>Categories: <code>docker</code></p> <p>Renovate supports updating Devcontainer dependencies.</p>"},{"location":"modules/manager/devcontainer/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>/^.devcontainer/devcontainer.json$/\n/^.devcontainer.json$/\n/^.devcontainer/[^/]+/devcontainer.json$/\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/devcontainer/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>, <code>golang-version</code>, <code>node-version</code>, <code>python-version</code>, <code>ruby-version</code>.</p>"},{"location":"modules/manager/devcontainer/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>feature</code> A Dev Container Feature reference (e.g. <code>ghcr.io/devcontainers/features/node:1</code>) <code>image</code> The base Docker image specified in the <code>image</code> field of devcontainer.json"},{"location":"modules/manager/devcontainer/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/^.devcontainer/devcontainer.json$/\",\n    \"/^.devcontainer.json$/\",\n    \"/^.devcontainer/[^/]+/devcontainer.json$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/devcontainer/#additional-information","title":"Additional Information","text":"<p>Extracts all Docker images from the <code>image</code> and <code>features</code> properties in these files:</p> <ul> <li><code>.devcontainer.json</code></li> <li><code>.devcontainer/devcontainer.json</code></li> <li><code>.devcontainer/&lt;folder&gt;/devcontainer.json</code></li> </ul> <p>It extracts some known versions of the <code>features</code>, like <code>node</code> and <code>python</code>.</p> <p>The <code>devcontainer</code> manager does not support <code>build.dockerFile</code> or <code>dockerComposeFile</code> values as these are covered by the <code>dockerfile</code> and <code>docker-compose</code> managers respectively.</p>"},{"location":"modules/manager/docker-compose/","title":"Automated Dependency Updates for Docker Compose","text":"<p>Categories: <code>docker</code></p> <p>Renovate supports updating Docker Compose dependencies.</p>"},{"location":"modules/manager/docker-compose/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)(?:docker-)?compose[^/]*\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/docker-compose/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>.</p>"},{"location":"modules/manager/docker-compose/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/docker-compose/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)(?:docker-)?compose[^/]*\\\\.ya?ml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/docker-compose/#additional-information","title":"Additional Information","text":"<p>Extracts all Docker images from with Docker Compose YAML files.</p> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p>"},{"location":"modules/manager/docker-compose/#registry-aliases-with-variable-defaults","title":"Registry aliases with variable defaults","text":"<p>Docker Compose files often use environment variables with default values:</p> <pre><code>services:\n  foobar:\n    image: ${CI_REGISTRY:-}image:1.0\n</code></pre> <p>To handle these variables, configure registry aliases with the default value syntax:</p> <pre><code>{\n  \"registryAliases\": {\n    \"${CI_REGISTRY:-}\": \"my-registry.io\"\n  }\n}\n</code></pre> <p>Both image reference formats work:</p> <ul> <li>With a slash after the variable: <code>${CI_REGISTRY:-}/image:1.0</code></li> <li>Without a slash after the variable: <code>${CI_REGISTRY:-}image:1.0</code></li> </ul> <p>The alias value works with or without a trailing slash.</p>"},{"location":"modules/manager/dockerfile/","title":"Automated Dependency Updates for Dockerfile","text":"<p>Categories: <code>docker</code></p> <p>Renovate supports updating Dockerfile dependencies.</p>"},{"location":"modules/manager/dockerfile/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>/(^|/|\\.)([Dd]ocker|[Cc]ontainer)file$/\n/(^|/)([Dd]ocker|[Cc]ontainer)file[^/]*$/\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/dockerfile/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>apk</code>, <code>deb</code>, <code>docker</code>.</p>"},{"location":"modules/manager/dockerfile/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>syntax</code> The <code># syntax=</code> parser directive at the top of the Dockerfile <code>stage</code> An intermediate <code>FROM</code> instruction in a multi-stage build <code>final</code> The last <code>FROM</code> instruction in the Dockerfile (the final build stage) <code>install</code> A system package manager was used to install a package, for instance via <code>RUN apk add ...</code>"},{"location":"modules/manager/dockerfile/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/|\\\\.)([Dd]ocker|[Cc]ontainer)file$/\",\n    \"/(^|/)([Dd]ocker|[Cc]ontainer)file[^/]*$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/dockerfile/#additional-information","title":"Additional Information","text":""},{"location":"modules/manager/dockerfile/#supported-dependencies","title":"Supported dependencies","text":"<p>This manager extracts image references in a <code>Dockerfile</code> and/or <code>Containerfile</code> and supports:</p> <ul> <li><code>FROM</code> images</li> <li><code>COPY --from</code> images</li> <li><code>RUN --mount</code> images</li> <li><code>syntax</code> images</li> <li>APK packages pinned by <code>apk add</code> in <code>RUN</code> instructions</li> <li>Debian packages pinned by <code>apt install</code> or <code>apt-get install</code> in <code>RUN</code> instructions</li> </ul>"},{"location":"modules/manager/dockerfile/#from-support","title":"<code>FROM</code> support","text":"<p>Renovate can update images referenced in <code>FROM</code> directives. This even works for multi-stage builds with many <code>FROM</code> directives in one Dockerfile.</p> <pre><code>FROM node:20.9.0\n</code></pre> <p>Advanced <code>FROM</code> flags like <code>--platform</code> or <code>AS &lt;name&gt;</code> are also supported:</p> <pre><code>FROM --platform=linux/amd64 node:20.9.0 AS installer\n</code></pre> <p>Also, Renovate will automatically expand variables and <code>ARG</code> directives:</p> <pre><code>ARG TAG=3.19.4\nFROM alpine:${TAG}\n</code></pre> <p>Renovate supports variables with default values (using the <code>:-</code> syntax) when they are configured with registry aliases:</p> <pre><code>FROM ${CI_REGISTRY:-}alpine:3.19.4\n</code></pre> <pre><code>{\n  \"registryAliases\": {\n    \"${CI_REGISTRY:-}\": \"my-registry.io\"\n  }\n}\n</code></pre> <p>Both image reference formats work:</p> <ul> <li>With a slash after the variable: <code>${CI_REGISTRY:-}/alpine:3.19.4</code></li> <li>Without a slash after the variable: <code>${CI_REGISTRY:-}alpine:3.19.4</code></li> </ul> <p>The alias value works with or without a trailing slash.</p>"},{"location":"modules/manager/dockerfile/#copy-from-support","title":"<code>COPY --from</code> support","text":"<p>Renovate can update images referenced in <code>COPY --from</code> directives.</p> <pre><code>FROM node:20.9.0\nCOPY --from alpine:3.19.4 /bin/sh /usr/local/sh\n</code></pre>"},{"location":"modules/manager/dockerfile/#run-mount-support","title":"<code>RUN --mount</code> support","text":"<p>Images referenced in <code>RUN --mount</code> directives are also supported.</p> <pre><code>FROM python:3.12\nRUN --mount=from=ghcr.io/astral-sh/uv:0.5,source=/uv,target=/bin/uv \\\n    uv venv\n</code></pre>"},{"location":"modules/manager/dockerfile/#syntax-support","title":"<code>syntax</code> support","text":"<p>Renovate can update <code>syntax</code> references.</p> <pre><code># syntax=docker/dockerfile:1.9.0\nFROM alpine:3.19.4\n</code></pre>"},{"location":"modules/manager/dockerfile/#run-apk-add-support","title":"<code>RUN apk add</code> support","text":"<p>Renovate extracts Alpine packages installed via <code>apk add</code>, using the <code>apk</code> datasource.</p> <pre><code>FROM alpine:3.21\nRUN apk add --no-cache \\\n      bash=5.2.37-r2 \\\n      rsyslog=8.2412.0-r1\n</code></pre> <p>Renovate does not work out which Alpine release your base image installs from, and the <code>apk</code> datasource's default registry may not match it, so a lookup against that default would offer versions your image cannot install. Renovate therefore skips these packages with <code>skipReason: unknown-registry</code> until you say which repositories to read.</p> <p>Give them a <code>registryUrls</code> with a <code>packageRules</code> entry to have them looked up:</p> Point apk lookups at the Alpine 3.21 repositories<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchFileNames\": [\"Dockerfile\"],\n      \"matchDatasources\": [\"apk\"],\n      \"registryUrls\": [\n        \"https://dl-cdn.alpinelinux.org/alpine?branch=v3.21&amp;components=main,community&amp;arch=x86_64\"\n      ]\n    }\n  ]\n}\n</code></pre> <p>Version constraints are read with <code>apk</code> versioning, so the fuzzy constraints which Wolfi and Chainguard images commonly pin with are supported too:</p> <pre><code>FROM cgr.dev/chainguard/wolfi-base\nRUN apk add --no-cache curl=~8.12.1\n</code></pre> <p><code>~8.12.1</code> matches every <code>8.12.1-rN</code>, so Renovate only raises a PR once a version outside the constraint is released, and keeps the precision you wrote it with - <code>curl=~8.13.0</code>, not <code>curl=~8.13.0-r0</code>.</p> <p>Renovate skips packages which it cannot update, and says why in the <code>packageFiles with updates</code> log line:</p> <ul> <li>packages without a version, e.g. <code>apk add bash</code></li> <li>packages whose version comes from a variable, e.g. <code>apk add \"bash=$BASH_VERSION\"</code></li> <li>packages constrained to an identity hash with <code>&gt;&lt;</code>, which is not a version</li> <li>every package, until you give it a <code>registryUrls</code> -- see above</li> </ul> <p>Renovate also proposes no new value for the <code>&lt;</code>, <code>&lt;=</code>, <code>&gt;</code>, <code>&gt;=</code>, <code>&gt;~</code> and <code>&lt;~</code> operators, as there is no single obvious new bound for them.</p> <p>Local or remote <code>.apk</code> files, virtual packages (<code>--virtual .build-deps</code>) and provider dependencies (<code>so:</code>, <code>cmd:</code>, <code>pc:</code>) are ignored.</p> <p>Packages installed by a system package manager use the <code>install</code> <code>depType</code>, so you can match them in a <code>packageRules</code> entry with <code>matchDepTypes</code>:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Disable APK package updates\",\n      \"matchDepTypes\": [\"install\"],\n      \"matchDatasources\": [\"apk\"],\n      \"enabled\": false\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/manager/dockerfile/#run-apt-install-support","title":"<code>RUN apt install</code> support","text":"<p>Renovate extracts Debian packages installed via <code>apt install</code> or <code>apt-get install</code>, using the <code>deb</code> datasource.</p> <pre><code>FROM debian:trixie\nRUN apt-get update \\\n  &amp;&amp; apt-get install -y --no-install-recommends \\\n       curl=8.14.1-2 \\\n       git=1:2.47.3-0+deb13u1 \\\n  &amp;&amp; rm -rf /var/lib/apt/lists/*\n</code></pre> <p>The <code>deb</code> datasource needs a <code>registryUrl</code> which says which suite, components and architecture to look in, and Renovate does not work that out from your base image. Its default is the Debian <code>stable</code> suite for <code>amd64</code>, which may not match your base image, so a lookup against that default would offer versions your image cannot install. Renovate therefore skips these packages with <code>skipReason: unknown-registry</code> until you say which repositories to read.</p> <p>Give them a <code>registryUrls</code> with a <code>packageRules</code> entry to have them looked up:</p> Point deb lookups at the Debian trixie repositories<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchFileNames\": [\"Dockerfile\"],\n      \"matchDatasources\": [\"deb\"],\n      \"registryUrls\": [\n        \"https://deb.debian.org/debian?suite=trixie&amp;components=main,contrib,non-free&amp;binaryArch=amd64\"\n      ]\n    }\n  ]\n}\n</code></pre> <p>Renovate skips packages which it cannot update, and says why in the <code>packageFiles with updates</code> log line:</p> <ul> <li>packages without a version, e.g. <code>apt-get install -y curl</code></li> <li>packages pinned to a suite instead of a version, e.g. <code>apt-get install -y curl/trixie-backports</code></li> <li>packages whose version comes from a variable, e.g. <code>apt-get install -y \"curl=$CURL_VERSION\"</code>   This can be handled with a Custom Manager, instead.</li> <li>packages given a wildcard version, e.g. <code>apt-get install -y 'curl=8.14.*'</code></li> <li>every package, until you give it a <code>registryUrls</code> -- see above</li> </ul> <p>Local or remote <code>.deb</code> files, removal markers like <code>vim-</code> and pattern matches like <code>^gnome</code> are ignored. <code>dpkg -i</code> is not supported, because it installs a local file rather than a package from a repository.</p> <p>Packages installed by a system package manager use the <code>install</code> <code>depType</code>, so you can match them in a <code>packageRules</code> entry with <code>matchDepTypes</code>:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Disable Debian package updates\",\n      \"matchDepTypes\": [\"install\"],\n      \"matchDatasources\": [\"deb\"],\n      \"enabled\": false\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/manager/dockerfile/#versioning","title":"Versioning","text":"<p>Renovate's managers does not understand versioning, that's up to Renovate's versioning modules. The default <code>docker</code> versioning for container image datasources treats suffixes as \"compatibility\", for example: <code>-alpine</code>. Many container images are not SemVer compliant because they use such suffixes in their tags.</p> <p>If Renovate does not update your container images correctly, you may need to tell Renovate what versioning it should use. For example, if you know that an image follows SemVer, you can tell Renovate to use <code>\"semver\"</code> versioning for that image:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"docker\"],\n      \"matchPackageNames\": [\"whitesource/renovate\"],\n      \"versioning\": \"semver\"\n    }\n  ]\n}\n</code></pre> <p>Read Renovate's Docker Versioning docs to learn more.</p>"},{"location":"modules/manager/droneci/","title":"Automated Dependency Updates for Droneci","text":"<p>Categories: <code>ci</code></p> <p>Renovate supports updating Droneci dependencies.</p>"},{"location":"modules/manager/droneci/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)\\.drone\\.yml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/droneci/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>.</p>"},{"location":"modules/manager/droneci/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>docker</code> A Docker image used in a Drone CI pipeline step or service"},{"location":"modules/manager/droneci/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)\\\\.drone\\\\.yml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/droneci/#additional-information","title":"Additional Information","text":"<p>Extracts Docker-type dependencies from DroneCI config files.</p> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p>"},{"location":"modules/manager/fleet/","title":"Automated Dependency Updates for Rancher Fleet","text":"<p>Categories: <code>cd</code>, <code>kubernetes</code></p> <p>Renovate supports updating Rancher Fleet dependencies.</p>"},{"location":"modules/manager/fleet/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)fleet\\.ya?ml/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/fleet/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>, <code>git-tags</code>, <code>helm</code>.</p>"},{"location":"modules/manager/fleet/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>git_repo</code> Git repository reference in a Fleet GitRepo manifest <code>fleet</code> Helm chart reference in a Fleet deployment"},{"location":"modules/manager/fleet/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)fleet\\\\.ya?ml/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/fleet/#additional-information","title":"Additional Information","text":"<p>Can upgrade bundle definitions and GitRepo YAML manifests of Rancher Fleet.</p> <p>By default, only bundles with Helm references will be upgraded. To enable GitRepo updates you have to extend your <code>managerFilePatterns</code> configuration.</p> <pre><code>{\n  \"fleet\": {\n    \"managerFilePatterns\": [\"/(^|/)fleet.ya?ml/\", \"/myGitRepoManifests\\\\.yaml/\"]\n  }\n}\n</code></pre> <p>In case pull through cache configured via internal registry, it is possible to setup registryAlias to query package updates via upstream source</p> <pre><code>{\n  \"registryAliases\": {\n    \"https://registry.com/jetstack\": \"https://charts.jetstack.io\",\n    \"registry.com/docker-io\": \"registry-1.docker.io\"\n  }\n}\n</code></pre>"},{"location":"modules/manager/flux/","title":"Automated Dependency Updates for Flux","text":"<p>Categories: <code>cd</code>, <code>kubernetes</code></p> <p>Renovate supports updating Flux dependencies.</p>"},{"location":"modules/manager/flux/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(?:^|/)gotk-components\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/flux/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>bitbucket-tags</code>, <code>docker</code>, <code>git-refs</code>, <code>git-tags</code>, <code>github-releases</code>, <code>github-tags</code>, <code>gitlab-tags</code>, <code>helm</code>.</p>"},{"location":"modules/manager/flux/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>HelmChart</code> Helm chart from a <code>HelmRelease</code> or <code>HelmChart</code> resource, or an <code>OCIRepository</code> selecting the Helm chart layer"},{"location":"modules/manager/flux/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(?:^|/)gotk-components\\\\.ya?ml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/flux/#additional-information","title":"Additional Information","text":"<p>This manager parses Flux YAML manifests and supports:</p> <ol> <li><code>HelmRelease</code> resources</li> <li><code>GitRepository</code> resources</li> <li><code>OCIRepository</code> resources</li> <li>Flux system manifests</li> </ol>"},{"location":"modules/manager/flux/#helmrelease-support","title":"HelmRelease support","text":"<p>Extracts <code>helm</code> dependencies from <code>HelmRelease</code> resources.</p> <p>The <code>flux</code> manager extracts <code>helm</code> dependencies for <code>HelmRelease</code> resources linked to <code>HelmRepository</code> or <code>GitRepository</code> sources. <code>HelmRepository</code> resources can be referenced via <code>spec.chart</code> or indirectly via a <code>HelmChart</code> when using <code>spec.chartRef</code>. Renovate supports OCI <code>HelmRepository</code> sources, those with <code>type: oci</code>. Renovate will then extract the <code>docker</code> dependencies for the referenced <code>HelmRelease</code> resources.</p> <p>In addition, for the <code>flux</code> manager to properly link <code>HelmRelease</code> and <code>HelmRepository</code> resources, both of the following conditions must be met:</p> <ol> <li>The <code>HelmRelease</code> resource must either have its <code>metadata.namespace</code> property set or its <code>spec.chart.spec.sourceRef.namespace</code> property (when not using <code>chartRef</code>) set</li> <li>The referenced <code>HelmRepository</code> and <code>HelmChart</code> (when using <code>chartRef</code>) resources must have their <code>metadata.namespace</code> property set</li> </ol> <p>Namespaces will not be inferred from the context (e.g. from the parent <code>Kustomization</code>).</p> <p>Renovate updates <code>HelmRelease</code> resources coming from <code>GitRepository</code> by updating the <code>GitRepository</code> resource.</p> <p>Renovate updates Docker dependencies inside <code>HelmRelease</code> <code>values</code> like the <code>helm-values</code> manager.</p> <p>When a referenced <code>HelmRepository</code> resource is not present in the scanned manifests (for example, it is defined in another repository or as a cluster-global resource), you can statically map the <code>sourceRef.name</code> of the <code>HelmRelease</code> (or <code>HelmChart</code>) to a registry URL using <code>registryAliases</code> in your <code>flux</code> configuration:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchManagers\": [\"flux\"],\n      \"matchDatasources\": [\"helm\"],\n      \"registryAliases\": {\n        \"podinfo-repo\": \"https://stefanprodan.github.io/podinfo\"\n      }\n    }\n  ]\n}\n</code></pre> <p>In this example, a <code>HelmRelease</code> whose <code>spec.chart.spec.sourceRef.name</code> is <code>podinfo-repo</code> will be treated as if it were backed by a <code>HelmRepository</code> with URL <code>https://stefanprodan.github.io/podinfo</code>.</p>"},{"location":"modules/manager/flux/#gitrepository-support","title":"GitRepository support","text":"<p>Renovate can update <code>git</code> references from <code>GitRepository</code> resources.</p> <p>The <code>flux</code> manager only updates <code>GitRepository</code> fields that have a <code>tag</code> or <code>commit</code> key. When <code>commit</code> is being updated, if a <code>branch</code> key is also present, only commits from that branch will be considered.</p>"},{"location":"modules/manager/flux/#kustomization-support","title":"Kustomization support","text":"<p>Renovate can update <code>image</code>^1 references from <code>Kustomization</code> resources.</p>"},{"location":"modules/manager/flux/#ocirepository-support","title":"OCIRepository support","text":"<p>Renovate can update <code>oci</code> references from <code>OCIRepository</code> resources.</p> <p>The <code>flux</code> manager updates <code>OCIRepository</code> fields that have a <code>digest</code>, <code>tag</code> or both keys.</p>"},{"location":"modules/manager/flux/#helm-chart-deptype","title":"Helm chart <code>depType</code>","text":"<p>Renovate sets the <code>HelmChart</code> <code>depType</code> on the Helm charts it extracts from:</p> <ul> <li><code>HelmRelease</code> resources, including charts from OCI <code>HelmRepository</code> sources</li> <li><code>HelmChart</code> resources</li> <li><code>OCIRepository</code> resources that set <code>spec.layerSelector.mediaType</code> to <code>application/vnd.cncf.helm.chart.content.v1.tar+gzip</code></li> </ul> <p>Other <code>OCIRepository</code> resources have no <code>depType</code>.</p>"},{"location":"modules/manager/flux/#flux-system-manifests-support","title":"Flux system manifests support","text":"<p>Renovate supports updating Flux system manifests generated during Flux installation. System manifests are identified via being named <code>gotk-components.y(a)ml</code> and containing comment headers as generated by <code>flux bootstrap</code>.</p> <p>Warning</p> <p>Renovate cannot identify the use of custom bootstrap flags, such as <code>--cluster-domain</code>. In such a scenario Renovate's PR will overwrite these values with the Flux defaults. See issue #13952 on GitHub for more information.</p> <p>Updating system manifests requires that either:</p> <ol> <li>The <code>flux</code> tool is pre-installed, or</li> <li>You run a Docker image based on containerbase, such as the official Renovate images, and have <code>binarySource=install</code> configured</li> </ol>"},{"location":"modules/manager/flux/#default-managerfilepatterns","title":"Default managerFilePatterns","text":"<p>By default, the <code>flux</code> manager only matches <code>**/gotk-components.y(a)ml</code>. So it only checks system manifest files generated by the <code>flux bootstrap</code> command.</p> <p>This is because there is no commonly accepted file/directory naming convention for Flux manifests and we don't want to check every single <code>*.yaml</code> file in repositories just in case some of them have Flux definitions.</p> <p>If most <code>.yaml</code> files in your repository are Flux manifests, then you could add this to your config:</p> <pre><code>{\n  \"flux\": {\n    \"managerFilePatterns\": [\"/\\\\.yaml$/\"]\n  }\n}\n</code></pre> <p>If instead you have all your Flux manifests inside a <code>flux/</code> directory, you would add this:</p> <pre><code>{\n  \"flux\": {\n    \"managerFilePatterns\": [\"/flux/.+\\\\.yaml$/\"]\n  }\n}\n</code></pre>"},{"location":"modules/manager/flux/#versioning","title":"Versioning","text":"<p>If you need to change the versioning format, read the versioning documentation to learn more.</p>"},{"location":"modules/manager/fvm/","title":"Automated Dependency Updates for FVM","text":"<p>Categories: <code>dart</code></p> <p>Renovate supports updating FVM dependencies.</p>"},{"location":"modules/manager/fvm/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>/(^|/)\\.fvm/fvm_config\\.json$/\n/(^|/)\\.fvmrc$/\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/fvm/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>flutter-version</code>.</p>"},{"location":"modules/manager/fvm/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/fvm/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)\\\\.fvm/fvm_config\\\\.json$/\",\n    \"/(^|/)\\\\.fvmrc$/\"\n  ],\n  \"versioning\": \"semver\"\n}\n</code></pre>"},{"location":"modules/manager/fvm/#additional-information","title":"Additional Information","text":"<p>Keeps the <code>.fvmrc</code> file or older <code>.fvm/fvm_config.json</code> file updated.</p>"},{"location":"modules/manager/git-submodules/","title":"Automated Dependency Updates for Git Submodules","text":"<p>Categories: <code>no-category</code></p> <p>Renovate supports updating Git Submodules dependencies.</p>"},{"location":"modules/manager/git-submodules/#enabling","title":"Enabling","text":"<p>Git Submodules functionality is currently in beta testing, so you must opt-in to test it. To enable it, add a configuration like this to either your self-hosted config or your <code>renovate.json</code>:</p> <pre><code>{\n  \"git-submodules\": {\n    \"enabled\": true\n  }\n}\n</code></pre> <p>If you find any bugs, please create a new discussion first. If you find that it works well, then let us know too.</p>"},{"location":"modules/manager/git-submodules/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)\\.gitmodules$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/git-submodules/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>git-refs</code>.</p>"},{"location":"modules/manager/git-submodules/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/git-submodules/#default-config","title":"Default config","text":"<pre><code>{\n  \"enabled\": false,\n  \"versioning\": \"git\",\n  \"managerFilePatterns\": [\n    \"/(^|/)\\\\.gitmodules$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/git-submodules/#additional-information","title":"Additional Information","text":"<p>Keeps Git submodules updated within a repository.</p> <p>You can customize the per-submodule checks of the git-submodules manager like this:</p> <pre><code>{\n  \"ignoreDeps\": [\"path/to/submodule\", \"path/to/submodule2\"],\n  \"git-submodules\": {\n    \"enabled\": true\n  }\n}\n</code></pre>"},{"location":"modules/manager/git-submodules/#updating-to-specific-tag-values","title":"Updating to Specific Tag Values","text":"<p>If you want to update your Git submodules to a specific tag, you can set the desired tag as the <code>branch</code> in your <code>.gitmodules</code> file. Renovate will then automatically update this version to the latest Git branch or tag which satisfies your versioning scheme.</p> <pre><code>[submodule \"renovate\"]\n  path = deps/renovate\n  url = https://github.com/renovatebot/renovate.git\n  branch = v0.0.1\n</code></pre> <p>Note: Using this approach will disrupt the native git submodule update experience when using <code>git submodule update --remote</code>. You may encounter an error like <code>fatal: Unable to find refs/remotes/origin/v0.0.1 revision in submodule path...</code> because Git can only update submodules when tracking a branch. To manually update the submodule, navigate to the submodule directory and run the following commands: <code>git fetch &amp;&amp; git checkout &lt;new tag&gt;</code>.</p>"},{"location":"modules/manager/git-submodules/#private-modules-authentication","title":"Private Modules Authentication","text":"<p>Before running the <code>git</code> commands to update the submodules, Renovate exports <code>git</code> <code>insteadOf</code> directives in environment variables.</p> <p>The following logic is executed prior to \"submodules\" updating:</p> <p>The token from the <code>hostRules</code> entry matching <code>hostType=github</code> and <code>matchHost=api.github.com</code> is added as the default authentication for <code>github.com</code>. For those running against <code>github.com</code>, this token will be the default platform token.</p> <p>Next, all <code>hostRules</code> with both a token or username/password and <code>matchHost</code> will be fetched, except for any github.com one from above.</p> <p>Rules from this list are converted to environment variable directives if they match any of the following characteristics:</p> <ul> <li>No <code>hostType</code> is defined, or</li> <li><code>hostType</code> is <code>git-tags</code> or <code>git-refs</code>, or</li> <li><code>hostType</code> is a platform (<code>github</code>, <code>gitlab</code>, <code>azure</code>, etc.)</li> </ul>"},{"location":"modules/manager/github-actions/","title":"Automated Dependency Updates for GitHub Actions","text":"<p>Categories: <code>ci</code></p> <p>Renovate supports updating GitHub Actions dependencies.</p>"},{"location":"modules/manager/github-actions/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>/(^|/)(workflow-templates|\\.(?:github|gitea|forgejo)/(?:workflows|actions))/.+\\.ya?ml$/\n/(^|/)action\\.ya?ml$/\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/github-actions/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>gitea-tags</code>, <code>github-digest</code>, <code>github-runners</code>, <code>github-tags</code>, <code>rust-version</code>.</p>"},{"location":"modules/manager/github-actions/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>action</code> A repository-based action reference in a <code>uses:</code> field (e.g. <code>actions/checkout@v4</code>) <code>workflow</code> A reusable workflow referenced in a job-level <code>uses:</code> field (e.g. <code>owner/repo/.github/workflows/release.yml@v1</code>) <code>docker</code> A Docker image reference in a <code>uses:</code> field (e.g. <code>uses: docker://alpine:3</code>), or in the <code>runs.image:</code> field of a Docker container action (e.g. <code>image: docker://alpine:3</code>) <code>container</code> A Docker image specified in a job's <code>container:</code> field <code>service</code> A Docker image specified in a job's <code>services:</code> field <code>github-runner</code> A GitHub-hosted runner version in a <code>runs-on:</code> field (e.g. <code>ubuntu-24.04</code>) <code>uses-with</code> A language/runtime version passed as an input to a versioned action (e.g. <code>node-version</code> for <code>actions/setup-node</code>)"},{"location":"modules/manager/github-actions/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)(workflow-templates|\\\\.(?:github|gitea|forgejo)/(?:workflows|actions))/.+\\\\.ya?ml$/\",\n    \"/(^|/)action\\\\.ya?ml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/github-actions/#additional-information","title":"Additional Information","text":"<p>The <code>github-actions</code> manager extracts dependencies from GitHub Actions workflow and workflow template files. It can also be used for Gitea and Forgejo Actions workflows as such are compatible with GitHub Actions workflows.</p>"},{"location":"modules/manager/github-actions/#digest-pinning-and-updating","title":"Digest pinning and updating","text":"<p>If you like to use digest pinning but want to follow the action version tag, you can use the sample below:</p> <pre><code>name: build\n\non: [push]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0\n</code></pre> <p>Renovate will update the commit SHA according to the GitHub tag you specified. Renovate can update digests that use SHA1 and SHA256 algorithms. The GitHub tag is in the format of <code>&lt;PREFIX&gt;&lt;SEPARATOR&gt;&lt;VERSION&gt;</code>. <code>PREFIX</code> and <code>SEPARATOR</code> are optional. Valid separators are the ASCII hyphen (<code>-</code>) or forward slash (<code>/</code>). <code>VERSION</code> can include the major, minor, and patch components and may optionally include a <code>v</code> prefix. Here are the examples of valid GitHub tags: <code>1.0.1</code>, <code>1.0</code>, <code>1</code>, <code>v1.0.1</code>, <code>v1.0</code>, <code>v1</code>, <code>prefix-1.0.1</code>, <code>prefix-1.0</code>, <code>prefix-1</code>, <code>prefix-v1.0.1</code>, <code>prefix-v1.0</code>, <code>prefix-v1</code>. <code>prefix/1.0.1</code>, <code>prefix/1.0</code>, <code>prefix/1</code>, <code>prefix/v1.0.1</code>, <code>prefix/v1.0</code>, <code>prefix/v1</code>.</p> <p>If you want to automatically pin action digests add the <code>helpers:pinGitHubActionDigests</code> preset to the <code>extends</code> array:</p> <pre><code>{\n  \"extends\": [\"helpers:pinGitHubActionDigests\"]\n}\n</code></pre> <p>Actions pinned to a bare SHA without a version comment are disabled by default, because Renovate cannot determine which branch or tag the SHA belongs to. To enable updates, add a tag or branch name as a version comment, as shown above.</p>"},{"location":"modules/manager/github-actions/#reusable-workflows","title":"Reusable workflows","text":"<p>A job-level <code>uses:</code> which points at <code>owner/repo/.github/workflows/&lt;file&gt;.yml@&lt;ref&gt;</code> calls a reusable workflow instead of running an action, so Renovate gives it the <code>workflow</code> <code>depType</code>. Every other <code>uses:</code> reference to a repository keeps the <code>action</code> <code>depType</code>, including an action in a subdirectory such as <code>github/codeql-action/init@v3</code>.</p> <p>Use <code>matchDepTypes</code> to configure the two separately. For example, to keep pinning action digests but leave reusable workflow calls on their tag:</p> <pre><code>{\n  \"extends\": [\"helpers:pinGitHubActionDigests\"],\n  \"packageRules\": [\n    {\n      \"matchDepTypes\": [\"workflow\"],\n      \"pinDigests\": false\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/manager/github-actions/#github-actions-lockfile-actionslock","title":"GitHub Actions lockfile (<code>actions.lock</code>)","text":"<p>This feature is flagged as experimental</p> <p>Experimental features might be changed at any time.   Due to GitHub classing this functionality as a \"public preview\", there may be changes to Renovate's functionality - in a possibly breaking manner - while GitHub work to stabilise the feature.</p> <p>Renovate keeps the GitHub Actions dependency lockfile in sync. The lockfile is an alternative to inline digest pinning: your workflows keep readable tags like <code>actions/checkout@v4.3.1</code>, and <code>.github/workflows/actions.lock</code> records the commit each tag resolved to.</p> <p>If the repository has a <code>.github/workflows/actions.lock</code>, then Renovate regenerates it whenever it updates an action. Renovate installs the <code>gh-actions-lock</code> extension for the <code>gh</code> CLI, and runs <code>gh actions-lock</code> once per branch, from the repository root, after writing every updated workflow:</p> <pre><code>gh extension install github/gh-actions-lock --pin &lt;version&gt; --force\ngh actions-lock --no-interactive --no-onboard --no-narrow --ignore-local-actions --json=findings\n</code></pre> <p>Renovate invokes <code>gh actions-lock</code> in a way that keeps the diff to the dependency being updated, by re-resolving only the refs which have changed, along with anything new they pull in transitively. Every other pin stays as locked, including floating refs (like <code>@v4</code>) which have since moved upstream. For a <code>ghActionsLock</code> constraint below v0.3.0, Renovate passes <code>--relock</code> (which also advances moved floating refs) and <code>--no-migrate-local-actions</code> instead of <code>--ignore-local-actions</code>. With <code>binarySource=global</code>, Renovate assumes the installed extension is v0.3.0 or later.</p> <ul> <li><code>--no-interactive</code>: don't hang, expecting an interactive terminal to answer prompts</li> <li><code>--no-onboard</code>: only update workflows and actions which the lockfile already tracks, so an update pull request does not add unrelated workflows. Onboard them yourself by running <code>gh actions-lock</code>. Renovate omits this flag when an update replaces an action with a different one, as the lockfile has to learn about the new action</li> <li><code>--no-narrow</code>: don't narrow a floating ref like <code>@v4</code> to <code>@v4.2.1</code>, which would contradict the version in the pull request</li> <li><code>--ignore-local-actions</code>: don't migrate same-repo <code>uses: ./\u2026</code> references to the <code>uses: $/\u2026</code> form, and only warn when such a local action uses remote actions, which the lockfile cannot record</li> <li><code>--json=findings</code>: print the findings as JSON, so that when <code>gh actions-lock</code> fails, Renovate reports each error finding on its own line, with the affected workflow and action, instead of the raw output</li> </ul> <p>You do not need to configure anything: if there's no <code>actions.lock</code> file, then there's nothing to update. Workflows which are not onboarded to the lockfile are skipped. Local composite actions are still regenerated, as they can be transitive dependencies of a workflow which is onboarded.</p> <p>Note</p> <p>The lockfile is an alternative to inline digest pinning: your workflows keep readable tags like <code>actions/checkout@v4.3.1</code>, and <code>.github/workflows/actions.lock</code> records the commit each tag resolved to.  When updating the lockfile, <code>gh actions-lock</code> replaces digest pinned GitHub Actions to the version reference:</p> <pre><code>-uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0\n+uses: actions/setup-java@v5.7.0\n</code></pre> <p>Digests that are already pinned will be updated by Renovate, until they are removed by <code>gh actions-lock</code>.  This does not apply if your organization or repository enables the Require actions to be pinned to a full-length commit SHA policy, found in your Actions settings. If this is enabled, <code>gh actions-lock</code> leaves the digests in place, so your workflows stay digest pinned and Renovate carries on updating them.</p> <p>Renovate pins the version of the <code>actions-lock</code> extension to provide deterministic updates, which is then bumped in a later Renovate release.</p> <p>To use a different version, set the <code>ghActionsLock</code> constraint:</p> <pre><code>{\n  \"constraints\": {\n    \"ghActionsLock\": \"v0.4.0\"\n  }\n}\n</code></pre> <p>The version must be a full release tag, as in the example above.</p> <p>Because <code>constraints</code> is mergeable, setting <code>\"constraints\": {}</code> does not remove the pin: set the value to an empty string to always install the latest extension.</p> <pre><code>{\n  \"constraints\": {\n    \"ghActionsLock\": \"\"\n  }\n}\n</code></pre> <p>You can also control the <code>gh</code> CLI version using <code>constraints.gh</code>.</p> <p>Note</p> <p>With <code>binarySource=global</code>, Renovate does not install or re-pin the extension, as Renovate uses the tools installed by your administrator's deployment.  Both <code>gh</code> and the <code>gh-actions-lock</code> extension must already be available, and specifying <code>ghActionsLock</code> and <code>gh</code> in your repository's <code>constraints</code> will be ignored.  Pin the extension when you provision your image:</p> <pre><code>gh extension install github/gh-actions-lock --pin v0.1.6\n</code></pre> <p>Note</p> <p><code>gh actions-lock</code> resolves refs and repository IDs through the GitHub API, so it needs a token. Renovate takes the token from the <code>github</code> host rule matching your platform endpoint, and passes it as <code>GH_TOKEN</code>. On GitHub Enterprise Server Renovate passes that token using <code>GH_ENTERPRISE_TOKEN</code> and <code>GH_HOST</code>, and additionally passes the token from your <code>github.com</code> host rule as <code>GH_TOKEN</code>, because public actions are still resolved against <code>github.com</code>.</p>"},{"location":"modules/manager/github-actions/#non-semver-refs-branches-and-feature-tags","title":"Non-semver refs (branches and feature tags)","text":"<p>Renovate supports GitHub Actions that reference non-semver refs like branch names (<code>main</code>, <code>master</code>) or feature-oriented tags (<code>cargo-llvm-cov</code>).</p> <p>When the action reference doesn't look like a version number (i.e., doesn't match <code>/^v?\\d+/</code>), Renovate routes to the <code>github-digest</code> datasource which fetches both tags and branches. Since these refs have no version ordering, only digest pinning updates are supported.</p> <p>Routing logic:</p> <ul> <li><code>actions/checkout@v4.2.0</code> \u2192 <code>github-tags</code> datasource (version updates)</li> <li><code>actions/checkout@v4</code> \u2192 <code>github-tags</code> datasource (version updates)</li> <li><code>taiki-e/install-action@cargo-llvm-cov</code> \u2192 <code>github-digest</code> datasource (digest pinning only)</li> <li><code>actions/checkout@main</code> \u2192 <code>github-digest</code> datasource (digest pinning only)</li> </ul> <p>When pinning, Renovate adds a comment to preserve the original ref:</p> <pre><code>- uses: taiki-e/install-action@d8c10dae823f48238abff23fee4146b448aed2f1 # cargo-llvm-cov\n</code></pre> <p>Non-semver ref support is currently limited to GitHub-hosted actions. Gitea and Forgejo support the same ref types, but Renovate does not yet handle them for these platforms.</p>"},{"location":"modules/manager/github-actions/#steps-nested-in-parallel-blocks","title":"Steps nested in <code>parallel:</code> blocks","text":"<p>Renovate extracts dependencies from steps nested inside a <code>parallel:</code> block, just as it does for regular sequential steps. This includes both the action reference itself and any supported <code>with:</code> version inputs.</p> <pre><code>jobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - parallel:\n          - uses: actions/setup-node@v5\n            with:\n              node-version: '20.0.0'\n          - uses: actions/setup-go@v5\n            with:\n              go-version: '1.23'\n</code></pre>"},{"location":"modules/manager/github-actions/#docker-container-actions","title":"Docker container actions","text":"<p>For a Docker container action, Renovate extracts the image from <code>runs.image</code>:</p> <pre><code>runs:\n  using: 'docker'\n  image: 'docker://ghcr.io/ossf/scorecard-action:v2.5.0'\n</code></pre> <p>Renovate can also pin and update the image's digest:</p> <pre><code>runs:\n  using: 'docker'\n  image: 'docker://ghcr.io/ossf/scorecard-action:v2.5.0@sha256:1e1481c65fc2407d3fd6ab18a23c741eb4d1c0d9359ebafc4b3ab13aa61d8627'\n</code></pre> <p>Renovate ignores a <code>runs.image</code> which points at a local <code>Dockerfile</code>.</p>"},{"location":"modules/manager/github-actions/#non-support-of-variables","title":"Non-support of Variables","text":"<p>Renovate ignores any GitHub runners which are configured in variables. For example, Renovate ignores the runner configured in the <code>RUNNER</code> variable:</p> <pre><code>name: build\non: [push]\n\nenv:\n  RUNNER: ubuntu-22.04\n\njobs:\n  build:\n    runs-on: ${{ env.RUNNER }}\n</code></pre>"},{"location":"modules/manager/github-actions/#ratchet-support","title":"Ratchet support","text":"<p>The <code>github-action</code> manager understands <code>ratchet</code> comments, like <code># ratchet:actions/checkout@v2.1.0</code>. This means that Renovate will:</p> <ul> <li>update the version of a pinned Ratchet version if needed</li> <li>not delete Ratchet comments after parsing them</li> <li>keep <code># ratchet:exclude</code> comments</li> </ul>"},{"location":"modules/manager/github-actions/#updating-with-values-in-github-actions","title":"Updating <code>with:</code> values in GitHub Actions","text":"<p>Both GitHub's own first-party Actions and Actions maintained by the wider community will commonly specify a version of a given tool using a <code>with:</code> block, such as:</p> <pre><code>steps:\n  - uses: actions/setup-node@v5\n    with:\n      node-version: '22.0.0'\n\n- uses: astral-sh/setup-uv@v10.3.2\n  with:\n    version: '0.4.x'\n</code></pre> <p>Renovate supports extracting some of these input(s) from the following Actions, and performing automagic dependency updates accordingly.</p> <p>A single step can yield more than one dependency. For example, <code>pnpm/setup</code> declares both the pnpm version and the JavaScript runtime to install:</p> <pre><code>steps:\n  - uses: pnpm/setup@v1\n    with:\n      version: '12.0.0'\n      runtime: 'node@24.1.0'\n</code></pre> <p>The following 90 Actions have support for their <code>with</code>: blocks:</p> Action <code>with</code> input(s) used Dependency Default versioning <code>zizmorcore/zizmor-action</code> <code>version</code> <code>ghcr.io/zizmorcore/zizmor</code> (Default)<sup>1</sup> <code>aws-actions/amazon-ecs-render-task-definition</code> <code>image</code> (determined from <code>with</code> input(s)) (Default)<sup>1</sup> <code>renovatebot/github-action</code> <code>renovate-version</code>, <code>renovate-image</code> (determined from <code>with</code> input(s)) (Default)<sup>1</sup> <code>dart-lang/setup-dart</code> <code>sdk</code> <code>dart</code> (Default)<sup>1</sup> <code>actions/setup-dotnet</code> <code>dotnet-version</code> <code>dotnet-sdk</code> <code>npm</code> <code>actions/setup-go</code> <code>go-version</code> <code>go</code> <code>npm</code> <code>actions/setup-node</code> <code>node-version</code> <code>node</code> <code>node</code> <code>actions/setup-python</code> <code>python-version</code> <code>python</code> <code>npm</code> <code>aquaproj/aqua-installer</code> <code>aqua_version</code> <code>aqua</code> (Default)<sup>1</sup> <code>aquasecurity/setup-trivy</code> <code>version</code> <code>aquasecurity/trivy</code> (Default)<sup>1</sup> <code>aquasecurity/trivy-action</code> <code>version</code> <code>aquasecurity/trivy</code> (Default)<sup>1</sup> <code>astral-sh/ruff-action</code> <code>version</code> <code>ruff</code> (Default)<sup>1</sup> <code>astral-sh/setup-uv</code> <code>version</code> <code>astral-sh/uv</code> <code>npm</code> <code>azure/setup-helm</code> <code>version</code> <code>helm</code> (Default)<sup>1</sup> <code>azure/setup-kubectl</code> <code>version</code> <code>kubectl</code> (Default)<sup>1</sup> <code>bufbuild/buf-setup-action</code> <code>version</code> <code>buf</code> (Default)<sup>1</sup> <code>cargo-bins/cargo-binstall</code> <code>version</code> <code>cargo-bins/cargo-binstall</code> (Default)<sup>1</sup> <code>cue-lang/setup-cue</code> <code>version</code> <code>cue</code> (Default)<sup>1</sup> <code>dagger/dagger-for-github</code> <code>version</code> <code>dagger</code> (Default)<sup>1</sup> <code>denoland/setup-deno</code> <code>deno-version</code> <code>deno</code> <code>npm</code> <code>docker/setup-buildx-action</code> <code>version</code> <code>buildx</code> (Default)<sup>1</sup> <code>docker/setup-compose-action</code> <code>version</code> <code>docker/compose</code> (Default)<sup>1</sup> <code>docker/setup-docker-action</code> <code>version</code> <code>docker</code> (Default)<sup>1</sup> <code>extractions/setup-just</code> <code>just-version</code> <code>just</code> (Default)<sup>1</sup> <code>fluxcd/flux-mirror/actions/setup</code> <code>version</code> <code>flux-mirror</code> (Default)<sup>1</sup> <code>foundry-rs/foundry-toolchain</code> <code>version</code> <code>foundry</code> (Default)<sup>1</sup> <code>github/gh-aw-actions/setup-cli</code> <code>version</code> <code>github/gh-aw</code> (Default)<sup>1</sup> <code>GitTools/actions/gitversion/setup</code> <code>versionSpec</code> <code>gitversion</code> <code>npm</code> <code>golangci/golangci-lint-action</code> <code>version</code> <code>golangci/golangci-lint</code> (Default)<sup>1</sup> <code>goreleaser/goreleaser-action</code> <code>version</code> <code>goreleaser/goreleaser</code> <code>npm</code> <code>hashicorp/setup-packer</code> <code>version</code> <code>packer</code> (Default)<sup>1</sup> <code>hashicorp/setup-terraform</code> <code>terraform_version</code> <code>terraform</code> <code>npm</code> <code>helm/chart-releaser-action</code> <code>version</code> <code>chart-releaser</code> (Default)<sup>1</sup> <code>helm/chart-testing-action</code> <code>version</code> <code>chart-testing</code> (Default)<sup>1</sup> <code>j178/prek-action</code> <code>prek-version</code> <code>prek</code> <code>npm</code> <code>jfrog/setup-jfrog-cli</code> <code>version</code> <code>jfrog-cli</code> (Default)<sup>1</sup> <code>julia-actions/setup-julia</code> <code>version</code> <code>julia</code> <code>npm</code> <code>jwlawson/actions-setup-cmake</code> <code>cmake-version</code> <code>cmake</code> <code>npm</code> <code>mozilla-actions/sccache-action</code> <code>version</code> <code>sccache</code> (Default)<sup>1</sup> <code>opentofu/setup-opentofu</code> <code>tofu_version</code> <code>opentofu</code> <code>npm</code> <code>peaceiris/actions-hugo</code> <code>hugo-version</code> <code>hugo</code> (Default)<sup>1</sup> <code>prefix-dev/setup-pixi</code> <code>pixi-version</code> <code>prefix-dev/pixi</code> <code>semver</code> <code>pulumi/actions</code> <code>pulumi-version</code> <code>pulumi</code> (Default)<sup>1</sup> <code>pypa/hatch</code> <code>version</code> <code>pypa/hatch</code> (Default)<sup>1</sup> <code>raven-actions/actionlint</code> <code>version</code> <code>actionlint</code> (Default)<sup>1</sup> <code>reviewdog/action-setup</code> <code>reviewdog_version</code> <code>reviewdog</code> (Default)<sup>1</sup> <code>sigstore/cosign-installer</code> <code>cosign-release</code> <code>sigstore/cosign</code> (Default)<sup>1</sup> <code>slsa-framework/actions/attest/actions</code> <code>version</code> <code>slsa-framework/attester</code> (Default)<sup>1</sup> <code>slsa-framework/actions/slsa_with_provenance</code> <code>version</code> <code>slsa-framework/source-tool</code> (Default)<sup>1</sup> <code>stCarolas/setup-maven</code> <code>maven-version</code> <code>maven</code> <code>npm</code> <code>subosito/flutter-action</code> <code>flutter-version</code> <code>flutter</code> <code>npm</code> <code>superfly/flyctl-actions/setup-flyctl</code> <code>version</code> <code>flyctl</code> (Default)<sup>1</sup> <code>swift-actions/setup-swift</code> <code>swift-version</code> <code>swift</code> (Default)<sup>1</sup> <code>UpCloudLtd/upcloud-cli-action</code> <code>version</code> <code>UpCloudLtd/upcloud-cli</code> (Default)<sup>1</sup> <code>WillAbides/setup-go-faster</code> <code>go-version</code> <code>go</code> <code>npm</code> <code>conda-incubator/setup-miniconda</code> <code>miniforge-version</code>, <code>python-version</code> (determined from <code>with</code> input(s)) (Default)<sup>1</sup> <code>crystal-lang/install-crystal</code> <code>crystal</code>, <code>shards</code> (determined from <code>with</code> input(s)) (Default)<sup>1</sup> <code>erlef/setup-beam</code> <code>otp-version</code>, <code>elixir-version</code>, <code>gleam-version</code>, <code>rebar3-version</code> (determined from <code>with</code> input(s)) (Default)<sup>1</sup> <code>jaxxstorm/action-install-gh-release</code> <code>repo</code>, <code>tag</code> (determined from <code>with</code> input(s)) (Default)<sup>1</sup> <code>moonrepo/setup-toolchain</code> <code>moon-version</code>, <code>proto-version</code> (determined from <code>with</code> input(s)) (Default)<sup>1</sup> <code>sigoden/install-binary</code> <code>repo</code>, <code>tag</code> (determined from <code>with</code> input(s)) (Default)<sup>1</sup> <code>slsa-framework/actions/install/verifier</code> <code>version</code>, <code>repo</code> (determined from <code>with</code> input(s)) (Default)<sup>1</sup> <code>slsa-framework/actions/verify/build</code> <code>version</code>, <code>repo</code> (determined from <code>with</code> input(s)) (Default)<sup>1</sup> <code>slsa-framework/actions/verify/source</code> <code>version</code>, <code>repo</code> (determined from <code>with</code> input(s)) (Default)<sup>1</sup> <code>slsa-framework/actions/verify/vsa</code> <code>version</code>, <code>repo</code> (determined from <code>with</code> input(s)) (Default)<sup>1</sup> <code>terraform-linters/setup-tflint</code> <code>tflint_version</code> <code>tflint</code> (Default)<sup>1</sup> <code>jdx/mise-action</code> <code>version</code>, <code>sha256</code> <code>jdx/mise</code> (Default)<sup>1</sup> <code>gradle/actions/setup-gradle</code> <code>gradle-version</code> <code>gradle</code> <code>gradle</code> <code>actions/setup-java</code> <code>distribution</code>, <code>java-version</code>, <code>java-package</code> (determined from <code>with</code> input(s)) (Default)<sup>1</sup> <code>biomejs/setup-biome</code> <code>version</code> <code>@biomejs/biome</code> (Default)<sup>1</sup> <code>cloudflare/wrangler-action</code> <code>wranglerVersion</code> <code>wrangler</code> (Default)<sup>1</sup> <code>cycjimmy/semantic-release-action</code> <code>semantic_version</code> <code>semantic-release</code> <code>npm</code> <code>expo/expo-github-action</code> <code>eas-version</code> <code>eas-cli</code> (Default)<sup>1</sup> <code>jakebailey/pyright-action</code> <code>version</code> <code>pyright</code> (Default)<sup>1</sup> <code>oven-sh/setup-bun</code> <code>bun-version</code> <code>bun</code> (Default)<sup>1</sup> <code>pnpm/action-setup</code> <code>version</code> <code>pnpm</code> (Default)<sup>1</sup> <code>supabase/setup-cli</code> <code>version</code> <code>supabase</code> (Default)<sup>1</sup> <code>abatilo/actions-poetry</code> <code>poetry-version</code> <code>poetry</code> (Default)<sup>1</sup> <code>pdm-project/setup-pdm</code> <code>version</code> <code>pdm</code> (Default)<sup>1</sup> <code>PyO3/maturin-action</code> <code>maturin-version</code> <code>maturin</code> (Default)<sup>1</sup> <code>snok/install-poetry</code> <code>version</code> <code>poetry</code> (Default)<sup>1</sup> <code>ruby/setup-ruby</code> <code>ruby-version</code> <code>ruby</code> (Default)<sup>1</sup> <code>dtolnay/rust-toolchain</code> <code>toolchain</code> <code>rust</code> (Default)<sup>1</sup> <code>moonrepo/setup-rust</code> <code>channel</code> <code>rust</code> (Default)<sup>1</sup> <code>actions-rust-lang/setup-rust-toolchain</code> <code>toolchain</code> <code>rust</code> (Default)<sup>1</sup> <code>baptiste0928/cargo-install</code> <code>crate</code>, <code>version</code> (determined from <code>with</code> input(s)) (Default)<sup>1</sup> <code>graalvm/setup-graalvm</code> <code>java-version</code>, <code>version</code> (determined from <code>with</code> input(s)) (Default)<sup>1</sup> <code>helm/kind-action</code> <code>version</code>, <code>node_image</code>, <code>kubectl_version</code> (determined from <code>with</code> input(s)) (Default)<sup>1</sup> <code>pnpm/setup</code> <code>version</code>, <code>runtime</code> <code>pnpm</code> (Default)<sup>1</sup> <code>voidzero-dev/setup-vp</code> <code>version</code>, <code>node-version</code> (determined from <code>with</code> input(s)) (Default)<sup>1</sup> <p><sup>1</sup> Default for the datasource used.</p> <p>Depending on your use case, you may need to change <code>versioning</code> manually. If you find a use case which you think Renovate could/should automatically detect and support without manual configuration, please raise Suggest an Idea Discussion.</p>"},{"location":"modules/manager/gitlabci/","title":"Automated Dependency Updates for GitLab CI/CD","text":"<p>Categories: <code>ci</code></p> <p>Renovate supports updating GitLab CI/CD dependencies.</p>"},{"location":"modules/manager/gitlabci/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/\\.gitlab-ci\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/gitlabci/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>, <code>gitlab-tags</code>.</p>"},{"location":"modules/manager/gitlabci/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>image</code> Docker image specified as a string <code>image-name</code> Docker image specified via the <code>name</code> property <code>service-image</code> Docker image used as a service <code>repository</code> A GitLab CI/CD component reference"},{"location":"modules/manager/gitlabci/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/\\\\.gitlab-ci\\\\.ya?ml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/gitlabci/#additional-information","title":"Additional Information","text":"<p>Extracts Docker dependencies from <code>gitlab-ci.yml</code> files.</p> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p> <p>If you use Gitlab Dependency Proxy then you can use these predefined variables as prefixes for your image:</p> <ul> <li><code>CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX</code></li> <li><code>CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX</code></li> </ul> <p>If you use predefined GitLab CI variables like <code>CI_REGISTRY</code> or <code>CI_SERVER_FQDN</code> make sure to configure their value via <code>registryAliases</code>:</p> <pre><code>{\n  \"registryAliases\": {\n    \"$CI_REGISTRY\": \"registry.example.com\",\n    \"$CI_SERVER_FQDN\": \"gitlab.example.com\",\n    \"$CI_SERVER_HOST\": \"gitlab.example.com\"\n  }\n}\n</code></pre> <p>Variables with default values (using the <code>:-</code> syntax) are also supported:</p> <pre><code>{\n  \"registryAliases\": {\n    \"${CI_REGISTRY:-}\": \"registry.example.com\"\n  }\n}\n</code></pre> <p>Both image reference formats work:</p> <ul> <li>With a slash after the variable: <code>${CI_REGISTRY:-}/image:1.0</code></li> <li>Without a slash after the variable: <code>${CI_REGISTRY:-}image:1.0</code></li> </ul> <p>The alias value works with or without a trailing slash.</p>"},{"location":"modules/manager/gitlabci-include/","title":"Automated Dependency Updates for GitLab CI/CD include","text":"<p>Categories: <code>ci</code></p> <p>Renovate supports updating GitLab CI/CD include dependencies.</p>"},{"location":"modules/manager/gitlabci-include/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/\\.gitlab-ci\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/gitlabci-include/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>gitlab-tags</code>.</p>"},{"location":"modules/manager/gitlabci-include/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>repository</code> GitLab project repository reference in a CI/CD <code>include</code> statement"},{"location":"modules/manager/gitlabci-include/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/\\\\.gitlab-ci\\\\.ya?ml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/gitlabci-include/#additional-information","title":"Additional Information","text":"<p>Extracts \"includes\" dependencies from <code>gitlab-ci.yml</code> files.</p>"},{"location":"modules/manager/glasskube/","title":"Automated Dependency Updates for Glasskube","text":"<p>Categories: <code>kubernetes</code>, <code>cd</code></p> <p>Renovate supports updating Glasskube dependencies.</p>"},{"location":"modules/manager/glasskube/#file-matching","title":"File Matching","text":"<p>Because file names for <code>glasskube</code> cannot be easily determined automatically, Renovate will not attempt to match any <code>glasskube</code> files by default. For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/glasskube/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>glasskube-packages</code>.</p>"},{"location":"modules/manager/glasskube/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/glasskube/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": []\n}\n</code></pre>"},{"location":"modules/manager/glasskube/#additional-information","title":"Additional Information","text":"<p>Extract version data from Packages/ClusterPackages and repository data from PackageRepositories.</p> <p>To use the <code>glasskube</code> manager you must set your own <code>managerFilePatterns</code> pattern. The <code>glasskube</code> manager has no default <code>managerFilePatterns</code> pattern, because there is no common filename or directory name convention for Glasskube YAML files. By setting your own <code>managerFilePatterns</code> Renovate avoids having to check each <code>*.yaml</code> file in a repository for a Glasskube definition.</p>"},{"location":"modules/manager/gleam/","title":"Automated Dependency Updates for Gleam","text":"<p>Categories: <code>elixir</code></p> <p>Renovate supports updating Gleam dependencies.</p>"},{"location":"modules/manager/gleam/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)gleam.toml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/gleam/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>hex</code>.</p>"},{"location":"modules/manager/gleam/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>dependencies</code> Listed under <code>dependencies</code> <code>devDependencies</code> Listed under <code>dev-dependencies</code>"},{"location":"modules/manager/gleam/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)gleam.toml$/\"\n  ],\n  \"versioning\": \"hex\"\n}\n</code></pre>"},{"location":"modules/manager/gleam/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>manifest.toml</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/gleam/#additional-information","title":"Additional Information","text":"<p>Renovate can update <code>gleam.toml</code> and/or <code>manifest.toml</code> files.</p>"},{"location":"modules/manager/gleam/#how-renovate-updates-gleamtoml-files","title":"How Renovate updates <code>gleam.toml</code> files","text":"<p>The <code>gleam</code> manager extracts dependencies for the <code>hex</code> datasource, and uses Renovate's implementation of Hex SemVer to evaluate <code>gleam.toml</code> updates.</p>"},{"location":"modules/manager/gleam/#how-renovate-updates-manifesttoml-files","title":"How Renovate updates <code>manifest.toml</code> files","text":"<p>The <code>gleam</code> manager uses the <code>gleam</code> program to update <code>manifest.toml</code> files.</p>"},{"location":"modules/manager/gleam/#enable-lockfilemaintenance","title":"Enable <code>lockFileMaintenance</code>","text":"<p>We recommend you set <code>lockFileMaintenance</code> to <code>true</code> for the <code>gleam</code> manager, in your Renovate config. This way Renovate can update all your dependencies, including those with in-range updates.</p> <p><code>lockFileMaintenance=true</code> periodically refreshes your <code>manifest.toml</code> files, ensuring all dependencies are updated to their latest allowed versions.</p>"},{"location":"modules/manager/gleam/#default-rangestrategyauto-behavior","title":"Default <code>rangeStrategy=auto</code> behavior","text":"<p>Renovate's default <code>rangeStrategy</code> is <code>\"auto\"</code>. Here's how <code>\"auto\"</code> works with the <code>gleam</code> manager:</p> Version type New version Old range New range after update What Renovate does Complex range <code>0.16.0</code> <code>&gt;= 0.14.0 and &lt; 0.15.0</code> <code>&gt;= 0.14.0 and &lt; 0.16.1</code> Widen range to include the new version. Simple range <code>0.39.0</code> <code>&lt;= 0.38.0</code> <code>&lt;= 0.39.0</code> If update outside current range: widens range to include the new version. Exact version constraint <code>0.13.0</code> <code>== 0.12.0</code> <code>== 0.13.0</code> Replace old version with new version."},{"location":"modules/manager/gleam/#recommended-rangestrategy-for-apps-and-libraries","title":"Recommended <code>rangeStrategy</code> for apps and libraries","text":"<p>For applications, we recommend using <code>rangeStrategy=pin</code>. This pins your dependencies to exact versions, which is generally considered best practice for apps.</p> <p>For libraries, use <code>rangeStrategy=widen</code> with version ranges in your <code>gleam.toml</code>. This allows for greater compatibility with other projects that may use your library as a dependency.</p>"},{"location":"modules/manager/gomod/","title":"Automated Dependency Updates for Go Modules","text":"<p>Categories: <code>golang</code></p> <p>Renovate supports updating Go Modules dependencies.</p>"},{"location":"modules/manager/gomod/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)go\\.mod$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/gomod/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>go</code>, <code>golang-version</code>.</p>"},{"location":"modules/manager/gomod/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>golang</code> The <code>go</code> directive specifying the minimum version of Go that the code is source compatible with <code>toolchain</code> The <code>toolchain</code> directive specifying the Go toolchain version <code>require</code> A direct module dependency <code>indirect</code> An indirect (transitive) module dependency <code>replace</code> A module replacement directive <code>tool</code> A tool dependency using Go 1.24+'s <code>tool</code> directive"},{"location":"modules/manager/gomod/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)go\\\\.mod$/\"\n  ],\n  \"pinDigests\": false\n}\n</code></pre>"},{"location":"modules/manager/gomod/#additional-information","title":"Additional Information","text":""},{"location":"modules/manager/gomod/#updating-of-go-mod-and-toolchain-directives","title":"Updating of Go mod and toolchain directives","text":"<p>In <code>go.mod</code>, the <code>go</code> directive essentially means \"Compatible with this version or later\". It is generally recommended for Go projects to not bump this version unless necessary, and therefore Renovate's default behavior is not to propose upgrades to it. If you need to update it once or irregularly, it's recommended to do it manually. If you are sure you want to always bump it to latest, then you need the following configuration:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchManagers\": [\"gomod\"],\n      \"matchDepNames\": [\"go\"],\n      \"matchDepTypes\": [\"golang\"],\n      \"rangeStrategy\": \"bump\"\n    }\n  ]\n}\n</code></pre> <p>In <code>go.mod</code>, the <code>toolchain</code> directive essentially means \"Use this exact version of go\". Unlike the <code>go</code> directive, it's valid to keep bumping this, and you should see updates to it proposed by default.</p>"},{"location":"modules/manager/gomod/#only-suggesting-updates-that-match-your-go-directive","title":"Only suggesting updates that match your <code>go</code> directive","text":"<p>In <code>go.mod</code>, the <code>go</code> directive essentially means \"Compatible with this version or later\". It is generally recommended for Go projects to not bump this version unless necessary.</p> <p>As noted above, Renovate doesn't update this directly, but dependency updates can lead to a package you rely on bumping their <code>go</code> directive, which means you can't accept the proposed update without also bumping your <code>go</code> directive.</p> <p>To make this simpler, you can use <code>constraintsFiltering=strict</code> to make sure that Renovate will only propose updates that match the <code>constraints</code> you specify.</p> <p>For example, given the <code>go.mod</code>:</p> <pre><code>module example\n\ngo 1.24.0\n\nrequire golang.org/x/mod v0.32.0\n</code></pre> <p>We can then configure Renovate to set the same constraint when updating any Go dependencies:</p> <pre><code>{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"packageRules\": [\n    {\n      \"description\": \"Ensure source compatibility with Go version used by this project\",\n      \"matchManagers\": [\"gomod\"],\n      \"constraintsFiltering\": \"strict\"\n    }\n  ]\n}\n</code></pre> <p>In this case, Renovate would only propose an update to a version of <code>golang.org/x/mod</code> that supports Go 1.24.x.</p> <p>Note</p> <p>It is recommended to read the <code>constraintsFiltering</code> documentation and Language constraints and upgrading for more information about how the filtering works and how strict this can be.</p>"},{"location":"modules/manager/gomod/#post-update-options","title":"Post-Update Options","text":"<p>You might be interested in the following <code>postUpdateOptions</code>:</p> <ol> <li><code>gomodTidy</code> - if you'd like Renovate to run <code>go mod tidy</code> after every update before raising the PR</li> <li>This is implicitly enabled for major updates if the user has enabled the option <code>gomodUpdateImportPaths</code></li> <li><code>gomodTidy1.17</code> - if you'd like Renovate to run <code>go mod tidy -compat=1.17</code> after every update before raising the PR</li> <li><code>gomodTidyE</code> - if you'd like Renovate to run <code>go mod tidy -e</code> after every update before raising the PR</li> <li><code>gomodTidyAll</code> - if you'd like Renovate to also run <code>go mod tidy</code> on every other module which depends on the updated one through a local <code>replace</code> directive<ul> <li>This implies <code>gomodTidy</code>, needs Go 1.20 or later, and should not be combined with <code>gomodMassage</code></li> </ul> </li> <li><code>gomodUpdateImportPaths</code> - if you'd like Renovate to update your source import paths on major updates before raising the PR</li> <li><code>gomodMassage</code> - to enable massaging of all <code>replace</code> statements prior to running <code>go</code> so that they will be ignored</li> <li><code>goGenerate</code> - to run <code>go generate ./...</code> after vendoring.<ul> <li>Will only run if the <code>allowedUnsafeExecutions</code> global option includes <code>goGenerate</code></li> <li>This will not install any additional tools required to run <code>go generate</code>, you can use tools as one option</li> <li>If <code>gomodTidy</code> is not set, you may encounter failures in the Go toolchain due to <code>missing go.sum entry</code></li> </ul> </li> </ol> <p>When Renovate is running using <code>binarySource=install</code> (such as in the Mend Renovate App) then it will pick the latest compatible version of Go to run, i.e. the latest <code>1.x</code> release. Even if the <code>go.mod</code> has a version like <code>go 1.22</code>, Renovate will treat it as a <code>^1.22</code> constraint and not <code>=1.22</code>.</p> <p>Unless matching <code>tool</code> directives exist, indirect updates are disabled by default. To enable them, add a package rule such as:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchManagers\": [\"gomod\"],\n      \"matchDepTypes\": [\"indirect\"],\n      \"enabled\": true\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/manager/gomod/#private-modules-authentication","title":"Private Modules Authentication","text":"<p>Before running the <code>go</code> commands to update the <code>go.sum</code>, Renovate exports <code>git</code> <code>insteadOf</code> directives in environment variables.</p> <p>The following logic is executed prior to \"artifacts\" updating:</p> <p>The token from the <code>hostRules</code> entry matching <code>hostType=github</code> and <code>matchHost=api.github.com</code> is added as the default authentication for <code>github.com</code>. For those running against <code>github.com</code>, this token will be the default platform token.</p> <p>Next, all <code>hostRules</code> with both a token or username/password and <code>matchHost</code> will be fetched, except for any github.com one from above.</p> <p>Rules from this list are converted to environment variable directives if they match any of the following characteristics:</p> <ul> <li>No <code>hostType</code> is defined, or</li> <li><code>hostType</code> is <code>go</code>, or</li> <li><code>hostType</code> is a platform (<code>github</code>, <code>gitlab</code>, <code>azure</code>, etc.)</li> </ul>"},{"location":"modules/manager/gomod/#major-upgrades-of-dependencies","title":"Major upgrades of dependencies","text":"<p>Major upgrades in Go are different from most other ecosystems, because both the version and module name need to be changed. It is very common that such upgrades require changes to application code, which Renovate doesn't do.</p> <p>By default, Renovate will make such change in the <code>go.mod</code> files but nothing else - the rest is up to you. If you add <code>gomodUpdateImportPaths</code> to <code>postUpdateOptions</code> then Renovate will also use a third-party tool to migrate import paths within application code, but there may still be actual application logic which needs to be changed too.</p> <p>Ultimately: it is known and unavoidable that the majority of major Go upgrades won't be immediately mergeable. You might prefer to configure such major updates with <code>dependencyDashboardApproval=true</code> so that you can request them on demand, on supported platforms.</p>"},{"location":"modules/manager/gradle/","title":"Automated Dependency Updates for Gradle","text":"<p>Categories: <code>java</code></p> <p>Renovate supports updating Gradle dependencies.</p>"},{"location":"modules/manager/gradle/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>/\\.gradle(\\.kts)?$/\n/(^|/)gradle\\.properties$/\n/(^|/)gradle/.+\\.toml$/\n/(^|/)buildSrc/.+\\.kt$/\n/\\.versions\\.toml$/\n/(^|/)versions.props$/\n/(^|/)versions.lock$/\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/gradle/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>maven</code>.</p>"},{"location":"modules/manager/gradle/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>plugin</code> A Gradle plugin dependency <code>dependencies</code> A standard Gradle dependency <code>devDependencies</code> A dependency from a <code>buildSrc</code> project <code>test</code> A test dependency from the <code>gradle-consistent-versions</code> plugin lock file"},{"location":"modules/manager/gradle/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/\\\\.gradle(\\\\.kts)?$/\",\n    \"/(^|/)gradle\\\\.properties$/\",\n    \"/(^|/)gradle/.+\\\\.toml$/\",\n    \"/(^|/)buildSrc/.+\\\\.kt$/\",\n    \"/\\\\.versions\\\\.toml$/\",\n    \"/(^|/)versions.props$/\",\n    \"/(^|/)versions.lock$/\"\n  ],\n  \"timeout\": 600,\n  \"versioning\": \"gradle\"\n}\n</code></pre>"},{"location":"modules/manager/gradle/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>gradle.lockfile</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/gradle/#additional-information","title":"Additional Information","text":"<p>The <code>gradle</code> manager uses a custom parser written in JavaScript, similar to many others managers. It does not call <code>gradle</code> directly in order to extract a list of dependencies.</p>"},{"location":"modules/manager/gradle/#executing-the-gradle-wrapper","title":"Executing the Gradle Wrapper","text":"<p>Renovate will only execute the Gradle Wrapper (via <code>./gradlew</code> or <code>gradlew.bat</code>) if the self-hosted administrator configures <code>allowedUnsafeExecutions</code> to include the <code>gradleWrapper</code> option. This is required due to possible supply chain security attack vectors that can occur with the Gradle Wrapper being executed.</p>"},{"location":"modules/manager/gradle/#updating-lockfiles","title":"Updating lockfiles","text":"<p>The gradle manager supports gradle lock files in <code>.lockfile</code> artifacts, as well as lock files used by the gradle-consistent-versions plugin. During lock file maintenance, renovate calls <code>./gradlew :dependencies --write-locks</code> on the root project and subprojects. For regular dependency updates, renovate automatically updates lock state entries via the <code>--update-locks</code> command line flag.</p> <p>As the output of these commands can be very large, any text other than errors (in <code>stderr</code>) is discarded.</p>"},{"location":"modules/manager/gradle/#dependency-verification","title":"Dependency verification","text":"<p>Renovate supports Gradle's dependency verification functionality to ensure that checksums are calculated for your dependencies.</p> <p>Note</p> <p>This requires your self-hosted administrator to allow the Gradle Wrapper to execute.</p> <p>If Renovate finds a <code>gradle/verification-metadata.xml</code> file and either <code>&lt;verify-metadata&gt;true&lt;/verify-metadata&gt;</code> or <code>&lt;verify-signatures&gt;true&lt;/verify-signatures&gt;</code> (or both), it updates the content by using the <code>./gradlew --write-verification-metadata &lt;hashTypes&gt; dependencies</code> command. Renovate will check the file for existing hash types (like <code>sha256</code>) and use them as <code>&lt;hashTypes&gt;</code>.</p> <p>Warning</p> <p>Gradle allows verification metadata to use the <code>md5</code> and <code>sha1</code> algorithms. Because those algorithms are prone to collision attacks, Renovate ignores them. If Renovate encounters hashes that are generated with <code>md5</code> or <code>sha1</code> algorithms, Renovate uses <code>sha256</code> instead.</p>"},{"location":"modules/manager/gradle/#rich-version-constraints","title":"Rich version constraints","text":"<p>Renovate extracts dependencies whose version comes from a Gradle rich version constraint declared in a <code>version { ... }</code> block, in both the Groovy and the Kotlin DSL:</p> <pre><code>dependencies {\n    implementation('org.slf4j:slf4j-api') {\n        version {\n            strictly '[1.7, 1.8['\n        }\n    }\n}\n</code></pre> <p>Renovate can only rewrite one version literal per dependency, so it picks a single constraint to update and records which one in <code>managerData.versionConstraint</code>:</p> Declared constraints What Renovate updates <code>strictly</code> <code>strictly</code> <code>strictly</code> + <code>prefer</code> <code>strictly</code>, if <code>strictly</code> is a single version <code>require</code> <code>require</code> <code>require</code> + <code>prefer</code> <code>require</code>, because <code>prefer</code> is only a hint <code>prefer</code> <code>prefer</code> <code>require</code> + <code>strictly</code> nothing, skipped as <code>multiple-constraint-dep</code> <code>strictly</code> range + <code>prefer</code> nothing, skipped as <code>multiple-constraint-dep</code> anything + <code>reject</code> or <code>rejectAll</code> nothing, skipped as <code>unsupported-version</code> <p><code>strictly</code> and <code>prefer</code> pin a version on purpose, so Renovate disables those dependencies by default and only updates them for vulnerability alerts. If you disable them yourself with a package rule, Renovate skips their vulnerability fixes too. A <code>require</code> constraint means the same thing as a plain version declaration, so it is updated like any other dependency.</p> <p>To also receive regular updates for <code>strictly</code> and <code>prefer</code> constraints, opt in with a package rule:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchManagers\": [\"gradle\"],\n      \"matchJsonata\": [\n        \"managerData.versionConstraint in ['strictly', 'prefer']\"\n      ],\n      \"enabled\": true\n    }\n  ]\n}\n</code></pre> <p>Note</p> <p>Rich versions in version catalogs are extracted by the TOML parser instead, which updates a single <code>require</code>, <code>prefer</code> or <code>strictly</code> constraint without disabling it.</p> <p>Note</p> <p>A <code>version { ... }</code> block on a dependency that already spells out its version, such as <code>implementation('org.slf4j:slf4j-api:1.7.25') { version { strictly '1.7.30' } }</code>, is not valid Gradle. Renovate updates the version in the dependency string and ignores the block.</p>"},{"location":"modules/manager/gradle-wrapper/","title":"Automated Dependency Updates for Gradle Wrapper","text":"<p>Categories: <code>java</code></p> <p>Renovate supports updating Gradle Wrapper dependencies.</p>"},{"location":"modules/manager/gradle-wrapper/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)gradle/wrapper/gradle-wrapper\\.properties$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/gradle-wrapper/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>gradle-version</code>.</p>"},{"location":"modules/manager/gradle-wrapper/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/gradle-wrapper/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)gradle/wrapper/gradle-wrapper\\\\.properties$/\"\n  ],\n  \"versioning\": \"gradle\"\n}\n</code></pre>"},{"location":"modules/manager/gradle-wrapper/#additional-information","title":"Additional Information","text":"<p>Configuration for Gradle Wrapper updates. Changes here affect how Renovate updates the version of gradle in the wrapper, not how it uses the wrapper.</p>"},{"location":"modules/manager/haskell-cabal/","title":"Automated Dependency Updates for Haskell Cabal","text":"<p>Categories: <code>haskell</code></p> <p>Renovate supports updating Haskell Cabal dependencies.</p>"},{"location":"modules/manager/haskell-cabal/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/\\.cabal$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/haskell-cabal/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>hackage</code>.</p>"},{"location":"modules/manager/haskell-cabal/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/haskell-cabal/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/\\\\.cabal$/\"\n  ],\n  \"pinDigests\": false\n}\n</code></pre>"},{"location":"modules/manager/haskell-cabal/#additional-information","title":"Additional Information","text":"<p>Supports dependency extraction from <code>build-depends</code> fields in Cabal package description files. They use the extension <code>.cabal</code>, and are used with the Haskell programming language.</p> <p>Limitations:</p> <ul> <li>The dependencies of all components are mushed together in one big list.</li> <li>Fields like <code>pkgconfig-depends</code> and <code>build-tool-depends</code> are not handled.</li> <li>The default PVP versioning is subject to limitations.</li> </ul> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p>"},{"location":"modules/manager/helm-requirements/","title":"Automated Dependency Updates for Helm v2 Chart Dependencies","text":"<p>Categories: <code>helm</code>, <code>kubernetes</code></p> <p>Renovate supports updating Helm v2 Chart Dependencies dependencies.</p>"},{"location":"modules/manager/helm-requirements/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)requirements\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/helm-requirements/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>helm</code>.</p>"},{"location":"modules/manager/helm-requirements/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/helm-requirements/#default-config","title":"Default config","text":"<pre><code>{\n  \"registryAliases\": {\n    \"stable\": \"https://charts.helm.sh/stable\"\n  },\n  \"commitMessageTopic\": \"helm chart {{depName}}\",\n  \"managerFilePatterns\": [\n    \"/(^|/)requirements\\\\.ya?ml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/helm-requirements/#additional-information","title":"Additional Information","text":"<p>Renovate supports updating Helm Chart references within <code>requirements.yaml</code> files.</p> <p>The <code>helm-requirements</code> manager defines this default registryAlias:</p> <pre><code>{\n  \"registryAliases\": {\n    \"stable\": \"https://charts.helm.sh/stable\"\n  }\n}\n</code></pre> <p>If your Helm charts make use of repository aliases then you will need to configure an <code>registryAliases</code> object in your config to tell Renovate where to look for them. Be aware that alias values must be properly formatted URIs.</p> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p> <p>To learn how to use Helm with private packages, read private package support, Package Manager Credentials for Artifact Updating, helm.</p>"},{"location":"modules/manager/helm-values/","title":"Automated Dependency Updates for Helm Values","text":"<p>Categories: <code>helm</code>, <code>kubernetes</code></p> <p>Renovate supports updating Helm Values dependencies.</p>"},{"location":"modules/manager/helm-values/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)values\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/helm-values/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>.</p>"},{"location":"modules/manager/helm-values/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/helm-values/#default-config","title":"Default config","text":"<pre><code>{\n  \"commitMessageTopic\": \"helm values {{depName}}\",\n  \"managerFilePatterns\": [\n    \"/(^|/)values\\\\.ya?ml$/\"\n  ],\n  \"pinDigests\": false\n}\n</code></pre>"},{"location":"modules/manager/helm-values/#additional-information","title":"Additional Information","text":"<p>Renovate supports updating of Docker dependencies within Helm Chart <code>values.yaml</code> files or other YAML files that use the same format (via <code>managerFilePatterns</code> configuration). Updates are performed if the files follow the conventional format used in most of the Helm charts:</p> <pre><code>image:\n  repository: 'some-docker/dependency'\n  tag: v1.0.0\n  registry: registry.example.com # optional key, will default to \"docker.io\"\n\nimage:\n  repository: 'some-docker/dependency'\n  version: v1.0.0\n\ncoreImage:\n  registry: docker.io\n  repository: bitnami/harbor-core\n  tag: 2.1.3-debian-10-r38\n\ncli:\n  image: 'some-docker/dependency'\n  tag: v1.0.0\n\ncli:\n  image: 'some-docker/dependency'\n  version: v1.0.0\n</code></pre> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p>"},{"location":"modules/manager/helmfile/","title":"Automated Dependency Updates for Helmfile","text":"<p>Categories: <code>cd</code>, <code>helm</code>, <code>kubernetes</code></p> <p>Renovate supports updating Helmfile dependencies.</p>"},{"location":"modules/manager/helmfile/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>/(^|/)helmfile\\.ya?ml(?:\\.gotmpl)?$/\n/(^|/)helmfile\\.d/.+\\.ya?ml(?:\\.gotmpl)?$/\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/helmfile/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>, <code>helm</code>.</p>"},{"location":"modules/manager/helmfile/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/helmfile/#default-config","title":"Default config","text":"<pre><code>{\n  \"registryAliases\": {\n    \"stable\": \"https://charts.helm.sh/stable\"\n  },\n  \"commitMessageTopic\": \"helm chart {{depName}}\",\n  \"managerFilePatterns\": [\n    \"/(^|/)helmfile\\\\.ya?ml(?:\\\\.gotmpl)?$/\",\n    \"/(^|/)helmfile\\\\.d/.+\\\\.ya?ml(?:\\\\.gotmpl)?$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/helmfile/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>helmfile.lock</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/helmfile/#additional-information","title":"Additional Information","text":"<p>Checks <code>helmfile.yaml</code> files and extracts dependencies for the <code>helm</code> datasource.</p> <p>The <code>helmfile</code> manager defines this default registryAlias:</p> <pre><code>{\n  \"registryAliases\": {\n    \"stable\": \"https://charts.helm.sh/stable\"\n  }\n}\n</code></pre> <p>If your Helm charts make use of repository aliases then you will need to configure an <code>registryAliases</code> object in your config to tell Renovate where to look for them. Be aware that alias values must be properly formatted URIs.</p> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p>"},{"location":"modules/manager/helmfile/#private-repositories-and-registries","title":"Private repositories and registries","text":"<p>To use private sources of Helm charts, you must set the password and username you use to authenticate to the private source. For this you use a custom <code>hostRules</code> array.</p>"},{"location":"modules/manager/helmfile/#classic-repositories","title":"Classic repositories","text":"<p>Renovate passes <code>hostRules</code> with <code>hostType: 'helm'</code> to <code>helmfile deps</code> for classic (non-OCI) repositories. It does so through the <code>&lt;NAME&gt;_USERNAME</code> and <code>&lt;NAME&gt;_PASSWORD</code> environment variables, where <code>&lt;NAME&gt;</code> is the repository name in upper case with dashes replaced by underscores. The <code>hostRules</code> entry must have both a <code>username</code> and a <code>password</code>, and its <code>matchHost</code> must match the repository <code>url</code>. Helmfile uses each variable only when the repository does not set that field itself.</p> <p>For example, with this <code>helmfile.yaml</code>:</p> <pre><code>repositories:\n  - name: team-a-charts\n    url: https://charts.example.com/team-a\n  - name: public\n    url: https://public.example.com\nreleases:\n  - name: app\n    chart: team-a-charts/app\n    version: 1.0.0\n</code></pre> <p>and this Renovate config:</p> <pre><code>{\n  hostRules: [\n    {\n      matchHost: 'https://charts.example.com',\n      hostType: 'helm',\n      username: '&lt;some-username&gt;',\n      password: '&lt;some-password&gt;',\n    },\n  ],\n}\n</code></pre> <p>Renovate runs <code>helmfile deps</code> with <code>TEAM_A_CHARTS_USERNAME</code> and <code>TEAM_A_CHARTS_PASSWORD</code> set. The <code>public</code> repository has no matching <code>hostRules</code> entry, so it gets no credentials.</p>"},{"location":"modules/manager/helmfile/#oci-registries","title":"OCI registries","text":"<pre><code>{\n  hostRules: [\n    {\n      // global login\n      matchHost: 'ghcr.io',\n      hostType: 'docker',\n      username: '&lt;some-username&gt;',\n      password: '&lt;some-password&gt;',\n    },\n    {\n      // login with encrypted password\n      matchHost: 'https://ghci.io',\n      hostType: 'docker',\n      username: '&lt;some-username&gt;',\n      encrypted: {\n        password: 'some-encrypted-password',\n      },\n    },\n  ],\n}\n</code></pre>"},{"location":"modules/manager/helmsman/","title":"Automated Dependency Updates for Helmsman","text":"<p>Categories: <code>cd</code>, <code>helm</code>, <code>kubernetes</code></p> <p>Renovate supports updating Helmsman dependencies.</p>"},{"location":"modules/manager/helmsman/#file-matching","title":"File Matching","text":"<p>Because file names for <code>helmsman</code> cannot be easily determined automatically, Renovate will not attempt to match any <code>helmsman</code> files by default. For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/helmsman/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>, <code>helm</code>.</p>"},{"location":"modules/manager/helmsman/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/helmsman/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": []\n}\n</code></pre>"},{"location":"modules/manager/helmsman/#additional-information","title":"Additional Information","text":"<p>The <code>helmsman</code> manager is currently limited and does not support the full feature set of Helmsman, read about the limitations below.</p>"},{"location":"modules/manager/helmsman/#non-configured-managerfilepatterns","title":"Non-configured managerFilePatterns","text":"<p>By default the <code>helmsman</code> manager has an empty array for its <code>managerFilePatterns</code> configuration option, because there is no convention for file naming in practice. This means that <code>helmsman</code> won't search for any files, and you won't get any updates from the manager.</p> <p>To enable the <code>helmsman</code> manager, provide a valid <code>managerFilePatterns</code> yourself, for example:</p> <pre><code>{\n  \"helmsman\": {\n    \"managerFilePatterns\": [\"/(^|/)desired_state\\\\.yaml$/\"]\n  }\n}\n</code></pre>"},{"location":"modules/manager/helmsman/#file-format","title":"File format","text":"<p>Currently, state files must be in the <code>.yaml</code> format. The <code>.toml</code> format is not supported.</p>"},{"location":"modules/manager/helmsman/#oci-helm-charts","title":"OCI Helm charts","text":"<p>Renovate looks up Helm charts stored in OCI registries with the <code>docker</code> datasource. Use <code>registryAliases</code> to map a registry host, for example a pull-through cache, to the registry Renovate should query instead.</p>"},{"location":"modules/manager/helmv3/","title":"Automated Dependency Updates for Helm v3","text":"<p>Categories: <code>helm</code>, <code>kubernetes</code></p> <p>Renovate supports updating Helm v3 dependencies.</p>"},{"location":"modules/manager/helmv3/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)Chart\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/helmv3/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>, <code>helm</code>.</p>"},{"location":"modules/manager/helmv3/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/helmv3/#default-config","title":"Default config","text":"<pre><code>{\n  \"registryAliases\": {\n    \"stable\": \"https://charts.helm.sh/stable\"\n  },\n  \"commitMessageTopic\": \"helm chart {{depName}}\",\n  \"managerFilePatterns\": [\n    \"/(^|/)Chart\\\\.ya?ml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/helmv3/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>Chart.lock</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/helmv3/#additional-information","title":"Additional Information","text":"<p>Renovate supports updating Helm Chart references in:</p> <ul> <li><code>requirements.yaml</code> files, for Helm v2</li> <li><code>Chart.yaml</code> files, for Helm v3</li> </ul> <p>The <code>helmv3</code> manager defines this default registryAlias:</p> <pre><code>{\n  \"registryAliases\": {\n    \"stable\": \"https://charts.helm.sh/stable\"\n  }\n}\n</code></pre> <p>If you use repository aliases in your Helm charts then you must set an <code>registryAliases</code> object in your configuration file so Renovate knows where to find the repository. Alias values must be properly formatted URIs.</p> <p>If you need to change the versioning format, read our versioning documentation to learn more.</p>"},{"location":"modules/manager/helmv3/#private-repositories-and-registries","title":"Private repositories and registries","text":"<p>To use private sources in your Helm charts, you must set the <code>password</code> and <code>username</code> you use to authenticate to the private source. For this you use a custom <code>hostRules</code> array.</p>"},{"location":"modules/manager/helmv3/#oci-registries","title":"OCI registries","text":"<pre><code>{\n  hostRules: [\n    {\n      // Global login\n      matchHost: 'registry.gitlab.com',\n      hostType: 'docker',\n      username: '&lt;some-username&gt;',\n      password: '&lt;some-password&gt;',\n    },\n    {\n      // For repository string oci://registry.gitlab.com/user/oci-helm-test\n      matchHost: 'https://registry.gitlab.com/user/oci-helm-test',\n      hostType: 'docker',\n      username: '&lt;some-username&gt;',\n      password: '&lt;some-password&gt;',\n    },\n  ],\n}\n</code></pre>"},{"location":"modules/manager/helmv3/#helm-repository","title":"Helm repository","text":"<pre><code>{\n  hostRules: [\n    {\n      // Global login for 'gitlab.com' if using Helm\n      matchHost: 'gitlab.com',\n      hostType: 'helm', // this is optional, but else the credentials will be used for all requests matching `matchHost`\n      username: '&lt;some-username&gt;',\n      password: '&lt;some-password&gt;',\n    },\n    {\n      // Specific repository\n      matchHost: 'https://gitlab.com/api/v4/projects/xxxxxxx/packages/helm/stable',\n      hostType: 'helm', // this is optional\n      username: '&lt;some-username&gt;',\n      password: '&lt;some-password&gt;',\n    },\n  ],\n}\n</code></pre>"},{"location":"modules/manager/helmv3/#subchart-archives","title":"Subchart archives","text":"<p>To get updates for subchart archives put <code>helmUpdateSubChartArchives</code> in your <code>postUpdateOptions</code> configuration. Renovate now updates archives in the <code>/charts</code> folder.</p> <pre><code>{\n  \"postUpdateOptions\": [\"helmUpdateSubChartArchives\"]\n}\n</code></pre>"},{"location":"modules/manager/helmv3/#oci-helm-charts","title":"OCI Helm charts","text":"<p>Renovate looks up Helm charts stored in OCI registries with the <code>docker</code> datasource. Use <code>registryAliases</code> to map a registry host, for example a pull-through cache, to the registry Renovate should query instead.</p>"},{"location":"modules/manager/hermit/","title":"Automated Dependency Updates for Hermit","text":"<p>Categories: <code>no-category</code></p> <p>Renovate supports updating Hermit dependencies.</p>"},{"location":"modules/manager/hermit/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)bin/hermit$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/hermit/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>hermit</code>.</p>"},{"location":"modules/manager/hermit/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/hermit/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)bin/hermit$/\"\n  ],\n  \"excludeCommitPaths\": [\n    \"**/bin/hermit\"\n  ],\n  \"versioning\": \"hermit\"\n}\n</code></pre>"},{"location":"modules/manager/hermit/#additional-information","title":"Additional Information","text":"<p>Hermit package installation token</p> <p>When upgrading private packages through, Hermit manager will uses one of the following two tokens to download private packages.</p> <pre><code>HERMIT_GITHUB_TOKEN\nGITHUB_TOKEN\n</code></pre> <p>These environment variable could be passed on via setting it in <code>customEnvironmentVariables</code>.</p> <p>Git credentials configured in <code>hostRules</code> are also automatically propagated to <code>hermit install</code> via <code>GIT_CONFIG_*</code> environment variables. This enables Hermit to fetch packages from private Git repositories without additional configuration.</p> <p>Nested Hermit setup</p> <p>Nested Hermit setup in a single repository is also supported. e.g.</p> <pre><code>\u251cbin\n\u251c\u2500hermit\n\u251c\u2500(other files)\n\u251c\n\u251cnested\n\u251c\u2500bin\n\u251c\u2500\u2500hermit\n\u251c\u2500\u2500(other files)\n</code></pre>"},{"location":"modules/manager/homeassistant-manifest/","title":"Automated Dependency Updates for Home Assistant Manifest","text":"<p>Categories: <code>python</code></p> <p>Renovate supports updating Home Assistant Manifest dependencies.</p>"},{"location":"modules/manager/homeassistant-manifest/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)manifest\\.json$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/homeassistant-manifest/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>git-tags</code>, <code>pypi</code>.</p>"},{"location":"modules/manager/homeassistant-manifest/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/homeassistant-manifest/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)manifest\\\\.json$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/homeassistant-manifest/#additional-information","title":"Additional Information","text":"<p>The Home Assistant Manifest manager updates the <code>requirements</code> field in Home Assistant integration <code>manifest.json</code> files.</p> Example manifest.json<pre><code>{\n  \"domain\": \"my_integration\",\n  \"name\": \"My Integration\",\n  \"requirements\": [\"aiohttp==3.9.1\", \"pydantic&gt;=2.5.0\"]\n}\n</code></pre>"},{"location":"modules/manager/homebrew/","title":"Automated Dependency Updates for Homebrew","text":"<p>Categories: <code>no-category</code></p> <p>Renovate supports updating Homebrew dependencies.</p>"},{"location":"modules/manager/homebrew/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/^Formula/\\w*/?[^/]+[.]rb$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/homebrew/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>github-releases</code>, <code>github-tags</code>, <code>npm</code>.</p>"},{"location":"modules/manager/homebrew/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/homebrew/#default-config","title":"Default config","text":"<pre><code>{\n  \"commitMessageTopic\": \"Homebrew Formula {{depName}}\",\n  \"managerFilePatterns\": [\n    \"/^Formula/\\\\w*/?[^/]+[.]rb$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/homebrew/#additional-information","title":"Additional Information","text":"<p>The <code>homebrew</code> manager extracts dependencies from Homebrew Formula Ruby files.</p>"},{"location":"modules/manager/homebrew/#supported-files","title":"Supported Files","text":"<p>Renovate supports Formula files that follow the Homebrew naming convention:</p> <ul> <li>Files must be located in a <code>Formula/</code> directory</li> <li>Files must have a <code>.rb</code> extension</li> <li>Example: <code>Formula/my-package.rb</code></li> </ul>"},{"location":"modules/manager/homebrew/#supported-dependencies","title":"Supported Dependencies","text":"<p>The manager extracts and updates:</p> <ul> <li>GitHub releases: URLs in the format <code>https://github.com/owner/repo/releases/download/v1.2.3/repo-1.2.3.tar.gz</code></li> <li>GitHub archives: URLs in the format <code>https://github.com/owner/repo/archive/refs/tags/v1.2.3.tar.gz</code></li> <li>NPM packages: URLs in the format <code>https://registry.npmjs.org/package/-/package-1.2.3.tgz</code> or <code>https://registry.npmjs.org/@scope/package/-/package-1.2.3.tgz</code></li> <li>SHA256 checksums: Automatically computed for new versions</li> </ul>"},{"location":"modules/manager/homebrew/#how-it-works","title":"How It Works","text":"<p>When a new version is available, Renovate:</p> <ol> <li>Downloads the new tarball from GitHub or NPM registry</li> <li>Calculates the SHA256 checksum</li> <li>Updates both the <code>url</code> and <code>sha256</code> fields in the Formula file</li> </ol>"},{"location":"modules/manager/homebrew/#limitations","title":"Limitations","text":"<ul> <li>GitHub packages: Only supports packages hosted on <code>github.com</code></li> <li>NPM packages: Only supports packages from <code>registry.npmjs.org</code> (custom registries are not supported)</li> </ul>"},{"location":"modules/manager/homebrew/#example-formulas","title":"Example Formulas","text":""},{"location":"modules/manager/homebrew/#github-package","title":"GitHub Package","text":"<pre><code>class MyPackage &lt; Formula\n  desc \"My awesome package\"\n  homepage \"https://github.com/owner/repo\"\n  url \"https://github.com/owner/repo/releases/download/v1.2.3/repo-1.2.3.tar.gz\"\n  sha256 \"abc123def456...\"\n\n  def install\n    # installation steps\n  end\nend\n</code></pre>"},{"location":"modules/manager/homebrew/#npm-package","title":"npm Package","text":"<pre><code>class ClaudeCode &lt; Formula\n  desc \"Anthropic's official CLI for Claude\"\n  homepage \"https://www.anthropic.com/claude-code\"\n  url \"https://registry.npmjs.org/@anthropic-ai/claude-code/-/claude-code-1.0.0.tgz\"\n  sha256 \"abc123def456...\"\n  license \"Proprietary\"\nend\n</code></pre>"},{"location":"modules/manager/homebrew/#unsupported-formulas","title":"Unsupported Formulas","text":"<p>Formulas with the following characteristics will be skipped:</p> <ul> <li>Non-GitHub and non-NPM URLs (e.g., SourceForge, custom domains)</li> <li>NPM packages from custom registries (only <code>registry.npmjs.org</code> is supported)</li> <li>Missing or invalid <code>sha256</code> field</li> <li>Git repository URLs (e.g., <code>url \"https://github.com/owner/repo.git\"</code>)</li> <li>Invalid class definitions</li> </ul> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p>"},{"location":"modules/manager/html/","title":"Automated Dependency Updates for HTML","text":"<p>Categories: <code>cd</code></p> <p>Renovate supports updating HTML dependencies.</p>"},{"location":"modules/manager/html/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/\\.html?$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/html/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>cdnjs</code>.</p>"},{"location":"modules/manager/html/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/html/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/\\\\.html?$/\"\n  ],\n  \"versioning\": \"semver\",\n  \"digest\": {\n    \"enabled\": false\n  },\n  \"pinDigests\": false\n}\n</code></pre>"},{"location":"modules/manager/html/#additional-information","title":"Additional Information","text":"<p>The <code>html</code> manager updates <code>&lt;script&gt;</code> tags and CSS <code>&lt;link&gt;</code> tags that point to the cdnjs content delivery network. It also updates Subresource Integrity (SRI) hashes in <code>integrity</code> attributes.</p> <p>Key differences between the <code>cdnurl</code> manager and the <code>html</code> manager:</p> <ul> <li>The <code>html</code> manager updates SRI hashes, the <code>cndurl</code> manager does not</li> <li>The <code>html</code> manager automatically finds some files to update, the <code>cndurl</code> manager must be given a <code>managerFilePatterns</code></li> </ul>"},{"location":"modules/manager/jenkins/","title":"Automated Dependency Updates for Jenkins","text":"<p>Categories: <code>ci</code></p> <p>Renovate supports updating Jenkins dependencies.</p>"},{"location":"modules/manager/jenkins/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)plugins\\.(txt|ya?ml)$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/jenkins/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>jenkins-plugins</code>.</p>"},{"location":"modules/manager/jenkins/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/jenkins/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)plugins\\\\.(txt|ya?ml)$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/jenkins/#additional-information","title":"Additional Information","text":"<p>The Jenkins manager supports a custom text or YAML format of the plugin list as described on their github page.</p> <p>By default, Renovate gets the versions from the main Jenkins update center.</p> <p>There are no strict filename rules, the convention is to name the file <code>plugins.txt</code> or <code>plugins.yaml</code>.</p>"},{"location":"modules/manager/jsonata/","title":"Custom Manager Support using JSONata","text":"<p>Categories: <code>custom</code></p> <p>With <code>customManagers</code> using <code>JSONata</code> queries you can configure Renovate so it finds dependencies in JSON, TOML and YAML files, that are not detected by its other built-in package managers.</p> <p>Renovate uses the <code>jsonata</code> package to process the file content using the queries, after the content has been parsed into <code>json</code> format.</p> <p>For more on the jsonata query language, read the jsonata query language site.</p> <p>The JSONata manager is unique in Renovate, because:</p> <ul> <li>It can be used with any <code>datasource</code></li> <li>It can be configured via JSONata queries</li> <li>You can create multiple \"JSONata managers\" in the same repository</li> </ul> <p>If you have limited managers to run within <code>enabledManagers</code> config option, you need to add <code>\"custom.jsonata\"</code> to the list.</p>"},{"location":"modules/manager/jsonata/#required-fields","title":"Required Fields","text":"<p>The first two required fields are <code>managerFilePatterns</code> and <code>matchStrings</code>:</p> <ul> <li><code>managerFilePatterns</code> works the same as any manager</li> <li><code>matchStrings</code> is a <code>JSONata</code> custom manager concept and is used for configuring a jsonata queries</li> </ul>"},{"location":"modules/manager/jsonata/#information-that-renovate-needs-about-the-dependency","title":"Information that Renovate needs about the dependency","text":"<p>Before Renovate can look up a dependency and decide about updates, it must have this info about each dependency:</p> Info type Required Notes Docs Name of the dependency Yes <code>datasource</code> Yes Example datasources: npm, Docker, GitHub tags, and so on. Supported datasources Version scheme to use. Defaults to <code>semver-coerced</code>. Yes You may set another version scheme, like <code>pep440</code>. Supported versioning schemes <code>fileFormat</code> Yes Must be either <code>json</code>, <code>yaml</code> or <code>toml</code>. <code>Configuration Options</code>"},{"location":"modules/manager/jsonata/#required-fields-to-be-present-in-the-resulting-structure-returned-by-the-jsonata-query","title":"Required fields to be present in the resulting structure returned by the jsonata query","text":"<p>You must:</p> <ul> <li>Capture the <code>currentValue</code> or <code>currentDigest</code> of the dependency or use the <code>currentValueTemplate</code> or <code>currentDigestTemplate</code> template field</li> <li>Capture the <code>depName</code> or <code>packageName</code>. Or use a template field: <code>depNameTemplate</code> and <code>packageNameTemplate</code></li> <li>Capture the <code>datasource</code>, or use the <code>datasourceTemplate</code> template field</li> </ul>"},{"location":"modules/manager/jsonata/#optional-fields-you-can-include-in-the-resulting-structure","title":"Optional fields you can include in the resulting structure","text":"<p>You may use any of these items:</p> <ul> <li><code>depType</code>, or use the <code>depTypeTemplate</code> template field</li> <li><code>versioning</code>, or the use <code>versioningTemplate</code> template field. If neither are present, Renovate defaults to <code>semver-coerced</code></li> <li><code>extractVersion</code>, or use the <code>extractVersionTemplate</code> template field</li> <li><code>registryUrl</code>, or use the <code>registryUrlTemplate</code> template field. If it's a valid URL, it will be converted to the <code>registryUrls</code> field as a single-length array</li> <li><code>indentation</code>. Must be empty, or whitespace. Else Renovate restes only <code>indentation</code> to an empty string</li> </ul>"},{"location":"modules/manager/jsonata/#usage","title":"Usage","text":"<p>When you configure a JSONata manager, use the following syntax:</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"jsonata\",\n      \"fileFormat\": \"json\",\n      \"managerFilePatterns\": [\"&lt;file match pattern&gt;\"],\n      \"matchStrings\": [\"&lt;query&gt;\"],\n      ...\n    }\n  ]\n}\n</code></pre> <p>Overwrite the <code>&lt;query&gt;</code> placeholder text with your JSONata query. The JSONata query transforms the content to a JSON object, similar to this:</p> dependencies information extracted using a JSONata query<pre><code>[\n  {\n    \"depName\": \"some_dep\",\n    \"currentValue\": \"1.0.0\",\n    \"datasource\": \"docker\",\n    \"versioning\": \"semver\"\n  }\n]\n</code></pre> <p>Creating your Renovate JSONata manager config is easier if you understand JSONata queries. We recommend you follow these steps:</p> <ol> <li>Read the official JSONata query language docs</li> <li>Check our example queries below</li> <li>You're ready to make your own config</li> </ol> <p>Alternatively, you can use \"trial and error\" to a working config by adjusting our examples.</p> <p>YAML files are parsed as multi-document files, even those that have only one document.</p>"},{"location":"modules/manager/jsonata/#yaml-parsing","title":"YAML parsing","text":"<p>To show how the JSONata manager parses YAML, below is an example YAML file and the corresponding parsing to JSON.</p> <p>YAML:</p> Example multi document YAML file<pre><code>production:\n  packages:\n    version: 1.2.3\n    package: foo\ntest:\n  metadata:\n    - version: 4.5.6\n      package: bar\n---\ndevelopment:\n  author: Renovate\n</code></pre> <p>JSON:</p> Example JSON parsing<pre><code>[\n  {\n    \"production\": {\n      \"packages\": {\n        \"version\": \"1.2.3\",\n        \"package\": \"foo\"\n      }\n    },\n    \"test\": {\n      \"metadata\": [\n        {\n          \"version\": \"4.5.6\",\n          \"package\": \"bar\"\n        }\n      ]\n    }\n  },\n  {\n    \"development\": {\n      \"author\": \"Renovate\"\n    }\n  }\n]\n</code></pre>"},{"location":"modules/manager/jsonata/#example-queries","title":"Example queries","text":"<p>Below are some example queries for the generic JSON manager. You can also use the JSONata test website to experiment with queries.</p> Dependencies spread in different nodes, and we want to limit the extraction to a particular node<pre><code>{\n  \"production\": [\n    {\n      \"version\": \"1.2.3\",\n      \"package\": \"foo\"\n    }\n  ],\n  \"development\": [\n    {\n      \"version\": \"4.5.6\",\n      \"package\": \"bar\"\n    }\n  ]\n}\n</code></pre> <p>Query:</p> <pre><code>production.{ \"depName\": package, \"currentValue\": version }\n</code></pre> Dependencies spread in different nodes, and we want to extract all of them as if they were in the same node<pre><code>{\n  \"production\": [\n    {\n      \"version\": \"1.2.3\",\n      \"package\": \"foo\"\n    }\n  ],\n  \"development\": [\n    {\n      \"version\": \"4.5.6\",\n      \"package\": \"bar\"\n    }\n  ]\n}\n</code></pre> <p>Query:</p> <pre><code>*.{ \"depName\": package, \"currentValue\": version }\n</code></pre> The dependency name is in a JSON node name, and the version is in a child leaf to that node<pre><code>{\n  \"foo\": {\n    \"version\": \"1.2.3\"\n  },\n  \"bar\": {\n    \"version\": \"4.5.6\"\n  }\n}\n</code></pre> <p>Query:</p> <pre><code>$each(function($v, $n) { { \"depName\": $n, \"currentValue\": $v.version } })\n</code></pre> The dependency name and its version are both value nodes of the same parent node<pre><code>{\n  \"packages\": [\n    {\n      \"version\": \"1.2.3\",\n      \"package\": \"foo\"\n    },\n    {\n      \"version\": \"4.5.6\",\n      \"package\": \"bar\"\n    }\n  ]\n}\n</code></pre> <p>Query:</p> <pre><code>packages.{ \"depName\": package, \"currentValue\": version }\n</code></pre> The dependency name and version are part of the same string<pre><code>{\n  \"packages\": [\"foo@1.2.3\", \"bar@4.5.6\"]\n}\n</code></pre> <p>Query:</p> <pre><code>$map($map(packages, function ($v) { $split($v, \"@\") }), function ($v) { { \"depName\": $v[0], \"currentVersion\": $v[1] } })\n</code></pre> JSONata manager config to extract deps from a package.json file in the Renovate repository<pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"jsonata\",\n      \"fileFormat\": \"json\",\n      \"managerFilePatterns\": [\"/package.json/\"],\n      \"matchStrings\": [\n        \"$each(dependencies, function($v, $k) { {\\\"depName\\\":$k, \\\"currentValue\\\": $v, \\\"depType\\\": \\\"dependencies\\\"}})\",\n        \"$each(devDependencies, function($v, $k) { {\\\"depName\\\":$k, \\\"currentValue\\\": $v, \\\"depType\\\": \\\"devDependencies\\\"}})\",\n        \"$each(optionalDependencies, function($v, $k) { {\\\"depName\\\":$k, \\\"currentValue\\\": $v, \\\"depType\\\": \\\"optionalDependencies\\\"}})\",\n        \"{ \\\"depName\\\": \\\"pnpm\\\", \\\"currentValue\\\": $substring(packageManager, 5),  \\\"depType\\\": \\\"packageManager\\\"}\"\n      ],\n      \"datasourceTemplate\": \"npm\"\n    }\n  ]\n}\n</code></pre> Dependencies in a single node, and we want to extract all of them<pre><code>packages:\n  - version: 1.2.3\n    package: foo\n</code></pre> <p>Query:</p> <pre><code>packages.{ \"depName\": package, \"currentValue\": version }\n</code></pre> Dependencies in a single node in a multi document yaml, and we want to extract all of them<pre><code>packages:\n  - version: 1.2.3\n    package: foo\n---\npackages:\n  - version: 1.2.5\n    package: bar\n</code></pre> <p>Query:</p> <pre><code>packages.{ \"depName\": package, \"currentValue\": version }\n</code></pre> JSONata manager config to extract deps from a toml file<pre><code>[[packages]]\nversion = \"1.2.3\"\npackage = \"foo\"\n\n[[packages]]\nversion = \"1.2.2\"\npackage = \"bar\"\n</code></pre> <p>Query:</p> <pre><code>packages.{ \"depName\": package, \"currentValue\": version }\n</code></pre>"},{"location":"modules/manager/jsonnet-bundler/","title":"Automated Dependency Updates for jsonnet-bundler","text":"<p>Categories: <code>kubernetes</code></p> <p>Renovate supports updating jsonnet-bundler dependencies.</p>"},{"location":"modules/manager/jsonnet-bundler/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)jsonnetfile\\.json$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/jsonnet-bundler/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>git-tags</code>.</p>"},{"location":"modules/manager/jsonnet-bundler/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/jsonnet-bundler/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)jsonnetfile\\\\.json$/\"\n  ],\n  \"datasource\": \"git-tags\"\n}\n</code></pre>"},{"location":"modules/manager/jsonnet-bundler/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>jsonnetfile.lock.json</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/jsonnet-bundler/#additional-information","title":"Additional Information","text":"<p>Extracts dependencies from <code>jsonnetfile.json</code> files, updates <code>jsonnetfile.lock.json</code> and updates the <code>vendor</code> directory.</p> <p>Supports lock file maintenance.</p> <p>This plugin requires <code>jsonnet-bundler &gt;= v0.4.0</code> since previous versions don't support updating single dependencies.</p>"},{"location":"modules/manager/kotlin-script/","title":"Automated Dependency Updates for Kotlin Script","text":"<p>Categories: <code>java</code></p> <p>Renovate supports updating Kotlin Script dependencies.</p>"},{"location":"modules/manager/kotlin-script/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/^.+\\.main\\.kts$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/kotlin-script/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>maven</code>.</p>"},{"location":"modules/manager/kotlin-script/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/kotlin-script/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/^.+\\\\.main\\\\.kts$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/kotlin-script/#additional-information","title":"Additional Information","text":"<p>Renovate supports upgrading dependencies in Kotlin Script files. Read the Kotlin Script docs to learn more. For example:</p> <pre><code>#!/usr/bin/env kotlin\n@file:Repository(\"https://jitpack.io\")\n@file:DependsOn(\"com.github.krzema12:github-actions-kotlin-dsl:main-SNAPSHOT\")\n@file:DependsOn(\"org.eclipse.jgit:org.eclipse.jgit:4.6.0.201612231935-r\")\n@file:DependsOn(\"org.jetbrains.lets-plot:lets-plot-kotlin-jvm:3.0.2\")\n\nprintln(\"Hello world!\")\n\n// ...\n</code></pre> <p>By default, Renovate only scans files with the <code>.main.kts</code> extension and not <code>.kts</code>. This way Renovate avoids ambiguity with Gradle config files that use the <code>.gradle.kts</code> extension.</p> <p>If you want to manage other Kotlin Script files, you may use the <code>managerFilePatterns</code> config option to let Renovate update these files:</p> <pre><code>{\n  \"kotlin-script\": {\n    \"managerFilePatterns\": [\"/^.*\\\\.kts$/\"]\n  }\n}\n</code></pre>"},{"location":"modules/manager/kubernetes/","title":"Automated Dependency Updates for Kubernetes","text":"<p>Categories: <code>kubernetes</code></p> <p>Renovate supports updating Kubernetes dependencies.</p>"},{"location":"modules/manager/kubernetes/#file-matching","title":"File Matching","text":"<p>Because file names for <code>kubernetes</code> cannot be easily determined automatically, Renovate will not attempt to match any <code>kubernetes</code> files by default. For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/kubernetes/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>, <code>kubernetes-api</code>.</p>"},{"location":"modules/manager/kubernetes/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/kubernetes/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": []\n}\n</code></pre>"},{"location":"modules/manager/kubernetes/#additional-information","title":"Additional Information","text":"<p>The <code>kubernetes</code> manager has no <code>managerFilePatterns</code> default patterns, so it won't match any files until you configure it with a pattern. This is because there is no commonly accepted file/directory naming convention for Kubernetes YAML files and we don't want to check every single <code>*.yaml</code> file in repositories just in case any of them have Kubernetes definitions.</p> <p>If most <code>.yaml</code> files in your repository are Kubernetes ones, then you could add this to your config:</p> <pre><code>{\n  \"kubernetes\": {\n    \"managerFilePatterns\": [\"/\\\\.yaml$/\"]\n  }\n}\n</code></pre> <p>If instead you have them all inside a <code>k8s/</code> directory, you would add this:</p> <pre><code>{\n  \"kubernetes\": {\n    \"managerFilePatterns\": [\"/k8s/.+\\\\.yaml$/\"]\n  }\n}\n</code></pre> <p>Or if it's only a single file then something like this:</p> <pre><code>{\n  \"kubernetes\": {\n    \"managerFilePatterns\": [\"/^config/k8s\\\\.yaml$/\"]\n  }\n}\n</code></pre> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p>"},{"location":"modules/manager/kustomize/","title":"Automated Dependency Updates for Kustomize","text":"<p>Categories: <code>kubernetes</code></p> <p>Renovate supports updating Kustomize dependencies.</p>"},{"location":"modules/manager/kustomize/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)kustomization\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/kustomize/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>, <code>git-tags</code>, <code>github-tags</code>, <code>helm</code>.</p>"},{"location":"modules/manager/kustomize/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>Kustomization</code> Kustomization resource referencing remote bases or images <code>Component</code> Kustomize Component resource referencing remote bases or images <code>HelmChart</code> Helm chart embedded in a kustomization file via <code>helmCharts</code>"},{"location":"modules/manager/kustomize/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)kustomization\\\\.ya?ml$/\"\n  ],\n  \"pinDigests\": false\n}\n</code></pre>"},{"location":"modules/manager/kustomize/#additional-information","title":"Additional Information","text":"<p>Renovate can manage these parts of the <code>kustomization.yaml</code> file:</p> <ol> <li>remote resources</li> <li>image tags</li> <li>components</li> <li>helm charts</li> <li>remote bases (deprecated since Kustomize <code>v2.1.0</code>)</li> </ol>"},{"location":"modules/manager/kustomize/#how-it-works","title":"How It Works","text":"<ol> <li>Renovate searches in each repository for any <code>kustomization.yaml</code> files</li> <li>Dependencies are extracted from remote bases, image tags and Helm charts</li> <li>Renovate resolves the dependency's source repository and checks if there are SemVer tags</li> <li>If Renovate finds an update, then it updates the <code>kustomization.yaml</code> file</li> </ol> <p>This manager uses three <code>depType</code>s to allow fine-grained control of which dependencies are upgraded:</p> <ul> <li>Component</li> <li>Kustomization</li> <li>HelmChart</li> <li>OCIChart</li> </ul>"},{"location":"modules/manager/kustomize/#helm-charts-inflation","title":"Helm charts inflation","text":"<p>Renovate will inflate helm charts referenced in a kustomization if any of the following is true:</p> <ol> <li>The version Renovate is upgrading from was inflated, OR</li> <li>The <code>kustomizeInflateHelmCharts</code> option in <code>postUpdateOptions</code> is enabled</li> </ol> <p>To inflate charts from a private Helm repository, configure its credentials in a <code>hostRules</code> entry with <code>hostType: helm</code> and both a <code>username</code> and a <code>password</code>. Renovate passes them to <code>helm pull</code>. For charts from an OCI registry, Renovate logs in with <code>helm registry login</code> first, using the <code>hostRules</code> entry with <code>hostType: docker</code> for that registry.</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"hostType\": \"helm\",\n      \"matchHost\": \"https://charts.example.com\",\n      \"username\": \"user\",\n      \"password\": \"secret\"\n    }\n  ]\n}\n</code></pre> <p>Note: To prevent Renovate from updating dependencies in the expanded charts, you'll need to manually exclude the folders from Helm managers. For example:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchFileNames\": [\"**/charts/**\"],\n      \"matchManagers\": [\"helmv3\", \"helm-values\"],\n      \"enabled\": false\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/manager/kustomize/#limitations","title":"Limitations","text":"<ul> <li>Using HTTPS to fetch the repositories is not tested</li> <li>The keys for the image tags can be in any order</li> </ul> <pre><code>- name: image/name\n  newTag: v0.0.1\n# or\n- newTag: v0.0.1\n  name: image/name\n</code></pre> <ul> <li>Digests can be pinned in <code>newTag</code> or <code>digest</code>:</li> </ul> <pre><code>- name: image/name\n  newTag: v0.0.1@sha256:3eeba3e2caa30d2aba0fd78a34c1bbeebaa1b96c7aa3c95ec9bac44163c5ca4f\n# without a version, digests are tracked as :latest\n- name: image/name\n  digest: sha256:3eeba3e2caa30d2aba0fd78a34c1bbeebaa1b96c7aa3c95ec9bac44163c5ca4f\n</code></pre> <ul> <li>The image's repository can be changed with <code>newName</code>:</li> </ul> <pre><code>- name: image/name\n  newName: custom-image/name:v0.0.1\n- name: image/name\n  newName: custom-image/name:v0.0.1@sha256:3eeba3e2caa30d2aba0fd78a34c1bbeebaa1b96c7aa3c95ec9bac44163c5ca4f\n- name: image/name\n  newName: custom-image/name@sha256:3eeba3e2caa30d2aba0fd78a34c1bbeebaa1b96c7aa3c95ec9bac44163c5ca4f\n- name: image/name\n  newName: custom-image/name\n  newTag: v0.0.1@sha256:3eeba3e2caa30d2aba0fd78a34c1bbeebaa1b96c7aa3c95ec9bac44163c5ca4f\n- name: image/name\n  newName: custom-image/name\n  digest: sha256:3eeba3e2caa30d2aba0fd78a34c1bbeebaa1b96c7aa3c95ec9bac44163c5ca4f\n</code></pre> <ul> <li>Images with values ignored by Kustomize will be skipped to avoid ambiguity:</li> </ul> <pre><code># bad: skipped because newTag: is ignored when digest: is set\n- name: image/name\n  newTag: v0.0.1\n  digest: sha256:3eeba3e2caa30d2aba0fd78a34c1bbeebaa1b96c7aa3c95ec9bac44163c5ca4f\n# good:\n- name: image/name\n  newTag: v0.0.1@sha256:3eeba3e2caa30d2aba0fd78a34c1bbeebaa1b96c7aa3c95ec9bac44163c5ca4f\n</code></pre>"},{"location":"modules/manager/leiningen/","title":"Automated Dependency Updates for Leiningen","text":"<p>Categories: <code>java</code></p> <p>Renovate supports updating Leiningen dependencies.</p>"},{"location":"modules/manager/leiningen/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)project\\.clj$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/leiningen/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>clojure</code>.</p>"},{"location":"modules/manager/leiningen/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>dependencies</code> Listed under <code>:dependencies</code> <code>managed-dependencies</code> Listed under <code>:managed-dependencies</code> <code>plugins</code> Listed under <code>:plugins</code> <code>pom-plugins</code> Listed under <code>:pom-plugins</code> <code>parent-project</code> Listed under <code>:parent-project</code> (via lein-parent <code>:coords</code>)"},{"location":"modules/manager/leiningen/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)project\\\\.clj$/\"\n  ],\n  \"versioning\": \"maven\"\n}\n</code></pre>"},{"location":"modules/manager/leiningen/#additional-information","title":"Additional Information","text":"<p>Extracts Maven-type dependencies.</p>"},{"location":"modules/manager/maven/","title":"Automated Dependency Updates for Maven","text":"<p>Categories: <code>java</code></p> <p>Renovate supports updating Maven dependencies.</p>"},{"location":"modules/manager/maven/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>/(^|/|\\.)pom\\.xml$/\n/(^|/)pom\\.template\\.xml$/\n/^(((\\.mvn)|(\\.m2))/)?settings\\.xml$/\n/(^|/)\\.mvn/extensions\\.xml$/\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/maven/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>, <code>maven</code>.</p>"},{"location":"modules/manager/maven/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>compile</code> Dependency with <code>compile</code> scope (default); available on all classpaths <code>provided</code> Dependency with <code>provided</code> scope; expected to be supplied by the JDK or container at runtime <code>runtime</code> Dependency with <code>runtime</code> scope; required at runtime but not for compilation <code>test</code> Dependency with <code>test</code> scope; only used for test compilation and execution <code>system</code> Dependency with <code>system</code> scope; similar to <code>provided</code> but the JAR is specified explicitly <code>import</code> Dependency with <code>import</code> scope; used to import dependency management from another POM (BOM) <code>optional</code> Optional dependency (declared with <code>&lt;optional&gt;true&lt;/optional&gt;</code>) <code>build</code> A build plugin or extension (<code>&lt;plugin&gt;</code> or <code>&lt;extension&gt;</code> element) <code>parent</code> The parent POM (<code>&lt;parent&gt;</code> element) <code>parent-root</code> A parent POM that is itself a root POM or has an external parent; promoted from <code>parent</code> during multi-module resolution"},{"location":"modules/manager/maven/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/|\\\\.)pom\\\\.xml$/\",\n    \"/(^|/)pom\\\\.template\\\\.xml$/\",\n    \"/^(((\\\\.mvn)|(\\\\.m2))/)?settings\\\\.xml$/\",\n    \"/(^|/)\\\\.mvn/extensions\\\\.xml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/maven/#additional-information","title":"Additional Information","text":"<p>The <code>maven</code> manager focuses on extracting dependencies from <code>pom.xml</code>. It uses the official Maven versioning scheme. XML files must declare official namespaces to be parsed correctly (see Maven documentation on <code>pom.xml</code>, <code>extensions.xml</code>).</p> <p>It also supports Image Customizations of <code>spring-boot</code>'s OCI packaging. Usage of <code>registryAliases</code> is possible only for container image references.</p>"},{"location":"modules/manager/maven/#limitations","title":"Limitations","text":"<p>Currently maven properties are not supported for buildpack related dependencies.</p>"},{"location":"modules/manager/maven-wrapper/","title":"Automated Dependency Updates for Maven Wrapper","text":"<p>Categories: <code>java</code></p> <p>Renovate supports updating Maven Wrapper dependencies.</p>"},{"location":"modules/manager/maven-wrapper/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>/(^|\\/).mvn/wrapper/maven-wrapper.properties$/\n/(^|\\/)mvnw(.cmd)?$/\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/maven-wrapper/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>maven</code>.</p>"},{"location":"modules/manager/maven-wrapper/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/maven-wrapper/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|\\\\/).mvn/wrapper/maven-wrapper.properties$/\",\n    \"/(^|\\\\/)mvnw(.cmd)?$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/maven-wrapper/#additional-information","title":"Additional Information","text":"<p>Configuration for Maven Wrapper updates. Changes here affect how Renovate updates the version of Maven in the wrapper, not how it uses the wrapper.</p>"},{"location":"modules/manager/maven-wrapper/#private-registry-authentication","title":"Private registry authentication","text":"<p>If the Maven wrapper downloads artifacts from a private registry, Renovate can pass credentials to the wrapper command automatically.</p> <p>When Renovate finds a custom repository URL in the wrapper configuration, it looks for matching <code>hostRules</code> with <code>hostType: \"maven\"</code> and passes the credentials to the wrapper command.</p> <p>Both <code>username</code> and <code>password</code> must be set in the host rule for authentication to apply.</p> <p>Example <code>hostRules</code> configuration:</p> <pre><code>{\n  \"hostRules\": [\n    {\n      \"matchHost\": \"private-registry.example.com\",\n      \"hostType\": \"maven\",\n      \"username\": \"renovate-bot\",\n      \"password\": \"{{ secrets.MAVEN_PASSWORD }}\"\n    }\n  ]\n}\n</code></pre> <p>To learn more about how to securely provide credentials, see Private package support.</p>"},{"location":"modules/manager/meteor/","title":"Automated Dependency Updates for Meteor","text":"<p>Categories: <code>js</code></p> <p>Renovate supports updating Meteor dependencies.</p>"},{"location":"modules/manager/meteor/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)package\\.js$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/meteor/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>npm</code>.</p>"},{"location":"modules/manager/meteor/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/meteor/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)package\\\\.js$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/meteor/#additional-information","title":"Additional Information","text":""},{"location":"modules/manager/mint/","title":"Automated Dependency Updates for Mint","text":"<p>Categories: <code>swift</code></p> <p>Renovate supports updating Mint dependencies.</p>"},{"location":"modules/manager/mint/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)Mintfile$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/mint/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>git-tags</code>.</p>"},{"location":"modules/manager/mint/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/mint/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)Mintfile$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/mint/#additional-information","title":"Additional Information","text":"<p>Renovate supports updating Mintfiles.</p> <p>Go to the <code>yonaskolb/Mint</code> repository on GitHub to learn more about the Mint package manager.</p> <p>You must put the library version in the Mintfile:</p> <pre><code>// Good:\nSwiftGen/SwiftGen@6.6.1\nrealm/SwiftLint @ 0.48.0\n\n// Bad:\nyonaskolb/xcodegen\n</code></pre>"},{"location":"modules/manager/mise/","title":"Automated Dependency Updates for mise-en-place","text":"<p>Categories: <code>no-category</code></p> <p>Renovate supports updating mise-en-place dependencies.</p>"},{"location":"modules/manager/mise/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>**/{,.}mise{,.*}.toml\n**/{,.}mise/config{,.*}.toml\n**/.config/mise{,.*}.toml\n**/.config/mise/{mise,config}{,.*}.toml\n**/.config/mise/conf.d/*.toml\n**/.rtx{,.*}.toml\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/mise/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>bitbucket-tags</code>, <code>conda</code>, <code>crate</code>, <code>dart-version</code>, <code>docker</code>, <code>dotnet-version</code>, <code>flutter-version</code>, <code>git-refs</code>, <code>git-tags</code>, <code>github-digest</code>, <code>github-releases</code>, <code>github-tags</code>, <code>gitlab-releases</code>, <code>gitlab-tags</code>, <code>go</code>, <code>hexpm-bob</code>, <code>java-version</code>, <code>node-version</code>, <code>npm</code>, <code>nuget</code>, <code>pypi</code>, <code>ruby-version</code>, <code>rubygems</code>, <code>rust-version</code>.</p>"},{"location":"modules/manager/mise/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>tools</code> A tool defined under the top-level <code>[tools]</code> table <code>include</code> A remote configuration file (<code>git::</code> or <code>oci::</code>) referenced in the top-level <code>include</code> array <p>Tools defined under <code>tasks.&lt;name&gt;.tools</code> produce dynamic <code>depType</code> values in the form <code>task-&lt;name&gt;-tools</code>, and remote <code>git::</code> task files defined in <code>tasks.&lt;name&gt;.file</code> produce <code>task-&lt;name&gt;-file</code>, where <code>&lt;name&gt;</code> is the task name (e.g. <code>task-lint-tools</code>, <code>task-build-file</code>).</p>"},{"location":"modules/manager/mise/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"**/{,.}mise{,.*}.toml\",\n    \"**/{,.}mise/config{,.*}.toml\",\n    \"**/.config/mise{,.*}.toml\",\n    \"**/.config/mise/{mise,config}{,.*}.toml\",\n    \"**/.config/mise/conf.d/*.toml\",\n    \"**/.rtx{,.*}.toml\"\n  ],\n  \"pinDigests\": false\n}\n</code></pre>"},{"location":"modules/manager/mise/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>mise.lock</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/mise/#additional-information","title":"Additional Information","text":"<p>Renovate can update mise configuration files.</p>"},{"location":"modules/manager/mise/#supported-configuration-files","title":"Supported configuration files","text":"<p>Renovate supports all standard mise configuration file patterns:</p> <ul> <li><code>mise.toml</code>, <code>.mise.toml</code></li> <li><code>mise/config.toml</code>, <code>.mise/config.toml</code></li> <li><code>.config/mise.toml</code>, <code>.config/mise/config.toml</code>, <code>.config/mise/mise.toml</code></li> <li><code>.rtx.toml</code> (legacy)</li> <li>Environment-specific variants (e.g., <code>mise.production.toml</code>, <code>.mise.dev.toml</code>)</li> <li>Local variants (e.g., <code>mise.local.toml</code>, <code>.mise.local.toml</code>)</li> </ul>"},{"location":"modules/manager/mise/#supported-tool-locations","title":"Supported tool locations","text":"<p>Renovate supports top level <code>tools</code> and <code>tasks.*.tools</code> keys.</p>"},{"location":"modules/manager/mise/#remote-task-files","title":"Remote task files","text":"<p>Renovate supports remote git task files in <code>tasks.&lt;name&gt;.file</code>, using the same <code>git::</code> forms as for remote <code>include</code> entries. The path may point to any file, not only to TOML files. <code>ref</code> handling, datasources and comment hints work like for remote <code>include</code> entries, and the dependencies have the <code>depType</code> <code>task-&lt;name&gt;-file</code>. Local paths and plain <code>http(s)://</code> URLs without the <code>git::</code> prefix have no version and are ignored.</p> <pre><code>[tasks.build]\nfile = \"git::https://github.com/org/tasks.git//scripts/build.sh?ref=v1.0.0\"\n\n[tasks.lint]\nfile = \"git::ssh://git@gitlab.com/org/tasks.git//lint.sh?ref=0123456789abcdef0123456789abcdef01234567\" # v1.0.0\n</code></pre>"},{"location":"modules/manager/mise/#remote-include-support","title":"Remote <code>include</code> support","text":"<p>Renovate supports the remote forms of the top level <code>include</code> key:</p> <ul> <li><code>git::&lt;https|http|ssh&gt;://&lt;host&gt;/&lt;repo&gt;.git//&lt;path&gt;?ref=&lt;ref&gt;</code> or <code>git::git@ssh.dev.azure.com:v3/&lt;org&gt;/&lt;project&gt;/&lt;repo&gt;//&lt;path&gt;?ref=&lt;ref&gt;</code>: the <code>ref</code> is looked up as a Git tag.   GitHub, GitLab and Bitbucket Cloud repositories use the <code>github-tags</code>, <code>gitlab-tags</code> and <code>bitbucket-tags</code> datasources, other hosts use <code>git-tags</code>.   Entries without a <code>ref</code> are skipped, as mise then uses the default branch.</li> <li><code>oci::&lt;registry&gt;/&lt;repo&gt;[:tag][@sha256:&lt;digest&gt;]</code>: handled like a Docker image, using the <code>docker</code> datasource.</li> </ul> <p>A tag <code>ref</code> is updated to the newest tag:</p> <pre><code>include = [\n  \"git::https://github.com/org/cfg.git//mise.toml?ref=v0.5.0\",\n  \"oci::ghcr.io/org/base:1.0\",\n]\n</code></pre>"},{"location":"modules/manager/mise/#pinning-to-a-commit-sha","title":"Pinning to a commit sha","text":"<p>Optionally, a <code>ref</code> can be a full or short commit sha, if it has a trailing <code># &lt;version&gt;</code> or <code># &lt;branch&gt;</code> comment. Renovate updates the sha and the comment:</p> <pre><code>include = [\n  # tracks tags: the sha and the comment are bumped to the new tag\n  \"git::https://github.com/org/cfg.git//mise.toml?ref=0123456789abcdef0123456789abcdef01234567\", # v0.5.0\n  # tracks a branch: the sha is bumped to the head of the branch\n  \"git::https://gitlab.com/org/cfg.git//mise.toml?ref=0123456789abcdef0123456789abcdef01234567\", # main\n]\n</code></pre> <ul> <li>The comment must only contain the version (<code># v0.5.0</code>) or the branch name (<code># main</code>).</li> <li>Branches use the <code>github-digest</code> datasource for GitHub and <code>git-refs</code> for other hosts.</li> <li>Sha refs without a usable comment are skipped (<code>unversioned-reference</code>).</li> <li>Comments of non-sha refs are ignored.</li> <li>Only comments of entries in multi-line arrays are read, as the comment of a single-line array can not be assigned to one entry.</li> <li><code>oci::</code> entries with a digest but no tag do not support comment hints.</li> </ul> <p>Renovate does not fetch the included files, so the tools they define are not updated. <code>include</code> entries are not locked by <code>mise.lock</code>.</p>"},{"location":"modules/manager/mise/#lock-file-support","title":"Lock file support","text":"<p>Renovate supports mise lock files (<code>mise.lock</code>). When a lock file is present:</p> <ul> <li>Dependencies will have their <code>lockedVersion</code> extracted from the lock file</li> <li>Renovate can update lock files when dependencies change</li> <li>Fuzzy selectors such as <code>latest</code>, <code>lts</code>, <code>25</code>, <code>25.1</code>, and <code>temurin-25</code> are   resolved against their locked version and updated in <code>mise.lock</code> only</li> <li><code>latest</code> remains unbounded; partial selectors remain restricted to their   major/minor range; <code>lts</code> is supported for the core Node.js and Java tools</li> <li>Concrete versions such as <code>25.0.3</code> retain Renovate's normal source-file   update behavior</li> <li> <p>To keep concrete versions pinned, set <code>updatePinnedDependencies</code> to <code>false</code>   in the <code>mise</code> manager configuration</p> <pre><code>{\n  \"mise\": {\n    \"updatePinnedDependencies\": false\n  }\n}\n</code></pre> </li> <li> <p>Lock file maintenance is supported via the <code>lockFileMaintenance</code> option. When the <code>mise</code> version Renovate runs supports it (see safe mode for how the version is detected), maintenance runs <code>mise lock --bump</code>, which advances fuzzy selectors (e.g. <code>node = \"22\"</code>) to the latest matching version rather than only refreshing existing locked versions.</p> </li> </ul> <p>When <code>mise lock</code> pins a tool's dependencies in a native dependency sidecar (for example <code>.mise/locks/npm-prettier/3.3.3/aube-lock.yaml</code>), Renovate commits the sidecar changes together with the lock file, including new sidecar directories and the removal of ones that <code>mise lock</code> deleted.</p> <p>Renovate recognizes environment-specific lock files:</p> <ul> <li><code>mise.lock</code> - default lock file</li> <li><code>mise.local.lock</code> - local configuration lock file, typically ignored alongside <code>mise.local.toml</code></li> <li><code>mise.{env}.lock</code> - environment-specific lock files (e.g., <code>mise.production.lock</code>)</li> <li><code>mise.{env}.local.lock</code> - environment-specific local lock files, typically ignored alongside <code>mise.{env}.local.toml</code></li> </ul> <p>For more information about mise lock files, see the mise lock file documentation.</p>"},{"location":"modules/manager/mise/#trust-model-for-lock-file-updates","title":"Trust model for lock file updates","text":"<p>Running <code>mise lock</code> can execute repository-defined behavior, so Renovate treats mise lockfile refreshes as an unsafe execution.</p> <p>Self-hosted administrators must explicitly allow this path by including <code>mise</code> in the global <code>allowedUnsafeExecutions</code> setting.</p> <p>Because mise lock can execute repository-defined scripts, Renovate treats lockfile refreshes as an unsafe execution and attempts to run mise in safe mode.</p> <p>If mise does not support safe mode or version detection fails, Renovate blocks all mise operations.</p>"},{"location":"modules/manager/mise/#allowing-unsafe-executions","title":"Allowing Unsafe Executions","text":"<p>Self-hosted administrators can permit these operations by adding \"mise\" to the global <code>allowedUnsafeExecutions</code> configuration.</p> <p>Once allowed, Renovate runs mise trust before mise lock when a mise.lock file is present. This exposes the trust step in execution logs and defers trust rules to mise.</p> <p>In particular:</p> <ul> <li>an existing <code>mise.lock</code> is required</li> <li>self-hosted administrators decide whether this unsafe execution is acceptable for their environment</li> </ul>"},{"location":"modules/manager/mise/#renovate-only-updates-primary-versions","title":"Renovate only updates primary versions","text":"<p>Renovate's <code>mise</code> manager is designed to automatically update the first (primary) version listed for each tool in the <code>mise.toml</code> file.</p> <p>Secondary or fallback versions require manual updates.</p>"},{"location":"modules/manager/mise/#example","title":"Example","text":"<p>Given a <code>mise.toml</code> entry like:</p> <pre><code>[tools]\nerlang = [\"23.3\", \"22.0\"]\n</code></pre> <p>Renovate will update <code>\"23.3\"</code> (the primary version) but will not touch <code>\"22.0\"</code> (the fallback version).</p> <p>The same applies when the array items are inline tables:</p> <pre><code>[tools]\nrust = [\n  { version = \"1.98.1\", components = \"clippy,rustfmt\" },\n  { version = \"nightly-2026-07-12\", profile = \"minimal\" },\n]\n</code></pre> <p>Renovate will update <code>\"1.98.1\"</code> and read backend options such as <code>version_prefix</code> or <code>tag_regex</code> from that first item only.</p>"},{"location":"modules/manager/mise/#why-can-renovate-only-update-primary-versions","title":"Why can Renovate only update primary versions?","text":"<p>To maintain consistency and reliability, Renovate opts to only manage the first listed version.</p> <ul> <li>Fallback versions can often be older versions of a tool that are known to work and are there as a backup.</li> </ul> <p>This follows the same workflow that Renovate's <code>asdf</code> manager uses.</p>"},{"location":"modules/manager/mise/#short-names-support","title":"Short names support","text":"<p>Renovate uses the mise registry to resolve tool short names to their appropriate datasource.</p> <p>Where possible, Renovate will automagically support tools from the mise registry (via <code>mise registry --json</code>).</p> <p>This means that any tool in the mise registry that has a supported backend (e.g. <code>aqua</code>, <code>github</code>, <code>cargo</code>) should be automatically supported by Renovate.</p>"},{"location":"modules/manager/mise/#adding-new-tool-support","title":"Adding new tool support","text":"<p>If a tool you need is not yet in the mise registry, add it upstream to mise. Once Renovate syncs its registry data, the tool will be supported automatically, as long as it is in a backend that Renovate supports.</p> <p>For tools that need a custom datasource mapping (e.g. core tools like <code>node</code>, <code>python</code>), you can create a PR to extend Renovate's <code>mise</code> manager directly.</p> <p>If you want to add support for other tools' short names to <code>mise</code>, you can create a PR to extend Renovate's <code>asdf</code> manager, which indirectly helps Renovate's <code>mise</code> manager as well. Even if the tool does not use the <code>asdf</code> backend in the registry, the short names added to the <code>asdf</code> manager will still be used in the <code>mise</code> manager.</p> <p>This may no longer be necessary now we automagically add support via the tools that the mise registry advertises.</p>"},{"location":"modules/manager/mise/#backends-support","title":"Backends support","text":"<p>Renovate's <code>mise</code> manager supports the following backends:</p> <ul> <li><code>core</code></li> <li><code>asdf</code></li> <li><code>aqua</code></li> <li><code>cargo</code></li> <li><code>conda</code></li> <li><code>gem</code></li> <li><code>github</code></li> <li><code>gitlab</code></li> <li><code>go</code></li> <li><code>npm</code></li> <li><code>pipx</code></li> <li><code>pypi</code></li> <li><code>spm</code></li> <li><code>ubi</code></li> <li><code>vfox</code></li> </ul>"},{"location":"modules/manager/mise/#limitations","title":"Limitations","text":"<p>Renovate's <code>mise</code> manager does not support the following tool syntax:</p> <ul> <li> <p><code>asdf</code> and <code>vfox</code> plugins   e.g. <code>asdf:mise-plugins/asdf-yarn</code> or <code>vfox:version-fox/vfox-elixir</code>   Short names with backends like <code>asdf:yarn</code> or <code>vfox:elixir</code> are supported if the short names (<code>yarn</code>, <code>elixir</code>) are supported.</p> </li> <li> <p><code>aqua</code> packages with <code>http</code> package type.   However if the short name using <code>aqua</code> backend is supported by Renovate, it will be updated.   e.g. <code>aqua:helm/helm</code> is not supported, but <code>helm</code> or <code>aqua:helm</code> is supported.</p> </li> <li> <p><code>aqua</code> packages with <code>version_filter</code>.   We don't read the aqua registry itself, so we can't support this feature.   If some packages using <code>version_filter</code> like <code>aqua:biomejs/biome</code> are not updated or updated incorrectly, set <code>extractVersion</code> in the Renovate config manually like below.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDepNames\": [\"aqua:biomejs/biome\"],\n      \"extractVersion\": \"cli/(?&lt;version&gt;.+)\"\n    }\n  ]\n}\n</code></pre> </li> <li> <p>Some of <code>ubi</code> backend tools with <code>tag_regex</code> option.   The <code>tag_regex</code> option is used as <code>extractVersion</code>, but the regex engines are not the same between mise and Renovate.   If the version is not updated or updated incorrectly, override <code>extractVersion</code> manually in the Renovate config.</p> </li> <li> <p>Some of <code>github</code> backend tools with <code>version_prefix</code> option.   The <code>version_prefix</code> option is converted to <code>extractVersion</code> by escaping special regex characters.   If the version is not updated or updated incorrectly, override <code>extractVersion</code> manually in the Renovate config.</p> </li> <li> <p>Renovate will prefer the <code>github:</code> backend over other backends, if using the tool definition from the mise registry</p> </li> </ul>"},{"location":"modules/manager/mise/#supported-default-registry-tool-short-names","title":"Supported default registry tool short names","text":"<p>Note</p> <p>Renovate syncs the supported registry data with mise, and is periodically updated (currently using <code>2026.10.25 linux-x64 (2026-10-31)</code>.Over time, this support may change and short tool names may be added / removed as per upstream mise.</p> <p>Renovate's <code>mise</code> manager can version the following tool short names. Out of 1100 known tools: 1078 supported, 4 possibly supported, 18 unsupported.</p> Name Source Supported <code>1password</code> mise \u2705 <code>1password-cli</code> mise \u2705 <code>7z</code> mise \u2705 <code>7zip</code> mise \u2705 <code>aapt2</code> mise \ud83e\udd14 Possibly unsupported due to backend(s): <code>[\"vfox\"]</code> <code>acli</code> mise \u2705 <code>act</code> asdf \u2705 <code>action-validator</code> mise \u2705 <code>actionlint</code> mise \u2705 <code>actionlint</code> asdf \u2705 <code>adr-tools</code> asdf \u2705 <code>ag</code> mise \u2705 <code>age</code> mise \u2705 <code>age-plugin-yubikey</code> mise \u2705 <code>agebox</code> mise \u2705 <code>agent-browser</code> mise \u2705 <code>agy</code> mise \u2705 <code>aichat</code> mise \u2705 <code>air</code> mise \u2705 <code>aks-engine</code> mise \u2705 <code>allure</code> mise \u2705 <code>allurectl</code> mise \u2705 <code>alp</code> mise \u2705 <code>amass</code> mise \u2705 <code>amazon-ecr-credential-helper</code> mise \u2705 <code>amazon-ecs-cli</code> mise \u2705 <code>amp</code> mise \u2705 <code>amplify</code> mise \u2705 <code>android-cli</code> mise \u274c <code>android-sdk</code> mise \ud83e\udd14 Possibly unsupported due to backend(s): <code>[\"vfox\"]</code> <code>ansible</code> mise \u2705 <code>ansible-base</code> mise \u2705 <code>ansible-core</code> mise \u2705 <code>ant</code> mise \ud83e\udd14 Possibly unsupported due to backend(s): <code>[\"vfox\"]</code> <code>antigravity-cli</code> mise \u2705 <code>apko</code> mise \u2705 <code>apm</code> asdf \u2705 <code>apollo-ios</code> mise \u2705 <code>apollo-ios-cli</code> mise \u2705 <code>apollo-router</code> mise \u2705 <code>apollo-rover</code> mise \u2705 <code>aqua</code> mise \u2705 <code>arduino</code> mise \u2705 <code>arduino-cli</code> mise \u2705 <code>argc</code> mise \u2705 <code>argo</code> mise \u2705 <code>argo-rollouts</code> mise \u2705 <code>argocd</code> asdf \u2705 <code>asciidoctorj</code> mise \u2705 <code>asdf-plugin-manager</code> asdf \u26a0\ufe0f No longer supported as of mise <code>2026.10.25 linux-x64 (2026-10-31)</code> <code>aspire</code> mise \u2705 <code>assh</code> mise \u2705 <code>ast-grep</code> mise \u2705 <code>astro</code> mise \u2705 <code>atlas</code> mise \u2705 <code>atlas-community</code> mise \u2705 <code>atmos</code> asdf \u2705 <code>atuin</code> mise \u2705 <code>aube</code> mise \u2705 <code>auto-doc</code> mise \u2705 <code>aws</code> mise \u2705 <code>aws-amplify</code> mise \u2705 <code>aws-cdk</code> mise \u2705 <code>aws-cli</code> mise \u2705 <code>aws-copilot</code> mise \u2705 <code>aws-iam-authenticator</code> mise \u2705 <code>aws-nuke</code> mise \u2705 <code>aws-sam</code> mise \u2705 <code>aws-sam-cli</code> mise \u2705 <code>aws-sso</code> mise \u2705 <code>aws-vault</code> mise \u2705 <code>awscli</code> asdf \u2705 <code>awscli-local</code> mise \u2705 <code>awsebcli</code> mise \u2705 <code>awsls</code> mise \u2705 <code>awsrm</code> mise \u2705 <code>awsweeper</code> mise \u2705 <code>azd</code> mise \u2705 <code>azure</code> mise \u2705 <code>azure-cli</code> asdf \u2705 <code>azure-functions-core-tools</code> mise \u2705 <code>azure-kubelogin</code> mise \u2705 <code>babashka</code> mise \u2705 <code>balena</code> mise \u2705 <code>balena-cli</code> mise \u2705 <code>basecamp</code> mise \u2705 <code>bashbot</code> mise \u2705 <code>bashly</code> mise \u2705 <code>bat</code> mise \u2705 <code>bat-extras</code> mise \u2705 <code>bats</code> mise \u2705 <code>bazel</code> mise \u2705 <code>bazel-watcher</code> mise \u2705 <code>bazelisk</code> mise \u2705 <code>benthos</code> mise \u2705 <code>betterleaks</code> mise \u2705 <code>bfs</code> mise \u2705 <code>bibtex-tidy</code> mise \u2705 <code>binnacle</code> mise \u2705 <code>biome</code> mise \u2705 <code>bitwarden</code> mise \u2705 <code>bitwarden-secrets-manager</code> mise \u2705 <code>black</code> mise \u2705 <code>blaze</code> mise \u2705 <code>blender</code> mise \u2705 <code>bob</code> mise \u2705 <code>boilerplate</code> mise \u2705 <code>bombardier</code> mise \u2705 <code>borg</code> mise \u2705 <code>bosh</code> mise \u2705 <code>bottom</code> mise \u2705 <code>boundary</code> mise \u2705 <code>bpkg</code> mise \u2705 <code>broot</code> mise \u2705 <code>btop</code> mise \u2705 <code>buck2</code> mise \u2705 <code>buf</code> mise \u2705 <code>buildifier</code> mise \u2705 <code>buildpack</code> mise \u2705 <code>buildpacks</code> mise \u2705 <code>bun</code> mise \u2705 <code>bun</code> asdf \u2705 <code>bundler</code> mise \u2705 <code>cabal</code> mise \u2705 <code>caddy</code> mise \u2705 <code>calendarsync</code> mise \u2705 <code>calicoctl</code> mise \u2705 <code>carapace</code> mise \u2705 <code>cargo-binstall</code> mise \u2705 <code>cargo-deny</code> mise \u2705 <code>cargo-dist</code> mise \u2705 <code>cargo-insta</code> mise \u2705 <code>cargo-make</code> asdf \u2705 <code>cargo-msrv</code> mise \u2705 <code>cargo-release</code> mise \u2705 <code>carthage</code> mise \u2705 <code>ccache</code> mise \u2705 <code>cdk</code> mise \u2705 <code>certstrap</code> mise \u2705 <code>cf</code> mise \u2705 <code>cfn-lint</code> mise \u2705 <code>cfssl</code> mise \u2705 <code>cfssljson</code> mise \u2705 <code>chamber</code> mise \u2705 <code>changie</code> mise \u2705 <code>cheat</code> mise \u2705 <code>checkmake</code> mise \u2705 <code>checkov</code> asdf \u2705 <code>checkstyle</code> mise \u2705 <code>chezmoi</code> mise \u2705 <code>chezscheme</code> mise \u2705 <code>chicken</code> mise \ud83e\udd14 Possibly unsupported due to backend(s): <code>[\"vfox\"]</code> <code>chisel</code> mise \u2705 <code>choose</code> mise \u2705 <code>chromedriver</code> mise \u2705 <code>cidr-merger</code> mise \u2705 <code>cidrchk</code> mise \u2705 <code>cilium-cli</code> mise \u2705 <code>cilium-hubble</code> mise \u2705 <code>circleci</code> mise \u2705 <code>circleci-cli</code> mise \u2705 <code>clang</code> mise \u2705 <code>clang-format</code> mise \u2705 <code>claude</code> mise \u2705 <code>claude-code</code> mise \u2705 <code>claude-powerline</code> mise \u2705 <code>claude-squad</code> mise \u2705 <code>cliamp</code> mise \u2705 <code>clickhouse</code> mise \u2705 <code>clipboard</code> mise \u2705 <code>clj-kondo</code> mise \u2705 <code>cljstyle</code> mise \u2705 <code>cloc</code> mise \u2705 <code>clojure</code> asdf \u2705 <code>cloud-sql-proxy</code> mise \u2705 <code>cloudflare-cf</code> mise \u2705 <code>cloudflared</code> mise \u2705 <code>clusterawsadm</code> mise \u2705 <code>clusterctl</code> asdf \u2705 <code>cmake</code> mise \u2705 <code>cmctl</code> mise \u2705 <code>cmdx</code> mise \u2705 <code>cockroach</code> mise \u2705 <code>cocoapods</code> mise \u2705 <code>cocogitto</code> mise \u2705 <code>code</code> mise \u2705 <code>code-review-graph</code> mise \u2705 <code>codebuff</code> mise \u2705 <code>codefresh</code> mise \u2705 <code>codegraph</code> mise \u2705 <code>codeql</code> mise \u2705 <code>coder</code> mise \u2705 <code>codex</code> mise \u2705 <code>codon</code> mise \u2705 <code>colima</code> mise \u2705 <code>committed</code> mise \u2705 <code>communique</code> mise \u2705 <code>conan</code> mise \u2705 <code>conform</code> mise \u2705 <code>conftest</code> asdf \u2705 <code>consul</code> mise \u2705 <code>container</code> mise \u2705 <code>container-structure-test</code> asdf \u2705 <code>container-use</code> mise \u2705 <code>cookiecutter</code> asdf \u2705 <code>copier</code> mise \u2705 <code>copilot</code> mise \u2705 <code>copilot-cli</code> mise \u2705 <code>coredns</code> mise \u2705 <code>coreutils</code> mise \u2705 <code>cosign</code> asdf \u2705 <code>coursier</code> mise \u2705 <code>cowsay</code> mise \u2705 <code>cpz</code> mise \u2705 <code>crane</code> mise \u2705 <code>crictl</code> mise \u2705 <code>croc</code> mise \u2705 <code>crossplane</code> mise \u2705 <code>crossplane-cli</code> mise \u2705 <code>crush</code> mise \u2705 <code>crystal</code> asdf \u2705 <code>cspell</code> mise \u2705 <code>ctlptl</code> mise \u2705 <code>ctop</code> mise \u2705 <code>cue</code> mise \u2705 <code>curlie</code> mise \u2705 <code>cursor-agent</code> mise \u274c <code>cursor-cli</code> mise \u274c <code>cyclonedx</code> mise \u2705 <code>d2</code> mise \u2705 <code>dagger</code> mise \u2705 <code>dagu</code> mise \u2705 <code>danger-js</code> mise \u2705 <code>danger-swift</code> mise \u2705 <code>dapr</code> mise \u2705 <code>dart</code> asdf \u2705 <code>dasel</code> mise \u2705 <code>databricks-cli</code> mise \u2705 <code>daytona</code> mise \u2705 <code>dbmate</code> mise \u2705 <code>dbt-fusion</code> mise \u2705 <code>deck</code> mise \u2705 <code>dekit</code> mise \u2705 <code>delta</code> mise \u2705 <code>deno</code> mise \u2705 <code>deno</code> asdf \u2705 <code>dependency-check</code> mise \u2705 <code>depot</code> mise \u2705 <code>desk</code> mise \u2705 <code>detekt</code> asdf \u26a0\ufe0f No longer supported as of mise <code>2026.10.25 linux-x64 (2026-10-31)</code> <code>devcontainer-cli</code> mise \u2705 <code>devspace</code> mise \u2705 <code>dhall</code> mise \u2705 <code>diffoci</code> mise \u2705 <code>difftastic</code> mise \u2705 <code>direnv</code> asdf \u2705 <code>dive</code> mise \u2705 <code>docker-cli</code> mise \u2705 <code>docker-compose</code> mise \u2705 <code>docker-slim</code> mise \u2705 <code>dockle</code> mise \u2705 <code>doctl</code> mise \u2705 <code>docuum</code> mise \u2705 <code>doggo</code> mise \u2705 <code>doppler</code> mise \u2705 <code>dotenv-linter</code> mise \u2705 <code>dotenvx</code> mise \u2705 <code>dotnet</code> mise \u2705 <code>dotnet-core</code> asdf \u2705 <code>dotslash</code> mise \u2705 <code>dprint</code> asdf \u2705 <code>driftctl</code> mise \u2705 <code>drone</code> mise \u2705 <code>dt</code> mise \u2705 <code>dua</code> mise \u2705 <code>duckdb</code> mise \u2705 <code>duf</code> mise \u2705 <code>dust</code> mise \u2705 <code>dvc</code> mise \u2705 <code>dyff</code> mise \u2705 <code>dynatrace-monaco</code> mise \u2705 <code>e1s</code> mise \u2705 <code>earthly</code> mise \u2705 <code>ecs-cli</code> mise \u2705 <code>ecspresso</code> asdf \u2705 <code>edit</code> mise \u2705 <code>editorconfig-checker</code> asdf \u2705 <code>ejson</code> mise \u2705 <code>eksctl</code> mise \u2705 <code>elasticsearch</code> mise \u2705 <code>elixir</code> mise \u2705 <code>elixir</code> asdf \u2705 <code>elixir-ls</code> mise \u2705 <code>elm</code> asdf \u2705 <code>emsdk</code> mise \u2705 <code>engram</code> mise \u2705 <code>entire</code> mise \u2705 <code>entireio-cli</code> mise \u2705 <code>envsubst</code> mise \u2705 <code>erlang</code> mise \u2705 <code>erlang</code> asdf \u2705 <code>esc</code> mise \u2705 <code>etcd</code> mise \u2705 <code>evans</code> mise \u2705 <code>exiftool</code> mise \u2705 <code>expert</code> mise \u2705 <code>eza</code> mise \u2705 <code>fastfetch</code> mise \u2705 <code>fd</code> mise \u2705 <code>ffmpeg</code> mise \u2705 <code>figma-export</code> mise \u2705 <code>fillin</code> mise \u2705 <code>firebase</code> mise \u2705 <code>fission</code> mise \u2705 <code>flamingo</code> mise \u2705 <code>flatc</code> mise \u2705 <code>flutter</code> asdf \u2705 <code>fluttergen</code> mise \u2705 <code>flux-operator</code> mise \u2705 <code>flux-operator-mcp</code> mise \u2705 <code>flux2</code> asdf \u2705 <code>fly</code> mise \u2705 <code>flyctl</code> mise \u2705 <code>flyway</code> mise \u2705 <code>fnox</code> mise \u2705 <code>foundry</code> mise \u2705 <code>func-e</code> mise \u2705 <code>furyctl</code> mise \u2705 <code>fx</code> mise \u2705 <code>fzf</code> mise \u2705 <code>gallery-dl</code> mise \u2705 <code>gam</code> mise \u2705 <code>gator</code> mise \u2705 <code>gauche</code> asdf \u26a0\ufe0f No longer supported as of mise <code>2026.10.25 linux-x64 (2026-10-31)</code> <code>gcc-arm-none-eabi</code> mise \u2705 <code>gcloud</code> mise \u2705 <code>gdal</code> mise \u2705 <code>gdu</code> mise \u2705 <code>gemini</code> mise \u2705 <code>gemini-cli</code> mise \u2705 <code>gentle-ai</code> mise \u2705 <code>getenvoy</code> mise \u2705 <code>ggshield</code> mise \u2705 <code>gh</code> mise \u2705 <code>ghalint</code> mise \u2705 <code>ghc</code> mise \u2705 <code>ghcup</code> mise \u2705 <code>ghorg</code> mise \u2705 <code>ghq</code> mise \u2705 <code>ghtkn</code> mise \u2705 <code>ghui</code> mise \u2705 <code>ginkgo</code> asdf \u2705 <code>git-chglog</code> mise \u2705 <code>git-cliff</code> mise \u2705 <code>git-filter-repo</code> mise \u2705 <code>git-lfs</code> mise \u2705 <code>git-town</code> mise \u2705 <code>gitconfig</code> mise \u2705 <code>github-cli</code> asdf \u2705 <code>github-markdown-toc</code> mise \u2705 <code>gitleaks</code> asdf \u2705 <code>gitsign</code> mise \u2705 <code>gitu</code> mise \u2705 <code>gitui</code> mise \u2705 <code>gitversion</code> mise \u2705 <code>glab</code> mise \u2705 <code>gleam</code> asdf \u2705 <code>glooctl</code> mise \u2705 <code>glow</code> mise \u2705 <code>go</code> mise \u2705 <code>go-containerregistry</code> mise \u2705 <code>go-getter</code> mise \u2705 <code>go-jira</code> mise \u2705 <code>go-jsonnet</code> mise \u2705 <code>go-junit-report</code> mise \u2705 <code>go-swagger</code> mise \u2705 <code>goconvey</code> mise \u2705 <code>gocryptfs</code> mise \u2705 <code>godot</code> mise \u2705 <code>gofumpt</code> mise \u2705 <code>gohugo</code> asdf \u26a0\ufe0f No longer supported as of mise <code>2026.10.25 linux-x64 (2026-10-31)</code> <code>gojq</code> mise \u2705 <code>gokey</code> mise \u2705 <code>golang</code> asdf \u26a0\ufe0f No longer supported as of mise <code>2026.10.25 linux-x64 (2026-10-31)</code> <code>golangci-lint</code> asdf \u2705 <code>golangci-lint-langserver</code> mise \u2705 <code>golines</code> mise \u2705 <code>gomigrate</code> mise \u2705 <code>gomplate</code> asdf \u2705 <code>google-java-format</code> mise \u2705 <code>goose-agent</code> mise \u2705 <code>gopass</code> mise \u2705 <code>goreleaser</code> mise \u2705 <code>goss</code> mise \u2705 <code>gotestsum</code> asdf \u2705 <code>gping</code> mise \u2705 <code>graalvm</code> mise \u2705 <code>gradle</code> mise \u2705 <code>grafana-kubernetes-plugin</code> mise \u2705 <code>granted</code> mise \u2705 <code>graphite</code> mise \u2705 <code>grex</code> mise \u2705 <code>grok</code> mise \u2705 <code>gron</code> mise \u2705 <code>groovy</code> mise \u2705 <code>grpc-health-probe</code> mise \u2705 <code>grpcurl</code> mise \u2705 <code>grype</code> mise \u2705 <code>gsudo</code> mise \u2705 <code>gum</code> mise \u2705 <code>gup</code> mise \u2705 <code>gwvault</code> mise \u2705 <code>hadolint</code> asdf \u2705 <code>harper-cli</code> mise \u2705 <code>harper-ls</code> mise \u2705 <code>has</code> mise \u2705 <code>haskell</code> asdf \u26a0\ufe0f No longer supported as of mise <code>2026.10.25 linux-x64 (2026-10-31)</code> <code>hasura-cli</code> mise \u2705 <code>hatch</code> mise \u2705 <code>haxe</code> mise \u2705 <code>hcl2json</code> mise \u2705 <code>hcloud</code> mise \u2705 <code>helix</code> mise \u2705 <code>helm</code> asdf \u2705 <code>helm-cr</code> mise \u2705 <code>helm-ct</code> mise \u2705 <code>helm-diff</code> mise \u2705 <code>helm-docs</code> asdf \u2705 <code>helm-ls</code> mise \u2705 <code>helmfile</code> asdf \u2705 <code>helmsman</code> mise \u2705 <code>helmwave</code> mise \u2705 <code>herdr</code> mise \u2705 <code>heroku</code> mise \u2705 <code>heroku-cli</code> mise \u2705 <code>hexyl</code> mise \u2705 <code>hey-cli</code> mise \u2705 <code>himalaya</code> mise \u2705 <code>hishtory</code> mise \u2705 <code>hivemind</code> mise \u2705 <code>hk</code> mise \u2705 <code>hledger</code> mise \u2705 <code>hledger-flow</code> mise \u2705 <code>hlint</code> mise \u2705 <code>hostctl</code> mise \u2705 <code>htmlq</code> mise \u2705 <code>httpie-go</code> mise \u2705 <code>hub</code> mise \u2705 <code>hugo</code> asdf \u2705 <code>hugo-extended</code> mise \u2705 <code>hugo-extended-withdeploy</code> mise \u2705 <code>hunk</code> mise \u2705 <code>hunkdiff</code> mise \u2705 <code>hurl</code> mise \u2705 <code>hwatch</code> mise \u2705 <code>hygen</code> mise \u2705 <code>hyperfine</code> mise \u2705 <code>iam-policy-json-to-terraform</code> mise \u2705 <code>iamlive</code> mise \u2705 <code>ibmcloud</code> mise \u2705 <code>idris</code> asdf \u26a0\ufe0f No longer supported as of mise <code>2026.10.25 linux-x64 (2026-10-31)</code> <code>imagemagick</code> mise \u2705 <code>imessage-exporter</code> mise \u2705 <code>imgpkg</code> mise \u2705 <code>infisical</code> mise \u2705 <code>infracost</code> mise \u2705 <code>istioctl</code> asdf \u2705 <code>jactionlint</code> mise \u2705 <code>janet</code> mise \u2705 <code>jaq</code> mise \u2705 <code>java</code> mise \u2705 <code>java</code> asdf \u2705 <code>jb</code> mise \u2705 <code>jbang</code> mise \u2705 <code>jc</code> mise \u2705 <code>jd</code> mise \u2705 <code>jfrog-cli</code> mise \u2705 <code>jib</code> mise \u2705 <code>jiq</code> mise \u2705 <code>jj</code> mise \u2705 <code>jjui</code> mise \u2705 <code>jless</code> mise \u2705 <code>jmespath</code> mise \u2705 <code>jnv</code> mise \u2705 <code>jouet</code> mise \u2705 <code>jq</code> mise \u2705 <code>jqp</code> mise \u2705 <code>jreleaser</code> mise \u2705 <code>json5</code> mise \u2705 <code>jsonnet-bundler</code> mise \u2705 <code>jsonschema</code> mise \u2705 <code>jujutsu</code> mise \u2705 <code>jujutsu-ui</code> mise \u2705 <code>jules</code> mise \u2705 <code>julia</code> asdf \u2705 <code>just</code> asdf \u2705 <code>jwt</code> mise \u2705 <code>jwtui</code> mise \u2705 <code>jx</code> mise \u2705 <code>k0sctl</code> mise \u2705 <code>k2tf</code> mise \u2705 <code>k3d</code> mise \u2705 <code>k3kcli</code> mise \u2705 <code>k3s</code> asdf \u2705 <code>k3sup</code> mise \u2705 <code>k6</code> mise \u2705 <code>k9s</code> mise \u2705 <code>kafka</code> mise \u26a0\ufe0f No longer supported as of mise <code>2026.10.25 linux-x64 (2026-10-31)</code> <code>kafkactl</code> mise \u2705 <code>kapp</code> mise \u2705 <code>kbld</code> mise \u2705 <code>kcl</code> mise \u2705 <code>kconf</code> mise \u2705 <code>killport</code> mise \u2705 <code>kind</code> asdf \u2705 <code>kingfisher</code> mise \u2705 <code>kiota</code> mise \u2705 <code>kn</code> mise \u2705 <code>ko</code> mise \u2705 <code>koka</code> mise \u2705 <code>kompose</code> mise \u2705 <code>kopia</code> mise \u2705 <code>kops</code> mise \u2705 <code>kotlin</code> asdf \u2705 <code>kpt</code> mise \u2705 <code>krew</code> mise \u2705 <code>kscript</code> mise \u2705 <code>ksops</code> mise \u2705 <code>ktlint</code> asdf \u2705 <code>kube-capacity</code> mise \u2705 <code>kube-controller-tools</code> mise \u2705 <code>kube-linter</code> mise \u2705 <code>kube-score</code> mise \u2705 <code>kubebuilder</code> asdf \u2705 <code>kubecm</code> mise \u2705 <code>kubecolor</code> mise \u2705 <code>kubeconform</code> mise \u2705 <code>kubectl</code> asdf \u2705 <code>kubectl-bindrole</code> mise \u2705 <code>kubectl-convert</code> mise \u2705 <code>kubectl-kots</code> mise \u2705 <code>kubectl-kuttl</code> mise \u2705 <code>kubectl-rolesum</code> mise \u2705 <code>kubectx</code> mise \u2705 <code>kubelogin</code> mise \u2705 <code>kubens</code> mise \u2705 <code>kubent</code> mise \u2705 <code>kubeone</code> mise \u2705 <code>kubergrunt</code> mise \u2705 <code>kubeseal</code> mise \u2705 <code>kubesec</code> mise \u2705 <code>kubeshark</code> mise \u2705 <code>kubespy</code> mise \u2705 <code>kubeswitch</code> mise \u2705 <code>kubetail</code> asdf \u26a0\ufe0f No longer supported as of mise <code>2026.10.25 linux-x64 (2026-10-31)</code> <code>kubeval</code> mise \u2705 <code>kubevela</code> mise \u2705 <code>kubie</code> mise \u2705 <code>kustomize</code> asdf \u2705 <code>kuttl</code> mise \u2705 <code>kwokctl</code> mise \u2705 <code>kyverno</code> mise \u2705 <code>lazydocker</code> mise \u2705 <code>lazygit</code> mise \u2705 <code>lazyjournal</code> mise \u2705 <code>lazyssh</code> mise \u2705 <code>ldc</code> mise \u2705 <code>lefthook</code> mise \u2705 <code>leiningen</code> mise \u2705 <code>libsql-server</code> mise \u2705 <code>license-plist</code> mise \u2705 <code>lima</code> mise \u2705 <code>linkerd</code> mise \u2705 <code>liquibase</code> mise \u2705 <code>lisette</code> mise \u2705 <code>litestream</code> mise \u2705 <code>llama.cpp</code> mise \u2705 <code>llmfit</code> mise \u2705 <code>lnav</code> mise \u2705 <code>localstack</code> mise \u2705 <code>localstack</code> asdf \u2705 <code>loki-logcli</code> mise \u2705 <code>longbridge-terminal</code> mise \u2705 <code>lore</code> mise \u2705 <code>ls-lint</code> mise \u2705 <code>lsd</code> mise \u2705 <code>lstk</code> mise \u2705 <code>lua</code> asdf \u2705 <code>lua-language-server</code> mise \u2705 <code>luajit</code> mise \u2705 <code>luau</code> mise \u2705 <code>lychee</code> mise \u2705 <code>maestro</code> asdf \u2705 <code>mage</code> mise \u2705 <code>magika</code> mise \u2705 <code>mago</code> mise \u2705 <code>mailpit</code> mise \u2705 <code>make</code> mise \u2705 <code>mani</code> mise \u2705 <code>mark</code> mise \u2705 <code>markdownlint-cli2</code> asdf \u2705 <code>marksman</code> mise \u2705 <code>marp-cli</code> mise \u2705 <code>martin</code> mise \u2705 <code>mas</code> mise \u2705 <code>mask</code> mise \u2705 <code>maturin</code> mise \u2705 <code>maven</code> asdf \u2705 <code>mbx</code> mise \u2705 <code>mc</code> mise \u2705 <code>mdbook</code> mise \u2705 <code>mdbook-linkcheck</code> mise \u2705 <code>melange</code> mise \u2705 <code>mermaid-ascii</code> mise \u2705 <code>meson</code> mise \u2705 <code>micro</code> mise \u2705 <code>micromamba</code> mise \u2705 <code>micronaut</code> mise \u2705 <code>microsandbox</code> mise \u2705 <code>miller</code> mise \u2705 <code>mimirtool</code> asdf \u2705 <code>minify</code> mise \u2705 <code>minikube</code> asdf \u2705 <code>minio</code> mise \u2705 <code>miniserve</code> mise \u2705 <code>minishift</code> mise \u2705 <code>minisign</code> mise \u2705 <code>mint</code> mise \u2705 <code>mirrord</code> mise \u2705 <code>mitmproxy</code> mise \u2705 <code>mkcert</code> mise \u2705 <code>mockery</code> asdf \u2705 <code>mockolo</code> mise \u2705 <code>mold</code> mise \u2705 <code>mole</code> mise \u2705 <code>mongodb</code> mise \u2705 <code>mongosh</code> mise \u2705 <code>mosh</code> mise \u2705 <code>mprocs</code> mise \u2705 <code>mpv</code> mise \u2705 <code>mr-boxington</code> mise \u2705 <code>mssqldef</code> mise \u2705 <code>muse</code> mise \u274c <code>mutagen</code> mise \u2705 <code>mvnd</code> mise \u2705 <code>mysql</code> mise \u2705 <code>mysql-client</code> mise \u2705 <code>mysqldef</code> mise \u2705 <code>nancy</code> mise \u2705 <code>native-sdk</code> mise \u2705 <code>nats-server</code> mise \u2705 <code>navi</code> mise \u2705 <code>neko</code> mise \u2705 <code>nelm</code> mise \u2705 <code>neo4j</code> mise \u274c <code>neonctl</code> mise \u2705 <code>neovim</code> mise \u2705 <code>nerdctl</code> mise \u2705 <code>newrelic</code> mise \u2705 <code>newrelic-cli</code> mise \u2705 <code>nfpm</code> mise \u2705 <code>ni</code> mise \u2705 <code>nim</code> asdf \u2705 <code>ninja</code> mise \u2705 <code>node</code> mise \u2705 <code>nodejs</code> asdf \u26a0\ufe0f No longer supported as of mise <code>2026.10.25 linux-x64 (2026-10-31)</code> <code>nomad</code> mise \u2705 <code>nomad-pack</code> mise \u2705 <code>nono</code> mise \u2705 <code>notation</code> mise \u2705 <code>nova</code> mise \u2705 <code>npm</code> mise \u2705 <code>nsc</code> mise \u2705 <code>nu</code> mise \u2705 <code>nub</code> mise \u2705 <code>nubr</code> mise \u2705 <code>numbat</code> mise \u2705 <code>nushell</code> mise \u2705 <code>oapi-codegen</code> mise \u2705 <code>oauth2c</code> mise \u2705 <code>oc</code> mise \u2705 <code>ocaml</code> asdf \u26a0\ufe0f No longer supported as of mise <code>2026.10.25 linux-x64 (2026-10-31)</code> <code>oci</code> asdf \u2705 <code>octosql</code> mise \u2705 <code>odin</code> mise \u2705 <code>odo</code> mise \u2705 <code>oh-my-pi</code> mise \u2705 <code>oh-my-posh</code> mise \u2705 <code>oha</code> mise \u2705 <code>okta-aws</code> mise \u2705 <code>okta-aws-cli</code> mise \u2705 <code>okteto</code> mise \u2705 <code>ollama</code> mise \u2705 <code>ols</code> mise \u2705 <code>om</code> mise \u2705 <code>omnictl</code> mise \u2705 <code>onefetch</code> mise \u2705 <code>onyx</code> mise \u2705 <code>op</code> mise \u2705 <code>opa</code> asdf \u2705 <code>opam</code> mise \u2705 <code>openbao</code> mise \u2705 <code>opencode</code> mise \u2705 <code>openfaas-cli</code> mise \u2705 <code>openfga</code> mise \u2705 <code>opengrep</code> mise \u2705 <code>opensearch-cli</code> mise \u2705 <code>openshift-install</code> mise \u274c <code>opentofu</code> mise \u2705 <code>opentofu</code> asdf \u2705 <code>operator-sdk</code> mise \u2705 <code>oras</code> mise \u2705 <code>ori</code> mise \u2705 <code>ormolu</code> mise \u2705 <code>orval</code> mise \u2705 <code>osv-scanner</code> mise \u2705 <code>overmind</code> mise \u2705 <code>oxfmt</code> mise \u2705 <code>oxipng</code> mise \u2705 <code>oxker</code> mise \u2705 <code>oxlint</code> mise \u2705 <code>pack</code> mise \u2705 <code>packer</code> mise \u2705 <code>packer</code> asdf \u2705 <code>packslip</code> mise \u2705 <code>pandoc</code> mise \u2705 <code>pastel</code> mise \u2705 <code>patat</code> mise \u2705 <code>pdm</code> mise \u2705 <code>peco</code> mise \u2705 <code>periphery</code> mise \u2705 <code>perl</code> asdf \u2705 <code>pgroll</code> mise \u2705 <code>php</code> asdf \u2705 <code>pi</code> mise \u2705 <code>pinact</code> mise \u2705 <code>pinniped</code> mise \u2705 <code>pint</code> mise \u2705 <code>pipectl</code> mise \u2705 <code>pipenv</code> mise \u2705 <code>pipx</code> mise \u2705 <code>pitchfork</code> mise \u2705 <code>pivnet</code> mise \u2705 <code>pixi</code> mise \u2705 <code>pkgx</code> mise \u2705 <code>pkl</code> mise \u2705 <code>playwright</code> mise \u2705 <code>please</code> mise \u2705 <code>pluto</code> mise \u2705 <code>pnpm</code> mise \u2705 <code>pnpm</code> asdf \u2705 <code>pocketbase</code> mise \u2705 <code>podlet</code> mise \u2705 <code>podman</code> mise \u2705 <code>podman-tui</code> mise \u2705 <code>poetry</code> asdf \u2705 <code>polaris</code> mise \u2705 <code>popeye</code> mise \u2705 <code>poppler</code> mise \u2705 <code>porter</code> mise \u2705 <code>portless</code> mise \u2705 <code>postgres</code> mise \u2705 <code>powerline-go</code> mise \u2705 <code>powerpipe</code> mise \u2705 <code>powershell</code> mise \u2705 <code>powershell-core</code> mise \u2705 <code>pre-commit</code> asdf \u2705 <code>prek</code> mise \u2705 <code>prettier</code> mise \u2705 <code>process-compose</code> mise \u2705 <code>promtool</code> mise \u2705 <code>protobuf</code> mise \u2705 <code>protoc</code> mise \u2705 <code>protoc</code> asdf \u2705 <code>protoc-gen-connect-go</code> mise \u2705 <code>protoc-gen-go</code> mise \u2705 <code>protoc-gen-go-grpc</code> mise \u2705 <code>protoc-gen-js</code> mise \u2705 <code>protoc-gen-validate</code> mise \u2705 <code>protolint</code> mise \u2705 <code>psqldef</code> mise \u2705 <code>pulumi</code> asdf \u2705 <code>purescript</code> mise \u2705 <code>purty</code> mise \u2705 <code>python</code> mise \u2705 <code>python</code> asdf \u2705 <code>qdns</code> mise \u2705 <code>qsv</code> mise \u2705 <code>quarkus</code> mise \u2705 <code>quicktype</code> mise \u2705 <code>qwen</code> mise \u2705 <code>qwen-code</code> mise \u2705 <code>racket</code> mise \u2705 <code>railway</code> mise \u2705 <code>rancher</code> mise \u2705 <code>rbac-lookup</code> mise \u2705 <code>rclone</code> mise \u2705 <code>rea</code> mise \u2705 <code>rebar</code> asdf \u2705 <code>reckoner</code> mise \u2705 <code>redis</code> mise \u2705 <code>redpanda-connect</code> mise \u2705 <code>reg</code> mise \u2705 <code>regal</code> mise \u2705 <code>regctl</code> mise \u2705 <code>regsync</code> mise \u2705 <code>release-plz</code> mise \u2705 <code>restate</code> mise \u2705 <code>restate-server</code> mise \u2705 <code>restatectl</code> mise \u2705 <code>restic</code> mise \u2705 <code>restish</code> mise \u2705 <code>resvg</code> mise \u2705 <code>reviewdog</code> mise \u2705 <code>revive</code> mise \u2705 <code>rg</code> mise \u2705 <code>richgo</code> mise \u2705 <code>ripgrep</code> mise \u2705 <code>ripgrep-all</code> mise \u2705 <code>ripsecrets</code> mise \u2705 <code>rmz</code> mise \u2705 <code>rpk</code> mise \u2705 <code>rtk</code> mise \u2705 <code>ruby</code> mise \u2705 <code>ruby</code> asdf \u2705 <code>ruff</code> mise \u2705 <code>rumdl</code> mise \u2705 <code>rush</code> mise \u2705 <code>rust</code> mise \u2705 <code>rust</code> asdf \u2705 <code>rust-analyzer</code> mise \u2705 <code>rustfs</code> mise \u2705 <code>rustic</code> mise \u2705 <code>rye</code> mise \u2705 <code>s5cmd</code> mise \u2705 <code>saml2aws</code> mise \u2705 <code>sampler</code> mise \u2705 <code>sbt</code> asdf \u2705 <code>scala</code> asdf \u2705 <code>scala-cli</code> mise \u2705 <code>scalafmt</code> mise \u2705 <code>scaleway</code> mise \u2705 <code>scaleway-cli</code> mise \u2705 <code>scalingo-cli</code> mise \u2705 <code>scarb</code> mise \u2705 <code>sccache</code> mise \u2705 <code>schemacrawler</code> mise \u2705 <code>scie-pants</code> mise \u2705 <code>scooter</code> mise \u2705 <code>scorecard</code> mise \u2705 <code>sd</code> mise \u2705 <code>semgrep</code> mise \u2705 <code>semver</code> mise \u2705 <code>sentinel</code> mise \u2705 <code>sentry</code> mise \u2705 <code>sentry-cli</code> mise \u2705 <code>serverless</code> mise \u2705 <code>setup-envtest</code> mise \u2705 <code>sheldon</code> mise \u2705 <code>shell2http</code> mise \u2705 <code>shellcheck</code> mise \u2705 <code>shellcheck</code> asdf \u2705 <code>shellharden</code> mise \u2705 <code>shellspec</code> mise \u2705 <code>sherif</code> mise \u2705 <code>shfmt</code> asdf \u2705 <code>signadot</code> mise \u2705 <code>sing-box</code> mise \u2705 <code>skaffold</code> asdf \u2705 <code>skate</code> mise \u2705 <code>skeema</code> mise \u2705 <code>skim</code> mise \u2705 <code>sloth</code> mise \u2705 <code>slsa-verifier</code> mise \u2705 <code>smithy</code> mise \u2705 <code>snyk</code> mise \u2705 <code>sofka</code> mise \u2705 <code>soft-serve</code> mise \u2705 <code>solidity</code> mise \u2705 <code>sonar-scanner-cli</code> mise \u2705 <code>sonarqube-cli</code> mise \u2705 <code>sonobuoy</code> mise \u2705 <code>sops</code> mise \u2705 <code>sops</code> asdf \u2705 <code>sopstool</code> mise \u2705 <code>sourcery</code> mise \u2705 <code>spacectl</code> mise \u2705 <code>spago</code> mise \u2705 <code>spark</code> mise \u2705 <code>specstory</code> mise \u2705 <code>spectral</code> mise \u2705 <code>spicedb</code> mise \u2705 <code>spin</code> mise \u2705 <code>spin-framework</code> mise \u2705 <code>spotify-downloader</code> mise \u2705 <code>spotify-player</code> mise \u2705 <code>spring-boot</code> mise \u2705 <code>spruce</code> mise \u2705 <code>sqlc</code> mise \u2705 <code>sqlcl</code> mise \u2705 <code>sqlite</code> mise \u2705 <code>sqlite3def</code> mise \u2705 <code>sshi</code> mise \u2705 <code>sshuttle</code> mise \u2705 <code>sst</code> mise \u2705 <code>stack</code> mise \u2705 <code>starknet-foundry</code> mise \u2705 <code>starknet-foundry-sncast</code> mise \u2705 <code>starship</code> mise \u2705 <code>staticcheck</code> mise \u2705 <code>steampipe</code> asdf \u2705 <code>step</code> mise \u2705 <code>stern</code> mise \u2705 <code>stripe</code> mise \u2705 <code>stripe-cli</code> mise \u2705 <code>stylua</code> mise \u2705 <code>sui</code> mise \u2705 <code>supabase</code> mise \u2705 <code>superfile</code> mise \u2705 <code>superhtml</code> mise \u2705 <code>svgo</code> mise \u2705 <code>svu</code> mise \u2705 <code>swag</code> mise \u2705 <code>swift</code> mise \u2705 <code>swift-package-list</code> mise \u2705 <code>swiftformat</code> mise \u2705 <code>swiftgen</code> mise \u2705 <code>swiftlint</code> mise \u2705 <code>syft</code> mise \u2705 <code>syncthing</code> mise \u2705 <code>systemctl-tui</code> mise \u2705 <code>tailpipe</code> mise \u2705 <code>tak</code> mise \u2705 <code>talhelper</code> asdf \u2705 <code>talos</code> mise \u2705 <code>talosctl</code> asdf \u2705 <code>tanka</code> mise \u2705 <code>tanzu</code> mise \u2705 <code>taplo</code> mise \u2705 <code>tart</code> mise \u2705 <code>task</code> mise \u2705 <code>tauri-cli</code> mise \u2705 <code>tbls</code> mise \u2705 <code>tctl</code> mise \u2705 <code>tealdeer</code> mise \u2705 <code>tekton</code> mise \u2705 <code>tekton-cli</code> mise \u2705 <code>teleport-community</code> mise \u2705 <code>teleport-ent</code> mise \u2705 <code>telepresence</code> mise \u2705 <code>television</code> mise \u2705 <code>teller</code> mise \u2705 <code>temporal</code> mise \u2705 <code>terraform</code> asdf \u2705 <code>terraform-docs</code> asdf \u2705 <code>terraform-ls</code> mise \u2705 <code>terraform-lsp</code> mise \u2705 <code>terraform-validator</code> mise \u2705 <code>terraformer</code> asdf \u2705 <code>terragrunt</code> mise \u2705 <code>terragrunt</code> asdf \u2705 <code>terramate</code> asdf \u2705 <code>terrascan</code> mise \u2705 <code>tf-summarize</code> mise \u2705 <code>tfc-agent</code> mise \u2705 <code>tfctl</code> mise \u2705 <code>tfenv</code> mise \u2705 <code>tflint</code> asdf \u2705 <code>tfmigrate</code> mise \u2705 <code>tfnotify</code> mise \u2705 <code>tfsec</code> asdf \u2705 <code>tfstate-lookup</code> mise \u2705 <code>tfswitch</code> mise \u2705 <code>tfupdate</code> mise \u2705 <code>ticker</code> mise \u2705 <code>tigerbeetle</code> mise \u2705 <code>tilt</code> mise \u2705 <code>timoni</code> mise \u2705 <code>tiny</code> mise \u2705 <code>tinygo</code> mise \u2705 <code>tinymist</code> mise \u2705 <code>tinytex</code> mise \u2705 <code>tirith</code> mise \u2705 <code>tlrc</code> mise \u2705 <code>tmux</code> mise \u2705 <code>tokei</code> mise \u2705 <code>tombi</code> mise \u2705 <code>tomcat</code> mise \u2705 <code>tonnage</code> mise \u2705 <code>topgrade</code> mise \u2705 <code>traefik</code> mise \u2705 <code>transifex</code> mise \u2705 <code>trdsql</code> mise \u2705 <code>tree-sitter</code> mise \u2705 <code>tridentctl</code> mise \u2705 <code>trivy</code> asdf \u2705 <code>trufflehog</code> mise \u2705 <code>trunk</code> mise \u2705 <code>trzsz-go</code> mise \u2705 <code>trzsz-ssh</code> mise \u2705 <code>tssh</code> mise \u2705 <code>tsuru</code> mise \u2705 <code>ttyd</code> mise \u2705 <code>tuios</code> mise \u2705 <code>tuist</code> asdf \u2705 <code>turbo</code> mise \u2705 <code>turso</code> mise \u2705 <code>tusd</code> mise \u2705 <code>twg</code> mise \u274c <code>ty</code> mise \u2705 <code>typos</code> asdf \u2705 <code>typst</code> mise \u2705 <code>typstyle</code> mise \u2705 <code>ubi</code> mise \u2705 <code>umoci</code> mise \u2705 <code>unison</code> mise \u2705 <code>upctl</code> mise \u2705 <code>updatecli</code> mise \u2705 <code>upt</code> mise \u2705 <code>upx</code> mise \u2705 <code>usage</code> mise \u2705 <code>usql</code> mise \u2705 <code>uv</code> asdf \u2705 <code>v</code> mise \u2705 <code>vacuum</code> mise \u2705 <code>vale</code> mise \u2705 <code>vals</code> mise \u2705 <code>vault</code> asdf \u2705 <code>vcluster</code> mise \u2705 <code>vector</code> mise \u2705 <code>velad</code> mise \u2705 <code>velero</code> mise \u2705 <code>vendir</code> mise \u2705 <code>venom</code> mise \u2705 <code>vercel</code> mise \u2705 <code>vespa-cli</code> mise \u2705 <code>vfox</code> mise \u2705 <code>vhs</code> mise \u2705 <code>victoria-metrics</code> mise \u2705 <code>viddy</code> mise \u2705 <code>vim</code> mise \u2705 <code>viteplus</code> mise \u2705 <code>vivid</code> mise \u2705 <code>vlang</code> mise \u2705 <code>vp</code> mise \u2705 <code>vscode-cli</code> mise \u2705 <code>vultr</code> mise \u2705 <code>vultr-cli</code> mise \u2705 <code>wacli</code> mise \u2705 <code>wait-for-gh-rate-limit</code> mise \u2705 <code>wash</code> mise \u2705 <code>wasm-tools</code> mise \u2705 <code>wasmer</code> mise \u2705 <code>wasmtime</code> mise \u2705 <code>watchexec</code> mise \u2705 <code>waypoint</code> mise \u2705 <code>weave-gitops</code> mise \u2705 <code>websocat</code> mise \u2705 <code>werf</code> mise \u2705 <code>witr</code> mise \u2705 <code>workerd</code> mise \u2705 <code>workmux</code> mise \u2705 <code>worktrunk</code> mise \u2705 <code>wrangler</code> mise \u2705 <code>wtfutil</code> mise \u2705 <code>xc</code> mise \u2705 <code>xcbeautify</code> mise \u2705 <code>xchtmlreport</code> mise \u2705 <code>xcodegen</code> mise \u2705 <code>xcodes</code> mise \u2705 <code>xcresultparser</code> mise \u2705 <code>xcsift</code> mise \u2705 <code>xh</code> mise \u2705 <code>xxh</code> mise \u2705 <code>yamlfmt</code> asdf \u2705 <code>yamllint</code> asdf \u2705 <code>yamlscript</code> mise \u2705 <code>yara-x</code> mise \u2705 <code>yarn</code> mise \u2705 <code>yazi</code> mise \u2705 <code>yj</code> mise \u2705 <code>yor</code> mise \u2705 <code>youtube-dl</code> mise \u2705 <code>yq</code> asdf \u2705 <code>yt-dlp</code> mise \u2705 <code>yt-dlp-nightly</code> mise \u2705 <code>ytt</code> mise \u2705 <code>zarf</code> mise \u2705 <code>zellij</code> mise \u2705 <code>zephyr</code> mise \u2705 <code>zig</code> mise \u2705 <code>zig</code> asdf \u2705 <code>zigmod</code> mise \u2705 <code>zizmor</code> mise \u2705 <code>zk</code> mise \u2705 <code>zls</code> mise \u2705 <code>zmx</code> mise \u2705 <code>zola</code> mise \u2705 <code>zoxide</code> mise \u2705 <code>zprint</code> mise \u2705"},{"location":"modules/manager/mix/","title":"Automated Dependency Updates for Mix","text":"<p>Categories: <code>elixir</code></p> <p>Renovate supports updating Mix dependencies.</p>"},{"location":"modules/manager/mix/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)mix\\.exs$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/mix/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>git-tags</code>, <code>github-tags</code>, <code>hex</code>.</p>"},{"location":"modules/manager/mix/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>prod</code> A production dependency <code>dev</code> A development-only dependency (restricted via <code>only:</code>)"},{"location":"modules/manager/mix/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)mix\\\\.exs$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/mix/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>mix.lock</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/mix/#additional-information","title":"Additional Information","text":"<p>The <code>mix</code> manager uses Renovate's implementation of Elixir SemVer to evaluate update ranges.</p> <p>The <code>mix</code> package manager itself is used to keep the lock file up-to-date.</p> <p>The following <code>depTypes</code> are currently supported by the <code>mix</code> manager :</p> <ul> <li><code>prod</code>: all dependencies by default</li> <li><code>dev</code>: dependencies with <code>:only</code> option not containing <code>:prod</code></li> </ul>"},{"location":"modules/manager/mix/#lockfilemaintenance","title":"<code>lockFileMaintenance</code>","text":"<p>We recommend you use <code>lockFileMaintenance</code> for the <code>mix</code> manager.</p> <p><code>lockFileMaintenance=true</code> periodically refreshes your <code>mix.lock</code> files, ensuring all indirect dependencies are updated to their latest allowed versions.</p> <p>This option will be skipped in umbrella projects, as they share a single <code>mix.lock</code> file for all applications <code>mix.exs</code> files.</p>"},{"location":"modules/manager/mix/#default-rangestrategyauto-behavior","title":"Default <code>rangeStrategy=auto</code> behavior","text":"<p>Renovate's default <code>rangeStrategy</code> is <code>\"auto\"</code>. Here's how <code>\"auto\"</code> works with the <code>mix</code> manager:</p> Version type New version Old range New range after update What Renovate does Complex range <code>1.7.2</code> <code>&lt; 1.7.0 or ~&gt; 1.7.1</code> <code>&lt; 1.7.0 or ~&gt; 1.7.2</code> Widen range to include the new version. Simple range <code>0.39.0</code> <code>&lt;= 0.38.0</code> <code>&lt;= 0.39.0</code> If update outside current range: widens range to include the new version. Exact version constraint <code>0.13.0</code> <code>== 0.12.0</code> <code>== 0.13.0</code> Replace old version with new version."},{"location":"modules/manager/mix/#recommended-rangestrategy-for-apps-and-libraries","title":"Recommended <code>rangeStrategy</code> for apps and libraries","text":"<p>For applications, we recommend using <code>rangeStrategy=pin</code>. This pins your dependencies to exact versions, which is generally considered best practice for apps.</p> <p>For libraries, use <code>rangeStrategy=widen</code> with version ranges in your <code>mix.exs</code>. This allows for greater compatibility with other projects that may use your library as a dependency.</p>"},{"location":"modules/manager/nix/","title":"Automated Dependency Updates for Nix","text":"<p>Categories: <code>no-category</code></p> <p>Renovate supports updating Nix dependencies.</p>"},{"location":"modules/manager/nix/#enabling","title":"Enabling","text":"<p>Nix functionality is currently in beta testing, so you must opt-in to test it. To enable it, add a configuration like this to either your self-hosted config or your <code>renovate.json</code>:</p> <pre><code>{\n  \"nix\": {\n    \"enabled\": true\n  }\n}\n</code></pre> <p>If you find any bugs, please create a new discussion first. If you find that it works well, then let us know too.</p>"},{"location":"modules/manager/nix/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)flake\\.nix$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/nix/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>git-refs</code>.</p>"},{"location":"modules/manager/nix/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/nix/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)flake\\\\.nix$/\"\n  ],\n  \"commitMessageTopic\": \"nix\",\n  \"commitMessageExtra\": \"to {{newValue}}\",\n  \"enabled\": false\n}\n</code></pre>"},{"location":"modules/manager/nix/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>flake.lock</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/nix/#additional-information","title":"Additional Information","text":"<p>The <code>nix</code> manager supports:</p> <ul> <li><code>lockFileMaintenance</code> updates for <code>flake.lock</code></li> <li>input updates for <code>flake.lock</code></li> </ul> <p>For specifying <code>packageRules</code> it is important to know how <code>depName</code> and <code>packageName</code> are defined for nix updates:</p> <ul> <li>The <code>depName</code> field is equal to the nix flake input name, eg. <code>nix.inputs.nixpkgs.url = \"github:NixOS/nixpkgs/nixos-unstable\";</code> would have the <code>depName</code> of <code>nixpkgs</code></li> <li>The <code>packageName</code> field is equal to the fully-qualified root URL of the package source, eg. <code>https://github.com/NixOS/nixpkgs</code> for the above example.</li> </ul>"},{"location":"modules/manager/nodenv/","title":"Automated Dependency Updates for nodenv","text":"<p>Categories: <code>js</code>, <code>node</code></p> <p>Renovate supports updating nodenv dependencies.</p>"},{"location":"modules/manager/nodenv/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)\\.node-version$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/nodenv/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>node-version</code>.</p>"},{"location":"modules/manager/nodenv/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/nodenv/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)\\\\.node-version$/\"\n  ],\n  \"versioning\": \"node\"\n}\n</code></pre>"},{"location":"modules/manager/nodenv/#additional-information","title":"Additional Information","text":"<p>Simply keeps the <code>.node-version</code> file updated.</p>"},{"location":"modules/manager/npm/","title":"Automated Dependency Updates for npm","text":"<p>Categories: <code>js</code></p> <p>Renovate supports updating npm dependencies.</p>"},{"location":"modules/manager/npm/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>/(^|/)package\\.json$/\n/(^|/)pnpm-workspace\\.yaml$/\n/(^|/)\\.yarnrc\\.yml$/\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/npm/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>github-tags</code>, <code>node-version</code>, <code>npm</code>.</p>"},{"location":"modules/manager/npm/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> <code>prettyDepType</code> Description <code>dependencies</code> <code>dependency</code> Listed under <code>dependencies</code> <code>devDependencies</code> <code>devDependency</code> Listed under <code>devDependencies</code> <code>optionalDependencies</code> <code>optionalDependency</code> Listed under <code>optionalDependencies</code> <code>peerDependencies</code> <code>peerDependency</code> Listed under <code>peerDependencies</code> <code>engines</code> <code>engine</code> Listed under <code>engines</code> <code>volta</code> <code>volta</code> Listed under <code>volta</code> <code>resolutions</code> <code>resolutions</code> Listed under <code>resolutions</code> (Yarn) <code>packageManager</code> <code>packageManager</code> Listed under <code>packageManager</code> <code>overrides</code> <code>overrides</code> Listed under <code>overrides</code> <code>pnpm</code> <code>pnpm</code> Listed under the top-level <code>pnpm</code> field <code>pnpm.overrides</code> <code>overrides</code> Listed under <code>pnpm.overrides</code> <code>devEngines.runtime</code> <code>devEngines.runtime</code> Listed under <code>devEngines.runtime</code> <code>devEngines.packageManager</code> <code>devEngines.packageManager</code> Listed under <code>devEngines.packageManager</code> <code>pnpm-workspace.overrides</code> <code>overrides</code> Listed under <code>overrides</code> in a pnpm workspace YAML file <p>Additionally, catalog dependencies produce dynamic <code>depType</code> values: <code>pnpm.catalog.&lt;name&gt;</code> for pnpm catalogs and <code>yarn.catalog.&lt;name&gt;</code> for yarn catalogs.</p>"},{"location":"modules/manager/npm/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)package\\\\.json$/\",\n    \"/(^|/)pnpm-workspace\\\\.yaml$/\",\n    \"/(^|/)\\\\.yarnrc\\\\.yml$/\"\n  ],\n  \"digest\": {\n    \"prBodyDefinitions\": {\n      \"Change\": \"{{#if displayFrom}}`{{{displayFrom}}}` \u2192 {{else}}{{#if currentValue}}`{{{currentValue}}}` \u2192 {{/if}}{{/if}}{{#if displayTo}}`{{{displayTo}}}`{{else}}`{{{newValue}}}`{{/if}}\"\n    }\n  },\n  \"prBodyDefinitions\": {\n    \"Change\": \"[{{#if displayFrom}}`{{{displayFrom}}}` \u2192 {{else}}{{#if currentValue}}`{{{currentValue}}}` \u2192 {{/if}}{{/if}}{{#if displayTo}}`{{{displayTo}}}`{{else}}`{{{newValue}}}`{{/if}}]({{#if depName}}https://renovatebot.com/diffs/npm/{{replace '/' '%2f' depName}}/{{{currentVersion}}}/{{{newVersion}}}{{/if}})\"\n  }\n}\n</code></pre>"},{"location":"modules/manager/npm/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>package-lock.json</code></li> <li><code>pnpm-lock.yaml</code></li> <li><code>yarn.lock</code></li> </ul> <p>Delegated to the underlying package manager CLI - <code>npm</code>, <code>pnpm</code>, or Yarn - depending on which lock file is present.</p>"},{"location":"modules/manager/npm/#additional-information","title":"Additional Information","text":""},{"location":"modules/manager/npm/#npm-problems-and-workarounds","title":"npm problems and workarounds","text":""},{"location":"modules/manager/npm/#invalid-lock-file-npm-ci-fails","title":"Invalid lock file (npm ci fails)","text":"<p>Unfortunately, <code>npm</code> itself sometimes generates invalid lock files which fail <code>npm ci</code>. Try adding <code>\"postUpdateOptions\": [\"npmInstallTwice\"]</code> to tell Renovate run any <code>npm install</code> command (which is used to update lock files) twice. This is less efficient than running npm once, but has been known to fix most problems of this type. Renovate already runs <code>npm install</code> twice during lock file maintenance, because regenerating a lock file from scratch is known to need a second pass.</p> <p>If this npm bug remains unfixed, and it becomes too frequent for Renovate users, then we may need to modify Renovate to do this by default. Please post feedback to the Renovate repository \"Discussions\" if you're needing to use this feature frequently or widely.</p>"},{"location":"modules/manager/npm/#yarn","title":"Yarn","text":""},{"location":"modules/manager/npm/#version-selection-installation","title":"Version Selection / Installation","text":"<p>If Renovate detects a <code>packageManager</code> setting for Yarn in <code>package.json</code> then it will use Corepack to install Yarn.</p>"},{"location":"modules/manager/npm/#http-proxy-support","title":"HTTP Proxy Support","text":"<p>Yarn itself does not natively recognize/support the <code>HTTP_PROXY</code> and <code>HTTPS_PROXY</code> environment variables.</p> <p>You can configure <code>RENOVATE_X_YARN_PROXY=true</code> as an environment variable to enable configuring of Yarn proxy (e.g. if you cannot configure these proxy settings yourself in <code>~/.yarnrc.yml</code>).</p> <p>If set, and Renovate detects Yarn 2+, and one or both of those variables are present, then Renovate will run commands like <code>yarn config set --home httpProxy http://proxy</code> prior to executing <code>yarn install</code>. This will result in the <code>~/.yarnrc.yml</code> file being created or modified with these settings, and the settings are not removed afterwards.</p> <p>Configuration/conversion of <code>NO_PROXY</code> to Yarn config is not supported.</p>"},{"location":"modules/manager/nuget/","title":"Automated Dependency Updates for NuGet","text":"<p>Categories: <code>dotnet</code></p> <p>Renovate supports updating NuGet dependencies.</p>"},{"location":"modules/manager/nuget/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>/\\.(?:cs|fs|vb|sql)proj$/\n/\\.(?:props|targets)$/\n/(^|/)dotnet-tools\\.json$/\n/(^|/)global\\.json$/\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/nuget/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>, <code>dotnet-version</code>, <code>nuget</code>.</p>"},{"location":"modules/manager/nuget/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>docker</code> Container base image from <code>ContainerBaseImage</code> <code>nuget</code> NuGet package reference from <code>PackageReference</code>, <code>PackageVersion</code>, or similar elements <code>msbuild-sdk</code> MSBuild SDK reference from <code>Sdk</code> elements, <code>Import</code> elements, or <code>Project Sdk</code> attribute <code>dotnet-sdk</code> .NET SDK version from <code>global.json</code>"},{"location":"modules/manager/nuget/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/\\\\.(?:cs|fs|vb|sql)proj$/\",\n    \"/\\\\.(?:props|targets)$/\",\n    \"/(^|/)dotnet-tools\\\\.json$/\",\n    \"/(^|/)global\\\\.json$/\"\n  ],\n  \"rangeStrategy\": \"bump\",\n  \"packageRules\": [\n    {\n      \"matchDepTypes\": [\n        \"msbuild-sdk\"\n      ],\n      \"rangeStrategy\": \"bump\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/manager/nuget/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>packages.lock.json</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/nuget/#additional-information","title":"Additional Information","text":"<p>Use <code>packageRules</code> to control the behavior of the NuGet package manager.</p> <p>The NuGet package manager supports these SDK-style files and formats:</p> <ul> <li><code>.csproj</code></li> <li><code>.fsproj</code></li> <li><code>.sqlproj</code> (SSDT SQL projects)</li> <li><code>.vbproj</code></li> <li><code>.props</code></li> <li><code>.targets</code></li> <li><code>global.json</code></li> <li><code>dotnet-tools.json</code></li> </ul> <p>MSBuild SDK dependencies are also extracted from:</p> <ul> <li><code>&lt;Sdk Name=\"...\" Version=\"...\" /&gt;</code> elements</li> <li><code>&lt;Import ... Sdk=\"...\" Version=\"...\" /&gt;</code> elements</li> <li><code>&lt;Project Sdk=\"name/version\"&gt;</code> attributes</li> <li><code>global.json</code> \u2192 <code>msbuild-sdks</code></li> </ul> <p>.NET Core projects are supported by default.</p> <p>For Renovate to work with .NET Framework projects, you need to update these files so they match the new SDK-style format:</p> <ul> <li><code>.csproj</code></li> <li><code>.fsproj</code></li> <li><code>.vbproj</code></li> <li><code>.props</code></li> <li><code>.targets</code></li> </ul> <p>You can also extract from the single code file projects (since <code>.NET 10</code>). But, you need to add those files manually to the <code>managerFilePatterns</code> as they are not supported by default.</p>"},{"location":"modules/manager/nuget/#disabling-updates-for-pinned-versions","title":"Disabling updates for pinned versions","text":"<p>In NuGet, when you use versions like <code>Version=\"1.2.3\"</code> then it means \"1.2.3 or greater\" (an open-ended minimum, with no upper bound). When you use versions like <code>Version=\"[1.2.3]\"</code> then it means \"exactly 1.2.3\".</p> <p>If you would like Renovate to disable updating of exact versions (warning: you might end up years out of date and not realize it) then here is an example configuration to achieve that:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Skip pinned versions\",\n      \"matchManagers\": [\"nuget\"],\n      \"matchCurrentValue\": \"/^\\\\[[^,]+\\\\]$/\",\n      \"enabled\": false\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/manager/nuget/#getting-updates-for-non-pinned-bare-versions","title":"Getting updates for non-pinned (bare) versions","text":"<p>Per NuGet's versioning rules, a bare version such as <code>Version=\"1.2.3\"</code> is an open-ended minimum (<code>1.2.3</code> or greater) \u2014 so it is NuGet, not Renovate, that treats this as a range rather than a single version. The default <code>rangeStrategy</code> of <code>auto</code> resolves to <code>replace</code> for NuGet, and <code>replace</code> cannot produce an update for an open-ended minimum: every newer release already satisfies \"1.2.3 or greater\", so there is nothing to replace. The result is that Renovate detects no updates for these dependencies and closes any existing update PRs.</p> <p>To keep receiving updates for bare versions, set <code>rangeStrategy</code> to <code>bump</code>. With <code>bump</code>, Renovate raises the minimum to the newest release (for example <code>1.2.3</code> to <code>1.5.0</code>):</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Bump bare NuGet versions to the latest release\",\n      \"matchManagers\": [\"nuget\"],\n      \"rangeStrategy\": \"bump\"\n    }\n  ]\n}\n</code></pre> <p>Note</p> <p>This is a change in behavior. Earlier versions of Renovate anchored the \"current version\" directly to the value in your project file, so bare versions received updates under any <code>rangeStrategy</code>. Since Renovate <code>43.208.2</code>, Renovate no longer treats a range (including a bare NuGet version) as the current version, so the <code>rangeStrategy</code> now decides the outcome: use <code>bump</code> to restore the previous update behavior.</p>"},{"location":"modules/manager/nuget/#workload-restore","title":"Workload restore","text":"<p>Sometimes you need to run <code>dotnet workload restore</code> to ensure that all required workloads are installed before restoring the project. You can enable this behavior by adding <code>dotnetWorkloadRestore</code> to the <code>postUpdateOptions</code> in your Renovate configuration.</p> <pre><code>{\n  \"postUpdateOptions\": [\"dotnetWorkloadRestore\"]\n}\n</code></pre>"},{"location":"modules/manager/nvm/","title":"Automated Dependency Updates for nvm","text":"<p>Categories: <code>js</code>, <code>node</code></p> <p>Renovate supports updating nvm dependencies.</p>"},{"location":"modules/manager/nvm/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)\\.nvmrc$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/nvm/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>node-version</code>.</p>"},{"location":"modules/manager/nvm/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/nvm/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)\\\\.nvmrc$/\"\n  ],\n  \"versioning\": \"node\",\n  \"pinDigests\": false\n}\n</code></pre>"},{"location":"modules/manager/nvm/#additional-information","title":"Additional Information","text":"<p>Simply keeps the <code>.nvmrc</code> file updated.</p>"},{"location":"modules/manager/ocb/","title":"Automated Dependency Updates for OpenTelemetry Collector Builder (ocb)","text":"<p>Categories: <code>golang</code></p> <p>Renovate supports updating OpenTelemetry Collector Builder (ocb) dependencies.</p>"},{"location":"modules/manager/ocb/#file-matching","title":"File Matching","text":"<p>Because file names for <code>ocb</code> cannot be easily determined automatically, Renovate will not attempt to match any <code>ocb</code> files by default. For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/ocb/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>go</code>.</p>"},{"location":"modules/manager/ocb/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>collector</code> The OpenTelemetry Collector version itself <code>connectors</code> Connector component module <code>exports</code> Exporter component module <code>extensions</code> Extension component module <code>processors</code> Processor component module <code>providers</code> Provider component module <code>receivers</code> Receiver component module"},{"location":"modules/manager/ocb/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": []\n}\n</code></pre>"},{"location":"modules/manager/ocb/#additional-information","title":"Additional Information","text":"<p>Renovate uses this manager to update dependencies defined in the build definitions for the OpenTelemetry Collector Builder (ocb).</p> <p>By default, the <code>ocb</code> manager has no <code>managerFilePatterns</code> patterns. This means you must set a <code>managerFilePatterns</code> pattern for the <code>ocb</code> manager, for Renovate to update your <code>ocb</code> files. Here's a configuration example:</p> If your builder file is named foo-builder.yml or builder.yaml or builder-config.yaml<pre><code>{\n  \"ocb\": {\n    \"managerFilePatterns\": [\"/builder(-config)?.ya?ml$/\"]\n  }\n}\n</code></pre> <p>Supported dependencies and their respective <code>depType</code>s are:</p> Name depType base collector <code>collector</code> connectors <code>connectors</code> exporters <code>exports</code> extensions <code>extensions</code> processors <code>processors</code> providers <code>providers</code> receivers <code>receivers</code>"},{"location":"modules/manager/osgi/","title":"Automated Dependency Updates for OSGi","text":"<p>Categories: <code>java</code></p> <p>Renovate supports updating OSGi dependencies.</p>"},{"location":"modules/manager/osgi/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)src/main/features/.+\\.json$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/osgi/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>maven</code>.</p>"},{"location":"modules/manager/osgi/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/osgi/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)src/main/features/.+\\\\.json$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/osgi/#additional-information","title":"Additional Information","text":"<p>The <code>osgi</code> manager extracts dependencies from feature model definition files, typically located under <code>src/main/features</code>. It uses the <code>maven</code> datasource to find dependency updates.</p> <p>Artifact list extensions are not supported. For the definition of artifact list extensions, read section 159.7.3 of the OSGi R8 spec.</p> <p>References:</p> <ul> <li>OSGi compendium release 8, Feature Service Specification</li> <li>The Sling implementation of the feature model</li> </ul>"},{"location":"modules/manager/paket/","title":"Automated Dependency Updates for Paket","text":"<p>Categories: <code>dotnet</code></p> <p>Renovate supports updating Paket dependencies.</p>"},{"location":"modules/manager/paket/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)paket\\.dependencies$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/paket/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>nuget</code>.</p>"},{"location":"modules/manager/paket/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/paket/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)paket\\\\.dependencies$/\"\n  ],\n  \"versioning\": \"paket\"\n}\n</code></pre>"},{"location":"modules/manager/paket/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>paket.lock</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/paket/#additional-information","title":"Additional Information","text":"<p>Manage dependencies for Paket</p> <p>Extracts dependencies from files:</p> <ul> <li><code>paket.dependencies</code></li> <li><code>paket.lock</code></li> </ul> <p>The <code>source</code> entries of each group are used as registry URLs for the dependencies of that group.</p> <p>Restrictions:</p> <ul> <li>Only updates nuget source (github, gist, http, and git not supported)</li> <li>Version constraints in <code>paket.dependencies</code> are updated with the <code>paket</code> versioning module</li> <li>If <code>paket.lock</code> is missing, version constraints in <code>paket.dependencies</code> are still updated but no lock file is generated; dependencies without a version constraint are skipped</li> <li>Private feeds work for update detection via <code>hostRules</code>. For <code>paket update</code>, credentials are not provisioned automatically from <code>hostRules</code>: reference environment variables in the source definition (<code>source https://... username: \"%FEED_USER%\" password: \"%FEED_PASS%\"</code>) and expose them to the tool with <code>customEnvVariables</code></li> </ul>"},{"location":"modules/manager/pep621/","title":"Automated Dependency Updates for PEP 621","text":"<p>Categories: <code>python</code></p> <p>Renovate supports updating PEP 621 dependencies.</p>"},{"location":"modules/manager/pep621/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)pyproject\\.toml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/pep621/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>pypi</code>.</p>"},{"location":"modules/manager/pep621/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>requires-python</code> The <code>requires-python</code> constraint from <code>[project]</code> <code>project.dependencies</code> Listed under <code>[project.dependencies]</code> <code>project.optional-dependencies</code> Listed under <code>[project.optional-dependencies]</code> <code>dependency-groups</code> Listed under <code>[dependency-groups]</code> (PEP 735) <code>build-system.requires</code> Listed under <code>[build-system.requires]</code> <code>tool.pdm.dev-dependencies</code> Listed under <code>[tool.pdm.dev-dependencies]</code> <code>tool.uv.dev-dependencies</code> Listed under <code>[tool.uv.dev-dependencies]</code> <code>tool.uv.sources</code> Listed under <code>[tool.uv.sources]</code> <p>Hatch environments produce dynamic <code>depType</code> values in the form <code>tool.hatch.envs.&lt;env-name&gt;</code>.</p>"},{"location":"modules/manager/pep621/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)pyproject\\\\.toml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/pep621/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>pdm.lock</code></li> <li><code>uv.lock</code></li> </ul> <p>Delegated to the underlying package manager CLI - <code>pdm</code> or <code>uv</code> - depending on which lockfile format the project uses.</p>"},{"location":"modules/manager/pep621/#additional-information","title":"Additional Information","text":"<p>This manager supports updating dependencies inside <code>pyproject.toml</code> files.</p> <p>In addition to standard dependencies, these toolsets are also supported:</p> <ul> <li><code>pdm</code> (including <code>pdm.lock</code> files)</li> <li><code>uv</code> (including <code>uv.lock</code> files and <code>uv</code> workspaces)</li> <li><code>hatch</code></li> <li><code>pixi</code> (including <code>pixi.lock</code> files)</li> </ul>"},{"location":"modules/manager/pep621/#trust-model-for-pixi-lock-file-updates","title":"Trust model for pixi lock file updates","text":"<p>Running <code>pixi lock</code> can execute arbitrary code from conda package hooks, so Renovate treats <code>pixi.lock</code> refreshes as an unsafe execution. See pixi's security documentation for details.</p> <p>Self-hosted administrators must explicitly allow this path by including <code>pixi</code> in the global <code>allowedUnsafeExecutions</code> setting. When <code>pixi</code> is not allowed, dependencies in <code>pyproject.toml</code> are still updated, but <code>pixi.lock</code> is left unchanged.</p>"},{"location":"modules/manager/pep621/#private-modules-authentication","title":"Private Modules Authentication","text":"<p>Before running the <code>pdm</code> or <code>uv</code> commands to update the <code>pdm.lock</code> or <code>uv.lock</code> respectively, Renovate exports <code>git</code> <code>insteadOf</code> directives in environment variables.</p> <p>Renovate uses this logic before it updates any \"artifacts\":</p> <p>The token from the <code>hostRules</code> entry matching <code>hostType=github</code> and <code>matchHost=api.github.com</code> is added as the default authentication for <code>github.com</code>. For those running against <code>github.com</code>, this token will be the default platform token.</p> <p>Next, all <code>hostRules</code> with both a token or username/password and <code>matchHost</code> will be fetched, except for any <code>github.com</code> one from above.</p> <p>Rules from this list are converted to environment variable directives if they match any of these characteristics:</p> <ul> <li>No <code>hostType</code> is defined, or</li> <li><code>hostType</code> is <code>pep621</code>, or</li> <li><code>hostType</code> is a platform (<code>github</code>, <code>gitlab</code>, <code>azure</code>, etc.)</li> </ul>"},{"location":"modules/manager/pep723/","title":"Automated Dependency Updates for PEP 723","text":"<p>Categories: <code>python</code></p> <p>Renovate supports updating PEP 723 dependencies.</p>"},{"location":"modules/manager/pep723/#file-matching","title":"File Matching","text":"<p>Because file names for <code>pep723</code> cannot be easily determined automatically, Renovate will not attempt to match any <code>pep723</code> files by default. For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/pep723/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>pypi</code>.</p>"},{"location":"modules/manager/pep723/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>project.dependencies</code> A dependency from the inline <code>[script.dependencies]</code> metadata (parsed as PEP 508)"},{"location":"modules/manager/pep723/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": []\n}\n</code></pre>"},{"location":"modules/manager/pep723/#additional-information","title":"Additional Information","text":"<p>This manager supports updating dependencies inside Python files that use inline script metadata, also known as PEP 723.</p>"},{"location":"modules/manager/pip-compile/","title":"Automated Dependency Updates for pip-compile","text":"<p>Categories: <code>python</code></p> <p>Renovate supports updating pip-compile dependencies.</p>"},{"location":"modules/manager/pip-compile/#file-matching","title":"File Matching","text":"<p>Because file names for <code>pip-compile</code> cannot be easily determined automatically, Renovate will not attempt to match any <code>pip-compile</code> files by default. For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/pip-compile/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>git-tags</code>, <code>pypi</code>.</p>"},{"location":"modules/manager/pip-compile/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>indirect</code> Indirect/transitive dependency locked in the compiled requirements file, but not directly specified in source"},{"location":"modules/manager/pip-compile/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [],\n  \"lockFileMaintenance\": {\n    \"enabled\": true,\n    \"branchTopic\": \"pip-compile-refresh\",\n    \"commitMessageAction\": \"Refresh pip-compile outputs\"\n  }\n}\n</code></pre>"},{"location":"modules/manager/pip-compile/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>requirements.txt</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/pip-compile/#additional-information","title":"Additional Information","text":"<p>The <code>pip-compile</code> manager does not support all use cases for <code>pip-compile</code>, so if you find any areas lacking and without an existing Issue then please \"Suggest an Idea\" in the Discussions forum with your use case.</p> <p>The <code>uv pip compile</code> command is also supported through this manager in the same fashion as <code>pip-compile</code>.</p> <p>The current implementation has some limitations. Read the full document before you start using the <code>pip-compile</code> manager.</p>"},{"location":"modules/manager/pip-compile/#non-configured-managerfilepatterns","title":"Non-configured managerFilePatterns","text":"<p>The <code>pip-compile</code> manager has an empty array for default <code>managerFilePatterns</code>, meaning it won't match any files ever by default. You can \"activate\" the manager by specifying a <code>managerFilePatterns</code> pattern such as:</p> <pre><code>{\n  \"pip-compile\": {\n    \"managerFilePatterns\": [\"/(^|/)requirements\\\\.txt$/\"]\n  }\n}\n</code></pre> <p><code>pip-compile</code> reads the output files to extract the arguments passed to the original command, as such the <code>managerFilePatterns</code> must be configured for <code>*.txt</code> files and not <code>*.in</code>.</p>"},{"location":"modules/manager/pip-compile/#assumption-of-header-with-a-command","title":"Assumption of header with a command","text":"<p>As Renovate matches a <code>pip-compile</code> output file it will extract original command that was used to create it from header in this file. Because of that <code>pip-compile</code> manager poses restrictions on how this file is generated:</p> <ul> <li>Use default header generation, don't use <code>--no-header</code> option.</li> <li>Pass all source files explicitly.</li> </ul> <p>In turn <code>pip-compile</code> manager will find all source files and parse them as package files using their respective managers.</p> <p>The following files are currently supported:</p> Source filename Manager <code>pyproject.toml</code> <code>pep621</code> <code>setup.py</code> <code>pip_setup</code> <code>*.in</code> <code>pip_requirements</code> <p>Example header:</p> <pre><code>#\n# This file is autogenerated by pip-compile with Python 3.11\n# by the following command:\n#\n#    pip-compile --no-emit-index-url --output-file=requirements.txt requirements.in\n#\n</code></pre>"},{"location":"modules/manager/pip-compile/#conflicts-with-other-managers","title":"Conflicts with other managers","text":"<p>Because <code>pip-compile</code> will update source files with their associated manager you should disable them to avoid running these managers twice.</p> <pre><code>{\n  \"pip_requirements\": {\n    \"enabled\": false\n  },\n  \"pip_setup\": {\n    \"enabled\": false\n  }\n}\n</code></pre>"},{"location":"modules/manager/pip-compile/#configuration-of-python-version","title":"Configuration of Python version","text":"<p>By default Renovate extracts Python version from the header for <code>pip-compile</code>, and from the <code>--python-version</code> option for <code>uv</code>. To get Renovate to use another version of Python, add a constraints` rule to the Renovate config:</p> <pre><code>{\n  \"constraints\": {\n    \"python\": \"==3.7\"\n  }\n}\n</code></pre>"},{"location":"modules/manager/pip-compile/#pip-compile-arguments","title":"<code>pip-compile</code> arguments","text":"<p>Renovate reads the <code>requirements.txt</code> file and extracts these <code>pip-compile</code> arguments:</p> <ul> <li>source files as positional arguments</li> <li><code>--output-file</code></li> </ul> <p>All other allowed <code>pip-compile</code> arguments will be passed over without modification.</p>"},{"location":"modules/manager/pip-compile/#transitive-indirect-dependencies","title":"Transitive / indirect dependencies","text":"<p>This manager detects dependencies that only appear in lock files. They are disabled by default but can be forced to enable by vulnerability alerts. They will be upgraded with <code>--upgrade-package</code> option.</p>"},{"location":"modules/manager/pip_requirements/","title":"Automated Dependency Updates for pip Requirements","text":"<p>Categories: <code>python</code></p> <p>Renovate supports updating pip Requirements dependencies.</p>"},{"location":"modules/manager/pip_requirements/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)[\\w-]*requirements([-._]\\w+)?\\.(txt|pip)$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/pip_requirements/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>git-tags</code>, <code>pypi</code>.</p>"},{"location":"modules/manager/pip_requirements/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/pip_requirements/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)[\\\\w-]*requirements([-._]\\\\w+)?\\\\.(txt|pip)$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/pip_requirements/#additional-information","title":"Additional Information","text":"<p>Supports <code>requirements.txt</code> and <code>requirements.pip</code> files. The default file pattern is fairly flexible, to try to catch similarly named ones too (eg <code>requirements-*.txt</code> <code>requirements.*.txt</code> <code>requirements-*.pip</code> and <code>requirements.*.pip</code>) but may be extended/changed.</p>"},{"location":"modules/manager/pip_setup/","title":"Automated Dependency Updates for pip setup.py","text":"<p>Categories: <code>python</code></p> <p>Renovate supports updating pip setup.py dependencies.</p>"},{"location":"modules/manager/pip_setup/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)setup\\.py$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/pip_setup/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>pypi</code>.</p>"},{"location":"modules/manager/pip_setup/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/pip_setup/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)setup\\\\.py$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/pip_setup/#additional-information","title":"Additional Information","text":"<p>Renovate uses a JavaScript-based parser to process the <code>pip_setup</code> files.</p>"},{"location":"modules/manager/pipenv/","title":"Automated Dependency Updates for Pipenv","text":"<p>Categories: <code>python</code></p> <p>Renovate supports updating Pipenv dependencies.</p>"},{"location":"modules/manager/pipenv/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)Pipfile$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/pipenv/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>pypi</code>.</p>"},{"location":"modules/manager/pipenv/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>packages</code> Listed under <code>[packages]</code> <code>dev-packages</code> Listed under <code>[dev-packages]</code> <p>Dependencies from other package category groups in the Pipfile use the group name as the <code>depType</code>.</p>"},{"location":"modules/manager/pipenv/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)Pipfile$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/pipenv/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>Pipfile.lock</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/pipenv/#additional-information","title":"Additional Information","text":"<p><code>Pipenv.lock</code> updating is supported.</p>"},{"location":"modules/manager/pixi/","title":"Automated Dependency Updates for Pixi","text":"<p>Categories: <code>python</code></p> <p>Renovate supports updating Pixi dependencies.</p>"},{"location":"modules/manager/pixi/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>/(^|/)pyproject\\.toml$/\n/(^|/)pixi\\.toml$/\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/pixi/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>conda</code>, <code>pypi</code>.</p>"},{"location":"modules/manager/pixi/#dependency-types","title":"Dependency types","text":"<p>Feature dependencies produce dynamic <code>depType</code> values in the form <code>feature-&lt;name&gt;</code>, where <code>&lt;name&gt;</code> is the feature name defined in the pixi configuration. Top-level dependencies (under <code>[dependencies]</code> or <code>[pypi-dependencies]</code>) do not have a <code>depType</code> set.</p>"},{"location":"modules/manager/pixi/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)pyproject\\\\.toml$/\",\n    \"/(^|/)pixi\\\\.toml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/pixi/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>pixi.lock</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/pixi/#additional-information","title":"Additional Information","text":""},{"location":"modules/manager/pixi/#pixi-package-manager","title":"Pixi package manager","text":"<p>Currently support channels from anaconda and prefix.dev, other channels are not supported yet.</p> <p>Whenever the pixi config in <code>pyproject.toml</code> or <code>pixi.toml</code> file is updated, <code>pixi.lock</code> file will be checked for updates as well.</p> <p>When using <code>pyproject.toml</code>, standard PEP 621 dependencies (e.g. <code>[project.dependencies]</code> or <code>[dependency-groups]</code>) are handled by the <code>pep621</code> manager, which also updates <code>pixi.lock</code> when those dependencies change.</p>"},{"location":"modules/manager/pixi/#trust-model-for-pixi-lock-file-updates","title":"Trust model for pixi lock file updates","text":"<p>Running <code>pixi lock</code> can execute arbitrary code from conda package hooks, so Renovate treats <code>pixi.lock</code> refreshes as an unsafe execution. See pixi's security documentation for details.</p> <p>Self-hosted administrators must explicitly allow this path by including <code>pixi</code> in the global <code>allowedUnsafeExecutions</code> setting. When <code>pixi</code> is not allowed, the package file is still updated, but <code>pixi.lock</code> is left unchanged.</p> <p>Renovatebot will pick pixi version in following order:</p> <ol> <li>renovatebot setting <code>constraints.pixi</code></li> <li><code>requires-pixi</code> in <code>pixi.toml</code></li> </ol> <p>The minimal support version of pixi is <code>0.40.0</code> (<code>pixi lock</code> has only been introduced with that version). Therefore when you are setting <code>constraints.pixi</code> in your renovatebot config or <code>requires-pixi</code> in <code>pixi.toml</code>, please be careful to pick a supported pixi version.</p>"},{"location":"modules/manager/poetry/","title":"Automated Dependency Updates for Poetry","text":"<p>Categories: <code>python</code></p> <p>Renovate supports updating Poetry dependencies.</p>"},{"location":"modules/manager/poetry/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)pyproject\\.toml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/poetry/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>git-refs</code>, <code>git-tags</code>, <code>github-releases</code>, <code>github-tags</code>, <code>gitlab-tags</code>, <code>pypi</code>.</p>"},{"location":"modules/manager/poetry/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>dependencies</code> Listed under <code>[tool.poetry.dependencies]</code> <code>dev-dependencies</code> Listed under <code>[tool.poetry.dev-dependencies]</code> <code>extras</code> An optional dependency marked with <code>optional = true</code> <code>build-system.requires</code> Listed under <code>[build-system.requires]</code> <code>project.dependencies</code> Listed under <code>[project.dependencies]</code> (PEP 621 style) <code>project.optional-dependencies</code> Listed under <code>[project.optional-dependencies]</code> (PEP 621 style) <code>dependency-groups</code> Listed under <code>[dependency-groups]</code> (PEP 735) <p>Dependency group names from <code>[tool.poetry.group.&lt;name&gt;.dependencies]</code> are also used as <code>depType</code> values.</p>"},{"location":"modules/manager/poetry/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)pyproject\\\\.toml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/poetry/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>poetry.lock</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/poetry/#additional-information","title":"Additional Information","text":"<p>Poetry 0.x, 1.x and 2.x versions are supported.</p> <p>Whenever the <code>pyproject.toml</code> file is updated, the Poetry lock file will be checked for updates as well.</p> <p>Warning</p> <p>Updating locked versions of Poetry dependencies is at times unreliable. We recommended that you pin dependency versions in your <code>pyproject.toml</code> instead.</p> <p>Renovate cannot accurately update locked versions of Poetry dependency ranges due to limitations in Poetry. For example, if the <code>pyproject.toml</code> has a constraint like <code>coverage = \"^7.2\"</code>, and the version in <code>poetry.lock</code> is <code>7.4.1</code>, and we know that <code>7.4.3</code> is available, then Renovate can only run <code>poetry update --lock --no-interaction coverage</code> and hope the result is <code>7.4.3</code>. Poetry does not support updating to a specific/exact version with the <code>update</code> command, and the above <code>update</code> command may not even update at all sometimes. For this reason it's much better to pin dependency versions in <code>pyproject.toml</code>, such as <code>coverage = \"7.4.1\"</code> because it then gives Renovate more control and the ability to accurate upgrade dependencies in increments like <code>7.4.1</code> to <code>7.4.3</code>.</p>"},{"location":"modules/manager/pre-commit/","title":"Automated Dependency Updates for pre-commit","text":"<p>Categories: <code>no-category</code></p> <p>Renovate supports updating pre-commit dependencies.</p>"},{"location":"modules/manager/pre-commit/#enabling","title":"Enabling","text":"<p>pre-commit functionality is currently in beta testing, so you must opt-in to test it. To enable it, add a configuration like this to either your self-hosted config or your <code>renovate.json</code>:</p> <pre><code>{\n  \"pre-commit\": {\n    \"enabled\": true\n  }\n}\n</code></pre> <p>If you find any bugs, please create a new discussion first. If you find that it works well, then let us know too.</p>"},{"location":"modules/manager/pre-commit/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)\\.pre-commit-config\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/pre-commit/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>forgejo-tags</code>, <code>github-tags</code>, <code>gitlab-tags</code>.</p>"},{"location":"modules/manager/pre-commit/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>repository</code> Pre-commit hook repository reference <code>pre-commit-node</code> Node.js additional dependency for a pre-commit hook <code>pre-commit-python</code> Python additional dependency for a pre-commit hook <code>pre-commit-golang</code> Go additional dependency for a pre-commit hook"},{"location":"modules/manager/pre-commit/#default-config","title":"Default config","text":"<pre><code>{\n  \"commitMessageTopic\": \"pre-commit hook {{depName}}\",\n  \"enabled\": false,\n  \"managerFilePatterns\": [\n    \"/(^|/)\\\\.pre-commit-config\\\\.ya?ml$/\"\n  ],\n  \"prBodyNotes\": [\n    \"Note: The `pre-commit` manager in Renovate is not supported by the `pre-commit` maintainers or community. Please do not report any problems there, instead [create a Discussion in the Renovate repository](https://github.com/renovatebot/renovate/discussions/new) if you have any questions.\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/pre-commit/#additional-information","title":"Additional Information","text":"<p>Important note: The <code>pre-commit</code> manager is disabled by default and must be opted into through config. Renovate's approach to version updating is not fully aligned with <code>pre-commit autoupdate</code> and this has caused frustration for <code>pre-commit</code>'s creator/maintainer. Attempts to work with the <code>pre-commit</code> project to fix these gaps have been rejected, so we have chosen to disable the manager by default indefinitely. Please do not contact the <code>pre-commit</code> project/maintainer about any Renovate-related topic. To view a list of open issues related to the <code>pre-commit</code> manager in Renovate, see the filtered list using the <code>manager:pre-commit</code> label.</p> <p>When enabled, Renovate supports updating of Git dependencies within pre-commit configuration <code>.pre-commit-config.yaml</code> files or other YAML files that use the same format (via <code>managerFilePatterns</code> configuration). Updates are performed if the files follow the conventional format used in typical pre-commit files:</p> <pre><code>repos:\n  - repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v1.0.0\n    hooks:\n      - id: some-hook-id\n</code></pre> <p>To enable the <code>pre-commit</code> manager, add the following config:</p> <pre><code>{\n  \"pre-commit\": {\n    \"enabled\": true\n  }\n}\n</code></pre> <p>Alternatively, add <code>:enablePreCommit</code> to your <code>extends</code> array.</p>"},{"location":"modules/manager/pre-commit/#frozen-revisions","title":"Frozen Revisions","text":"<p>Renovate cannot change a <code>rev</code> from the pinned tag format (e.g. <code>rev: vX.Y.Z</code>) to the pinned SHA format (e.g. <code>rev: 0123456789abcdef0123456789abcdef01234567  # frozen: vX.Y.Z</code>) written by <code>pre-commit autoupdate --freeze</code>. If you freeze the revs yourself, Renovate keeps the frozen format when it updates a frozen <code>rev</code>. If you try to freeze with <code>pinDigests: true</code>, Renovate proposes the pin, but the update will fail with <code>update-failure</code> since there is no template to write a digest into a plain rev.</p>"},{"location":"modules/manager/pre-commit/#additional-dependencies","title":"Additional Dependencies","text":"<p>Renovate has partial support for <code>additional_dependencies</code>, currently Go, Node.js and Python only.</p> <p>You will need to explicitly add the language to your hooks with <code>additional_dependencies</code> to let Renovate know what kind of dependencies they are.</p> <p>Examples for the supported languages are listed below.</p>"},{"location":"modules/manager/pre-commit/#go","title":"Go","text":"<pre><code>- repo: https://github.com/rhysd/actionlint\n  rev: v1.7.7\n  hooks:\n    - id: actionlint\n      language: golang\n      additional_dependencies:\n        - 'github.com/wasilibs/go-shellcheck/cmd/shellcheck@v0.10.0'\n</code></pre>"},{"location":"modules/manager/pre-commit/#nodejs","title":"Node.js","text":"<pre><code>- repo: https://github.com/pre-commit/mirrors-prettier\n  rev: v3.1.0\n  hooks:\n    - id: prettier\n      language: node\n      additional_dependencies:\n        - '@trivago/prettier-plugin-sort-imports@^5.2.2'\n        - prettier@^3.6.2\n</code></pre>"},{"location":"modules/manager/pre-commit/#python","title":"Python","text":"<pre><code>- repo: https://github.com/psf/black\n  rev: 19.3b0\n  hooks:\n    - id: black\n      language: python\n      additional_dependencies:\n        - 'requests==1.1.1'\n</code></pre>"},{"location":"modules/manager/proto/","title":"Automated Dependency Updates for proto","text":"<p>Categories: <code>no-category</code></p> <p>Renovate supports updating proto dependencies.</p>"},{"location":"modules/manager/proto/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>**/.prototools</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/proto/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>github-releases</code>, <code>github-tags</code>, <code>node-version</code>, <code>npm</code>, <code>ruby-version</code>, <code>rust-version</code>.</p>"},{"location":"modules/manager/proto/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/proto/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"**/.prototools\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/proto/#additional-information","title":"Additional Information","text":"<p>Renovate can update tool versions in proto <code>.prototools</code> configuration files.</p>"},{"location":"modules/manager/proto/#how-it-works","title":"How it works","text":"<p>Proto uses <code>.prototools</code> files (TOML format) to pin tool versions at the directory level. Tool versions are declared as top-level key-value pairs:</p> <pre><code>node = \"22.14.0\"\nbun = \"1.2.2\"\ngo = \"~1.22\"\nproto = \"0.56.0\"\n</code></pre> <p>Renovate extracts these version pins and updates them using the appropriate datasource for each tool.</p> <p>Non-version sections (<code>[settings]</code>, <code>[plugins]</code>, <code>[tools]</code>, <code>[env]</code>, <code>[shell]</code>, <code>[backends]</code>) are ignored.</p>"},{"location":"modules/manager/proto/#supported-tools","title":"Supported tools","text":"<p>Renovate's <code>proto</code> manager supports the following built-in proto tools:</p> Tool Datasource Package <code>bun</code> <code>github-releases</code> <code>oven-sh/bun</code> <code>deno</code> <code>github-releases</code> <code>denoland/deno</code> <code>go</code> <code>github-tags</code> <code>golang/go</code> <code>moon</code> <code>github-releases</code> <code>moonrepo/moon</code> <code>node</code> <code>node-version</code> <code>node</code> <code>npm</code> <code>npm</code> <code>npm</code> <code>pnpm</code> <code>npm</code> <code>pnpm</code> <code>yarn</code> <code>npm</code> <code>@yarnpkg/cli</code> <code>python</code> <code>github-tags</code> <code>python/cpython</code> <code>ruby</code> <code>ruby-version</code> <code>ruby-version</code> <code>rust</code> <code>rust-version</code> <code>rust</code> <code>proto</code> <code>github-releases</code> <code>moonrepo/proto</code> <code>gh</code> <code>github-releases</code> <code>cli/cli</code> <code>poetry</code> <code>github-releases</code> <code>python-poetry/poetry</code> <code>uv</code> <code>github-releases</code> <code>astral-sh/uv</code>"},{"location":"modules/manager/proto/#limitations","title":"Limitations","text":"<ul> <li> <p>Third-party plugins: Tools installed via <code>[plugins]</code> URLs (custom WASM plugins) are reported as <code>unsupported-datasource</code> and skipped.   You can use Renovate's <code>customManagers</code> with regex to handle these if needed.</p> </li> <li> <p>Version aliases: Values like <code>latest</code>, <code>stable</code>, <code>canary</code>, or <code>nightly</code> are skipped as they cannot be updated via semver.</p> </li> <li> <p>Version ranges: Proto supports partial versions (<code>22</code>, <code>~1.20</code>, <code>^3.1</code>) which Renovate passes through as-is.   The appropriate versioning strategy for each datasource handles these.</p> </li> <li> <p>asdf backend syntax: Proto supports <code>\"asdf:tool\" = \"version\"</code> syntax for tools via the asdf backend.   This is not currently supported by the manager.</p> </li> </ul>"},{"location":"modules/manager/pub/","title":"Automated Dependency Updates for pub","text":"<p>Categories: <code>dart</code></p> <p>Renovate supports updating pub dependencies.</p>"},{"location":"modules/manager/pub/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)pubspec\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/pub/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>dart</code>, <code>dart-version</code>, <code>flutter-version</code>.</p>"},{"location":"modules/manager/pub/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>dependencies</code> Listed under <code>dependencies</code> <code>dev_dependencies</code> Listed under <code>dev_dependencies</code>"},{"location":"modules/manager/pub/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)pubspec\\\\.ya?ml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/pub/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>pubspec.lock</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/pub/#additional-information","title":"Additional Information","text":"<p>This manager is used to keep pubspec files up-to-date.</p>"},{"location":"modules/manager/puppet/","title":"Automated Dependency Updates for Puppet","text":"<p>Categories: <code>iac</code>, <code>ruby</code></p> <p>Renovate supports updating Puppet dependencies.</p>"},{"location":"modules/manager/puppet/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)Puppetfile$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/puppet/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>git-tags</code>, <code>github-tags</code>, <code>puppet-forge</code>.</p>"},{"location":"modules/manager/puppet/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/puppet/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)Puppetfile$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/puppet/#additional-information","title":"Additional Information","text":"<p>Renovate can update Puppetfiles.</p>"},{"location":"modules/manager/puppet/#how-it-works","title":"How it works","text":"<p>Renovate:</p> <ol> <li>Searches each repository for any <code>Puppetfile</code> files</li> <li>Extracts dependencies from the relevant sections of the <code>Puppetfile</code></li> <li>Resolves the dependency on the default forge: <code>https://forgeapi.puppetlabs.com</code>, or on a user-defined forge</li> <li>Creates a PR that updates the <code>Puppetfile</code></li> </ol> <p>Finally, if the source repository has a \"changelog\" file or uses GitHub releases, then Renovate puts the changelogs for each version in its PR.</p>"},{"location":"modules/manager/puppet/#supported-puppetfile-formats","title":"Supported Puppetfile formats","text":"<p>The <code>puppet</code> manager extracts the dependencies from one Puppetfile. You can define a forge in your <code>puppetfile</code> in these ways:</p> <ul> <li>No forge</li> <li>One forge</li> <li>Multiple forges</li> <li>GitHub-based forge</li> <li>Git-based forge</li> </ul> <p>For example:</p> No forge<pre><code>mod 'puppetlabs/apt', '8.3.0'\nmod 'puppetlabs/apache', '7.0.0'\n</code></pre> One forge<pre><code>forge \"https://forgeapi.puppetlabs.com\"\n\nmod 'puppetlabs/apt', '8.3.0'\nmod 'puppetlabs/apache', '7.0.0'\nmod 'puppetlabs/concat', '7.1.1'\n</code></pre> Multiple forges<pre><code>forge \"https://forgeapi.puppetlabs.com\"\n\nmod 'puppetlabs/apt', '8.3.0'\nmod 'puppetlabs/apache', '7.0.0'\nmod 'puppetlabs/concat', '7.1.1'\n\n# Private forge\nforge \"https://forgeapi.example.com\"\n\nmod 'example/infra', '3.3.0'\n</code></pre> GitHub-based forge, tag based<pre><code>mod 'example/standalone_jar',\n    :git =&gt; 'git@gitlab.example.de:puppet/example-standalone_jar',\n    :tag =&gt; '0.9.0'\n</code></pre> Git-based forge, tag based<pre><code>mod 'stdlib',\n    :git =&gt; 'git@gitlab.com:example/project_stdlib.git',\n    :tag =&gt; '5.0.0'\n</code></pre> Git-based forge, branch based<pre><code>mod 'example/samba',\n    :git    =&gt; 'https://github.com/example/puppet-samba',\n    :branch =&gt; 'stable_version'\n</code></pre> Git-based forge, ref based<pre><code>mod 'example/samba',\n    :git =&gt; 'https://github.com/example/puppet-samba',\n    :ref =&gt; 'stable_version'\n</code></pre>"},{"location":"modules/manager/pyenv/","title":"Automated Dependency Updates for pyenv","text":"<p>Categories: <code>python</code></p> <p>Renovate supports updating pyenv dependencies.</p>"},{"location":"modules/manager/pyenv/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)\\.python-version$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/pyenv/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>.</p>"},{"location":"modules/manager/pyenv/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/pyenv/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)\\\\.python-version$/\"\n  ],\n  \"versioning\": \"docker\",\n  \"pinDigests\": false\n}\n</code></pre>"},{"location":"modules/manager/pyenv/#additional-information","title":"Additional Information","text":"<p>Simply keeps the <code>.python-version</code> file updated.</p>"},{"location":"modules/manager/quadlet/","title":"Automated Dependency Updates for Quadlet","text":"<p>Categories: <code>docker</code></p> <p>Renovate supports updating Quadlet dependencies.</p>"},{"location":"modules/manager/quadlet/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>/.+\\.container$/\n/.+\\.image$/\n/.+\\.volume$/\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/quadlet/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>.</p>"},{"location":"modules/manager/quadlet/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>image</code> Container image referenced in a Quadlet unit file"},{"location":"modules/manager/quadlet/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/.+\\\\.container$/\",\n    \"/.+\\\\.image$/\",\n    \"/.+\\\\.volume$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/quadlet/#additional-information","title":"Additional Information","text":"<p>Renovate supports updating of Podman Quadlet <code>.container</code>, <code>.image</code>, or <code>.volume</code> files or other files that use the same systemd format (via <code>managerFilePatterns</code> configuration). Updates are performed if there is an Image option in Container, Image, or Volume units:</p> <pre><code>[Container]\nImage=docker.io/library/alpine:3.22\n</code></pre> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p>"},{"location":"modules/manager/regex/","title":"Custom Manager Support using Regex","text":"<p>Categories: <code>custom</code></p> <p>With <code>customManagers</code> using <code>regex</code> you can configure Renovate so it finds dependencies that are not detected by its other built-in package managers.</p> <p>Renovate supports the <code>ECMAScript (JavaScript)</code> flavor of regex.</p> <p>Renovate uses the <code>uhop/node-re2</code> package that provides bindings for <code>google/re2</code>. Read about <code>uhop/node-re2</code>'s limitations in their readme. The <code>regex</code> manager is unique in Renovate because:</p> <ul> <li>It is configurable via regex named capture groups</li> <li>It can extract any <code>datasource</code></li> <li>By using the <code>customManagers</code> config, you can create multiple \"regex managers\" for the same repository</li> </ul> <p>We have additional Handlebars helpers to help you perform common transformations on the regex manager's template fields. Also read the documentation for the <code>customManagers</code> config option.</p> <p>If you have limited managers to run within <code>enabledManagers</code> config option, you need to add <code>\"custom.regex\"</code> to the list.</p>"},{"location":"modules/manager/regex/#required-fields","title":"Required Fields","text":"<p>The first two required fields are <code>managerFilePatterns</code> and <code>matchStrings</code>:</p> <ul> <li><code>managerFilePatterns</code> works the same as any manager</li> <li><code>matchStrings</code> is a <code>regex</code> custom manager concept and is used for configuring a regular expression with named capture groups</li> </ul>"},{"location":"modules/manager/regex/#information-that-renovate-needs-about-the-dependency","title":"Information that Renovate needs about the dependency","text":"<p>Before Renovate can look up a dependency and decide about updates, it must have this info about each dependency:</p> Info type Required Notes Docs Name of the dependency Yes <code>datasource</code> Yes Example datasources: npm, Docker, GitHub tags, and so on. Supported datasources Version scheme to use. Defaults to <code>semver-coerced</code>. Yes You may set another version scheme, like <code>pep440</code>. Supported versioning schemes"},{"location":"modules/manager/regex/#required-capture-groups","title":"Required capture groups","text":"<p>You must:</p> <ul> <li>Capture the <code>currentValue</code> or <code>currentDigest</code> of the dependency in a named capture group</li> <li>Set a <code>depName</code> or <code>packageName</code> capture group. Or use a template field: <code>depNameTemplate</code> and <code>packageNameTemplate</code></li> <li>Set a <code>datasource</code> capture group, or a <code>datasourceTemplate</code> config field</li> </ul>"},{"location":"modules/manager/regex/#optional-capture-groups","title":"Optional capture groups","text":"<p>You may use any of these items:</p> <ul> <li>A <code>depType</code> capture group, or a <code>depTypeTemplate</code> config field</li> <li>A <code>versioning</code> capture group, or a <code>versioningTemplate</code> config field. If neither are present, Renovate defaults to <code>semver-coerced</code></li> <li>An <code>extractVersion</code> capture group, or an <code>extractVersionTemplate</code> config field</li> <li>A <code>registryUrl</code> capture group, or a <code>registryUrlTemplate</code> config field. If it's a valid URL, it will be converted to the <code>registryUrls</code> field as a single-length array</li> <li>An <code>indentation</code> capture group. It must be either empty, or whitespace only (otherwise <code>indentation</code> will be reset to an empty string)</li> </ul>"},{"location":"modules/manager/regex/#regular-expression-capture-groups","title":"Regular Expression Capture Groups","text":"<p>To be effective with the regex manager, you should understand regular expressions and named capture groups. But enough examples may compensate for lack of experience.</p> Example Dockerfile<pre><code>FROM node:12\nENV YARN_VERSION=1.19.1\nRUN curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version ${YARN_VERSION}\n</code></pre> <p>You would need to capture the <code>currentValue</code> with a named capture group, like this: <code>ENV YARN_VERSION=(?&lt;currentValue&gt;.*?)\\\\n</code>.</p> <p>To update a version string multiple times in a line: use multiple <code>matchStrings</code>, one for each occurrence.</p> Full Renovate .json5 config<pre><code>{\n  customManagers: [\n    {\n      customType: 'regex',\n      managerFilePatterns: ['file-you-want-to-match'],\n      matchStrings: [\n        // for the version on the left part, ignoring the right\n        '# renovate: datasource=(?&lt;datasource&gt;.*?) depName=(?&lt;depName&gt;.*?)( versioning=(?&lt;versioning&gt;.*?))?\\\\s\\\\S+?:(?&lt;currentValue&gt;\\\\S+)\\\\s+\\\\S+:.+',\n        // for the version on the right part, ignoring the left\n        '# renovate: datasource=(?&lt;datasource&gt;.*?) depName=(?&lt;depName&gt;.*?)( versioning=(?&lt;versioning&gt;.*?))?\\\\s\\\\S+?:\\\\S+\\\\s+\\\\S+:(?&lt;currentValue&gt;\\\\S+)',\n      ],\n      versioningTemplate: '{{#if versioning}}{{{versioning}}}{{else}}semver{{/if}}',\n    },\n  ],\n}\n</code></pre> Example of how the file-you-want-to-match could look like<pre><code># renovate: datasource=github-tags depName=org/repo versioning=loose\nsomething:4.7.2    something-else:4.7.2\n</code></pre>"},{"location":"modules/manager/regex/#online-regex-testing-tool-tips","title":"Online regex testing tool tips","text":"<p>If you're looking for an online regex testing tool that supports capture groups, try regex101.com. You must select the <code>ECMAScript (JavaScript)</code> flavor of regex. Backslashes (<code>'\\'</code>) of the resulting regex have to still be escaped e.g. <code>\\n\\s</code> \u2192 <code>\\\\n\\\\s</code>. You can use the Code Generator in the sidebar and copy the regex in the generated \"Alternative syntax\" comment into JSON.</p>"},{"location":"modules/manager/regex/#renovates-regex-differs-from-the-online-tools","title":"Renovate's regex differs from the online tools","text":"<p>The <code>regex</code> manager uses RE2 which does not support backreferences and lookahead assertions.</p> <p>The <code>regex</code> manager matches are done per-file, not per-line! This means the <code>^</code> and <code>$</code> regex assertions only match the beginning and end of the entire file. If you need to match line boundaries you can use <code>(?:^|\\r\\n|\\r|\\n|$)</code>.</p>"},{"location":"modules/manager/regex/#configuration-templates","title":"Configuration templates","text":"<p>In many cases, named capture groups alone aren't enough and you'll need to give Renovate more information so it can look up a dependency. Continuing the above example with Yarn, here is the full Renovate config:</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/^Dockerfile$/\"],\n      \"matchStrings\": [\"ENV YARN_VERSION=(?&lt;currentValue&gt;.*?)\\\\n\"],\n      \"depNameTemplate\": \"yarn\",\n      \"datasourceTemplate\": \"npm\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/manager/regex/#advanced-capture","title":"Advanced Capture","text":"<p>Say your <code>Dockerfile</code> has many <code>ENV</code> variables that you want to keep up-to-date. But you don't want to write a regex custom manager rule for each variable. Instead you enhance your <code>Dockerfile</code> like this:</p> <pre><code># renovate: datasource=github-tags depName=node packageName=nodejs/node versioning=node\nENV NODE_VERSION=20.10.0\n# renovate: datasource=github-releases depName=composer packageName=composer/composer\nENV COMPOSER_VERSION=1.9.3\n# renovate: datasource=docker packageName=docker versioning=docker\nENV DOCKER_VERSION=19.03.1\n# renovate: datasource=npm packageName=yarn\nENV YARN_VERSION=1.19.1\n</code></pre> <p>This <code>Dockerfile</code> is meant as an example, your <code>Dockerfile</code> may be a lot bigger.</p> <p>You could configure Renovate to update the <code>Dockerfile</code> like this:</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"description\": \"Update _VERSION variables in Dockerfiles\",\n      \"managerFilePatterns\": [\n        \"/(^|/|\\\\.)Dockerfile$/\",\n        \"/(^|/)Dockerfile\\\\.[^/]*$/\"\n      ],\n      \"matchStrings\": [\n        \"# renovate: datasource=(?&lt;datasource&gt;[a-z-]+?)(?: depName=(?&lt;depName&gt;.+?))? packageName=(?&lt;packageName&gt;.+?)(?: versioning=(?&lt;versioning&gt;[a-z-]+?))?\\\\s(?:ENV|ARG) .+?_VERSION=(?&lt;currentValue&gt;.+?)\\\\s\"\n      ]\n    }\n  ]\n}\n</code></pre> <p>We could drop the <code>versioningTemplate</code> because Renovate defaults to <code>semver-coerced</code> versioning. But we included the <code>versioningTemplate</code> config option to show you why we call these fields templates: because they are compiled using Handlebars and so can be composed from values you collect in named capture groups.</p> <p>You should use triple brace <code>{{{ }}}</code> templates like <code>{{{versioning}}}</code> to be safe. This is because Handlebars escapes special characters with double braces (by default).</p> <p>By adding <code>renovate: datasource=</code> and <code>depName=</code> comments to the <code>Dockerfile</code> you only need one <code>customManager</code> instead of four. The <code>Dockerfile</code> is documented better as well.</p> <p>The syntax in the example is arbitrary, and you can set your own syntax. If you do, update your <code>matchStrings</code> regex!</p> <p>For example the <code>appVersion</code> property in a <code>Chart.yaml</code> of a Helm chart is always referenced to an Docker image. In such scenarios, some values can be hard-coded. For example:</p> <pre><code>apiVersion: v2\nname: amazon-eks-pod-identity-webhook\ndescription: A Kubernetes webhook for pods that need AWS IAM access\nversion: 1.0.3\ntype: application\n# renovate: image=amazon/amazon-eks-pod-identity-webhook\nappVersion: 'v0.4.0'\n</code></pre> <p>Using the <code>customManagers</code> below, Renovate looks for available Docker tags of the image <code>amazon/amazon-eks-pod-identity-webhook</code>.</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"datasourceTemplate\": \"docker\",\n      \"managerFilePatterns\": [\"/(^|/)Chart\\\\.yaml$/\"],\n      \"matchStrings\": [\n        \"#\\\\s?renovate: image=(?&lt;depName&gt;.*?)\\\\s?appVersion:\\\\s?\\\\'?(?&lt;currentValue&gt;[\\\\w+\\\\.\\\\-]*)'\"\n      ]\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/manager/regex/#using-custommanager-to-update-the-dependency-name-in-addition-to-version","title":"Using customManager to update the dependency name in addition to version","text":""},{"location":"modules/manager/regex/#updating-gitlab-ci-include-dep-names","title":"Updating <code>gitlab-ci include</code> dep names","text":"<p>You can use the regex manager to update the <code>depName</code> and the version. This can be handy when the location of files referenced in gitlab-ci <code>includes:</code> fields has changed.</p> <p>You may need to set a second <code>matchString</code> for the new name to ensure the regex manager can detect the new value. For example:</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/.*y[a]?ml$/\"],\n      \"matchStringsStrategy\": \"combination\",\n      \"matchStrings\": [\n        \"['\\\"]?(?&lt;depName&gt;/pipeline-fragments/fragment-version-check)['\\\"]?\\\\s*ref:\\\\s['\\\"]?(?&lt;currentValue&gt;[\\\\d-]*)['\\\"]?\",\n        \"['\\\"]?(?&lt;depName&gt;pipeline-solutions/gitlab/fragments/fragment-version-check)['\\\"]?\\\\s*ref:\\\\s['\\\"]?(?&lt;currentValue&gt;[\\\\d-]*)['\\\"]?\"\n      ],\n      \"depNameTemplate\": \"pipeline-solutions/gitlab/fragments/fragment-version-check\",\n      \"autoReplaceStringTemplate\": \"'{{{depName}}}'\\n    ref: {{{newValue}}}\",\n      \"datasourceTemplate\": \"gitlab-tags\",\n      \"versioningTemplate\": \"gitlab-tags\"\n    }\n  ]\n}\n</code></pre> <p>The config above will migrate:</p> <pre><code>- project: 'pipeline-fragments/docker-lint'\n  ref: 2-4-0\n  file: 'ci-include-docker-lint-base.yml'\n</code></pre> <p>To this:</p> <pre><code>- project: 'pipeline-solutions/gitlab/fragments/docker-lint'\n  ref: 2-4-1\n  file: 'ci-include-docker-lint-base.yml'\n</code></pre>"},{"location":"modules/manager/regex/#handling-scenarios-where-dependency-name-must-be-extracted-from-the-file-path","title":"Handling scenarios where dependency name must be extracted from the file path","text":"<p>Some repositories structure dependencies so that the dependency name is embedded in the file path itself. Two common patterns are:</p> <pre><code>packages/\n  &lt;package-name&gt;/\n\n# or\n\npackages/\n  &lt;package-name-1&gt;/\n    version.txt\n  &lt;package-name-2&gt;/\n    version.txt\n</code></pre> <p>In these situations, the regex manager may need to derive the dependency name from either the filename or the directory containing that file.</p> <p>Renovate exposes two template fields that help with this:</p> <ol> <li><code>packageFile</code>: Filename of the matched file</li> <li><code>packageFileDir</code>: Directory path where the file exists (relative to repo root)</li> </ol> <p>For example, if you package file exists at <code>home/packages/package.json</code>, then:</p> <p><code>packageFile</code> will be <code>package.json</code> <code>packageFileDir</code> will be <code>home/packages</code></p> <p>These values can be referenced inside <code>depNameTemplate</code> or <code>packageNameTemplate</code></p> <p>If your dependency folder looks like:</p> <pre><code>packages/my-lib/version.txt\n</code></pre> <p>You can configure the regex manager like:</p> <pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"packages/.*/version\\\\.txt$\"],\n      \"matchStrings\": [\"(?&lt;currentValue&gt;.+)\"],\n      \"depNameTemplate\": \"{{lookup (split packageFileDir '/') 1 }}\",\n      \"datasourceTemplate\": \"github-tags\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/manager/renovate-config/","title":"Automated Dependency Updates for Renovate Config","text":"<p>Categories: <code>no-category</code></p> <p>Renovate supports updating Renovate Config dependencies.</p>"},{"location":"modules/manager/renovate-config/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>renovate.json\nrenovate.jsonc\nrenovate.json5\n.github/renovate.json\n.github/renovate.jsonc\n.github/renovate.json5\n.gitlab/renovate.json\n.gitlab/renovate.jsonc\n.gitlab/renovate.json5\n.renovaterc\n.renovaterc.json\n.renovaterc.jsonc\n.renovaterc.json5\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/renovate-config/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>dart-version</code>, <code>dotnet-version</code>, <code>gitea-tags</code>, <code>github-releases</code>, <code>github-tags</code>, <code>gitlab-tags</code>, <code>gradle-version</code>, <code>java-version</code>, <code>npm</code>, <code>nuget</code>, <code>pypi</code>, <code>rubygems</code>, <code>rust-version</code>.</p>"},{"location":"modules/manager/renovate-config/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/renovate-config/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"renovate.json\",\n    \"renovate.jsonc\",\n    \"renovate.json5\",\n    \".github/renovate.json\",\n    \".github/renovate.jsonc\",\n    \".github/renovate.json5\",\n    \".gitlab/renovate.json\",\n    \".gitlab/renovate.jsonc\",\n    \".gitlab/renovate.json5\",\n    \".renovaterc\",\n    \".renovaterc.json\",\n    \".renovaterc.jsonc\",\n    \".renovaterc.json5\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/renovate-config/#additional-information","title":"Additional Information","text":""},{"location":"modules/manager/renovate-config/#config-presets","title":"Config presets","text":"<p>Renovate supports updating Shareable Config Presets for Renovate configuration.</p> <p>The preset versions are only updated if the version is already pinned. For example, <code>github&gt;user/renovate-config#1.2.3</code> will be updated to <code>github&gt;user/renovate-config#1.2.4</code> if the <code>1.2.4</code> version is available, but <code>github&gt;user/renovate-config</code> will not be pinned.</p> <pre><code>{\n  \"extends\": [\n    \"github&gt;user/renovate-config#1.2.3\",\n    \"github&gt;user/renovate-config:group\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/renovate-config/#unsupported-config","title":"Unsupported Config","text":"<ul> <li>Local presets</li> <li>HTTP URLs presets</li> <li><code>package.json</code> file config (deprecated)</li> <li><code>npm</code> hosted presets (deprecated)</li> <li><code>extends</code> inside sub objects, like <code>packageRules</code></li> </ul>"},{"location":"modules/manager/renovate-config/#tool-constraints","title":"Tool constraints","text":"<p>Renovate will extract + suggest updates for package manager/tool versions in the <code>constraints</code> configuration.</p> <p>Constraints set on tools that Containerbase supports will result in Renovate updates.</p> <p>Other constraints will not be updated by Renovate.</p>"},{"location":"modules/manager/ruby-version/","title":"Automated Dependency Updates for .ruby-version","text":"<p>Categories: <code>ruby</code></p> <p>Renovate supports updating .ruby-version dependencies.</p>"},{"location":"modules/manager/ruby-version/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)\\.ruby-version$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/ruby-version/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>ruby-version</code>.</p>"},{"location":"modules/manager/ruby-version/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/ruby-version/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)\\\\.ruby-version$/\"\n  ],\n  \"versioning\": \"ruby\"\n}\n</code></pre>"},{"location":"modules/manager/ruby-version/#additional-information","title":"Additional Information","text":"<p>This will maintain <code>.ruby-version</code> files. Available versions will be determined from the official Ruby downloads page.</p>"},{"location":"modules/manager/runtime-version/","title":"Automated Dependency Updates for runtime.txt","text":"<p>Categories: <code>python</code></p> <p>Renovate supports updating runtime.txt dependencies.</p>"},{"location":"modules/manager/runtime-version/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)runtime.txt$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/runtime-version/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>.</p>"},{"location":"modules/manager/runtime-version/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/runtime-version/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)runtime.txt$/\"\n  ],\n  \"pinDigests\": false\n}\n</code></pre>"},{"location":"modules/manager/runtime-version/#additional-information","title":"Additional Information","text":"<p>Keep <code>runtime.txt</code> files updated.</p> <p>Currently supports <code>Python</code> runtime updates, commonly used by platforms such as</p> <ul> <li>Heroku</li> <li>CloudFoundry</li> <li>Koyeb</li> <li>and more</li> </ul>"},{"location":"modules/manager/rust-toolchain/","title":"Automated Dependency Updates for Rust Toolchain","text":"<p>Categories: <code>rust</code></p> <p>Renovate supports updating Rust Toolchain dependencies.</p>"},{"location":"modules/manager/rust-toolchain/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)rust-toolchain(\\.toml)?$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/rust-toolchain/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>rust-version</code>.</p>"},{"location":"modules/manager/rust-toolchain/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>toolchain</code> Rust toolchain version"},{"location":"modules/manager/rust-toolchain/#default-config","title":"Default config","text":"<pre><code>{\n  \"commitMessageTopic\": \"Rust\",\n  \"managerFilePatterns\": [\n    \"/(^|/)rust-toolchain(\\\\.toml)?$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/rust-toolchain/#additional-information","title":"Additional Information","text":"<p>This manager can be used to update the Rust toolchain version in <code>rust-toolchain.toml</code> and <code>rust-toolchain</code> files.</p> <p>It supports both the TOML format and the legacy plain-text format as specified in the Rust toolchain documentation.</p>"},{"location":"modules/manager/rust-toolchain/#version-pinning","title":"Version pinning","text":"<p>If you'd like to pin your toolchain to a particular version, the following configuration can be applied:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchManagers\": [\"rust-toolchain\"],\n      \"matchDepTypes\": [\"toolchain\"],\n      \"rangeStrategy\": \"pin\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/manager/rust-toolchain/#supported-renovations","title":"Supported renovations","text":"<ul> <li><code>1.90.0</code> \u2192 <code>2.0.0</code> (major version updates)</li> <li><code>1.90.0</code> \u2192 <code>1.91.0</code> (minor version updates)</li> <li><code>1.90.0</code> \u2192 <code>1.90.1</code> (patch version updates)</li> <li><code>1.90</code> \u2192 <code>2.0</code> (major range updates)</li> <li><code>1.90</code> \u2192 <code>1.91</code> (minor range updates)</li> <li><code>nightly-2025-10-10</code> \u2192 <code>nightly-2025-10-11</code> (nightly version updates)</li> </ul> <p>With <code>rangeStrategy: pin</code>:</p> <ul> <li><code>1.90</code> \u2192 <code>1.90.0</code> (range pinning)</li> <li><code>stable</code> \u2192 <code>1.90.0</code> (stable channel pinning)</li> <li><code>nightly</code> \u2192 <code>nightly-2025-10-11</code> (nightly channel pinning)</li> </ul> <p>Note: The version numbers shown above are just examples for illustration purposes.</p>"},{"location":"modules/manager/sbt/","title":"Automated Dependency Updates for sbt","text":"<p>Categories: <code>java</code></p> <p>Renovate supports updating sbt dependencies.</p>"},{"location":"modules/manager/sbt/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>/\\.sbt$/\n/project/[^/]*\\.scala$/\n/project/build\\.properties$/\n/(^|/)repositories$/\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/sbt/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>github-releases</code>, <code>maven</code>, <code>sbt-package</code>, <code>sbt-plugin</code>.</p>"},{"location":"modules/manager/sbt/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>plugin</code> An sbt plugin added via <code>addSbtPlugin</code> or <code>addCompilerPlugin</code> <p>Other <code>depType</code> values are extracted dynamically from the classifier or configuration string in the build file (e.g. <code>% \"test\"</code>, <code>% Provided</code>, <code>classifier \"sources\"</code>).</p>"},{"location":"modules/manager/sbt/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/\\\\.sbt$/\",\n    \"/project/[^/]*\\\\.scala$/\",\n    \"/project/build\\\\.properties$/\",\n    \"/(^|/)repositories$/\"\n  ],\n  \"versioning\": \"ivy\"\n}\n</code></pre>"},{"location":"modules/manager/sbt/#additional-information","title":"Additional Information","text":"<p>Extracts Maven artifact dependencies for SBT.</p>"},{"location":"modules/manager/scalafmt/","title":"Automated Dependency Updates for Scalafmt","text":"<p>Categories: <code>java</code></p> <p>Renovate supports updating Scalafmt dependencies.</p>"},{"location":"modules/manager/scalafmt/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)\\.scalafmt.conf$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/scalafmt/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>github-releases</code>.</p>"},{"location":"modules/manager/scalafmt/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/scalafmt/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)\\\\.scalafmt.conf$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/scalafmt/#additional-information","title":"Additional Information","text":"<p>Extracts scalafmt version from <code>.scalafmt.conf</code> file.</p> <p>New versions of Scalafmt are looked up on Github Releases.</p>"},{"location":"modules/manager/setup-cfg/","title":"Automated Dependency Updates for Setuptools (setup.cfg)","text":"<p>Categories: <code>python</code></p> <p>Renovate supports updating Setuptools (setup.cfg) dependencies.</p>"},{"location":"modules/manager/setup-cfg/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)setup\\.cfg$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/setup-cfg/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>pypi</code>.</p>"},{"location":"modules/manager/setup-cfg/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>install</code> Listed under <code>install_requires</code> in the <code>[options]</code> section <code>setup</code> Listed under <code>setup_requires</code> in the <code>[options]</code> section <code>test</code> Listed under <code>tests_require</code> in the <code>[options]</code> section <code>extra</code> Listed under the <code>[options.extras_require]</code> section"},{"location":"modules/manager/setup-cfg/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)setup\\\\.cfg$/\"\n  ],\n  \"versioning\": \"pep440\"\n}\n</code></pre>"},{"location":"modules/manager/setup-cfg/#additional-information","title":"Additional Information","text":"<p>Updates dependencies for Python <code>setup.cfg</code> files.</p>"},{"location":"modules/manager/smithy/","title":"Automated Dependency Updates for Smithy","text":"<p>Categories: <code>java</code></p> <p>Renovate supports updating Smithy dependencies.</p>"},{"location":"modules/manager/smithy/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)smithy-build\\.json$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/smithy/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>maven</code>.</p>"},{"location":"modules/manager/smithy/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/smithy/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)smithy-build\\\\.json$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/smithy/#additional-information","title":"Additional Information","text":"<p>Renovate updates the Maven dependencies declared in the <code>maven.dependencies</code> section of Smithy <code>smithy-build.json</code> files. For example:</p> Smithy build file<pre><code>{\n  \"version\": \"1.0\",\n  \"maven\": {\n    \"dependencies\": [\"software.amazon.smithy:smithy-aws-traits:1.37.0\"],\n    \"repositories\": [{ \"url\": \"https://repo.example.com/maven\" }]\n  }\n}\n</code></pre> <p>Repositories from <code>maven.repositories</code> are used as the registries for version lookups. When the file defines no repositories, Renovate defaults to Maven Central, which matches Smithy's own resolution behavior.</p> <p>Dependency coordinates or repository URLs that contain <code>${ENV_VAR}</code> placeholders are skipped. If all your repositories use placeholders, configure <code>registryUrls</code> in your Renovate config instead.</p> <p>Maven version ranges like <code>[1.0, 2.0)</code> are supported via Maven versioning.</p>"},{"location":"modules/manager/sveltos/","title":"Automated Dependency Updates for Sveltos","text":"<p>Categories: <code>kubernetes</code>, <code>cd</code></p> <p>Renovate supports updating Sveltos dependencies.</p>"},{"location":"modules/manager/sveltos/#file-matching","title":"File Matching","text":"<p>Because file names for <code>sveltos</code> cannot be easily determined automatically, Renovate will not attempt to match any <code>sveltos</code> files by default. For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/sveltos/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>, <code>helm</code>.</p>"},{"location":"modules/manager/sveltos/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>ClusterProfile</code> A Sveltos <code>ClusterProfile</code> resource <code>Profile</code> A Sveltos <code>Profile</code> resource <code>EventTrigger</code> A Sveltos <code>EventTrigger</code> resource <code>ClusterPromotion</code> A Sveltos <code>ClusterPromotion</code> resource"},{"location":"modules/manager/sveltos/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": []\n}\n</code></pre>"},{"location":"modules/manager/sveltos/#additional-information","title":"Additional Information","text":"<p>Renovate uses the Sveltos manager to update the dependencies in Helm-Charts for Sveltos resources.</p> <p>Learn about Sveltos Helm-Charts by reading the Sveltos documentation.</p>"},{"location":"modules/manager/sveltos/#you-must-set-a-managerfilepatterns-pattern","title":"You must set a <code>managerFilePatterns</code> pattern","text":"<p>The <code>sveltos</code> manager has no default <code>managerFilePatterns</code> pattern. This is because there is are no common filename or directory name conventions for Sveltos YAML files. You must set your own <code>managerFilePatterns</code> rules, so Renovate knows which <code>*.yaml</code> files are Sveltos definitions.</p>"},{"location":"modules/manager/sveltos/#managerfilepatterns-pattern-examples","title":"<code>managerFilePatterns</code> pattern examples","text":"If most .yaml files in your repository are for Sveltos<pre><code>{\n  \"sveltos\": {\n    \"managerFilePatterns\": [\"/\\\\.yaml$/\"]\n  }\n}\n</code></pre> Sveltos YAML files are in a sveltos/ directory<pre><code>{\n  \"sveltos\": {\n    \"managerFilePatterns\": [\"/sveltos/.+\\\\.yaml$/\"]\n  }\n}\n</code></pre> One Sveltos file in a directory<pre><code>{\n  \"sveltos\": {\n    \"managerFilePatterns\": [\"/^config/sveltos\\\\.yaml$/\"]\n  }\n}\n</code></pre>"},{"location":"modules/manager/sveltos/#disabling-parts-of-the-sveltos-manager","title":"Disabling parts of the sveltos manager","text":"<p>You can use <code>depTypes</code> for fine-grained control, for example to disable parts of the Sveltos manager.</p> Disable ClusterPromotion resources<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchManagers\": [\"sveltos\"],\n      \"matchDepTypes\": [\"ClusterPromotion\"],\n      \"enabled\": false\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/manager/swift/","title":"Automated Dependency Updates for Swift Package Manager","text":"<p>Categories: <code>swift</code></p> <p>Renovate supports updating Swift Package Manager dependencies.</p>"},{"location":"modules/manager/swift/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)Package\\.swift/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/swift/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>git-tags</code>, <code>github-tags</code>, <code>gitlab-tags</code>.</p>"},{"location":"modules/manager/swift/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/swift/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)Package\\\\.swift/\"\n  ],\n  \"versioning\": \"swift\",\n  \"pinDigests\": false\n}\n</code></pre>"},{"location":"modules/manager/swift/#additional-information","title":"Additional Information","text":"<p>Anything other than <code>.exact(&lt;...&gt;)</code> or <code>exact:&lt;...&gt;</code> will be treated as range with respect to Swift specific. Because of this, some PR descriptions will look like <code>from: &lt;...&gt; =&gt; &lt;...&gt;</code>.</p> <p>Examples:</p> <pre><code>package(name: \"&lt;...&gt;\", .exact(\"1.2.3\"))   // =&gt; 1.2.3\npackage(name: \"&lt;...&gt;\", exact: \"1.2.3\")    // =&gt; 1.2.3\npackage(name: \"&lt;...&gt;\", from: \"1.2.3\")     // =&gt; from: \"2.0.0\"\npackage(name: \"&lt;...&gt;\", \"1.2.3\"...)        // =&gt; \"2.0.0\"...\npackage(name: \"&lt;...&gt;\", \"1.2.3\"...\"1.3.0\") // =&gt; \"1.2.3\"...\"2.0.0\"\npackage(name: \"&lt;...&gt;\", \"1.2.3\"..&lt;\"1.3.0\") // =&gt; \"1.2.3\"..&lt;\"2.0.0\"\npackage(name: \"&lt;...&gt;\", ...\"1.2.3\")        // =&gt; ...\"2.0.0\"\npackage(name: \"&lt;...&gt;\", ..&lt;\"1.2.3\")        // =&gt; ..&lt;\"2.0.0\"\n</code></pre>"},{"location":"modules/manager/tekton/","title":"Automated Dependency Updates for Tekton","text":"<p>Categories: <code>ci</code>, <code>cd</code></p> <p>Renovate supports updating Tekton dependencies.</p>"},{"location":"modules/manager/tekton/#file-matching","title":"File Matching","text":"<p>Because file names for <code>tekton</code> cannot be easily determined automatically, Renovate will not attempt to match any <code>tekton</code> files by default. For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/tekton/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>, <code>git-tags</code>.</p>"},{"location":"modules/manager/tekton/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>tekton-annotation</code> Tekton resource referenced via an annotation (e.g. GitHub release or git tag URL) <code>tekton-bundle</code> Tekton Bundle OCI image reference <code>tekton-step-image</code> Container image used in a Tekton step, sidecar, or step template"},{"location":"modules/manager/tekton/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": []\n}\n</code></pre>"},{"location":"modules/manager/tekton/#additional-information","title":"Additional Information","text":"<p>Tekton is an Open Source cloud-native Continuous Integration and Continuous Delivery/Deployment solution.</p> <p>Tekton uses Tasks to capture specific commands to be executed, and Pipelines to combine different Tasks, to achieve a goal, like building a container image. Tasks and Pipelines are defined as Kubernetes custom resources.</p> <p>The Tekton documentation is a great resource to learn more about the overall concepts and how to start using it.</p>"},{"location":"modules/manager/tekton/#distributing-tasks-and-pipeline-definitions","title":"Distributing Tasks and Pipeline definitions","text":"<p>There are different ways to distribute Task and Pipeline definitions. They can be created directly as a Kubernetes resource with standard tools like <code>kubectl</code>. Tasks and Pipeline definitions can also live outside the Kubernetes cluster and get fetched by Tekton when needed, this approach relies on Tekton resource references rather than the resource definition. The <code>tekton</code> manager focuses on providing updates to Tekton resource references.</p> <p>Right now, Renovate's Tekton manager supports references that are Bundles and PipelinesAsCode with remote HTTP URL resolver. Read the Tekton Pipeline remote resolution docs for the different kinds of Tekton references and their corresponding resolvers.</p>"},{"location":"modules/manager/tekton/#using-a-pipelinesascode-remote-url-reference","title":"Using a PipelinesAsCode remote URL reference","text":"<p>By specifying the annotation with a remote task or a remote pipeline based on the recommended way using git based versioning. How this can be used can be seen in the example below.</p> How an annotation could look like in an pipeline-run.yaml<pre><code>apiVersion: tekton.dev/v1\nkind: PipelineRun\nmetadata:\n  name: main\n  annotations:\n    pipelinesascode.tekton.dev/task: 'https://github.com/foo/bar/raw/v0.0.1/task/my-task/my-task.yaml'\n    pipelinesascode.tekton.dev/pipeline: 'https://github.com/foo/bar/raw/v0.0.1/pipeline/my-pipeline/my-pipeline.yaml'\n</code></pre> <p>Supported URLs:</p> <ol> <li>https://github.com/foo/bar/raw/v0.0.1/tasks/task/task.yaml&lt;</li> <li>https://raw.githubusercontent.com/foo/bar/v0.0.1/tasks/task/task.yaml</li> <li>https://github.com/foo/bar/releases/download/v0.0.1/create-git-tag-task.yaml</li> </ol>"},{"location":"modules/manager/tekton/#using-a-tekton-bundle-reference","title":"Using a Tekton Bundle reference","text":"<p>There are three ways to use a Tekton Bundle reference:</p> <ol> <li>Via the Tekton Bundles Resolver</li> <li>Via the <code>tektoncd/resolution</code> project</li> <li>Via the <code>taskRun.spec.taskRef.bundle</code> and the <code>pipelineRun.spec.pipelineRef.bundle</code> attributes</li> </ol> <p>Renovate's Tekton manager supports all the methods listed above.</p>"},{"location":"modules/manager/tekton/#configuring-images-in-tekton-tasks","title":"Configuring images in Tekton Tasks","text":"<p>You can configure the container images that Tekton uses when it runs tasks. You may use these attributes to configure images in a:</p> <ol> <li>Task step</li> <li>Task stepTemplate</li> <li>Task sidecar</li> </ol> <p>You can define Tekton Tasks within these Tekton resources:</p> <ol> <li>Task</li> <li>TaskRun</li> <li>Pipeline</li> <li>PipelineRun</li> <li>StepAction</li> </ol> <p>Renovate's Tekton manager supports all the image attributes for the Tekton resources mentioned above.</p>"},{"location":"modules/manager/tekton/#set-your-own-managerfilepatterns-pattern","title":"Set your own <code>managerFilePatterns</code> pattern","text":"<p>The <code>tekton</code> manager does not have a default <code>managerFilePatterns</code> pattern. This means it won't match any files until you set a <code>managerFilePatterns</code> pattern. This is to avoid problems with unrelated YAML files since there is no well-established file name pattern for Tekton resources. As an example, the following config matches all the YAML files in a repository:</p> <pre><code>{\n  \"tekton\": {\n    \"managerFilePatterns\": [\"/\\\\.yaml$/\", \"/\\\\.yml$/\"]\n  }\n}\n</code></pre> <p>See our versioning documentation for details on the existing versioning rules and possible alterations.</p>"},{"location":"modules/manager/terraform/","title":"Automated Dependency Updates for Terraform","text":"<p>Categories: <code>iac</code>, <code>terraform</code></p> <p>Renovate supports updating Terraform dependencies.</p>"},{"location":"modules/manager/terraform/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching any of the following regular expressions:</p> <pre><code>**/*.tf\n**/*.tofu\n</code></pre> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/terraform/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>bitbucket-tags</code>, <code>docker</code>, <code>git-tags</code>, <code>github-releases</code>, <code>github-tags</code>, <code>helm</code>, <code>terraform-module</code>, <code>terraform-provider</code>.</p>"},{"location":"modules/manager/terraform/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>module</code> A Terraform module source reference <code>provider</code> A Terraform provider declared in a <code>provider</code> block <code>required_provider</code> A Terraform provider declared in a <code>required_providers</code> block <code>required_version</code> The Terraform version constraint in a <code>required_version</code> field <code>helm_release</code> A Helm chart deployed via a <code>helm_release</code> resource <code>tfe_workspace</code> A Terraform version pinned in a <code>tfe_workspace</code> resource <code>docker_image</code> A Docker image in a <code>docker_image</code> resource <code>docker_container</code> A Docker image in a <code>docker_container</code> resource <code>docker_service</code> A Docker image in a <code>docker_service</code> resource <code>docker_registry_image</code> A Docker image in a <code>docker_registry_image</code> data source <code>kubernetes_pod</code> A container image in a <code>kubernetes_pod</code> resource <code>kubernetes_pod_v1</code> A container image in a <code>kubernetes_pod_v1</code> resource <code>kubernetes_cron_job</code> A container image in a <code>kubernetes_cron_job</code> resource <code>kubernetes_cron_job_v1</code> A container image in a <code>kubernetes_cron_job_v1</code> resource <code>kubernetes_daemonset</code> A container image in a <code>kubernetes_daemonset</code> resource <code>kubernetes_daemon_set_v1</code> A container image in a <code>kubernetes_daemon_set_v1</code> resource <code>kubernetes_deployment</code> A container image in a <code>kubernetes_deployment</code> resource <code>kubernetes_deployment_v1</code> A container image in a <code>kubernetes_deployment_v1</code> resource <code>kubernetes_job</code> A container image in a <code>kubernetes_job</code> resource <code>kubernetes_job_v1</code> A container image in a <code>kubernetes_job_v1</code> resource <code>kubernetes_replication_controller</code> A container image in a <code>kubernetes_replication_controller</code> resource <code>kubernetes_replication_controller_v1</code> A container image in a <code>kubernetes_replication_controller_v1</code> resource <code>kubernetes_stateful_set</code> A container image in a <code>kubernetes_stateful_set</code> resource <code>kubernetes_stateful_set_v1</code> A container image in a <code>kubernetes_stateful_set_v1</code> resource"},{"location":"modules/manager/terraform/#default-config","title":"Default config","text":"<pre><code>{\n  \"commitMessageTopic\": \"Terraform {{depName}}\",\n  \"managerFilePatterns\": [\n    \"**/*.tf\",\n    \"**/*.tofu\"\n  ],\n  \"pinDigests\": false\n}\n</code></pre>"},{"location":"modules/manager/terraform/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>.terraform.lock.hcl</code></li> </ul> <p>Renovate performs lock file maintenance itself, without calling the underlying package manager.</p>"},{"location":"modules/manager/terraform/#additional-information","title":"Additional Information","text":""},{"location":"modules/manager/terraform/#terraform-vs-opentofu","title":"Terraform vs OpenTofu","text":"<p>Renovate can not know if you want to use the Terraform or OpenTofu registry. By default, Renovate uses the Terraform registry (<code>registry.terraform.io</code>) for providers and modules without a registry definition.</p> <p>You can override this default with your own <code>packageRules</code>, for example:</p> Prefer releases from OpenTofu<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"terraform-provider\", \"terraform-module\"],\n      \"registryUrls\": [\"https://registry.opentofu.org\"]\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/manager/terraform/#supported-dependencies","title":"Supported dependencies","text":"<p>Renovate supports updating the Terraform dependencies listed below. Check the tables to see where some dependencies can be hosted.</p>"},{"location":"modules/manager/terraform/#modules","title":"Modules","text":"Name Public hosting Private hosting GitTags yes yes GithubTags yes yes TerraformRegistry yes yes"},{"location":"modules/manager/terraform/#providers","title":"Providers","text":"<p>Providers are deprecated in Terraform <code>0.13.0</code>.</p> Name Public hosting Private hosting TerraformRegistry yes yes"},{"location":"modules/manager/terraform/#required_providers-block","title":"required_providers block","text":"<p>Needs Terraform <code>&gt;= 0.13.0</code>.</p> Name Public hosting Private hosting TerraformRegistry yes yes"},{"location":"modules/manager/terraform/#required_version","title":"required_version","text":"<p>Renovate can update the <code>required_version</code> attribute of the Terraform block.</p>"},{"location":"modules/manager/terraform/#helm_release","title":"helm_release","text":"<p>Renovate can update the version attribute of <code>helm_release</code> resources. This applies to both helm chart repositories and charts published in OCI registries.</p> Name Public hosting Private hosting chart repository yes yes"},{"location":"modules/manager/terraform/#docker","title":"Docker","text":"<p>Renovate can update image references of the Docker provider resources (<code>docker\\_\\*</code>).</p> Name Public hosting Private hosting Docker registry yes yes"},{"location":"modules/manager/terraform/#kubernetes","title":"Kubernetes","text":"<p>Renovate can update image references of Kubernetes provider resources (<code>kubernetes\\_\\*</code>).</p> Name Public hosting Private hosting Docker registry yes yes"},{"location":"modules/manager/terraform/#tfe_workspaces","title":"tfe_workspaces","text":"<p>Renovate can update tfe_workspaces. Renovate searches for the <code>terraform_version</code> argument.</p>"},{"location":"modules/manager/terraform/#range-constraints","title":"Range constraints","text":"<p>Renovate understands these Terraform range constraints:</p> Terraform range Notes <code>&gt;= 1.2.0</code> version <code>1.2.0</code> or newer <code>&lt;= 1.2.0</code> version <code>1.2.0</code> or older <code>~&gt; 1.2.0</code> any non-beta version <code>&gt;= 1.2.0</code> and <code>&lt; 1.3.0</code>, e.g. <code>1.2.X</code> <code>~&gt; 1.2</code> any non-beta version <code>&gt;= 1.2.0</code> and <code>&lt; 2.0.0</code>, e.g. <code>1.X.Y</code> <code>&gt;= 1.0.0, &lt;= 2.0.0</code> any version between <code>1.0.0</code> and <code>2.0.0</code> inclusive"},{"location":"modules/manager/terraform/#disabling-parts-of-the-manager","title":"Disabling parts of the manager","text":"<p>You can use these <code>depTypes</code> for fine-grained control, for example to disable parts of the Terraform manager.</p> Resource <code>depType</code> Notes Terraform provider <code>provider</code> required Terraform provider <code>required_provider</code> required Terraform version <code>required_version</code> This handles the <code>required_version</code> in terraform blocks TFE workspace <code>tfe_workspace</code> This handles the <code>terraform_version</code> argument in <code>tfe_workspace</code> resources Terraform module <code>module</code> Helm release <code>helm_release</code> Docker container <code>docker_container</code> Docker image <code>docker_image</code> Docker service <code>docker_service</code> Kubernetes CronJob <code>kubernetes_cron_job</code> Kubernetes CronJob v1 <code>kubernetes_cron_job_v1</code> Kubernetes DaemonSet <code>kubernetes_daemon_set</code> Kubernetes DaemonSet v1 <code>kubernetes_daemon_set_v1</code> Kubernetes Deployment <code>kubernetes_deployment</code> Kubernetes Deployment v1 <code>kubernetes_deployment_v1</code> Kubernetes Job <code>kubernetes_job</code> Kubernetes Job v1 <code>kubernetes_job_v1</code> Kubernetes Pod <code>kubernetes_pod</code> Kubernetes Pod v1 <code>kubernetes_pod_v1</code> Kubernetes Replication Controller <code>kubernetes_replication_controller</code> Kubernetes Replication Controller v1 <code>kubernetes_replication_controller_v1</code> Kubernetes StatefulSet <code>kubernetes_stateful_set</code> Kubernetes StatefulSet v1 <code>kubernetes_stateful_set_v1</code> Data Source <code>depType</code> Notes Docker registry image <code>docker_registry_image</code> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p>"},{"location":"modules/manager/terraform-version/","title":"Automated Dependency Updates for .terraform-version","text":"<p>Categories: <code>terraform</code></p> <p>Renovate supports updating .terraform-version dependencies.</p>"},{"location":"modules/manager/terraform-version/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)\\.terraform-version$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/terraform-version/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>github-releases</code>.</p>"},{"location":"modules/manager/terraform-version/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/terraform-version/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)\\\\.terraform-version$/\"\n  ],\n  \"versioning\": \"hashicorp\",\n  \"extractVersion\": \"^v(?&lt;version&gt;.*)$\"\n}\n</code></pre>"},{"location":"modules/manager/terraform-version/#additional-information","title":"Additional Information","text":"<p>This will maintain <code>.terraform-version</code> files. Available versions will be determined from the official Terraform downloads page.</p>"},{"location":"modules/manager/terragrunt/","title":"Automated Dependency Updates for Terragrunt","text":"<p>Categories: <code>iac</code>, <code>terraform</code></p> <p>Renovate supports updating Terragrunt dependencies.</p>"},{"location":"modules/manager/terragrunt/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)terragrunt\\.hcl$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/terragrunt/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>bitbucket-tags</code>, <code>git-tags</code>, <code>gitea-tags</code>, <code>github-tags</code>, <code>gitlab-tags</code>, <code>terraform-module</code>.</p>"},{"location":"modules/manager/terragrunt/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>github</code> Terragrunt module sourced from a GitHub repository <code>gitTags</code> Terragrunt module sourced from a generic Git repository <code>terragrunt</code> Terragrunt module sourced from a Terraform Module registry"},{"location":"modules/manager/terragrunt/#default-config","title":"Default config","text":"<pre><code>{\n  \"commitMessageTopic\": \"Terragrunt dependency {{depName}}\",\n  \"managerFilePatterns\": [\n    \"/(^|/)terragrunt\\\\.hcl$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/terragrunt/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>.terraform.lock.hcl</code></li> </ul> <p>Lock file maintenance is not implemented separately for Terragrunt. It reuses the Terraform manager's lock file logic in-process, so Renovate computes the updated <code>.terraform.lock.hcl</code> hashes directly instead of calling the <code>terragrunt</code> or <code>terraform</code> CLI.</p>"},{"location":"modules/manager/terragrunt/#additional-information","title":"Additional Information","text":"<p>Currently by default, Terragrunt support is limited to Terraform registry sources and GitHub sources that include SemVer refs, e.g. like <code>github.com/hashicorp/example?ref=v1.0.0</code>.</p> <p>You can create a custom versioning config to support non-SemVer references. For example, if you want to reference a tag like <code>module-v1.2.5</code>, a block like this would work:</p> <pre><code>{\n  \"terragrunt\": {\n    \"versioning\": \"regex:^((?&lt;compatibility&gt;.*)-v|v*)(?&lt;major&gt;\\\\d+)\\\\.(?&lt;minor&gt;\\\\d+)\\\\.(?&lt;patch&gt;\\\\d+)$\"\n  }\n}\n</code></pre> <p>Pinned Terragrunt dependencies like the following will get a PR whenever there is a newer version available:</p> <pre><code>terraform {\n  source = \"github.com/hashicorp/example?ref=v1.0.0\"\n}\n</code></pre>"},{"location":"modules/manager/terragrunt/#terraform-lockfiles","title":"Terraform lockfiles","text":"<p>The Terragrunt manager supports lock file maintenance for <code>.terraform.lock.hcl</code> artifacts. These artifacts will be updated if and only if the update type is <code>lockFileMaintenance</code>.</p>"},{"location":"modules/manager/terragrunt-version/","title":"Automated Dependency Updates for .terragrunt-version","text":"<p>Categories: <code>terraform</code></p> <p>Renovate supports updating .terragrunt-version dependencies.</p>"},{"location":"modules/manager/terragrunt-version/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)\\.terragrunt-version$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/terragrunt-version/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>github-releases</code>.</p>"},{"location":"modules/manager/terragrunt-version/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/terragrunt-version/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)\\\\.terragrunt-version$/\"\n  ],\n  \"versioning\": \"hashicorp\",\n  \"extractVersion\": \"^v(?&lt;version&gt;.+)$\"\n}\n</code></pre>"},{"location":"modules/manager/terragrunt-version/#additional-information","title":"Additional Information","text":"<p>This will maintain <code>.terragrunt-version</code> files. Available versions will be determined from <code>gruntwork-io/terragrunt</code> GitHub releases.</p>"},{"location":"modules/manager/tflint-plugin/","title":"Automated Dependency Updates for TFLint Plugins","text":"<p>Categories: <code>terraform</code></p> <p>Renovate supports updating TFLint Plugins dependencies.</p>"},{"location":"modules/manager/tflint-plugin/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/\\.tflint\\.hcl$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/tflint-plugin/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>github-releases</code>.</p>"},{"location":"modules/manager/tflint-plugin/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>plugin</code> TFLint plugin sourced from GitHub Releases"},{"location":"modules/manager/tflint-plugin/#default-config","title":"Default config","text":"<pre><code>{\n  \"commitMessageTopic\": \"TFLint plugin {{depName}}\",\n  \"managerFilePatterns\": [\n    \"/\\\\.tflint\\\\.hcl$/\"\n  ],\n  \"extractVersion\": \"^v(?&lt;version&gt;.*)$\"\n}\n</code></pre>"},{"location":"modules/manager/tflint-plugin/#additional-information","title":"Additional Information","text":"<p>Renovate maintains your TFLint configuration file, and updates the plugins in the file.</p> <p>Supports plugins hosted in public repositories on github.com. This is because TFLint only supports public repositories.</p>"},{"location":"modules/manager/travis/","title":"Automated Dependency Updates for Travis CI","text":"<p>Categories: <code>ci</code></p> <p>Renovate supports updating Travis CI dependencies.</p>"},{"location":"modules/manager/travis/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/^\\.travis\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/travis/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>node-version</code>.</p>"},{"location":"modules/manager/travis/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/travis/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/^\\\\.travis\\\\.ya?ml$/\"\n  ],\n  \"major\": {\n    \"enabled\": false\n  },\n  \"versioning\": \"node\"\n}\n</code></pre>"},{"location":"modules/manager/travis/#additional-information","title":"Additional Information","text":"<p>This manager is intended to keep Travis config files (<code>.travis.yml</code>) up-to-date, this file controls the CI build environment. Currently Renovate can only update the <code>node_js</code> section of this file.</p> <p>Renovate \"understands\" Travis's Build Matrix concept as well, so it will try to update all found Node.js versions to the latest LTS, e.g.</p> <pre><code>node_js:\n-  - 8.10.0\n-  - 10.10.0\n+  - 16.13.0\n+  - 16.13.0\n</code></pre> <p>Due to this, major updates for Travis are disabled by default. If you enable major updates and use a version matrix, then you will likely need to manually fix any major update PRs raised by Renovate. Here's how to enable major updates in your Renovate config:</p> <pre><code>{\n  \"travis\": {\n    \"major\": {\n      \"enabled\": true\n    }\n  }\n}\n</code></pre>"},{"location":"modules/manager/typst/","title":"Automated Dependency Updates for Typst package","text":"<p>Categories: <code>no-category</code></p> <p>Renovate supports updating Typst package dependencies.</p>"},{"location":"modules/manager/typst/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/\\.typ$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/typst/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>typst</code>.</p>"},{"location":"modules/manager/typst/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/typst/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/\\\\.typ$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/typst/#additional-information","title":"Additional Information","text":"<p>Manages versions of Typst package imports in <code>.typ</code> files for update.</p> <p>The Typst datasource fetches package information from the official public Typst index. Only the <code>preview</code> namespace is supported. Local and other unsupported namespaces are skipped. Custom registries are not supported.</p>"},{"location":"modules/manager/unity3d/","title":"Automated Dependency Updates for Unity3d","text":"<p>Categories: <code>dotnet</code></p> <p>Renovate supports updating Unity3d dependencies.</p>"},{"location":"modules/manager/unity3d/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>**/ProjectSettings/ProjectVersion.txt</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/unity3d/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>unity3d</code>.</p>"},{"location":"modules/manager/unity3d/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/unity3d/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"**/ProjectSettings/ProjectVersion.txt\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/unity3d/#additional-information","title":"Additional Information","text":"<p>Manages version numbers in the <code>ProjectVersion.txt</code> file located within the <code>ProjectSettings</code> folder of a Unity project.</p> <p>Example path: <code>/home/user/testUnityProject/ProjectSettings/ProjectVersion.txt</code>.</p> <p><code>ProjectVersion.txt</code> always have two version references in YAML syntax; one with revision and another one without it. Both are updated together.</p> <pre><code>m_EditorVersion: 2020.3.15f2\nm_EditorVersionWithRevision: 2020.3.15f2 (6cf78cb77498)\n</code></pre>"},{"location":"modules/manager/velaci/","title":"Automated Dependency Updates for Vela","text":"<p>Categories: <code>ci</code></p> <p>Renovate supports updating Vela dependencies.</p>"},{"location":"modules/manager/velaci/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)\\.vela\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/velaci/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>.</p>"},{"location":"modules/manager/velaci/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/velaci/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/(^|/)\\\\.vela\\\\.ya?ml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/velaci/#additional-information","title":"Additional Information","text":"<p>Extracts Docker-type dependencies from VelaCI config files.</p> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p>"},{"location":"modules/manager/vendir/","title":"Automated Dependency Updates for vendir","text":"<p>Categories: <code>helm</code>, <code>kubernetes</code></p> <p>Renovate supports updating vendir dependencies.</p>"},{"location":"modules/manager/vendir/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/(^|/)vendir\\.yml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/vendir/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>, <code>helm</code>.</p>"},{"location":"modules/manager/vendir/#dependency-types","title":"Dependency types","text":"<p>This manager extracts the following <code>depType</code> values:</p> <code>depType</code> Description <code>HelmChart</code> Helm chart dependency in vendir configuration <code>GitSource</code> Git reference-based source <code>GithubRelease</code> GitHub release-based source <code>HttpSource</code> HTTP-based source"},{"location":"modules/manager/vendir/#default-config","title":"Default config","text":"<pre><code>{\n  \"commitMessageTopic\": \"vendir {{depName}}\",\n  \"managerFilePatterns\": [\n    \"/(^|/)vendir\\\\.yml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/vendir/#lock-file-maintenance","title":"Lock File Maintenance","text":"<p>This manager supports <code>lockFileMaintenance</code> for the following file(s):</p> <ul> <li><code>vendir.lock.yml</code></li> </ul> <p>Lock file maintenance is delegated to the underlying package manager, which Renovate runs as an external command.</p>"},{"location":"modules/manager/vendir/#additional-information","title":"Additional Information","text":"<p>Renovate can update Helm Chart references and Git references in <code>vendir.yml</code> files, with the vendir tool.</p> <p>For Renovate to work you must:</p> <ul> <li>let vendir create a vendir lockfile</li> <li>put the vendir lockfile in your repository</li> </ul>"},{"location":"modules/manager/vendir/#helm-charts","title":"Helm Charts","text":"<p>Renovate supports HTTPS and OCI Helm chart repositories.</p> Example helm chart vendir.yml<pre><code>apiVersion: vendir.k14s.io/v1alpha1\nkind: Config\n\n# one or more directories to manage with vendir\ndirectories:\n  - # path is relative to the `vendir` CLI working directory\n    path: config/_ytt_lib\n    contents:\n      path: github.com/cloudfoundry/cf-k8s-networking\n      helmChart:\n        # chart name (required)\n        name: stable/redis\n        # use specific chart version (string; optional)\n        version: '1.2.1'\n        # specifies Helm repository to fetch from (optional)\n        repository:\n          # repository url; supports experimental OCI Helm fetch via\n          # oci:// scheme (required)\n          url: https://...\n        # specify Helm binary version to use;\n        # '3' means binary 'helm3' needs to be on the path (optional)\n        helmVersion: '3'\n</code></pre>"},{"location":"modules/manager/vendir/#registry-aliases","title":"Registry Aliases","text":""},{"location":"modules/manager/vendir/#oci","title":"OCI","text":"<p>Aliases for OCI registries are supported via Renovate's <code>dockerfile</code> or <code>docker</code> managers.</p>"},{"location":"modules/manager/vendir/#git","title":"Git","text":"<p>Renovate can update explicit refs in Git references in <code>vendir.yml</code> files.</p> Example git vendir.yml<pre><code>apiVersion: vendir.k14s.io/v1alpha1\nkind: Config\n\n# one or more directories to manage with vendir\ndirectories:\n  - path: config/_ytt_lib\n    contents:\n      path: github.com/cloudfoundry/cf-k8s-networking\n      git:\n        # HTTP or SSH URLs are supported (required)\n        url: https://github.com/cloudfoundry/cf-k8s-networking\n        # branch, tag, commit; origin is the name of the remote (required)\n        # optional if refSelection is specified (available in v0.11.0+)\n        ref: origin/master\n        # depth of commits to fetch; 0 (default) means everything (optional; v0.29.0+)\n        depth: 1\n        ...\n</code></pre>"},{"location":"modules/manager/vendir/#githubrelease","title":"GithubRelease","text":"<p>Renovate can update explicit tags in GitHub releases in <code>vendir.yml</code> files.</p> Example GitHub vendir.yml<pre><code>directories:\n  - path: config/_ytt_lib\n    contents:\n      path: github.com/cloudfoundry/cf-k8s-networking\n      githubRelease:\n        # slug for repository (org/repo) (required)\n        slug: k14s/kapp-controller\n        # use release tag (optional)\n        # optional if tagSelection is specified (available in v0.22.0+)\n        tag: v0.1.0\n</code></pre>"},{"location":"modules/manager/vendir/#http","title":"HTTP","text":"<p>Note</p> <p>Updates to dependencies tracked through the HTTP source can only be updated using <code>lockFileMaintenance</code>.</p> <p>Renovate can extract HTTP dependency sources, but will not update them without <code>lockFileMaintenance</code>.</p> Example vendir.yml for syncing a remote file<pre><code>apiVersion: vendir.k14s.io/v1alpha1\nkind: Config\ndirectories:\n  - path: internal\n    contents:\n      - path: renovate-ce\n        http:\n          url: https://raw.githubusercontent.com/mend/renovate-ce-ee/refs/main/docs/openapi-community.yaml\n</code></pre>"},{"location":"modules/manager/woodpecker/","title":"Automated Dependency Updates for Woodpecker","text":"<p>Categories: <code>ci</code></p> <p>Renovate supports updating Woodpecker dependencies.</p>"},{"location":"modules/manager/woodpecker/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>/^\\.woodpecker(?:/[^/]+)?\\.ya?ml$/</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/woodpecker/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>docker</code>.</p>"},{"location":"modules/manager/woodpecker/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/woodpecker/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"/^\\\\.woodpecker(?:/[^/]+)?\\\\.ya?ml$/\"\n  ]\n}\n</code></pre>"},{"location":"modules/manager/woodpecker/#additional-information","title":"Additional Information","text":"<p>Extracts all Docker images from Woodpecker Pipeline YAML files.</p> <ul> <li>Woodpecker homepage</li> <li>Woodpecker Docs: Workflow Syntax (section with dependencies)</li> <li><code>woodpecker-ci</code> JSON schema</li> </ul> <p>If you need to change the versioning format, read the versioning documentation to learn more.</p>"},{"location":"modules/manager/xcodegen/","title":"Automated Dependency Updates for XcodeGen","text":"<p>Categories: <code>swift</code></p> <p>Renovate supports updating XcodeGen dependencies.</p>"},{"location":"modules/manager/xcodegen/#file-matching","title":"File Matching","text":"<p>By default, Renovate will check any files matching the following regular expression: <code>**/project.yml</code>.</p> <p>For details on how to extend a manager's <code>managerFilePatterns</code> value, please follow this link.</p>"},{"location":"modules/manager/xcodegen/#supported-datasources","title":"Supported datasources","text":"<p>This manager supports extracting the following datasources: <code>git-tags</code>, <code>github-tags</code>, <code>gitlab-tags</code>.</p>"},{"location":"modules/manager/xcodegen/#dependency-types","title":"Dependency types","text":"<p>This manager has no documented <code>depType</code> values.</p>"},{"location":"modules/manager/xcodegen/#default-config","title":"Default config","text":"<pre><code>{\n  \"managerFilePatterns\": [\n    \"**/project.yml\"\n  ],\n  \"pinDigests\": false\n}\n</code></pre>"},{"location":"modules/manager/xcodegen/#additional-information","title":"Additional Information","text":"<p>Extracts Swift package dependencies from XcodeGen <code>project.yml</code> files.</p> <p>The default <code>project.yml</code> file name is used for file matching, but users can extend the <code>managerFilePatterns</code> config option to match custom file names.</p> <p>Supported version specifiers:</p> <ul> <li><code>from</code> / <code>majorVersion</code> (major version constraint)</li> <li><code>minorVersion</code> (minor version constraint)</li> <li><code>exactVersion</code> / <code>version</code> (fixed version)</li> </ul> <p>The following version specifiers are detected but not supported for updates:</p> <ul> <li><code>branch</code> (branch reference)</li> <li><code>revision</code> (Git SHA)</li> <li><code>minVersion</code> / <code>maxVersion</code> (range constraints)</li> </ul> <p>Local packages (specified with <code>path</code>) are ignored.</p> <p>Both <code>url</code> and <code>github</code> shorthand are supported for specifying the package source.</p>"},{"location":"modules/platform/","title":"Renovate Platforms","text":"<p>Renovate aims to be platform-neutral, while also taking advantage of good platform-specific features.</p>"},{"location":"modules/platform/#supported-platforms","title":"Supported platforms","text":"<p>Supported values for <code>platform</code> are: </p> <ul> <li><code>azure</code></li> <li><code>bitbucket</code></li> <li><code>bitbucket-server</code></li> <li><code>forgejo</code></li> <li><code>gitea</code></li> <li><code>github</code></li> <li><code>gitlab</code></li> </ul> <p>Additionally, the following <code>platform</code> values are experimental:</p> <ul> <li><code>codecommit</code></li> <li><code>gerrit</code></li> <li><code>local</code></li> <li><code>scm-manager</code></li> </ul>"},{"location":"modules/platform/azure/","title":"Azure DevOps and Azure DevOps Server","text":""},{"location":"modules/platform/azure/#authentication","title":"Authentication","text":""},{"location":"modules/platform/azure/#personal-access-token-pat","title":"Personal Access Token (PAT)","text":"<p>First, create a Personal Access Token for the Renovate account. Let Renovate use your PAT by doing one of the following:</p> <ul> <li>Set your PAT as a <code>token</code> in your <code>config.js</code> file</li> <li>Set your PAT as an environment variable <code>RENOVATE_TOKEN</code></li> <li>Set your PAT when you run Renovate in the CLI with <code>--token=</code></li> </ul> <p>Permissions for your PAT should be at minimum:</p> Scope Permission Description <code>Code</code> Read &amp; Write Required <code>Work Items</code> Read &amp; write Needed for link to work item and dependecy dashboards <p>Remember to set <code>platform=azure</code> somewhere in your Renovate config file.</p>"},{"location":"modules/platform/azure/#microsoft-entra-id-bearer-token-oauth","title":"Microsoft Entra ID Bearer Token (OAuth)","text":"<p>Renovate also supports authenticating to Azure DevOps Services using Microsoft Entra ID (formerly Azure AD) Bearer tokens. This works with service principals, managed identities, and user-delegated tokens.</p> <p>Renovate automatically detects whether a token is a JWT (Bearer token) or a PAT based on its format. No additional configuration is needed. Just set the <code>token</code> field to your Entra ID access token:</p> <pre><code>// config.js\nmodule.exports = {\n  platform: 'azure',\n  endpoint: 'https://dev.azure.com/your-organization',\n  token: '&lt;your-entra-access-token&gt;',\n};\n</code></pre> <p>Or via environment variables:</p> <pre><code>export RENOVATE_PLATFORM=azure\nexport RENOVATE_ENDPOINT=https://dev.azure.com/your-organization\nexport RENOVATE_TOKEN=&lt;your-entra-access-token&gt;\n</code></pre> <p>Renovate inspects the token structure to decide the authentication method:</p> <ul> <li>If the token is a valid JWT (three base64url-encoded segments with a JSON header containing <code>typ</code> or <code>alg</code>), it is treated as a Bearer token (Microsoft Entra ID).</li> <li>Otherwise, the token is treated as a Personal Access Token (PAT).</li> </ul>"},{"location":"modules/platform/azure/#obtaining-a-bearer-token","title":"Obtaining a Bearer token","text":"<p>For service principals:</p> <pre><code>az login --service-principal -u &lt;client-id&gt; -p &lt;client-secret&gt; --tenant &lt;tenant-id&gt;\naz account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query accessToken -o tsv\n</code></pre> <p>For managed identities (Azure-hosted Renovate):</p> <pre><code>az login --identity\naz account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798 --query accessToken -o tsv\n</code></pre>"},{"location":"modules/platform/azure/#requirements-for-service-principals-managed-identities","title":"Requirements for service principals / managed identities","text":"<ol> <li>The identity must be added to the Azure DevOps organization (Organization Settings \u2192 Users).</li> <li>The identity must have at least a Basic license.</li> <li>Grant permissions: Code (Read &amp; Write) at the project level.</li> </ol>"},{"location":"modules/platform/azure/#limitations","title":"Limitations","text":"<ul> <li>Token lifetime: Entra tokens expire after ~1 hour. Refresh the token before each Renovate run.</li> <li>Azure DevOps Services only: Bearer tokens are not supported on Azure DevOps Server (on-premises). Use PATs for on-premises.</li> <li>Conditional Access: Your organization's Conditional Access policies may block service principal tokens.</li> </ul>"},{"location":"modules/platform/azure/#running-renovate-in-azure-pipelines","title":"Running Renovate in Azure Pipelines","text":""},{"location":"modules/platform/azure/#setting-up-a-new-pipeline","title":"Setting up a new pipeline","text":"<p>Create a brand new pipeline within Azure DevOps, and select your source: </p> <p>Then select your repository.</p> <p>Within Configure your pipeline select: Starter pipeline </p> <p>Replace all content in the starter pipeline with:</p> <pre><code>schedules:\n  - cron: '0 3 * * *'\n    displayName: 'Every day at 3am (UTC)'\n    branches:\n      include: [main]\n    always: true\n\ntrigger: none\n\npool:\n  vmImage: ubuntu-latest\n\nsteps:\n  - task: npmAuthenticate@0\n    inputs:\n      workingFile: .npmrc\n\n  - bash: |\n      add-apt-repository ppa:git-core/ppa\n      apt update &amp;&amp; apt install git -y\n    displayName: 'Install latest version of Git'\n\n  - bash: |\n      git config --global user.email 'bot@renovateapp.com'\n      git config --global user.name 'Renovate'\n      npx --userconfig .npmrc renovate\n    env:\n      RENOVATE_PLATFORM: azure\n      RENOVATE_ENDPOINT: $(System.CollectionUri)\n      RENOVATE_CONFIG_FILE: $(Build.SourcesDirectory)/renovate_bot_config.json\n      RENOVATE_TOKEN: $(System.AccessToken)\n      LOG_LEVEL: debug\n</code></pre>"},{"location":"modules/platform/azure/#create-a-npmrc-file","title":"Create a .npmrc file","text":"<p>Create a <code>.npmrc</code> file in your repository:</p> <pre><code>registry=https://pkgs.dev.azure.com/YOUR-ORG/_packaging/YOUR-FEED/npm/registry/\nalways-auth=true\n</code></pre> <p>For the <code>registry</code> key, replace <code>YOUR-ORG</code> with your Azure DevOps organization and <code>YOUR-FEED</code> with your Azure Artifacts feed.</p>"},{"location":"modules/platform/azure/#create-a-configjs-file","title":"Create a config.js file","text":"<p>Create a <code>config.js</code> file in your repository:</p> <pre><code>module.exports = {\n  hostRules: [\n    {\n      hostType: 'npm',\n      matchHost: 'pkgs.dev.azure.com',\n      username: 'apikey',\n      password: process.env.RENOVATE_TOKEN,\n    },\n  ],\n  repositories: ['YOUR-PROJECT/YOUR-REPO'],\n};\n</code></pre> <p>For the <code>repositories</code> key, replace <code>YOUR-PROJECT/YOUR-REPO</code> with your Azure DevOps project and repository.</p>"},{"location":"modules/platform/azure/#using-azure-devops-internal-api-for-pipeline-tasks-versions","title":"Using Azure DevOps internal API for pipeline tasks versions","text":"<p>Info</p> <p>Renovate now uses the set of APIs that Azure provides to query the azure-pipelines tasks versions directly from the instance. Read pull request 32966 and discussion 24820 for more background information on this change.</p> <p>To let Renovate use the Azure DevOps internal API, you must set these variables in your config:</p> <ul> <li><code>platform</code> = <code>azure</code></li> <li><code>endpoint</code> = <code>$(System.CollectionUri)</code>, this is an Azure predefined variable</li> <li><code>hostRules.hostType</code> = <code>azure-pipelines-tasks</code></li> </ul> Example config file in JSON format<pre><code>{\n  \"platform\": \"azure\",\n  \"endpoint\": \"https://dev.azure.com/ORG_NAME\",\n  \"azure-pipelines\": {\n    \"enabled\": true\n  },\n  \"repositories\": [\"PROJECT_NAME/REPO_NAME\"],\n  \"prHourlyLimit\": 0,\n  \"baseBranchPatterns\": [\"main\"],\n  \"hostRules\": [\n    {\n      \"matchHost\": \"https://dev.azure.com/\",\n      \"hostType\": \"azure-pipelines-tasks\"\n    }\n  ],\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"azure-pipelines-tasks\"],\n      \"extractVersion\": \"^(?&lt;version&gt;\\\\d+)\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/platform/azure/#yarn-users","title":"Yarn users","text":"<p>To do a successful <code>yarn install</code> you need to match the URL of the registry fully. Use the <code>matchHost</code> config option to specify the full path to the registry.</p> <pre><code>module.exports = {\n  platform: 'azure',\n  hostRules: [\n    {\n      matchHost:\n        'https://myorg.pkgs.visualstudio.com/_packaging/myorg/npm/registry/',\n      token: process.env.RENOVATE_TOKEN,\n      hostType: 'npm',\n    },\n    {\n      matchHost: 'github.com',\n      token: process.env.RENOVATE_GITHUB_COM_TOKEN,\n    },\n  ],\n  repositories: ['YOUR-PROJECT/YOUR-REPO'],\n};\n</code></pre> <p>Put this in your repository's <code>.npmrc</code> file:</p> <pre><code>registry=https://myorg.pkgs.visualstudio.com/_packaging/myorg/npm/registry/\nalways-auth=true\n</code></pre>"},{"location":"modules/platform/azure/#add-renovatejson-file","title":"Add renovate.json file","text":"<p>Additionally, you can create a <code>renovate.json</code> file (which holds the Renovate configuration) in the root of the repository you want to update. Read more about the Renovate configuration options</p>"},{"location":"modules/platform/azure/#using-a-single-pipeline-to-update-multiple-repositories","title":"Using a single pipeline to update multiple repositories","text":"<p>If you want to use a single Renovate pipeline to update multiple repositories you must take the following steps.</p> <p>Add the names of the repositories to <code>config.js</code>. Make sure that the \"Project Collection Build Service (YOUR-PROJECT)\" user has the following permissions on the repositories:</p> <ul> <li>Contribute</li> <li>Contribute to pull requests</li> <li>Create branch</li> <li>Read</li> </ul> <p>The user must have the following permission at Project-level:</p> <ul> <li>View project-level information</li> </ul>"},{"location":"modules/platform/azure/#linking-a-work-item-to-the-pull-requests","title":"Linking a work item to the Pull Requests","text":"<p>If you want Renovate to automatically link an existing work item to the Pull Requests, you can set the <code>azureWorkItemId</code> configuration. Make sure the user has the following permissions on the work item's area path:</p> <ul> <li>Edit work items in this node</li> <li>View work items in this node</li> </ul> <p>If the user does not have these permissions, Renovate still creates a PR but it won't have a link to the work item.</p>"},{"location":"modules/platform/azure/#dependency-dashboard-work-item-state","title":"Dependency Dashboard work item state","text":"<p>On Azure DevOps, Renovate stores the Dependency Dashboard (and any other issues) as a work item of type <code>Issue</code>. Renovate resolves the correct open and closed state names from the process for the project automatically, so it works across the different processes (for example <code>To Do</code>/<code>Done</code> on Basic, <code>New</code>/<code>Active</code>/<code>Closed</code> on Agile, and custom inherited processes).</p> <p>When creating the work item, Renovate does not set a state, so Azure DevOps applies the default initial state of the work item type. If the states cannot be read (for example on older Azure DevOps Server versions), Renovate falls back to the <code>New</code> and <code>Closed</code> state names.</p> <p>The work item description is rendered as Markdown only on Azure DevOps Services (cloud), which is the only product that supports the work item Markdown format field. On Azure DevOps Server (on-premises) Renovate omits that field, so the description is stored as plain text.</p>"},{"location":"modules/platform/azure/#adding-tags-to-pull-requests","title":"Adding tags to Pull Requests","text":"<p>Tags can be added to Pull Requests using the <code>labels</code> or <code>addLabels</code> configurations. If the tag does not exist in the DevOps project, it will be created automatically during creation of the Pull Request as long as the user has the permissions at Project-level:</p> <ul> <li>Create tag definition</li> </ul> <p>Otherwise, when a tag does not exist and the user does not have permission to create it, Renovate will output an error during creation of the Pull Request.</p>"},{"location":"modules/platform/bitbucket/","title":"Bitbucket Cloud","text":"<p>Most of the information on this page is meant for users who want to self-host Renovate on Bitbucket Cloud.</p>"},{"location":"modules/platform/bitbucket/#easiest-way-to-run-renovate","title":"Easiest way to run Renovate","text":"<p>For most users, the easiest way to get started is to install the Mend app for Bitbucket and use the free Renovate plan. When you use the app, Mend will:</p> <ul> <li>authenticate the app to Bitbucket Cloud</li> <li>keep the tokens safe</li> <li>maintain and update the Renovate version used</li> </ul> <p>If you self-host Renovate you must do the things listed above yourself. Self-hosting is meant for users with advanced use cases, or who want to be in full control of Renovate and the environment it runs in. We recommend most users install the Mend app.</p> <p>Read the Security and Permissions page to learn about the Security and Permissions needed for the Mend app.</p> <p>After you installed the hosted app, please read the reading list to learn how to use and configure Renovate.</p>"},{"location":"modules/platform/bitbucket/#authentication","title":"Authentication","text":"<p>First, create an API token for the Renovate account. Give the API token the following permission scopes:</p> Permission Scope <code>read:repository:bitbucket</code> Repository: Read <code>write:repository:bitbucket</code> Repository: Write <code>read:pullrequest:bitbucket</code> Pull requests: Read <code>write:pullrequest:bitbucket</code> Pull requests: Write <code>read:user:bitbucket</code> User: Read <code>read:workspace:bitbucket</code> Workspace: Read <p>Renovate also needs to validate the workspace membership status of pull-request reviewers, for that, create a new user group in the workspace with the Create repositories permission and add the Renovate user to it.</p> <p>Let Renovate use your API token by doing one of the following:</p> <ul> <li>Set your API token as a <code>password</code> in your <code>config.js</code> file</li> <li>Set your API token as an environment variable <code>RENOVATE_PASSWORD</code></li> <li>Set your API token when you run Renovate in the CLI with <code>--password=</code></li> </ul> <p>Remember to:</p> <ul> <li>Set the <code>username</code> for the Renovate account, which is your Atlassian account email. You can find your email through \"Personal Bitbucket settings\" on the \"Email aliases\" page for your account</li> <li>Set <code>platform=bitbucket</code> somewhere in your Renovate config file</li> </ul>"},{"location":"modules/platform/bitbucket/#unsupported-platform-featuresconcepts","title":"Unsupported platform features/concepts","text":"<ul> <li>Adding assignees to PRs not supported (does not seem to be a Bitbucket concept)</li> <li><code>automergeStrategy=rebase</code> not supported by Bitbucket Cloud, see Jira issue BCLOUD-16610</li> <li>Markdown support for collapsible syntax, see Jira issue BCLOUD-20231</li> <li>Issues are not supported, as Bitbucket Cloud removed its issue tracker on 2026-08-24.   This means features which rely on issues, like the Dependency Dashboard or informing you of warnings in your Renovate config, no longer work.</li> </ul>"},{"location":"modules/platform/bitbucket-server/","title":"Bitbucket Data Center and Server","text":""},{"location":"modules/platform/bitbucket-server/#authentication","title":"Authentication","text":"<p>First, create a HTTP access token for the Renovate account. Let Renovate use your HTTP access token by doing one of the following:</p> <ul> <li>Set your HTTP access token as a <code>token</code> in your <code>config.js</code> file</li> <li>Set your HTTP access token as an environment variable <code>RENOVATE_TOKEN</code></li> <li>Set your HTTP access token when you run Renovate in the CLI with <code>--token=</code></li> </ul> <p>If you use project or repository based HTTP access tokens, it can only be used as <code>token</code>.</p> <p>Remember to set <code>platform=bitbucket-server</code> somewhere in your Renovate config file.</p> <p>If you're not using <code>@renovate-bot</code> as username then set your custom <code>username</code> for the Renovate account.</p> <p>If you use MySQL or MariaDB you must set <code>unicodeEmoji</code> to <code>false</code> in the global self-hosted config (<code>RENOVATE_CONFIG_FILE</code>) to prevent issues with emojis.</p>"},{"location":"modules/platform/bitbucket-server/#unsupported-platform-featuresconcepts","title":"Unsupported platform features/concepts","text":"<ul> <li>Adding assignees to PRs not supported (does not seem to be a Bitbucket concept)</li> <li>Adding/removing labels (Bitbucket limitation)</li> </ul>"},{"location":"modules/platform/bitbucket-server/#features-awaiting-implementation","title":"Features awaiting implementation","text":"<ul> <li>Creating issues not implemented yet, used to alert users when there is a config error</li> <li>The <code>automergeStrategy</code> configuration option has not been implemented for this platform, and all values behave as if the value <code>auto</code> was used. Renovate will implicitly use the merge strategy configured as 'default' in the Bitbucket Server repository itself, and this cannot be overridden yet</li> </ul>"},{"location":"modules/platform/bitbucket-server/#testing","title":"Testing","text":"<p>If you want a test Bitbucket server locally rather than with your production server, Atlassian's Bitbucket Server Docker image is really convenient.</p> <p>In line with their instructions, the following commands bring up a new server:</p> <pre><code>docker volume create --name bitbucketVolume\ndocker run -v bitbucketVolume:/var/atlassian/application-data/bitbucket --name=\"bitbucket\" -d -p 7990:7990 -p 7999:7999 atlassian/bitbucket-server:8.9.6\n</code></pre> <p>Once it's running and initialized, the quickest way to testing with Renovate is:</p> <ol> <li>Create the admin user as prompted</li> <li>Create a new project and a repository for that project</li> <li>Make sure the repository has a package file in it for Renovate to find, e.g. <code>.nvmrc</code> or <code>package.json</code></li> <li>Create a dedicated Renovate user <code>@renovate-bot</code> and grant it write access to the project</li> <li>Note down the password for <code>@renovate-bot</code> and use it in the Renovate CLI</li> </ol> <p>At this point you should have a project ready for Renovate, and the <code>@renovate-bot</code> account ready to run on it. You can then run like this:</p> <pre><code>npx renovate --platform=bitbucket-server --endpoint=http://localhost:7990 --git-fs=http --username=renovate-bot --password=abc123456789! --log-level=debug --autodiscover=true\n</code></pre> <p>Alternatively using env:</p> <pre><code>export RENOVATE_PLATFORM=bitbucket-server\nexport RENOVATE_ENDPOINT=http://localhost:7990\nexport RENOVATE_GIT_FS=http\nexport RENOVATE_USERNAME=renovate-bot\nexport RENOVATE_PASSWORD=abc123456789!\nexport LOG_LEVEL=debug\nnpx renovate --autodiscover=true\n</code></pre> <p>You should then get a \"Configure Renovate\" onboarding PR in any projects that <code>@renovate-bot</code> has been invited to.</p>"},{"location":"modules/platform/bitbucket-server/#supported-versions","title":"Supported versions","text":"<p>We support all Bitbucket Server versions which are not EOL. See Atlassian Support End of Life Policy for up-to-date versions.</p>"},{"location":"modules/platform/codecommit/","title":"AWS CodeCommit","text":"<p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>No new features for the Codecommit platform</p> <p>In July 2024, Amazon deprecated the CodeCommit platform. In November 2025, Amazon re-instated support for CodeCommit. Since July 2024, CodeCommit is in a \"feature freeze\", and Amazon re-instating support for CodeCommit as of November 2025 does not currently change that. The Renovate maintainers have decided that we will not add any new features unless a company is willing to contribute feature(s) for CodeCommit and maintain them. For more details see Discussion 39741.</p>"},{"location":"modules/platform/codecommit/#authentication","title":"Authentication","text":""},{"location":"modules/platform/codecommit/#iam-role","title":"IAM Role","text":""},{"location":"modules/platform/codecommit/#machine-pre-requisites","title":"Machine pre-requisites","text":"<ol> <li>Install the <code>aws-cli</code> program on the machine.</li> <li>Set up the environment with the <code>git-credentials-helper</code>:<ul> <li>For EC2 or Linux: EC2 codecommit git integration.</li> <li>For Windows: windows codecommit git integration.</li> </ul> </li> <li>Set the environment variable <code>AWS_REGION</code>.</li> </ol>"},{"location":"modules/platform/codecommit/#codebuild-configuration","title":"Codebuild Configuration","text":"Add git-credential helper to your buildspec.yml file<pre><code>env: git-credential-helper:yes\n</code></pre>"},{"location":"modules/platform/codecommit/#iam-user","title":"IAM User","text":"<p>First, you must get an AWS IAM Access Key id and a Secret access key id. After that, let Renovate use the AWS CodeCommit authentication keys, by picking one of these methods:</p> <ul> <li>Create a Renovate config file (<code>config.js</code>)</li> <li>Set the environment with all required AWS environment variables</li> <li>Set AWS credentials with CLI parameters</li> </ul>"},{"location":"modules/platform/codecommit/#method-1-create-a-renovate-config-file-configjs","title":"Method 1: Create a Renovate config file (<code>config.js</code>)","text":"<pre><code>username: AWS IAM access key id\npassword: AWS Secret access key\nendpoint: the URL endpoint e.g https://git-codecommit.us-east-1.amazonaws.com/\ntoken: AWS session token, if you have one\n</code></pre>"},{"location":"modules/platform/codecommit/#method-2-set-the-environment-with-all-required-aws-environment-variables","title":"Method 2: Set the environment with all required AWS environment variables","text":"<pre><code>AWS_ACCESS_KEY_ID: AWS IAM access key id\nAWS_SECRET_ACCESS_KEY: AWS Secret access key\nAWS_REGION: the AWS region e.g us-east-1\nAWS_SESSION_TOKEN: AWS session token, if you have one\n</code></pre>"},{"location":"modules/platform/codecommit/#method-3-set-aws-credentials-with-cli-parameters","title":"Method 3: Set AWS credentials with CLI parameters","text":"<pre><code>--username: AWS IAM access key id\n--password: AWS Secret access key\n--endpoint: the URL endpoint for example https://git-codecommit.us-east-1.amazonaws.com/\n--token: AWS session token, if you have one\n</code></pre>"},{"location":"modules/platform/codecommit/#permissions","title":"Permissions","text":"<p>Create a new AWS policy for Renovate with these permissions, then attach it to the user/role.</p> <p>Change the <code>Resource</code> value to the resources you want to use:</p> Example policy JSON file<pre><code>{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"RenovatePolicy\",\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"codecommit:DeleteCommentContent\",\n        \"codecommit:UpdatePullRequestDescription\",\n        \"codecommit:GitPull\",\n        \"codecommit:ListPullRequests\",\n        \"codecommit:GetCommentsForPullRequest\",\n        \"codecommit:ListRepositories\",\n        \"codecommit:UpdatePullRequestTitle\",\n        \"codecommit:GetFile\",\n        \"codecommit:UpdateComment\",\n        \"codecommit:GetRepository\",\n        \"codecommit:CreatePullRequest\",\n        \"codecommit:CreatePullRequestApprovalRule\",\n        \"codecommit:GitPush\",\n        \"codecommit:UpdatePullRequestStatus\",\n        \"codecommit:GetPullRequest\"\n      ],\n      \"Resource\": \"*\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/platform/codecommit/#running-renovate","title":"Running Renovate","text":"<p>Once you have followed method 1, 2 or 3, and have set up the permissions, you're ready to configure Renovate:</p> <ul> <li>Set <code>platform: 'codecommit'</code></li> <li>Set <code>repositories: ['{repository, names, separated, by, comma}']</code>, or use Renovate\u2019s <code>autodiscover</code> feature</li> </ul> <p>You're ready to run Renovate now, and it will process your repositories.</p>"},{"location":"modules/platform/codecommit/#unsupported-platform-featuresconcepts","title":"Unsupported platform features/concepts","text":"<p>These Renovate features are not supported on Codecommit:</p> <ul> <li>Adding assignees to PRs</li> <li>Automerge</li> <li><code>rebaseLabel</code> (request a rebase for Renovate)</li> </ul>"},{"location":"modules/platform/codecommit/#recommendations","title":"Recommendations","text":"<p>Limit the number of open Renovate PRs by setting a <code>prConcurrentLimit</code>.</p> <p>If you close a PR but don\u2019t want Renovate to recreate the PR later, then use package rules with the <code>\"enabled\": false</code> key. This workaround is needed due to platform limitations.</p>"},{"location":"modules/platform/codecommit/#example-configuration","title":"Example configuration","text":"Example config.js file<pre><code>module.exports = {\n  endpoint: 'https://git-codecommit.us-east-1.amazonaws.com/',\n  platform: 'codecommit',\n  repositories: ['abc/def', 'abc/ghi'],\n  username: 'ACCESS_KEY_ID_GOES_HERE',\n  password: 'SECRET_ACCESS_KEY_GOES_HERE',\n  token: 'AWS_SESSION_TOKEN_GOES_HERE',\n  gitAuthor: 'your_email@domain',\n  packageRules: [\n    {\n      matchPackageNames: ['package_name', 'package_name2'],\n      enabled: false,\n    },\n  ],\n};\n</code></pre>"},{"location":"modules/platform/codecommit/#codebuild-examples","title":"CodeBuild examples","text":"<p>Create a repository with a <code>buildspec.yml</code> file in it. This repository will be your BuildProject job repository to run Renovate on your repositories.</p>"},{"location":"modules/platform/codecommit/#renovate-docker-buildspecyml","title":"Renovate Docker <code>buildspec.yml</code>","text":"Example buildspec.yml file<pre><code>version: 0.2\nenv:\n  shell: bash\n  git-credential-helper: yes\n  variables:\n    RENOVATE_PLATFORM: 'codecommit'\n    RENOVATE_REPOSITORIES: '[\"repoName1\", \"repoName2\"]'\n    RENOVATE_CONFIG: '{\"extends\":[\"config:recommended\"]}'\n    LOG_LEVEL: 'debug'\n    AWS_REGION: 'us-east-1'\nphases:\n  build:\n    on-failure: CONTINUE\n    commands:\n      - docker run --rm -e AWS_REGION -e RENOVATE_CONFIG -e RENOVATE_PLATFORM -e RENOVATE_REPOSITORIES -e LOG_LEVEL renovate/renovate\n</code></pre>"},{"location":"modules/platform/codecommit/#renovate-cli-buildspecyml","title":"Renovate CLI <code>buildspec.yml</code>","text":"Example buildspec.yml file<pre><code>version: 0.2\nenv:\n  shell: bash\n  git-credential-helper: yes\n  variables:\n    RENOVATE_PLATFORM: 'codecommit'\n    RENOVATE_REPOSITORIES: '[\"repoName1\", \"repoName2\"]'\n    RENOVATE_CONFIG: '{\"extends\":[\"config:recommended\"]}'\n    LOG_LEVEL: 'debug'\n    AWS_REGION: 'us-east-1'\nphases:\n  build:\n    on-failure: CONTINUE\n    commands:\n      - npm install -g renovate\n      - renovate\n</code></pre>"},{"location":"modules/platform/codecommit/#notes","title":"Notes","text":"<p>To keep BuildProject processing times reasonable, we recommend that you install Renovate on the BuildProject Renovate job repository. This also avoids running the <code>npm install</code> command.</p> <p>You can add the <code>config.js</code> global config to the repository.</p> <p>You can add the BuildProject repository to the <code>RENOVATE_REPOSITORIES</code> variable and get updates on new Renovate versions.</p>"},{"location":"modules/platform/forgejo/","title":"Forgejo","text":"<p>Renovate supports Forgejo.</p>"},{"location":"modules/platform/forgejo/#authentication","title":"Authentication","text":"<p>First, create a Personal Access Token (PAT) for the Renovate account. The Renovate account should have full name and email address configured. Then let Renovate use your PAT by doing one of the following:</p> <ul> <li>Set your PAT as a <code>token</code> in your <code>config.js</code> file</li> <li>Set your PAT as an environment variable <code>RENOVATE_TOKEN</code></li> <li>Set your PAT when you run Renovate in the CLI with <code>--token=</code></li> </ul> <p>You must set <code>platform=forgejo</code> in your Renovate config file.</p> <p>The PAT should have these permissions:</p> Scope Permission Valid for Forgejo versions Notes <code>repo</code> <code>Read and Write</code> all <code>user</code> <code>Read</code> all <code>issue</code> <code>Read and Write</code> <code>&gt;= 1.20.0</code> <code>organization</code> <code>Read</code> <code>&gt;= 1.20.0</code> Required to read org labels and teams <code>email</code> <code>Read</code> <code>&lt;= 1.19.3</code> <code>misc</code> <code>Read</code> Only for <code>1.20.0</code> and <code>1.20.1</code> <p>If you use Forgejo packages, add the <code>read:packages</code> scope.</p>"},{"location":"modules/platform/forgejo/#unsupported-platform-featuresconcepts","title":"Unsupported platform features/concepts","text":"<ul> <li><code>platformAutomerge</code> (<code>true</code> by default) for platform-native automerge not supported: Forgejo versions older than v10.0.0 don't support required branch autodelete for automerge.</li> </ul>"},{"location":"modules/platform/forgejo/#features-awaiting-implementation","title":"Features awaiting implementation","text":"<ul> <li>none</li> </ul>"},{"location":"modules/platform/forgejo/#repo-autodiscover","title":"Repo autodiscover","text":"<p>Renovate can discover repositories on Forgejo using the <code>autodiscover</code> feature. Repositories are ignored when one of the following conditions is met:</p> <ul> <li>The repository is a <code>mirror</code></li> <li>We do not have push or pull permissions to that repository</li> <li>Pull requests are disabled for that repository</li> </ul> <p>You can change the default server-side sort method and order for autodiscover API. Set those via <code>autodiscoverRepoSort</code> and <code>autodiscoverRepoOrder</code>. Read the Forgejo swagger docs for more details.</p>"},{"location":"modules/platform/forgejo/#merge-style","title":"Merge style","text":"<p>Renovate uses the repository's default merge style if allowed; if the default merge style is not an allowed merge style, renovate falls back to an allowed merge style as per an order chosen to minimize commits. If no merge style is allowed, the repository is blocked.</p>"},{"location":"modules/platform/gerrit/","title":"Gerrit","text":"<p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p>"},{"location":"modules/platform/gerrit/#supported-gerrit-versions","title":"Supported Gerrit versions","text":"<p>Renovate supports all Gerrit 3.x versions.</p> <p>Support for Gerrit is currently experimental, meaning that it might still have some undiscovered bugs or design limitations, and that we might need to change functionality in a non-backwards compatible manner in a non-major release.</p> <p>Renovate stores its metadata in the commit message footer.</p>"},{"location":"modules/platform/gerrit/#authentication","title":"Authentication","text":"First, create a HTTP access token for the Renovate account. <p>Let Renovate use your HTTP access token by doing one of the following:</p> <ul> <li>Set your HTTP access token as a <code>password</code> in your <code>config.js</code> file, or</li> <li>Set your HTTP access token as an environment variable <code>RENOVATE_PASSWORD</code>, or</li> <li>Set your HTTP access token when you run Renovate in the CLI with <code>--password=</code></li> </ul> <p>The Gerrit user account must be allowed to assign the Code-Review label with \"+2\" to their own changes for \"automerge\" to work.</p> <p>You must set <code>platform=gerrit</code> in your Renovate config file.</p>"},{"location":"modules/platform/gerrit/#renovate-prbranch-model-with-gerrit-and-needed-permissions","title":"Renovate PR/Branch-Model with Gerrit and needed permissions","text":"<p>If you use the \"Code-Review\" label and want to get <code>automerge</code> working then you must set <code>autoApprove=true</code> in your Renovate config. Renovate will now add the Code-Review label with the value \"+2\" to each of its \"pull requests\" (Gerrit-Change).</p> <p>Note</p> <p>The Renovate user account must have permission to give +2 for the Code-Review label.</p> <p>The Renovate option <code>automergeType: \"branch\"</code> makes no sense for Gerrit, because there are no branches used to create pull requests. It works similar to the default option <code>\"pr\"</code>.</p>"},{"location":"modules/platform/gerrit/#optional-features","title":"Optional features","text":"<p>You can use the <code>statusCheckNames</code> configuration to map any of the available branch checks (like <code>minimumReleaseAge</code>, <code>mergeConfidence</code>, and so on) to a Gerrit label.</p> <p>For example, if you want to use the Merge Confidence feature and map the result of the Merge Confidence check to your Gerrit label \"Renovate-Merge-Confidence\" you can configure:</p> <pre><code>{\n  \"statusCheckNames\": {\n    \"mergeConfidence\": \"Renovate-Merge-Confidence\"\n  }\n}\n</code></pre> <p>Also, labels in <code>renovate.json</code> will be mapped to hashtags in Gerrit. Example:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDepTypes\": [\"devDependencies\"],\n      \"labels\": [\"renovate:devDependencies\"]\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/platform/gerrit/#server-version-dependent-features","title":"Server version dependent features","text":"<p>We use the Gerrit Get Version REST API to fetch the server version. You can use the experimental feature flag <code>RENOVATE_X_PLATFORM_VERSION</code> to set a specific server version. By setting the server version yourself, you save an API call that fetches the server version.</p> <ul> <li>Use <code>hasfooter:Renovate-Branch</code> search operator instead of <code>message:\"Renovate-Branch: \"</code> for finding changes on Gerrit <code>v3.6.0</code> or later</li> <li>Use <code>subject:</code> search operator instead of <code>message:</code> for PR title search on Gerrit <code>v3.8.0</code> or later.</li> </ul>"},{"location":"modules/platform/gerrit/#unsupported-platform-featuresconcepts","title":"Unsupported platform features/concepts","text":"<ul> <li>Creating issues (not a Gerrit concept)</li> <li>Dependency Dashboard (needs issues first)</li> </ul>"},{"location":"modules/platform/gitea/","title":"Gitea","text":"<p>Renovate supports Gitea.</p> <p>Note</p> <p>Use <code>forgejo</code> as the platform if you are using Forgejo. Forgejo support will be removed from <code>gitea</code> platform in a future release.</p>"},{"location":"modules/platform/gitea/#authentication","title":"Authentication","text":"<p>First, create a Personal Access Token (PAT) for the Renovate account. The Renovate account should have full name and email address configured. Then let Renovate use your PAT by doing one of the following:</p> <ul> <li>Set your PAT as a <code>token</code> in your <code>config.js</code> file</li> <li>Set your PAT as an environment variable <code>RENOVATE_TOKEN</code></li> <li>Set your PAT when you run Renovate in the CLI with <code>--token=</code></li> </ul> <p>You must set <code>platform=gitea</code> in your Renovate config file.</p> <p>The PAT should have these permissions:</p> Scope Permission Valid for Gitea versions Notes <code>repo</code> <code>Read and Write</code> all <code>user</code> <code>Read</code> all <code>issue</code> <code>Read and Write</code> <code>&gt;= 1.20.0</code> <code>organization</code> <code>Read</code> <code>&gt;= 1.20.0</code> Required to read org labels and teams <code>email</code> <code>Read</code> <code>&lt;= 1.19.3</code> <code>misc</code> <code>Read</code> Only for <code>1.20.0</code> and <code>1.20.1</code> <p>If you use Gitea packages, add the <code>read:packages</code> scope.</p>"},{"location":"modules/platform/gitea/#unsupported-platform-featuresconcepts","title":"Unsupported platform features/concepts","text":"<ul> <li>Adding reviewers to PRs not supported: Gitea versions older than <code>v1.14.0</code> do not have the required API.</li> <li><code>platformAutomerge</code> (<code>true</code> by default) for platform-native automerge not supported: Gitea versions older than v1.24.0 don't support required branch autodelete for automerge.</li> <li>Git upload filters: If you're using a Gitea version older than <code>v1.16.0</code> then you must enable clone filters.</li> </ul>"},{"location":"modules/platform/gitea/#features-awaiting-implementation","title":"Features awaiting implementation","text":"<ul> <li>none</li> </ul>"},{"location":"modules/platform/gitea/#repo-autodiscover","title":"Repo autodiscover","text":"<p>Renovate can discover repositories on Gitea using the <code>autodiscover</code> feature. Repositories are ignored when one of the following conditions is met:</p> <ul> <li>The repository is a <code>mirror</code></li> <li>We do not have push or pull permissions to that repository</li> <li>Pull requests are disabled for that repository</li> </ul> <p>You can change the default server-side sort method and order for autodiscover API. Set those via <code>autodiscoverRepoSort</code> and <code>autodiscoverRepoOrder</code>. Read the Gitea swagger docs for more details.</p>"},{"location":"modules/platform/gitea/#merge-style","title":"Merge style","text":"<p>Renovate uses the repository's default merge style if allowed; if the default merge style is not an allowed merge style, renovate falls back to an allowed merge style as per an order chosen to minimize commits. If no merge style is allowed, the repository is blocked.</p>"},{"location":"modules/platform/github/","title":"GitHub and GitHub Enterprise Server","text":"<p>Most of the information on this page is meant for users who want to self-host Renovate on GitHub or GitHub Enterprise Server.</p>"},{"location":"modules/platform/github/#easiest-way-to-run-renovate","title":"Easiest way to run Renovate","text":"<p>For users on GitHub Cloud (<code>github.com</code>), the easiest way to get started is to install the Mend Renovate app from the GitHub marketplace. When you use the app, Mend will:</p> <ul> <li>authenticate the Renovate app to GitHub</li> <li>keep the tokens safe</li> <li>maintain and update the Renovate version used</li> </ul> <p>If you self-host Renovate you must do the things listed above yourself. Self-hosting is meant for users with advanced use cases, or who want to be in full control of Renovate and the environment it runs in. We recommend most users install the Mend Renovate app.</p> <p>Read the Security and Permissions page to learn about the Security and Permissions needed for the Mend Renovate app.</p> <p>After you installed the hosted app, please read the reading list to learn how to use and configure Renovate.</p>"},{"location":"modules/platform/github/#authentication","title":"Authentication","text":"<p>First, create a fine-grained or a classic PAT. The PAT must have the <code>repo</code> scope. If you want Renovate to also update your GitHub Action files, you must grant the <code>workflow</code> scope.</p> <p>Read the GitHub Docs, about Personal Access Tokens to learn more about PATs.</p> <p>Let Renovate use your PAT by doing one of the following:</p> <ul> <li>Set your PAT as a <code>token</code> in your <code>config.js</code> file</li> <li>Set your PAT as an environment variable <code>RENOVATE_TOKEN</code></li> <li>Set your PAT when you run Renovate in the CLI with <code>--token=</code></li> </ul> <p>Remember to set <code>platform=github</code> somewhere in your Renovate config file.</p> <p>If you use GitHub Enterprise Server then <code>endpoint</code> must point to <code>https://github-enterprise.example.com/api/v3/</code>. You can choose where you want to set <code>endpoint</code>:</p> <ul> <li>In your <code>config.js</code> file</li> <li>In a environment variable</li> <li>In a CLI parameter</li> </ul> <p>Labels and forking mode</p> <p>If you're self-hosting Renovate on GitHub.com with GitHub Actions in forking mode, and want Renovate to apply labels then you must give the PAT <code>triage</code> level rights on <code>issues</code>. The <code>triage</code> level allows the PAT to apply/dismiss existing labels.</p>"},{"location":"modules/platform/github/#running-using-a-fine-grained-token","title":"Running using a fine-grained token","text":""},{"location":"modules/platform/github/#permissions","title":"Permissions","text":"<p>A fine-grained token must have these permissions:</p> Permission Access Level <code>Members</code> <code>Read-only</code> Organization <code>Commit statuses</code> <code>Read and write</code> Repository or Organization <code>Contents</code> <code>Read and write</code> Repository or Organization <code>Dependabot alerts</code> <code>Read-only</code> Repository or Organization <code>Issues</code> <code>Read and write</code> Repository or Organization <code>Pull requests</code> <code>Read and write</code> Repository or Organization <code>Workflows</code> <code>Read and write</code> Repository or Organization <p>Use a dedicated role account</p> <p>Consider creating a GitHub App to use instead of using your own GitHub user account.</p>"},{"location":"modules/platform/github/#running-as-a-github-app","title":"Running as a GitHub App","text":"<p>Instead of a dedicated account with a Personal Access Token you can run <code>renovate</code> as a self-hosted GitHub App.</p> <p>When creating the GitHub App give it the following permissions:</p> <p>Repository permissions</p> Permission Access Administration <code>read</code> Checks <code>read</code> + <code>write</code> Commit statuses <code>read</code> + <code>write</code> Contents <code>read</code> + <code>write</code> Dependabot alerts <code>read</code> Issues <code>read</code> + <code>write</code> Merge queues <code>read</code> + <code>write</code> Metadata <code>read</code> Pull requests <code>read</code> + <code>write</code> Workflows <code>read</code> + <code>write</code> <p>The <code>Merge queues</code> permission is needed to enqueue pull requests when the repository uses a merge queue.</p> <p>Organization permissions</p> Permission Access Members <code>read</code> <p>Other values like Homepage URL, User authorization callback URL and webhooks can be disabled or filled with dummy values.</p> <p>Inside your <code>config.js</code> you need to set the following values, assuming the name of your app is <code>self-hosted-renovate</code>:</p> <p><code>token:\"ghs_123exampletoken\"</code></p> <p>You must use a GitHub App Installation token.</p> <p>Previously, the token had to be prefixed with <code>x-access-token:</code>. We recommend you replace any prefixed tokens with normal tokens. We will drop support for prefixed tokens in the future.</p> <p>Any tokens that do not start with <code>ghs_</code> (for example tokens from GitHub Enterprise Server versions before version <code>3.2</code>) must be prefixed with <code>x-access-token:</code>.</p> <p>Note</p> <p>The installation tokens expire after 1 hour and need to be regenerated regularly. Alternatively as environment variable <code>RENOVATE_TOKEN</code>, or via CLI <code>--token=</code>.</p> <p>Third-party tools to regenerate installation tokens</p> <p>If you're self-hosting Renovate within a GitHub Actions workflow, then you can use the <code>actions/create-github-app-token</code> action. If you use Node.js/CLI, then you can use the <code>github-app-installation-token</code> package. If you use Docker, then you can use the <code>mshekow/github-app-installation-token</code> image.</p> <p><code>repositories: [\"orgname/repo-1\",\"orgname/repo-2\"]</code></p> <p>List of repositories to run on. Alternatively as comma-separated environment variable <code>RENOVATE_REPOSITORIES</code>. The GitHub App installation token is scoped at most to a single organization and running on multiple organizations requires multiple invocations of <code>renovate</code> with different <code>token</code> and <code>repositories</code> parameters.</p> <p><code>username:\"self-hosted-renovate[bot]\"</code> (optional, autodetected if not supplied)</p> <p>The slug name of your app with <code>[bot]</code> appended</p> <p><code>gitAuthor:\"Self-hosted Renovate &lt;123456+self-hosted-renovate[bot]@users.noreply.github.enterprise.com&gt;\"</code> (optional, autodetected if not supplied)</p> <p>The GitHub App associated email to match commits to Renovate. It needs to have the user id and the username followed by the <code>users.noreply.</code>-domain of either github.com or the GitHub Enterprise Server. A way to get the user id of a GitHub app is to query the user API at <code>api.github.com/users/self-hosted-renovate[bot]</code> (github.com) or <code>github.enterprise.com/api/v3/users/self-hosted-renovate[bot]</code> (GitHub Enterprise Server).</p>"},{"location":"modules/platform/github/#package-registry-credentials","title":"Package Registry Credentials","text":"<p>When Renovate runs against repositories on <code>github.com</code>, and the environment variable <code>RENOVATE_X_GITHUB_HOST_RULES</code> is set, then Renovate automatically provisions <code>hostRules</code> for these GitHub Packages registries using the platform token:</p> <ul> <li><code>ghcr.io</code></li> <li><code>maven.pkg.github.com</code></li> <li><code>npm.pkg.github.com</code></li> <li><code>nuget.pkg.github.com</code></li> <li><code>rubygems.pkg.github.com</code></li> </ul> <p>Warning</p> <p>We reverted the Package Registry Credentials feature to experimental mode, because users reported it's not working correctly with app tokens.</p>"},{"location":"modules/platform/gitlab/","title":"GitLab","text":""},{"location":"modules/platform/gitlab/#easiest-way-to-run-renovate","title":"Easiest way to run Renovate","text":"<p>For users on GitLab.com, the easiest way to get started is to install the Mend-hosted Renovate app by following these instructions when logging into the Mend Developer Platform. When you use the app, Mend will:</p> <ul> <li>authenticate Renovate to GitLab.com</li> <li>keep the tokens safe</li> <li>maintain and update the Renovate version used</li> </ul> <p>If you self-host Renovate you must do the things listed above yourself. Self-hosting is meant for users with advanced use cases, or who want to be in full control of the bot and the environment it runs in. We recommend most users install the Mend-hosted app.</p> <p>Read the GitLab security page to learn about the security model for both the Mend-hosted app and self-hosted deployments.</p> <p>After you installed the hosted app, please read the reading list to learn how to use and configure Renovate.</p>"},{"location":"modules/platform/gitlab/#authentication","title":"Authentication","text":"<p>You can authenticate Renovate to GitLab, with one of these methods:</p> <ul> <li>Personal Access Token</li> <li>Project Access Token</li> <li>Group Access Token</li> </ul>"},{"location":"modules/platform/gitlab/#three-ways-to-authenticate-choose-one","title":"Three ways to authenticate, choose one","text":"<p>To start, create either:</p> <ul> <li>a Personal Access Token for the Renovate account</li> <li>or a Project Access Token if Renovate only needs to check and update one project. We do not recommend Project Access Tokens, as you need to configure Renovate, and the token, for each project</li> <li>or a Group Access Token to the group Renovate will be working on</li> </ul>"},{"location":"modules/platform/gitlab/#renovate-account-or-token-must-have-at-least-developer-role","title":"Renovate account or token must have at least developer role","text":"<p>The Renovate account, or token, must have at least the Developer role. The developer role allows Renovate to create issues and merge requests.</p>"},{"location":"modules/platform/gitlab/#if-you-want-renovate-to-automerge-give-appropriate-permissions","title":"If you want Renovate to automerge, give appropriate permissions","text":"<p>If you are using automerge, the Renovate account, or token, must have the appropriate \"Allowed to merge\" permission on the protected branch of your projects.</p>"},{"location":"modules/platform/gitlab/#if-only-maintainers-are-allowed-to-merge-give-maintainer-role","title":"If only maintainers are allowed to merge, give Maintainer role","text":"<p>If merging is restricted to Maintainers, the Renovate account or token must have the Maintainer role.</p>"},{"location":"modules/platform/gitlab/#setting-up-project-access-tokens-or-group-access-tokens","title":"Setting up Project Access Tokens or Group Access Tokens","text":"<p>If you are using a project access token, or a group access token, GitLab creates an internal bot user for you. This bot user is the one that will be used to create merge requests and issues.</p> <p>Use the name and email of this bot user to configure Renovate when verifing users using push rules. For group access tokens, an expiration date is required, unlike project access tokens where it is optional.</p> <p>To keep using the same GitLab-generated bot account you must rotate/refresh the Group Access Token before the token's expiry date.</p> <p>We refer to personal access tokens, project access tokens and group access tokens as access tokens in the instructions that follow.</p>"},{"location":"modules/platform/gitlab/#permissions-for-access-tokens-on-real-runs","title":"Permissions for access tokens on real runs","text":"<p>For real runs, give the access token these scopes:</p> <ul> <li><code>api</code></li> </ul>"},{"location":"modules/platform/gitlab/#permissions-for-access-tokens-on-dry-runs","title":"Permissions for access tokens on dry runs","text":"<p>For dry runs, give the access token these scopes:</p> <ul> <li><code>read_api</code></li> </ul>"},{"location":"modules/platform/gitlab/#letting-renovate-use-your-access-token","title":"Letting Renovate use your access token","text":"<p>Let Renovate use your access token by doing one of the following:</p> <ul> <li>Set your access token as a <code>token</code> in your <code>config.js</code> file</li> <li>Set your access token as an environment variable <code>RENOVATE_TOKEN</code></li> <li>Set your access token when you run Renovate in the CLI with <code>--token=</code></li> </ul>"},{"location":"modules/platform/gitlab/#set-platformgitlab-in-your-renovate-config-file","title":"Set <code>platform=gitlab</code> in your Renovate config file","text":"<p>Remember to set <code>platform=gitlab</code> somewhere in your Renovate config file.</p>"},{"location":"modules/platform/gitlab/#setting-up-renovate-for-a-private-gitlab-container-registry","title":"Setting up Renovate for a Private Gitlab container registry","text":"<p>If you use a private GitLab container registry, you must:</p> <ul> <li> <p>Set the <code>RENOVATE_HOST_RULES</code> CI variable to <code>[{\"matchHost\": \"${CI_REGISTRY}\",\"username\": \"${GITLAB_USER_NAME}\",\"password\": \"${RENOVATE_TOKEN}\", \"hostType\": \"docker\"}]</code>.</p> <p>Alternatively, if <code>detectHostRulesFromEnv</code> is enabled, you can set the CI variables <code>DOCKER_REGISTRY_GITLAB_COM_USERNAME=${GITLAB_USER_NAME}</code> and <code>DOCKER_REGISTRY_GITLAB_COM_PASSWORD=${RENOVATE_TOKEN}</code>.</p> </li> <li> <p>Make sure the user that owns the access token is a member of the corresponding GitLab projects/groups with the right permissions.</p> </li> <li>Make sure the access token has the <code>read_registry</code> scope.</li> </ul> <p>You may also use a dedicated Deploy Token instead of using <code>RENOVATE_TOKEN</code> as the password in the above host rule example.</p>"},{"location":"modules/platform/gitlab/#get-colored-output","title":"Get colored output","text":"<p>You may want to set <code>FORCE_COLOR: 3</code> to the job, in order to get colored output. GitLab Runner runs the container\u2019s shell in non-interactive mode, so the shell\u2019s <code>TERM</code> environment variable is set to <code>dumb</code>.</p>"},{"location":"modules/platform/gitlab/#features-awaiting-implementation","title":"Features awaiting implementation","text":"<ul> <li>The <code>automergeStrategy</code> configuration option has not been implemented for this platform, and all values behave as if the value <code>auto</code> was used. Renovate will accept the Merge Request without further configuration, and respect the strategy defined in the Merge Request, and this cannot be overridden yet</li> </ul>"},{"location":"modules/platform/gitlab/#server-version-dependent-features","title":"Server version dependent features","text":"<p>We use the GitLab version API to fetch the server version. You can use the experimental feature flag <code>RENOVATE_X_PLATFORM_VERSION</code> to set a specific server version. By setting the server version yourself, you save a API call that fetches the server version.</p> <ul> <li>Use <code>Draft:</code> MR prefix instead of <code>WIP:</code> prefix since <code>v13.2.0</code></li> <li>Do not truncate Markdown body to 25K chars since <code>v13.4.0</code></li> <li>Allow configure reviewers since <code>v13.9.0</code></li> <li>Add automerged MRs to merge trains since <code>v17.11.0</code> (when merge trains are enabled on the project)</li> <li>With <code>platformAutomerge=false</code>, Renovate adds MRs to the merge train itself once all checks have passed, see GitLab Merge Trains</li> </ul>"},{"location":"modules/platform/gitlab/#multiple-merge-request-assignees","title":"Multiple merge request assignees","text":"<p>Multiple assignees are only available on GitLab Premium and Ultimate tiers. Because of a safeguard in GitLab's API if multiple assignees are set, but not available to the project, only the first assignee will be applied.</p>"},{"location":"modules/platform/gitlab/#verifying-users-using-push-rules","title":"Verifying users using push rules","text":"<p>When verifying users using push rules, you must use the name and email of the bot user for <code>gitAuthor</code>.</p>"},{"location":"modules/platform/gitlab/#repo-autodiscover","title":"Repo autodiscover","text":"<p>Renovate can discover repositories on GitLab using the <code>autodiscover</code> feature.</p> <p>You can change the default server-side sort method and order for autodiscover API. Set those via <code>autodiscoverRepoSort</code> and <code>autodiscoverRepoOrder</code>. Read the GitLab Projects API docs for more details.</p>"},{"location":"modules/platform/local/","title":"Local","text":"<p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>With the \"local\" platform you can perform dry runs of Renovate against the local file system. This can be handy when testing a new Renovate configuration for example.</p>"},{"location":"modules/platform/local/#usage","title":"Usage","text":"<p>Run the <code>renovate --platform=local</code> command in the directory you want Renovate to run in. In this mode, Renovate defaults to <code>dryRun=lookup</code>. You can override this by passing <code>--dry-run=extract</code> to stop after the extract phase. Other <code>dryRun</code> values (such as <code>full</code>) are not supported on the local platform and fall back to <code>lookup</code>.</p> <p>Avoid giving \"repositories\" arguments, as this command can only run in a single directory, and it can only run in the current working directory.</p> <p>You may run the command above on \"plain\" directories, or \"Git directories\". You don't need to provide any config, as the command will run with or without \"repo config\".</p> <p>The command doesn't do any \"compare\" - or before and after analysis - if you want to test a new config then you must manually compare.</p>"},{"location":"modules/platform/local/#limitations","title":"Limitations","text":"<ul> <li><code>local&gt;</code> presets can't be resolved. Normally these would point to the local platform such as GitHub, but in the case of running locally, it does not exist</li> <li><code>baseBranchPatterns</code> are ignored</li> <li>Branch creation is not supported</li> </ul>"},{"location":"modules/platform/scm-manager/","title":"SCM-Manager","text":"<p>This feature is flagged as experimental</p> <p>Experimental features might be changed or even removed at any time.</p> <p>Renovate supports the SCM-Manager platform. This platform is considered experimental.</p>"},{"location":"modules/platform/scm-manager/#authentication","title":"Authentication","text":"<ol> <li>Create an API Key for your technical Renovate user in SCM-Manager</li> <li>The technical user must have a valid name and email address</li> <li>Put the API key in the <code>RENOVATE_TOKEN</code> environment variable, so that Renovate can use it</li> </ol>"},{"location":"modules/platform/scm-manager/#set-correct-platform","title":"Set correct platform","text":"<p>You must set the <code>platform</code> config option to <code>scm-manager</code> in your admin config file.</p>"},{"location":"modules/platform/scm-manager/#set-permissions","title":"Set permissions","text":"<p>The technical user must have the permissions to:</p> <ol> <li>read the repository</li> <li>pull/checkout the repository</li> <li>push/commit the repository</li> <li>create pull requests for the repository</li> </ol> <p>Those permissions can be granted on a repository level within the permission settings of each repository.</p>"},{"location":"modules/platform/scm-manager/#install-review-plugin","title":"Install Review Plugin","text":"<p>To let Renovate access the Pull Request API, you must install the Review Plugin with at least version 3.11.0. Find the list of available plugins by going to Administration \u2192 Plugins \u2192 Available.</p>"},{"location":"modules/platform/scm-manager/#supported-versions-of-scm-manager","title":"Supported versions of SCM-Manager","text":"<p>Renovate supports SCM-Manager major version <code>3.x</code>. The minimum version for the <code>3.x</code> range is <code>3.10.0</code>.</p>"},{"location":"modules/platform/scm-manager/#automerge","title":"Automerge","text":"<p>Currently, the Renovate automerge feature is not supported by the SCM-Manager platform. Every pull request requires merging them manually for now.</p>"},{"location":"modules/versioning/","title":"Versioning","text":"<p>Versioning is one of Renovate's core \"module\" types. The other modules are Platform, Manager and Datasource. Renovate uses the version module to answer questions such as:</p> <ul> <li>Is this a valid version string?</li> <li>Is this a valid constraint/range?</li> <li>Does this version match with this constraint?</li> <li>If the current constraint is X, what would the new constraint be if we updated to version Y?</li> <li>Is this a <code>major</code>, <code>minor</code> or <code>patch</code> update?</li> <li>Is this a breaking change?</li> </ul> <p>How Renovate uses its core modules during a run:</p> <ol> <li>Renovate's Manager module extracts the dependencies</li> <li>Renovate's Datasource finds the versions of the dependencies</li> <li>Renovate's Versioning scheme sorts and filters the results</li> </ol> <p>The \"versioning\" chosen can be different per package manager, because different package managers use different versioning schemes. For example, <code>npm</code> uses <code>1.0.0-beta.1</code> while <code>pip</code> uses <code>1.0.0b1</code>.</p>"},{"location":"modules/versioning/#why-you-might-need-to-manually-configure-versioning","title":"Why you might need to manually configure versioning","text":"<p>Renovate interprets versions correctly out-of-the-box most of the time. But Renovate can't automatically detect all versioning schemes. So sometimes you need to tell Renovate what versioning scheme it should use.</p> <p>For some ecosystems, automatic version selection works nearly every time (e.g. for npm-compliant managers, use <code>npm</code> versioning). For other ecosystems such as Docker or GitHub tags, there is no consistent convention for versions, so the default choice may not always work. For example some Docker images may use SemVer, some PEP440, some Calendar Versioning, etc.</p> <p>If the automatic version selection does not work for a dependency update: set the <code>versioning</code> for that dependency in the Renovate config file.</p>"},{"location":"modules/versioning/#general-concepts-behind-overriding-versioning","title":"General concepts behind overriding versioning","text":"<ul> <li>Although you can reconfigure versioning per-manager or per-datasource, you probably don't need such a broad change</li> <li>More commonly you would need to configure <code>versioning</code> for individual packages or potentially package patterns</li> <li>The best way to do this is with <code>packageRules</code>, with a combination of <code>matchManagers</code>, <code>matchDatasources</code>, and <code>matchPackageNames</code>.   Avoid configuring <code>versioning</code> in a rule that also uses <code>matchUpdateTypes</code>, as the update types aren't known at the time the <code>versioning</code> is applied</li> </ul>"},{"location":"modules/versioning/#examples-of-versioning-overrides","title":"Examples of versioning overrides","text":""},{"location":"modules/versioning/#overriding-docker-versioning-to-use-a-versioning-specific-for-a-package","title":"Overriding Docker versioning to use a versioning specific for a package","text":"<p>The configuration below overrides Renovate's default <code>docker</code> versioning for the <code>python</code> Docker image and instead uses the <code>pep440</code> versioning scheme to evaluate versions.</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"docker\"],\n      \"matchPackageNames\": [\"python\"],\n      \"versioning\": \"pep440\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/versioning/#using-a-custom-regex-versioning-scheme","title":"Using a custom regex versioning scheme","text":"<pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"foo/bar\"],\n      \"versioning\": \"regex:^(?&lt;compatibility&gt;.*)-v?(?&lt;major&gt;\\\\d+)\\\\.(?&lt;minor&gt;\\\\d+)\\\\.(?&lt;patch&gt;\\\\d+)?$\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/versioning/#breaking-changes","title":"Breaking Changes","text":"<p>In most ecosystems, especially SemVer, major upgrades are treated as breaking changes. But other updates may have breaking changes too, for example:</p> <ul> <li>In SemVer, any update from a 0.x version may be breaking (including <code>0.1.0</code> \u2192 <code>0.1.1</code>, <code>0.1.0</code> \u2192 <code>0.2.0</code> and <code>0.1.0</code> \u2192 <code>1.0.0</code>)</li> <li>Updates from pre-release versions like <code>1.0.0-pre.1</code> to other versions (including stable versions like <code>1.0.0</code>) can be breaking</li> <li>Python makes breaking changes in minor updates, e.g. from <code>3.12</code> to <code>3.13</code></li> </ul> <p>It can be tempting to propose ideas like \"let's treat minor updates of Python as major updates\" but that is swapping one problem for a worse problem. The definitions of major and minor should not be redefined and broken in order to shoehorn in the related concept of \"breaking change\". Instead, Renovate has the concept of <code>isBreaking</code>, which can be decided independently of <code>updateType</code>.</p> <p>Here's an example of grouping all non-breaking updates together:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"description\": \"Group non-breaking updates\",\n      \"matchUpdateTypes\": [\"minor\", \"patch\", \"digest\"],\n      \"matchJsonata\": [\"isBreaking != true\"],\n      \"groupName\": \"Non-breaking updates\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/versioning/#supported-versioning","title":"Supported Versioning","text":"<p>Supported values for <code>versioning</code> are:</p> <ul> <li><code>apk</code></li> <li><code>aws-eks-addon</code></li> <li><code>aws-machine-image</code></li> <li><code>azure-rest-api</code></li> <li><code>bazel-module</code></li> <li><code>cargo</code></li> <li><code>composer</code></li> <li><code>conan</code></li> <li><code>conda</code></li> <li><code>deb</code></li> <li><code>debian</code></li> <li><code>deno</code></li> <li><code>devbox</code></li> <li><code>docker</code></li> <li><code>elm</code></li> <li><code>exact</code></li> <li><code>git</code></li> <li><code>github-actions</code></li> <li><code>glasskube</code></li> <li><code>go-mod-directive</code></li> <li><code>gomod</code></li> <li><code>gradle</code></li> <li><code>hashicorp</code></li> <li><code>helm</code></li> <li><code>hermit</code></li> <li><code>hex</code></li> <li><code>ivy</code></li> <li><code>julia</code></li> <li><code>kubernetes-api</code></li> <li><code>lambda-node</code></li> <li><code>loose</code></li> <li><code>maven</code></li> <li><code>nixpkgs</code></li> <li><code>node</code></li> <li><code>npm</code></li> <li><code>nuget</code></li> <li><code>paket</code></li> <li><code>pep440</code></li> <li><code>perl</code></li> <li><code>poetry</code></li> <li><code>pvp</code></li> <li><code>python</code></li> <li><code>redhat</code></li> <li><code>regex</code></li> <li><code>rez</code></li> <li><code>rpm</code></li> <li><code>ruby</code></li> <li><code>rust-release-channel</code></li> <li><code>same-major</code></li> <li><code>semver</code></li> <li><code>semver-coerced</code></li> <li><code>semver-partial</code></li> <li><code>swift</code></li> <li><code>ubuntu</code></li> <li><code>unity3d</code></li> <li><code>unity3d-packages</code></li> <li><code>vcpkg</code></li> </ul>"},{"location":"modules/versioning/apk/","title":"Alpine Package Keeper (APK) Versioning","text":""},{"location":"modules/versioning/apk/#identifier","title":"Identifier","text":"<p><code>apk</code> </p>"},{"location":"modules/versioning/apk/#references","title":"References","text":"<ul> <li>Alpine Linux package policies</li> <li>Alpine Package Keeper - Package pinning</li> </ul>"},{"location":"modules/versioning/apk/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>pin</code>, <code>replace</code></p>"},{"location":"modules/versioning/apk/#description","title":"Description","text":"<p>Alpine Package Keeper (APK) versioning is used for packages served from APK repositories, such as the official Alpine Linux repositories or the Wolfi APK package repository</p> <p>This implementation follows the Alpine Linux Package versions for version formatting.</p> <p>Versions are similar to other Linux distributions, e.g. 3.2.1-r0</p> <ul> <li>The first segment follows semantic versioning</li> <li>Alpha, release candidates (_rc2), etc are prefixed with an underscore, not a hyphen.</li> <li>Subsequent package versions are -r0, -r1, and so on; the number is from $pkgver.</li> <li>Subsequent package fixes are _p0, _p1 (typically seen if not using major.minor.patch, e.g. 6.5_p20250503-r0)</li> </ul>"},{"location":"modules/versioning/apk/#version-format-examples","title":"Version Format Examples","text":"<ul> <li><code>2.39.0-r0</code> - Standard version with release number</li> <li><code>2.39.0_rc1-r0</code> - Release candidate (pre-release)</li> <li><code>6.5_p20250503-r0</code> - Package fix with date-based patch</li> </ul>"},{"location":"modules/versioning/apk/#pre-release-handling","title":"Pre-release Handling","text":"<ul> <li><code>_rc</code> patterns (e.g., <code>_rc1</code>, <code>_rc2</code>) are treated as pre-release identifiers</li> <li><code>_p</code> patterns (e.g., <code>_p20250503</code>) are treated as part of the version number</li> </ul>"},{"location":"modules/versioning/apk/#version-constraints","title":"Version constraints","text":"<p>Constraints follow <code>apk-world(5)</code>, which builds the operator from its characters, so the characters may be given in any order and may repeat. This means <code>~</code>, <code>=~</code> and <code>~=</code> all mean the same thing.</p> Operator Meaning (none) exact version <code>=</code> exact version <code>&lt;</code> less than <code>&lt;=</code> less than or equal <code>&gt;</code> greater than <code>&gt;=</code> greater than or equal <code>~</code> prefix match <code>&gt;~</code> greater than or prefix match <code>&lt;~</code> less than or prefix match <p>A prefix match compares token by token rather than by string, so <code>~1.6</code> matches <code>1.6</code>, <code>1.6.0_pre1</code>, <code>1.6.0</code>, <code>1.6.5</code> and <code>1.6.9_p1</code>, but not <code>1.60</code>. Because a revision is a token of its own, <code>~8.12.1</code> matches every <code>8.12.1-rN</code>, which is how Wolfi and Chainguard images commonly pin their packages.</p> <p>Renovate keeps the precision a prefix constraint was written with, so <code>~8.12.1</code> becomes <code>~8.13.0</code> rather than <code>~8.13.0-r0</code>, and <code>~8.12</code> becomes <code>~8.13</code>.</p> <p>With <code>rangeStrategy=bump</code>, Renovate raises a lower bound which includes its boundary to the new version, so <code>&gt;=8.12.1</code> becomes <code>&gt;=8.13.0-r0</code> and <code>&gt;~8.12</code> becomes <code>&gt;~8.13.0-r0</code>. A bare <code>&gt;</code> is left alone, as <code>&gt;8.13.0-r0</code> would exclude the very version it was bumped to, and <code>&lt;</code> and <code>&lt;=</code> are upper bounds so there is nothing to raise.</p> <p>Otherwise Renovate does not propose a replacement for the <code>&lt;</code>, <code>&lt;=</code>, <code>&gt;</code>, <code>&gt;=</code>, <code>&gt;~</code> and <code>&lt;~</code> operators, as there is no single obvious new bound for them. The <code>&gt;&lt;</code> operator constrains a package to an identity hash rather than to a version, so it is not a version constraint Renovate can resolve.</p>"},{"location":"modules/versioning/aws-eks-addon/","title":"aws-eks-addon Versioning","text":""},{"location":"modules/versioning/aws-eks-addon/#identifier","title":"Identifier","text":"<p><code>aws-eks-addon</code> </p>"},{"location":"modules/versioning/aws-eks-addon/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/aws-eks-addon/#description","title":"Description","text":"<p>AWS versioning syntax is used for EKS Addon updates.</p> <p>It is based off Semantic Versioning 2.0 but with a subset of addon <code>build metadata</code> syntax.</p> <p>At the moment every ESK Addon that matches the regex <code>^v?\\d+\\.\\d+\\.\\d+-eksbuild\\.\\d+$</code> is considered a valid \"release\".</p> <p>Key Points about EKS Addon Versioning</p> <ol> <li> <p>Versioning Scheme: Add-ons typically follow a semantic versioning scheme (e.g., Major.Minor.Patch). This helps in understanding the significance of changes between versions:</p> <ul> <li><code>Major</code>: Indicates significant changes or breaking API changes for plugin version.</li> <li><code>Minor</code>: Introduces new features or enhancements for plugin version.</li> <li><code>Patch</code>: Includes bug fixes and minor improvements for plugin version.</li> <li><code>Build Metadata</code> : It helps differentiate this particular release from others that might have been built independently.</li> </ul> </li> <li> <p>Default Versions: When creating a new EKS cluster, AWS often selects a default version for each addon based on the cluster's Kubernetes version and other factors. This default version is usually the most stable and recommended for the specific cluster configuration</p> </li> <li> <p>Build metadata. Example <code>eksbuild.1</code>. The <code>eksbuild.1</code> part signifies a specific build or release within the <code>1.19.0</code> version, likely managed by the EKS build system. It helps differentiate this particular release from others that might have been built independently. The build metadata provides additional context about the specific release, which can be useful for tracking and troubleshooting.</p> </li> </ol>"},{"location":"modules/versioning/aws-machine-image/","title":"aws-machine-image Versioning","text":""},{"location":"modules/versioning/aws-machine-image/#identifier","title":"Identifier","text":"<p><code>aws-machine-image</code> </p>"},{"location":"modules/versioning/aws-machine-image/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/aws-machine-image/#description","title":"Description","text":"<p>Renovate's AWS Machine Image versioning is a kind of hack to support Amazon Machine Images (AMI) updates.</p> <p>At the moment every AMI that matches the regex <code>^ami-[a-z0-9]{17}$</code> is considered a valid \"release\".</p>"},{"location":"modules/versioning/azure-rest-api/","title":"azure-rest-api Versioning","text":""},{"location":"modules/versioning/azure-rest-api/#identifier","title":"Identifier","text":"<p><code>azure-rest-api</code> </p>"},{"location":"modules/versioning/azure-rest-api/#references","title":"References","text":"<ul> <li>Microsoft Azure API versioning guidelines</li> </ul>"},{"location":"modules/versioning/azure-rest-api/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/azure-rest-api/#description","title":"Description","text":"<p>The Azure REST APIs use a <code>YYYY-MM-DD</code> version with an optional <code>-preview</code> suffix: https://github.com/microsoft/api-guidelines/blob/vNext/azure/Guidelines.md#api-versioning</p> <p>Internally at Microsoft they are using other additional suffixes: https://github.com/Azure/bicep/blob/a1d217e3bb3d049fc5c6c21b466c3a29585a6c69/src/Bicep.Core/Analyzers/Linter/ApiVersions/ApiVersionHelper.cs#L15</p>"},{"location":"modules/versioning/bazel-module/","title":"Bazel Module Versioning","text":""},{"location":"modules/versioning/bazel-module/#identifier","title":"Identifier","text":"<p><code>bazel-module</code> </p>"},{"location":"modules/versioning/bazel-module/#references","title":"References","text":"<ul> <li>Bazel modules</li> </ul>"},{"location":"modules/versioning/bazel-module/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/cargo/","title":"Cargo Versioning","text":""},{"location":"modules/versioning/cargo/#identifier","title":"Identifier","text":"<p><code>cargo</code> </p>"},{"location":"modules/versioning/cargo/#references","title":"References","text":"<ul> <li>Cargo - Specifying Dependencies</li> </ul>"},{"location":"modules/versioning/cargo/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>replace</code>, <code>pin</code></p>"},{"location":"modules/versioning/cargo/#description","title":"Description","text":"<p>Cargo versioning uses Semantic Versioning 2.0.</p> <p>Cargo supports ranges in a similar manner to npm, but not identical. The important differences are:</p> <p>Use of commas</p> <p>Multiple version requirements can also be separated with a comma, e.g. <code>&gt;= 1.2, &lt; 1.5</code>. We interpret this to mean AND.</p> <p>No exact versions unless using equals =</p> <p>In Cargo, <code>1.2.3</code> doesn't mean \"exactly 1.2.3\", it actually means <code>&gt;=1.2.3 &lt;2.0.0</code>. So this is like the equivalent of <code>^1.2.3</code> in npm.</p>"},{"location":"modules/versioning/composer/","title":"Composer Versioning","text":""},{"location":"modules/versioning/composer/#identifier","title":"Identifier","text":"<p><code>composer</code> </p>"},{"location":"modules/versioning/composer/#references","title":"References","text":"<ul> <li>Composer versions</li> <li>composer/semver package</li> <li>Tilde and caret constraints</li> <li>Composer semver checker</li> </ul>"},{"location":"modules/versioning/composer/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>widen</code>, <code>replace</code>, <code>update-lockfile</code></p>"},{"location":"modules/versioning/composer/#description","title":"Description","text":"<p>Composer uses Semver-like versioning, but some package authors may use versions that are not completely valid, e.g. <code>1.2</code> instead of <code>1.2.0</code>.</p> <p>Composer supports ranges in a similar manner to npm, but not identical. The main difference is with tilde ranges.</p> <p>Tilde ranges with \"short\" versions are different to npm. e.g.</p> <p><code>~4</code> is equivalent to <code>^4</code> in npm <code>~4.1</code> is equivalent to <code>^4.1</code> in npm <code>~0.4</code> is equivalent to <code>&gt;=0.4 &lt;1</code> in npm</p> <p>Composer supports patches in the version numbers, which are considered stable. E.g., <code>1.2.3-p1</code> is recognized by npm as unstable, Renovate implements additional logic to support correct sorting and stability checks on composer patch versions syntax.</p>"},{"location":"modules/versioning/conan/","title":"conan Versioning","text":""},{"location":"modules/versioning/conan/#identifier","title":"Identifier","text":"<p><code>conan</code> </p>"},{"location":"modules/versioning/conan/#references","title":"References","text":"<ul> <li>Semantic Versioning</li> <li>python-node-semver</li> <li>python-node-semver examples</li> <li>Conan version ranges</li> </ul>"},{"location":"modules/versioning/conan/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>auto</code>, <code>bump</code>, <code>widen</code>, <code>replace</code></p>"},{"location":"modules/versioning/conan/#description","title":"Description","text":"<p>Conan versioning supports Semantic Versioning 2.0 but some packages don't follow this specification.</p> <p>Conan implements python-node-semver.</p> <p>Read the Conan docs about version ranges for more information.</p> syntax description <code>5.45</code> Equivalent to <code>5.45</code> <code>16.00</code> Equivalent to <code>16.00</code> <code>2.8.3</code> Equivalent to <code>2.8.3</code> <code>[&gt;1.1 &lt;2.1]</code> Keep version within range <code>[2.8]</code> Equivalent to <code>=2.8</code> <code>[~=3.0]</code> Compatible, according to SemVer <code>[&gt;1.1 \\|\\| 0.8]</code> Conditions can be OR'ed <code>[1.2.7 \\|\\| &gt;=1.2.9 &lt;2.0.0]</code> This range would match the versions <code>1.2.7</code>, <code>1.2.9</code>, and <code>1.4.6</code>, but not the versions <code>1.2.8</code> or <code>2.0.0</code> <code>[&gt;1.1 &lt;2.1, include_prerelease=True]</code> Would e.g. accept <code>2.0.0-pre.1</code> as match <code>[~1.2.3, loose=False]</code> Would only accept correct Semantic Versioning strings. E.g. version <code>1.2.3.4</code> would not be accepted <code>[~1.2.3, loose=False, include_prerelease=True]</code> Both options can be used for the same version range"},{"location":"modules/versioning/conda/","title":"conda Versioning","text":""},{"location":"modules/versioning/conda/#identifier","title":"Identifier","text":"<p><code>conda</code> </p>"},{"location":"modules/versioning/conda/#references","title":"References","text":"<ul> <li>Conda package match specifications</li> </ul>"},{"location":"modules/versioning/conda/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>widen</code>, <code>replace</code>, <code>pin</code></p>"},{"location":"modules/versioning/conda/#description","title":"Description","text":"<p>Conda versioning uses pep440-extended version syntax.</p> <p>More details: conda version spec</p>"},{"location":"modules/versioning/deb/","title":"Deb version Versioning","text":""},{"location":"modules/versioning/deb/#identifier","title":"Identifier","text":"<p><code>deb</code> </p>"},{"location":"modules/versioning/deb/#references","title":"References","text":"<ul> <li>Debian policy - Version</li> <li>deb-version man page</li> </ul>"},{"location":"modules/versioning/deb/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/deb/#description","title":"Description","text":"<p>Deb versioning compares versions like package managers on Debian-based Linux distributions compare packages (<code>dpkg</code>, <code>apt</code>). Deb versioning supports complicated version numbers, including alphabetical characters almost everywhere. Similar to our \"loose\" versioning, deb versioning is a \"best effort\" attempt to convert deb versions to SemVer fields like <code>major</code>, <code>minor</code>, <code>patch</code>.</p>"},{"location":"modules/versioning/debian/","title":"Debian Versioning","text":""},{"location":"modules/versioning/debian/#identifier","title":"Identifier","text":"<p><code>debian</code> </p>"},{"location":"modules/versioning/debian/#references","title":"References","text":"<ul> <li>Debian distro info data</li> </ul>"},{"location":"modules/versioning/debian/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>replace</code></p>"},{"location":"modules/versioning/debian/#description","title":"Description","text":"<p>Debian versioning is used for Debian container images that are referenced by their major release version or a codename.</p> <p>Versions to which this scheme applies are e.g. <code>11</code> and <code>bullseye</code>. Container image tags such as <code>11-slim</code>, <code>11.4</code> or <code>11.4-slim</code>, <code>bullseye-20220822</code> or <code>bullseye-backports</code> are not compliant with the current implementation.</p>"},{"location":"modules/versioning/deno/","title":"deno Versioning","text":""},{"location":"modules/versioning/deno/#identifier","title":"Identifier","text":"<p><code>deno</code> </p>"},{"location":"modules/versioning/deno/#references","title":"References","text":"<ul> <li>Deno - Package versions</li> </ul>"},{"location":"modules/versioning/deno/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>pin</code>, <code>replace</code></p>"},{"location":"modules/versioning/deno/#description","title":"Description","text":"<p>deno versioning is a well known implementation of Semantic Versioning 2.0.</p>"},{"location":"modules/versioning/devbox/","title":"devbox Versioning","text":""},{"location":"modules/versioning/devbox/#identifier","title":"Identifier","text":"<p><code>devbox</code> </p>"},{"location":"modules/versioning/devbox/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/devbox/#description","title":"Description","text":"<p>Devbox's Nixhub uses fairly strict versioning, characters such as ~, ^ and &gt;= are not allowed. The semver values must not include \"*\" or \"x\". \"1.2.3\" \"1.2\" and \"1\" are the only valid formats.</p>"},{"location":"modules/versioning/docker/","title":"Docker Versioning","text":""},{"location":"modules/versioning/docker/#identifier","title":"Identifier","text":"<p><code>docker</code> </p>"},{"location":"modules/versioning/docker/#references","title":"References","text":"<ul> <li>Docker tag command</li> </ul>"},{"location":"modules/versioning/docker/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/docker/#description","title":"Description","text":"<p>Docker images don't really have versions, instead they have \"tags\". Tags are often used by Docker image authors as a form of versioning.</p> <p>Renovate tries to follow the most common conventions that are used to tag Docker images. In particular, Renovate treats the text after the first hyphen as a type of platform/compatibility indicator.</p> <p>For example, many images have releases with the <code>-alpine</code> suffix. The official <code>node</code> Docker image has tags like <code>12.15.0-alpine</code> which is not compatible with <code>12.15.0</code> or <code>12.15.0-stretch</code>. Users on <code>-alpine</code> don't want updates to <code>12.16.0</code> or <code>12.16.0-stretch</code>. Those users only want upgrades to <code>12.16.0-alpine</code> and not <code>12.16.0</code> or <code>12.16.0-stretch</code>.</p> <p>Similarly, a user on <code>12.14</code> expects to be upgraded to <code>12.15</code> and not <code>12.15.0</code>.</p> <p>What type of versioning is used?</p> <p>Docker image authors can use whatever tag they want, it's a \"wild west\". Docker tags don't always follow SemVer. This means that Renovate tries to accept and sort SemVer-like versions, but this won't always work.</p> <p>You may need to help Renovate and create your own rules for some Docker images. For example:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"docker\"],\n      \"matchPackageNames\": [\"badly-versioned-docker-image\"],\n      \"versioning\": \"loose\"\n    }\n  ]\n}\n</code></pre> <p>Are ranges supported?</p> <p>No. You may think a tag like <code>12.15</code> also means <code>12.15.x</code>, but it's a tag of its own. The <code>12.15</code> tag may or may not point to any of the available <code>12.15.x</code> tags, including <code>12.15.0</code>.</p> <p>Are commit hashes supported?</p> <p>No, Renovate ignores Docker image tags that look like a Git commit hash.</p>"},{"location":"modules/versioning/elm/","title":"Elm Versioning","text":""},{"location":"modules/versioning/elm/#identifier","title":"Identifier","text":"<p><code>elm</code> </p>"},{"location":"modules/versioning/elm/#references","title":"References","text":"<ul> <li>Elm</li> </ul>"},{"location":"modules/versioning/elm/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>widen</code>, <code>replace</code></p>"},{"location":"modules/versioning/elm/#description","title":"Description","text":"<p>Elm enforces strict Semantic Versioning at the compiler level, automatically detecting API changes and requiring appropriate version bumps.</p> <p>Ranges</p> <p>Elm packages use range constraints in the format <code>1.0.0 &lt;= v &lt; 2.0.0</code>, where the lower bound is inclusive and the upper bound is exclusive.</p> <p>Exact versions</p> <p>Elm applications use exact versions like <code>1.0.0</code> in their <code>elm.json</code> files.</p> <p>Both exact versions and ranges are fully supported.</p>"},{"location":"modules/versioning/exact/","title":"Exact Versioning","text":""},{"location":"modules/versioning/exact/#identifier","title":"Identifier","text":"<p><code>exact</code> </p>"},{"location":"modules/versioning/exact/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/exact/#description","title":"Description","text":"<p>Exact versioning treats any non-empty string as a valid version. It only guarantees strict string equality \u2014 a version matches only itself and is never considered greater than another.</p> <p>This is useful for dependencies like GitHub Actions where each tag represents a specific feature, and only the digest should be updated while keeping the tag unchanged.</p>"},{"location":"modules/versioning/git/","title":"git Versioning","text":""},{"location":"modules/versioning/git/#identifier","title":"Identifier","text":"<p><code>git</code> </p>"},{"location":"modules/versioning/git/#references","title":"References","text":"<ul> <li>Git</li> </ul>"},{"location":"modules/versioning/git/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/git/#description","title":"Description","text":"<p>Renovate's Git versioning is a kind of hack to support Git submodule updating.</p>"},{"location":"modules/versioning/github-actions/","title":"GitHub Actions Versioning","text":""},{"location":"modules/versioning/github-actions/#identifier","title":"Identifier","text":"<p><code>github-actions</code> </p>"},{"location":"modules/versioning/github-actions/#references","title":"References","text":"<ul> <li>GitHub Actions - Using release management for custom actions</li> </ul>"},{"location":"modules/versioning/github-actions/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>pin</code>, <code>replace</code></p>"},{"location":"modules/versioning/github-actions/#description","title":"Description","text":"<p>Versioning specific to GitHub Actions' usage of Semantic Versioning, for mutable and immutable tags.</p> <p>The \"shortest\" tag will be used where possible - if you are previously using <code>v7</code>, and there is an upgrade to <code>v7.5.3</code>, <code>v7</code> will be used.</p>"},{"location":"modules/versioning/github-actions/#immutable-tags","title":"Immutable Tags","text":"<p>When using Immutable Releases for GitHub Tags, it is required to use explicit SemVer <code>major.minor.patch</code> versions.</p> <p>If you have previously used an unpinned version, such as <code>@v7</code>, Renovate will migrate you on the next update, such as:</p> <pre><code>-       uses: astral-sh/setup-uv@v7\n+       uses: astral-sh/setup-uv@v10.3.2\n</code></pre>"},{"location":"modules/versioning/glasskube/","title":"glasskube Versioning","text":""},{"location":"modules/versioning/glasskube/#identifier","title":"Identifier","text":"<p><code>glasskube</code> </p>"},{"location":"modules/versioning/glasskube/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/go-mod-directive/","title":"Go Modules Directive Versioning","text":""},{"location":"modules/versioning/go-mod-directive/#identifier","title":"Identifier","text":"<p><code>go-mod-directive</code> </p>"},{"location":"modules/versioning/go-mod-directive/#references","title":"References","text":"<ul> <li>Go Modules Reference</li> </ul>"},{"location":"modules/versioning/go-mod-directive/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>replace</code></p>"},{"location":"modules/versioning/go-mod-directive/#description","title":"Description","text":"<p>This versioning is used exclusively for the <code>go</code> directive in <code>go.mod</code> files.</p> <p>It ensures that a value like <code>1.16</code> is treated like <code>^1.16</code> and not <code>~1.16</code>.</p> <p>By default this will mean that the <code>go</code> directive in <code>go.mod</code> files won't get upgraded to any new Go version, such as <code>1.19</code>. If you wish to upgrade this value every time there's a new minor Go release, configure <code>rangeStrategy</code> to be <code>\"bump\"</code> like so:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"golang-version\"],\n      \"rangeStrategy\": \"bump\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/versioning/gomod/","title":"Go Modules Versioning","text":""},{"location":"modules/versioning/gomod/#identifier","title":"Identifier","text":"<p><code>gomod</code> </p>"},{"location":"modules/versioning/gomod/#references","title":"References","text":"<ul> <li>Go Modules Reference: Versions</li> </ul>"},{"location":"modules/versioning/gomod/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/gomod/#description","title":"Description","text":"<p>Versioning for Go modules.</p> <p>It behaves like the <code>semver</code> versioning for now, and is not yet the default for the <code>go</code> datasource or the <code>gomod</code> manager. Go-specific behaviour, such as for pseudo-versions like <code>v0.0.0-20191109021931-daa7c04131f5</code>, will be added over time.</p>"},{"location":"modules/versioning/gradle/","title":"Gradle Versioning","text":""},{"location":"modules/versioning/gradle/#identifier","title":"Identifier","text":"<p><code>gradle</code> </p>"},{"location":"modules/versioning/gradle/#references","title":"References","text":"<ul> <li>Gradle version ordering</li> </ul>"},{"location":"modules/versioning/gradle/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code></p>"},{"location":"modules/versioning/hashicorp/","title":"Hashicorp Versioning","text":""},{"location":"modules/versioning/hashicorp/#identifier","title":"Identifier","text":"<p><code>hashicorp</code> </p>"},{"location":"modules/versioning/hashicorp/#references","title":"References","text":"<ul> <li>Terraform - Specifying a required version</li> </ul>"},{"location":"modules/versioning/hashicorp/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>widen</code>, <code>replace</code></p>"},{"location":"modules/versioning/hashicorp/#description","title":"Description","text":"<p>Hashicorp versioning syntax is used for Terraform.</p> <p>It is based off Semantic Versioning 2.0 but with a subset of npm's range syntax.</p>"},{"location":"modules/versioning/helm/","title":"helm Versioning","text":""},{"location":"modules/versioning/helm/#identifier","title":"Identifier","text":"<p><code>helm</code> </p>"},{"location":"modules/versioning/helm/#references","title":"References","text":"<ul> <li>Semantic Versioning</li> <li>Helm chart dependencies - Versions</li> <li>Masterminds semver - Basic comparisons</li> </ul>"},{"location":"modules/versioning/helm/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>widen</code>, <code>replace</code>, <code>widen</code></p>"},{"location":"modules/versioning/hermit/","title":"Hermit Versioning","text":""},{"location":"modules/versioning/hermit/#identifier","title":"Identifier","text":"<p><code>hermit</code> </p>"},{"location":"modules/versioning/hermit/#references","title":"References","text":"<ul> <li>Hermit packaging reference - Versions</li> </ul>"},{"location":"modules/versioning/hermit/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/hermit/#description","title":"Description","text":"<p>Hermit versioning is a mix of <code>version</code> and <code>channel</code>.</p> <p>Version</p> <p>Hermit's package version comes from the package's original Git tag. The version is an extension to SemVer, with an extra build number to accommodate package versions from OpenJDK, which has a value <code>15.0.1_9</code>.</p> <p>Channel</p> <p>Channel could be Hermit-generated or user-defined. Channel is considered unstable version and normally won't upgrade. If you would like to get out of Channel, you could replace the Channel with a given version number and let Renovate manage it.</p>"},{"location":"modules/versioning/hex/","title":"Hex Versioning","text":""},{"location":"modules/versioning/hex/#identifier","title":"Identifier","text":"<p><code>hex</code> </p>"},{"location":"modules/versioning/hex/#references","title":"References","text":"<ul> <li>Elixir Version module</li> </ul>"},{"location":"modules/versioning/hex/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>widen</code>, <code>replace</code>, <code>update-lockfile</code>, <code>pin</code></p>"},{"location":"modules/versioning/hex/#description","title":"Description","text":"<p>Hex versioning syntax is used for Elixir, Erlang and Gleam hex dependencies. It is based on Semantic Versioning 2.0 and supports a subset of npm's range syntax.</p>"},{"location":"modules/versioning/ivy/","title":"Ivy Versioning","text":""},{"location":"modules/versioning/ivy/#identifier","title":"Identifier","text":"<p><code>ivy</code> </p>"},{"location":"modules/versioning/ivy/#references","title":"References","text":"<ul> <li>Apache Ivy</li> </ul>"},{"location":"modules/versioning/ivy/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>widen</code>, <code>replace</code></p>"},{"location":"modules/versioning/julia/","title":"Julia Versioning","text":""},{"location":"modules/versioning/julia/#identifier","title":"Identifier","text":"<p><code>julia</code> </p>"},{"location":"modules/versioning/julia/#references","title":"References","text":"<ul> <li>Pkg.jl - Compatibility</li> </ul>"},{"location":"modules/versioning/julia/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>pin</code>, <code>replace</code>, <code>widen</code></p>"},{"location":"modules/versioning/julia/#description","title":"Description","text":"<p>Julia's <code>Pkg</code> uses Semantic Versioning 2.0 with a few syntactic differences from npm:</p> <p>Caret is the default specifier</p> <p>Bare versions in <code>Project.toml</code>'s <code>[compat]</code> section are interpreted as caret ranges. <code>Example = \"1.2.3\"</code> is the same as <code>Example = \"^1.2.3\"</code>, i.e. <code>[1.2.3, 2.0.0)</code>.</p> <p>Comma is union, not intersection</p> <p>Multiple specifiers separated by commas form a union: <code>Example = \"1.2, 2\"</code> resolves to <code>[1.2.0, 3.0.0)</code>. (Contrast with Cargo, where comma is intersection.)</p> <p><code>\u2265</code> is a synonym for <code>&gt;=</code></p> <p><code>Example = \"\u2265 1.2.3\"</code> is equivalent to <code>Example = \"&gt;= 1.2.3\"</code>.</p> <p>Hyphen ranges</p> <p><code>1.2.3 - 4.5.6</code> resolves to <code>[1.2.3, 4.5.6]</code>. Trailing components in the second endpoint are wildcards (<code>1.2.3 - 4.5</code> resolves to <code>[1.2.3, 4.6.0)</code>); trailing components in the first endpoint are zeros (<code>1.2 - 4.5.6</code> resolves to <code>[1.2.0, 4.5.6]</code>).</p> <p>Tilde and caret semantics, including the leading-zero behavior, match npm's.</p> <p>Updating <code>[compat]</code> entries</p> <ul> <li><code>bump</code> raises the last specifier to the new version: <code>\"0.10, 0.11\"</code> with 0.12.1 becomes <code>\"0.12.1\"</code>.</li> <li><code>replace</code> rewrites the entry only when the new version is outside it.</li> <li><code>widen</code> keeps the entry and adds a specifier for the new version, the usual Julia convention: <code>\"0.10, 0.11\"</code> with 0.12.1 becomes <code>\"0.10, 0.11, 0.12\"</code>. The new specifier is <code>major.minor</code> (<code>0.minor</code> or <code>0.0.patch</code> below 1.0), a bare major next to a bare major (<code>\"1, 2\"</code> with 3.1.0 becomes <code>\"1, 2, 3\"</code>), takes the last specifier's <code>~</code> or <code>^</code> (<code>\"~1.2\"</code> with 1.3.0 becomes <code>\"~1.2, ~1.3\"</code>), is an exact pin next to an exact pin (<code>\"=1.2.3, =1.2.5\"</code> with 1.3.0 becomes <code>\"=1.2.3, =1.2.5, =1.3.0\"</code>), and goes in ascending order.</li> <li><code>pin</code> writes an exact version: <code>\"=1.2.3\"</code>.</li> </ul> <p>Under every strategy, an exact pin such as <code>\"=6.1.0\"</code> stays exact (<code>\"=6.1.1\"</code>), and a hyphen range is left unchanged. New values are written as <code>major.minor.patch</code>: Pkg rejects prerelease tags and build numbers in <code>[compat]</code>, so a JLL release <code>1.6.10+0</code> is written as <code>1.6.10</code>.</p> <p>See the Julia Pkg compatibility docs for the full specification.</p>"},{"location":"modules/versioning/kubernetes-api/","title":"Kubernetes API Versioning","text":""},{"location":"modules/versioning/kubernetes-api/#identifier","title":"Identifier","text":"<p><code>kubernetes-api</code> </p>"},{"location":"modules/versioning/kubernetes-api/#references","title":"References","text":"<ul> <li>Kubernetes API versioning</li> </ul>"},{"location":"modules/versioning/kubernetes-api/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/lambda-node/","title":"Lambda Node.js Runtime Versioning","text":""},{"location":"modules/versioning/lambda-node/#identifier","title":"Identifier","text":"<p><code>lambda-node</code> </p>"},{"location":"modules/versioning/lambda-node/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/lambda-node/#description","title":"Description","text":"<p>Renovate's Lambda Node.js versioning is a wrapper around the existing Node.js Versioning module with the only difference being that it lists versions not currently supported by AWS as being unstable. This is intended to be a drop-in replacement for dependencies that follow the <code>node</code> versioning schedule if you need to keep them in line with Lambda Runtime releases.</p> <p>Its primary purpose is to add Node Runtime support awareness, e.g.:</p> <ul> <li>Old Runtimes that cannot be updated will be marked as unstable</li> <li>Node.js LTS releases that do not have Runtimes released for them will be marked as unstable</li> </ul> <p>You can not use <code>lambda-node</code> versioning to replace <code>docker</code> versioning if you are using node tags with suffixes like <code>-alpine</code>. This is because npm versioning treats these suffixes as implying pre-releases/instability.</p>"},{"location":"modules/versioning/loose/","title":"Loose Versioning","text":""},{"location":"modules/versioning/loose/#identifier","title":"Identifier","text":"<p><code>loose</code> </p>"},{"location":"modules/versioning/loose/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/loose/#description","title":"Description","text":"<p>Renovate's \"loose\" versioning was created for cases where no strict versioning is in place. It works like SemVer if SemVer-compliant versions are supplied, but otherwise is \"best effort\". Essentially \"loose\" versioning does its best to sort versions and ignores \"unsortable\" versions.</p>"},{"location":"modules/versioning/maven/","title":"Maven Versioning","text":""},{"location":"modules/versioning/maven/#identifier","title":"Identifier","text":"<p><code>maven</code> </p>"},{"location":"modules/versioning/maven/#references","title":"References","text":"<ul> <li>Maven POM - Dependency version requirements</li> <li>Maven versioning explained</li> <li>Maven Enforcer - Version ranges</li> </ul>"},{"location":"modules/versioning/maven/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>widen</code>, <code>pin</code>, <code>replace</code></p>"},{"location":"modules/versioning/maven/#description","title":"Description","text":"<p>Maven versioning is similar to SemVer but also very different in places. It's specified by Maven itself.</p> <p>Ranges are supported using Maven's special syntax.</p> <p>For development purposes, download maven-artifact JAR and run:</p> <pre><code>$ java -jar maven-artifact-*.jar 3.2.4-alpha-1 3.2.4-SNAPSHOT 3.2.4.0\nDisplay parameters as parsed by Maven (in canonical form) and comparison result:\n1. 3.2.4-alpha-1 == 3.2.4.alpha.1\n   3.2.4-alpha-1 &lt; 3.2.4-SNAPSHOT\n2. 3.2.4-SNAPSHOT == 3.2.4.snapshot\n   3.2.4-SNAPSHOT &lt; 3.2.4.0\n3. 3.2.4.0 == 3.2.4\n</code></pre>"},{"location":"modules/versioning/nixpkgs/","title":"Nixpkgs Versioning","text":""},{"location":"modules/versioning/nixpkgs/#identifier","title":"Identifier","text":"<p><code>nixpkgs</code> </p>"},{"location":"modules/versioning/nixpkgs/#references","title":"References","text":"<ul> <li>Nixpkgs repository</li> </ul>"},{"location":"modules/versioning/nixpkgs/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/nixpkgs/#description","title":"Description","text":"<p>Nixpkgs versioning is designed to be used with the nix manager.</p> <p>NixOS releases follow the <code>YY.MM</code> pattern. There are also some prefixes and suffixes allowed. Using <code>22.05</code> as an example the allowed combination of prefixes and suffixes are:</p> <ul> <li><code>release-22.05</code></li> <li><code>nixos-22.05</code></li> <li><code>nixos-22.05-small</code></li> <li><code>nixos-22.05-aarch64</code></li> <li><code>nixpkgs-22.05-darwin</code></li> </ul> <p>Additionally, there are some floating versions:</p> <ul> <li><code>nixos-unstable</code></li> <li><code>nixos-unstable-small</code></li> <li><code>nixpkgs-unstable</code></li> </ul>"},{"location":"modules/versioning/node/","title":"Node.js Versioning","text":""},{"location":"modules/versioning/node/#identifier","title":"Identifier","text":"<p><code>node</code> </p>"},{"location":"modules/versioning/node/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/node/#description","title":"Description","text":"<p>Renovate's Node.js versioning is a wrapper around npm versioning. But Renovate removes any <code>v</code> prefixes from semantic versions when replacing.</p> <p>Its primary purpose is to add Node.js LTS awareness:</p> <ul> <li>A new major release is not treated as stable immediately; it becomes stable once its release line reaches LTS.</li> <li>Pre-release versions such as <code>27.0.0-alpha.1</code> are always treated as unstable.</li> </ul> <p>Up to Node.js 26 the release lines followed an odd/even scheme, where odd-numbered majors never reached LTS. From Node.js 27 onwards the schedule changed: every major eventually becomes LTS, so stability is derived from the release schedule rather than the major number being odd or even.</p> <p>You can not use <code>node</code> versioning to replace <code>docker</code> versioning if you are using node tags with suffixes like <code>-alpine</code>. This is because npm versioning treats these suffixes as implying pre-releases/instability.</p>"},{"location":"modules/versioning/npm/","title":"npm Versioning","text":""},{"location":"modules/versioning/npm/#identifier","title":"Identifier","text":"<p><code>npm</code> </p>"},{"location":"modules/versioning/npm/#references","title":"References","text":"<ul> <li>Semantic Versioning</li> <li>semver npm package</li> <li>npm - About semantic versioning</li> <li>npm semver calculator</li> </ul>"},{"location":"modules/versioning/npm/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>widen</code>, <code>replace</code></p>"},{"location":"modules/versioning/npm/#description","title":"Description","text":"<p>npm versioning is the most well known/widely-used implementation of Semantic Versioning 2.0.</p> <p>It's important to understand that \"npm\" versioning scheme is not the same as \"semver\" versioning. SemVer's spec does not define ranges at all - so all range/constraint syntax in npm is npm-specific and not part of the spec.</p>"},{"location":"modules/versioning/nuget/","title":"NuGet Versioning","text":""},{"location":"modules/versioning/nuget/#identifier","title":"Identifier","text":"<p><code>nuget</code> </p>"},{"location":"modules/versioning/nuget/#references","title":"References","text":"<ul> <li>NuGet package versioning</li> <li>NuGet version range tool</li> </ul>"},{"location":"modules/versioning/nuget/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>pin</code></p>"},{"location":"modules/versioning/nuget/#description","title":"Description","text":"<p>NuGet versioning matches as closely as possible to the version comparison that NuGet itself uses.</p>"},{"location":"modules/versioning/paket/","title":"Paket Versioning","text":""},{"location":"modules/versioning/paket/#identifier","title":"Identifier","text":"<p><code>paket</code> </p>"},{"location":"modules/versioning/paket/#references","title":"References","text":"<ul> <li>Paket version constraints</li> <li>NuGet package versioning</li> </ul>"},{"location":"modules/versioning/paket/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>widen</code>, <code>replace</code>, <code>update-lockfile</code>, <code>pin</code></p>"},{"location":"modules/versioning/paket/#description","title":"Description","text":"<p>Paket versioning implements the version constraint syntax of the <code>paket.dependencies</code> file.</p> <p>Paket versions are NuGet versions, so version parsing and comparison match the <code>nuget</code> versioning module. But the range syntax differs from NuGet ranges and the two conflict where they overlap: a plain version like <code>1.2.3</code> is an exact pin in Paket, while NuGet range syntax treats it as \"at least <code>1.2.3</code>\". This is why Paket needs its own versioning module.</p> <p>The following constraints are supported:</p> Constraint Meaning <code>1.2.3</code> or <code>= 1.2.3</code> exactly version <code>1.2.3</code> <code>== 1.2.3</code> exactly version <code>1.2.3</code>, overriding conflicts <code>&gt;= 1.2.3</code> at least version <code>1.2.3</code> <code>&gt; 1.2.3</code> greater than version <code>1.2.3</code> <code>&lt;= 1.2.3</code> at most version <code>1.2.3</code> <code>&lt; 1.2.3</code> less than version <code>1.2.3</code> <code>~&gt; 1.2.3</code> pessimistic constraint, <code>&gt;= 1.2.3</code> and <code>&lt; 1.3</code> <code>&gt;= 1.2.3 &lt; 1.5</code> combined bounds <code>~&gt; 1.2 &gt;= 1.2.3</code> pessimistic constraint with a floor <p>Prerelease channels may follow the constraint, like <code>&gt;= 1.2.3 alpha</code> or <code>~&gt; 1.2 prerelease</code>. Stable versions always match, while prerelease versions only match when their channel is listed, or when the <code>prerelease</code> keyword allows all of them. A constraint written with a prerelease version, like <code>~&gt; 1.2.3-alpha001</code>, allows its own channel implicitly. Following Paket, the literal <code>prerelease</code> suffix sorts below any other prerelease of the same version, so <code>1.2.3-prerelease</code> acts as a floor under all prereleases of <code>1.2.3</code>.</p> <p>The resolver strategy prefixes <code>!</code> and <code>@</code>, like <code>!~&gt; 1.2</code>, do not change which versions match and are preserved when Renovate updates a range.</p> <p>When Renovate replaces a range, it keeps the shape of the constraint:</p> <ul> <li>exact pins stay exact pins, and <code>==</code> keeps its operator</li> <li><code>~&gt; 1.2</code> becomes <code>~&gt; 2.0</code> at the same precision</li> <li>upper bounds move up just far enough, so <code>&gt;= 1.2.3 &lt; 2.0</code> becomes <code>&gt;= 1.2.3 &lt; 2.2</code> for version <code>2.1.4</code></li> <li>a <code>~&gt; 1.2 &gt;= 1.2.3</code> pair follows the new version as a pair, dropping a floor that becomes redundant</li> <li>if the new version is a prerelease which the rewritten range would block, its channel is appended, like <code>&gt;= 1.2 beta</code></li> </ul> <p>The <code>bump</code> strategy raises the floor to the exact new version where the syntax allows it, for example <code>~&gt; 1.2</code> becomes <code>~&gt; 1.2 &gt;= 1.2.5</code>. The <code>widen</code> strategy keeps the lower bound and only extends the upper bound, decomposing <code>~&gt; 1.2</code> into <code>&gt;= 1.2 &lt; 3</code> when needed.</p>"},{"location":"modules/versioning/pep440/","title":"PEP440 Versioning","text":""},{"location":"modules/versioning/pep440/#identifier","title":"Identifier","text":"<p><code>pep440</code> </p>"},{"location":"modules/versioning/pep440/#references","title":"References","text":"<ul> <li>PEP 440 - Version Identification</li> </ul>"},{"location":"modules/versioning/pep440/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>widen</code>, <code>replace</code>, <code>pin</code></p>"},{"location":"modules/versioning/pep440/#description","title":"Description","text":"<p>PEP 440 is defined as part of the Python project, and its versioning is independent of others such as SemVer.</p> <p>Ranges are supported using the syntax defined as part of the PEP440 spec.</p>"},{"location":"modules/versioning/perl/","title":"Perl Versioning","text":""},{"location":"modules/versioning/perl/#identifier","title":"Identifier","text":"<p><code>perl</code> </p>"},{"location":"modules/versioning/perl/#references","title":"References","text":"<ul> <li>Perl version module</li> </ul>"},{"location":"modules/versioning/perl/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/perl/#description","title":"Description","text":"<p>Perl versioning is based on Perl's <code>version</code> module.</p> <p>This could be used in combination with the <code>regex</code> manager and the <code>cpan</code> datasource.</p>"},{"location":"modules/versioning/poetry/","title":"Poetry Versioning","text":""},{"location":"modules/versioning/poetry/#identifier","title":"Identifier","text":"<p><code>poetry</code> </p>"},{"location":"modules/versioning/poetry/#references","title":"References","text":"<ul> <li>Poetry dependency specification</li> <li>Poetry FAQ - Why does Poetry not adhere to semantic versioning?</li> <li>Poetry FAQ - Why does Poetry enforce PEP 440 versions?</li> </ul>"},{"location":"modules/versioning/poetry/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>widen</code>, <code>replace</code></p>"},{"location":"modules/versioning/poetry/#description","title":"Description","text":"<p>Poetry versioning is a little like a mix of PEP440 and SemVer.</p> <p>Currently Renovate's implementation is based off npm versioning. This works by parsing versions using the same patterns and similar normalization rules as Poetry, passing them to the npm versioning implementation, and then reversing the normalizations. This allows Renovate to meaningfully compare the SemVer-style versions allowed in <code>pyproject.toml</code> to the PEP440 representations used on PyPI. These are equivalent for major.minor.patch releases, but different for pre-, post-, and dev releases.</p>"},{"location":"modules/versioning/pvp/","title":"Package Versioning Policy (Haskell) Versioning","text":""},{"location":"modules/versioning/pvp/#identifier","title":"Identifier","text":"<p><code>pvp</code> </p>"},{"location":"modules/versioning/pvp/#references","title":"References","text":"<ul> <li>Haskell Package Versioning Policy</li> </ul>"},{"location":"modules/versioning/pvp/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>widen</code></p>"},{"location":"modules/versioning/pvp/#description","title":"Description","text":"<p>Package Versioning Policy is used with Haskell. It's like semver, except that the first two parts are of the major version. That is, in <code>A.B.C</code>:</p> <ul> <li><code>A.B</code>: major version</li> <li><code>C</code>: minor</li> </ul> <p>The remaining parts are all considered of the patch version, and they will be concatenated to form a <code>number</code>, i.e. IEEE 754 double. This means that both <code>0.0.0.0.1</code> and <code>0.0.0.0.10</code> have patch version <code>0.1</code>.</p> <p>The range syntax comes from Cabal, specifically the build-depends section.</p> <p>This module is considered experimental since it only supports ranges of forms:</p> <ul> <li><code>&gt;=W.X &amp;&amp; &lt;Y.Z</code></li> <li><code>&lt;Y.Z &amp;&amp; &gt;=W.X</code></li> </ul>"},{"location":"modules/versioning/python/","title":"Python Versioning","text":""},{"location":"modules/versioning/python/#identifier","title":"Identifier","text":"<p><code>python</code> </p>"},{"location":"modules/versioning/python/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/python/#description","title":"Description","text":"<p>Python versioning is a little like a mix of PEP440 and Poetry SemVer.</p>"},{"location":"modules/versioning/redhat/","title":"Red Hat Versioning","text":""},{"location":"modules/versioning/redhat/#identifier","title":"Identifier","text":"<p><code>redhat</code> </p>"},{"location":"modules/versioning/redhat/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/redhat/#description","title":"Description","text":"<p>Red Hat versioning is used with container images that are maintained by Red Hat.</p> <p>Red Hat version definitions follow this pattern:</p> <ul> <li>the version of the main component, where major is required, but minor and patch are optional</li> <li>optionally a '.GA\"</li> <li>optionally a hyphen followed by release information</li> <li>the version of Red Hat's release as an integer, optionally followed by a timestamp like: <code>1645808164</code></li> <li>optionally a \"v\"-prefix</li> </ul> <p>Examples of valid Red Hat versions:</p> <ul> <li><code>1</code></li> <li><code>8.5</code></li> <li><code>7.9-628</code></li> <li><code>v0.4.0-383</code></li> <li><code>9.0.0-19.1655192132</code></li> <li><code>1.0.0.GA-20.1770236070</code></li> </ul> <p>Ranges are not supported by this versioning.</p>"},{"location":"modules/versioning/regex/","title":"Regular Expression Versioning","text":""},{"location":"modules/versioning/regex/#identifier","title":"Identifier","text":"<p><code>regex</code> </p>"},{"location":"modules/versioning/regex/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/regex/#description","title":"Description","text":"<p>Regular Expression Versioning is designed to be a flexible fallback versioning approach if Renovate's other versioning schemes don't do the job.</p> <p>The <code>regex</code> scheme makes use of Regular Expression capture groups.</p> <p>The valid capture groups for <code>regex</code> versioning are:</p> <ul> <li><code>major</code>, <code>minor</code>, and <code>patch</code>: at least one of these must be provided. When determining whether a package has updates, these values will be compared in the standard semantic versioning fashion. If any of these fields are omitted, they will be treated as if they were <code>0</code> -- in this way, you can describe versioning schemes with up to three incrementing values.</li> <li><code>build</code>: this capture group can be used after you've already used the <code>major</code>, <code>minor</code> and <code>patch</code> capture groups and need a fourth version part. <code>build</code> updates are handled like <code>patch</code> updates.</li> <li><code>revision</code>: this capture group can be used after you've already used the <code>build</code> capture groups and need a fifth version part. <code>revision</code> updates are handled like <code>patch</code> updates.</li> <li><code>prerelease</code>: this value, if captured, will mark a given release as a prerelease (e.g. unstable). If this value is captured and you have configured <code>\"ignoreUnstable\": true</code>, the given release will be skipped.</li> <li><code>compatibility</code>: this value defines the \"build compatibility\" of a given dependency. A proposed Renovate update will never change the specified compatibility value. For example, if you are pinning to <code>1.2.3-linux</code> (and <code>linux</code> is captured as the compatibility value), Renovate will not update you to <code>1.2.4-osx</code>.</li> </ul> <p>The compatibility concept was originally introduced for Docker versioning but sometimes package authors may use/misuse suffixes to mean compatibility in other versioning schemes.</p> <p>Important: all capture groups must contain only purely numeric values. Even if there is a string prefix which is identical in all available versions, it must not be part of the capture group. For example a <code>build</code> capture group containing <code>r4</code> cannot be evaluated as number; Renovate cannot compare the <code>build</code> in this case. The capture group must be <code>4</code> instead.</p> <p>Here is an example of using <code>regex</code> versioning to correct behavior of the <code>guava</code> Maven package, which misuses suffixes as compatibility indicators:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchPackageNames\": [\"com.google.guava:guava\"],\n      \"versioning\": \"regex:^(?&lt;major&gt;\\\\d+)(\\\\.(?&lt;minor&gt;\\\\d+))?(\\\\.(?&lt;patch&gt;\\\\d+))?(-(?&lt;compatibility&gt;.*))?$\"\n    }\n  ]\n}\n</code></pre> <p>Here is another example, this time for handling <code>python</code> Docker images, which use both pre-release indicators as well as version suffixes for compatibility:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"docker\"],\n      \"matchPackageNames\": [\"python\"],\n      \"versioning\": \"regex:^(?&lt;major&gt;\\\\d+)\\\\.(?&lt;minor&gt;\\\\d+)\\\\.(?&lt;patch&gt;\\\\d+)(?&lt;prerelease&gt;[^.-]+)?(-(?&lt;compatibility&gt;.*))?$\"\n    }\n  ]\n}\n</code></pre> <p>Here is another example, this time for handling Bitnami Docker images, which use <code>build</code> and <code>revision</code> indicators as well as version suffixes for compatibility:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"docker\"],\n      \"matchPackageNames\": [\"bitnami/**\", \"docker.io/bitnami/**\"],\n      \"versioning\": \"regex:^(?&lt;major&gt;\\\\d+)\\\\.(?&lt;minor&gt;\\\\d+)\\\\.(?&lt;patch&gt;\\\\d+)(?:-(?&lt;compatibility&gt;.+)(?&lt;build&gt;\\\\d+)-r(?&lt;revision&gt;\\\\d+))?$\"\n    }\n  ]\n}\n</code></pre> <p>Here is another example, this time for handling <code>ghcr.io/linuxserver/tautulli</code> Docker images, which use <code>major</code> and <code>build</code> indicators with string prefixes:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"docker\"],\n      \"matchPackageNames\": [\"ghcr.io/linuxserver/tautulli\"],\n      \"versioning\": \"regex:^v(?&lt;major&gt;\\\\d+)\\\\.(?&lt;minor&gt;\\\\d+)\\\\.(?&lt;patch&gt;\\\\d+)-ls(?&lt;build&gt;.+)$\"\n    }\n  ]\n}\n</code></pre> <p>Here is another example, this time for handling <code>ghcr.io/linuxserver/openssh-server</code> Docker images, which use <code>patch</code>, <code>build</code> and <code>revision</code> indicators with string prefixes:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"docker\"],\n      \"matchPackageNames\": [\"ghcr.io/linuxserver/openssh-server\"],\n      \"versioning\": \"regex:^(?&lt;major&gt;\\\\d+)\\\\.(?&lt;minor&gt;\\\\d+)_p(?&lt;patch&gt;\\\\d+)-r(?&lt;build&gt;\\\\d)-ls(?&lt;revision&gt;.+)$\"\n    }\n  ]\n}\n</code></pre> <p>The <code>regex</code> scheme also accepts a comparator range wherever a version is matched against a constraint, such as <code>allowedVersions</code> and <code>matchCurrentVersion</code>, evaluated with the scheme's own version comparison: the <code>major</code>, <code>minor</code>, and <code>patch</code> capture groups are compared in that order of precedence, regardless of where they appear in the pattern. For example, calendar versioning <code>YYYY.DD.MM</code> (day before month) sorts correctly by capturing the month as <code>minor</code> and the day as <code>patch</code>, so comparison follows year, then month, then day. The supported operators are <code>&lt;</code>, <code>&lt;=</code>, <code>&gt;</code>, <code>&gt;=</code>, <code>=</code> and <code>==</code>, and several comparators separated by whitespace or a comma are combined with logical AND. Because the comparison uses the scheme's own ordering rather than npm <code>semver</code>, a numeric suffix captured as <code>build</code> is ordered correctly, where <code>semver</code> would treat it as a prerelease and reject the range.</p> <p>For example, to hold a GitLab EE image at or below a required upgrade stop, capture the <code>-ee</code> suffix as a numeric <code>build</code> group and cap it with <code>allowedVersions</code>:</p> <pre><code>{\n  \"packageRules\": [\n    {\n      \"matchDatasources\": [\"docker\"],\n      \"matchPackageNames\": [\"gitlab/gitlab-ee\"],\n      \"versioning\": \"regex:^(?&lt;major&gt;\\\\d+)\\\\.(?&lt;minor&gt;\\\\d+)\\\\.(?&lt;patch&gt;\\\\d+)-ee\\\\.(?&lt;build&gt;\\\\d+)$\",\n      \"allowedVersions\": \"&lt;=19.1.2-ee.0\"\n    }\n  ]\n}\n</code></pre>"},{"location":"modules/versioning/rez/","title":"rez Versioning","text":""},{"location":"modules/versioning/rez/#identifier","title":"Identifier","text":"<p><code>rez</code> </p>"},{"location":"modules/versioning/rez/#references","title":"References","text":"<ul> <li>Rez package manager</li> </ul>"},{"location":"modules/versioning/rez/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>widen</code>, <code>replace</code></p>"},{"location":"modules/versioning/rez/#description","title":"Description","text":"<p>rez versioning was developed to support the rez Package Manager. It's based on Semantic Versioning but includes its own concept of ranges.</p> <p>Use of dots</p> <p>A range is expressed with dots <code>1.2..2</code> means <code>&gt;=1.2.x &lt;2.0.0</code>.</p> <p>No exact versions unless using two equals ==</p> <p>In rez, <code>1.2.3</code> doesn't mean \"exactly 1.2.3\", it actually means <code>&gt;= 1.2.3 &lt;1.2.4</code>. If you want to use an exact version use two equal characters, like this: <code>==1.2.3</code>.</p> <p>Use of pipes</p> <p>rez uses pipes as an OR operator, <code>2.7..3|4</code> means <code>&gt;=2.7 &lt;3 OR 4.x.x</code>.</p> <p>This has not been implemented yet. The current iteration of rez versioning does not support pipes yet.</p>"},{"location":"modules/versioning/rpm/","title":"RPM version Versioning","text":""},{"location":"modules/versioning/rpm/#identifier","title":"Identifier","text":"<p><code>rpm</code> </p>"},{"location":"modules/versioning/rpm/#references","title":"References","text":"<ul> <li>Fedora packaging guidelines - Versioning</li> <li>Fedora package versioning examples</li> <li>Fedora tilde and caret versioning</li> </ul>"},{"location":"modules/versioning/rpm/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/ruby/","title":"Ruby Versioning","text":""},{"location":"modules/versioning/ruby/#identifier","title":"Identifier","text":"<p><code>ruby</code> </p>"},{"location":"modules/versioning/ruby/#references","title":"References","text":"<ul> <li>RubyGems patterns</li> <li>Bundler Gemfile guide</li> <li>Understanding Gem versions</li> </ul>"},{"location":"modules/versioning/ruby/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>widen</code>, <code>replace</code>, <code>pin</code></p>"},{"location":"modules/versioning/ruby/#description","title":"Description","text":"<p>The RubyGems team urges gem developers to follow the Semantic Versioning standard for their gem\u2019s versions, but it is not enforced.</p> <p>Range syntax is similar to npm's but not identical. The main difference is the use of \"pessimistic\" greater than or equals: <code>~&gt;</code></p>"},{"location":"modules/versioning/rust-release-channel/","title":"Rust Release Channel Versioning","text":""},{"location":"modules/versioning/rust-release-channel/#identifier","title":"Identifier","text":"<p><code>rust-release-channel</code> </p>"},{"location":"modules/versioning/rust-release-channel/#references","title":"References","text":"<ul> <li>Rustup - Toolchains</li> </ul>"},{"location":"modules/versioning/rust-release-channel/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>pin</code>, <code>replace</code></p>"},{"location":"modules/versioning/rust-release-channel/#description","title":"Description","text":"<p>This versioning scheme handles Rust release channel identifiers as used by rustup and other Rust-related tools.</p>"},{"location":"modules/versioning/rust-release-channel/#supported-formats","title":"Supported Formats","text":""},{"location":"modules/versioning/rust-release-channel/#channel-names-ranges","title":"Channel Names (Ranges)","text":"<ul> <li><code>stable</code> - matches any stable release (e.g., <code>1.82.0</code>)</li> <li><code>beta</code> - matches any beta release (e.g., <code>1.83.0-beta.5</code>)</li> <li><code>nightly</code> - matches any dated nightly (requires date, e.g., <code>nightly-2025-11-24</code>)</li> </ul>"},{"location":"modules/versioning/rust-release-channel/#versioned-releases","title":"Versioned Releases","text":"<ul> <li>Full versions: <code>1.82.0</code>, <code>1.83.0-beta.5</code></li> <li>Version ranges: <code>1.82</code> (<code>1.82.0</code> &lt;= version &lt; <code>1.83.0</code>)</li> <li>Beta ranges: <code>1.83.0-beta</code> (matches all beta versions for <code>1.83.0</code>)</li> </ul>"},{"location":"modules/versioning/rust-release-channel/#dated-nightlies","title":"Dated Nightlies","text":"<ul> <li><code>nightly-2025-11-24</code> - specific nightly release from a date</li> <li><code>nightly-2015-05-15</code> - historical nightlies (pre-Rust 1.0)</li> </ul>"},{"location":"modules/versioning/rust-release-channel/#compatibility-groups","title":"Compatibility Groups","text":"<ul> <li>Nightly versions are only compatible with other nightlies</li> <li>Stable and beta versions are compatible with each other</li> </ul> <p>This affects which updates Renovate will offer.</p>"},{"location":"modules/versioning/rust-release-channel/#stability","title":"Stability","text":"<p>Only final releases without prerelease suffixes are considered \"stable\":</p> <ul> <li><code>1.82.0</code> \u2192 stable</li> <li><code>1.83.0-beta.5</code> \u2192 not stable</li> <li><code>nightly-2025-11-24</code> \u2192 not stable</li> </ul>"},{"location":"modules/versioning/rust-release-channel/#range-strategies","title":"Range Strategies","text":""},{"location":"modules/versioning/rust-release-channel/#pin","title":"<code>pin</code>","text":"<p>Always pins to the exact new version:</p> <ul> <li><code>stable</code> \u2192 <code>1.83.0</code></li> <li><code>nightly</code> \u2192 <code>nightly-2025-11-24</code></li> </ul>"},{"location":"modules/versioning/rust-release-channel/#replace","title":"<code>replace</code>","text":"<p>Maintains the format style of the current value:</p> <ul> <li><code>stable</code> \u2192 <code>stable</code></li> <li><code>beta</code> \u2192 <code>beta</code></li> <li><code>nightly</code> \u2192 <code>nightly</code></li> <li><code>nightly-2025-11-23</code> \u2192 <code>nightly-2025-11-24</code></li> <li><code>1.82</code> \u2192 <code>1.83</code></li> <li><code>1.82.0</code> \u2192 <code>1.83.0</code></li> <li><code>1.83.0-beta</code> \u2192 <code>1.84.0-beta</code></li> <li><code>1.83.0-beta.1</code> \u2192 <code>1.83.0-beta.5</code></li> </ul>"},{"location":"modules/versioning/rust-release-channel/#majorminorpatch-extraction","title":"Major/Minor/Patch Extraction","text":"<p>For versioned releases:</p> <ul> <li>Extract directly from semver (e.g., <code>1.82.0</code> \u2192 major=1, minor=82, patch=0)</li> <li>Ignore prerelease part (e.g., <code>1.83.0-beta.5</code> \u2192 major=1, minor=83, patch=0)</li> </ul> <p>For nightlies:</p> <ul> <li>Before 2015-05-15 (Rust 1.0 release): major=0, minor=null, patch=null</li> <li>After 2015-05-15: major=1, minor=null, patch=null</li> </ul>"},{"location":"modules/versioning/rust-release-channel/#resources","title":"Resources","text":"<ul> <li>Rust Toolchain Concepts</li> <li>Rust Release History</li> </ul>"},{"location":"modules/versioning/same-major/","title":"Same Major Versioning Versioning","text":""},{"location":"modules/versioning/same-major/#identifier","title":"Identifier","text":"<p><code>same-major</code> </p>"},{"location":"modules/versioning/same-major/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/same-major/#description","title":"Description","text":"<p>The 'Same Major' versioning is designed to handle the case where a version needs to treated as a \"greater than or equal to\" constraint. Specifically, the case where the version say, <code>X.Y.Z</code> signifies a range of compatibility from greater than or equal to <code>X.Y.Z</code> to less than <code>X+1</code>.</p> <p>This process uses Semver-Coerced versioning beneath the surface, single versions (e.g., <code>X.Y.Z</code>) are converted to a range like <code>X+1</code> and then passed to the corresponding semver-coerced method.</p> <p>This method is handy when managing dependencies like dotnet-sdk's rollForward settings. Let's say a project uses dotnet-sdk version <code>3.1.0</code>. It needs to be compatible with any version in the <code>3.x.x</code> range but not with versions in the next major version, like <code>4.x.x</code>.</p> <p>For example:</p> <pre><code>{\n  \"sdk\": {\n    \"version\": \"6.0.300\",\n    \"rollForward\": \"major\"\n  }\n}\n</code></pre> <p>The roll-forward policy to use when selecting an SDK version, either as a fallback when a specific SDK version is missing or as a directive to use a higher version. In this case with <code>major</code> it means that select the latest version with the same major. ie. <code>&gt;= 6.0.300 &lt; 7.0.0</code></p> <p>For such cases, the users would not want Renovate to create an update PR for any version within the range <code>&gt;= 6.0.300 &lt; 7.0.0</code> as it would not change the behaviour on their end, since it is handled by the manager already.</p> <p>Note: You should create a discussion before using this versioning as this is an experimental support and might have some edge cases unhandled.</p>"},{"location":"modules/versioning/semver/","title":"Semantic Versioning","text":""},{"location":"modules/versioning/semver/#identifier","title":"Identifier","text":"<p><code>semver</code> </p>"},{"location":"modules/versioning/semver/#references","title":"References","text":"<ul> <li>Semantic Versioning</li> </ul>"},{"location":"modules/versioning/semver/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/semver/#description","title":"Description","text":"<p>Renovate's <code>semver</code> versioning strictly implements the Semantic Versioning 2.0 specification. Because the SemVer 2.0 specification does not allow ranges, Renovate's <code>semver</code> versioning also does not support ranges.</p> <p>Only use the <code>semver</code> versioning when you mean to follow the full SemVer 2.0 specifications strictly. If you need a more forgiving variant use <code>semver-coerced</code>.</p>"},{"location":"modules/versioning/semver-coerced/","title":"Coerced Semantic Versioning Versioning","text":""},{"location":"modules/versioning/semver-coerced/#identifier","title":"Identifier","text":"<p><code>semver-coerced</code> </p>"},{"location":"modules/versioning/semver-coerced/#references","title":"References","text":"<ul> <li>Semantic Versioning</li> </ul>"},{"location":"modules/versioning/semver-coerced/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/semver-coerced/#description","title":"Description","text":"<p>Renovate's Coerced Semantic Versioning is a forgiving variant of Semantic Versioning 2.0 with coercion enabled for versions.</p> <p>This versioning provides a very forgiving translation of inputs in non-strict-SemVer format into strict SemVer. For example, \"v1\" is coerced into \"1.0.0\", \"2.1\" =&gt; \"2.1.0\", \"~3.1\" =&gt; \"3.1.0\", \"1.1-foo\" =&gt; \"1.1.0\". Look at the Coercion section of this page for more info on input coercion.</p> <p>Since this versioning is very forgiving, it doesn't actually provide the coercion for version ranges. The range functions only accept strict SemVer as input and equivalent to those provided by the Renovate's semver versioning.</p>"},{"location":"modules/versioning/semver-partial/","title":"Partial Semantic Versioning Versioning","text":""},{"location":"modules/versioning/semver-partial/#identifier","title":"Identifier","text":"<p><code>semver-partial</code> </p>"},{"location":"modules/versioning/semver-partial/#references","title":"References","text":"<ul> <li>GitLab CI components - Partial semantic versions</li> </ul>"},{"location":"modules/versioning/semver-partial/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>pin</code>, <code>replace</code></p>"},{"location":"modules/versioning/semver-partial/#description","title":"Description","text":"<p>Renovate's Partial Semantic Versioning supports partial version numbers that resolve to the latest matching full version, following Semantic Versioning 2.0 conventions.</p> <p>This versioning is used by GitLab CI/CD Components to allow specifying incomplete version numbers that automatically resolve to the latest version matching that pattern. This enables you to receive updates within a specific version range without specifying the full version.</p> <p>Version Resolution:</p> <ul> <li><code>1.2</code> \u2192 Selects the latest <code>1.2.*</code> version</li> <li><code>1</code> \u2192 Selects the latest <code>1.*.*</code> version</li> <li><code>~latest</code> \u2192 Selects the latest released version</li> </ul> <p>Example:</p> <p>Given available versions: <code>1.0.0</code>, <code>1.1.0</code>, <code>1.1.1</code>, <code>1.2.0</code>, <code>2.0.0</code>, <code>2.0.1</code>, <code>2.1.0</code>:</p> <ul> <li><code>1</code> resolves to <code>1.2.0</code></li> <li><code>1.1</code> resolves to <code>1.1.1</code></li> <li><code>~latest</code> resolves to <code>2.1.0</code></li> </ul> <p>Pre-release Handling:</p> <p>Pre-release versions (e.g., <code>1.0.1-rc</code>, <code>2.0.0-beta</code>) are not selected by partial versions. You must specify the full version to match a pre-release.</p>"},{"location":"modules/versioning/swift/","title":"Swift Versioning","text":""},{"location":"modules/versioning/swift/#identifier","title":"Identifier","text":"<p><code>swift</code> </p>"},{"location":"modules/versioning/swift/#references","title":"References","text":"<ul> <li>Swift Package Manager</li> </ul>"},{"location":"modules/versioning/swift/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u2705 Ranges are supported.</p> <p>Valid <code>rangeStrategy</code> values are: <code>bump</code>, <code>widen</code>, <code>replace</code></p>"},{"location":"modules/versioning/swift/#description","title":"Description","text":"<p>Swift versioning was developed to support the Swift Package Manager. It's based on Semantic versioning but includes its own concept of ranges.</p>"},{"location":"modules/versioning/ubuntu/","title":"Ubuntu Versioning","text":""},{"location":"modules/versioning/ubuntu/#identifier","title":"Identifier","text":"<p><code>ubuntu</code> </p>"},{"location":"modules/versioning/ubuntu/#references","title":"References","text":"<ul> <li>Ubuntu meta-release</li> <li>Ubuntu distro info data</li> </ul>"},{"location":"modules/versioning/ubuntu/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/ubuntu/#description","title":"Description","text":"<p>Ubuntu versioning is used for Ubuntu container images that are referenced by their release version or a codename.</p> <p>Versions to which this scheme applies are e.g. <code>24.04</code>, <code>noble</code> and <code>noble-20240423</code>.</p>"},{"location":"modules/versioning/unity3d/","title":"Unity3D Versioning","text":""},{"location":"modules/versioning/unity3d/#identifier","title":"Identifier","text":"<p><code>unity3d</code> </p>"},{"location":"modules/versioning/unity3d/#references","title":"References","text":"<ul> <li>Unity version define expressions</li> </ul>"},{"location":"modules/versioning/unity3d/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/unity3d/#description","title":"Description","text":"<p>Unity versioning follow semantic versioning, followed by a letter, number and an optional hash:</p> <ul> <li>Major version is the year of release</li> <li>Minor and patch version are incremental, starting at 0</li> <li>The letter denotes a stream (alpha, beta, final release, etc.)</li> <li>The number is a growing index</li> <li>The hash is calculated by Unity internally and irrelevant for comparison</li> </ul> <p>Examples:</p> <ul> <li><code>2023.2.10f1 (316c1fd686f6)</code></li> <li><code>2023.3.0a17</code></li> <li><code>2023.3.0b4 (2cd31b2a2ee2)</code></li> </ul>"},{"location":"modules/versioning/unity3d-packages/","title":"Unity3D Packages Versioning","text":""},{"location":"modules/versioning/unity3d-packages/#identifier","title":"Identifier","text":"<p><code>unity3d-packages</code> </p>"},{"location":"modules/versioning/unity3d-packages/#references","title":"References","text":"<ul> <li>Unity Package Manager - Versioning</li> <li>Unity Package Manager - Lifecycle</li> </ul>"},{"location":"modules/versioning/unity3d-packages/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/unity3d-packages/#description","title":"Description","text":"<p>Unity versioning follow semantic versioning, followed optionally by <code>-exp.#</code> or <code>-pre.#</code>: https://docs.unity3d.com/Manual/upm-lifecycle.html</p> <p>Examples:</p> <ul> <li><code>0.1.2</code></li> <li><code>1.2.3-exp.1</code></li> <li><code>1.3.0-pre.1</code></li> <li><code>1.4.0-preview.1</code></li> </ul>"},{"location":"modules/versioning/vcpkg/","title":"vcpkg Versioning","text":""},{"location":"modules/versioning/vcpkg/#identifier","title":"Identifier","text":"<p><code>vcpkg</code> </p>"},{"location":"modules/versioning/vcpkg/#references","title":"References","text":"<ul> <li>vcpkg - Versioning</li> </ul>"},{"location":"modules/versioning/vcpkg/#rangesconstraints","title":"Ranges/Constraints","text":"<p>\u274c No range support.</p>"},{"location":"modules/versioning/vcpkg/#description","title":"Description","text":"<p>Renovate vcpkg versioning targets the per-port version schemes used by the vcpkg package manager.</p> <p>A vcpkg port declares one of four version fields, each with its own comparison rules:</p> <ul> <li><code>version</code> is a relaxed dotted-number scheme that allows extra components, like <code>3.1.4</code> or <code>1.2.3.4</code></li> <li><code>version-semver</code> is strict Semantic Versioning, like <code>3.1.4-rc.1</code></li> <li><code>version-date</code> is an ISO calendar date in <code>YYYY-MM-DD</code> form, optionally followed by dot-separated disambiguation identifiers like <code>2024-01-15.1.2</code></li> <li><code>version-string</code> is opaque text without a defined ordering, like <code>bla-bla-2024-08-fixed-typo</code></li> </ul> <p>Renovate detects which scheme applies by inspecting the input, then delegates to the matching underlying versioning module (<code>semver</code>, <code>loose</code>, or a direct date comparison). vcpkg itself takes the scheme from the field a version is published under, not from its text, so the two can disagree. A port that publishes dotted text under <code>version-string</code>, like <code>2.3.1</code>, is treated as a <code>version</code> here and ordered against the port's other dotted versions, which vcpkg would refuse to compare.</p> <p>A vcpkg port can also carry a <code>port-version</code> integer for changes that affect packaging without changing the upstream source. The canonical text form combines the base version and port-version with a <code>#</code> separator, like <code>1.2.3#1</code>, and the port-version is omitted when zero. Renovate treats the port-version as a tie-breaker after the base versions compare equal, so <code>1.2.3#1</code> is greater than <code>1.2.3#0</code>, while <code>1.2.4</code> is still greater than <code>1.2.3#1</code> because the base version wins.</p> <p>vcpkg has no range expression syntax. Manifest <code>dependencies</code> carry a single <code>version&gt;=</code> lower bound, and <code>overrides</code> carry an exact pin. In both cases the value is a bare version, with no operator, so Renovate compares values for equality like other versioning modules without ranges.</p>"},{"location":"user-stories/maintaining-aur-packages-with-renovate/","title":"Maintaining AUR packages with Renovate","text":""},{"location":"user-stories/maintaining-aur-packages-with-renovate/#maintaining-aur-packages-with-renovate","title":"Maintaining AUR packages with Renovate","text":"<p>This article was written by Jamie Magee and originally published on Jamie Magee's blog.</p> <p>Note</p> <p>Jamie Magee helps to maintain Renovate. They obviously like Renovate, and want you to use it.</p> <p>One big advantage that Arch Linux has over other distributions, apart from being able to say \u201cBTW I use Arch.\u201d, is the Arch User Repository (AUR). It\u2019s a community-driven repository with over 80,000 packages. If you\u2019re looking for a package, chances are you'll find it in the AUR.</p> <p>Keeping all those packages up to date, takes a lot of manual effort by a lot of volunteers. People have created and used tools, like <code>urlwatch</code> and <code>aurpublish</code>, to let them know when upstream releases are cut and automate some parts of the process. I know I do. But I wanted to automate the entire process. I think Renovate can help here.</p>"},{"location":"user-stories/maintaining-aur-packages-with-renovate/#updating-versions-with-renovate","title":"Updating versions with Renovate","text":"<p>Renovate is an automated dependency update tool. You might have seen it opening pull requests on GitHub and making updates for npm or other package managers, but it\u2019s a lot more powerful than just that.</p> <p>Renovate has a couple of concepts that I need to explain first: datasources and managers. Datasources define where to look for new versions of a dependency. Renovate comes with over 50 different datasources, but the one that is important for AUR packages is the <code>git-tags</code> datasource. Managers are the Renovate concept for package managers. There isn\u2019t an AUR or <code>PKGBUILD</code> manager, but there is a regex manager that I can use.</p> <p>I can create a <code>renovate.json</code> configuration with the following custom manager configuration:</p> renovate.json<pre><code>{\n  \"customManagers\": [\n    {\n      \"customType\": \"regex\",\n      \"managerFilePatterns\": [\"/(^|/)PKGBUILD$/\"],\n      \"matchStrings\": [\n        \"pkgver=(?&lt;currentValue&gt;.*) # renovate: datasource=(?&lt;datasource&gt;.*) depName=(?&lt;depName&gt;.*)\"\n      ],\n      \"extractVersionTemplate\": \"^v?(?&lt;version&gt;.*)$\"\n    }\n  ]\n}\n</code></pre> <p>Breaking that down:</p> <ul> <li>The <code>managerFilePatterns</code> setting tells Renovate to look for any <code>PKGBUILD</code> files in a repository</li> <li>The <code>matchStrings</code> is the regex format to extract the version, datasource, and dependency name from the <code>PKGBUILD</code></li> <li>The <code>extractVersionTemplate</code> is to handle a \u201cv\u201d in front of any version number that is sometimes added to Git tags</li> </ul> <p>And here\u2019s an extract from the PKGBUILD for the bicep-bin AUR package that I maintain:</p> <pre><code>pkgver=0.15.31 # renovate: datasource=github-tags depName=Azure/bicep\n</code></pre> <p>Here I\u2019m configuring Renovate to use the <code>github-tags</code> datasource and to look in the <code>Azure/bicep</code> GitHub repository for new versions. That means it\u2019ll look in the list of tags for the <code>Azure/bicep</code> repository for any new versions. If Renovate finds any new versions, it\u2019ll automatically update the <code>PKGBUILD</code> and open a pull request with the updated version.</p> <p>So I\u2019ve automated the <code>PKGBUILD</code> update, but that\u2019s only half of the work. The checksums and <code>.SRCINFO</code> must be updated before pushing to the AUR. Unfortunately, Renovate can\u2019t do that (yet, see Renovate issue #16923), but GitHub Actions can!</p>"},{"location":"user-stories/maintaining-aur-packages-with-renovate/#updating-checksums-and-srcinfo-with-github-actions","title":"Updating checksums and <code>.SRCINFO</code> with GitHub Actions","text":"<p>Updating the checksums with <code>updpkgsums</code> is easy, and generating an updated <code>.SRCINFO</code> with <code>makepkg --printsrcinfo &gt; .SRCINFO</code> is straightforward too. But doing that for a whole repository of AUR packages is going to be a little trickier. So let me build up the GitHub actions workflow step-by-step.</p> <p>First, I only want to run this workflow on pull requests targeting the <code>main</code> branch.</p> <pre><code>on:\n  pull_request:\n    types:\n      - opened\n      - synchronize\n    branches:\n      - main\n</code></pre> <p>Next, I\u2019m going to need to check out the entire history of the repository, so I can compare the files changed in the latest commit with the Git history.</p> <pre><code>jobs:\n  updpkgsums:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0\n        with:\n          fetch-depth: 0\n          ref: ${{ github.ref }}\n</code></pre> <p>Getting the package that changed in a pull request requires a little bit of shell magic.</p> <pre><code>- name: Find updated package\n  run: |\n    #!/usr/bin/env bash\n    set -euxo pipefail\n\n    echo \"pkgbuild=$(git diff --name-only origin/main origin/${GITHUB_HEAD_REF} \"*PKGBUILD\" | head -1 | xargs dirname)\" &gt;&gt; $GITHUB_ENV\n</code></pre> <p>Now I\u2019ve found the package that changed in the Renovate pull request, I can update the files.</p> <p>This step in the workflow uses a private GitHub Action that I have in my <code>aur-packages</code> repository. I\u2019m not going to break it down here, but at its core it runs <code>updpkgsums</code> and <code>makepkg --printsrcinfo &gt; .SRCINFO</code> with a little extra configuration required to run Arch Linux on GitHub Actions runners. You can check out the full code on GitHub.</p> <pre><code>- name: Validate package\n  if: ${{ env.pkgbuild != '' }}\n  uses: ./.github/actions/aur\n  with:\n    action: 'updpkgsums'\n    pkgname: ${{ env.pkgbuild }}\n</code></pre> <p>Finally, once the <code>PKGBUILD</code> and <code>.SRCINFO</code> are updated I need to commit that change back to the pull request.</p> <pre><code>- name: Commit\n  if: ${{ env.pkgbuild != '' }}\n  uses: stefanzweifel/git-auto-commit-action@3ea6ae190baf489ba007f7c92608f33ce20ef04a # v4.16.0\n  with:\n    file_pattern: '*/PKGBUILD */.SRCINFO'\n</code></pre> <p>Check out this pull request for <code>bicep-bin</code> where Renovate opened a pull request, and my GitHub Actions workflow updated the <code>b2sums</code> in the <code>PKGBUILD</code> and updated the <code>.SRCINFO</code>.</p> <p>But why stop there? Let\u2019s talk about publishing.</p>"},{"location":"user-stories/maintaining-aur-packages-with-renovate/#publishing-to-the-aur","title":"Publishing to the AUR","text":"<p>Each AUR package is its own Git repository. So to update a package in the AUR, I only need to push a new commit with the updated <code>PKGBUILD</code> and <code>.SRCINFO</code>. Thankfully, KSXGitHub created the <code>github-actions-deploy-aur</code> GitHub Action to streamline the whole process.</p> <p>If I create a new GitHub Actions workflow to publish to the AUR, I can reuse the first two steps from my previous workflow to check out the repository and find the updated package. Then all I need to do is to use the <code>github-actions-deploy-aur</code> GitHub Action:</p> <pre><code>- name: Publish package\n  uses: KSXGitHub/github-actions-deploy-aur@065b6056b25bdd43830d5a3f01899d0ff7169819 # v2.6.0\n  if: ${{ env.pkgbuild != '' }}\n  with:\n    pkgname: ${{ env.pkgbuild }}\n    pkgbuild: ${{ env.pkgbuild }}/PKGBUILD\n    commit_username: ${{ secrets.AUR_USERNAME }}\n    commit_email: ${{ secrets.AUR_EMAIL }}\n    ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }}\n</code></pre>"},{"location":"user-stories/maintaining-aur-packages-with-renovate/#all-together-now","title":"All together now","text":"<p>If you own any AUR packages and want to automate some of the maintenance burden, check out my AUR packages template GitHub repository. It contains all of the steps I showed in this blog post. And if you want to see how it works in practice, check out my AUR packages GitHub repository.</p>"},{"location":"user-stories/swissquote/","title":"Swissquote","text":""},{"location":"user-stories/swissquote/#how-swissquote-is-keeping-software-dependencies-up-to-date-with-renovate","title":"How Swissquote is keeping software dependencies up-to-date with Renovate","text":"<p>This article was originally published on Medium by St\u00e9phane Goetz, Principal Software Engineer at Swissquote Bank.</p> <p>Swissquote has more than 1000 distinct applications running in production. They come in many different flavors including services, daemons, and web apps, and their age can be counted from days to more than a decade. While there are many topics of interest when talking about software maintenance, today\u2019s topic is software dependencies. We\u2019ll see in this article why it\u2019s important to keep them up-to-date and why it\u2019s not as simple as one may think.</p> <p>Software dependencies have been a heavily discussed topic in the past months. One aspect that\u2019s discussed a lot is security issues like the recent Log4Shell, Supply chain attacks, an expiring SSL Certificate. But there are also other aspects like bugs caused by your dependencies.</p> <p>Depending on third-party software is a sword of Damocles; you never know when a new issue will force you to drop everything to upgrade your software.</p> <p></p> XKCD comic 2347 is always relevant when talking about dependencies. <p>Each software dependency is a risk. For example: SQL Injections, is the ORM you are using properly escaping the content you are passing to it? Will your current driver be able to connect to your database if it gets upgraded? Every dependency, while solving an issue for you, will also bring new risks to your software. How can you mitigate those risks?</p> <p>If the title of the article is of any help, the idea would be to keep your dependencies up-to-date to fix bugs, security issues, and more.</p>"},{"location":"user-stories/swissquote/#i-dont-feel-like-upgrading-what-if","title":"I don\u2019t feel like upgrading, what if?","text":"<p>But what if the upgrades do the complete opposite? What if the new version introduces a new security issue?</p> <p>For example, a new version of a dependency could be victim of a supply chain attack. If you never update your dependencies, you won\u2019t get the infected version. Sounds fair, right?</p> <p>It\u2019s a valid argument, but your application doesn\u2019t exist in a vacuum; many external factors could force you to upgrade at some point, and when it happens it\u2019s usually at the wrong time.</p> <p>Let\u2019s go through some examples.</p>"},{"location":"user-stories/swissquote/#an-external-factor-has-changed-forcing-you-to-change-your-app","title":"An external factor has changed, forcing you to change your app","text":"<p>Let\u2019s say the machine your apps runs on is obsolete and you need to move to another machine. This could be as simple as \u201cinstall app on machine; done\u201d but usually ends up with:</p> <ol> <li>The newer OS version prevents you from installing an outdated runtime</li> <li>You need to find a compatible runtime for your new hardware</li> <li>Your app\u2019s dependencies aren\u2019t compatible with your new runtime, you need to update them as well</li> </ol> <p>Instead of a single change, you now have a combination of changes, each can go wrong in a different way.</p>"},{"location":"user-stories/swissquote/#a-new-vulnerability-is-found-on-a-library-you-depend-on","title":"A new vulnerability is found on a library you depend on","text":"<p>As we\u2019ve covered at the beginning of the article this can happen and can be an all-hands-on-deck kind of situation. Imagine a legacy application; continuous integration is constantly failing \u2014 or worse it may not even exist. How long do you think it will take to deploy that single library update?</p>"},{"location":"user-stories/swissquote/#the-team-already-has-too-many-dependencies-in-too-many-different-versions","title":"The team already has too many dependencies in too many different versions","text":"<p>That\u2019s unfortunate, but it will happen if your team or company exists for long enough. Upgrading libraries is not only about bumping versions, sometimes it\u2019s also about replacing a library by another library.</p>"},{"location":"user-stories/swissquote/#how-do-you-see-your-dependencies","title":"How do you see your dependencies?","text":"<p>Look at your software as if it was a train. You are the locomotive and each wagon is a dependency, how long would your train be? Locomotives can pull dozens, even hundreds of wagons, but they eventually reach a limit. The situation is the same for your brain, each dependency adds to your cognitive load, at some point it\u2019s just too much. You are using three different libraries for caching? There is a chance you need to know how each library works, and your present and future teammates might have to know that too.</p> <p>Which of these two would you prefer to start with:</p> <ul> <li>A project that is fairly up-to-date where you can bump the dependency, run the deployment pipeline and go back to your day</li> <li>A project that wasn\u2019t touched in years; every dependency is outdated and Continuous Integration is red on all branches, if running at all</li> </ul> <p>Am I exaggerating with my examples? Maybe a little, but I have seen cases very close to those.</p> <p>Let me ask you some questions about your projects:</p> <ul> <li>How many times did you create a project and never upgrade its dependencies?</li> <li>How many times did you have to get back to an old project, and had to use a new library but couldn\u2019t because there is another library at an old version that isn\u2019t compatible?</li> <li>How fast can you upgrade a single dependency on all your applications?</li> </ul> <p>As time goes forward, projects come and go, you will most likely have decade-old, and recent ones. Some might be using the latest version of Java with the latest Spring, some with slightly outdated libraries and others might be using Stripes and libraries that have had no release in 7 years.</p> <p>Every company that\u2019s been around for sometime has that old project still running. People talk about it laughingly but become livid when a request comes to change anything in it.</p> <p></p> There is a fix to make on that project, the last person working on it left three years ago."},{"location":"user-stories/swissquote/#dependencies-at-swissquote","title":"Dependencies at Swissquote","text":"<p>I\u2019ve identified three main approaches people use to upgrade their dependencies at Swissquote:</p> <ol> <li>Critical fixes only; update dependencies that have a CVE attached</li> <li>Opportunistic; also known as the boy scout rule, leave the project with more up-to-date dependencies than you found it</li> <li>Update your dependencies regularly; manually or with a tool</li> </ol>"},{"location":"user-stories/swissquote/#critical-fixes-only","title":"Critical fixes only","text":"<p>Every once in a while, a library gets an update that fixes a vulnerability. Our security team is on the lookout for critical vulnerabilities and will quickly warn all impacted teams if an update needs to be done.</p> <p>We also configured GitHub\u2019s Dependabot Alerts that will inform teams that a vulnerability has been discovered and which version they should upgrade to to be safe (more on this later).</p> <p>This approach, while it mostly works, can be very risky. If the project hasn\u2019t been touched for quite a while, the number of dependencies to update can be high depending on the vulnerability and the time to update will increase significantly.</p>"},{"location":"user-stories/swissquote/#opportunistic","title":"Opportunistic","text":"<p>This rule is simple, when you receive a task on a project, the first step is to upgrade its dependencies. Once that is done, you can go ahead with the implementation of your task.</p> <p>This approach is similar to fixing a bit of tech debt with every business project you take on, it helps to stay ahead in case a vulnerability comes up and keep a baseline for all your projects.</p>"},{"location":"user-stories/swissquote/#update-your-dependencies-regularly","title":"Update your dependencies regularly","text":"<p>This one sounds easy, every few weeks you check what\u2019s outdated, bump the versions and run your CI. If it succeeds, you push the change. Maybe there is even a way to automate that?</p>"},{"location":"user-stories/swissquote/#lets-give-renovate-a-try","title":"Let's give Renovate a try","text":"<p>One day in November 2019, I discovered that Renovate provides a Docker image that you can run on-premise with your own package registries. The app creates Pull Requests automatically to inform you of dependencies updates and the CI can then build it automatically so you know if it\u2019s safe to merge or not.</p> <p>On our first try, we enabled 30 repositories, a cron task was running every hour to create Pull Requests.</p> <p>We received 700 Pull Requests in the first month, it was a never ending Pull Request whack-a-mole: every time we merged one, another replaced it.</p> <p></p> Me and my team merging Pull Requests. <p>The awesome thing with Renovate is that it\u2019s very configurable, and this configuration can be shared. Very early on we created a shared configuration for our team with some custom policies, here are a few things we decided to do:</p> <ul> <li>Group PRs for <code>minor</code> and <code>patch</code> dependencies</li> <li>Internal dependencies could create a PR anytime of the day</li> <li>Third party dependencies could create PRs only during the weekend</li> </ul> <p>This helped a lot to reduce the noise in PRs, the second month we got 400 Pull Requests, and on the third month only 200.</p>"},{"location":"user-stories/swissquote/#what-we-learned-from-automating-dependencies-updates","title":"What we learned from automating dependencies updates","text":"<ul> <li>You need to be confident that your code coverage will warn you in case of updates. At the beginning we missed quite a few breaking updates because the build was green but the application broke as soon as it was deployed</li> <li>Once you\u2019re confident enough, auto-merge is a must have. In our team we enabled Renovate on about 100 of our repositories and generally spend 1\u20132 hours per week to stay up-to-date</li> <li>\u201cOn the bleeding edge it\u2019s not the edge that\u2019s bleeding; it\u2019s you\u201d. When updating to a new major version as soon as it\u2019s released you might encounter some surprises. It happened to us a few times that a patch version breaks the library. Usually a fix came out the next day, but we still spent a few hours debugging why the update broke our applications. We\u2019ve opened quite a few Issues and sent some PRs to fix issues like this</li> <li>Updating dependencies is one thing, but when should you release them? As our team mostly provides libraries, we don\u2019t want to release them on every dependency upgrade (as this would create PRs downstream and create noise for them). We\u2019ve decided to release right after critical upgrades or contributions and a dashboard informs us when a repository hasn\u2019t been released for 30 days</li> </ul>"},{"location":"user-stories/swissquote/#a-word-on-renovate","title":"A word on Renovate","text":"<p>The next section could look like an ad or a sponsored post; it\u2019s not. We\u2019re just big fans of the product.</p> <p>The ease of getting started with Renovate\u2019s Docker image is what got us onboard easily. But what confirmed our choice is the insane crazy amount of features and configuration options.</p> <p>Some features and options we enjoy:</p> <ul> <li>Shared configurations (presets), we have a Swissquote default configuration we set for all repositories, each team can extend it with their own practices</li> <li>Integration with GitHub\u2019s Dependabot alerts to raise the priority and send security remediation PRs as soon as possible</li> <li>Each rule can be customized either globally or specified per package</li> <li>Works with your private package registry</li> <li>Supports more than 70 languages and package managers: Maven, Docker, npm, Docker Compose, Python</li> <li>If you are using dependencies in a custom way, there is a <code>customManagers</code> option that allows you to transform patterns into dependencies</li> </ul> <p>There is an on-premise option, but you can also use the Mend Renovate App. On our side, we\u2019re not using the on-premise but rather a custom scheduler using the open source Docker image.</p>"},{"location":"user-stories/swissquote/#some-stats-after-four-years-with-renovate","title":"Some stats after four years with Renovate","text":"<p>The figures here have been updated in November 2023</p> <p>We started using Renovate in 2019, using the (now deprecated) <code>renovate/pro</code> Docker image. We installed it as a GitHub app and some early adopters started to use it.</p> <p>Pretty quickly, we ran into the biggest limitation; this Docker image runs all repositories one after another. A single loop was taking hours and made it very difficult to check the logs as they weren\u2019t separated per repository.</p> <p>This is why we created our own scheduler; each hour, all repositories would be queued to run, and GitHub app events would schedule a single repository. We started to collect metrics and store the logs separately for each repository.</p> <p>Here is the dashboard for our current scheduler:</p> <p></p> A dashboard we made at Swissquote to keep our Renovate runs in check, November 2023. <p>We don\u2019t force any team to use Renovate, each team can decide to opt-in and do it for each project separately.</p> <p>Some statistics:</p> <ul> <li>857 repositories enabled out of about 2000 active repositories</li> <li>11000 PRs were merged since we installed Renovate</li> <li>239 PRs were merged last month</li> <li>2 SSDs died on our Renovate machine with the number of projects to clone again and again</li> </ul>"},{"location":"user-stories/swissquote/#how-does-the-scheduler-work","title":"How does the scheduler work?","text":"<p>The scheduler is a Node.js application that handles an in-memory queue and starts Docker containers to run Renovate on. Our custom scheduler application regularly sends data points to our InfluxDB database, which we then display in Grafana.</p> <p>Here is how it works:</p> <p></p> A diagram explaining how our scheduler interacts with Renovate. <p>All the information on the dashboard you saw above is created from three measurements:</p> <ol> <li>Queue: Every 5 minutes, we send the status of the queue size and the number of jobs currently running</li> <li>Webhook: When receiving a webhook request from GitHub, we send a data point on the duration of treatment for that item</li> <li>Runs: After each run, we send a data point on the run duration, success, and number of PRs created/updated/merged/closed</li> </ol> <p>The queue is filled by webhooks or by re-queueing all repositories at regular intervals. For each repository, we start a Renovate Docker image and pipe its logs to a file. This allows us to run ten workers in parallel. We could technically run more workers but decided not to hammer our GitHub instance.</p> <p>You can find more details in this discussion on the Renovate repository, from November 2023.</p>"},{"location":"user-stories/swissquote/#the-future-of-renovate-at-swissquote","title":"The future of Renovate at Swissquote","text":"<p>Not all teams are using Renovate at this stage, as some teams prefer to manually update their dependencies. We would like to enable Renovate for critical dependencies in all repositories and hope to make it useful and easy so other teams will adopt it for more dependencies.</p>"},{"location":"user-stories/swissquote/#how-should-i-get-started-with-renovate","title":"How should I get started with Renovate?","text":"<p>If this article convinced you, how should you get started?</p> <ol> <li>First, if you know your software is very outdated; don\u2019t enable Renovate right away, you will be swamped with Pull Requests, we\u2019ve been there and it\u2019s not a happy memory. First take the time to manually upgrade all that you can. <code>npm outdated</code>, <code>mvn versions:display-dependency-updates</code> or your package manager\u2019s equivalent of that command can help you get started, test your application and commit that</li> <li>You can now enable Renovate and will receive a Pull Request to add a configuration file, read this first PR carefully as it will explain what kind of PRs you are going to receive and when</li> <li>Make sure to pick a schedule, otherwise you will receive PRs at any time of the day. Our team schedules all third party dependencies on the weekend, automatically merging when the tests pass and we investigate the failing ones on Monday morning</li> <li>Group Pull Requests, if every PR has to go through CI, it can become quite heavy, once most PRs succeed, you can start grouping minor and patch updates so that you get a single PR per repository. Investigating issues becomes a bit trickier because of that. To give you some numbers out of 90 repositories enabled with Renovate, we have on average 4 PRs to investigate per week. Everything else is automatically merged</li> <li>Enable auto merging after some time, make sure your tests are solid and that you won\u2019t upgrade something that wasn\u2019t tested and will break once in production</li> </ol>"},{"location":"user-stories/swissquote/#is-all-this-effort-worth-it","title":"Is all this effort worth it?","text":"<p>The short answer is yes!</p> <p>It took us almost a year, way longer than we thought, to catch up with the latest version of everything in our technical stack. But once we were confident enough in our tests to enable automatic merging of Pull Requests we were satisfied with the work we did to update our software stack. We knew we would be ready when an unplanned change arrives.</p> <p>When that day came, in December 2021 with Log4Shell, it was a matter of hours to release the freshly merged Pull Requests, deploy the few applications we had, and notify the teams depending on our libraries. We were so quick to do it, in fact, that we had to do that three times with the chain of vulnerabilities that was found in Log4j that week.</p> <p>Keep in mind that keeping your dependencies up-to-date is not just about the tooling, it\u2019s also about having a process:</p> <ul> <li>When will you merge this PR?</li> <li>How will you handle the PR that doesn\u2019t build?</li> <li>The new major version of an external library that\u2019s not yet compatible with the rest of your libraries?</li> <li>When will you release this constant flow of library updates?</li> <li>Do you want PRs during the day? During the night? Or on weekends only?</li> </ul> <p>We know the answers for our situation, we\u2019ll let you decide what the answers are for you. </p>"}]}