Skip to main content

Configuration Files

Configure WinGet to match your preferences and workflow by editing the settings.json file. This guide covers all available settings and common configuration patterns.

Accessing Settings

Opening the Settings File

Quickly open settings in your default JSON editor:
winget settings
If no JSON editor is configured, Windows will prompt you to select one. Notepad works fine for basic editing.

File Locations

%LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\settings.json

Creating a New Settings File

If creating from scratch, always include the schema reference:
{
  "$schema": "https://aka.ms/winget-settings.schema.json"
}
Settings files without the $schema property may not provide IntelliSense or validation in your editor.

Source Settings

Auto-Update Interval

Control how frequently WinGet checks for source updates:
{
  "source": {
    "autoUpdateIntervalInMinutes": 3
  }
}
  • Positive integer: Update interval in minutes (checked only when source is used)
  • 0: Disable automatic updates
  • Default: 15 minutes
Manual updates are always available:
winget source update

Visual Settings

Progress Bar Style

Customize the appearance of progress indicators:
{
  "visual": {
    "progressBar": "accent"
  }
}
ValueDescriptionVersion
accentUses Windows accent color (default)1.0
retroUses current terminal foreground color1.0
rainbowCycles through rainbow colors1.0
sixelUses sixel images (requires Windows Terminal 1.22.2362+)1.9
disabledNo progress display1.9
All styles except disabled send Virtual Terminal progress updates that supporting terminals can display.
Disable progress for a single command:
winget install --id Contoso.App --no-progress

Anonymize Paths

Replace known folder paths with environment variables in output:
{
  "visual": {
    "anonymizeDisplayedPaths": true
  }
}
Example: C:\Users\JohnDoe\AppData becomes %LOCALAPPDATA%

Enable Sixels

Enable sixel image output in supported contexts:
{
  "visual": {
    "enableSixels": true
  }
}

Install Behavior

Installation Notes

Control whether installation notes appear after successful installs:
{
  "installBehavior": {
    "disableInstallNotes": true
  }
}

Portable Package Locations

Customize where portable packages are installed:
{
  "installBehavior": {
    "portablePackageUserRoot": "C:/Users/FooBar/Packages",
    "portablePackageMachineRoot": "C:/Program Files/Packages/Portable"
  }
}
Paths must be absolute. Defaults:
  • User: %LOCALAPPDATA%/Microsoft/WinGet/Packages/
  • Machine: %PROGRAMFILES%/WinGet/Packages/

Dependency Handling

Skip installing package dependencies by default:
{
  "installBehavior": {
    "skipDependencies": true
  }
}

Archive Extraction Method

Choose how installer archives are extracted:
{
  "installBehavior": {
    "archiveExtractionMethod": "tar"
  }
}
  • tar: Use tar.exe for extraction
  • shellApi: Use Windows Shell API (default)

Preferences and Requirements

Preferences affect sorting/selection priority. Requirements filter options, potentially causing installation to fail if unmet.

Scope Preference

{
  "installBehavior": {
    "preferences": {
      "scope": "user"
    },
    "requirements": {
      "scope": "user"
    }
  }
}
  • Preference: Tries user scope first, falls back to machine
  • Requirement: Only accepts user scope installers

Locale Preference

Prefer specific installer locales:
{
  "installBehavior": {
    "preferences": {
      "locale": ["en-US", "fr-FR"]
    }
  }
}

Architecture Preferences

Prioritize specific architectures:
{
  "installBehavior": {
    "preferences": {
      "architectures": ["x64", "arm64"]
    }
  }
}
Only architectures compatible with your system can be selected.

Installer Type Priority

Define preferred installer types in order:
{
  "installBehavior": {
    "preferences": {
      "installerTypes": ["msi", "msix", "portable"]
    }
  }
}
appx, burn, exe, font, inno, msi, msix, msstore, nullsoft, portable, wix, zip
The first matching type in your list will be preferred. Without this setting, WinGet uses the first type listed in the manifest.

Default Install Root

Set default location for packages requiring install paths:
{
  "installBehavior": {
    "defaultInstallRoot": "C:/installRoot"
  }
}
The package ID is automatically appended to this path.

Maximum Resumes

Configure automatic command resume attempts:
{
  "installBehavior": {
    "maxResumes": 3
  }
}
Requires the resume experimental feature to be enabled.

Uninstall Behavior

Purge Portable Packages

Remove all files when uninstalling portable packages:
{
  "uninstallBehavior": {
    "purgePortablePackage": true
  }
}
  • false (default): Only removes the executable
  • true: Removes all files and directories related to the portable package

Configure Behavior

Default Module Root

Set where configuration modules are installed:
{
  "configureBehavior": {
    "defaultModuleRoot": "C:/Program Files/Modules/"
  }
}
Default: %LOCALAPPDATA%/Microsoft/WinGet/Configuration/Modules

Telemetry

Disable Telemetry

Prevent WinGet from writing ETW events:
{
  "telemetry": {
    "disable": true
  }
}
See the privacy statement for details on data collection.

Logging

Log Level

Control logging verbosity:
{
  "logging": {
    "level": "verbose"
  }
}
  • verbose: Maximum detail
  • info: Standard information (default)
  • warning: Warnings and errors only
  • error: Errors only
  • critical: Critical issues only
Override with command-line flag:
winget install --id Contoso.App --verbose-logs

Log Channels

Filter which log channels are written:
{
  "logging": {
    "channels": ["CORE", "REPO"]
  }
}
  • default: Default set of channels
  • all: All available channels
Channel identifiers can be found in log files:
2023-12-06 19:17:07.988 [CORE] WinGet, version [1.7.0-preview]

File Management

Configure automatic log file cleanup:
{
  "logging": {
    "file": {
      "ageLimitInDays": 7,
      "totalSizeLimitInMB": 128,
      "countLimit": 0,
      "individualSizeLimitInMB": 16
    }
  }
}
SettingDescriptionDefault
ageLimitInDaysMaximum age of log files7 days
totalSizeLimitInMBMaximum total size of all logs128 MB
countLimitMaximum number of log files (0 = disabled)0
individualSizeLimitInMBMax size per file before wrapping16 MB
Set any limit to 0 to disable that constraint. Cleanup happens at process start.

Network Settings

Downloader Selection

Choose which download engine to use:
{
  "network": {
    "downloader": "do",
    "doProgressTimeoutInSeconds": 60
  }
}
  • default: WinGet decides (recommended)
  • wininet: Windows WinINet APIs
  • do: Delivery Optimization service
Timeout Settings:
  • doProgressTimeoutInSeconds: Seconds to wait without progress before fallback
  • Range: 1-600 seconds
  • Default: 60 seconds

Interactivity

Disable Interactive Prompts

Prevent all interactive prompts from WinGet:
{
  "interactivity": {
    "disable": true
  }
}
This only affects WinGet prompts, not installer UIs. Use --silent for installer control.

Experimental Features

Enable preview features for testing:
{
  "experimentalFeatures": {
    "directMSI": true,
    "resume": true,
    "fonts": true,
    "sourcePriority": true
  }
}

Direct MSI Installation

Install MSI packages using MSI APIs instead of msiexec:
{
  "experimentalFeatures": {
    "directMSI": true
  }
}
Already in effect for silent installations requiring elevation.

Resume Support

Enable command resumption after failures:
{
  "experimentalFeatures": {
    "resume": true
  }
}
Configure in conjunction with installBehavior.maxResumes.

Font Package Support

Enable font family management:
{
  "experimentalFeatures": {
    "fonts": true
  }
}
List installed fonts:
winget font list

Source Priority

Assign priority values to sources:
{
  "experimentalFeatures": {
    "sourcePriority": true
  }
}
Higher priority sources appear earlier in search results. Match quality and field matching still take precedence.

Complete Configuration Example

A comprehensive settings file combining common configurations:
{
  "$schema": "https://aka.ms/winget-settings.schema.json",
  
  "source": {
    "autoUpdateIntervalInMinutes": 30
  },
  
  "visual": {
    "progressBar": "accent",
    "anonymizeDisplayedPaths": true
  },
  
  "installBehavior": {
    "disableInstallNotes": false,
    "portablePackageUserRoot": "C:/Users/Developer/Apps",
    "skipDependencies": false,
    "preferences": {
      "scope": "user",
      "locale": ["en-US"],
      "architectures": ["x64", "x86"],
      "installerTypes": ["msix", "msi", "exe"]
    },
    "defaultInstallRoot": "C:/CustomApps",
    "maxResumes": 3
  },
  
  "uninstallBehavior": {
    "purgePortablePackage": false
  },
  
  "telemetry": {
    "disable": false
  },
  
  "logging": {
    "level": "info",
    "channels": ["default"],
    "file": {
      "ageLimitInDays": 14,
      "totalSizeLimitInMB": 256,
      "individualSizeLimitInMB": 32
    }
  },
  
  "network": {
    "downloader": "default",
    "doProgressTimeoutInSeconds": 90
  },
  
  "interactivity": {
    "disable": false
  },
  
  "experimentalFeatures": {
    "directMSI": false,
    "resume": true,
    "fonts": false,
    "sourcePriority": true
  }
}

Configuration Scenarios

{
  "$schema": "https://aka.ms/winget-settings.schema.json",
  "installBehavior": {
    "preferences": {
      "scope": "user",
      "installerTypes": ["portable", "msix", "msi"]
    },
    "portablePackageUserRoot": "C:/Dev/Tools"
  },
  "logging": {
    "level": "verbose"
  },
  "experimentalFeatures": {
    "resume": true,
    "sourcePriority": true
  }
}
{
  "$schema": "https://aka.ms/winget-settings.schema.json",
  "source": {
    "autoUpdateIntervalInMinutes": 60
  },
  "installBehavior": {
    "preferences": {
      "scope": "machine"
    },
    "disableInstallNotes": true
  },
  "telemetry": {
    "disable": true
  },
  "interactivity": {
    "disable": true
  }
}
{
  "$schema": "https://aka.ms/winget-settings.schema.json",
  "visual": {
    "progressBar": "disabled"
  },
  "logging": {
    "level": "error",
    "file": {
      "ageLimitInDays": 3,
      "totalSizeLimitInMB": 32,
      "individualSizeLimitInMB": 8
    }
  },
  "source": {
    "autoUpdateIntervalInMinutes": 1440
  },
  "telemetry": {
    "disable": true
  }
}

Validation and Testing

Verify Settings

After editing, test that settings are valid:
winget --version
If settings are invalid, WinGet will display an error.

IntelliSense Support

Use VS Code or editors with JSON schema support:
  1. Open settings.json in VS Code
  2. Verify schema line is present
  3. Get autocomplete suggestions as you type

Schema Validation

Your editor should validate against the schema automatically. Look for:
  • Red squiggly underlines for errors
  • Yellow highlights for warnings
  • Hover tooltips for field descriptions

Troubleshooting

  1. Verify file location matches your WinGet installation type
  2. Check JSON syntax is valid (no trailing commas, proper quotes)
  3. Restart terminal/command prompt
  4. Check for Group Policy overrides (see Group Policy Guide)
Delete or rename the file and run:
winget settings
This creates a fresh file with schema reference.
Ensure your user account has write access to the settings directory. For packaged versions, this should be automatic.

Best Practices

Always Include Schema

The $schema property enables validation and autocomplete in editors.

Start Small

Begin with a few settings and add more as needed. Don’t copy entire example configs blindly.

Use Comments Sparingly

JSON doesn’t support comments. Use external documentation instead.

Test Changes

Always test setting changes with simple commands before automation.

Package Management

Learn installation and upgrade workflows

Group Policy

Understand policy overrides for settings

Private Sources

Configure custom package sources

Build docs developers (and LLMs) love