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 is cross-platform and binaries are built for Windows, Linux, macOS, and FreeBSD.
If you have cargo installed, you can compile Rust for any platform
cargo install komac
Komac also supports cargo-binstall:
cargo binstall komac
Both portable EXEs and installers are available from the releases.
winget install komac
scoop install komac
Portable binaries are available from the releases. Debian (.deb
) and
Red Hat (.rpm
) installers are also available.
Portable binaries for macOS are available from the releases.
brew install russellbanks/tap/komac
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 russellbanks#310.
A classic token with the public_repo
scope.
Command | Description | Usage |
---|---|---|
New | Create a package from scratch | new |
Update | Update a pre-existing package in winget-pkgs | update |
Remove | Remove a version from winget-pkgs | remove |
Branch Cleanup | Deletes branches that have had a merged or closed pull request to winget-pkgs | cleanup |
Token update | Update stored GitHub OAuth token | token update |
Token remove | Delete stored GitHub OAuth token | token remove |
komac update -i Package.Identifier -v 1.2.3 --urls https://www.firstUrl.com https://www.secondUrl.com --submit
Parameter | Usage | Notes |
---|---|---|
Package Identifier | --identifier |
|
Version | --version |
|
URLs | --urls |
URLs are delimited by a space |
Automatically submit | --submit |
|
Token (if one is not already stored) | --token |
Komac will check for a GITHUB_TOKEN environment variable |
While other manifest creation tools have made remarkable strides in the winget-pkgs community, their development pace is notably slow and lacks the advanced detection capabilities that come with Komac.
Komac | WingetCreate | YamlCreate | |
---|---|---|---|
Parameters | β | β | β |
Works without Git | β | β | β |
Optimised manifest ordering 1 | β | β οΈ | β |
Fully cross-platform | β | β | Limited |
Full MSI value retrieval | β | Partial | Partial |
Linux & macOS MSI support | β | β | β |
Full MSIX value retrieval | β | Partial | Partial - Trenly/winget-pkgs#180 |
Get information from GitHub | β | β | β |
Formatted GitHub release notes retrieval | β | β | β |
Release date identification | β | β | β |
No telemetry | β | β 2 | β |
Fully standalone (w/o winget-pkgs clone) | β | β | β |
Type-safety | β | β | β |
Inno setup detection | β 3 | β | β 4 |
Nullsoft detection | β 3 | β | β 4 |
Burn installer detection | β 3 | β | Opt-in feature (not enabled by default due to slow processing) |
Progress bar & ETA while downloading | β | β | β |
Programming Language | Rust | C# | 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.
name: Publish to WinGet
on:
release:
types: [ released ]
jobs:
publish:
runs-on: windows-latest
steps:
- uses: vedantmgoyal2009/winget-releaser@v2
with:
identifier: Package.Identifier
token: ${{ secrets.WINGET_TOKEN }}
# installers-regex: '\.exe$' # Only .exe files
- Run Komac manually: michidk/run-komac
- Automate releases for external repositories: michidk/winget-updater
- π€ Sponsor this project through GitHub Sponsors
- β Star this project! :)
- π§βπ» Use Komac and create an issue for feature requests or bugs.
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
-
If all installers have the same value, that value is put at the root of the manifest to reduce redundancy. β©
-
Telemetry is enabled by default in WingetCreate. Use
wingetcreate settings
to manually disable telemetry. β© -
There is much more accurate detection for Inno, Nullsoft, and Burn installers since Komac v2. β© β©2 β©3
-
The logic for this was contributed by me :) Check issues that I've opened to request this feature for YamlCreate. β© β©2