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

[Bug]: herd isolate-node ignores --site and writes .nvmrc into the current folder

Open Beginner friendly
#1,774 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
76/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
php, shell
Domain
backend, cli

Research direction

Start with cli/app.php:1592 and cli/Valet/Site.php:1303-1306 to trace how --site selects the target path; compare with the unisolate-node handling at cli/app.php:1619. Also inspect bin/herd:148, where the shell hook checks for --site=. Done means isolation writes .nvmrc in the named site's folder, an unknown site returns an error, and the hook handles the documented argument order without changing the current folder's Node version.

Written by the indexing model from the issue text.

Description

macOS
Platform

macOS

Operating system version

macOS 27.0.1 (26A434)

System architecture

ARM64 (M1, M2, etc)

Herd Version

2.0.2 (Build: 71)

PHP Version

n/a (Node 26.12.0 through Herd's nvm; global PHP is 8.5.10)

Bug description

herd isolate-node 26 --site=example ignores --site. The docs show this form for sites whose name doesn't match their folder, but the .nvmrc lands in the current folder instead of the site's, overwriting any .nvmrc already there. It still says "The site is now using Node 26." and exits 0, even for a site that doesn't exist.

herd unisolate-node --site=example does look in the site's folder, so it says it worked and leaves the stray .nvmrc behind.

Because nvm and Herd's shell hook pick up .nvmrc from parent folders, running it from ~/Herd would switch Node for every site below it without its own .nvmrc (I saw the hook switch after a cd into a subfolder). From the hook's code it would also nvm install a missing version; I didn't test that.

Expected: the .nvmrc goes into the site's folder, and an unknown site name gives an error.

Cause (herd.phar 2.0.2): isolate-node always passes getcwd() to Site::isolateNode() (cli/app.php:1592), which uses that path whenever it's set (cli/Valet/Site.php:1303-1305), so the site lookup at :1306 never runs. unisolate-node passes no path (app.php:1619), so it finds the site.

Possible fix: pass null instead of getcwd() when --site is set (app.php:1592, and :1580 for the form without a version).

Also: bin/herd:148 only checks $2 for --site=, so with the docs' argument order (and for --help) it runs nvm use in the current folder as well.

Thanks for the quick fixes on #1770 and #1771.

Steps to reproduce
  1. Herd 2.0.2 with any installed Node version (26 here) and a linked or parked site example that has no .nvmrc.
  2. From a folder that isn't a site: mkdir ~/herd-test && cd ~/herd-test, then herd isolate-node 26 --site=example.
  3. ls -A ~/herd-test ~/Herd/example: the .nvmrc is in ~/herd-test, not in the site's folder, and herd isolated-node doesn't list the site.
  4. herd unisolate-node --site=example: it says it worked, but ~/herd-test/.nvmrc is still there.
  5. Clean up with rm ~/herd-test/.nvmrc.
Relevant log output
# Paths changed for privacy. For the linked-site part I ran herd.phar against a copy of my Herd config, so my real setup stayed untouched.
# Same behaviour with a stock .zshrc (only Herd's own lines) and with no shell config at all.

$ cd ~/herd-test
$ herd isolate-node --site=example 26
The site is now using Node 26.
$ ls -A ~/herd-test
.nvmrc
$ cat ~/herd-test/.nvmrc
26
$ ls -A ~/Herd/example
$ herd isolated-node
+------+--------------+
| Path | Node Version |
+------+--------------+
$ herd unisolate-node --site=example
The site is now using the default Node version.
$ ls -A ~/herd-test
.nvmrc

# The docs' argument order, with a site name that doesn't exist:
$ cd ~/herd-test2
$ herd isolate-node 26 --site=nosuchsite
The site is now using Node 26.
Found '~/herd-test2/.nvmrc' with version <26>
Now using node v26.12.0 (npm v11.20.0)
$ echo $?
0
Dominant language
No language data
Stars
124
Forks
1
PR merge metrics
No merged PRs in 30d

Getting set up

This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.

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 beyondcode/herd-community

All issues in beyondcode/herd-community

Similar issues

More Backend & API Design issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.