* feat(node): add support for package.json5
- introduce findPackageManifest to prioritize package.json over package.json5
- update dependency detection and installation logic to include package.json5
- ensure local file detection and workspace parsing support the new manifest format
Generated-by: aiautocommit
* feat(example): add node-pnpm-json5 project
* Add a new example project to demonstrate native pnpm support for package.json5 manifests.
* Include a test configuration to verify environment detection and CLI version reporting.
Generated-by: aiautocommit
* chore: bump node and pnpm versions in json5 example
Generated-by: aiautocommit
* test: add build plan snapshot for pnpm-json5 project
Generated-by: aiautocommit
* test: update snapshots
* chore(examples): update engine versions and test expectations
Generated-by: aiautocommit
* chore(deps): update pnpm-lock.yaml
Generated-by: aiautocommit
* docs: update mise configuration documentation and add package resolution notes
* Update the `install_before` setting name to `minimum_release_age` to match current configuration.
* Add clarification on how Railpack handles semver constraints from manifest files by simplifying ranges to major versions.
Generated-by: aiautocommit
* feat(example): log pnpm version in pnpm workspaces example
- Add checks for pnpm version via npm_config_user_agent and the pnpm CLI.
- Update test expectations to verify pnpm version reporting.
Generated-by: aiautocommit
* feat(node): support more pnpm lockfile version mapping
- Add support for pnpm lockfile versions 6.1 and 9.0 to ensure correct tool version detection.
- Refactor the lockfile version check into a switch statement to improve readability and maintainability.
- Add logging for cases where the pnpm lockfile version cannot be identified.
Generated-by: aiautocommit
* test(node): add tests for pnpm version resolution logic
- Verify that pnpm versions are correctly derived from pnpm-lock.yaml versioning.
- Ensure proper precedence hierarchy between lockfile, engines, and packageManager fields.
Generated-by: aiautocommit
* docs: move mise installation instruction to workflow section
Generated-by: aiautocommit
* fix(node): ensure engines.pnpm overrides lockfile version inference
- Reprioritize pnpm version resolution to prefer `engines` over lockfile-based inference.
- Lockfile version parsing can be ambiguous across major versions, whereas `engines` provides an explicit developer intent.
Generated-by: aiautocommit
* docs: add monorepo support section to Node.js documentation
Addresses user questions about monorepo support by documenting that
Railpack automatically handles npm/pnpm/yarn workspaces and Turborepo
configurations with links to example projects.
* test: improve monorepo example tests to verify workspace functionality
Enhanced integration tests for monorepo examples to properly test that
workspace package linking and dependencies work correctly:
**node-npm-workspaces:**
- Root now imports and uses functions from pkg-a and pkg-b workspace packages
- pkg-a uses its dependency (abbrev) to demonstrate transitive deps work
- pkg-b exports a simple function
- Updated to ES modules for consistency
- Test now verifies all workspace packages load and execute correctly
**node-pnpm-workspaces:**
- Root now imports and uses functions from pkg-a and pkg-b workspace packages
- pkg-a uses its dependency (abbrev) to demonstrate transitive deps work
- pkg-b exports a simple function
- Updated to ES modules for consistency
- Test now verifies all workspace packages load and execute correctly
**node-turborepo:**
- Changed from justBuild to httpCheck since this is a Next.js web server
- Added start script to root package.json to run the web app
- Test now verifies the built app starts and responds to HTTP requests
- This properly tests that the @repo/ui workspace package is built and linked
These changes ensure that monorepo builds are actually testing workspace
functionality, not just that the root package builds in isolation.
Fixes#332
* feat: add yarn workspaces and full-stack monorepo examples
Added two new monorepo examples to complete coverage:
**node-yarn-workspaces:**
- Demonstrates yarn workspaces with workspace package imports
- Uses the packageManager field for corepack
- Similar structure to npm/pnpm workspace examples for consistency
- Tests that workspace packages load and transitive dependencies work
**node-monorepo-fullstack:**
- Real-world example with Express API + frontend + shared package
- Shows how to share code (@monorepo/shared) between API and web packages
- API uses Express and shared utilities/constants
- Frontend demonstrates importing shared code
- Uses HTTP checks to verify API endpoints work correctly
- Demonstrates common full-stack monorepo pattern
Updated documentation to link to the yarn workspaces example and added
a note about the full-stack example for users looking for a more
realistic monorepo setup.
Addresses #332
* fix: format pkg-b package.json properly
Fixed uglified JSON that was created with echo instead of proper editing.
* fix: add yarn.lock and workspace deps to yarn-workspaces example
- Added yarn.lock file required by yarn 4
- Added workspace package dependencies (pkg-a, pkg-b) to root package.json
- Yarn requires lockfile to exist and won't create one in CI mode
* fix: update yarn.lock with correct workspace references
- Added workspace:* aliases to pkg-a and pkg-b entries
- Removed unused transitive dependencies that aren't in package.json
- Yarn requires both the workspace:* and workspace:packages/* forms
* docs: add lockfile guidelines to CLAUDE.md
Never manually update lockfiles - always use the package manager to
generate them properly with correct checksums.
* fix: add workspace deps to pnpm-workspaces package.json
ES module imports require workspace packages to be listed as dependencies
in the root package.json for Node.js to resolve them correctly.
* fix: generate yarn.lock with proper checksums using yarn
Used yarn install via corepack to generate proper yarn.lock with real
checksums instead of manually creating fake ones. Also includes Yarn PnP
files (.pnp.cjs, .pnp.loader.mjs, .yarn/) generated by yarn 4.
* fix: regenerate lockfiles using package managers
Regenerated pnpm-lock.yaml and yarn install-state.gz using the actual
package managers (pnpm and yarn via corepack) instead of manual edits.
- pnpm-lock.yaml: Updated for new workspace dependencies
- .yarn/install-state.gz: Regenerated by yarn install
* fix: remove Yarn PnP files and add .gitignore
Yarn PnP files (.pnp.cjs, .pnp.loader.mjs, .yarn/install-state.gz) should
not be committed as they contain environment-specific paths. They will be
generated during yarn install at build time.
Added .gitignore matching the pattern used in node-yarn-3 example.
* test: update snapshots
* refactor: merge the more realistic monorepo example into existing npm workspaces example
* build: ignore example claude folders
* test: snapshot update
* test: improve unit tests for node workspaces
* docs: deslop AI documentation
* test: improve turborepo example
* test: update snapshots
* test: update unit test for changed monorepo structure
* test: update snapshot
---------
Co-authored-by: Hanzo Dev <[email protected]>
* test: make sure nvmrc and node-version are tested
* fix: remove custom parsers for nvmrc and node-version in favor of mise idiomatic parsing
* test: update snapshots
* test: removing snapshot that it doesn't look like we need anymore?
* test: update snapshot
* test: increase docker pull timeout
* test: assert empty stderr on successful integration tests
Add assertion to check that stderr is empty when integration tests pass
successfully. This helps catch unexpected warnings or error messages that
might indicate issues even when the test technically succeeds.
The check is added to runContainerWithTimeout which runs containers that
output expected strings. HTTP check tests are not affected since they
already validate correctness via HTTP requests and separating stderr
from detached containers is more complex.
* fix: add private field to example package.json files
Add "private": true to all example package.json files to suppress
package manager warnings about missing license fields. These are
test/example projects not meant to be published to npm registries.
This prevents stderr warnings like "warning package.json: No license
field" which were causing the new stderr assertion in integration tests
to fail even though the applications were running correctly.
Affected examples:
- All node-yarn-* examples
- node-npm, node-pnpm, node-bun examples
- config-file, mise-config examples
- Other node-based examples
* fix: trust mise config files in app directory
Add MISE_TRUSTED_CONFIG_PATHS=/app to automatically trust mise
configuration files in the application directory during builds.
This prevents trust warnings when MISE_PARANOID mode is enabled:
"Trust them with \`mise trust\`. See https://mise.jdx.dev/cli/trust.html"
Since the app directory (/app) is the user's code being built,
it's safe to trust mise configuration files located there.
* test: add stderrAllowed option to skip stderr assertion
Add optional "stderrAllowed" field to test.json that defaults to false.
When set to true, skips the stderr empty assertion for tests where
stderr output is expected and normal.
This is useful for applications that log to stderr by default, such as
gunicorn which outputs info logs to stderr:
[2025-11-18 18:13:50 +0000] [1] [INFO] Starting gunicorn 23.0.0
[2025-11-18 18:13:50 +0000] [1] [INFO] Listening at: http://0.0.0.0:3333 (1)
Updated python-uv test to set stderrAllowed: true since it uses
gunicorn which logs to stderr.
* test: allow stderr for node-latest-npm-native-deps temporarily
Add stderrAllowed: true to node-latest-npm-native-deps test to handle
the NPM_CONFIG_PRODUCTION deprecation warning:
"npm warn config production Use \`--omit=dev\` instead"
This is temporary and should be removed once NPM_CONFIG_PRODUCTION is
removed from core/providers/node/node.go:241 in a separate PR.
* test: allow stderr for npm production warning in additional tests
Add stderrAllowed: true to node-prisma, node-remix, and
node-npm-install-in-build test cases to temporarily allow the
npm warning about NPM_CONFIG_PRODUCTION being deprecated.
This is a temporary workaround until NPM_CONFIG_PRODUCTION is
removed from node.go in a separate PR.
* test: allow stderr for Bun console output
Bun routes console.log/console.error to stderr by default in
script mode. Add stderrAllowed: true to all Bun example tests
to allow this expected behavior.
* test: allow stderr for TanStack Start output
TanStack Start outputs to stderr during server startup.
Add stderrAllowed: true to allow this expected behavior.
* test: add approved builds to fix better-sqlite3 error
* test: snapshot update
* test: fix build warning, allow stderr for --omit warning for now
* docs: note that test.json are jsonc for AI
* test: snapshot update
* test: allow stderr for omit usage
---------
Co-authored-by: Hanzo Dev <[email protected]>
* test: remove back version from docker-compose
* test: fix missing base64 on ruby project
* test: additional missing test.json to further expand test coverage
* test: updating example project logic for more specific integration tests
* test: snapshot update
* test: update puppeteer script
* test: fix laravel httpCheck
* docs: claude updates