microsoft / microsoft/winget-cli

Add Windows Option Features as WinGet Source

Open
#5,986 3 comments 4 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Issue-Feature
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 telnet installs 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-Features
  • Get-WindowsOptionalFeature
  • Get-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 runs dism /online /Enable-Feature /FeatureName:TelnetClient

  • winget uninstall Microsoft.Windows.IIS
    → internally runs dism /online /Disable-Feature /FeatureName:IIS-WebServerRole

3. Integrate optional features into existing WinGet verbs
  • winget search telnet → shows the built‑in Telnet Client
  • winget list → shows optional features and their state
  • winget 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.