Beginner guide

Power User Software Inventory for Windows

A curated catalog of Windows 11 power-user software with winget install commands for every entry — browsers, terminals, editors, dev tools, and utilities.

Beginner Updated

Verified Working

This guide is the curated Windows software installation list that pairs with everything else on this site — privacy-respecting browsers, terminals, productivity tools, sync clients, and utilities, all installable via winget or as portable apps. It assumes a debloated Windows base from Tiny 11 vs Atlas OS vs ReviOS, and the Dropbox/Mega/KDE Connect entries are the same three apps that make cross-OS sync work in the dual-boot guide.


Quick Start

If you want to install the essentials right now:

# Run in PowerShell (as Administrator for some packages)
winget install --id Microsoft.PowerToys -e
winget install --id Mozilla.Firefox -e
winget install --id Microsoft.VisualStudioCode -e
winget install --id Git.Git -e
winget install --id Microsoft.WindowsTerminal -e
winget install --id 7zip.7zip -e
winget install --id Notepad++.Notepad++ -e
winget install --id AutoHotkey.AutoHotkey -e

That covers 80% of a power user’s daily needs. Below is the full curated catalog.


Prerequisites

Update Windows Package Manager

winget ships with Windows 11 and Windows 10 (1809+). It updates itself through the Microsoft Store (App Installer package), so there is usually nothing to do. If you must nudge it:

# Update winget itself (App Installer)
winget upgrade --id Microsoft.AppInstaller -e

Note: the winget repository version can trail your installed Store version — a “no applicable upgrade” result here is normal and means you’re already current.

Use --id and -e Flags

For reproducible installs, always use exact IDs with the -e (exact match) flag:

# Good - exact ID, version-locked
winget install --id Mozilla.Firefox -e

# Bad - name can match multiple packages
winget install Firefox

To find a package ID:

winget search "Firefox"
# Returns: Mozilla.Firefox    Firefox    ...

AI & Agentic Systems

Tools for autonomous coding, research, and AI-assisted workflows.

Tool Install Purpose
Claude Code winget install --id Anthropic.ClaudeCode -e Agentic CLI for coding and research (packaged on winget, verified)
GitHub Copilot VS Code extension (see below) AI pair programmer in your editor
Ollama winget install --id Ollama.Ollama -e Run open LLMs locally (Llama, Mistral, etc.)
LM Studio winget install --id ElementLabs.LMStudio -e GUI for running local LLMs
Jan winget install --id Jan.Jan -e ChatGPT-like desktop client for local models

VS Code AI Extensions

# GitHub Copilot (paid subscription)
code --install-extension GitHub.copilot
code --install-extension GitHub.copilot-chat

# Windsurf Plugin (formerly Codeium) — free autocomplete tier
# (the extension ID is still Codeium.codeium; the vendor lists it as maintenance mode)
code --install-extension Codeium.codeium

# Continue.dev (open source AI assistant)
code --install-extension Continue.continue

Core Development Environment

Languages, runtimes, and version managers.

Tool Install Purpose
Git winget install --id Git.Git -e Version control
GitHub Desktop winget install --id GitHub.GitHubDesktop -e GUI for Git
Node.js (LTS) winget install --id OpenJS.NodeJS.LTS -e JavaScript runtime
Python 3.12 winget install --id Python.Python.3.12 -e Python interpreter
uv pip install uv or winget install --id astral-sh.uv -e Fast Python package manager
Rust winget install --id Rustlang.Rustup -e Rust toolchain
Go winget install --id GoLang.Go -e Go toolchain
Java JDK 21 winget install --id EclipseAdoptium.Temurin.21.JDK -e Java development kit
.NET SDK 8 winget install --id Microsoft.DotNet.SDK.8 -e .NET development

Version Managers

For languages where you need multiple versions, fnm (Fast Node Manager) manages Node releases and is faster than nvm:

winget install --id Schniz.fnm -e

Editors & IDEs

The primary interfaces for code and document editing.

Tool Install Purpose
VS Code winget install --id Microsoft.VisualStudioCode -e Primary extensible IDE
Zed winget install --id ZedIndustries.Zed -e High-performance, memory-efficient editor
Notepad++ winget install --id Notepad++.Notepad++ -e Lightweight text editor (replaces Notepad)
Sublime Text winget install --id SublimeHQ.SublimeText.4 -e Fast commercial editor
Neovim winget install --id Neovim.Neovim -e Modal terminal editor
Cursor winget install --id Anysphere.Cursor -e AI-first VS Code fork
Windsurf winget install --id Codeium.Windsurf -e AI-powered VS Code fork

VS Code Essential Extensions

# Language & tooling
code --install-extension dbaeumer.vscode-eslint
code --install-extension esbenp.prettier-vscode
code --install-extension EditorConfig.EditorConfig

# Git
code --install-extension eamodio.gitlens

# Containers & remote
code --install-extension ms-vscode-remote.remote-containers
code --install-extension ms-azuretools.vscode-docker

# Markdown
code --install-extension yzhang.markdown-all-in-one
code --install-extension davidanson.vscode-markdownlint

# Productivity
code --install-extension usernamehw.errorlens
code --install-extension christian-kohler.path-intellisense

Data Analysis & Science

Statistical computing, data science, and research tools.

Tool Install Purpose
R 4.x Download from cran.r-project.org/bin/windows/base/ Statistical computing
RStudio winget install --id Posit.RStudio -e R IDE
Python (via uv) See above Data science alternative
JupyterLab pip install jupyterlab Notebook environment
Stata Official installer from stata.com (license required — no winget package exists) Professional statistics
SPSS IBM installer only IBM statistics
Julia winget install --id Julialang.Julia -e High-performance scientific computing

System Utilities & Optimization

Tools for monitoring, backup, and system management.

Tool Install Purpose
PowerToys winget install --id Microsoft.PowerToys -e Microsoft power user toolbox
7-Zip winget install --id 7zip.7zip -e Archive manager (replaces built-in)
Everything winget install --id voidtools.Everything -e Instant file search (like macOS Spotlight)
QuickLook winget install --id QL-Win.QuickLook -e macOS-style Spacebar file preview
PDFgear winget install --id PDFgear.PDFgear -e Free PDF reading, editing, and conversion
Sysinternals Suite winget install --id Microsoft.Sysinternals.Suite -e Advanced system tools (ID was renamed from Microsoft.SysinternalsSuite)
BleachBit winget install --id BleachBit.BleachBit -e System cleaner (CCleaner alternative)
HWMonitor winget install --id CPUID.HWMonitor -e Hardware temperature monitoring
CrystalDiskInfo winget install --id CrystalDewWorld.CrystalDiskInfo -e Disk health monitoring
CPU-Z winget install --id CPUID.CPU-Z -e Detailed hardware info
GPU-Z winget install --id TechPowerUp.GPU-Z -e GPU detailed info
Revo Uninstaller winget install --id RevoUninstaller.RevoUninstaller -e Thorough app removal
Eyes Guard winget install --id Avestura.EyesGuard -e Screen-time reminders for eye rest (EyeLeo is a solid alternative)

Backup & Recovery

Tool Install Purpose
Veeam Agent for Windows (Free) Download from veeam.com Full system image backup
Clonezilla Download from clonezilla.org Open-source disk imaging/cloning (bootable)
Rescuezilla Download from rescuezilla.com GUI frontend for Clonezilla images (bootable, no winget package)
File History Built into Windows Continuous file backup

Note: Macrium Reflect Free was discontinued in January 2024 (no longer distributed or patched). Legacy copies found on third-party mirrors receive no security fixes — prefer the tools above.


Internet & Communication

Browsers, email, messaging, and remote access.

Tool Install Purpose
Firefox winget install --id Mozilla.Firefox -e Privacy-respecting browser
Google Chrome winget install --id Google.Chrome -e Mainstream browser
Brave winget install --id Brave.Brave -e Chromium with built-in ad blocking
Thunderbird winget install --id Mozilla.Thunderbird -e Email client
Zoom winget install --id Zoom.Zoom -e Video conferencing
Discord winget install --id Discord.Discord -e Community chat
Slack winget install --id SlackTechnologies.Slack -e Work chat
Signal winget install --id OpenWhisperSystems.Signal -e Private messaging
Telegram winget install --id Telegram.TelegramDesktop -e Cloud messaging
Microsoft Teams (personal) winget install --id Microsoft.Teams -e Microsoft’s chat
Mullvad VPN winget install --id MullvadVPN.MullvadVPN -e Privacy VPN
Proton VPN winget install --id Proton.ProtonVPN -e Privacy VPN with free tier
qBittorrent winget install --id qBittorrent.qBittorrent -e BitTorrent client
LocalSend winget install --id LocalSend.LocalSend -e Cross-device file sharing
RustDesk Download from rustdesk.com Self-hosted remote desktop (no winget package currently)
KDE Connect winget install --id KDE.KDEConnect -e Cross-device clipboard, notifications, file sharing (pairs with phone and Linux)

Cloud Storage (CLI)

For automated sync, use the official CLI tools:

Tool Install Purpose
rclone winget install --id Rclone.Rclone -e Sync any cloud storage (Google Drive, Dropbox, S3, etc.)
AWS CLI winget install --id Amazon.AWSCLI -e Amazon Web Services
Azure CLI Download from aka.ms/installazurecliwindows Microsoft Azure
Google Cloud CLI Download from cloud.google.com/sdk Google Cloud Platform

Cloud Storage (Desktop Sync)

Desktop clients with selective sync and “available offline” support. These are the same three apps that make cross-OS sync work in the dual-boot guide — install the equivalent clients on LMDE to keep your synced folders accessible from both operating systems.

Tool Install Purpose
Dropbox winget install --id Dropbox.Dropbox -e File sync with selective offline folders
MEGAsync winget install --id Mega.MEGASync -e End-to-end encrypted sync with selective folders (note the capital S — exact match is case-sensitive)

Tip for dual-boot setups: always relocate the local sync folder to a shared NTFS partition (not C:) through each app’s official Move feature. Manual drag-and-drop in File Explorer breaks the app’s tracking and triggers a full re-download. Any folder you want to read from LMDE must be set to available offline in Windows — online-only files are tied to Windows’ proprietary cloud-filter driver and won’t show up on the Linux side.


Media & Entertainment

Audio, video, image, and creative tools.

Tool Install Purpose
VLC winget install --id VideoLAN.VLC -e Universal media player
mpv winget install --id shinchiro.mpv -e Minimalist video player (power user favorite)
Spotify winget install --id Spotify.Spotify -e Music streaming
Audacity winget install --id Audacity.Audacity -e Audio editor
HandBrake winget install --id HandBrake.HandBrake -e Video transcoder
OBS Studio winget install --id OBSProject.OBSStudio -e Recording and streaming
Kdenlive winget install --id KDE.Kdenlive -e Video editor (Linux-style on Windows)
GIMP winget install --id GIMP.GIMP -e Image editor (Photoshop alternative)
Inkscape winget install --id Inkscape.Inkscape -e Vector graphics (Illustrator alternative)
Krita winget install --id KDE.Krita -e Digital painting
ShareX winget install --id ShareX.ShareX -e Screenshot and recording
ImageGlass winget install --id DuongDieuPhap.ImageGlass -e Image viewer (replaces Photos)

Fonts

For development work, monospace fonts matter. The winget catalog no longer carries the NerdFonts.* or Microsoft.CascadiaCode packages — what remains:

# Nerd-patched JetBrains Mono (verified on winget)
winget install --id DEVCOM.JetBrainsMonoNerdFont -e

# Hack typeface (regular, not Nerd-patched)
winget install --id SourceFoundry.HackFonts -e

For everything else, grab the installers directly from GitHub releases and run them (font installs are silent and per-user):


Input & Localization

Multilingual Input

Tool Install Purpose
Microsoft IME Built into Windows 11 Multilingual typing (Chinese, Japanese, Korean)
Avro Keyboard winget install --id OmicronLab.Avro -e Bangla phonetic input (packaged on winget, verified)
Google Input Tools Download from google.com/inputtools Many languages
KeyMan Download from keyman.com 1,000+ keyboards

Bangla Fonts (PowerShell Installer)

Avro covers typing; this script installs the fonts themselves. It pulls 20 of the most-used Bangla fonts — Unicode standards (SolaimanLipi, Kalpurush, Siyam Rupali), government/formal (Nikosh), print-era classics (SutonnyMJ, AdorshoLipi, Chitra MJ), and modern Google fonts (Noto Sans Bengali, Hind Siliguri) — from pinned GitHub raw URLs. All 20 URLs verified live August 2026.

Run in an administrator PowerShell (the script checks and pauses if you forgot):

# ==========================================
# BANGLA FONT INSTALLER (20 fonts, verified URLs)
# ==========================================

# 1. Admin check (pauses instead of closing the window)
$isAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not $isAdmin) {
    Write-Host "`nERROR: Run PowerShell as Administrator to install fonts.`n" -ForegroundColor Red
    Read-Host "Press Enter to exit..."
    Exit
}

# 2. TLS 1.2 (older PowerShell defaults get rejected by GitHub)
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

# 3. Verified raw font URLs (case-sensitive and exact)
$fonts = @(
    # --- Modern Unicode ---
    @{ Name = "SolaimanLipi";     Url = "https://raw.githubusercontent.com/shiftenterdev/bangla-font/master/SolaimanLipi.ttf";          FileName = "SolaimanLipi.ttf" }
    @{ Name = "Kalpurush";        Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/kalpurush.ttf";                 FileName = "kalpurush.ttf" }
    @{ Name = "Siyam Rupali";     Url = "https://raw.githubusercontent.com/potasiyam/Siyam-Rupali/master/Siyamrupali_1_070ship.ttf";    FileName = "SiyamRupali.ttf" }
    @{ Name = "Lohit Bengali";    Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/Lohit_14-04-2007.ttf";          FileName = "Lohit_14-04-2007.ttf" }

    # --- Official & formal ---
    @{ Name = "Nikosh";           Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/Nikosh.ttf";                    FileName = "Nikosh.ttf" }
    @{ Name = "NikoshBAN";        Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/NikoshBAN.ttf";                 FileName = "NikoshBAN.ttf" }
    @{ Name = "Mukti Narrow";     Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/muktinarrow.ttf";               FileName = "muktinarrow.ttf" }

    # --- Print & legacy (ANSI/Bijoy era) ---
    @{ Name = "SutonnyMJ";        Url = "https://raw.githubusercontent.com/tazihad/bangla-fonts/main/SutonnyMJ.ttf";                    FileName = "SutonnyMJ.ttf" }
    @{ Name = "AdorshoLipi";      Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/AdorshoLipi_20-07-2007.ttf";    FileName = "AdorshoLipi.ttf" }
    @{ Name = "Chitra MJ Bold";   Url = "https://raw.githubusercontent.com/tazihad/bangla-fonts/main/Chitra%20MJ%20Bold.ttf";           FileName = "ChitraMJBold.ttf" }

    # --- Stylized & creative ---
    @{ Name = "BenSen";           Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/BenSen.ttf";                    FileName = "BenSen.ttf" }
    @{ Name = "BenSen Handwriting"; Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/BenSenHandwriting.ttf";       FileName = "BenSenHandwriting.ttf" }
    @{ Name = "Amar Bangla";      Url = "https://raw.githubusercontent.com/tazihad/bangla-fonts/main/Amar%20Bangla.ttf";                FileName = "AmarBangla.ttf" }
    @{ Name = "3D Sonar Bangla";  Url = "https://raw.githubusercontent.com/tazihad/bangla-fonts/main/3D%20Sonar%20Bangla.ttf";          FileName = "3DSonarBangla.ttf" }
    @{ Name = "Aparajita";        Url = "https://raw.githubusercontent.com/tazihad/bangla-fonts/main/Aparajita.ttf";                    FileName = "Aparajita.ttf" }

    # --- Modern clean & corporate ---
    @{ Name = "Hind Siliguri";    Url = "https://raw.githubusercontent.com/tazihad/bangla-fonts/main/Hind%20Siliguri.ttf";              FileName = "HindSiliguri.ttf" }
    @{ Name = "Robi";             Url = "https://raw.githubusercontent.com/tazihad/bangla-fonts/main/Robi.ttf";                         FileName = "Robi.ttf" }
    @{ Name = "Akaash";           Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/akaashnormal.ttf";              FileName = "akaashnormal.ttf" }
    @{ Name = "Mitra";            Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/mitra.ttf";                     FileName = "mitra.ttf" }
    @{ Name = "Sagar";            Url = "https://raw.githubusercontent.com/hmoazzem/bangla-fonts/master/sagarnormal.ttf";               FileName = "sagarnormal.ttf" }
)

$fontFolder   = "C:\Windows\Fonts"
$tempFolder   = "$env:TEMP\BanglaFonts"
$registryPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"

if (-not (Test-Path $tempFolder)) { New-Item -ItemType Directory -Path $tempFolder | Out-Null }

$successCount = 0
foreach ($font in $fonts) {
    $tempPath = Join-Path $tempFolder $font.FileName
    $destPath = Join-Path $fontFolder $font.FileName
    $nameInRegistry = "$($font.Name) (TrueType)"

    Write-Host "-> Fetching $($font.Name)... " -NoNewline

    # Skip if already installed (file or registry entry exists)
    if ((Test-Path $destPath) -or (Get-ItemProperty -Path $registryPath -Name $nameInRegistry -ErrorAction SilentlyContinue)) {
        Write-Host "Already installed. Skipped." -ForegroundColor DarkGray
        continue
    }

    try {
        Invoke-WebRequest -Uri $font.Url -OutFile $tempPath -UseBasicParsing -ErrorAction Stop

        # Guard against HTML error pages saved as .ttf
        if ((Get-Item $tempPath).Length -lt 10000) { throw "Downloaded file too small - URL may be broken" }

        Copy-Item $tempPath -Destination $destPath -Force
        New-ItemProperty -Path $registryPath -Name $nameInRegistry -Value $font.FileName -PropertyType String -Force | Out-Null

        Write-Host "Installed!" -ForegroundColor Yellow
        $successCount++
    } catch {
        Write-Host "Failed! ($($_.Exception.Message))" -ForegroundColor Red
    }
}

Remove-Item -Path $tempFolder -Recurse -Force | Out-Null
Write-Host "`nComplete: $successCount new fonts installed. Restart open apps to load them.`n" -ForegroundColor Cyan

Notes from real use:

  • GitHub raw URLs are case-sensitive and exact — BenSen.ttf ≠ Bensen.ttf, and some fonts carry date stamps (AdorshoLipi_20-07-2007.ttf). A 404 here means the filename drifted; browse the repo to find the new name.
  • Vrinda and Sonar Bangla ship with Windows’ Bangla language support, so they’re not in the list.
  • To add more fonts, append another @{ Name = ...; Url = ...; FileName = ... } entry with a direct .ttf URL.

Windows-Specific Input Tweaks

After installing AutoHotkey v2, remap Caps Lock to Ctrl:

; capslock_to_ctrl.ahk
#Requires AutoHotkey v2.0

CapsLock::Ctrl

Terminal & Shell

Modern Windows terminals beat Command Prompt and Windows PowerShell 5.1.

Tool Install Purpose
Windows Terminal winget install --id Microsoft.WindowsTerminal -e Modern terminal (tabs, splits, GPU rendering)
PowerShell 7 winget install --id Microsoft.PowerShell -e Modern cross-platform shell
Oh My Posh winget install --id JanDeDobbeleer.OhMyPosh -e Terminal prompt theming
Nerd Font See Media section above Icons in terminal
fzf winget install --id junegunn.fzf -e Fuzzy file finder
zoxide winget install --id ajeetdsouza.zoxide -e Smarter cd command
bat winget install --id sharkdp.bat -e Syntax-highlighted cat
eza winget install --id eza-community.eza -e Modern ls replacement
fd winget install --id sharkdp.fd -e Fast find alternative
ripgrep winget install --id BurntSushi.ripgrep.MSVC -e Fast grep alternative
lazygit winget install --id JesseDuffield.lazygit -e Git TUI
delta winget install --id dandavison.delta -e Better git diff

Productivity

Tool Install Purpose
Obsidian winget install --id Obsidian.Obsidian -e Markdown knowledge base
Logseq winget install --id Logseq.Logseq -e Outliner-style notes
Zotero winget install --id DigitalScholar.Zotero -e Reference manager
Calibre winget install --id calibre.calibre -e Ebook library manager
KeePassXC winget install --id KeePassXCTeam.KeePassXC -e Local password manager
Bitwarden winget install --id Bitwarden.Bitwarden -e Cloud password manager
1Password winget install --id AgileBits.1Password -e Paid password manager
ShareX (see Media) Screenshot tool
Greenshot winget install --id Greenshot.Greenshot -e Screenshot alternative

Windows-Specific Power User Tools

These make Windows behave more like a real developer OS:

Tool Install Purpose
PowerToys (see Utilities) Includes FancyZones, PowerRename, Keyboard Manager
EarTrumpet winget install --id File-New-Project.EarTrumpet -e Per-app volume control
AutoHotkey v2 winget install --id AutoHotkey.AutoHotkey -e Keyboard automation, custom hotkeys
Windows Subsystem for Linux wsl --install Run Linux inside Windows

Configure WSL

wsl --install -d Ubuntu

wsl --install defaults to WSL 2 and requires one reboot. Add -d Ubuntu (or any distro name) to pick the distribution in the same step.


Setting Up a Fresh Windows Workstation (Under 1 Hour)

If you’ve just installed a debloated Windows and want to get to a productive state fast, run this single script.

Important: winget install accepts exactly one package per invocation — you cannot stack multiple --id flags on one command. The loop below is the correct pattern:

# Run as Administrator in PowerShell 7

# 1. Refresh package sources
winget source update

# 2. Install everything (one winget call per package, silent, no popups)
$packages = @(
    'Microsoft.PowerToys',            # utilities
    '7zip.7zip',
    'voidtools.Everything',
    'Notepad++.Notepad++',
    'Microsoft.WindowsTerminal',
    'Microsoft.PowerShell',           # PowerShell 7
    'AutoHotkey.AutoHotkey',
    'Mozilla.Firefox',                # browsers
    'Google.Chrome',
    'Microsoft.VisualStudioCode',     # editor
    'Git.Git',                        # development tools
    'OpenJS.NodeJS.LTS',
    'Python.Python.3.12',
    'VideoLAN.VLC',                   # media
    'Spotify.Spotify',
    'DEVCOM.JetBrainsMonoNerdFont'    # fonts
)

foreach ($id in $packages) {
    Write-Host "Installing $id..." -ForegroundColor Cyan
    winget install --id $id -e --silent `
        --accept-package-agreements --accept-source-agreements `
        --disable-interactivity
    if ($LASTEXITCODE -ne 0) {
        Write-Warning "$id failed (exit $LASTEXITCODE) - continuing with the rest"
    }
}

# 3. Install WSL (for Linux tools; requires reboot)
wsl --install

# 4. Configure PowerShell profile
code $PROFILE
# Add:
# oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\agnoster.omp.json" | Invoke-Expression
# Set-PSReadLineOption -PredictionSource History
# Import-Module Terminal-Icons

Write-Host "Setup complete! Restart your terminal." -ForegroundColor Green

Save this as setup.ps1 and run it on any new Windows machine.


Verify & Remove

# Everything winget can upgrade
winget upgrade

# Find an installed package by name (output is text — filter with Select-String)
winget list firefox

# Uninstall cleanly by exact ID
winget uninstall --id Mozilla.Firefox -e

Silent & Elevated Installs (No Popups)

For unattended installs and updates — no wizards, no UAC spam beyond one elevation, no interruptions:

# Run this from an ELEVATED PowerShell 7 session (right-click Terminal → Run as administrator)
winget install --id <Package.Id> -e `
    --silent `
    --accept-package-agreements `
    --accept-source-agreements `
    --disable-interactivity

What each flag does:

Flag Effect
--silent / -s Suppresses the installer’s own UI (uses NSIS /S, Inno /VERYSILENT, MSI quiet mode, etc.)
-e Exact ID match — prevents installing a similarly-named package
--accept-package-agreements Auto-accepts the package’s license
--accept-source-agreements Auto-accepts the source (winget/msstore) agreements
--disable-interactivity Fails fast instead of hanging on any interactive prompt

Batch-upgrade everything at once:

# Review what would be upgraded first
winget upgrade

# Then apply all of it silently
winget upgrade --all --silent `
    --accept-package-agreements --accept-source-agreements `
    --disable-interactivity

Notes from real use:

  • Run elevated. Machine-scoped installers need admin; without it you get one UAC prompt per package (or silent failures). One elevated terminal = zero mid-install prompts.
  • Close running apps first. Installers for running apps (sync clients, download managers, editors) either wait for exit or abort in silent mode. Stop the process before upgrading.
  • Some packages reject winget upgrades entirely (“No applicable upgrade found”). When that happens, download the official installer directly and run its silent switch yourself — NSIS uses /S, Inno uses /VERYSILENT /NORESTART, MSIs use /qn. Always verify the SHA-256 against the manifest (winget show <id>) before executing.
  • MSIX/Store apps ignore --silent (they’re always quiet) but may need the Store service running.

The Frozen-Update Maintenance Routine

This site’s dual-boot setup runs Windows with automatic updates disabled (services stopped via the Revision Tool) so work is never interrupted. That control comes with a responsibility: you are now the update scheduler. Budget 15–30 minutes once a month:

  1. Review pending app updates (safe, reversible):
    winget source update
    winget upgrade          # read the list first
    winget upgrade --all --silent --accept-package-agreements --accept-source-agreements --disable-interactivity
  2. Check the OS servicing state occasionally (every 2–3 months): open Settings → Windows Update and let it scan manually. On this setup the update services are set to Manual, so a manual check still works — you decide when, and can reboot on your schedule. Skipping OS security patches indefinitely is the single riskiest part of a debloated setup.
  3. Antivirus reality check: if your debloat removed Microsoft Defender rather than pausing it, “update virus definitions when I feel like it” isn’t possible — there is no engine to update. Verify with Get-Service WinDefend. If absent, either re-enable Defender through your debloat tool periodically, or run a third-party AV you update on your own schedule.
  4. Keep a changelog — note the date and packages after each pass, so a future breakage has a suspect list.

What Didn’t Work (and Why)

Approach Why It Failed
Stacking multiple --id flags on one winget install command winget takes exactly one package per invocation — use a loop or separate commands
Typing a package ID with different casing under -e Exact-match IDs are case-sensitive (Mega.MEGASync ≠ Mega.MEGAsync) — copy the ID from winget search output
Trusting winget upgrade to cover every installed app Some manifests report “No applicable upgrade found” forever; fall back to the vendor’s silent installer (see above)

Official References


Discussion

Continue the conversation about this guide. Loading comments connects to GitHub Discussions through giscus.

Open community discussions on GitHub

Check before you copy

This command needs care. Read its context, confirm the target and location, and keep a recovery path.

Copying does not run a command.