---
title: "Winget"
weight: 100
---

After releasing to GitHub, GitLab, or Gitea, GoReleaser can generate and publish
a _winget manifest_ and commit to a git repository, and PR it to `winget-pkgs`
if instructed to.

The `winget` section specifies how the **manifests** should be created:

```yaml {filename=".goreleaser.yaml"}
winget:
  - # Name of the recipe
    #
    # Default: the project name.
    # Templates: allowed.
    name: myproject

    # Publisher name.
    #
    # Templates: allowed.
    # Required
    publisher: Foo Inc

    # Your app's description.
    #
    # Templates: allowed.
    # Required
    # Default: inferred from global metadata.
    short_description: "Software to create fast and easy drum rolls."

    # License name.
    #
    # Templates: allowed.
    # Required
    # Default: inferred from global metadata.
    license: "mit"

    # Publisher URL.
    #
    # Templates: allowed.
    publisher_url: https://goreleaser.com

    # Publisher support URL.
    #
    # Templates: allowed.
    publisher_support_url: "https://github.com/user/repo/issues/new"

    # Privacy URL.
    #
    # {{< g_inline_version "v2.9" >}}
    # Templates: allowed.
    privacy_url: "https://carlosbecker.com/privacy"

    # Package identifier.
    #
    # Default: the project name.
    # Templates: allowed.
    package_identifier: myproject.myproject

    # Default locale used for the generated manifests.
    #
    # This sets the `DefaultLocale`, `PackageLocale` and `InstallerLocale`
    # fields, as well as the locale manifest filename
    # (e.g. `<package>.locale.en-GB.yaml`).
    #
    # {{< g_inline_version "v2.17" >}}
    # Default: 'en-US'.
    # Templates: allowed.
    default_locale: en-GB

    # Additional locale manifests for the package.
    #
    # WinGet supports multiple locale manifests. Each one overrides specific
    # fields for a given locale. Any field that is not set falls back to the
    # default locale manifest value.
    #
    # The `locale` field is required and must not match the `default_locale`.
    # Duplicate locales are rejected.
    #
    # Each additional locale manifest can override the following fields:
    # publisher, publisher_url, publisher_support_url, privacy_url, author,
    # package_name, homepage, license, license_url, copyright, copyright_url,
    # short_description, description, tags, release_notes, release_notes_url,
    # installation_notes.
    #
    # {{< g_inline_version "v2.18-unreleased" >}}
    additional_locales:
      - locale: pt-BR
        short_description: "Portuguese (Brazil) description here."
        tags:
          - cli
      - locale: fr-FR
        short_description: "French description here."

    # Package name.
    #
    # Default: name.
    # {{< g_inline_version "v2.14" >}}
    # Templates: allowed.
    package_name: "Foo Bar"

    # IDs of the archives to use.
    # Empty means all IDs.
    ids:
      - foo
      - bar

    # Which format to use.
    #
    # Valid options are:
    # - '':        archives or binaries
    # - 'msi':     msi installers (requires the MSI pipe configured) {{< g_inline_pro >}}
    # - 'nsis':    nsis installers (requires the NSIS pipe configured) {{< g_inline_pro >}}
    # - 'archive': archives (only if format is zip),
    # - 'binary':  binaries (requires an archive configuration with format set to 'binary' as well)
    #
    # This feature is only available in GoReleaser Pro.
    # Default: ''.
    use: msi

    # GOAMD64 to specify which amd64 version to use if there are multiple
    # versions from the build section.
    #
    # Default: 'v1'.
    goamd64: v1

    # Product code to be used.
    #
    # Usually needed when `use: msi`.
    #
    # This feature is only available in GoReleaser Pro.
    product_code: AAAA-BBB-CCC-DDD-EEEFFF

    # URL which is determined by the given Token (github, gitlab or gitea).
    #
    # Default depends on the client.
    # Templates: allowed.
    url_template: "https://github.mycompany.com/foo/bar/releases/download/{{ .Tag }}/{{ .ArtifactName }}"

    # The project name and current git tag are used in the format string.
    #
    # Templates: allowed.
    commit_msg_template: "{{ .PackageIdentifier }}: {{ .Tag }}"

    # Path for the file inside the repository.
    #
    # Default: 'manifests/<lowercased first char of publisher>/<publisher>/<name>/<version>'.
    path: manifests/g/goreleaser/myproject/1.19

    # Your app's homepage.
    #
    # Default: inferred from global metadata.
    homepage: "https://example.com/"

    # Your app's long description.
    #
    # Templates: allowed.
    # Default: inferred from global metadata.
    description: "Software to create fast and easy drum rolls."

    # License URL.
    #
    # Templates: allowed.
    license_url: "https://goreleaser.com/license"

    # Copyright.
    #
    # Templates: allowed.
    copyright: "Becker Software LTDA"

    # Copyright URL.
    #
    # Templates: allowed.
    copyright_url: "https://goreleaser.com/copyright"

    # Author.
    #
    # Templates: allowed.
    author: "Carlos Becker"

    # Setting this will prevent goreleaser to actually try to commit the updated
    # package - instead, it will be stored on the dist directory only,
    # leaving the responsibility of publishing it to the user.
    #
    # If set to auto, the release will not be uploaded to the repository
    # in case there is an indicator for prerelease in the tag e.g. v1.0.0-rc1
    #
    # Templates: allowed.
    skip_upload: true

    # Release notes.
    #
    # If you want to use the release notes generated by GoReleaser, use
    # `{{.Changelog}}` as the value.
    #
    # Templates: allowed.
    release_notes: "{{.Changelog}}"

    # Release notes URL.
    #
    # Templates: allowed.
    release_notes_url: "https://foo.bar/changelog/{{.Version}}"

    # Installation notes.
    #
    # {{< g_inline_version "v2.9" >}}
    # Templates: allowed.
    installation_notes: "Information on how to install. Can also be a URL"

    # Tags.
    #
    # GoReleaser converts all tags to lowercase and replace
    # spaces with hyphens (-) as per winget's best practices.
    tags:
      - golang
      - cli

    # Package dependencies.
    #
    # Templates: allowed.
    dependencies:
      - package_identifier: Foo.Bar
        minimum_version: 1.2.3


{{% g_include file="includes/repository.md" %}}

```

{{< g_templates >}}

{{% g_include file="includes/prs.md" %}}
