Komac Russell Banks
winget install --id=RussellBanks.Komac -e
Komac is an innovative manifest creator specifically designed for WinGet, offering an effortless and streamlined experience. Derived from the words "Kotlin" and "Manifest" and abbreviated as "KO MA C", Komac represents the perfect solution for anyone looking for an efficient and effective way to create manifests for WinGet.
README
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.
Installation
Komac is cross-platform and binaries are built for Windows, Linux, macOS, and FreeBSD.
All platforms
If you have cargo installed, you can compile Rust for any platform
cargo install komac
Komac also supports cargo-binstall:
cargo binstall komac
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.
Commands
| 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
|
Update an existing package with a new version
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 |
Komac vs other tools 🏆
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 - https://github.com/Trenly/winget-pkgs/issues/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 |
[^1]: If all installers have the same value, that value is put at the root of the manifest to reduce redundancy.
[^2]: Telemetry is enabled by default in WingetCreate. Use wingetcreate settings
to manually disable telemetry.
[^3]: There is much more accurate detection for Inno, Nullsoft, and Burn installers since Komac v2.
[^4]: The logic for this was contributed by me :)
Check issues that I've opened to request
this feature for YamlCreate.
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: vedantmgoyal2009/winget-releaser@v2
with:
identifier: Package.Identifier
token: ${{ secrets.WINGET_TOKEN }}
# installers-regex: '\.exe$' # Only .exe files
Alternative actions 🔄
- Run Komac manually: michidk/run-komac
- Automate releases for external repositories: michidk/winget-updater
How can I support Komac? ❤️
- 🤝 Sponsor this project through GitHub Sponsors
- ⭐ Star this project! :)
- 🧑💻 Use Komac and create an issue for feature requests or bugs.
Star History ⭐
License
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.