Windows 2026

Full-Stack Dev Setup on Windows - From Scratch

Everything I install on a fresh Windows machine to get to productive, fast. No OneDrive. No bloat. Just the tools that actually matter.

By Dhirender Choudhary June 6, 2026 8 min read

Before installing a single dev tool, rip out the factory bloat. A fresh Windows install comes with a lot of junk that eats RAM, runs background services, and constantly pops up notifications.

Step 0 - debloat before anything else

Do this first. OneDrive especially will fight you - it hooks into Explorer, auto-starts, and syncs your Desktop without asking. Kill it before you settle in.

powershell
# OPTION 1: Manual Debloat (if you prefer granular control)
# Uninstall OneDrive completely
taskkill /f /im OneDrive.exe
%SystemRoot%\SysWOW64\OneDriveSetup.exe /uninstall
# Remove common bloatware
Get-AppxPackage *xbox* | Remove-AppxPackage
Get-AppxPackage *clipchamp* | Remove-AppxPackage
Get-AppxPackage *bingnews* | Remove-AppxPackage
Get-AppxPackage *bingweather* | Remove-AppxPackage
Get-AppxPackage *solitaire* | Remove-AppxPackage
Get-AppxPackage *zune* | Remove-AppxPackage
# Disable Copilot (optional)
reg add HKCU\Software\Policies\Microsoft\Windows\WindowsCopilot /v TurnOffWindowsCopilot /t REG_DWORD /d 1 /f
# --------------------------------------------------------
# OPTION 2: Automated Debloat Utilities (Faster)
# The Win11Debloat utility handles OneDrive, telemetry, and all bloatware at once
& ([scriptblock]::Create((irm "https://debloat.raphi.re/")))
# Alternatively, the Chris Titus Windows Utility (if you prefer a GUI):
irm christitus.com/win | iex

Also go to Settings → Apps → Startup and disable everything you don't recognize. Then Settings → Privacy & Security → Diagnostics - turn off all telemetry.

Step 1 - WSL2 + Ubuntu (your real terminal)

WSL2 is non-negotiable. It gives you a full Linux kernel running natively - no VM overhead. Everything from here runs inside WSL unless stated otherwise.

powershell
wsl --install
# Restart, then open Ubuntu from Start
# Set your username + password when prompted

This installs Ubuntu by default. After restart, run wsl --update to make sure you're on the latest kernel. All terminal work from here lives in WSL.

Step 2 - terminal & shell

The Windows Terminal is the host. Inside it, you run your WSL Ubuntu shell. Stack it with Starship and the right plugins and it's indistinguishable from a Mac terminal.

Windows Terminal MUST-HAVE

The only terminal app worth using on Windows. Tabs, panes, GPU rendering, and first-class WSL integration. Install from the Microsoft Store.

Starship

Same cross-shell prompt as Mac. Install inside WSL - full Git context, instant, zero config needed out of the box.

zoxide (z)

Smarter cd that remembers your most-used dirs. z proj instead of the full path.

eza & bat

Modern ls and cat replacements with icons and syntax highlighting. Install via apt or cargo inside WSL.

zsh-autosuggestions

History-based command suggestions as you type. Pair with zsh-syntax-highlighting to catch typos before they run.

JetBrains Mono Nerd Font

Install on Windows (not WSL) - set it as the font in Windows Terminal settings so Starship icons render correctly.

bash
# zsh + oh-my-zsh
sudo apt update && sudo apt install -y zsh git curl
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# Starship prompt
curl -sS https://starship.rs/install.sh | sh
# zoxide
curl -sS https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | bash
# eza + bat
sudo apt install -y eza bat
ln -s /usr/bin/batcat ~/.local/bin/bat

Step 3 - AI developer stack

Same tools as Mac. All of these have native Windows installers - no compatibility issues.

Cursor PRIMARY EDITOR

Native Windows app. Full WSL integration - open any WSL folder directly. Composer for multi-file AI edits.

Claude (Desktop)

Always open on my second monitor. Architecture, debugging, and reasoning through hard decisions. Native Windows app.

Zed FAST EDITOR

Now has a Windows build. Instant open, zero Electron overhead, built-in AI. Use when Cursor feels heavy.

Antigravity

Local agentic assistant. Check for a Windows build - otherwise run it inside WSL via the CLI.

WSL + Cursor tip: In Cursor, open the command palette and run "Connect to WSL". Your editor then runs natively inside Linux - no path translation, no permission issues, same as on a Mac.

Step 4 - core dev tools

Install everything inside WSL. This is your Linux environment - treat Windows as the display layer only.

Docker Desktop (WSL backend) MUST-USE

On Windows, Docker Desktop with WSL2 backend is actually good - no VM, no OrbStack needed. Enable WSL integration in settings.

Node via nvm

Install nvm inside WSL, then Node through it. Never install Node directly on Windows - it causes PATH hell with WSL.

pnpm

Same as Mac. Install inside WSL via npm i -g pnpm after setting up Node.

ripgrep + fzf

Install inside WSL via apt. Works identically to Mac - fast codebase search that grep can't match.

Neovim + lazygit

Install inside WSL. For quick terminal edits and a sane Git browser - same workflow as Mac.

gh CLI

GitHub from the terminal. Install inside WSL - sudo apt install gh or via their apt repo for the latest version.

bash
# nvm + Node LTS
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
nvm install --lts
# pnpm
npm i -g pnpm
# Core tools
sudo apt install -y ripgrep fzf neovim gh tmux jq
# lazygit
LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep -Po '"tag_name": "v\K[^"]*')
curl -Lo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz"
tar xf lazygit.tar.gz lazygit
sudo install lazygit /usr/local/bin

Step 5 - Windows-side utilities

These run on Windows proper - not WSL. They handle the OS-level ergonomics that make daily use bearable.

PowerToys MUST-HAVE

Microsoft's own power-user toolkit. FancyZones (window snapping), PowerRename, Run (Spotlight-like launcher), Color Picker, and more. Free.

Raycast MUST-HAVE

Now natively available on Windows! The ultimate app launcher, clipboard manager, and workflow automation tool. Replaces Flow Launcher entirely.

Ditto (Clipboard Manager) REPLACES FLYCUT

Full clipboard history with search. Lightweight, open-source. Essential for any developer workflow.

Tailscale

Private mesh between all your machines. Same as Mac - SSH into anything, anywhere, zero config.

Zen Browser

Has a Windows build. For focused, distraction-free sessions. Chrome remains the daily driver for DevTools work.

ShareX REPLACES CLEANSHOT

Free, open-source screenshot and screen recording. Replaces Cleanshot on Mac. Annotate, GIF, upload - all in one.

Step 6 - winget bulk install

winget is Windows' package manager - like brew, but for Windows-side apps. Run this in an elevated PowerShell to install everything at once.

powershell
winget install -e --id Microsoft.WindowsTerminal
winget install -e --id Microsoft.PowerToys
winget install -e --id Anysphere.Cursor
winget install -e --id Anthropic.Claude
winget install -e --id Zed.Zed
winget install -e --id Docker.DockerDesktop
winget install -e --id Tailscale.Tailscale
winget install -e --id Google.Chrome
winget install -e --id zen-browser.zen
winget install -e --id ShareX.ShareX
winget install -e --id Raycast.Raycast
winget install -e --id Ditto.Ditto
winget install -e --id Figma.Figma
winget install -e --id Spotify.Spotify
winget install -e --id Discord.Discord
winget install -e --id SlackTechnologies.Slack

Shell ergonomics - .zshrc aliases

Same aliases as Mac - they all live inside WSL so they work identically.

Git Shortcuts

zsh
alias ga="git add"
alias gal="git add ."
alias gc="git commit"
alias gs="git status"
alias lm="git switch main && git pull"
alias gp="git pull && git push"

NPM & Navigation

zsh
alias pj="cd ~/projects"
alias nd="npm run dev"
alias nb="npm run build"
alias ni="npm install"
alias ls="eza --icons"
alias cat="bat"

The wt() worktree helper

zsh
wt() {
local branch="$1"
local dir="../$(basename "$PWD")__\${branch//\//-}"
git worktree add -b "$branch" "$dir" && cd "$dir"
}

Git identity + SSH key - first-boot checklist

  1. Set Git identity inside WSL

git config --global user.name "Dhirender Choudhary" and git config --global user.email "you@example.com"

  1. Generate SSH key

ssh-keygen -t ed25519 -C "you@example.com" - then cat ~/.ssh/id_ed25519.pub and paste into GitHub.

  1. Create projects folder

mkdir ~/projects inside WSL. Keep all code here - never in /mnt/c/, performance is terrible on the Windows filesystem.

  1. Wire up Claude Code MCP servers

After npm i -g @anthropic-ai/claude-code, connect Linear, GitHub, and Playwright MCPs from the Claude Code config.

  1. Set JetBrains Mono Nerd Font in Windows Terminal

Settings → Profiles → Ubuntu → Appearance → Font face → JetBrainsMono NFM. Required for Starship icons to render.

What to skip / what's different from Mac

Not everything maps 1:1 from Mac. Some tools don't exist, some have better Windows-native replacements.

  • OrbStack: Skip. Docker Desktop with WSL2 backend is fast natively.
  • Raycast: Use it! It finally has a native Windows build.
  • Rectangle: Skip. Use FancyZones in PowerToys.
  • Flycut / Maccy: Skip. Use Ditto.
  • Pearcleaner: Skip. Use Revo Uninstaller or Bulk Crap Uninstaller.
  • Homebrew: Skip. Use winget for Windows apps, and apt inside WSL for dev tools.

Ship fast, stay sharp.

dhirenderchoudhary.com ↗