-
Notifications
You must be signed in to change notification settings - Fork 1.7k
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.