microsoft / microsoft/winget-cli
Add Windows Option Features as WinGet Source
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 26.4k
- Forks
- 1.8k
- Avg merge
- 1d 11h
- Merged PRs (30d)
- 15
Description
Relevant area(s)
WinGet CLI
Description of the new feature / enhancement
Windows provides some features that are 'optional'. Winget should make installing and removing those features as easy as other sources.
Example: A user reads they need to install telnet to test their protocol. They type in winget install telnet... and the user is told to install "AbsoluteTelnet SSH Client " While that may be great software, it is not what the user wanted.
Rather it might make sense to install TelNet that is built into windows, or minimally offer it.
Proposed technical implementation details
Absolutely — here’s the updated version with the specific incorrect behavior called out:
winget install telnet currently installs “AbsoluteTelnet SSH Client” instead of the built‑in Windows Telnet Client.
Proposal: Add a Windows “Optional Features” Source to WinGet
Summary
Windows includes a wide range of built‑in optional features—such as Telnet Client, Hyper‑V, IIS, RSAT, and legacy subsystems—that can be enabled through DISM, Enable-WindowsOptionalFeature, or the Windows Features control panel. Despite this, WinGet does not surface these built‑in features as installable packages. As a result, when a user attempts to install a Windows component using WinGet, the system may install an unrelated Microsoft Store or third‑party application instead of enabling the native feature.
A clear example:
Typing winget install telnet currently installs AbsoluteTelnet SSH Client, a third‑party application, even though Windows already includes an official Telnet Client that can be enabled instantly.
This proposal recommends adding a dedicated “optional-features” source to WinGet so that built‑in Windows features appear as first‑class packages. WinGet would then invoke DISM or PowerShell under the hood to enable or disable these features.
Problem Statement
WinGet’s current behavior creates confusion and inconsistency:
winget install telnetinstalls AbsoluteTelnet SSH Client, not the Windows Telnet Client.- Users assume WinGet will install the built‑in feature, but WinGet has no awareness of Windows optional features.
- This leads to:
- Incorrect or unintended installations
- Security and trust concerns
- Fragmented provisioning workflows
- Reduced confidence in WinGet as the unified package manager for Windows
Windows already exposes these features through DISM and PowerShell. WinGet simply doesn’t surface them.
Proposed Solution
1. Add a new WinGet source: optional-features
This source would enumerate all features available via:
DISM /online /Get-FeaturesGet-WindowsOptionalFeatureGet-WindowsCapability
Each feature would appear as a package with:
- Id (e.g.,
Microsoft.Windows.TelnetClient) - Name
- Description
- State (Enabled, Disabled, Not Present)
2. WinGet would call DISM or PowerShell internally
Examples:
-
winget install Microsoft.Windows.TelnetClient
→ internally runsdism /online /Enable-Feature /FeatureName:TelnetClient -
winget uninstall Microsoft.Windows.IIS
→ internally runsdism /online /Disable-Feature /FeatureName:IIS-WebServerRole
3. Integrate optional features into existing WinGet verbs
winget search telnet→ shows the built‑in Telnet Clientwinget list→ shows optional features and their statewinget upgrade→ could surface capability updates (e.g., RSAT, language packs)
Benefits
For Users
- Eliminates the current problem where WinGet installs the wrong app
- Provides a predictable, unified installation experience
- Makes built‑in Windows features discoverable and easy to manage
For IT Admins & DevOps
- Enables consistent provisioning across images and automation pipelines
- Removes the need to mix WinGet with DISM scripts
- Reduces accidental installation of untrusted third‑party tools
For Microsoft
- Strengthens WinGet’s role as the authoritative package manager
- Improves user trust and reduces support friction
- Enhances discoverability of Windows’ own capabilities
Conclusion
Adding a Windows “optional features” source to WinGet would provide a well known and supported list of tools. that the user probably intended to install.
And while I know DSC is supposed to support OptionalFeatures, this scenario is targeted at install.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
No files or tests are named. Start with the WinGet CLI flows for search, install, uninstall, list, and upgrade, then compare the proposed DISM commands with Get-WindowsOptionalFeature and Get-WindowsCapability. Done means optional Windows features are discoverable and their enabled, disabled, or absent states are handled through the relevant WinGet verbs.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp, powershell
- Domain
- cli, operating-systems
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100