Safeguard
Security Guides•

Supported versions in SECURITY.md: how many releases to patch

Decide which releases get security fixes, write it in a small table, and keep promises a volunteer can keep. A guide to the supported versions section.

Safeguard Security Team
3 min read

Support only as many release lines as you can actually patch, and say so in a short table in SECURITY.md. For most volunteer projects that means the latest release line and perhaps one previous major version. A promise you cannot keep is worse than a narrow one you can.

Why the section exists

GitHub's guidance for a security policy says to add information about supported versions of your project and how to report a vulnerability. Reporters read the first part to see whether their version is covered. Users read it to decide when to upgrade. Without it, everyone guesses.

Pick a rule you can keep

Common patterns:

  • Latest only. Simple, honest, and fits a one-person project. Users must upgrade to get fixes.
  • Latest plus previous major. Gives users one migration window. Costs you backports.
  • Time-based. Each release gets security fixes for a fixed period after publishing, such as a year.
  • Long-term support lines. Only if you have funding or people to back it.

Base the choice on how many backports you can realistically make in a bad week, not a good one.

A table that is easy to read

| Version | Supported          |
| ------- | ------------------ |
| 3.x     | yes                |
| 2.x     | security fixes only until 2027-06-30 |
| 1.x     | no                 |

Treat the dates above as an example format, not a recommendation. Use your own.

What to write next to the table

  • What "supported" means: security fixes only, or bugfixes too.
  • How long after a new major version the old one is patched.
  • That fixes for unsupported versions are not provided, and users should upgrade.
  • Where to find advisories.

Backports cost real effort

Each extra release line multiplies the work of a security fix, because you must patch, test and release each. If a fix is hard to backport, you may need to say so in the advisory and give a workaround. The trade-offs are discussed in retiring or backporting fixes to old API versions.

Keep it current

Update the table at each major release. An out-of-date table that lists a dead branch as supported misleads reporters and users. Add the review of this table to your release checklist. The open source release checklist is a good home for it: open source release security.

Tell users what to do

Give a plain upgrade path. If version 1.x is unsupported, say which version to move to and link the migration notes. Reporters of vulnerabilities in unsupported versions deserve a polite reply that explains the policy.

Pair it with the rest of the policy

The table is one section. The rest covers how to report and what to expect. See writing a SECURITY.md.

Quick check

Do I have to support old versions?

No. Say what you support and stick to it. Narrow and honest beats broad and broken.

Where does SECURITY.md go?

GitHub describes creating it in the repository through the Security tab under Security policy, then committing it. Use a pull request when committing to the default branch.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.