Skip to content

Specification: Native DSC v3 Resources in WinGet Client#6291

Draft
denelon wants to merge 2 commits into
microsoft:masterfrom
denelon:spec/dsc-resource-implementation
Draft

Specification: Native DSC v3 Resources in WinGet Client#6291
denelon wants to merge 2 commits into
microsoft:masterfrom
denelon:spec/dsc-resource-implementation

Conversation

@denelon

@denelon denelon commented Jun 17, 2026

Copy link
Copy Markdown
Collaborator

📖 Description

Specification for native DSC v3 command-based resources shipped with the WinGet client. Extends the existing winget dsc infrastructure (which already provides Package, Source, UserSettings, and AdminSettings resources) with enhanced capabilities and new resources.

Key aspects:

  • Enhanced Package resource — supports both single-package mode (id) and declarative list mode (packages array) for managing sets of packages as desired state
  • New Pin resource — manages package pinning (pinning, blocking, gating) via DSC
  • Existing resources documented — UserSettings, AdminSettings (requires elevation), Source
  • Resource manifests (.dsc.json) enable DSC v3 discovery without spawning WinGet

Changes addressing review feedback (June 22):

  • Merged PackageList into Package resource — uses packages array for list mode (simpler surface area per Trenly's suggestion)
  • Documented existing AdminSettings resource — requires securityContext: elevated, is a separate resource from UserSettings
  • Acknowledged that winget dsc already exists as the DSC v3 resource protocol handler; reframed spec as extending existing infrastructure
  • Updated resource table to distinguish existing, enhanced, and new resources

Authored with GitHub Copilot assistance.

🔗 References

Related Issues:

🔍 Validation

Spec document — no code changes to validate.

✅ Checklist

📋 Issue Type

  • Bug fix
  • Feature
  • Task
Microsoft Reviewers: Open in CodeFlow

Specification for native command-based DSC v3 resources shipped with
the WinGet client, including Package, PackageList, Source, Settings,
and Pin resources. Eliminates ~92s adapter overhead per resource.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
| Resource Type | Purpose | DSC Operations |
|--------------|---------|----------------|
| `Microsoft.WinGet/Package` | Single package desired state | Get, Set, Test |
| `Microsoft.WinGet/PackageList` | Declarative list of packages | Get, Set, Test |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feels like this could just be an extension of Microsoft.WinGet/Package where the parameters could be lists instead of single values, or settings is itself a list type?

| `ensure` | enum | No | `present` \| `absent` |
| `trustLevel` | enum | No | `none` \| `trusted` |

### Microsoft.WinGet/Settings

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How do admin settings get set?

winget dsc list # List available resources
```

The `winget dsc` subcommand is NOT intended for direct user interaction — it implements the DSC v3 protocol for the runtime to invoke. It does not appear in `winget --help` by default (hidden command, visible with `--verbose`).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

winget dsc is currently an alias for winget configure

- Merge PackageList into Package (list mode via 'packages' array, single via 'id')
- Document existing AdminSettings resource (requires elevation, separate from UserSettings)
- Acknowledge existing winget dsc infrastructure; reframe spec as extending it
- Clarify resource table: existing vs enhanced vs new resources

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants