Skip to main content
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:
1

Version File

Declares package identifier, version, and default locale
2

Installer File

Contains all installer-related information
3

Default Locale File

Primary language metadata (required fields)
4

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

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

Optional Metadata

Providing optional fields enhances the user experience:

Publisher Information

Publisher: Microsoft
PublisherURL: https://www.microsoft.com/
PublisherSupportURL: https://support.microsoft.com/
PrivacyURL: https://privacy.microsoft.com/

Package Information

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
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 TypeSilent SwitchDocumentation
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 and OS Requirements

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\app.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

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:
  1. Prompt for installer URL
  2. Download and calculate SHA256
  3. Prompt for metadata
  4. Generate manifest files
  5. Optionally submit PR

Validation

Validate manifests before submission:
winget validate <path-to-manifests>
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:
1

Validate Locally

winget validate manifests/p/Publisher/App/1.0.0/
2

Fork winget-pkgs Repository

Fork microsoft/winget-pkgs on GitHub
3

Add Manifest Files

Place files in correct folder structure:
manifests/<letter>/<publisher>/<app>/<version>/
4

Create Pull Request

Submit PR to main branch for validation and review
5

Automated Validation

Wait for automated checks and address any issues
6

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

Build docs developers (and LLMs) love