The one-command Windows dev environment that nobody built — until now.
Git • Node.js • Python • Bun • Claude Code • Codex CLI • WSL2
One command. All of them. On Windows.
You just got a new Windows laptop. You want to build something.
You Google "how to set up Node.js on Windows." Seven tabs open. Then Python. Then Git. Then you need a proper terminal. Then someone mentions WSL. Then you realize you need Bun for that new framework. Then Claude Code because everyone's using AI now. Then Codex CLI because why not both.
Four hours later, you're still installing things.
Every tool has its own installer. Its own docs. Its own "getting started" page. They all assume you already have the other ones. None of them talk to each other. And if you're a designer, a student, or someone who just wants to try building something — you're stuck before you even start.
"I spent this morning with my designer installing Homebrew — it just wasn't on her laptop. It's a nightmare."
— Claire Vo, host of How I AI, describing the developer setup experience for non-engineers
Watch the moment that started this project
podcast-clip.mp4
From the How I AI podcast featuring Vercel CEO Guillermo Rauch. Claire Vo describes exactly the problem: even experienced tech professionals struggle to get a basic development environment running. Guillermo's response? "It's nightmare fuel."
That's when we asked the question nobody had asked before.
After watching that interview, we went to Perplexity AI and asked:
"Has anyone ever created a shell script that gets a Windows laptop prepared for a development environment end-to-end — Python, Node, Bun, Claude Code, Codex CLI, and more — all installable through one command?"
Perplexity reviewed 15 sources and came back with this:
"You're bumping into the reality that lots of people have partial setup scripts, but almost nobody has a single polished one-command Windows-native dev machine bootstrapper that covers the entire stack end-to-end in a reusable way."
"What exists today: most ecosystems provide their own installer or tiny bootstrap script, but they're all siloed. Python tooling, Node managers, Bun, Claude Code, Codex — they all have their own. Everyone is publishing 'how to install on Windows' docs, but almost no one is publishing 'here's a cohesive script that installs everything, configures paths, terminals, WSL, and dotfiles — all in one shot.'"
So we built it.
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force; irm https://raw.githubusercontent.com/AojdevStudio/dev-bootstrap/main/bootstrap.ps1 | iexWhy the
Set-ExecutionPolicyprefix? On many managed, school, church, and enterprise Windows machines, the defaultRestrictedpolicy blocksiex. The-Scope Processbypass only applies to the current terminal session — it does not change system-wide policy.
curl -fsSL https://raw.githubusercontent.com/AojdevStudio/dev-bootstrap/main/macos/bootstrap.sh | bashmacOS extras included:
- lazygit (git TUI)
- yazi (terminal file manager) — installed via Homebrew per https://yazi-rs.github.io/docs/installation/#homebrew
One command. Paste it in your terminal. Walk away. Come back to a configured development machine.
| Tool | Version | Purpose | Source |
|---|---|---|---|
| Git | Latest | Version control | git-scm.com via winget |
| cURL | Latest | HTTP transfers | winget |
| GitHub CLI | Latest | gh — GitHub from the terminal |
cli.github.com via winget |
| Windows Terminal | Latest | Modern terminal with tabs, Unicode, GPU rendering | Microsoft.WindowsTerminal via winget |
| fnm | Latest | Node version manager | github.com/Schniz/fnm via winget |
| Node.js | LTS | JavaScript runtime | Installed via fnm |
| npm | Bundled | Package manager | Comes with Node.js |
| pnpm | Latest | Fast, disk-efficient package manager | Activated via Corepack (bundled with Node ≥16.10) |
| uv | Latest | Python toolchain | astral-sh.uv via winget |
| Python | 3.12 (pinned) | Python runtime | Installed via uv |
| Bun | Latest | Fast JS runtime | Oven-sh.Bun via winget |
| ripgrep | Latest | Fast grep replacement |
BurntSushi.ripgrep.MSVC via winget |
| fd | Latest | Fast find replacement |
sharkdp.fd via winget |
| bat | Latest | cat with syntax highlighting |
sharkdp.bat via winget |
| jq | Latest | JSON processor | jqlang.jq via winget |
| fzf | Latest | Command-line fuzzy finder | junegunn.fzf via winget |
| lazygit | Latest | TUI for git | JesseDuffield.lazygit via winget |
| yazi | Latest | TUI file manager | sxyazi.yazi via winget |
| PowerToys | Latest | Windows power-user utility bundle | Microsoft.PowerToys via winget |
| Claude Code | Latest | Anthropic AI CLI | Anthropic.ClaudeCode via winget (native binary, npm install is deprecated upstream) |
| Codex CLI | Latest | OpenAI code assistant | @openai/codex via npm |
| WSL2 | Latest | Linux on Windows | Microsoft (optional; installs Chromium inside WSL via apt) |
Every tool is installed from its official canonical source via winget or npm — avoiding
irm|iexpatterns that corporate proxies (Zscaler, etc.) often block. No third-party mirrors. No mystery binaries. All sources documented inline inbootstrap.ps1.
The installer runs through 7 phases, each building on the last:
| Phase | What Happens |
|---|---|
| 1. Preflight | Verifies winget is available. Auto-elevates to admin if WSL is needed. |
| 2. Base Tools | Installs Git and cURL via winget. |
| 3. Node.js | Installs fnm (Fast Node Manager), then Node LTS + npm. Adds fnm hook to your PowerShell profile. |
| 4. Python | Installs uv (Astral's Python toolchain), then Python 3.12 pinned. |
| 5. Bun | Installs the Bun JavaScript runtime. |
| 6. AI Tools | Installs Claude Code (Anthropic) and Codex CLI (OpenAI). |
| 7. WSL2 | (Optional) Installs Windows Subsystem for Linux v2 + Ubuntu. Runs wsl/setup.sh inside WSL for Claude Code + Linux essentials. |
- Idempotent — Run it twice, nothing breaks. Profile snippets use markers to avoid duplication.
- Auto-admin — If WSL needs admin rights, the script re-launches itself elevated. You don't have to remember "Run as Administrator."
- PATH-aware — Refreshes PATH from the Windows registry after each install so subsequent tools can find their dependencies.
- Fail-fast — Uses
Set-StrictMode -Version Latestand$ErrorActionPreference = "Stop". If something fails, you know immediately. - WSL-optional — Pass
-SkipWSLif you don't need Linux. Everything else still works.
- Windows 10/11 with winget installed (comes pre-installed on Windows 11)
- PowerShell 5.0+ (pre-installed on Windows 10/11)
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force; irm https://raw.githubusercontent.com/AojdevStudio/dev-bootstrap/main/bootstrap.ps1 | iexIf you want the installed fnm profile snippet to load automatically in every future PowerShell session (so claude, codex, npm, etc. stay on PATH after reboot), also run once:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSignedManaged machines: If you see "the setting is overridden by a policy defined at a more specific scope", your organization enforces a stricter policy via Group Policy. In that case, you'll need to invoke the
fnm env ... | Invoke-Expressionsnippet manually at the start of each shell session, or ask your admin to allowRemoteSignedfor your account.
pwsh -File ./bootstrap.ps1 -SkipWSLOpen a new PowerShell window (required for PATH changes to take effect), then verify:
node --version # Node.js
npm --version # npm
uv run python --version # Python 3.12 via uv-managed interpreter
bun --version # Bun
claude --version # Claude Code (authenticate: https://code.claude.com/docs/en/setup)
codex --version # Codex CLI (authenticate: https://developers.openai.com/codex/cli)Why
uv run pythoninstead ofpython? On Windows, the Microsoft Storepython.exealias inWindowsAppscan shadow your real interpreter.uv run pythonbypasses that alias entirely by asking uv to resolve its managed Python directly. If you need barepythonon your PATH permanently, runuv python update-shellafter installation.
This project started with a podcast clip.
Claire Vo was interviewing Vercel CEO Guillermo Rauch on the How I AI podcast. She paused mid-conversation to highlight something Guillermo had glossed over: the sheer difficulty of setting up a local development environment for non-engineers.
She described spending her morning helping her designer install Homebrew — a single tool, on a single laptop — and calling it a nightmare. Guillermo agreed: "It's nightmare fuel."
That moment made us ask: Why hasn't anyone solved this for Windows? Not partially. Not one tool at a time. The whole thing. One command.
We searched. We asked AI. We checked GitHub. The answer was consistent: partial solutions exist everywhere, but nobody had stitched them together into a single, cohesive, Windows-native experience.
So we did.
dev-bootstrap isn't a framework. It's not a platform. It's a single PowerShell script that does what should have existed years ago: gets you from a fresh Windows laptop to a fully configured development machine with one command.
Because everyone deserves to skip the nightmare and start building.
Is this safe to run?
Yes. Every tool is installed from its official source (Microsoft, Astral, Anthropic, OpenAI, etc.). No third-party mirrors. All source URLs are documented inline in bootstrap.ps1 — read it yourself before running.
What if I already have some of these tools?
The script handles this gracefully. winget skips already-installed packages. Profile snippets use markers to avoid duplication. Running it again won't break anything.
Do I need admin rights?
Only if you want WSL2. The script auto-detects and re-launches as admin if needed. Use -SkipWSL to avoid admin entirely.
Why fnm instead of nvm?
fnm is significantly faster than nvm-windows, has first-class PowerShell support, and is available via winget. It also supports automatic Node version switching via .node-version files.
Why uv instead of pyenv?
uv is Astral's next-generation Python toolchain. It manages Python installations, virtual environments, and packages — all in one tool. It's faster than pip and simpler than managing pyenv + pip + virtualenv separately.
Can I customize which tools get installed?
Not yet — the script installs the full stack. We're considering modular installation flags for a future version. For now, use -SkipWSL to skip the only optional component.
Contributions are welcome. Please read AGENTS.md for project conventions.
Key guidelines:
bootstrap.ps1is the only user-facing entrypoint- All install sources must be official and canonical
- Run
./scripts/check-structure.ps1before submitting changes - PowerShell: 2-space indent, PascalCase functions
- Bash:
set -euo pipefail,#!/usr/bin/env bash
MIT - Copyright 2026 AOJDevStudio
If this saved you from a setup nightmare, give it a star.
Because nobody should spend their morning installing Homebrew.

