MeshWorld India LogoMeshWorld.
WSL2WindowsLinuxDeveloper ToolsHow-ToTerminalUbuntu7 min read

How to Set Up WSL2 for Windows Developers

Vishnu
By Vishnu
How to Set Up WSL2 for Windows Developers
TL;DR
  • Install with one command: wsl --install in PowerShell as Administrator — Ubuntu is set up automatically
  • Store projects inside WSL2 (~/projects/), not on /mnt/c/ — filesystem I/O is 5–10x faster
  • VS Code’s WSL extension (code .) runs extensions inside Linux while keeping the UI on Windows
  • Use Docker Desktop for Windows with the WSL2 backend — containers run natively without a separate VM
  • Limit memory usage in ~/.wslconfig if the Vmmem process is consuming too much RAM

Prerequisites

  • Windows 10 version 2004 (Build 19041) or later, or Windows 11
  • Administrator access to run PowerShell commands
  • Virtualization enabled in BIOS (most modern machines have this on by default)

WSL2 (Windows Subsystem for Linux 2) is a full Linux kernel running inside Windows. Not a VM you manage separately. Not a compatibility layer. An actual Linux environment where you can run apt, bash, Docker, Node, Python, git — exactly like on a Linux server.

If you’re a developer on Windows and you’re not using WSL2, you’re working harder than you need to.

Install WSL2

Open PowerShell as Administrator:

powershell
wsl --install

That’s it. By default it installs Ubuntu. Restart your machine when prompted.

First launch: Open “Ubuntu” from the Start menu. It’ll ask you to create a username and password. Use something simple — you’ll type this password often for sudo.

Verify:

bash
wsl --version
# WSL version: 2.x.x

Install a specific distro

powershell
# List available distros
wsl --list --online

# Install a specific one
wsl --install -d Ubuntu-24.04
wsl --install -d Debian
wsl --install -d kali-linux

# Set default distro
wsl --set-default Ubuntu-24.04

Essential setup after install

bash
# Update packages
sudo apt update && sudo apt upgrade -y

# Install common tools
sudo apt install -y curl wget git build-essential unzip

# Install zsh (optional but nice)
sudo apt install -y zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Install Node.js (via nvm)

Warning

Don’t install Node.js via apt — the version in Ubuntu’s default repos is outdated (often 2–3 major versions behind). Use nvm or a NodeSource PPA instead to get a current LTS release.

Don’t install Node via apt — the version is old. Use nvm:

bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc

nvm install 20
nvm use 20
node -v     # v20.x.x

Install Python (via pyenv or uv)

bash
# uv (fast, modern Python package manager)
curl -LsSf https://astral.sh/uv/install.sh | sh
uv python install 3.12
uv python list

# Or install Python directly
sudo apt install -y python3 python3-pip python3-venv

Install Docker in WSL2

The best approach is Docker Desktop for Windows with WSL2 backend — it integrates automatically. Download from docker.com.

Or install Docker Engine directly in WSL2:

bash
# Install Docker Engine
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

# Test
docker run hello-world

The scenario: You’re trying to run a project that uses Linux-only scripts, make, and Docker. On native Windows everything breaks. You spend an hour fighting path issues. With WSL2 you clone the repo, run make dev, and it just works — because WSL2 behaves like the Linux server the project was built for.

Access Windows files from WSL2

Your Windows drives are mounted at /mnt/:

bash
ls /mnt/c/Users/YourName/Desktop
cd /mnt/c/Users/YourName/Projects
Pro Tip

Keep all project files inside the WSL2 filesystem (~/projects/), not under /mnt/c/. File I/O across the WSL2/Windows boundary is 5–10x slower — this single change makes the biggest difference to day-to-day performance.

For best performance, keep your project files inside WSL2 (at ~/projects/), not on the Windows filesystem. Cross-filesystem access is slow.

Access WSL2 files from Windows

In File Explorer, type \\wsl$ in the address bar. You’ll see your distros. Bookmark \\wsl$\Ubuntu\home\yourname.

Or open the current WSL directory in Explorer:

bash
explorer.exe .

Use VS Code with WSL2

Install the WSL extension in VS Code. Then from inside WSL2:

bash
code .

VS Code opens with the WSL2 backend — all extensions run inside Linux, the UI runs on Windows. It feels native. Terminal in VS Code is a WSL2 terminal.

Configure WSL2 memory and CPU

By default WSL2 uses up to 50% of RAM and all CPU cores. To limit it:

Create C:\Users\YourName\.wslconfig:

ini
[wsl2]
memory=8GB
processors=4
swap=2GB

Restart WSL2 after changing:

powershell
wsl --shutdown

Useful commands

powershell
# In PowerShell / CMD
wsl                     # open default distro
wsl --list --verbose    # list distros with status
wsl --shutdown          # stop all running distros
wsl --terminate Ubuntu  # stop a specific distro
wsl --export Ubuntu ubuntu-backup.tar    # backup
wsl --import Ubuntu C:\WSL\Ubuntu ubuntu-backup.tar  # restore
wsl --update            # update WSL kernel
bash
# In WSL2
explorer.exe .          # open current dir in Windows Explorer
notepad.exe file.txt    # open a file in Windows Notepad
code .                  # open VS Code
clip.exe < file.txt     # copy file contents to Windows clipboard

Performance tips

  • Store projects in WSL2 filesystem (~/projects/), not /mnt/c/. I/O performance is 5-10x faster.
  • Use Windows Terminal — much better than the default WSL2 window. Install from the Microsoft Store.
  • Give WSL2 more RAM if you’re running Docker containers — the default 50% is often not enough for dev workloads.
  • Pin Windows Terminal to taskbar and set WSL2 as the default profile.

Fix common issues

“Error: 0x8007019e” on install: Enable Windows Subsystem for Linux in Windows Features (search “Turn Windows features on or off”).

Slow filesystem on /mnt/c: This is expected. Move your project files to ~/ inside WSL2.

WSL2 uses too much RAM: Set the memory limit in .wslconfig as shown above. The Vmmem process is the WSL2 VM.

Can’t connect to localhost from Windows: WSL2 has its own IP. From Windows, use localhost — WSL2 automatically forwards ports. If that fails, find the WSL2 IP with hostname -I inside WSL2 and use that.


Summary

  • WSL2 installs with one command (wsl --install) and gives you a full Ubuntu environment on Windows
  • Store your projects inside WSL2 (~/projects/) not on the Windows filesystem — I/O is 5-10x faster
  • VS Code’s WSL extension (code .) runs extensions inside Linux while keeping the UI on Windows
  • Configure memory and CPU limits in ~/.wslconfig to prevent WSL2 from consuming all your RAM
  • Use Windows Terminal from the Microsoft Store as your daily driver — it’s significantly better than the default WSL2 window

Frequently Asked Questions

Do I need WSL2 if I already use Git Bash or Cygwin?

WSL2 is categorically different. Git Bash and Cygwin translate Linux commands to Windows system calls — many things break or behave differently. WSL2 runs an actual Linux kernel. Docker, make, shell scripts, and most dev tools work exactly as they do on Linux servers.

Can I run GUI applications in WSL2?

Yes, since Windows 11. WSLg (built into WSL2 on Windows 11) supports running Linux GUI apps natively — they appear as regular Windows windows. On Windows 10, GUI support is limited to the terminal.

Is WSL2 suitable for production-like Docker workloads?

Yes. Docker Desktop for Windows uses WSL2 as its backend. Containers run inside the WSL2 VM, which means Linux containers work natively without the overhead of a separate VM. It’s the best Docker experience available on Windows.


Share_This Twitter / X
Vishnu
Written By

Vishnu

Founder & Principal Architect at MeshWorld. Senior engineer and instructor specializing in AI agent systems, scalable web architecture, and modern development workflows.

Enjoyed this article?

Support MeshWorld and help us create more technical content