I built my perfect Windows dev environment inside a virtual machine
June 2, 2025
I’ve been a Windows user for decades, and have used the OS series for most of my workloads, be it gaming, testing new hardware, or even writing articles such as this one. However, I’m not too fond of burdening my daily driver with too many apps, especially when said applications lie on the coding side. Conflicting packers are a hundred times more annoying to troubleshoot on Windows than on Linux, and I’d rather not pollute my system with a barrage of packages and dependencies.
Virtual machines serve as a panacea for my woes, as I can offload all my tools into an isolated environment and connect to it via a Remote Desktop Protocol. In fact, Microsoft used to offer VMs laden with all the utilities you’d ever need in a development environment. The key word here is “used to,” because, just like other useful products that had tons of potential, Microsoft has more-or-less scrapped the project — with the download links for the virtual machine files being “temporarily unavailable” since October 2024.
Since I use my home lab for practically every other project, I figured I should build my own version of a Windows 11 dev environment inside a virtual machine. And I’m glad I did, as this beast of a VM can deal with everything I throw at it.
Proxmox saves the day yet again
But setting up a Windows 11 VM is somewhat tricky
If you’ve been following my work here on XDA, you already know that Proxmox is the main virtualization platform in my home lab. Sure, I could go for Hyper-V and deploy the virtual machine on my main PC, but my dual-CPU Xeon workstation meshes exceedingly well with the KVM hypervisor.
That said, deploying a Windows-flavored VM involves a couple of tweaks. For starters, I had to download the VirtIO drivers and assign them to the virtual machine after choosing Windows as the guest OS. After that, I enabled EFI and TPM Storage before assigning my local-lvm drive to them. For the CPU cores and memory, I decided to go a little overboard with 16 v-cores and 32,768 MB (or 32 GB) RAM. Since Windows 11 doesn’t play nice with VirtIO Ethernet drivers, I switched to the Intel E1000E and booted up the virtual machine.
Soon, the all-familiar Windows installation wizard showed up, and I went with the Pro version of the OS. Since the wizard doesn’t detect my storage drives, I had to use the VirtIO disk to install the SCSI Passthrough Controller. The rest of the process was smooth sailing. I soon arrived at a fresh Windows installation.
I ditched noVNC for RDP and Windows App
Proxmox supports noVNC as the default console interface for virtual machines. While it works well for most projects, its latency is quite noticeable. Plus, I don’t have access to a clipboard or other necessary functionality with noVNC. Spice is a decent alternative, but I went with Remote Desktop Protocol instead, which is my primary reason for choosing Windows 11 Pro over Home.
I’ve taken most of these screenshots on my main PC, but I’ve also succumbed to the pleasures of macOS over the last week. As such, I needed an application to access my development environment from my MacBook. Thankfully, the App Store includes the weirdly named “Windows App,” which lets me connect to my Windows 11 virtual machine. I quickly installed the pending software updates, created a snapshot of the clean VM, and enabled nested virtualization from the Proxmox shell.
Visual Studio is a major part of my dev environment
And so is Visual Studio Code (with its huge extension suite)
With the initial preparations complete, it was time to arm the development environment with my essential apps and tools. Since I really want to get into serious C++ coding, I decided to go with Visual Studio first. Sure, there are plenty of IDEs out there, but I’ve used it a fair bit in the past, so it’s the one I’m most familiar with.
Once Visual Studio was up and running, I went ahead and installed VS Code. Despite their similar names, Visual Studio and Visual Studio Code are entirely different applications. The heavyweight Visual Studio is more of an IDE that includes everything from a debugger to a compiler, while its Code counterpart is a light code editor. I prefer using VS Code for my web development projects and rely on it whenever I have to make quick edits to my code. Meanwhile, I plan to use Visual Studio for hardcore application development.
I also outfitted VS Code with a host of extensions, ranging from Python libraries and Prettier to Git Graphs and the Remote Development collection. VS Code is the only coding application I’ve set up on practically every machine in my household, so I can use the Remote Tunnels and Remote SSH extensions to quickly edit my coding files without resorting to RDP.
I use Podman Desktop for my containers
While WSL2 caters to my Linux development needs
Remember how I mentioned nested virtualization earlier? Well, Podman Desktop doesn’t work without virtualization enabled in the BIOS. Thankfully, nested virtualization is a solid workaround. While I have separate VMs dedicated to running containers, I typically use containerized environments to test my coding projects, which is why Podman is an essential part of my setup.
You could technically replace Podman Desktop with its Docker equivalent, but I recommend sticking with it. For one, Podman Desktop also supports Docker, so you can easily switch between the two depending on your needs. Being able to group multiple applications into the same pod is another neat facility, and Podman Desktop also integrates well with Quadlets and Kubernetes.
I run Podman Desktop on top of WSL2, which is another fine addition to my coding suite. That’s because I’ll eventually have to work with Linux at some point in my programming journey. While I have multiple virtual machines running Linux distros on my Proxmox server, WSL2 lets me tinker with any distribution within my Windows 11 dev environment.
I also rely on PowerShell modules
Package managers deserve a shout-out as well
I mostly use VS Code to create PowerShell scripts, though there are times when I need to access its shell via the Terminal app. By default, the PowerShell interface is very rudimentary – especially since I’ve outfitted the PowerShell instance on my main PC with some fun modules. I’ve also equipped the VM with Git Bash, as it will come in handy when I need to version control my coding projects.
Finally, I wanted to mention package managers. While they’re nowhere near as functional or laden with packages as their Linux counterparts, package managers have come a long way on Windows. I prefer Chocolatey since it has a vast app library, though WinGet integrates better with Windows apps. Scoop is also fairly useful if you want a separate installation directory for your packages, but it can take a while to get used to its quirks.
My dev environment has a long way to go
So far, I’ve added my favorite coding-oriented services to the VM, but I’ve got several other tools I plan to integrate into my coding workstation. I haven’t dabbled in Android app development yet, but I’m pretty sure I’ll end up installing Android Studio later down the line. Currently, my coding hub doesn’t include a graphics card. But if I ever venture into the AI scene, I’ll have to arm it with a dedicated GPU (alongside a self-hosted instance of Jupyter Notebook), as my Xeon v-cores will buckle under the weight of complex algorithms.
I’ve also heard good things about Laragon and I’ll probably check it out in the coming months. Given how optimized Rust is, I plan to install some tools and extensions solely for this highly efficient programming language.
Related
I use Terraform to automatically provision VMs on Proxmox – here’s how
While it may seem rather daunting, Terraform is an amazing automation tool for provisioning virtual machines on your home lab
Search
RECENT PRESS RELEASES
Judge denies state treasurer’s bid to keep former cannabis commission chair records impoun
SWI Editorial Staff2025-06-06T11:46:37-07:00June 6, 2025|
Cannabis CEO urges Texas gov to veto sweeping THC ban, push for regulations
SWI Editorial Staff2025-06-06T11:46:32-07:00June 6, 2025|
‘Trees Not Tesla’: Australian city’s protest ignites a war over environment- and Elon Musk
SWI Editorial Staff2025-06-06T11:46:17-07:00June 6, 2025|
Cathie Wood Buys 4.48 Million Shares Of Circle, Sell $39M Of Coinbase
SWI Editorial Staff2025-06-06T11:46:04-07:00June 6, 2025|
Cargill investing $90M in Colorado beef plant
SWI Editorial Staff2025-06-06T11:45:59-07:00June 6, 2025|
Cramer says Broadcom is a buy for new investors, Apple stock’s less ‘treacherous’
SWI Editorial Staff2025-06-06T11:45:55-07:00June 6, 2025|
Related Post
1