Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

cli: upgrade cannot detect npm installs on Windows (spawns .cmd shims without a shell)

Open Beginner friendly
#57,579 1 comment 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
74/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
node.js, typescript
Domain
cli

Research direction

Start by reading the install-method detection code that spawns npm, pnpm, bun, yarn, and vp, then compare it with postinstall.mjs, which the issue says already handles Windows npm shims. Check whether the install path has the same spawn behavior. Done means a global npm install is detected and upgrades on Windows without --method; verify with the issue’s reproduction steps.

Written by the indexing model from the issue text.

Description

Summary

opencode upgrade / update on Windows always fails with "Could not detect the installation method" for npm-based installs, because install-method detection spawns npm/pnpm/yarn without a shell, and Windows cannot launch .cmd shims that way. --method npm bypasses detection, but the detection bug remains.

Environment

  • opencode version: 2.1.1 (also reproduced on 2.0.32 and 2.1.0)
  • OS: Microsoft Windows [Version 10.0.26200.9457] (Windows 11 25H2, x64)
  • Terminal: xterm-256color via agent harness; also fails headless (opencode update --print-logs)
  • Shell: C:\WINDOWS\system32\cmd.exe
  • Install/channel: release, npm install -g @opencode/cli (global prefix under the user profile)
  • Active plugins: none found in config

Reproduction

  1. On Windows, npm install -g @opencode/cli.
  2. Run opencode update (or opencode upgrade).
  3. Detection tries npm/pnpm/bun/yarn/vp and reports "Could not detect the installation method."

Minimal proof the spawn mode is the cause (healthy minimal PATH where where npm succeeds):

  • subprocess.run(['npm','--version'], shell=False) -> FileNotFoundError / WinError 2.
  • subprocess.run('npm --version', shell=True) -> 11.12.1.

(bun, a real .exe, spawns fine but correctly reports "not installed via bun".)

Expected Behavior

Detection recognizes the global npm install and upgrades it without requiring --method.

Actual Behavior

Could not detect the installation method. Pass --method to choose how to upgrade OpenCode.

The debug log shows spawning process command=npm args=["list","-g","--depth=0","@opencode/cli"] failing, because npm resolves to npm.cmd, which CreateProcess cannot launch directly (it only resolves .exe).

Additional Context

  • Consistently reproducible (2.0.32, 2.1.0, 2.1.1).
  • The project's own postinstall.mjs already documents this: "Windows cannot spawn npm's .cmd shim directly, so reuse the npm CLI that runs this script" via [process.execPath, process.env.npm_execpath]. Detection needs the same treatment (shell on win32, or resolve npm.cmd through ComSpec).
  • Workaround: opencode upgrade --method npm bypasses detection. Note the install step DOES use a shell (its failures surface cmd.exe's "not recognized" error), so --method works as long as the user's PATH is healthy; it fails only when PATH itself is broken (separate local issue on my machine: an over-long PATH).
  • Suggested fix: spawn package managers with a shell on Windows in both the detection and install paths, or invoke <mgr>.cmd via ComSpec.
Dominant language
TypeScript
Stars
215k
Forks
28.9k
Avg merge
8h 11m
Merged PRs (30d)
365

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from anomalyco/opencode

All issues in anomalyco/opencode

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.