Audits and updates the supported-os.json files for .NET releases, checking them against upstream lifecycle data and regenerating the markdown with the release-notes tool.
Install the "update-supported-os" agent skill from https://github.com/dotnet/core/tree/main/.github/skills/update-supported-os into .claude/skills/update-supported-os/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-supported-os", then confirm the skill loads.
Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
skills CLI
$ npx skills add dotnet/core --skill update-supported-os -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "update-supported-os" agent skill from https://github.com/dotnet/core/tree/main/.github/skills/update-supported-os into .agents/skills/update-supported-os/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-supported-os", then confirm the skill loads.
Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add dotnet/core --skill update-supported-os -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "update-supported-os" agent skill from https://github.com/dotnet/core/tree/main/.github/skills/update-supported-os into .cursor/skills/update-supported-os/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-supported-os", then confirm the skill loads.
Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add dotnet/core --skill update-supported-os -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "update-supported-os" agent skill from https://github.com/dotnet/core/tree/main/.github/skills/update-supported-os into .gemini/skills/update-supported-os/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-supported-os", then confirm the skill loads.
Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
skills CLI
$ npx skills add dotnet/core --skill update-supported-os -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "update-supported-os" agent skill from https://github.com/dotnet/core/tree/main/.github/skills/update-supported-os into .github/skills/update-supported-os/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-supported-os", then confirm the skill loads.
GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add dotnet/core --skill update-supported-os -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "update-supported-os" agent skill from https://github.com/dotnet/core/tree/main/.github/skills/update-supported-os into .opencode/skills/update-supported-os/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "update-supported-os", then confirm the skill loads.
OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Facts
Skill name
update-supported-os
GitHub stars
22k
Token cost
~4.1k tokens
SKILL.md length
1,879 words
Files
2 (incl. references)
Skills in repo
15
Repo updated
First seen
Licence
MIT
At a glance
Audits and updates the supported-os.json files for .NET releases, checking them against upstream lifecycle data and regenerating the markdown with the release-notes tool.
Works in 8 steps: Verify — check for issues (early out) → Determine scope of changes → Apply changes to supported-os.json → …
Adding a newly released OS version to the supported-os files
SKILL.md covers When to use, Prerequisites, Inputs and Process, plus 2 more sections
Calls gh, curl and jq; reaches github.com and nuget.pkg.github.com; needs GITHUB_TOKEN
What it does
The skill maintains the `supported-os.json` files in the dotnet/core repository, which declare the operating system versions each .NET release supports. The matching `supported-os.md` files are generated from the JSON and must never be hand-edited. It covers adding new OS versions, moving versions that reached end of life to unsupported, and periodic audits of the support matrix.
Setup needs the `release-notes` tool, installed as a global dotnet tool from GitHub Packages, which requires authentication even for public packages (a token with `read:packages` scope), and `markdownlint-cli` from npm, because linting the generated markdown is mandatory. The agent then runs `release-notes verify supported-os` for each .NET version to compare the files with upstream lifecycle data and reads the exit code before changing anything; the excerpt is cut off at that point. Changes to `os-packages.json` belong to a separate skill.
When your agent uses it
Adding a newly released OS version to the supported-os files
Moving an end-of-life OS version to the unsupported list
Running a periodic audit of the .NET support matrix
Example prompts
“Audit supported-os.json for .NET 10.0 against upstream lifecycle data.”
“Add Ubuntu 26.04 to the supported OS list for the active .NET versions.”
“Move the end-of-life Fedora releases to unsupported and regenerate the markdown.”
Requirements
The `release-notes` .NET tool, installed from GitHub Packages with a GitHub token
`markdownlint-cli` installed through npm
Workflow steps
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 44927bc. It shows what the files ask for, not the result of running them.
Tool permissions
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Runs code
Shell commands in SKILL.md call:
gh
curl
jq
git
npx
dotnet
npm
brew
From the folder's file list and the shell code blocks in SKILL.md.
Network
Hosts in commands or code, which the agent is likely to contact:
github.com
nuget.pkg.github.com
mcr.microsoft.com
Also links to:
learn.microsoft.com
endoflife.date
From URLs in SKILL.md, links to its own repository left out.
Credentials
Names these keys or tokens, usually read from environment variables:
GITHUB_TOKEN
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Context cost
Update .NET Supported OS Matrix loads about 4.1k tokens when it runs, and up to ~4.2k if it reads all its reference files. Until then it costs about 113 tokens; SKILL.md has 1,879 words of instructions outside code blocks.
Always· name and description, kept in context so the agent knows when to use it
~113
When it runs· the whole SKILL.md, loaded when a task matches
~4.1k
With references· SKILL.md plus every file in references/, read only if the agent opens them
~4.2k
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
Safety
Auto-check passed
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
Download SKILL.mdSave it as .claude/skills/update-supported-os/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
update-supported-os
description
Audit and update supported-os.json/md files to reflect current OS version support. Uses the release-notes tool for automated verification against upstream lifecycle data and markdown regeneration. USE FOR: adding new OS versions, moving EOL versions to unsupported, periodic support matrix audits. DO NOT USE FOR: os-packages.json changes (use update-os-packages skill), editing supported-os.md directly (it is generated from JSON).
Update Supported OS
Audit and update supported-os.json files in this repository. These files declare which operating system versions are supported for each .NET release. The corresponding supported-os.md files are generated from JSON — never hand-edit them.
When to use
A new OS version is released (e.g. Ubuntu 26.04, Fedora 44, Alpine 3.23)
An OS version reaches end-of-life and should be moved to unsupported
Periodic audit to ensure the support matrix is current
Prerequisites
The following tools must be installed:
release-notes
The release-notes tool is used to verify and generate supported OS files. The public dotnet-release tool is now for browsing release data and CVEs. Packages are published to GitHub Packages.
bash
# GitHub Packages requires authentication — use a GitHub token (PAT or GITHUB_TOKEN)
dotnet tool install -g release-notes \
--add-source https://nuget.pkg.github.com/richlander/index.json
# Verify
release-notes --help
Note: GitHub Packages requires authentication even for public repositories. If you get a 401 error, configure credentials for the source:
# Check 10.0 against local files
release-notes verify supported-os 10.0 release-notes
# Check against live data on GitHub (no local clone needed)
release-notes verify supported-os 10.0
Interpret the exit code:
Exit code 0 — No issues found. Stop here — nothing to do.
Exit code 2 — Issues found. The report is written to stdout as markdown. Proceed to step 2.
The report uses GitHub callout blocks to categorize issues:
If all versions return exit code 0, the matrix is current. Stop here.
2. Determine scope of changes
First, determine whether this .NET version is GA or pre-GA (preview/RC). Check releases-index.json for the support-phase field, or ask the user.
GA releases
WARNING — Move to unsupported-versions.
IMPORTANT — Add to supported-versions unless there's a known reason to exclude.
CAUTION — Informational only, no changes needed.
TIP — Usually intentional, skip unless the user says otherwise.
Pre-GA releases
Apply the preview release rules below. The support matrix should reflect what will be supported at GA, not what happens to be active today.
WARNING — Remove from supported-versions entirely. Do not add to unsupported-versions (Rule 1). Exception: skip Windows versions covered by ESU — unless the ESU itself expires before GA (see Rule 1).
IMPORTANT — Only add if the version's EOL date is after GA + 6 months (Rule 2).
CAUTION — Check the EOL date against the GA date. If EOL is before GA, remove from supported-versions (Rule 1). If EOL is after GA but before GA + 6 months, remove as well (Rule 2). If EOL is after GA + 6 months, no action needed.
TIP — Same as GA, skip unless the user says otherwise.
Rule 3 check — Independently of the verify report, check for preview distros that should be added proactively.
Present findings to the user with recommendations before making changes.
3. Apply changes to supported-os.json
For each confirmed change, edit release-notes/<version>/supported-os.json:
EOL versions (GA): Remove from supported-versions, add to unsupported-versions
EOL versions (pre-GA): Remove from supported-versions only — do not add to unsupported-versions
Add new versions: Insert into supported-versions (keep sorted, newest first)
Always update last-updated: Set to today's date (format: YYYY-MM-DD) in every JSON file that is modified — this is required for every change, no matter how small
Use the edit tool for surgical JSON changes
Versions are strings, not numbers — "3.22" not 3.22
4. Regenerate markdown
After updating the JSON, regenerate the markdown file:
This overwrites supported-os.md with content derived from the updated JSON.
Important: Do not hand-edit supported-os.md. It is generated from JSON by the tool. If the markdown output needs to change, update the generator or its Markout template in dotnet-release instead.
5. Run markdownlint
Verify the generated markdown passes linting (see prerequisites):
CI runs markdownlint via super-linter and will block the PR if linting fails. If linting fails on generated content, fix the generator or its Markout template in dotnet-release — do not patch the markdown by hand.
6. Cross-reference with os-packages.json
Check if any newly added distro versions need entries in os-packages.json. If so, inform the user to run the update-os-packages skill next.
ESU-covered WARNING items (GA releases, or pre-GA where ESU outlasts GA)
IMPORTANT items for versions intentionally excluded by Rule 2 (pre-GA)
CAUTION items with EOL after the GA date (pre-GA) or any CAUTION items (GA)
Spot-check the generated markdown renders correctly.
8. Create PR
Create a branch:
bash
git checkout -b update-supported-os-<date>
Commit all changed files (supported-os.json and supported-os.md for each version):
bash
git add release-notes/*/supported-os.json release-notes/*/supported-os.md
git commit -m "Update supported OS matrix — <summary of changes>"
Push and open a PR:
bash
gh pr create --title "Update supported OS matrix" --body "<description of changes>"
Preview release rules
.NET releases go through a preview period before GA (General Availability). During this period, special rules apply to limit documentation cruft at GA and prevent users from deploying to environments that will soon lose support.
Determining GA date
.NET releases always GA in November. The version number and GA year follow a predictable pattern:
Even .NET versions (10, 12, 14, …) GA in odd years — LTS (Long Term Support)
Odd .NET versions (9, 11, 13, …) GA in even years — STS (Standard Term Support)
For example: .NET 10 GAs November 2025, .NET 11 GAs November 2026, .NET 12 GAs November 2027.
To confirm, check releases-index.json for the release-date of the target version. If the GA date is not yet populated, use the November convention above.
Rule 1 — Remove versions that won't be supported at GA
While a .NET release is in preview, remove OS versions from supported-versions if they are already EOL or will reach EOL before the GA date. Do not add them to unsupported-versions — the unsupported list is for versions that were supported during a GA release and later went EOL. Since the .NET release hasn't shipped yet, there is no GA history to preserve.
This rule applies to both WARNING items (already EOL) and CAUTION items (approaching EOL with an EOL date before GA).
Windows ESU exception: Windows versions covered by Extended Security Updates (ESU) are not considered EOL while ESU is active. The verify tool flags these based on mainstream support dates, but ESU extends their lifecycle. However, check whether the ESU program itself expires before the GA date — if it does, the version should be removed.
Rationale: The unsupported-versions list exists as a historical record for users of a shipped release. During preview, no users depend on the support matrix, so versions that won't survive to GA should simply be removed to keep the document clean.
Show full SKILL.md (728 more words)Show less
Rule 2 — Only list versions supported at GA + 6 months
When evaluating whether an OS version should be in supported-versions — whether adding a new version or reviewing one already listed — check whether the version will still be supported (not EOL) at GA date + 6 months.
If the OS version's EOL date is after GA + 6 months → add or keep it
If the OS version's EOL date is before GA + 6 months → do not add it; if already listed, remove it
If the OS version has no known EOL date (still active with no announced end) → add or keep it
Rationale: Users should be able to adopt a .NET release at GA and have confidence their OS will remain supported for a reasonable period. Listing OS versions that go EOL shortly after GA creates a "rug-pulling" scenario.
Rule 3 — Add preview distros that will GA before .NET GA
If a distro version is currently in preview but is expected to GA before the .NET GA date, it can be added to supported-versions if all of the following are true:
The distro version is expected to GA before the .NET GA date (use the distro's published release schedule or cadence to estimate)
It passes Rule 2's EOL check (EOL after GA + 6 months)
Preview builds of the distro are publicly available
For example: gh search code "fedora/44" or gh search code "ubuntu/26.04". Do not use spaces (e.g. "ubuntu 26.04") — the images are organized by folder path.
If conditions 1–3 are met but there is no container image at dotnet-buildtools-prereqs-docker:
If no issue exists, ask the user whether to create one
Once the image is available, the distro version can be added in a follow-up update
If the distro GAs after .NET GA → do not add it yet.
Rationale: By the time .NET ships, these distro versions will be fully released. Adding them early ensures the support matrix is complete at GA without requiring a last-minute update. However, we can only validate support for a distro version when we have build infrastructure (container images) for it.
Examples
.NET 11 (STS, odd version) GAs November 2026. GA + 6 months = May 2027.
Rule 1 — Remove EOL versions:
Alpine 3.20 (EOL 2026-04-01) — remove from supported, do not add to unsupported (already EOL, pre-GA)
Android 13 (EOL 2026-03-02) — remove from supported, do not add to unsupported (already EOL, pre-GA)
Rule 1 — Remove approaching-EOL versions (CAUTION items with EOL before GA):
openSUSE Leap 15.6 (EOL 2026-04-30) — approaching EOL, EOL before November 2026 GA → remove from supported
Fedora 42 (EOL 2026-05-13) — approaching EOL, EOL before November 2026 GA → remove from supported
Debian 12 (EOL 2026-06-10) — approaching EOL, EOL before November 2026 GA → remove from supported
Rule 2 — GA + 6 months gate:
Alpine 3.21 (EOL 2026-11-01) — do not add (EOL before May 2027)
Alpine 3.23 (EOL 2027-11-01) — add (EOL after May 2027)
Rule 3 — Preview distros:
Fedora 44 (preview, expected ~April 2026, EOL ~May 2027) — expected before .NET 11 GA ✅, passes EOL check ✅, preview builds available ✅, prereqs image published ✅ → add
Fedora 44 (same, but Dockerfiles exist in prereqs repo without published images) — expected before GA ✅, passes EOL check ✅, preview builds available ✅, prereqs image not yet published ❌ → do not add yet, check/file issue at dotnet-buildtools-prereqs-docker
Ubuntu 26.04 (preview, expected ~April 2026, EOL ~April 2031) — expected before .NET 11 GA ✅, passes EOL check ✅, preview builds available ✅, prereqs image published ✅ → add
Alpine 3.25 (preview, expected ~December 2026) — do not add (will still be preview or just released at .NET 11 GA)
Key facts
The id field in each distribution matches endoflife.date product IDs
Versions are strings, not numbers — "3.22" not 3.22
supported-versions should be ordered newest-first
unsupported-versions tracks previously-supported versions for historical reference
Non-Linux OS families (Android, Apple, Windows) follow the same structure but use different lifecycle sources
The last-updated field should reflect the date of any change
Active .NET versions with supported-os.json: 8.0, 9.0, 10.0, 11.0
Update .NET Supported OS Matrix next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
Update .NET Supported OS Matrix compared with similar skills
Skill
Stars
Used in
Tokens
Auto-check
Licence
Repo updated
Update .NET Supported OS Matrix this skilldotnet/core
Release a new version of pi-extensions: bump individual package versions (independent mode), update CHANGELOGs and READMEs, create per-package git tags, publish a GitHub release, and publish…
Produces the changes.json manifest for a .NET preview, RC or GA milestone by choosing the right VMR base and head refs and running release-notes generate changes.
Audits and updates the supported-os.json files for .NET releases, checking them against upstream lifecycle data and regenerating the markdown with the release-notes tool. NET release supports.md` files are generated from the JSON and must never be hand-edited.
When should I use Update .NET Supported OS Matrix?
Update .NET Supported OS Matrix fits situations like: adding a newly released OS version to the supported-os files; moving an end-of-life OS version to the unsupported list; running a periodic audit of the .NET support matrix.
How do I install Update .NET Supported OS Matrix in Claude Code?
Run `npx skills add dotnet/core --skill update-supported-os -a claude-code`. Or copy the skill folder (.github/skills/update-supported-os in dotnet/core) into .claude/skills/update-supported-os in your project. Claude Code loads it when a task matches its description.
How do I install Update .NET Supported OS Matrix in Codex?
Run `npx skills add dotnet/core --skill update-supported-os -a codex`. Or copy the skill folder (.github/skills/update-supported-os in dotnet/core) into .agents/skills/update-supported-os in your project. Codex loads it when a task matches its description.
Can I use Update .NET Supported OS Matrix in Cursor, Gemini CLI or GitHub Copilot?
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add dotnet/core --skill update-supported-os -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/update-supported-os, .gemini/skills/update-supported-os, .github/skills/update-supported-os and .opencode/skills/update-supported-os in your project.
What does Update .NET Supported OS Matrix need to run?
Going by SKILL.md and its folder, Update .NET Supported OS Matrix needs the command-line tools its instructions call (gh, curl, jq, git, npx and dotnet) and credentials named GITHUB_TOKEN. Our summary lists: The `release-notes` .NET tool, installed from GitHub Packages with a GitHub token; `markdownlint-cli` installed through npm.
Does Update .NET Supported OS Matrix access the network?
SKILL.md names 5 domains. In commands or code: github.com, nuget.pkg.github.com and mcr.microsoft.com; the agent is likely to contact these when it follows the instructions. As links in the text: learn.microsoft.com and endoflife.date. This is read from the text; nothing was executed.
Is Update .NET Supported OS Matrix safe to install?
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
What licence does Update .NET Supported OS Matrix use?
Update .NET Supported OS Matrix is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
How many tokens does Update .NET Supported OS Matrix use?
About 4.1k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 144 tokens, read only when the agent opens those files.
What are the alternatives to Update .NET Supported OS Matrix?
Skills that share tags, products or a category with Update .NET Supported OS Matrix: README Badges and Headers (jal-co/shieldcn, 916 stars), Ccb GitHub (SeemSeam/claude_codex_bridge, 3.5k stars), Lint Repository Markdown (codsen/codsen, 214 stars) and Release (emanuelcasco/pi-mono-extensions, 106 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Who maintains Update .NET Supported OS Matrix?
dotnet (a GitHub organization, an official publisher) maintains it in dotnet/core, which has 22,038 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on October 5, 2026.
Source: dotnet/core on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.