Summary
Extend floe distribution to two additional native package managers, following the same pattern as the Homebrew tap (macOS/Linux) and Scoop bucket (Windows) already in place:
- WinGet — Windows Package Manager, pre-installed on Windows 10/11
- apt / deb — Debian/Ubuntu package, the dominant Linux system package manager
Both follow the same process: generate a versioned manifest/package from the GitHub Release binary artifact and submit/push it on each release.
WinGet (Windows)
How it works
WinGet packages live in the microsoft/winget-pkgs public repository. Each package is a set of YAML manifests under manifests/m/malon64/floe/. Submissions are pull requests reviewed by the WinGet team (typically auto-merged within hours via bot).
Manifest structure
manifests/m/malon64/floe/X.Y.Z/
malon64.floe.yaml # version manifest
malon64.floe.installer.yaml # installer manifest (points to .zip)
malon64.floe.locale.en-US.yaml # locale manifest
Automation options
wingetcreate: CLI tool that generates and submits manifests automatically. Can be added as a release workflow step.
- Manual: Use
wingetcreate update locally after each release and open the PR by hand.
Recommended: automate via wingetcreate in release.yml, same pattern as the Scoop step.
Source artifact
floe-vX.Y.Z-x86_64-pc-windows-msvc.zip — already published to GitHub Releases.
End-user experience
winget install malon64.floe
winget upgrade malon64.floe
apt / deb (Linux)
How it works
There is no single centralised apt registry like crates.io. The standard approach for a project of this size is a self-hosted apt repository published to GitHub Pages (or similar static hosting), following the pattern used by tools like gh, netlify, sentry-cli, etc.
Recommended approach
- On each release, build a
.deb package from the x86_64-unknown-linux-gnu binary using cargo-deb or a hand-crafted dpkg-deb invocation.
- Sign the package with a GPG key.
- Publish the signed
.deb and the apt repository metadata (Packages, Release, InRelease) to a static host (GitHub Pages on malon64/apt-floe, or an existing Pages repo).
- Users add the repo once and get upgrades via
apt upgrade.
End-user experience
curl -fsSL https://malon64.github.io/apt-floe/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/floe.gpg
echo "deb [signed-by=/etc/apt/keyrings/floe.gpg] https://malon64.github.io/apt-floe stable main" \
| sudo tee /etc/apt/sources.list.d/floe.list
sudo apt update
sudo apt install floe
Implementation checklist
WinGet
apt / deb
Summary
Extend
floedistribution to two additional native package managers, following the same pattern as the Homebrew tap (macOS/Linux) and Scoop bucket (Windows) already in place:Both follow the same process: generate a versioned manifest/package from the GitHub Release binary artifact and submit/push it on each release.
WinGet (Windows)
How it works
WinGet packages live in the microsoft/winget-pkgs public repository. Each package is a set of YAML manifests under
manifests/m/malon64/floe/. Submissions are pull requests reviewed by the WinGet team (typically auto-merged within hours via bot).Manifest structure
Automation options
wingetcreate: CLI tool that generates and submits manifests automatically. Can be added as a release workflow step.wingetcreate updatelocally after each release and open the PR by hand.Recommended: automate via
wingetcreateinrelease.yml, same pattern as the Scoop step.Source artifact
floe-vX.Y.Z-x86_64-pc-windows-msvc.zip— already published to GitHub Releases.End-user experience
apt / deb (Linux)
How it works
There is no single centralised apt registry like crates.io. The standard approach for a project of this size is a self-hosted apt repository published to GitHub Pages (or similar static hosting), following the pattern used by tools like
gh,netlify,sentry-cli, etc.Recommended approach
.debpackage from thex86_64-unknown-linux-gnubinary usingcargo-debor a hand-crafteddpkg-debinvocation..deband the apt repository metadata (Packages,Release,InRelease) to a static host (GitHub Pages onmalon64/apt-floe, or an existing Pages repo).apt upgrade.End-user experience
Implementation checklist
WinGet
wingetcreatestep torelease.ymlthat opens a PR againstmicrosoft/winget-pkgson each tagWINGET_TOKENsecret (PAT withpublic_reposcope, needed bywingetcreate)docs/installation.mdwithwinget installinstructionsapt / deb
malon64/apt-floerepo with GitHub Pages enabledcargo-debconfiguration tofloe-cli/Cargo.toml.debinrelease.ymlafter the Linux build stepmalon64/apt-floePages on each releaseAPT_REPO_TOKENandAPT_GPG_KEYsecretsdocs/installation.mdwithapt installinstructions