In GitHub, how do Dependabot security updates differ from version updates?
answer
- One is triggered, one is scheduled
- Only one of them needs a config file
- Minimum patched version versus latest release
- Alerts feed one of the two
- open-pull-requests-limit belongs to the routine path
basics
~20 sSecurity updates are driven by Dependabot alerts and open a pull request that bumps a vulnerable package to the lowest patched version. Version updates keep dependencies current on a schedule you declare in .github/dependabot.yml, whether or not anything is vulnerable.
solid answer
~40 sThey are two separate features that both open pull requests. **Security updates** are triggered by a Dependabot alert: when an advisory matches something in the dependency graph, GitHub opens a PR moving that package to the minimum version that clears the advisory. They need alerts plus the security-updates setting turned on — no configuration file is required. **Version updates** are opt-in and only run if you commit `.github/dependabot.yml`, where each entry under `updates:` declares a `package-ecosystem`, a `directory`, and a `schedule.interval`. They chase newer releases on that cadence regardless of vulnerabilities, and are subject to `open-pull-requests-limit`. In practice you want both: security updates are the incident-response path, version updates are the hygiene path that stops you being ten majors behind when a security fix finally lands.
code
yaml · 18 linesversion: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
open-pull-requests-limit: 5
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
- package-ecosystem: "docker"
directory: "/services/api"
schedule:
interval: "weekly"go deeper
Know that Dependabot opens pull requests for two different reasons — a published vulnerability, or a scheduled freshness check — and that the second one is the one you configure in a file.
Be able to name the file, its location, and the minimum keys of an entry: package-ecosystem, directory, schedule.interval. Explain why security updates work without it.
Show the operational stance: keep advisory-driven updates on unconditionally, tune scheduled ones. Be able to debug silence — unparseable config, unresolvable private registry, no patched version, ignore conditions.
Argue the policy split for a fleet: security updates as a non-negotiable default everywhere, version updates as an owned, tuned, per-repository decision, and a measurable time-to-remediate rather than a pull-request count.
## Two features, one bot Dependabot shows up in a repository as one bot account opening pull requests, which is why candidates often merge the two ideas. They are configured, triggered, and scoped differently. ## Security updates The trigger is a **Dependabot alert**: a package/version in the dependency graph matched an advisory in the GitHub Advisory Database. If security updates are enabled, GitHub attempts to open a pull request that raises that dependency to the **lowest version that is no longer in the vulnerable range** — deliberately the smallest jump that fixes the problem, so the blast radius stays small. Important properties: - No `dependabot.yml` is needed. Alerts plus the toggle are enough, which is why a repository with no configuration file can still receive Dependabot pull requests. - A fix requires a patched version to exist. If the advisory has no fix, you get an alert and no pull request. - For a transitive dependency, the bump may have to happen in the intermediate package, and Dependabot can only open a PR if the ecosystem lets it express that. - Security PRs describe the advisory, its severity, and the range being escaped. ## Version updates The trigger is a **schedule you declare**. Version updates exist only if `.github/dependabot.yml` is committed on the default branch. Each element of `updates:` is one job: which ecosystem (`npm`, `maven`, `gradle`, `pip`, `docker`, `github-actions`, `gomod`, `nuget`, `bundler`, `cargo`, and others), which `directory` the manifest lives in, and how often to run via `schedule.interval` (`daily`, `weekly`, `monthly`). Options on the same entry shape the output: `open-pull-requests-limit` (default 5) caps how many version-update PRs stay open at once, `target-branch` sends them somewhere other than the default branch, `labels` and `milestone` route them, `commit-message` controls the subject prefix, and `versioning-strategy` decides whether a manifest range is widened, increased, or left alone with only the lockfile moving. Version updates do not care about advisories. Their value is that being current is what makes a future security bump a one-line change instead of a migration project. ## Why the distinction matters operationally The common failure is a team that disables Dependabot because "it opens too many PRs", not realising they have just turned off their vulnerability-response path along with the noise. The right move is almost always: keep alerts and security updates on everywhere; make version updates a deliberate, tuned, per-repository choice with grouping and a sensible cadence. The second distinction that matters is the pull-request limit. `open-pull-requests-limit` governs version updates; security fixes are not meant to be starved by a backlog of routine bumps, so a repository sitting at its version-update limit should still see security work surface. If you want to be precise in an interview, say that the limit is a version-update control and that you would not rely on it to throttle security fixes. ## Enabling Both features are switched on per repository under the security settings, and organisations can apply them across many repositories at once through a security configuration. Security updates depend on alerts, which depend on the dependency graph — the chain is graph → alerts → security updates. Version updates depend only on the config file being present and parseable; a malformed `dependabot.yml` shows up as an error on the repository's Dependabot page and silently means nothing runs. ## Private registries Both kinds of update need to be able to resolve your dependencies. If the project pulls from an internal registry, a top-level `registries:` block declares it (with credentials stored as Dependabot secrets, which are separate from Actions secrets) and each `updates:` entry references it. Without that, Dependabot fails to resolve and quietly produces nothing for that ecosystem — a very common reason teams believe the feature is broken. ## The interview answer Summarised: security updates are event-driven, advisory-scoped, minimum-viable bumps, and need no file. Version updates are schedule-driven, breadth-scoped, and need `dependabot.yml`. Run both, and tune only the second one when the noise gets bad.
- A repository has no dependabot.yml but is still getting Dependabot pull requests. How?Those are security updates. They are driven by Dependabot alerts and the security-updates setting, not by a configuration file. The config file is only required for version updates, so a repository can receive advisory-driven bumps while having no scheduled ones at all.
- Why does a security update bump to the lowest patched version rather than the newest release?To keep the change as small as possible. The goal of a security PR is to escape the vulnerable range with minimal behavioural risk, so it is easy to review and merge quickly. Moving to the latest release is the job of version updates, where you accept a wider diff in exchange for currency.
- You see a Dependabot alert but no pull request appeared. What are the likely reasons?Either security updates are not enabled, no patched version exists yet for that advisory, the fix lives in a transitive dependency Dependabot cannot express a bump for, an ignore condition covers that dependency, or Dependabot cannot resolve the ecosystem at all — often a private registry it has no credentials for.
saying these in an interview costs you the question
- Thinks dependabot.yml is required for security fixes too
- Says security updates jump to the newest release
- Disables Dependabot entirely to stop pull-request noise
- Believes version updates only fire when something is vulnerable
- Assumes the PR limit throttles security fixes as well