Releases: AojdevStudio/dev-bootstrap
v1.4.0 — pnpm + Windows Terminal + CLI utilities
Broadened the Windows bootstrap to cover common daily-driver tools. Ten new packages across three categories.
Added
Package managers
- pnpm activated via Corepack (bundled with Node ≥16.10). No global npm install — Corepack manages pnpm as a shim that tracks each project's
packageManagerfield inpackage.json, avoiding cross-project version drift. Falls back tonpm install -g pnpmif Corepack is unavailable.
Terminal + base tools
- Windows Terminal (
Microsoft.WindowsTerminal) in the Base tools section. Default on Windows 11; useful for Windows 10 users still onconhost.exe.
CLI utilities (new section)
| Tool | Winget ID | Purpose |
|---|---|---|
| ripgrep | BurntSushi.ripgrep.MSVC |
fast grep replacement (also used internally by Claude Code) |
| fd | sharkdp.fd |
fast find replacement |
| bat | sharkdp.bat |
cat with syntax highlighting |
| jq | jqlang.jq |
JSON processor |
| fzf | junegunn.fzf |
command-line fuzzy finder |
| lazygit | JesseDuffield.lazygit |
TUI for git (matches macOS bootstrap) |
| yazi | sxyazi.yazi |
TUI file manager (matches macOS bootstrap) |
| PowerToys | Microsoft.PowerToys |
Windows power-user utility bundle |
Notes
- First-time runs on a clean machine now take noticeably longer because of the additional installs. Re-runs remain idempotent —
WinGetInstallshort-circuits when each package is already present, so re-running costs nothing. - PowerToys is a large install (~200MB) that ships several Windows-wide utilities. If you don't want it, comment out the corresponding
WinGetInstall "Microsoft.PowerToys"line in your local copy ofbootstrap.ps1before running.
Upgrade
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force; irm https://raw.githubusercontent.com/AojdevStudio/dev-bootstrap/main/bootstrap.ps1 | iexThen verify:
pnpm --version
rg --version
lazygit --version
wt.exe --version # Windows TerminalFull Changelog: v1.3.0...v1.4.0
v1.3.0 — GitHub CLI + fully idempotent re-runs
Re-running the installer should do nothing when everything's already in place. This release tightens every step so that's true, and adds the GitHub CLI that a dev environment was missing.
Added
- GitHub CLI (
gh) installed via winget (GitHub.cli) in the Base tools section. Rungh auth loginafter install to sign in.
Fixed — idempotent re-runs
Previous runs printed noise like Installing Node v24.15.0 immediately followed by warning: Version already installed. Every step now short-circuits when the work is already done:
fnm install --lts— skipped whenfnm listreports any installed Node.uv python install 3.12— skipped whenuv python find 3.12already resolves.npm install -g @openai/codex— skipped whennpm ls -g @openai/codexshows it's already installed.
Migration cleanup
If you ran v1.1.x or earlier, Claude Code was installed via npm. After upgrading to v1.2.0, you may have ended up with both the npm and winget versions of claude on PATH. The Claude Code section now detects and uninstalls the npm version silently before the native winget binary is installed, so there's only one claude executable.
You can verify after re-running:
Get-Command claude -AllUpgrade
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force; irm https://raw.githubusercontent.com/AojdevStudio/dev-bootstrap/main/bootstrap.ps1 | iexFull Changelog: v1.2.0...v1.3.0
v1.2.0 — Claude Code via native winget binary
Install-method upgrade: Claude Code now installs as a native binary via WinGet, replacing the deprecated npm install path. This eliminates an entire class of fnm/npm PATH fragility bugs that drove the v1.1.0–v1.1.2 patch releases and aligns with Anthropic's upstream recommendation.
Changed
- Claude Code:
winget install Anthropic.ClaudeCode(was:npm install -g @anthropic-ai/claude-code). Anthropic's setup docs now mark npm installation as deprecated. WinGet is chosen over theirm https://claude.ai/install.ps1 | iexnative installer because it preserves the proxy-compatibility contract of commitd24ad9b— Zscaler and similar proxies block piped remote execution. - README + SECURITY.md install-source tables updated to match.
Why it matters
The previous npm install path required fnm to be correctly activated in the same session, npm to be on PATH, npm's global prefix to be on PATH after install, and the fnm multishell junction to survive every intervening winget/RefreshPath call. Each of those was its own fragility source. The native binary has none of those dependencies.
Manual update
The irm | iex native installer auto-updates Claude Code in the background. The winget install does not. Run this periodically to stay current:
winget upgrade Anthropic.ClaudeCodeUsers who prefer auto-updates and are not behind a proxy that blocks iex can install manually via irm https://claude.ai/install.ps1 | iex instead.
Codex CLI
OpenAI does not publish a winget package for Codex CLI. Codex CLI still installs via npm install -g @openai/codex, with the fnm re-activation guard and explicit \$LASTEXITCODE check from v1.1.1 preserved.
Upgrade
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force; irm https://raw.githubusercontent.com/AojdevStudio/dev-bootstrap/main/bootstrap.ps1 | iexIf you already have Claude Code installed via npm, you'll briefly have both versions. Remove the npm one when ready:
npm uninstall -g @anthropic-ai/claude-codeFull Changelog: v1.1.2...v1.2.0
v1.1.2 — WSL iex invocation + reboot detection fixes
Patch release addressing two WSL-path bugs surfaced during live Windows 11 testing of v1.1.1.
Fixed
-
WSL
irm | iexinvocation crash.$repoRoot = Split-Path -Parent $PSCommandPaththrewCannot bind argument to parameter 'Path' because it is an empty stringwhen the installer was piped throughirm | iex—$PSCommandPathis empty in that case because there is no script file on disk. Thewsl/setup.shsecond-phase invocation now guards on$PSCommandPathbeing populated and pointing at a real file. When invoked viairm | iex, the script prints clone-and-run instructions for finishing WSL-side setup manually. -
Broader reboot-required detection.
wsl --installon a fresh Windows 11 machine emitsChanges will not be effective until the system is rebooted.— past-tense phrasing that the v1.1.1 regex did not catch. The regex is now broadened to match any ofreboot,restart, orwill not be effective until, which a clean (no-reboot-required)wsl --installnever emits.
Upgrade
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force; irm https://raw.githubusercontent.com/AojdevStudio/dev-bootstrap/main/bootstrap.ps1 | iexFull Changelog: v1.1.1...v1.1.2
v1.1.1 — Windows fnm + npm install fixes
Patch release hardening the Windows installer based on a real-world test that surfaced two bugs in v1.1.0.
Fixed
-
fnm use --ltsremoved. Several recent fnm builds from winget reject this flag form witherror: unexpected argument '--lts' found. Because PowerShell does not halt on a native command's non-zero exit code under$ErrorActionPreference = "Stop", the script silently continued past the error.fnm install --ltsalready activates the version in the current shell's multishell junction, so the follow-up call was both redundant and broken. -
Silent
npm install -gfailures now fail loudly. On a fresh install,npm install -g @anthropic-ai/claude-codeproduced no visible output andNeed claudelater threw a confusingMissing command: claudeerror. The Claude Code and Codex sections now:- Re-activate fnm (
fnm env --use-on-cd --shell powershell | iex) immediately before eachnpm install -gcall, so the multishell junction is guaranteed to be on PATH even after earlier winget calls. - Check
\$LASTEXITCODEafter the npm install and throw a clear error when it's non-zero, so silent failures surface immediately instead of cascading to a misleading "Missing command" message one section later.
- Re-activate fnm (
Upgrade
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force; irm https://raw.githubusercontent.com/AojdevStudio/dev-bootstrap/main/bootstrap.ps1 | iexFull Changelog: v1.1.0...v1.1.1
v1.1.0 — macOS bootstrap + Windows reliability fixes
Highlights
This release adds first-class macOS support and hardens the Windows installer against real-world friction on managed, school, and enterprise machines.
Added
- macOS bootstrap (
macos/bootstrap.sh) — Homebrew-driven install of the full toolchain - macOS extras:
lazygitandyazi - WSL now installs
chromium-browservia apt for Playwright / headless workflows - ChatGPT custom-instructions builder prompt (
prompts/) SECURITY.mdpolicy
Fixed (Windows bootstrap.ps1)
- PATH now merges session + registry scopes instead of overwriting — fnm's in-session Node dir survives later
RefreshPathcalls - winget idempotency — require both exit code AND package-id match (winget can exit 0 with "No installed package found" on some versions)
- Profile snippet upgrades in place on re-runs instead of stacking
- fnm is invoked with
--shell powershell, eager-activates the default Node, and resolves the concrete LTS version (avoids the fragilelts-latestalias — see Schniz/fnm#1203) - Python — uv's managed Python dir is prepended to PATH so the Microsoft Store
python.exealias inWindowsAppsstops shadowing the real interpreter - WSL — detects "reboot required" from
wsl --installand bails out cleanly with next-step guidance
Changed
- Windows install one-liner now prefixes
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force;so it works on managed machines where the defaultRestrictedpolicy blocksiex - README documents the
uv run pythonpattern and why it's needed on Windows - Replaced
irm | iexinstallers with winget/npm to bypass corporate proxies (e.g., Zscaler) - Corrected GitHub org URLs throughout README (
Jarvis-AojDevStuio→AojdevStudio)
Install
Windows (PowerShell):
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force; irm https://raw.githubusercontent.com/AojdevStudio/dev-bootstrap/main/bootstrap.ps1 | iexmacOS (Terminal):
curl -fsSL https://raw.githubusercontent.com/AojdevStudio/dev-bootstrap/main/macos/bootstrap.sh | bashFull changelog: v1.0.0...v1.1.0
v1.0.0 - Initial Stable Release
dev-bootstrap v1.0.0
Initial stable release of dev-bootstrap -- a Windows developer environment bootstrap tool that automates installation and configuration of essential development tools.
Highlights
- Automated PowerShell bootstrap script (
bootstrap.ps1) -- one-command setup for a complete Windows dev environment - WSL setup script (
wsl/setup.sh) -- Linux environment configuration for WSL users - Tool chain -- Git, Node.js (via fnm), Python, VS Code, Docker Desktop, and Windows Terminal
- Comprehensive documentation -- architecture diagram, 7-phase walkthrough, FAQ, and contributing guide
- AI agent configuration -- AGENTS.md and skills for Claude Code, Codex CLI assisted development
Full Changelog
See CHANGELOG.md for details.