{"id":47587583,"url":"https://github.com/kts982/wintui","last_synced_at":"2026-05-03T21:05:39.864Z","repository":{"id":346536403,"uuid":"1189991668","full_name":"kts982/wintui","owner":"kts982","description":"Go TUI frontend for winget (Windows Package Manager) — built with Bubble Tea, Bubbles, and Lip Gloss","archived":false,"fork":false,"pushed_at":"2026-04-15T22:14:12.000Z","size":5819,"stargazers_count":2,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-16T00:22:08.857Z","etag":null,"topics":["bubbletea","charmbracelet","cli","go","package-manager","terminal","tui","windows","winget"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kts982.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-23T21:38:08.000Z","updated_at":"2026-04-15T22:14:15.000Z","dependencies_parsed_at":"2026-04-06T15:01:13.977Z","dependency_job_id":null,"html_url":"https://github.com/kts982/wintui","commit_stats":null,"previous_names":["kts982/wintui"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/kts982/wintui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kts982%2Fwintui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kts982%2Fwintui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kts982%2Fwintui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kts982%2Fwintui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kts982","download_url":"https://codeload.github.com/kts982/wintui/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kts982%2Fwintui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32259472,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T09:15:33.318Z","status":"ssl_error","status_checked_at":"2026-04-25T09:15:31.997Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bubbletea","charmbracelet","cli","go","package-manager","terminal","tui","windows","winget"],"created_at":"2026-04-01T16:39:04.691Z","updated_at":"2026-05-03T21:05:39.858Z","avatar_url":"https://github.com/kts982.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WinTUI\n\n[![Go Report Card](https://goreportcard.com/badge/github.com/kts982/wintui)](https://goreportcard.com/report/github.com/kts982/wintui)\n[![CI](https://github.com/kts982/wintui/actions/workflows/ci.yml/badge.svg)](https://github.com/kts982/wintui/actions/workflows/ci.yml)\n[![Release](https://img.shields.io/github/v/release/kts982/wintui)](https://github.com/kts982/wintui/releases/latest)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\nA terminal user interface for **winget** (Windows Package Manager), built with Go and the [Charmbracelet](https://charm.sh) TUI libraries.\n\nBrowse, search, install, upgrade, and manage Windows packages without leaving the terminal.\nWinTUI features a split-panel workspace, batch operations with a single UAC prompt, and a headless CLI mode for scripting.\n\n![WinTUI demo](demo.gif)\n\n## Install\n\n**Requirements:** Windows 10/11 with winget installed.\n\n```powershell\nwinget install kts982.WinTUI\n```\n\nOr install manually:\n\n```bash\n# Run a release binary\n.\\wintui.exe\n\n# Or build/install with Go 1.26+\ngo install github.com/kts982/wintui@latest\n\n# Or clone and build from source\ngit clone https://github.com/kts982/wintui.git\ncd wintui\ngo build -o wintui.exe .\n```\n\nPre-built binaries are available on [GitHub Releases](https://github.com/kts982/wintui/releases) — both `.exe` and `.zip` for Windows amd64 and arm64:\n\n```bash\ngh release download --repo kts982/wintui --pattern '*windows_amd64.exe'\n```\n\n## Features\n\n**Unified Packages Screen**\n- **Split-panel layout** — package list on the left, detail summary on the right\n- **Bordered sections** — Updates Available, Installed, Search Results, and Install Queue with package counts and active focus highlighting\n- **Normalized package actions** — press `Space` to stage the focused package, `g` to apply staged changes, or use `i` / `u` / `x` for direct install, upgrade, and uninstall accelerators\n- **Search \u0026 Install** — press `s` to search the winget catalog, `Space` to queue packages, `i` to install the focused result or the full install queue\n- **Upgrade / Uninstall** — stage packages across sections, then apply them together, or use `u` / `x` on the focused package or current selection\n- **Package Details** — press `Enter` or `→` for a full detail overlay with version picker (`v`), homepage (`o`), release notes (`n` when available), Auto/Ask/Hold package policy, a live command preview showing exactly what winget will run (including per-package overrides), and scrollable metadata\n- **Batch Execution Modal** — review selected packages, press `?` to preview the exact winget command for each one, watch live progress with per-package spinners and the most recent winget output line, view compact results with `Ctrl+E` retry (elevated when needed, plain retry for process-in-use failures)\n- **Version Selection** — pick a specific version to install or upgrade to from the detail panel\n- **Self-upgrade handoff** — WinTUI can check for its own winget update before launch and close so a local handoff script can run `winget upgrade kts982.WinTUI` after the current process exits\n- **Headless CLI** — `wintui check`, `wintui list`, `wintui show \u003cid\u003e`, `wintui upgrade --all`, `wintui upgrade --auto`, `wintui upgrade --id \u003cpkg\u003e`, and `wintui doctor` (verdict-first readiness check) for scripts, Task Scheduler, or CI without launching the TUI; `--json` works on `check`, `list`, `show`, and `doctor`\n\n**System Utilities**\n- **Health Tab** — slim WinTUI / winget readiness panel: WinTUI version + path, winget version, source freshness, cached upgrade counts (visible / auto / held + cache age), privileges + Auto Elevate context, system drive free space, and a neutral Settings summary line. Loads instantly — no fresh winget calls or disk scans\n- **`wintui doctor`** — verdict-first headless health (`OK` / `WARN: N issues` / `FAIL: N issues`, exit 0/1/2). `--verbose` adds the per-row table; `--full` re-adds verbose system diagnostics (RAM, Defender, drives, ping, Windows PowerShell); `--dev-tools` appends a developer-tools detection group; `--json` emits structured output for scripts\n- **Toast notifications** — opt-in (off by default). When enabled, fires a single Windows toast on TUI batch finish, on `wintui upgrade --auto/--all` finish, and when `wintui check` finds updates. AUMID-attributed as \"WinTUI\" via a one-time Start Menu shortcut drop on first toast\n- **Temp Cleanup** — scan and delete temp files older than 7 days\n- **Settings** — persistent config for winget options (scope, architecture, silent/interactive, force, purge, etc.)\n\n**UX**\n- **Disk-persistent cache** — instant startup from cached data, background refresh for always-fresh results, per-package incremental updates after actions\n- **Update count badge** in the tab bar — see available updates at a glance before winget finishes refreshing\n- 4-tab layout: Packages, Cleanup, Health, Settings\n- Boxed tab bar with animated gradient ASCII logo\n- Context-sensitive help bar that adapts to the active section\n- Full help panel on `?` with grouped keybindings\n- Fuzzy filter (`/`) on the installed package list\n- Per-tab screen state preserved across tab switches\n- Built-in elevated helper — silent + auto-elevate runs everything elevated upfront, avoiding UAC popups from installers\n- `Ctrl+E` elevated retry on the result modal when auto-elevate is off\n- Responsive layout — detail panel hides on narrow terminals, compact header on small screens\n\n## Usage\n\n```bash\n.\\wintui.exe\n```\n\n\u003e **Tip:** Some operations require administrator privileges. The subtitle bar shows `● admin` / `● user` status. Enable **Silent** mode + **Auto Elevate** in Settings for hands-off elevated operations, or press `Ctrl+E` on the result modal when a package fails. WinTUI's own update is handled by closing WinTUI and letting winget replace the released binary; after the handoff finishes, start `wintui` again manually.\n\n### Headless CLI\n\n```powershell\n# Human-readable upgrade check (honors per-package update policy)\nwintui check\n\n# Exit code 1 when visible updates are available\nwintui check ; if ($LASTEXITCODE -eq 1) { \"Updates available\" }\n\n# Machine-readable output\nwintui check --json\nwintui list --json \u003e packages.json\n\n# Inspect what WinTUI would pass to winget for a given package\nwintui show Mozilla.Firefox --json\n\n# Upgrade everything that is not held\nwintui upgrade --all\n\n# Upgrade only packages marked Auto\nwintui upgrade --auto\n\n# Upgrade specific packages by ID (repeatable; pipe-friendly)\nwintui upgrade --id Mozilla.Firefox --id Microsoft.VisualStudioCode\n```\n\nThe old root flags `--check` and `--list` have been removed; use\n`wintui check` and `wintui list`. WinTUI itself is **not** upgraded by\nheadless upgrade commands; the running binary is skipped with a hint\npointing at the TUI startup self-update handoff.\n\nFurther documentation:\n- [CLI reference](docs/cli.md)\n- [Elevation and retry behavior](docs/elevation.md)\n\n## Keyboard Shortcuts\n\n### Packages Screen\n\n| Key | Action |\n|---|---|\n| `↑↓` / `j/k` | Navigate |\n| `PgUp` / `PgDn` | Jump 10 rows up / down |\n| `Home` / `End` | Jump to top / bottom of the cursor's section |\n| `Space` | Stage package / queue search result |\n| `Enter` / `→` / `l` | Open package details |\n| `←` / `Esc` / `h` | Close details / cancel |\n| `Esc` | Dismiss search results / close details |\n| `s` | Search \u0026 install (search winget catalog) |\n| `/` | Filter installed packages |\n| `g` | Apply staged changes |\n| `u` | Upgrade selected or focused package |\n| `x` | Uninstall selected or focused package |\n| `t` | Cycle focused winget/msstore package update policy: Ask → Auto → Hold |\n| `i` | Install queued packages or focused search result |\n| `a` | Stage all available updates |\n| `v` | Pick version (in detail view) |\n| `c` | Reset to latest version (in detail view) |\n| `o` | Open homepage (in detail view) |\n| `n` | Open release notes URL (in detail view, when available) |\n| `p` | Open per-package rules editor (detail view or list) |\n| `i` | Toggle ignore on the focused package (in detail view) |\n| `?` | Expand winget command preview for each item (in batch confirm modal) |\n| `r` | Refresh package data |\n| `Ctrl+E` | Retry failed packages (result modal) — elevated retry for permission failures, plain retry for items blocked by a running process |\n| `?` | Toggle full help panel |\n\n### Global\n\n| Key | Action |\n|---|---|\n| `1-4` | Switch tabs |\n| `Tab` / `Shift+Tab` | Cycle tabs |\n| `q` | Quit |\n\n## Settings\n\nConfigurable from the Settings tab, stored in `%APPDATA%\\wintui\\settings.json`:\n\n| Setting | Options |\n|---|---|\n| Install Scope | user / machine / auto |\n| Action Mode | auto / silent / interactive |\n| Architecture | x64 / x86 / arm64 / auto |\n| Default Source | winget / msstore / auto |\n| Force | skip non-security issues |\n| Allow Reboot | permit reboots during install |\n| Skip Dependencies | don't process dependencies |\n| Purge on Uninstall | delete all package files |\n| Include Unknown Versions | show packages with unknown versions |\n| Auto Elevate | automatically request admin rights |\n| WinTUI Auto Update | check for and apply WinTUI's own update before launch |\n| Toast Notifications | Windows toast on TUI batch finish, scheduled `wintui upgrade --auto/--all`, and `wintui check` finding updates (off by default) |\n\n**Action Mode: Silent + Auto Elevate** runs all install/upgrade/uninstall operations through the elevated helper upfront, avoiding UAC popups from installers that elevate themselves.\n\n**Auto Elevate** (without silent mode) retries automatically on hard permission errors. When a batch finishes with failures, the result modal offers `Ctrl+E` to retry only the failed elevation-candidate packages.\n\n### Per-Package Rules\n\nAny of the settings above can be overridden for a specific package, and winget/msstore-managed packages can be marked Ask, Auto, or Hold for updates. Press `t` from the package list to cycle the focused package through Ask → Auto → Hold, or open a package's detail view and press `p` for the full rules editor.\n\nSupported rules: `update_policy`, `scope`, `architecture`, `elevate`, `ignore`, `ignore_version`. Auto and Hold packages show `[AUTO]` / `[HOLD]` badges in the package list. Held packages are omitted from normal upgrade actions with an `(N held)` count on the section header.\n\nFor the full rule reference and behavior details, see [Per-package rules](docs/package-rules.md).\n\nFor deeper behavior details and examples, see:\n- [CLI reference](docs/cli.md)\n- [Elevation and retry behavior](docs/elevation.md)\n- [Per-package rules](docs/package-rules.md)\n\n## Development\n\n```powershell\n# Run the full validation suite\n.\\scripts\\check.ps1 -Mode full\n\n# Optional: enable git hooks\ngit config core.hooksPath .githooks\n```\n\nThe validation suite runs `gofmt`, `go test`, `go vet`, `staticcheck`, and `go build`.\n\nOptional Git hooks are included in `.githooks/pre-commit` and `.githooks/pre-push`.\n\nMaintainers can regenerate `demo.gif` from `demo.cast` with `agg`.\n\n## Built With\n\n- [Bubble Tea](https://github.com/charmbracelet/bubbletea) — TUI framework\n- [Bubbles](https://github.com/charmbracelet/bubbles) — TUI components\n- [Lip Gloss](https://github.com/charmbracelet/lipgloss) — Terminal styling\n- [Harmonica](https://github.com/charmbracelet/harmonica) — Spring-physics animations\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkts982%2Fwintui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkts982%2Fwintui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkts982%2Fwintui/lists"}