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