Skip to main content
The nodejs.org repository is a monorepo. Alongside the main website application in apps/site/, it contains standalone npm packages in the packages/ directory that are published to the npm registry.

Repository structure

nodejs.org/
├── apps/
│   └── site/                    # Main website — @node-core/website
└── packages/
    ├── ui-components/           # @node-core/ui-components
    ├── i18n/                    # @node-core/website-i18n
    └── [other-packages]/        # Additional workspace packages
Published packages:

@node-core/ui-components

Reusable React UI components shared across Node.js web properties. Compiled TypeScript + CSS, published to npm.

@node-core/website-i18n

Internationalization utilities and locale string bundles used by the website.

Publishing process

Publishing is fully automated through GitHub Actions. You do not need to run npm publish manually under normal circumstances.
1

Open a pull request

Make your changes and open a PR. The “Linting and Tests” CI workflow must pass.
2

Merge via merge queue

Changes must enter the main branch through GitHub’s merge queue. Direct pushes to main are not permitted.
3

Automatic publish trigger

After a successful merge, the “Publish Packages” GitHub Actions workflow triggers automatically. It verifies that the committer is [email protected] (the GitHub Actions bot) before proceeding.
4

Package analysis and version bump

The workflow analyzes which packages changed and bumps their versions accordingly.
5

npm publish

The workflow compiles TypeScript, compiles CSS, and runs npm publish for each changed package.
6

Slack notification

If the workflow was triggered via workflow_dispatch (manual dispatch), a notification is sent to #nodejs-website on Slack.

Manual workflow dispatch

The “Publish Packages” workflow can also be triggered manually from the GitHub Actions tab using workflow_dispatch. This is useful if the automatic trigger failed or if you need to republish a package without new commits.
Manual dispatch sends a Slack notification to #nodejs-website. Only use it when necessary.

Compile step

Before publishing, packages are compiled via the compile Turborepo task:
pnpm compile
This runs the compile script in each package workspace, which typically:
  1. Compiles TypeScript source to JavaScript (tsc)
  2. Compiles CSS (e.g. Tailwind PostCSS processing)
  3. Outputs artifacts to the dist/ directory
The published package contains only the compiled output, not the TypeScript source.

Version bumping

Version numbers are managed by the publishing workflow. Do not manually bump versions in package.json files — the automation handles this as part of the publish step.
Workspace-internal dependencies (using workspace:* specifiers) are resolved to their actual published versions by pnpm when publishing.

Build docs developers (and LLMs) love