Skip to content

enixCode/winget-ui

Repository files navigation

Winget UI

A single-file PowerShell TUI to batch install Windows apps via winget. Pick a profile, hit space, hit enter.

Profile Selection Package Selection

Quick start

Open PowerShell and run:

iwr https://github.com/enixCode/winget-ui/releases/latest/download/winget-ui.ps1 -OutFile winget-ui.ps1
.\winget-ui.ps1

That is it. The script ships with default profiles (Developer, Designer, Office, Open Source) bundled inside. No clone, no install, no dependencies beyond winget itself.

Make it callable from anywhere (optional)

After downloading the script once, register it in your PowerShell profile so you can type winget-ui from any directory:

.\winget-ui.ps1 --install
# open a new PowerShell window, or:  . $PROFILE
winget-ui                # works from anywhere now
winget-ui --uninstall    # clean removal (configs/sources are kept)

--install copies the bundle to $HOME\.winget-ui\bin\ and adds a winget-ui function to $PROFILE.CurrentUserCurrentHost (idempotent, safe to re-run). Configs you have added and sources you have cloned are preserved on --uninstall.

Controls

Profile menu

Key Action
/ Navigate
Enter Open selected profile
S Add a config source (prompts for a URL)
Q Quit

Package menu

Key Action
/ Navigate
Space Toggle item
A / N Select all / none
Enter Install selected
Q Quit

Boxes: [x] winget package, {x} shell command, [+] already installed.

CLI

.\winget-ui.ps1                    # full interactive: profile menu, then package menu
.\winget-ui.ps1 --config dev.json  # skip the profile menu, open this profile's package list directly
.\winget-ui.ps1 --add owner/repo   # add a source (GitHub repo, full URL, local folder, or .zip)
.\winget-ui.ps1 --update           # pull all installed sources
.\winget-ui.ps1 --list-sources     # show installed sources
.\winget-ui.ps1 --remove <name>    # remove a source
.\winget-ui.ps1 --no-update        # skip the auto-update check for this run
.\winget-ui.ps1 --help

Bringing your own configs

Custom and private configs live outside this repo. See CUSTOM-CONFIGS.md for the format and the three ways to add them (drop a JSON, --add a repo, or press S in the menu).

Auto-update

On every interactive launch, the script checks the GitHub Releases API once per 24h and silently replaces itself if a newer version exists. The downloaded file is validated (size + header sentinel) before being moved over the old one. Disable with --no-update or by setting $env:WINGETUI_NO_UPDATE=1. Dev builds (Version = 'dev') never auto-update.

If you would rather pin a specific version, download a specific release asset directly and add --no-update to every call.

Building from source

git clone https://github.com/enixCode/winget-ui
cd winget-ui
.\winget-ui.ps1            # dev mode (modules loaded from disk)
.\build.ps1                # produces dist\winget-ui.ps1 (single-file bundle)

The build embeds every configs\*.json as base64 and inlines all modules. Tagging v* on main runs the release workflow which uploads the bundle as a release asset.

Requirements

  • Windows 10/11
  • PowerShell 5.1+
  • winget
  • Optional, for --add from a GitHub URL:
    • gh: preferred for private repos (uses your GitHub login). Bypasses the GitHub API rate limit.
    • git: bypasses the rate limit too if your credentials are set up.
    • Neither installed? Public repos still work via a ZIP download, but the tool queries the GitHub REST API for the default branch, which is rate-limited to 60 req/h for anonymous callers. Install gh or git if you expect to hit that.
  • Optional, for --add from a local path: nothing extra (uses built-in Copy-Item / Expand-Archive).

License

MIT

About

Simple TUI and configs based auto install with WinGet

Resources

Stars

Watchers

Forks

Contributors