WindowsDeveloperConfig README

The project's README from github.com/microsoft/WindowsDeveloperConfig. As one markdown file: README.md.

Windows Developer Config logo

Windows Developer Config

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

Windows Dev Config · WSL Comfort · Workloads · Troubleshooting


Your dev environment should help you ship, not become another project to debug. Try the new Windows developer configuration and spend less time setting up, more time building something awesome.

🎯 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, restarts once. 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, SQL, PowerShell, .NET, Rust, Go, Java, PHP, WinForms, or WinUI 3. One command each. Workloads

🖥️ Windows Dev Config

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

A set of PowerShell scripts that installs dev tools, applies opinionated Windows settings, and sets up WSL + Ubuntu through the required reboot. Nothing to clone, nothing to install first. Idempotent, so it's safe to re-run on an existing machine.

Open any PowerShell window — elevated or not — and run:

Standard

irm https://aka.ms/devconfig/standard/setup.ps1 | iex

Full experience

irm https://aka.ms/devconfig/full/setup.ps1 | iex

⚠️ It will restart your machine, once. Enabling WSL needs a Windows optional feature that requires a restart. You get a 10-second warning, and a scheduled task resumes setup after you sign back in and accept the UAC prompt. Save your work before you start.

What you get

Standard Experience

  • Dev tools: Windows Terminal, PowerShell 7, Git, GitHub CLI, GitHub Copilot CLI, VS Code, .NET SDK 10, Python 3.14 + uv, Node.js LTS + nvm, Coreutils for Windows, Windows App CLI, Oh My Posh, and PowerToys.
  • Terminal: PowerShell 7 as the default profile, Oh My Posh in your prompt, Cascadia Mono NF as the default font, and a GitHub Copilot profile in the dropdown.
  • Windows settings: Dark theme, long paths, File Explorer defaults, Start/Search settings, and Do Not Disturb
  • WSL: WSL platform + Ubuntu, including the restart and the automatic resume afterwards.

Full

  • Everything from standard
  • Windows settings: Developer Mode, Sudo, widgets off, and Edge policies, additional Start/Search/System Tray settings
  • Remote Desktop: Enabled and firewall settings set

Full details — every setting it changes, how to undo them, and troubleshooting: 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.

Most of the single-language workloads 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 doesn't use winget configure and needs none of this.


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
SQL Lightweight SQL Developer: SQL Server + sqlcmd + VS Code extension winget configure -f .\Workloads\sql\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
WinAppCLI Developer Mode + .NET SDK 10 + Windows App Development CLI winget configure -f .\Workloads\winappcli\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.


🩺 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 scheduled task named WindowsDevConfigResume, so the run picks itself back up about 30 seconds after you sign back in. A window opens on its own and finishes the WSL setup. If nothing appears after a couple of minutes, run the one-liner again — it's safe to re-run and skips everything already done. More detail in windows-dev-config/README.md.

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.

WindowsDeveloperConfig (microsoft/WindowsDeveloperConfig)

Searching Database…

这是什么?这是微软的一个仓库,提供三套各有主见的 PowerShell 配置方案,用于配置 Windows 开发机:一个完整的开发工作站安装器、一个名为 WSL Comfort 的 WSL/Linux shell 美化工具,以及各语言单独的工具链安装器。
这是需要安装的应用,还是直接运行的脚本?这是一组直接运行的 PowerShell 脚本(另有一个用于 Linux 侧的独立 bash 脚本)——无需克隆或预先安装任何东西。
具体怎么运行?打开任意 PowerShell 窗口(提权与否均可),运行 Windows Dev Config 单行命令完成完整的工作站配置,或运行 WSL Comfort 脚本(支持 -NonInteractive 和 --minimal),或运行 'winget configure -f .\Workloads\ \configuration.winget --accept-configuration-agreements --disable-interactivity' 只安装一个工具链。
单语言工作负载需要先做哪些准备吗?大多数工作负载依赖 'winget configure',需要先用 'winget configure --enable' 启用一次;如果你在非提权的 shell 中运行,还需要先安装 Microsoft Visual C++ Redistributable,否则 winget configure 会报内部错误。
运行它会重启我的电脑,或者改动我意料之外的东西吗?完整运行 Windows Dev Config 会重启一次电脑以启用 WSL,先给出 10 秒警告,登录后通过计划任务自动继续;它还会更改主题、开发者模式和远程桌面等 Windows 设置,WinForms/WinUI 3 工作负载会下载数 GB 的 Visual Studio 组件。
它只动 Windows,还是也会配置 Linux/WSL 那边?两者都有:Windows Dev Config 和 WSL Comfort 会从 Windows 侧安装 WSL 和 Ubuntu,Comfort Shell 引导脚本也可以在发行版内独立运行,配置那里的 zsh/bash、Starship 和命令行工具——你甚至可以把它复制到任何 Ubuntu 主机上。
脚本重复运行安全吗?安全,这些脚本具有幂等性并通过了 CI 测试,重新运行中断或已完成的配置只会跳过已完成的步骤。
WSL Comfort 里可以自定义哪些东西?你可以选择 shell(zsh 或 bash)、可选的 Starship 提示符、可选的命令行工具(fzf、rg、fd、bat、eza、zoxide、jq)、剪贴板/打开命令的 shim、Homebrew 和 Git 默认配置,外加一个带主题、使用 Cascadia Code Nerd Font 的 Windows Terminal 配置文件。
Standard 和 Full 两种 Windows Dev Config 体验有什么区别?Standard 安装核心开发工具(Terminal、PowerShell 7、Git、VS Code、.NET SDK、Python、Node.js、Oh My Posh、PowerToys)、终端主题、Windows 设置以及 WSL/Ubuntu。Full 包含 Standard 的全部内容,另外添加开发者模式、Sudo、额外的开始菜单/搜索/系统托盘调整,以及带防火墙规则的远程桌面。
有哪些单语言工作负载?TypeScript、PHP、.NET、Go、Java、Rust、Python、SQL、PowerShell、WinForms、WinAppCLI 和 WinUI 3——每个都附带一个 winget 配置文件和一个 install.ps1 shim,安装后用于刷新 PATH。
What are similar projects?ansible, WindTerm, oh-my-posh, Scoop, eza, asdf, NodePilot, coreutils
Creator
microsoft
Size
4 MB
Stars
3.2K
Updated
CommitOct 13
Age
4mo
Commits · 90 Days