Komac logo

Komac Russell Banks

Use this command to install Komac:
winget install --id=RussellBanks.Komac -e

The Community Manifest Creator for WinGet

Komac is a powerful command-line tool designed to streamline the creation and management of manifests for the WinGet Community Repository. Built with Rust, Komac combines speed and efficiency, using minimal memory while offering advanced capabilities for developers and package maintainers.

Key Features:

  • Fast and Lightweight: Komac operates quickly and efficiently, using just a few megabytes of memory.
  • Cross-Platform Support: Available for Windows, Linux, and macOS, ensuring broad compatibility.
  • GitHub Integration: Manages GitHub tokens and automates tasks like pull requests and manifest updates.
  • Installer Detection: Accurately extracts information from Inno Setup, Nullsoft, Burn, MSI, and MSIX installers.
  • Cross-Platform Installer Support: Handles MSI and MSIX on Linux and macOS, expanding its versatility.

Audience & Benefit: Ideal for developers and maintainers contributing to the WinGet repository, Komac simplifies the process of creating, updating, and managing package manifests. It empowers users to efficiently build high-quality packages, reduce manual errors, and automate workflows, saving time and effort while ensuring consistency and accuracy.

Available via winget install komac, Komac is a vital tool for anyone involved in WinGet's ecosystem, offering a robust solution for modern package management needs.

README

Komac: Smart Manifest Automation for WinGet

Latest version Build GitHub Issues License

Crates.io Version Crates.io Total Downloads MSRV

A fast, intelligent CLI to create and submit WinGet manifests.

Think: automation, deep installer analysis, and zero YAML wrangling.

⚑ Quick start

# 1. Install komac
winget install komac
  
# 2. Set your GitHub token
komac token add
  
# 3. Update a package
komac update Package.Identifier --version 1.2.3 --urls https://example.com/installer.exe

🎯 Features

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 Setup

komac needs a classic GitHub token to submit PRs to winget-pkgs.

This should be a classic token with the public_repo scope.

Screenshot of classic token being created with public_repo scope selected

Adding to komac:

komac token add

Why not fine-grained tokens?

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.

Commands

Full Command List

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

komac new

Creates a new package from scratch.

komac new

komac update

Add a version to a pre-existing package:

komac update Package.Identifier --version 1.2.3 --urls https://www.example.com/installer.exe https://www.example.com/installer.msi --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 sync

Updates your fork of winget-pkgs to be up-to-date with microsoft/winget-pkgs.

komac sync

Feature Comparison πŸ”

While other manifest creation tools have made a solid foundation for the manifests in winget-pkgs, their development pace is slower and lacks the deeper installer analysis that komac is capable of.

KomacWingetCreateYamlCreate
Parametersβœ…βœ…βŒ
Download progress bar & ETAβœ…βŒβŒ
Fully cross-platformβœ…βŒLimited
Works without Gitβœ…βœ…βŒ
Full Inno Setup value retrievalβœ…βŒβŒ
Full MSI value retrievalβœ…PartialPartial
Linux & macOS MSI supportβœ…βŒβŒ
Full MSIX value retrievalβœ…PartialPartial - https://github.com/Trenly/winget-pkgs/issues/180
Get information from GitHubβœ…βœ…βŒ
Formatted GitHub release notes retrievalβœ…βŒβŒ
Release date identificationβœ…βŒβŒ
No telemetryβœ…β­• 1βœ…
Fully standalone (w/o winget-pkgs clone)βœ…βœ…βŒ
Inno setup detectionβœ… 2βœ…βœ… 3
Nullsoft detectionβœ… 2βœ…βœ… 3
Burn installer detectionβœ… 2βœ…Opt-in feature (not enabled by default due to slow processing)
Programming LanguageRustC#PowerShell

GitHub Actions 🌟

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 this project! :)
  • 🀝 Sponsor this project through GitHub Sponsors
  • πŸ§‘β€πŸ’» Use Komac and create an issue for feature requests or bugs.

Star History ⭐

<img src="https://api.star-history.com/svg?repos=russellbanks/Komac&amp;type=Date" />

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

Versions
2.12.1
2.12.0
2.11.2
2.11.1
2.11.0
2.10.1
2.10.0
2.9.0
2.8.0
2.7.0
Website
License