Manifests are YAML files that describe packages in the Windows Package Manager ecosystem. They contain all the metadata needed to discover, download, and install applications.
What is a Manifest?
A manifest is a structured YAML document that defines:
Package identification and versioning
Installer locations and checksums
Localized descriptions and metadata
System requirements and dependencies
Installation behavior and switches
The YAML format was chosen for its human readability and consistency with other Microsoft development tools.
Manifest Types
WinGet supports two manifest formats:
Singleton Manifest
A single YAML file containing all package information. Used for simple packages with one installer and one locale.
# From manifest.md:62-76 (Minimal singleton example)
PackageIdentifier : # Publisher.package format
PackageVersion : # Version numbering format
PackageLocale : # BCP 47 format (e.g. en-US)
Publisher : # The name of the publisher
PackageName : # The name of the application
License : # The license of the application
ShortDescription : # The description of the application
Installers :
- Architecture : # Enumeration of supported architectures
InstallerType : # Enumeration of supported installer types
InstallerUrl : # Path to download installation file
InstallerSha256 : # SHA256 calculated from installer
ManifestType : # The manifest file type
ManifestVersion : 1.4.0
The singleton format is only valid for packages with a single installer and single locale. For multiple installers or localizations, use the multi-file format.
Multi-File Manifest
Separates concerns into multiple YAML files for better organization and localization support.
Required files:
Version File
Declares package identifier, version, and default locale
Installer File
Contains all installer-related information
Default Locale File
Primary language metadata (required fields)
Additional Locale Files (Optional)
Translations in other languages
Complete Multi-File Example
Here’s the Windows Terminal package broken into multiple files:
Version File
# manifests/m/Microsoft/WindowsTerminal/1.6.10571.0/Microsoft.WindowsTerminal.yaml
PackageIdentifier : Microsoft.WindowsTerminal
PackageVersion : 1.6.10571.0
DefaultLocale : en-US
ManifestType : version
ManifestVersion : 1.4.0
Installer File
# manifests/m/Microsoft/WindowsTerminal/1.6.10571.0/Microsoft.WindowsTerminal.installer.yaml
PackageIdentifier : Microsoft.WindowsTerminal
PackageVersion : 1.6.10571.0
Platform :
- Windows.Desktop
MinimumOSVersion : 10.0.18362.0
InstallerType : msix
InstallModes :
- silent
PackageFamilyName : Microsoft.WindowsTerminal_8wekyb3d8bbwe
Installers :
- Architecture : x64
InstallerUrl : https://github.com/microsoft/terminal/releases/download/v1.6.10571.0/Microsoft.WindowsTerminal_1.6.10571.0_8wekyb3d8bbwe.msixbundle
InstallerSha256 : 092aa89b1881e058d31b1a8d88f31bb298b5810afbba25c5cb341cfa4904d843
SignatureSha256 : e53f48473621390c8243ada6345826af7c713cf1f4bbbf0d030599d1e4c175ee
- Architecture : arm64
InstallerUrl : https://github.com/microsoft/terminal/releases/download/v1.6.10571.0/Microsoft.WindowsTerminal_1.6.10571.0_8wekyb3d8bbwe.msixbundle
InstallerSha256 : 092aa89b1881e058d31b1a8d88f31bb298b5810afbba25c5cb341cfa4904d843
SignatureSha256 : e53f48473621390c8243ada6345826af7c713cf1f4bbbf0d030599d1e4c175ee
ManifestType : installer
ManifestVersion : 1.4.0
Default Locale File
# manifests/m/Microsoft/WindowsTerminal/1.6.10571.0/Microsoft.WindowsTerminal.locale.en-US.yaml
PackageIdentifier : Microsoft.WindowsTerminal
PackageVersion : 1.6.10571.0
PackageLocale : en-US
Publisher : Microsoft
PublisherURL : https://www.microsoft.com/
PrivacyURL : https://privacy.microsoft.com/
PackageName : Windows Terminal
PackageURL : https://docs.microsoft.com/windows/terminal/
License : MIT
LicenseURL : https://github.com/microsoft/terminal/blob/master/LICENSE
ShortDescription : The new Windows Terminal, a tabbed command line experience for Windows.
Tags :
- console
- command-line
- shell
- command-prompt
- powershell
- wsl
- developer-tools
- utilities
- cli
- cmd
- ps
- terminal
ManifestType : defaultLocale
ManifestVersion : 1.4.0
Additional Locale File
# manifests/m/Microsoft/WindowsTerminal/1.6.10571.0/Microsoft.WindowsTerminal.locale.fr-FR.yaml
PackageIdentifier : Microsoft.WindowsTerminal
PackageVersion : 1.6.10571.0
PackageLocale : fr-FR
Publisher : Microsoft
ShortDescription : Le nouveau terminal Windows, une expérience de ligne de commande à onglets pour Windows.
ManifestType : locale
ManifestVersion : 1.4.0
Manifest Schema
Manifests are validated against JSON schemas. WinGet uses versioned schemas to ensure compatibility.
Schema Versions
Schemas are located in the repository:
schemas/JSON/manifests/
├── latest/
│ ├── manifest.version.latest.json
│ ├── manifest.installer.latest.json
│ ├── manifest.defaultLocale.latest.json
│ └── manifest.locale.latest.json
├── v1.0.0/
├── v1.1.0/
├── v1.2.0/
├── v1.4.0/
└── v1.28.0/ (current)
Always use the latest schema version for new manifests to access the newest features.
Schema References
# yaml-language-server directive for IDE support
# yaml-language-server: $schema=https://aka.ms/winget-manifest.singleton.1.2.0.schema.json
PackageIdentifier : AppInstallerTest.TestArpVersionSameVersion
PackageVersion : '1.0'
# ... rest of manifest
YAML Conventions
WinGet manifests follow specific YAML conventions:
Data Type Notation
Scalar types
Arrays
Objects
PackageName : "Windows Terminal" # string
MinimumOSVersion : 10.0.18362.0 # string (version)
ManifestVersion : 1.4.0 # version number
Naming Rules
All fields must be Pascal-cased and cannot be duplicated.
Correct:
PackageIdentifier : Microsoft.PowerToys
PackageName : PowerToys
ShortDescription : Windows system utilities
Incorrect:
packageIdentifier : Microsoft.PowerToys # Wrong casing
Package-Name : PowerToys # Wrong format
PackageIdentifier : Contoso.App # Duplicate key (if used twice)
Unsupported YAML Features
WinGet manifests currently do not support:
Anchors and aliases
Complex keys
Sets
Required Fields
Singleton Manifest
PackageIdentifier : Publisher.Application # Required
PackageVersion : 1.0.0 # Required
PackageLocale : en-US # Required
Publisher : Publisher Name # Required
PackageName : Application Name # Required
License : MIT # Required
ShortDescription : Brief description # Required
Installers : # Required
- Architecture : x64 # Required
InstallerType : exe # Required
InstallerUrl : https://... # Required
InstallerSha256 : abc123... # Required
ManifestType : singleton # Required
ManifestVersion : 1.4.0 # Required
Multi-File Manifest
Version file requirements:
PackageIdentifier : Publisher.Application
PackageVersion : 1.0.0
DefaultLocale : en-US
ManifestType : version
ManifestVersion : 1.4.0
Installer file requirements:
PackageIdentifier : Publisher.Application # Must match version file
PackageVersion : 1.0.0 # Must match version file
Installers : # At least one installer
- Architecture : x64
InstallerUrl : https://...
InstallerSha256 : abc123...
ManifestType : installer
ManifestVersion : 1.4.0
Default locale requirements:
PackageIdentifier : Publisher.Application
PackageVersion : 1.0.0
PackageLocale : en-US # Must match DefaultLocale
Publisher : Publisher Name
PackageName : Application Name
License : MIT
ShortDescription : Brief description
ManifestType : defaultLocale
ManifestVersion : 1.4.0
Providing optional fields enhances the user experience:
Publisher : Microsoft
PublisherURL : https://www.microsoft.com/
PublisherSupportURL : https://support.microsoft.com/
PrivacyURL : https://privacy.microsoft.com/
PackageName : Windows Terminal
PackageURL : https://docs.microsoft.com/windows/terminal/
Author : Microsoft Corporation
Moniker : terminal
Copyright : Copyright (c) Microsoft Corporation
CopyrightURL : https://github.com/microsoft/terminal/blob/master/LICENSE
ReleaseNotes : |
- Bug fixes
- Performance improvements
ReleaseNotesURL : https://github.com/microsoft/terminal/releases/tag/v1.6.10571.0
Discovery and Search
Tags :
- terminal
- console
- command-line
- powershell
- developer-tools
ShortDescription : Modern terminal application for Windows
Description : |
Windows Terminal is a modern, fast, efficient, powerful, and productive
terminal application for users of command-line tools and shells like
Command Prompt, PowerShell, and WSL.
Installer Configuration
Installer Types
Specify the installer type for proper handling:
InstallerType : msix # Auto-detected behavior
# Options: msix, msi, appx, exe, zip, inno, nullsoft, wix, burn, pwa, portable, font
For Nullsoft and Inno Setup installers, WinGet automatically sets silent installation switches.
Installer Switches
Customize installation behavior:
InstallerSwitches :
Silent : /S
SilentWithProgress : /S
Interactive : /interactive
InstallLocation : /DIR="<INSTALLPATH>"
Log : /LOG="<LOGPATH>"
Upgrade : /upgrade
Custom : /CustomFlag
Common silent switches by installer type:
Installer Type Silent Switch Documentation MSI /qMSI Command-Line Options InstallShield /sInstallShield Parameters Inno Setup /SILENT or /VERYSILENTInno Setup docs Nullsoft /SNSIS Silent Install
Architecture-Specific Installers
Installers :
- Architecture : x86
InstallerUrl : https://example.com/app-x86.exe
InstallerSha256 : abc123...
- Architecture : x64
InstallerUrl : https://example.com/app-x64.exe
InstallerSha256 : def456...
- Architecture : arm64
InstallerUrl : https://example.com/app-arm64.exe
InstallerSha256 : ghi789...
Platform :
- Windows.Desktop # Win32 applications
# - Windows.Universal # UWP applications
MinimumOSVersion : 10.0.18362.0 # Windows 10 1903
Nested Installers (Archives)
For installers packaged in ZIP files:
InstallerType : zip
NestedInstallerType : exe
NestedInstallerFiles :
- RelativeFilePath : "bin \a pp.exe"
PortableCommandAlias : "myapp"
Advanced Features
Dependencies
Declare package dependencies:
Dependencies :
WindowsFeatures :
- IIS-WebServer
WindowsLibraries :
- Microsoft.UI.Xaml.2.7
PackageDependencies :
- PackageIdentifier : Microsoft.DotNet.DesktopRuntime.6
MinimumVersion : 6.0.0
ExternalDependencies :
- "Visual C++ Redistributable"
Apps and Features Entries
Correlate with Add/Remove Programs:
AppsAndFeaturesEntries :
- DisplayName : "Application Name"
DisplayVersion : "1.0.0"
ProductCode : "{GUID}"
UpgradeCode : "{GUID}"
InstallerType : msi
Package Family Name (MSIX/AppX)
PackageFamilyName : Microsoft.WindowsTerminal_8wekyb3d8bbwe
Install Modes
InstallModes :
- interactive
- silent
- silentWithProgress
Scope Control
Scope : user # user | machine
Upgrade Behavior
UpgradeBehavior : install # install | uninstallPrevious
Creating Manifests
WinGet provides tools to help create manifests:
Using WinGetCreate
Install WinGetCreate
Create new manifest
Update existing manifest
winget install wingetcreate
WinGetCreate can automatically submit pull requests to the winget-pkgs repository after creating manifests.
Using YAMLCreate.ps1
The winget-pkgs repository includes a PowerShell script:
git clone https://github.com/microsoft/winget-pkgs
cd winget-pkgs/Tools
. \ YAMLCreate.ps1
The script will:
Prompt for installer URL
Download and calculate SHA256
Prompt for metadata
Generate manifest files
Optionally submit PR
Validation
Validate manifests before submission:
Validate manifest
Validate specific version
winget validate < path-to-manifest s >
The validator checks:
Schema compliance
Required fields present
Correct file naming
Valid URLs and hashes
Proper folder structure
Best Practices
Limit strings to 100 characters before line breaks for readability. # Good
ShortDescription : A brief description
# Better for long descriptions
Description : |
A longer description that spans
multiple lines for better readability
Match PackageName and Publisher with Add/Remove Programs entries
Use consistent naming across versions
Include Product Codes for MSI installers
Maintain version numbering scheme
Provide as many optional fields as possible:
URLs (package, publisher, license, privacy)
Tags for discoverability
Moniker for popular packages
Release notes
Localized descriptions
Always include SHA256 hash
Use HTTPS URLs only
Include SignatureSha256 for signed packages
Verify installer sources
All installers must support silent installation:
Test silent switches before submitting
Use standard switches for common installer types
Document custom switches if needed
Submission Process
After creating manifests:
Validate Locally
winget validate manifests/p/Publisher/App/1.0.0/
Fork winget-pkgs Repository
Add Manifest Files
Place files in correct folder structure: manifests/<letter>/<publisher>/<app>/<version>/
Create Pull Request
Submit PR to main branch for validation and review
Automated Validation
Wait for automated checks and address any issues
Manual Review
Community moderators will review and approve
Only one manifest per pull request. Microsoft reserves the right to refuse any submission.
Schema Reference
Complete schema documentation is available in the repository:
Next Steps
Sources Understand how sources host and serve manifests
Packages Learn about package structure and metadata