Skip to main content

Settings Configuration

You can configure WinGet by editing the settings.json file. Running winget settings will open the file in the default JSON editor.

File Location

The settings file is located at: Packaged version (Microsoft Store):
%LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\settings.json
Non-packaged version (built from source):
%LOCALAPPDATA%\Microsoft\WinGet\Settings\settings.json
When creating a settings file from scratch, include the schema reference:
{
  "$schema": "https://aka.ms/winget-settings.schema.json"
}

Opening Settings

Use the winget settings command to open the settings file in your default JSON editor:
winget settings

Source Settings

Control how WinGet updates package source repositories.

Auto Update Interval

source.autoUpdateIntervalInMinutes
integer
default:"15"
Update interval for package sources in minutes. Set to 0 to disable automatic updates.
{
  "source": {
    "autoUpdateIntervalInMinutes": 3
  }
}
Source updates only happen when a source is used. To manually update sources, use winget source update.

Visual Settings

Customize the visual appearance of WinGet output.

Progress Bar

visual.progressBar
string
default:"accent"
Style of the progress bar displayed during operations.
Available values:
ValueDescriptionVersion
accentUse Windows Accent color1.0+
retroUse current foreground terminal color1.0+
rainbowProgress through rainbow colors1.0+
sixelUse sixel images (requires compatible terminal)1.9+
disabledNo progress display1.9+
{
  "visual": {
    "progressBar": "rainbow"
  }
}
You can disable progress for a single command using the --no-progress flag, which overrides this setting.

Path Anonymization

visual.anonymizeDisplayedPaths
boolean
default:"true"
Replace known folder paths with environment variables in output.
{
  "visual": {
    "anonymizeDisplayedPaths": true
  }
}

Sixel Images

visual.enableSixels
boolean
default:"false"
Enable output of sixel images in certain contexts.
{
  "visual": {
    "enableSixels": true
  }
}

Install Behavior

Configure default installation behavior for packages.

Install Notes

installBehavior.disableInstallNotes
boolean
default:"false"
Disable display of installation notes after successful installation.
{
  "installBehavior": {
    "disableInstallNotes": true
  }
}

Portable Package Directories

installBehavior.portablePackageUserRoot
string
default:"%LOCALAPPDATA%/Microsoft/WinGet/Packages/"
Root directory for portable packages installed under User scope.
installBehavior.portablePackageMachineRoot
string
default:"%PROGRAMFILES%/WinGet/Packages/"
Root directory for portable packages installed under Machine scope.
These paths must be absolute paths.
{
  "installBehavior": {
    "portablePackageUserRoot": "C:/Users/MyUser/Packages",
    "portablePackageMachineRoot": "C:/Program Files/Packages/Portable"
  }
}

Dependencies

installBehavior.skipDependencies
boolean
default:"false"
Skip installation of package dependencies.
{
  "installBehavior": {
    "skipDependencies": true
  }
}

Archive Extraction

installBehavior.archiveExtractionMethod
string
default:"shellApi"
Method used to extract installer archives.
Available values:
  • shellApi - Use Windows Shell API
  • tar - Use tar executable (tar.exe)
{
  "installBehavior": {
    "archiveExtractionMethod": "tar"
  }
}

Preferences and Requirements

Preferences affect how available options are sorted when choosing installers. For example, preferring user scope but falling back to machine scope if unavailable.Requirements filter options and may result in installation failure if no matching installer is found.Command-line arguments override matching requirement settings for that command.
These settings only apply to winget install command, not winget configure or other commands.

Scope Preference

installBehavior.preferences.scope
string
default:"user"
Preferred installation scope.
{
  "installBehavior": {
    "preferences": {
      "scope": "user"
    },
    "requirements": {
      "scope": "machine"
    }
  }
}

Locale Preference

installBehavior.preferences.locale
array
Preferred installer locales using BCP47 language tags.
{
  "installBehavior": {
    "preferences": {
      "locale": ["en-US", "fr-FR"]
    }
  }
}

Architecture Preference

installBehavior.preferences.architectures
array
Preferred architectures for package installation. Only compatible architectures can be selected.
{
  "installBehavior": {
    "preferences": {
      "architectures": ["x64", "arm64"]
    }
  }
}

Installer Type Preference

installBehavior.preferences.installerTypes
array
Preferred installer types in priority order.
Available installer types: appx, burn, exe, font, inno, msi, msix, msstore, nullsoft, portable, wix, zip
{
  "installBehavior": {
    "preferences": {
      "installerTypes": ["msi", "msix"]
    }
  }
}

Default Install Root

installBehavior.defaultInstallRoot
string
Default installation location for packages that require one.
{
  "installBehavior": {
    "defaultInstallRoot": "C:/installRoot"
  }
}
This setting is only used when a package manifest includes InstallLocationRequired. The package ID is appended to this root path.

Maximum Resumes

installBehavior.maxResumes
integer
default:"3"
Maximum number of automatic command resumes.
{
  "installBehavior": {
    "maxResumes": 3
  }
}
The resume behavior requires the experimental resume feature to be enabled.

Uninstall Behavior

Purge Portable Packages

uninstallBehavior.purgePortablePackage
boolean
default:"false"
Remove all files and directories when uninstalling portable packages.
{
  "uninstallBehavior": {
    "purgePortablePackage": true
  }
}

Configure Behavior

Settings for configuration file processing.

Default Module Root

configureBehavior.defaultModuleRoot
string
Root directory where PowerShell modules are installed when applying configurations.
This must be an absolute path.
{
  "configureBehavior": {
    "defaultModuleRoot": "C:/Program Files/Modules/"
  }
}

Telemetry

Control telemetry data collection.
telemetry.disable
boolean
default:"false"
Disable all telemetry event writing.
{
  "telemetry": {
    "disable": true
  }
}

Logging

Configure logging behavior and log file management.

Log Level

logging.level
string
default:"info"
Logging detail level.
Available levels: verbose, info, warning, error, critical
{
  "logging": {
    "level": "verbose"
  }
}
The --verbose-logs command flag overrides this setting and always creates verbose logs.

Log Channels

logging.channels
array
default:"[\"default\"]"
Specific logging channels to enable.
Available channels: fail, cli, sql, repo, yaml, core, test, config, default, all
{
  "logging": {
    "channels": ["default"]
  }
}

Log File Management

logging.file.ageLimitInDays
integer
default:"7"
Maximum age in days before log files are deleted. Set to 0 to disable.
logging.file.totalSizeLimitInMB
integer
default:"128"
Maximum total size in MB for all log files. Oldest files deleted first. Set to 0 to disable.
logging.file.countLimit
integer
default:"0"
Maximum number of log files to retain. Oldest files deleted first. Set to 0 to disable (default).
logging.file.individualSizeLimitInMB
integer
default:"16"
Maximum size in MB for individual log files. Logs wrap when exceeded. Set to 0 to disable.
{
  "logging": {
    "file": {
      "ageLimitInDays": 7,
      "totalSizeLimitInMB": 128,
      "countLimit": 0,
      "individualSizeLimitInMB": 16
    }
  }
}
Automatic cleanup happens at the beginning of each WinGet process and only applies to the default log location.

Network Settings

Configure network behavior for package downloads.

Downloader

network.downloader
string
default:"default"
Download implementation to use.
Available options:
  • default - Automatically chosen by WinGet
  • wininet - Use WinINet APIs
  • do - Use Delivery Optimization service
network.doProgressTimeoutInSeconds
integer
default:"60"
Seconds to wait without progress before fallback (1-600).
{
  "network": {
    "downloader": "do",
    "doProgressTimeoutInSeconds": 60
  }
}

Interactivity

Control interactive prompts from WinGet.
interactivity.disable
boolean
default:"false"
Prevent all interactive prompts from WinGet itself (not package installers).
{
  "interactivity": {
    "disable": true
  }
}
This only affects prompts from WinGet, not from package installers.

Complete Example

Here’s a complete settings.json file with commonly used options:
{
  "$schema": "https://aka.ms/winget-settings.schema.json",
  "source": {
    "autoUpdateIntervalInMinutes": 15
  },
  "visual": {
    "progressBar": "accent",
    "anonymizeDisplayedPaths": true
  },
  "installBehavior": {
    "preferences": {
      "scope": "user",
      "locale": ["en-US"],
      "architectures": ["x64"]
    },
    "disableInstallNotes": false,
    "skipDependencies": false
  },
  "uninstallBehavior": {
    "purgePortablePackage": false
  },
  "telemetry": {
    "disable": false
  },
  "network": {
    "downloader": "default",
    "doProgressTimeoutInSeconds": 60
  },
  "logging": {
    "level": "info",
    "channels": ["default"]
  },
  "experimentalFeatures": {
    "directMSI": false,
    "fonts": false,
    "sourcePriority": false
  }
}

See Also

Build docs developers (and LLMs) love