Home

Awesome

<h1><img src="assets/logo.svg" align="left" height="39" alt="Komac logo">Komac - Another WinGet Manifest Creator <img src="assets/banner.svg" align="right" height="39" alt="Komac banner"></h1>

GitHub release (release name instead of tag name) GitHub Repo stars Issues License

Komac is an advanced CLI designed to create manifests for the WinGet Community Repository.

Komac is both blazingly fast 🔥 and incredibly low on memory, using just ~3.5MB of memory on my machine.

Komac-demo

Installation

Komac is cross-platform and binaries are built for Windows, Linux, and macOS.

All platforms

If you have cargo installed, you can compile Rust for any platform

cargo install --locked komac

Komac also supports cargo-binstall:

cargo binstall komac

Nightly

Nightly releases that are built on every commit are available here. These are useful for debugging or if you want the latest features and fixes.

Windows

Both portable EXEs and installers are available from the releases.

WinGet

winget install komac

Scoop

scoop install komac

Linux

Portable binaries are available from the releases. Debian (.deb) and Red Hat (.rpm) installers are also available.

macOS

Portable binaries for macOS are available from the releases.

Homebrew

brew install russellbanks/tap/komac

GitHub Token

Komac is currently only able to use a classic token. Whilst Komac can fully create manifests and commit with a fine-grained token, it fails to create a pull request to winget-pkgs. This may change as fine-grained tokens improve. See https://github.com/russellbanks/Komac/issues/310.

Classic

A classic token with the public_repo scope.

firefox_IYiqtsd0Nl

Commands

CommandDescriptionUsage
NewCreate a package from scratchnew
UpdateUpdate a pre-existing package in winget-pkgsupdate
RemoveRemove a version from winget-pkgsremove
Sync ForkSyncs your fork of winget-pkgs to microsoft/winget-pkgssync-fork, sync
Branch CleanupDeletes branches that have had a merged or closed pull request to winget-pkgscleanup
List VersionsLists all the versions for a given packagelist-versions, list
AnalyseAnalyses a file and outputs information about it. Useful for debugginganalyse
Token updateUpdate stored GitHub OAuth tokentoken update
Token removeDelete stored GitHub OAuth tokentoken remove
CompleteOutputs an autocompletion script for the given shellcomplete, autocomplete

Update an existing package with a new version

komac update Package.Identifier --version 1.2.3 --urls https://www.firstUrl.com https://www.secondUrl.com --submit
ParameterUsageNotes
Package Identifierkomac update Package.Identifier
Version--version
URLs--urlsURLs are delimited by a space
Automatically submit--submit
Token (if one is not already stored)--tokenKomac will check for a GITHUB_TOKEN environment variable

Komac vs other tools 🏆

While other manifest creation tools have made a solid foundation for the manifests in winget-pkgs, they development pace is notably slow and lacks the advanced detection capabilities that come with Komac.

KomacWingetCreateYamlCreate
Parameters
Download progress bar & ETA
Fully cross-platformLimited
Works without Git
Full Inno Setup value retrieval
Full MSI value retrievalPartialPartial
Linux & macOS MSI support
Full MSIX value retrievalPartialPartial - https://github.com/Trenly/winget-pkgs/issues/180
Get information from GitHub
Formatted GitHub release notes retrieval
Release date identification
No telemetry1
Fully standalone (w/o winget-pkgs clone)
Inno setup detection23
Nullsoft detection23
Burn installer detection2Opt-in feature (not enabled by default due to slow processing)
Programming LanguageRustC#PowerShell

Usage with GitHub Actions: WinGet Releaser 🌟

WinGet Releaser is a GitHub Action that invokes Komac, passing in your release's URLs. This completely automates publishing to WinGet.

Example 📝

name: Publish to WinGet
on:
  release:
    types: [ released ]
jobs:
  publish:
    runs-on: windows-latest
    steps:
      - uses: vedantmgoyal9/winget-releaser@main
        with:
          identifier: Package.Identifier
          token: ${{ secrets.WINGET_TOKEN }}
          # installers-regex: '\.exe$' # Only .exe files

Alternative actions 🔄

How can I support Komac? ❤️

Star History ⭐

<a href="https://star-history.com/#russellbanks/Komac&Date"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=russellbanks/Komac&type=Date&theme=dark" /> <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=russellbanks/Komac&type=Date" /> <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=russellbanks/Komac&type=Date" /> </picture> </a>

License

GNU GPLv3 Logo

Komac is Free Software: You can use, study share and improve it at your will. Specifically you can redistribute and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Footnotes

  1. Telemetry is enabled by default in WingetCreate. Use wingetcreate settings to manually disable telemetry.

  2. There is much more accurate detection for Inno, Nullsoft, and Burn installers since Komac v2. 2 3

  3. The logic for this was contributed by me :) Check issues that I've opened to request this feature for YamlCreate. 2