wy is a Windows-first CLI package manager frontend inspired by yay on Arch Linux. It presents a unified command surface over real Windows package sources, starting with WinGet and Chocolatey, with a clean backend abstraction ready for Scoop.
- Friendly commands such as
wy search firefoxandwy install git yay-style compatibility aliases such aswy -Ss firefoxandwy -Syu- Multi-backend search and package resolution across WinGet and Chocolatey
- Explicit backend targeting with
--backend winget|choco|scoop - Interactive ambiguity handling with a numbered picker
--non-interactivemode for automation--jsonoutput mode for scripting- Startup backend diagnostics so missing tools are obvious
src/Wy.Cli: entrypoint, help text, startup wiring, app orchestrationsrc/Wy.Core: domain models, contracts, command parsing, resolver logicsrc/Wy.Infrastructure: process execution, config loading, backend implementations, console UXtests/Wy.Tests: unit tests for parser and resolver behavior
wy search <query>wy install <package>wy remove <package>wy info <package>wy upgradewy update-dbwy list-upgrades
wy -Ss <query>->wy search <query>wy -S <package>->wy install <package>wy -R <package>->wy remove <package>wy -Qi <package>->wy info <package>wy -Syu->wy upgrade --refreshwy -Sy->wy update-dbwy -Qu->wy list-upgrades
- Search:
winget search --query <query> --accept-source-agreements --disable-interactivity - Install:
winget install --id <id> --exact - Remove:
winget uninstall --id <id> --exact - Info:
winget show --id <id> --accept-source-agreements --disable-interactivity - Upgrade:
winget upgrade --all - Refresh:
winget source update - List upgrades:
winget upgrade --accept-source-agreements --disable-interactivity
- Search:
choco search <query> --limit-output - Install:
choco install <id> -y - Remove:
choco uninstall <id> -y - Info:
choco info <id> --limit-output - Upgrade:
choco upgrade all -y - Refresh: treated as implicit
- List upgrades:
choco outdated --limit-output
Scoop is scaffolded as a backend slot so the architecture supports a third source cleanly, but command implementations are intentionally left incomplete in this first milestone.
The config file lives at %AppData%\\wy\\config.json.
Example:
{
"defaultBackend": "winget",
"enabledBackends": ["winget", "choco"],
"nonInteractive": false,
"colorEnabled": true,
"verboseLogging": false,
"jsonOutput": false,
"processTimeoutSeconds": 600
}A sample config is also included at config.sample.json.
Requirements:
- .NET 8 SDK
- Windows
wingetand/orchocoinstalled and available onPATH
Commands:
dotnet restore
dotnet build wy.sln
dotnet test wy.slnRun:
dotnet run --project .\src\Wy.Cli\Wy.Cli.csproj -- search firefox
dotnet run --project .\src\Wy.Cli\Wy.Cli.csproj -- -SyuBuild a release installer:
.\scripts\build-release.ps1This produces:
- a self-contained single-file app in
artifacts\publish\win-x64 - a per-user Windows
.exeinstaller inartifacts\installer
The installer installs wy into %LocalAppData%\Programs\wy and adds that directory to the current user's PATH.
wy search firefox
wy install git --backend winget
wy remove vlc --backend choco
wy info neovim
wy upgrade --refresh
wy update-db
wy list-upgrades
wy -Ss firefox
wy -S git
wy -R vlc
wy -Qi git
wy -Syu- This code shells out to the real package managers. It does not fake installs.
- Resolver behavior is centralized in
Wy.Coreso new backends can be added without redesigning the CLI. - Chocolatey parsing is isolated in its backend, and the WinGet backend is written to support current Windows client output where JSON is not available for all commands.