Detailed information for all the options you can use to customize how Dependabot maintains your repositories.
This article provides reference information for the configuration options available in the dependabot.yml file. Use these options to customize how Dependabot monitors package ecosystems, schedules updates, and creates pull requests. For an overview of the dependabot.yml file and how it works, see About the dependabot.yml file.
All options marked with a icon also change how Dependabot creates pull requests for security updates, except where target-branch is used.
| Key | Location | Purpose |
|---|---|---|
version |
Top level | Dependabot configuration syntax to use. Always: 2. |
updates |
Top level | Section where you define each package-ecosystem to update. |
package-ecosystem |
Under updates |
Define a package manager to update. |
directories or directory |
Under each package-ecosystem entry |
Define the location of the manifest or other definition files to update. |
schedule.interval |
Under each package-ecosystem entry |
Define whether to look for version updates: daily, weekly, monthly, quarterly, semiannually, yearly, or cron. |
Optionally, you can also include a top-level registries key to define access details for private registries, see Top-level registries key.
# Basic `dependabot.yml` file with
# minimum configuration for two package managers
version: 2
updates:
# Enable version updates for npm
- package-ecosystem: "npm"
# Look for `package.json` and `lock` files in the `root` directory
directory: "/"
# Check the npm registry for updates every day (weekdays)
schedule:
interval: "daily"
# Enable version updates for Docker
- package-ecosystem: "docker"
# Look for a `Dockerfile` in the `root` directory
directory: "/"
# Check for updates once a week
schedule:
interval: "weekly"
For a real-world example of a dependabot.yml file, see Dependabot's own configuration file.
allow Use to define exactly which dependencies to maintain for a package ecosystem. Often used with the ignore option. For examples, see Controlling which dependencies are updated by Dependabot.
Dependabot default behavior:
When allow is specified Dependabot uses the following process:
Check for all explicitly allowed dependencies.
Then filter out any ignored dependencies or versions.
If a dependency is matched by an allow and an ignore statement, then it is ignored.
| Parameters | Purpose |
|---|---|
dependency-name |
Allow updates for dependencies with matching names, optionally using * to match zero or more characters. |
dependency-type |
Allow updates for dependencies of specific types. |
update-types |
Allow updates to one or more semantic versioning levels. Supported values: version-update:semver-patch, version-update:semver-minor, and version-update:semver-major. |
dependency-name (allow)For most package managers, you should define a value that will match the dependency name specified in the lock or manifest file. A few systems have more complex requirements.
| Package manager | Format required | Example |
|---|---|---|
| Gradle and Maven | groupId:artifactId |
org.kohsuke:github-api |
| Docker for image tags | The full name of the repository | For an image tag of <account ID>.dkr.ecr.us-west-2.amazonaws.com/base/foo/bar/ruby:3.1.0-focal-jemalloc, use base/foo/bar/ruby. |
dependency-type (allow)| Dependency types | Supported by package managers | Allow updates |
|---|---|---|
direct |
All | All explicitly defined dependencies. |
indirect |
bundler, pip, composer, cargo, gomod, uv |
Dependencies of direct dependencies (also known as sub-dependencies, or transitive dependencies). |
all |
All | All explicitly defined dependencies. For bundler, pip, composer, cargo, gomod, uv, also the dependencies of direct dependencies. |
production |
bundler, composer, mix, maven, npm, pip, uv (not all managers) |
Only to dependencies defined by the package manager as production dependencies. |
development |
bundler, composer, mix, maven, npm, pip, uv (not all managers) |
Only to dependencies defined by the package manager as development dependencies. |
update-types (allow)update-types only affects version updates, not security updates.
Specify which semantic versions (SemVer) to allow.
SemVer is an accepted standard for defining versions of software packages, in the form x.y.z. Dependabot assumes that versions in this form are always major.minor.patch. The update-types value is a list of one or more strings.
version-update:semver-patch to allow patch releases.version-update:semver-minor to allow minor releases.version-update:semver-major to allow major releases.When update-types is omitted from an allow rule, all update types are allowed for that rule.
You can combine update-types with dependency-name or dependency-type to further narrow allowed updates. For examples of how you can combine these options, see Controlling which dependencies are updated by Dependabot.
assignees Specify individual assignees for all pull requests raised for a package ecosystem. For examples, see Customizing Dependabot pull requests to fit your processes.
Dependabot default behavior:
When assignees is defined:
target-branch defines updates to a non-default branch.Assignees must have write access to the repository. For organization-owned repositories, organization members with read access are also valid assignees.
commit-message Define the format for commit messages. Since the titles of pull requests are written based on commit messages, this setting also impacts the titles of pull requests. For examples, see Customizing Dependabot pull requests to fit your processes.
Dependabot default behavior:
When commit-message is defined:
target-branch defines updates to a non-default branch.| Parameters | Purpose |
|---|---|
prefix |
Defines a prefix for all commit messages and pull request titles. |
prefix-development |
On supported systems, defines a different prefix to use for commits that update dependencies in the Development dependency group. |
include |
Follow the commit message prefix with additional information. |
Tip
When pull requests are raised for grouped updates, the branch name and pull request title are defined by the group IDENTIFIER, see groups.
prefixprefix-development is also defined.prefix-developmentSupported by: bundler, composer, mix, maven, npm, pip, and uv.
prefix parameter.includescopedeps or deps-dev.cooldown Defines a cooldown period for dependency updates, allowing updates to be delayed for a configurable number of days. The cooldown option is only available for version updates, not security updates.
This feature enables users to customize how often Dependabot generates new version updates, offering greater control over update frequency. For examples, see Optimizing the creation of pull requests for Dependabot version updates.
Dependabot default behavior:
schedule.interval.cooldown is not configured. A new version is not considered for a version update until 3 days after its release. This default cooldown does not apply to security updates.You can configure the cooldown option to customize these default cooldown periods and control which dependencies they apply to. When cooldown is defined:
schedule.interval settings.versioning-strategy setting.dependabot.yml.cooldownYou can specify the duration of the cooldown using the options below.
| Parameter | Description |
|---|---|
default-days |
Default cooldown period for dependencies without specific rules (optional). If not specified, Dependabot applies a default cooldown of 3 days. |
semver-major-days |
Cooldown period for major version updates (optional, applies only to package managers supporting SemVer). |
semver-minor-days |
Cooldown period for minor version updates (optional, applies only to package managers supporting SemVer). |
semver-patch-days |
Cooldown period for patch version updates (optional, applies only to package managers supporting SemVer). |
include |
List of dependencies to apply cooldown (up to 150 items). Supports wildcards (*). |
exclude |
List of dependencies excluded from cooldown (up to 150 items). Supports wildcards (*). |
The table below shows the package managers that support cooldown. The default-days option is supported for all package managers listed, while semver-major-days, semver-minor-days, and semver-patch-days are supported only where indicated.
| Package manager | Default days supported | SemVer-bump days supported |
|---|---|---|
| Bazel | ||
| Bundler | ||
| Bun | ||
| Cargo | ||
| Composer | ||
| Conda | ||
| Deno | ||
| Devcontainers | ||
| Docker | ||
| Docker Compose | ||
| Dotnet SDK | ||
| Elm | ||
| GitHub Actions | ||
| Gitsubmodule | ||
| Gomod (Go Modules) | ||
| Gradle | ||
| Helm | ||
| Hex (Hex) | ||
| Julia | ||
| Maven | ||
| Nix flakes | ||
| NPM and Yarn | ||
| NuGet | ||
| OpenTofu | ||
| Pip | ||
| pre-commit | ||
| Pub | ||
| Rust toolchain | ||
| sbt | ||
| Swift | ||
| Terraform | ||
| UV | ||
| vcpkg | ||
Note
semver-major-days, semver-minor-days, or semver-patch-days are not defined, the default-days settings will take precedence for cooldown-based updates.exclude list always take precedence over the include list. If a dependency is specified in both lists, it is excluded from cooldown and will be updated immediately.directories or directory Required option. Use to define the location of the package manifests for each package manager (for example, the package.json or Gemfile). Without this information Dependabot cannot create pull requests for version updates. For examples, see Defining multiple locations for manifest files.
Use directory to define a single directory of manifests.
Use directories to define a list of multiple directories of manifests.
Define directories relative to the root of the repository for most package managers.
For GitHub Actions, use the value /. Dependabot will search the /.github/workflows directory, as well as the action.yml/action.yaml file from the root directory.
For Dev containers, use the value /. Dependabot will search the .devcontainer.json, .devcontainer/devcontainer.json, and .devcontainer/<anything>/devcontainer.json files from the root directory.
If you need to use more than one block in the configuration file to define updates for a single target branch of an ecosystem, you must ensure that all values are unique and there is no overlap in directories defined.
Note
The directories key supports globbing and the wildcard character *. These features are not supported by the directory key.
enable-beta-ecosystems Not currently in use.
groups Define rules to create one or more sets of dependencies managed by a package manager, to group updates into fewer, targeted pull requests. For examples, see Optimizing the creation of pull requests for Dependabot version updates.
Dependabot default behavior:
When groups is used to define rules:
| Parameters | Purpose |
|---|---|
IDENTIFIER |
Define an identifier for the group to use in branch names and pull request titles. This must start and end with a letter, and can contain letters, pipes |, underscores _, or hyphens -. |
applies-to |
Specify which type of update the group applies to. When undefined, defaults to version updates. Supported values: version-updates or security-updates. |
dependency-type |
Limit the group to a type. Supported values: development or production. |
exclude-patterns |
Define one or more patterns to exclude dependencies from the group. |
group-by |
Group updates across multiple directories. Supported value: dependency-name. |
patterns |
Define one or more patterns to include dependencies with matching names. |
update-types |
Limit the group to one or more semantic versioning levels. Supported values: minor, patch, and major. |
dependency-type (groups)Supported by: bundler, composer, mix, maven, npm, and pip.
By default, a group will include all types of dependencies.
development to include only dependencies in the "Development dependency group."production to include only dependencies in the "Production dependency group."group-by (groups)Use groups.<group-name>.group-by to specify how Dependabot should group updates across multiple directories in a monorepo.
dependency-nameWhen set to dependency-name, Dependabot will create a single pull request for each dependency update across all specified directories, rather than separate pull requests per directory.
Limitations of cross-directory grouping
When using group-by: dependency-name:
npm or all bundler)For examples showing the use of group-by, see Optimizing the creation of pull requests for Dependabot version updates.
patterns and exclude-patterns (groups)Both options support using * as a wild card to define matches with dependency names. If a dependency matches both a pattern and an exclude-pattern, then it is excluded from the group.
update-types (groups)By default, a group will include updates for all semantic versions (SemVer). SemVer is an accepted standard for defining versions of software packages, in the form x.y.z. Dependabot assumes that versions in this form are always major.minor.patch.
patch to include patch releases.minor to include minor releases.major to include major releases.For examples, see Controlling which dependencies are updated by Dependabot.
ignore Use with the allow option to define exactly which dependencies to maintain for a package ecosystem. Dependabot checks for all allowed dependencies and then filters out any ignored dependencies or versions. So a dependency that is matched by both an allow and an ignore will be ignored. For examples, see Controlling which dependencies are updated by Dependabot.
Dependabot default behavior:
When ignore is used Dependabot uses the following process:
Check for all explicitly allowed dependencies.
Then filter out any ignored dependencies or versions.
If a dependency is matched by an allow and an ignore statement, then it is ignored.
| Parameters | Purpose |
|---|---|
dependency-name |
Ignore updates for dependencies with matching names, optionally using * to match zero or more characters. |
versions |
Ignore specific versions or ranges of versions. |
update-types |
Ignore updates to one or more semantic versioning levels. Supported values: version-update:semver-patch, version-update:semver-minor, and version-update:semver-major. |
dependency-name (ignore)For most package managers, you should define a value that will match the dependency name specified in the lock or manifest file. A few systems have more complex requirements.
| Package manager | Format required | Example |
|---|---|---|
| Gradle and Maven | groupId:artifactId |
org.kohsuke:github-api |
| Docker for image tags | The full name of the repository | For an image tag of <account ID>.dkr.ecr.us-west-2.amazonaws.com/base/foo/bar/ruby:3.1.0-focal-jemalloc, use base/foo/bar/ruby. |
versions (ignore)Use to ignore specific versions or ranges of versions. If you want to define a range, use the standard pattern for the package manager. For example:
^1.0.0 ~> 2.07.*[1.4,)For examples, see Controlling which dependencies are updated by Dependabot.
update-types (ignore)Specify which semantic versions (SemVer) to ignore. SemVer is an accepted standard for defining versions of software packages, in the form x.y.z. Dependabot assumes that versions in this form are always major.minor.patch.
version-update:semver-patch to include patch releases.version-update:semver-minor to include minor releases.version-update:semver-major to include major releases.insecure-external-code-execution Supported by: bundler, mix, and pip.
Allow Dependabot to execute external code in the manifest during updates. For examples, see Allowing external code execution.
Dependabot default behavior:
When you allow insecure-external-code-execution:
updatessetting. There is no access allowed to any of the registries defined in the top level registries configuration.Supported value: allow.
labels Specify your own labels for all pull requests raised for a package manager. For examples, see Customizing Dependabot pull requests to fit your processes.
Dependabot default behavior:
dependencies label.java for Gradle updates and submodules for git submodule updates.major, minor, or patch).When labels is defined:
labels: [ ].Setting this option will also affect pull requests for security updates to the manifest files of this package manager, unless you use target-branch to check for version updates on a non-default branch.
milestone Associate all pull requests raised for a package manager with a milestone. For examples, see Customizing Dependabot pull requests to fit your processes.
Dependabot default behavior:
When milestone is defined:
Supported value: the numeric identifier of a milestone.
Tip
If you view a milestone, the final part of the page URL, after milestone, is the identifier. For example: https://github.com/<org>/<repo>/milestone/3, see Viewing your milestone's progress.
multi-ecosystem-groups Define groups that span multiple package ecosystems to get a single Dependabot pull request that updates all supported package ecosystems. This approach helps reduce the number of Dependabot pull requests you receive and streamlines your dependency update workflow.
Dependabot default behavior:
When multi-ecosystem-groups is used:
multi-ecosystem-groupAssign individual package ecosystems to a multi-ecosystem group using the multi-ecosystem-group parameter in your updates configuration.
Important
Multi-ecosystem updates require specific configuration patterns and have unique parameter merging behavior. For complete setup instructions, configuration examples, and detailed parameter reference, see Configuring multi-ecosystem updates for Dependabot.
# Basic `dependabot.yml` file defining a multi-ecosystem-group
version: 2
multi-ecosystem-groups:
infrastructure:
schedule:
interval: "weekly"
updates:
- package-ecosystem: "docker"
directory: "/"
patterns: ["nginx", "redis"]
multi-ecosystem-group: "infrastructure"
- package-ecosystem: "terraform"
directory: "/"
patterns: ["aws"]
multi-ecosystem-group: "infrastructure"
open-pull-requests-limit Change the limit on the maximum number of pull requests for version updates open at any time.
Dependabot default behavior:
Note
Security update pull requests are subject to a separate, fixed limit of 10 open pull requests, which cannot be configured using open-pull-requests-limit.
When open-pull-requests-limit is defined:
When either limit is reached, Dependabot reports an error and stops opening additional pull requests until some of the open pull requests are merged or closed. For more information, see Dependabot errors.
package-ecosystem Required option. Define one package-ecosystem element for each package manager that you want Dependabot to monitor for new versions. The repository must also contain a dependency manifest or lock file for each package manager, see Example dependabot.yml file.
| Package manager | YAML value | Supported versions |
|---|---|---|
| Bazel | bazel |
v7, v8, v9 |
| Bun | bun |
>=v1.1.39 |
| Bundler | bundler |
v2 |
| Cargo | cargo |
v1 |
| Composer | composer |
v2 |
| Conda | conda |
Not applicable |
| Deno | deno |
>=v2 |
| Dev containers | devcontainers |
Not applicable |
| Docker | docker |
v1 |
| Docker Compose | docker-compose |
v2, v3 |
| .NET SDK | dotnet-sdk |
>=.NET Core 3.1 |
| Helm Charts | helm |
v3 |
| Hex | mix |
v1 |
| Julia | julia |
>=v1.10 |
| elm-package | elm |
v0.19 |
| git submodule | gitsubmodule |
Not applicable |
| GitHub Actions | github-actions |
Not applicable |
| Go modules | gomod |
v1 |
| Gradle | gradle |
Not applicable |
| Maven | maven |
Not applicable |
| Nix flakes | nix |
Not applicable |
| npm | npm |
v7, v8, v9, v10, v11 |
| NuGet | nuget |
<=6.12.0 |
| OpenTofu | opentofu |
Not applicable |
| pip | pip |
26.1.1 |
| pip-compile | pip |
7.5.3 |
| pipenv | pip |
2024.4.1 |
| pnpm | npm |
v7, v8, v9, v10 |
| poetry | pip |
v2 |
| pre-commit | pre-commit |
Not applicable |
| pub | pub |
v2 |
| Rust toolchain | rust-toolchain |
Not applicable |
| sbt | sbt |
Not applicable |
| Swift | swift |
v5, v6 |
| Terraform | terraform |
>= 0.13, <= 1.15.x |
| uv | uv |
v0.11 |
| vcpkg | vcpkg |
Not applicable |
| yarn | npm |
v1, v2, v3, v4 |
pull-request-branch-name Configure how Dependabot generates branch names for pull requests. You can customize the separator, prefix, length, casing, word separator, and provide a custom template. For examples, see Customizing Dependabot pull requests to fit your processes.
Dependabot default behavior:
dependabot/PACKAGE-MANAGER/DEPENDENCY| Parameter | Type | Default | Description |
|---|---|---|---|
separator |
String | "/" |
Character used between segments of the branch name. |
prefix |
String (max 50 characters) | "dependabot" |
String prepended to the branch name. |
max-length |
Integer (20–244) | 100 |
Maximum character length of the branch name. |
word-separator |
String | Not set | Character to replace underscores (_) in branch name content after the prefix. |
branch-name-case |
String | Not set | Apply case transformation to the branch name content after the prefix. |
template |
String (max 200 characters) | Not set | Custom format template using placeholders. |
All options are composable. When template is set alongside simple options, the processing order is:
/ replaced with configured separator)_ replaced with configured word-separator)separatorSpecify a character to use in place of / between branch name segments.
Supported values: "-", _, /
For example, with separator: "-": dependabot/npm_and_yarn/lodash-4.17.21 becomes dependabot-npm_and_yarn-lodash-4.17.21.
Tip
The hyphen symbol must be escaped so it is not interpreted as starting an empty YAML list.
prefixSpecify a custom string to use at the start of the branch name instead of the default dependabot.
The value can be up to 50 characters.
For example, with prefix: "deps": dependabot/npm_and_yarn/lodash-4.17.21 becomes deps/npm_and_yarn/lodash-4.17.21.
max-lengthSet the maximum allowed length for generated branch names.
20.244.100.For example, with max-length: 40, a branch name like dependabot/npm_and_yarn/some-long-dependency-name-1.0.0 is truncated to 40 characters with a hash suffix.
word-separatorSpecify a character to replace underscores (_) in all branch name content after the prefix—including package manager names, dependency names, group names, and directory paths.
For example, with word-separator: "-":
npm_and_yarn → npm-and-yarnfront_end_dir → front-end-dirbranch-name-caseApply a case transformation to the branch name content after the prefix.
Supported values: "lowercase", "uppercase"
For example, with branch-name-case: "lowercase": dependabot/npm_and_yarn/Lodash-4.17.21 becomes dependabot/npm_and_yarn/lodash-4.17.21.
templateDefine a custom branch name format using placeholders. The template gives you full control over the structure of generated branch names. For examples, see Customizing Dependabot pull requests to fit your processes.
Available placeholders depend on the update strategy:
| Placeholder | Solo updates | Grouped updates | Multi-ecosystem groups | Description |
|---|---|---|---|---|
{prefix} |
The configured prefix (default dependabot). |
|||
{package_manager} |
The package ecosystem identifier (for example, npm_and_yarn). |
|||
{directory} |
The dependency file directory. | |||
{target_branch} |
The target branch if configured. | |||
{dependency} |
The dependency name(s). | |||
{version} |
The new version or ref. | |||
{group_name} |
The configured group name. | |||
{name} |
Strategy-appropriate name: dependency and version for solo updates, group name for grouped updates. |
Template validation rules:
{ or }).{package_manager} in a multi-ecosystem group template raises a validation error because no single package manager applies.~, ^, :, ?, *, [, and \ are not allowed, and sequences like .. or @{ are rejected.rebase-strategy Disable automatic rebasing of pull requests raised by Dependabot.
Dependabot default behavior is to rebase open pull requests when Dependabot detects any changes to a version or security update pull request. Dependabot checks for changes when:
target-branch in the Dependabot configuration file, see target-branch.When rebase-strategy is set to disabled, Dependabot stops rebasing pull requests.
Note
Pull requests that were open before you disable rebasing will continue to be rebased until 30 days after they were opened. This affects all pull requests that have conflicts with the target branch and all pull requests for version updates.
registries Configure access to private package registries to allow Dependabot to update a wider range of dependencies, see Configuring access to private registries for Dependabot and Guidance for the configuration of private registries for Dependabot.
There are 2 locations in the dependabot.yml file where you can use the registries key:
updates blocks, where you can specify which private registries each package manager should use.Each updates block can reference up to 100 registries from the top-level registries section.
Dependabot default behavior is to raise pull requests only to update dependencies stored in publicly accessible registries.
When the Dependabot configuration file has a top-level registries section, defining access to one or more private registries, you can configure each package-ecosystem to use one or more of these private registries.
When registries is defined for a package manager:
registries section.Supported values: REGISTRY_NAME or "*"
schedule Required option. Define how often to check for new versions for each package manager you configure using the interval parameter. Optionally, for daily and weekly intervals, you can customize when Dependabot checks for updates. For examples, see Optimizing the creation of pull requests for Dependabot version updates.
| Parameters | Purpose |
|---|---|
interval |
Required. Defines the frequency for Dependabot. |
day |
Specify the day to run for a weekly interval. |
time |
Specify the time to run. |
cronjob |
Defines the cron expression if the interval type is cron. |
timezone |
Specify the timezone of the time value. |
intervalSupported values: daily, weekly, monthly, quarterly, semiannually, yearly, or cron
Each package manager must define a schedule interval.
daily to run on every weekday, Monday to Friday.weekly to run once a week, by default on Monday.monthly to run on the first day of each month.quarterly to run on the first day of each quarter (January, April, July, and October).semiannually to run every six months, on the first day of January and July.yearly to run on the first day of January.cron for cron expression based scheduling option. See cronjob.Note
The supported values quarterly, semiannually, and yearly are only available on GitHub Enterprise Server from version 3.19.
By default, Dependabot randomly assigns a time to apply all the updates in the configuration file. You can use the time and timezone parameters to set a specific runtime for all intervals. If you use a cron interval, you can define the update time with a cronjob expression.
daySupported values: monday, tuesday, wednesday, thursday, friday, saturday, or sunday
Optionally, run weekly updates for a package manager on a specific day of the week.
timeFormat: hh:mm
Optionally, run all updates for a package manager at a specific time of day. By default, times are interpreted as UTC.
cronjobSupported values: Valid cron expression in cron syntax or natural expression.
Cron syntax has five fields separated by a space, and each field represents a unit of time.
┌───────────── minute (0 - 59)
│ ┌───────────── hour (0 - 23)
│ │ ┌───────────── day of the month (1 - 31)
│ │ │ ┌───────────── month (1 - 12 or JAN-DEC)
│ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT)
│ │ │ │ │
* * * * *
Examples : 0 9 * * *, every day at 5pm
0 9 * * * is equivalent to "every day at 9am". every day at 5pm is equivalent to 0 17 * * *.
Note
timezone parameter and not in the cronjob.cronjob type schedule is required to use a cron interval.
# Basic `dependabot.yml` file for cronjob
version: 2
updates:
# Enable version updates for npm
- package-ecosystem: "npm"
# Look for `package.json` and `lock` files in the `root` directory
directory: "/"
# Check the npm registry for updates based on `cronjob` value
schedule:
interval: "cron"
cronjob: "0 9 * * *"
timezoneSpecify a time zone for the time value. The default time zone is UTC.
The time zone identifier must match a timezone in the database maintained by iana, see List of tz database time zones.
target-branch Define a specific branch to check for version updates and to target pull requests for version updates against. For examples, see Customizing Dependabot pull requests to fit your processes.
Dependabot default behavior:
When target-branch is defined:
package-ecosystem no longer apply to security updates because security updates always use the default branch for the repository.exclude-paths Use to specify paths of directories and files that Dependabot should ignore when scanning for manifests and dependencies. This option is useful when you want to prevent updates for dependencies in certain locations, such as test assets, vendored code, or specific files.
Dependabot default behavior:
directory are included in the update scan unless excluded by this option.When exclude-paths is defined:
package-ecosystem entry.| Parameter | Purpose |
|---|---|
exclude-paths |
A list of glob patterns for files or directories to ignore. |
Glob patterns are supported, such as ** for recursive matching and * for single-segment wildcards. Patterns are relative to the directory specified for the update configuration. Each ecosystem can have its own exclude-paths settings.
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "daily"
exclude-paths:
- "src/test/assets"
- "vendor/**"
- "src/*.js"
- "src/test/helper.js"
# Sample patterns that can be used-
# Pattern: docs/*.json
# Matches: docs/foo.json, docs/bar.json
# Pattern: *.lock
# Matches: Gemfile.lock, package.lock, foo.lock (in any directory)
# Pattern: test/**
# Matches: test/foo.rb, test/bar/baz.rb, test/any/depth/file.txt
# Pattern: config/settings.yml
# Matches: config/settings.yml
# Pattern: **/*.md
# Matches: README.md, docs/guide.md, any/depth/file.md
# Pattern: src/*
# Matches: src/main.rb, src/app.js
# Does NOT match: src/utils/helper.rb
# Pattern: hidden/.*
# Matches: hidden/.env, hidden/.secret
In this example, Dependabot will ignore the src/test/assets directory, all files under vendor/, all JavaScript files directly under src/, and the specific file src/test/helper.js when scanning for updates.
vendor Supported by: bundler and gomod only.
Tell Dependabot to maintain your vendored dependencies as well as the dependencies defined by manifest files. A dependency is described as "vendored" or "cached" when you store the code within your repository, see bundle cache documentation and go mod vendor documentation.
For examples, see Controlling which dependencies are updated by Dependabot.
Dependabot default behavior:
vendor was enabled.When vendor is enabled:
_vendor/cache_ directory in the repository.Supported values: true or false
versioning-strategy Supported by: bundler, cargo, composer, helm, mix, npm, pip, pub, and uv
Define how Dependabot should edit manifest files. For examples, see Controlling which dependencies are updated by Dependabot.
Dependabot default behavior:
increase strategy.widen strategy.When versioning-strategy is defined, Dependabot uses the strategy specified.
| Value | Behavior |
|---|---|
auto |
Default behavior. |
increase |
Always increase the minimum version requirement to match the new version. If a range already exists, typically this only increases the lower bound. |
increase-if-necessary |
Leave the version requirement unchanged if it already allows the new release (Dependabot still updates the resolved version). Otherwise widen the requirement. |
lockfile-only |
Only create pull requests to update lockfiles. Ignore any new versions that would require package manifest changes. |
widen |
Widen the allowed version requirements to include both the new and old versions, when possible. Typically, this only increases the maximum allowed version requirement. |
For example, if the current version is 1.0.0 and the current constraint is ^1.0.0 the different strategies would raise the following updates:
New version 1.2.0
increase: new constraint ^1.2.0increase-if-necessary: new constraint ^1.0.0widen: new constraint ^1.0.0New version 2.0.0
increase: new constraint ^2.0.0increase-if-necessary: new constraint ^2.0.0widen: new constraint >=1.0.0 <3.0.0Note
If the package manager you use does not yet support configuring the versioning-strategy parameter, or does not support a value you need, the strategy code is open source, so if you'd like a particular ecosystem to support a new strategy, you are always welcome to submit a pull request in https://github.com/dependabot/dependabot-core/.
Dependabot recognizes a variety of versioning tags for pre-releases, stable versions, and custom tags across different ecosystems.
The dependabot.yml file doesn't control the versioning tags that you can use, but you can define in configuration options such as ignore the supported versioning tags you want to ignore updates for.
| Package Manager | YAML value | Supported Tags | Examples |
|---|---|---|---|
| Maven | maven |
alpha, a, beta, b, milestone, m, rc, cr, sp, ga, final, release, snapshot |
spring-security-web@5.6.0-SNAPSHOT, spring-core@5.2.0.RELEASE |
| npm | npm |
alpha, beta, canary, dev, experimental, latest, legacy, next, nightly, rc, release, stable |
lodash@beta, react@latest, express@next |
| pnpm | npm |
alpha, beta, canary, dev, experimental, latest, legacy, next, nightly, rc, release, stable |
lodash@1.2.0-alpha, react@alpha, vue@next |
| sbt | sbt |
alpha, a, beta, b, milestone, m, rc, cr, sp, ga, final, release, snapshot |
akka-actor@2.7.0-RC1, play-json@3.0.0-M1 |
| yarn | npm |
alpha, beta, canary, dev, experimental, latest, legacy, next, nightly, rc, release, stable |
lodash@1.2.0-alpha, axios@latest, moment@nightly |
| Bundler | bundler |
Any prerelease identifier (commonly alpha, beta, rc, pre) |
rails@1.0.0.alpha, rack@1.0.0.beta1, rspec@1.0.0.rc2 |
| Cargo | cargo |
Any SemVer prerelease identifier (commonly alpha, beta, rc, dev) |
serde@1.0.0-alpha, tokio@0.2.0-preview.3, clap@4.0.0-rc.1, rand@1.0.0-dev |
| pip | pip |
a, b, rc, dev, post |
requests@1.0.0a1, numpy@2.0.0b3, django@4.0rc1, black@1.0.0.dev5, pandas@2.0.5.post1 |
| pipenv | pip |
a, b, rc, dev, post |
requests@1.0.0a1, numpy@2.0.0b3, django@4.0rc1, black@1.0.0.dev5, pandas@2.0.5.post1 |
| pip-compile | pip |
a, b, rc, dev, post |
requests@1.0.0a1, numpy@2.0.0b3, django@4.0rc1, black@1.0.0.dev5, pandas@2.0.5.post1 |
| poetry | pip |
a, b, rc, dev, post |
requests@1.0.0a1, numpy@2.0.0b3, django@4.0rc1, black@1.0.0.dev5, pandas@2.0.5.post1 |
| Gradle | gradle |
alpha, a, beta, b, milestone, m, rc, cr, snapshot, ga, final, release, sp (case-insensitive) |
spring-boot-starter@3.0.0-RC1, kotlin-stdlib@2.0.0-beta, guava@33.0.0-SNAPSHOT, junit@5.10.0-M2, ktor@2.3.0-rc.1 |
| Elm | elm |
None—strict MAJOR.MINOR.PATCH only (no pre-release versions) |
elm/core@1.0.0, elm/html@2.3.1, elm/json@10.0.0 |
| Docker | docker |
alpha, beta, rc, dev, preview, pre, nightly, snapshot, canary, unstable (heuristic detection) |
nginx@1.25.0-rc1, node@20.0.0-alpha.1, redis@7.0.0-nightly, alpine@3.18.0-dev, ubuntu@22.04-preview |
| git submodule | gitsubmodule |
None—pins to commit SHAs or git tags (no versioning scheme) | my-lib@abc1234, shared-utils@v1.2.0 |
| Go modules | gomod |
alpha, beta, rc (SemVer prerelease after -) |
github.com/go-chi/chi@v5.0.0-rc1, google.golang.org/grpc@v1.60.0-beta.1, github.com/octo-org/octo-module@v0.17.0-alpha.1 |
| Bazel | bazel |
Any SemVer prerelease identifier (commonly alpha, beta, rc) |
rules_go@0.46.0-rc1, rules_rust@0.40.0-beta, bazel_skylib@1.5.0-alpha |
| Bun | bun |
alpha, beta, rc, canary (SemVer prerelease after -) |
bun@1.0.0-beta.1, elysia@1.0.0-rc.3, hono@4.0.0-canary.1 |
| Composer | composer |
dev, alpha, a, beta, b, RC (case-insensitive) |
laravel/framework@11.0.0-alpha1, symfony/console@7.0.0-beta2, monolog/monolog@3.0.0-RC1 |
| Conda | conda |
dev, alpha, a, beta, b, rc, c, post |
numpy@2.0.0a1, pandas@2.1.0b2, scipy@1.12.0rc1, scikit-learn@1.4.0.dev0 |
| Deno | deno |
Any SemVer prerelease identifier (commonly alpha, beta, rc) |
oak@13.0.0-alpha, fresh@2.0.0-rc.1, std@0.220.0-beta.2 |
| Dev containers | devcontainers |
SemVer 2.0.0 (prerelease not used in practice) | ghcr.io/devcontainers/features/node@1.6.1, ghcr.io/devcontainers/features/python@1.6 |
| .NET SDK | dotnet-sdk |
preview.N, rc.N, alpha.N |
dotnet-sdk@9.0.100-preview.7.24407.12, dotnet-sdk@9.0.100-rc.2.24474.11 |
| GitHub Actions | github-actions |
Any SemVer prerelease identifier (commonly alpha, beta, rc) |
my-org/my-action@v1.0.0-beta.1, my-org/deploy@v2.0.0-rc1, my-org/lint@v3.0.0-alpha |
| Helm Charts | helm |
Any SemVer prerelease identifier (commonly alpha, beta, rc) |
ingress-nginx@4.11.0-beta.0, cert-manager@1.15.0-alpha.1, prometheus@25.0.0-rc1 |
| Hex | mix |
Any SemVer prerelease identifier (commonly alpha, beta, rc, dev) |
phoenix/phoenix@1.7.0-rc.0, elixir-ecto/ecto@3.11.0-beta.1, elixir-plug/plug@1.15.0-alpha.1 |
| Julia | julia |
Any SemVer prerelease identifier (commonly rc, DEV, beta) |
HTTP@1.10.0-rc1, Plots@2.0.0-DEV, DataFrames@1.6.0-beta.1 |
| Nix | nix |
None—tracks flake input commits (no versioning scheme) | nixpkgs@a1b2c3d, devenv@e4f5a6b, flake-utils@c7d8e9f |
| NuGet | nuget |
Any SemVer prerelease identifier (commonly alpha, beta, rc, preview) |
Newtonsoft.Json@13.0.0-rc1, Microsoft.Extensions.Hosting@8.0.0-preview.7, Serilog@3.0.0-beta.1 |
| OpenTofu | opentofu |
Any SemVer prerelease identifier (commonly alpha, beta, rc) |
opentofu/aws@5.0.0-alpha, opentofu/google@5.0.0-rc1, opentofu/azurerm@4.0.0-beta1 |
| pre-commit | pre-commit |
Any SemVer prerelease identifier (commonly alpha, beta, rc) |
pre-commit/mirrors-mypy@1.10.0a1, psf/black@24.1.0rc1, astral-sh/ruff-pre-commit@0.4.0-beta.1 |
| Pub | pub |
Any SemVer prerelease identifier (commonly dev, beta, rc) |
flutter/dio@5.0.0-dev.1, dart-lang/http@1.2.0-beta.1, invertase/melos@4.0.0-rc.1 |
| Rust toolchain | rust-toolchain |
Channel-based: stable, beta, nightly (not SemVer prerelease) |
rust@1.78.0, rust@beta, rust@nightly, rust@nightly-2024-01-15 |
| Swift | swift |
Any SemVer prerelease identifier (commonly alpha, beta, rc) |
vapor/vapor@5.0.0-beta.1, apple/swift-nio@3.0.0-rc1, pointfreeco/swift-composable-architecture@2.0.0-alpha.1 |
| Terraform | terraform |
Any SemVer prerelease identifier (commonly alpha, beta, rc) |
hashicorp/aws@5.0.0-rc1, hashicorp/google@4.0.0-alpha, hashicorp/azurerm@3.0.0-beta1 |
| uv | uv |
a, b, rc, dev, post (PEP 440) |
requests@1.0.0a1, numpy@2.0.0b3, django@4.0rc1, black@1.0.0.dev5, pandas@2.0.5.post1 |
| vcpkg | vcpkg |
Any SemVer prerelease identifier (commonly beta, rc) |
zlib@1.3.1-beta1, openssl@3.2.0-rc.1, fmt@10.2.0-beta |
The following details describe how Dependabot interprets versioning for specific ecosystems.
Bundler: Does not use a fixed set of prerelease tags. Any version segment containing a letter is treated as prerelease (for example, .alpha, .beta1, .rc2). Hyphens are normalized to .pre. internally (for example, 1.0.0-beta becomes 1.0.0.pre.beta).
Cargo: Follows SemVer 2.0.0 conventions. Anything after - is a prerelease identifier (dot-separated, [0-9A-Za-z-]). Build metadata (+...) is allowed but ignored for precedence.
Gradle: In addition to the qualifiers listed in the table, these aliases are recognized: pr/pre/preview→rc, eap/ea→alpha. Additional prerelease qualifiers include dev, experimental, and unstable. Qualifiers are ordered by precedence: alpha/a < beta/b < milestone/m < rc/cr < snapshot < (empty/ga/final/release) < sp. Free-form identifiers not in this list are treated as stable.
pip/pipenv/pip-compile/poetry (PEP 440): The table lists canonical prerelease and postrelease suffixes. Aliases are also recognized and normalized (alpha→a, beta→b, c/pre/preview→rc, rev/r→post). Epoch versions (N!...) and local versions (+local) are supported; local segments are used only to break ties when the public version is identical.
Elm: Enforces strict SemVer (MAJOR.MINOR.PATCH integers only). The Elm package registry does not allow publishing prerelease versions. Dependabot compares versions numerically.
Go modules: Follows SemVer with a mandatory v prefix. Pseudo-versions (v0.0.0-YYYYMMDDHHMMSS-commithash) represent unreleased commits and are always treated as prerelease. The +incompatible suffix marks modules at major version 2+ without a go.mod file and does not affect version ordering.
git submodule: Dependabot tracks the latest commit on the configured branch. There is no version comparison—updates always move the pinned SHA forward. If the submodule tracks a tag, Dependabot follows the tag's commit.
Bazel: Follows SemVer prerelease conventions. The Bazel Central Registry (BCR) .bcr.N suffix is stripped before comparison and does not affect prerelease detection.
Deno: Follows SemVer prerelease conventions. Build metadata (+...) is supported but ignored for version precedence.
Bun: Follows npm-style SemVer prerelease conventions. Build metadata (+...) is supported but ignored for version precedence.
GitHub Actions: Dependabot resolves action versions from git tags. Any tag with a SemVer prerelease identifier (anything after -) is treated as prerelease. Additionally, releases marked as prerelease via the GitHub Release API are recognized regardless of tag format.
Julia: Follows SemVer prerelease conventions. Prerelease identifiers are case-sensitive (for example, DEV and dev are distinct).
Hex: Follows SemVer prerelease conventions. Any identifier after - is treated as prerelease.
Nix: Dependabot tracks flake input commits, similar to git submodules. Internally, versions are represented as pseudo-versions (0.0.0-0.N). There is no traditional version comparison—updates move forward to the latest upstream commit.
NuGet: Follows SemVer 2.0.0 prerelease conventions. Build metadata (+...) is supported but ignored for version precedence.
OpenTofu: Follows SemVer prerelease conventions (same as Terraform). Build metadata (including the +backport suffix) is stripped before comparison and does not affect prerelease detection.
Rust toolchain: Uses channel-based versioning (stable, beta, nightly) rather than SemVer prerelease identifiers. Dependabot updates the pinned channel or date-stamped nightly (for example, nightly-2024-01-15) to the latest available.
Terraform: Follows SemVer prerelease conventions. The v prefix is stripped before comparison. Build metadata (+...) is ignored for version precedence.
Composer: Follows PHP Composer stability conventions (case-insensitive). Stability flags (@dev, @beta) in constraints are stripped before comparison. The v prefix is handled transparently.
Conda: Follows conda version spec (similar to PEP 440). Epoch versions (N!...) and local versions (+local) are supported. Post-release (post) suffixes are recognized.
.NET SDK: Prerelease identifiers follow the preview.N, rc.N, alpha.N pattern. Prerelease updates require allowPrerelease: true in global.json.
Helm Charts: Follows SemVer prerelease conventions. Chart version prefixes (for example, chart-v) and build digests (+sha256:...) are stripped before comparison.
pre-commit: Resolves hook versions from git tags. Prerelease detection uses both Gem::Version heuristic and the GitHub Release API prerelease flag. SHA-pinned hooks are also supported.
Pub: Follows SemVer prerelease conventions. Build metadata (+...) is supported but ignored for version precedence.
Swift: Follows SemVer prerelease conventions. Prerelease filtering is not currently applied—all versions are treated equally in comparison.
vcpkg: Supports multiple version formats: dot-separated numeric, SemVer (without build metadata), and date-based. Port version suffix (#N) indicates packaging revisions and does not affect prerelease detection.
alpha: Early version, may be unstable and have incomplete features.beta: More stable than alpha but may still have bugs.canary: Regularly updated pre-release version for testing.dev: Represents development versions.experimental: Versions with experimental features.latest: The latest stable release.legacy: Older or deprecated versions.next: Upcoming release version.nightly: Versions built nightly; often includes the latest changes.rc: Release candidate, close to stable release.release: The official release version.stable: The most reliable, production-ready version.registries keySpecify authentication details that Dependabot can use to access private package registries, including registries hosted by GitLab or Bitbucket.
The value of the registries key is an associative array, each element of which consists of a key that identifies a particular registry and a value which is an associative array that specifies the settings required to access that registry. You can define up to 100 registries in the top-level registries section.
The following dependabot.yml file configures a registry identified as dockerhub in the registries section of the file and then references this in the updates section of the file.
# Minimal settings to update dependencies stored in one private registry
version: 2
registries:
dockerhub: # Define access for a private registry
type: docker-registry
url: registry.hub.docker.com
username: octocat
password: ${{secrets.DOCKERHUB_PASSWORD}}
updates:
- package-ecosystem: "docker"
directory: "/docker-registry/dockerhub"
registries:
- dockerhub # Allow version updates for dependencies in this registry
schedule:
interval: "monthly"
You use the following options to specify access settings. Registry settings must contain a type and a url, and typically either a username and password combination or a token.
| Parameters | Purpose |
|---|---|
REGISTRY_NAME |
Required: Defines an identifier for the registry. |
type |
Required: Identifies the type of registry. |
| Authentication details | Required: The parameters supported for supplying authentication details vary for registries of different types. |
url |
Required: The URL to use to access the dependencies in this registry. The protocol is optional. If not specified, https:// is assumed. Dependabot adds or ignores trailing slashes as required. |
replaces-base |
If the boolean value is true, Dependabot resolves dependencies using the specified url rather than the base URL of that ecosystem. |
scope |
For npm-registry type only. The npm scope to associate with this registry, for example @my-company. When scope is provided, Dependabot generates the .npmrc configuration from the registry credentials, overriding any committed .npmrc file or lockfile inference. |
For in-depth information about available options, as well as recommendations and advice when configuring private registries, see Guidance for the configuration of private registries for Dependabot.
type and authentication detailsThe parameters used to provide authentication details for access to a private registry vary according to the registry type.
Registry type |
Required authentication parameters |
|---|---|
cargo-registry |
token |
composer-repository |
username and passwordor OIDC with tenant-id and client-id |
docker-registry |
username and passwordor OIDC with tenant-id and client-id |
git |
username and passwordor OIDC with tenant-id and client-id |
hex-organization |
organization and key |
hex-repository |
repo and auth-key optionally with the corresponding public-key-fingerprint |
maven-repository |
username and passwordor OIDC with tenant-id and client-id |
npm-registry |
username and passwordor tokenor OIDC with tenant-id and client-id |
nuget-feed |
username and passwordor tokenor OIDC with tenant-id and client-id |
pub-registry |
token |
python-index |
username and passwordor tokenor OIDC with tenant-id and client-id |
rubygems-server |
username and passwordor tokenor OIDC with tenant-id and client-id |
terraform-registry |
token |
All sensitive data used for authentication should be stored securely and referenced from that secure location, see Configuring access to private registries for Dependabot.
Tip
If the account is a GitHub account, you can use a GitHub personal access token in place of the password.
For more information about OIDC support for Dependabot, see OpenID Connect and Configuring access to private registries for Dependabot.
url and replaces-baseThe url parameter defines where to access a registry. When the optional replaces-base parameter is enabled (true), Dependabot resolves dependencies using the value of url rather than the base URL of that specific ecosystem.
scopeThe scope parameter is available for npm-registry type registries. It specifies which npm scope should be associated with the registry. The value must start with @, for example @my-company. To associate multiple scopes with the same registry URL, create a separate registry entry for each scope.
When scope is provided, Dependabot generates the .npmrc configuration from your registry credentials. This generated configuration takes precedence over any committed .npmrc file or lockfile-based inference.
When determining which registry to use for npm dependencies, Dependabot follows this priority order:
scope or replaces-base): If scope or replaces-base is configured on any npm-registry credential in dependabot.yml, Dependabot generates the .npmrc from those credentials. This always takes priority, overriding any committed .npmrc file..npmrc in the repository: If no scope is set, Dependabot uses any .npmrc file committed to the repository.scope and no committed .npmrc, Dependabot attempts to infer registry configuration from the lockfile.