Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

microsoft/WindowsDeveloperConfig

Windows Developer Config logo

Windows Developer Config

Opinionated setups for Windows dev boxes. Idempotent. CI-tested.


Go from a fresh Windows install to a fully configured dev box in one command. These declarative, CI-tested configs set up your tools, settings, and shells the same way every time — so any machine can be your machine in minutes.

🎯 Pick your setup

Three developer setups live in this repo. Pick the one that matches what you want:

You want... Go to
A complete dev workstation: tools, OS settings, WSL, and terminal. One command, may reboot. Windows Dev Config
A polished WSL shell: zsh/bash, Starship, CLI tools, and a themed terminal profile. Interactive or unattended. WSL Comfort
A single language toolchain: Node, Python, PowerShell, .NET, Rust, Go, Java, PHP, WinForms, or WinUI 3. One command each. Workloads

Most of them use winget configure. If you've never used it before, enable it once:

winget configure --enable

Important

If winget is being invoked from a non-elevated environment, the Microsoft Visual C++ Redistributable (aka.ms/vcredist) must also be installed — without it winget configure fails with an internal error. Install it once with the command for your machine's architecture:

# x64:
winget install Microsoft.VCRedist.2015+.x64
# ARM64:
winget install Microsoft.VCRedist.2015+.arm64

If that fails or winget configure is still not recognized, see Troubleshooting.


🖥️ Windows Dev Config

Turns a fresh Windows 11 box into a clean, distraction-free dev workstation in one shot.

A single winget configuration file that installs dev tools, applies opinionated Windows settings, and bootstraps WSL + Ubuntu through the required reboot. Non-interactive. Idempotent. Safe to re-run on an existing machine.

First, get the files onto the box. The config is invoked from a local path, but the bootstrap itself is what installs Git — so on a clean Windows install you'll typically download the repo as a ZIP. If Git is already there, clone it:

# Git already installed:
git clone https://github.com/microsoft/WindowsDeveloperConfig.git
cd WindowsDeveloperConfig
# Otherwise, download and extract the ZIP:
Invoke-WebRequest -Uri https://github.com/microsoft/WindowsDeveloperConfig/archive/refs/heads/main.zip -OutFile WindowsDeveloperConfig.zip
Expand-Archive .\WindowsDeveloperConfig.zip -DestinationPath .
cd .\WindowsDeveloperConfig-main

Then apply the configuration:

winget configure -f .\windows-dev-config\dev-config.winget --accept-configuration-agreements --disable-interactivity

⚠️ May reboot. Enabling WSL needs a Windows optional feature that requires a restart. A RunOnce task picks the configuration back up after you sign in, installs Ubuntu, and finishes the run. Expect one hard reboot plus about a minute of post-login work. Save your work first.

What you get
  • Dev tools: PowerShell 7, Git, GitHub CLI, VS Code, .NET SDK 10, Python 3.14 + uv, Node.js, Oh My Posh, and PowerToys.
  • Terminal: PowerShell 7 is the default profile, Oh My Posh is enabled, and Cascadia Mono NF is set as the default font.
  • Windows settings: Dark theme, developer mode, long paths, File Explorer defaults, Start/Search cleanup, Edge policies, and other workstation defaults.
  • WSL: WSL platform + Ubuntu, including the reboot and the RunOnce resume step.

Full details: windows-dev-config/README.md.


🐧 WSL Comfort

Also known as Comfort Shell. An interactive setup for a polished Windows + WSL shell environment.

WSL Comfort stands apart. It supports both interactive and non-interactive modes, and lets you pick and choose individual components. The Windows side handles WSL, the distro, the Cascadia Code Nerd Font, and a themed Windows Terminal profile. The Linux side runs inside the distro and configures the shell itself.

.\wsl-comfort\install.ps1

Interactive by default. Use -NonInteractive for unattended runs; the bootstrap also takes --minimal for a smaller setup. The Linux half is standalone, so you can copy comfort-shell-bootstrap.sh onto any Ubuntu host and run it directly.

What you can pick
  • Your choice of shell: zsh or bash.
  • Optional Starship prompt.
  • Optional modern CLI tools: fzf, rg, fd, bat, eza, zoxide, jq.
  • Optional clipboard and open shims (pbcopy, pbpaste, open).
  • Optional Homebrew.
  • Optional Git defaults.
  • A themed Windows Terminal profile using Cascadia Code Nerd Font.

Full details: wsl-comfort/readme.md.


🧪 Single-language workloads

Just want one toolchain? Pick a row. Each workload ships a configuration.winget file plus a matching install.ps1 shim that applies it and refreshes PATH in the current session.

Workload Installs Run
TypeScript Node.js LTS + global typescript winget configure -f .\Workloads\typescript\configuration.winget --accept-configuration-agreements --disable-interactivity
PHP PHP 8.5 winget configure -f .\Workloads\php\configuration.winget --accept-configuration-agreements --disable-interactivity
.NET .NET SDK 10 winget configure -f .\Workloads\dotnet\configuration.winget --accept-configuration-agreements --disable-interactivity
Go Go (rolling) winget configure -f .\Workloads\go\configuration.winget --accept-configuration-agreements --disable-interactivity
Java Microsoft Build of OpenJDK 25 LTS winget configure -f .\Workloads\java\configuration.winget --accept-configuration-agreements --disable-interactivity
Rust Rust stable via rustup winget configure -f .\Workloads\rust\configuration.winget --accept-configuration-agreements --disable-interactivity
Python Python 3.14 + uv winget configure -f .\Workloads\python\configuration.winget --accept-configuration-agreements --disable-interactivity
PowerShell PowerShell 7 + VS Code PowerShell extensions + PSScriptAnalyzer settings winget configure -f .\Workloads\powershell\configuration.winget --accept-configuration-agreements --disable-interactivity
WinForms .NET SDK 10 + Windows Forms desktop workload winget configure -f .\Workloads\winforms\configuration.winget --accept-configuration-agreements --disable-interactivity
WinUI 3 .NET SDK 10 + Visual Studio Community + Windows App SDK / WinUI 3 + WinAppCLI winget configure -f .\Workloads\winui\configuration.winget --accept-configuration-agreements --disable-interactivity

Want the PATH refresh in your current shell? Use the matching shim instead of calling winget configure directly:

.\Workloads\python\install.ps1

Heads up: WinForms and WinUI 3 pull down several gigabytes of Visual Studio components. Fine on a real workstation, painful on a small VM.


🎨 Command Palette extension (coming soon)

A PowerToys Command Palette extension lives under src/future/cmdpal/. It reads the same flow list as the rest of the repo and surfaces every flow as a launchable entry, so you don't have to remember which configuration.winget to point winget at.

See src/future/cmdpal/README.md for build and install instructions.


🩺 Troubleshooting

"Unrecognized command: configure"

Run winget configure --enable. If winget configure is still not recognized after that, Workloads/_common/assert-winget-configure.ps1 tells you whether App Installer is too old, policy has disabled configuration, or something else needs fixing.

winget configure fails with "internal error" / error code -2146233079

This usually means the Microsoft Visual C++ Redistributable is missing — winget configure depends on it when invoked from a non-elevated environment. Install it once with the command for your architecture, then re-run:

# x64:
winget install Microsoft.VCRedist.2015+.x64
# ARM64:
winget install Microsoft.VCRedist.2015+.arm64

See aka.ms/vcredist for the standalone installer. The repo's Workloads/_common/enable-winget-configure.ps1 script also installs it automatically as part of enabling winget configure.

A workload says it succeeded but python / node / the tool isn't on PATH

Open a new terminal, or run the matching install.ps1 shim to refresh PATH in the current session.

Windows Dev Config rebooted the machine and looks stuck

It registered a RunOnce entry, so winget configure resumes once you sign back in. Give it a minute after login.

Comfort Shell bootstrap fails because WSL is missing

Run .\wsl-comfort\install.ps1 on the Windows side instead. It installs WSL first.

WSL install fails with wsl --install ... failed with exit code -1

WSL needs hardware virtualization available to the OS. Two common root causes:

  • On bare metal: virtualization (VT-x / AMD-V) is disabled in BIOS/UEFI. Reboot into firmware settings, enable it, save, and reboot back into Windows. The exact label varies by vendor — check your motherboard or laptop manufacturer's documentation if you can't find it.

  • Inside a VM: the host hasn't exposed nested virtualization to the guest. For a Hyper-V host, run this from an elevated PowerShell session on the host (with the guest VM powered off):

    Set-VMProcessor -VMName <VM_NAME> -ExposeVirtualizationExtensions $true

    Other hypervisors have their own equivalent settings — check your hypervisor's documentation.


🐛 Reporting issues

Hit a bug, a stale doc, or a setup that fails on your machine? Open an issue at github.com/microsoft/WindowsDeveloperConfig/issues. Include your Windows build (winver), the exact command you ran, and the failing output. This helps us triage faster.


❤️ Contributing

Contributions of all kinds are welcome: bug reports, doc fixes, new workloads, voice-and-tone tweaks. Start with CONTRIBUTING.md, then read src/docs/development.md for the CI matrix, the "how to add a language" walkthrough, and how the sign pipeline works.

Note on the repo layout: the src/ tree is the source of truth. The top-level windows-dev-config/, Workloads/, and wsl-comfort/ folders are Authenticode-signed release copies regenerated by the sign pipeline, so please don't edit them directly. Full details in src/docs/development.md.

The single source of truth for every flow (paths, build/run commands, ids, language metadata) is src/manifest.yml. The Command Palette extension, the CI harness, and the per-flow shims all read from it, so keep it in sync when you add or rename a flow.

About

Automate the setup and configuration of your Windows development environment.

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /