diff --git a/apps/site/layouts/Blog.tsx b/apps/site/layouts/Blog.tsx
index c9d13d401aba8..aa389a952289b 100644
--- a/apps/site/layouts/Blog.tsx
+++ b/apps/site/layouts/Blog.tsx
@@ -63,6 +63,7 @@ const BlogLayout: FC = () => {
'announcements',
'release',
'vulnerability',
+ 'migrations',
'events',
])}
/>
diff --git a/apps/site/mdx/components.mjs b/apps/site/mdx/components.mjs
index 74fc4074e2e6f..59b1f7febf895 100644
--- a/apps/site/mdx/components.mjs
+++ b/apps/site/mdx/components.mjs
@@ -1,5 +1,6 @@
'use strict';
+import AlertBox from '@node-core/ui-components/Common/AlertBox';
import BadgeGroup from '@node-core/ui-components/Common/BadgeGroup';
import Blockquote from '@node-core/ui-components/Common/Blockquote';
import MDXCodeTabs from '@node-core/ui-components/MDX/CodeTabs';
@@ -46,6 +47,8 @@ export default {
blockquote: Blockquote,
pre: MDXCodeBox,
img: MDXImage,
+ // Renders a CSS-enhanced Alert Box
+ AlertBox,
// Renders MDX CodeTabs
CodeTabs: MDXCodeTabs,
// Renders a Download Button
diff --git a/apps/site/navigation.json b/apps/site/navigation.json
index 025763c89aa89..816f552ea4a1e 100644
--- a/apps/site/navigation.json
+++ b/apps/site/navigation.json
@@ -197,6 +197,10 @@
"securityBestPractices": {
"link": "/learn/getting-started/security-best-practices",
"label": "components.navigation.learn.gettingStarted.links.securityBestPractices"
+ },
+ "userlandMigrations": {
+ "link": "/learn/getting-started/userland-migrations",
+ "label": "components.navigation.learn.gettingStarted.links.userlandMigrations"
}
}
},
@@ -328,15 +332,6 @@
}
}
},
- "migrations": {
- "label": "components.navigation.learn.migrations.links.migrations",
- "items": {
- "introduction": {
- "link": "/learn/migrations/introduction",
- "label": "components.navigation.learn.migrations.links.introduction"
- }
- }
- },
"modules": {
"label": "components.navigation.learn.modules.links.modules",
"items": {
@@ -411,6 +406,31 @@
"label": "components.navigation.learn.testRunner.links.collectingCodeCoverage"
}
}
+ },
+ "userland-migrations": {
+ "label": "components.navigation.learn.userland-migrations.links.userland-migrations",
+ "items": {
+ "introduction": {
+ "link": "/learn/userland-migrations/introduction",
+ "label": "components.navigation.learn.userland-migrations.links.introduction"
+ },
+ "ecosystem": {
+ "link": "/learn/userland-migrations/ecosystem",
+ "label": "components.navigation.learn.userland-migrations.links.ecosystem"
+ },
+ "v22-to-v24": {
+ "link": "/learn/userland-migrations/v22-to-v24",
+ "label": "components.navigation.learn.userland-migrations.links.v22-to-v24"
+ },
+ "v20-to-v22": {
+ "link": "/learn/userland-migrations/v20-to-v22",
+ "label": "components.navigation.learn.userland-migrations.links.v20-to-v22"
+ },
+ "v14-to-v16": {
+ "link": "/learn/userland-migrations/v14-to-v16",
+ "label": "components.navigation.learn.userland-migrations.links.v14-to-v16"
+ }
+ }
}
}
}
diff --git a/apps/site/next.mdx.use.mjs b/apps/site/next.mdx.use.mjs
new file mode 100644
index 0000000000000..0362afd15024d
--- /dev/null
+++ b/apps/site/next.mdx.use.mjs
@@ -0,0 +1,43 @@
+'use strict';
+
+import BadgeGroup from '@node-core/ui-components/Common/BadgeGroup';
+
+import Button from './components/Common/Button';
+import LinkWithArrow from './components/Common/LinkWithArrow';
+import EOLAlertBox from './components/EOL/EOLAlert';
+import EOLReleaseTable from './components/EOL/EOLReleaseTable';
+import Link from './components/Link';
+import UpcomingMeetings from './components/MDX/Calendar/UpcomingMeetings';
+import PreviousReleasesTable from './components/Releases/PreviousReleasesTable';
+import WithBadgeGroup from './components/withBadgeGroup';
+import WithBanner from './components/withBanner';
+import WithNodeRelease from './components/withNodeRelease';
+
+/**
+ * A full list of React Components that we want to pass through to MDX
+ *
+ * @satisfies {import('mdx/types').MDXComponents}
+ */
+export const mdxComponents = {
+ PreviousReleasesTable,
+ // HOC for getting Node.js Release Metadata
+ WithNodeRelease,
+ // HOC for providing Banner Data
+ WithBanner,
+ // HOC for providing Badge Data
+ WithBadgeGroup,
+ // Standalone Badge Group
+ BadgeGroup,
+ // Renders an container for Upcoming Node.js Meetings
+ UpcomingMeetings,
+ // Renders an EOL alert
+ EOLAlertBox,
+ // Renders the EOL Table
+ EOLReleaseTable,
+ // Renders a Button Component for `button` tags
+ Button,
+ // Regular links (without arrow)
+ Link,
+ // Links with External Arrow
+ LinkWithArrow,
+};
diff --git a/apps/site/pages/en/blog/migrations/v12-to-v14.mdx b/apps/site/pages/en/blog/migrations/v12-to-v14.mdx
new file mode 100644
index 0000000000000..5cd2534773a14
--- /dev/null
+++ b/apps/site/pages/en/blog/migrations/v12-to-v14.mdx
@@ -0,0 +1,56 @@
+---
+date: '2025-10-10T12:00:00.000Z'
+category: migrations
+title: Node.js v12 to v14
+layout: blog-post
+author: AugustinMauroy
+---
+
+# Node.js v12 to v14
+
+
+ This article cover a part of the migration from Node.js v12 to v14. The
+ userland migrations team is working on more codemods to help you with the
+ migration.
+
+
+This page provides a list of codemods to help you migrate your code from Node.js v12 to v14.
+
+## `util-print-to-console-log`
+
+This recipe transforms calls of various now-deprecated `node:util` log functions into the modern alternative, `console.log` and `console.error`:
+
+- [DEP0026](https://nodejs.org/api/deprecations.html#DEP0026): `util.print` ➜ `console.log`
+- [DEP0027](https://nodejs.org/api/deprecations.html#DEP0027): `util.puts` ➜ `console.log`
+- [DEP0028](https://nodejs.org/api/deprecations.html#DEP0028): `util.debug` ➜ `console.error`
+- [DEP0029](https://nodejs.org/api/deprecations.html#DEP0029): `util.error` ➜ `console.error`
+
+```bash
+npx codemod run @nodejs/create-require-from-path
+```
+
+### Example:
+
+```js displayName="Before"
+const util = require('node:util');
+
+util.print('Hello world');
+util.puts('Hello world');
+util.debug('Hello world');
+util.error('Hello world');
+```
+
+```js displayName="After"
+console.log('Hello world');
+console.log('Hello world');
+console.error('Hello world');
+console.error('Hello world');
+```
+
+### Source Code
+
+The source code for this codemod can be found in the [util-print-to-console-log directory](https://github.com/nodejs/userland-migrations/tree/main/recipes/util-print-to-console-log).
+
+### Registry Link
+
+You can find this codemod in the [Codemod Registry](https://app.codemod.com/registry/@nodejs/util-print-to-console-log).
diff --git a/apps/site/pages/en/blog/migrations/v14-to-v16.mdx b/apps/site/pages/en/blog/migrations/v14-to-v16.mdx
new file mode 100644
index 0000000000000..db755100a84f3
--- /dev/null
+++ b/apps/site/pages/en/blog/migrations/v14-to-v16.mdx
@@ -0,0 +1,181 @@
+---
+date: '2025-10-10T12:00:00.000Z'
+category: migrations
+title: Node.js v14 to v16
+layout: blog-post
+author: AugustinMauroy
+---
+
+# Node.js v14 to v16
+
+
+ This article cover a part of the migration from Node.js v14 to v16. The
+ userland migrations team is working on more codemods to help you with the
+ migration.
+
+
+This page provides a list of codemods to help you migrate your code from Node.js v14 to v16.
+
+## `create-require-from-path`
+
+Node.js v16 replaced the [`createRequireFromPath`](https://nodejs.org/api/module.html#module_module_createrequirefrompath) function, deprecated in [DEP0148](https://nodejs.org/api/deprecations.html#DEP0148), with the modern [`createRequire`](https://nodejs.org/api/module.html#module_module_createrequire) function. This codemod replaces calls of the deprecated function with the modern alternative mentioned.
+
+```bash
+npx codemod run @nodejs/create-require-from-path
+```
+
+### Example:
+
+```js displayName="Before"
+import { createRequireFromPath } from 'node:module';
+
+const requireFromPath = createRequireFromPath('/path/to/module');
+const myModule = requireFromPath('./myModule.cjs');
+```
+
+```js displayName="After"
+import { createRequire } from 'node:module';
+
+const require = createRequire('/path/to/module');
+const myModule = require('./myModule.cjs');
+```
+
+### Source Code
+
+The source code for this codemod can be found in the [create-require-from-path directory](https://github.com/nodejs/userland-migrations/tree/main/recipes/create-require-from-path).
+
+### Registry Link
+
+You can find this codemod in the [Codemod Registry](https://app.codemod.com/registry/@nodejs/create-require-from-path).
+
+## `process-main-module`
+
+The `process.mainModule` property was deprecated in favor of `require.main`. This codemod will help you replace the old `process.mainModule` usage with the new `require.main` usage.
+
+So the codemod handle [DEP0138](https://nodejs.org/api/deprecations.html#DEP0138).
+
+```bash
+npx codemod run @nodejs/process-main-module
+```
+
+### Example:
+
+```js displayName="Before"
+if (process.mainModule === 'mod.js') {
+ // cli thing
+} else {
+ // module thing
+}
+```
+
+```js displayName="After"
+if (require.main === 'mod.js') {
+ // cli thing
+} else {
+ // module thing
+}
+```
+
+### Source Code
+
+The source code for this codemod can be found in the [process-main-module directory](https://github.com/nodejs/userland-migrations/tree/main/recipes/process-main-module).
+
+### Registry Link
+
+You can find this codemod in the [Codemod Registry](https://app.codemod.com/registry/@nodejs/process-main-module).
+
+## `process-mainModule-to-require-main`
+
+The [`process.mainModule`](https://nodejs.org/api/process.html#process_process_mainmodule) property was deprecated ([DEP0144](https://nodejs.org/api/deprecations.html#DEP0144)) in favor of [`require.main`](https://nodejs.org/api/modules.html#modules_accessing_the_main_module). This codemod replaces calls of the deprecated property with the modern alternative mentioned.
+
+```bash
+npx codemod run @nodejs/process-mainModule-to-require-main
+```
+
+### Example:
+
+```js displayName="Before"
+if (process.mainModule) {
+ console.log('This script is the main module');
+}
+```
+
+```js displayName="After"
+if (require.main === module) {
+ console.log('This script is the main module');
+}
+```
+
+## `rmdir`
+
+The `fs.rmdir` function was deprecated in favor of `fs.rm` with the `{ recursive: true }` option. This codemod will help you replace the old `fs.rmdir` function with the new `fs.rm` function.
+
+so this codemod handle [DEP0147](https://nodejs.org/api/deprecations.html#DEP0147).
+
+```bash
+npx codemod run @nodejs/rmdir
+```
+
+### Example:
+
+```js displayName="Before"
+// Using fs.rmdir with the recursive option
+fs.rmdir(path, { recursive: true }, callback);
+
+// Using fs.rmdirSync with the recursive option
+fs.rmdirSync(path, { recursive: true });
+
+// Using fs.promises.rmdir with the recursive option
+fs.promises.rmdir(path, { recursive: true });
+```
+
+```js displayName="After"
+// Using fs.rm with recursive and force options
+fs.rm(path, { recursive: true, force: true }, callback);
+
+// Using fs.rmSync with recursive and force options
+fs.rmSync(path, { recursive: true, force: true });
+
+// Using fs.promises.rm with recursive and force options
+fs.promises.rm(path, { recursive: true, force: true });
+```
+
+### Source Code
+
+The source code for this codemod can be found in the [rmdir directory](https://github.com/nodejs/userland-migrations/tree/main/recipes/rmdir).
+
+### Registry Link
+
+You can find this codemod in the [Codemod Registry](https://app.codemod.com/registry/@nodejs/rmdir).
+
+## `tmpDir-to-tmpdir`
+
+The `tmpDir` function was renamed to `tmpdir` in Node.js v16. This codemod will help you replace all instances of `tmpDir` with `tmpdir`.
+
+So the codemod handles [DEP0022](https://nodejs.org/docs/latest/api/deprecations.html#dep0022-ostmpdir).
+
+```bash
+npx codemod run @nodejs/tmpDir-to-tmpdir
+```
+
+### Example:
+
+```js displayName="Before"
+import { tmpDir } from 'node:os';
+
+const foo = tmpDir();
+```
+
+```js displayName="After"
+import { tmpdir } from 'node:os';
+
+const foo = tmpdir();
+```
+
+### Source Code
+
+The source code for this codemod can be found in the [tmpdir-to-tmpdir directory](https://github.com/nodejs/userland-migrations/tree/main/recipes/tmpdir-to-tmpdir).
+
+### Registry Link
+
+You can find this codemod in the [Codemod Registry](https://app.codemod.com/registry/@nodejs/tmpDir-to-tmpdir).
diff --git a/apps/site/pages/en/blog/migrations/v20-to-v22.mdx b/apps/site/pages/en/blog/migrations/v20-to-v22.mdx
new file mode 100644
index 0000000000000..78b91378fda38
--- /dev/null
+++ b/apps/site/pages/en/blog/migrations/v20-to-v22.mdx
@@ -0,0 +1,47 @@
+---
+date: '2025-10-10T12:00:00.000Z'
+category: migrations
+title: Node.js v20 to v22
+layout: blog-post
+author: AugustinMauroy
+---
+
+# Node.js v20 to v22
+
+
+ This article cover a part of the migration from Node.js v20 to v22. The
+ userland migrations team is working on more codemods to help you with the
+ migration.
+
+
+This page provides a list of codemods to help you migrate your code from Node.js v20 to v22.
+
+## `import-assertions-to-attributes`
+
+During the process of TC39 standardization, the `import assert` feature was introduced to allow importing [JSON modules](https://tc39.es/proposal-json-modules/) but during the during the transition to stage 4, the `assert` keyword was removed and replaced with an `with` attribute on the `import` statement.
+
+So in [node.js v22](https://nodejs.org/fr/blog/release/v22.0.0#other-notable-changes), the `import assert` feature was removed and you need to use the `with` attribute instead.
+
+Also note that the `with` keyword as been introduce in [node.js v18.20](https://nodejs.org/fr/blog/release/v18.20.0#added-support-for-import-attributes) but it was not mandatory until v22.
+
+```bash
+npx codemod run @nodejs/import-assertions-to-attributes
+```
+
+### Example:
+
+```js displayName="Before"
+import jsonData from './data.json' assert { type: 'json' };
+```
+
+```js displayName="After"
+import jsonData from './data.json' with { type: 'json' };
+```
+
+### Source Code
+
+The source code for this codemod can be found in the [import-assertions-to-attributes directory](https://github.com/nodejs/userland-migrations/tree/main/recipes/import-assertions-to-attributes).
+
+### Registry Link
+
+You can find this codemod in the [Codemod Registry](https://app.codemod.com/registry/@nodejs/import-assertions-to-attributes).
diff --git a/apps/site/pages/en/blog/migrations/v22-to-v24.mdx b/apps/site/pages/en/blog/migrations/v22-to-v24.mdx
new file mode 100644
index 0000000000000..9079da142f9e3
--- /dev/null
+++ b/apps/site/pages/en/blog/migrations/v22-to-v24.mdx
@@ -0,0 +1,167 @@
+---
+date: '2025-10-10T12:00:00.000Z'
+category: migrations
+title: Node.js v22 to v24
+layout: blog-post
+author: AugustinMauroy
+---
+
+# Node.js v22 to v24
+
+
+ This article cover a part of the migration from Node.js v22 to v24. The
+ userland migrations team is working on more codemods to help you with the
+ migration.
+
+
+This page provides a list of codemods to help you migrate your code from Node.js v22 to v24.
+
+## `fs-access-mode-constants`
+
+In Node.js 24, the `fs` module introduced a runtime deprecation for `F_OK`, `R_OK`, `W_OK`, and `X_OK` getters exposed directly on `node:fs`. Get them from `fs.constants` or `fs.promises.constants` instead.
+
+So this codemod handle [DEP0176](https://nodejs.org/api/deprecations.html#DEP0176).
+
+```js displayName="Before"
+const fs = require('node:fs');
+
+fs.access('/path/to/file', fs.F_OK, callback);
+fs.access('/path/to/file', fs.R_OK | fs.W_OK, callback);
+```
+
+```js displayName="After"
+const fs = require('node:fs');
+
+fs.access('/path/to/file', fs.constants.F_OK, callback);
+fs.access('/path/to/file', fs.constants.R_OK | fs.constants.W_OK, callback);
+```
+
+## `util-log-to-console-log`
+
+In Node.js v23, the `util.log` function was deprecated in favor of using `console.log` directly. Because it's an unmaintained legacy API that was exposed to user land by accident
+
+So this codemod handle [DEP0059](https://nodejs.org/api/deprecations.html#DEP0059).
+
+### Example:
+
+```js displayName="Before"
+const util = require('node:util');
+
+util.log('Hello world');
+```
+
+```js displayName="After"
+console.log(new Date().toLocaleString(), 'Hello world');
+```
+
+## `zlib-bytesRead-to-bytesWritten`
+
+The [`zlib.bytesRead`](https://nodejs.org/api/zlib.html#zlib_bytesread) property was deprecated ([DEP0108](https://nodejs.org/api/deprecations.html#DEP0108)) in favor of [`zlib.bytesWritten`](https://nodejs.org/api/zlib.html#zlib_byteswritten). This codemod replaces `zlib.bytesRead` with `zlib.bytesWritten` for consistent stream property naming. It handles both CommonJS and ESM imports.
+
+```bash
+npx codemod run @nodejs/zlib-bytesRead-to-bytesWritten
+```
+
+### Example:
+
+```js displayName="Before"
+const zlib = require('node:zlib');
+const gzip = zlib.createGzip();
+gzip.on('end', () => {
+ console.log('Bytes processed:', gzip.bytesRead);
+});
+```
+
+```js displayName="After"
+const zlib = require('node:zlib');
+const gzip = zlib.createGzip();
+gzip.on('end', () => {
+ console.log('Bytes processed:', gzip.bytesWritten);
+});
+```
+
+## `fs-truncate-to-ftruncate`
+
+The [`fs.truncate`](https://nodejs.org/api/fs.html#fs_fs_truncate_path_len_callback) function was deprecated ([DEP0081](https://nodejs.org/api/deprecations.html#DEP0081)) when used with a file descriptor. Use [`fs.ftruncate`](https://nodejs.org/api/fs.html#fs_fs_ftruncate_fd_len_callback) instead.
+
+```bash
+npx codemod run @nodejs/fs-truncate-to-ftruncate
+```
+
+### Example:
+
+```js displayName="Before"
+const { truncate, open, close } = require('node:fs');
+
+open('file.txt', 'w', (err, fd) => {
+ if (err) throw err;
+ truncate(fd, 10, err => {
+ if (err) throw err;
+ close(fd, () => {});
+ });
+});
+```
+
+```js displayName="After"
+const { ftruncate, open, close } = require('node:fs');
+
+open('file.txt', 'w', (err, fd) => {
+ if (err) throw err;
+ ftruncate(fd, 10, err => {
+ if (err) throw err;
+ close(fd, () => {});
+ });
+});
+```
+
+## `crypto-rsa-pss-update`
+
+Codemod to handle Node.js crypto deprecation [DEP0154](https://nodejs.org/docs/latest/api/deprecations.html#DEP0154) by transforming deprecated RSA-PSS key generation options.
+
+```bash
+npx codemod run @nodejs/crypto-rsa-pss-update
+```
+
+### Example:
+
+```js displayName="Before"
+const crypto = require('node:crypto');
+
+crypto.generateKeyPair(
+ 'rsa-pss',
+ {
+ modulusLength: 2048,
+ hash: 'sha256',
+ mgf1Hash: 'sha1',
+ saltLength: 32,
+ },
+ (err, publicKey, privateKey) => {
+ // callback
+ }
+);
+```
+
+```js displayName="After"
+const crypto = require('crypto');
+
+crypto.generateKeyPair(
+ 'rsa-pss',
+ {
+ modulusLength: 2048,
+ hashAlgorithm: 'sha256',
+ mgf1HashAlgorithm: 'sha1',
+ saltLength: 32,
+ },
+ (err, publicKey, privateKey) => {
+ // callback
+ }
+);
+```
+
+### Source Code
+
+The source code for this codemod can be found in the [crypto-rsa-pss-update directory](https://github.com/nodejs/userland-migrations/tree/main/recipes/crypto-rsa-pss-update).
+
+### Registry Link
+
+You can find this codemod in the [Codemod Registry](https://app.codemod.com/registry/@nodejs/crypto-rsa-pss-update).
diff --git a/apps/site/pages/en/learn/getting-started/userland-migrations.md b/apps/site/pages/en/learn/getting-started/userland-migrations.md
new file mode 100644
index 0000000000000..9f0a218cf5ecd
--- /dev/null
+++ b/apps/site/pages/en/learn/getting-started/userland-migrations.md
@@ -0,0 +1,65 @@
+---
+title: Userland Migrations
+layout: learn
+authors: JakobJingleheimer, AugustinMauroy
+---
+
+
+
+# Userland Migrations
+
+Node.js offers migrations for "userland" code (anything outside the node executable) to help adopt new features and handle breaking changes. These are built in collaboration with [Codemod](https://codemod.com), a platform focused on making it easy to build, share, and run codemods.
+
+Official migrations are published under the `@nodejs` scope within the [Codemod registry](https://codemod.link/nodejs-official). These have been reviewed and/or authored by Node.js members.
+
+## Goal
+
+The Node.js Userland Migrations team seeks to help developers migrate their codebases to the latest Node.js versions, making it easier to handle deprecations, new features, and breaking changes.
+
+## How to use a codemod
+
+To use a codemod, you can run the following command in your terminal:
+
+```bash
+npx codemod
+```
+
+Replace `` with the name of the codemod you want to run. For example, if you want to run the `@nodejs/import-assertions-to-attributes` codemod on your project, you would run:
+
+```bash
+npx codemod @nodejs/import-assertions-to-attributes
+```
+
+## Good Practices
+
+- **Run migrations in a separate branch**: If you are using a version control system like Git, it is a good practice to run migrations in a separate branch. This allows you to review the changes before merging them into your main branch.
+- **Review changes**: After running a migration, review the changes made to your codebase. Ensure that the migration has not introduced any unintended side effects or issues.
+- **Test your code**: After running a migration, it is important to test your code to ensure that everything is working as expected. Run your test suite and check for any errors or failures
+- **Format and or lint your code**: After running a migration, it is a good practice to format and lint your code. This ensures that your code follows the project's coding standards and is easier to read and maintain.
+
+## Understanding Codemods Registry
+
+The [Codemod registry](https://codemod.link/nodejs-official) provides a list of available codemods for Node.js.
+Some codemods may not be included in the following resources but are still available because they are not related to a specific migration to a Node.js version. Since we only list codemods for EoL deprecations, you may need to explore the registry for other codemods that could be useful for your migrations.
+
+> Please note that if you are logged into the Codemod platform, you can like these posts. This shows us that our work is valuable.
+
+## Feedback
+
+If you have any feedback or suggestions for improvements, please open an issue on the [Node.js Userland Migrations repository](https://github.com/nodejs/userland-migrations/issues).
+
+## Follow the Userland Migrations Progression
+
+You can follow the progress of userland migrations on our [GitHub project board](https://github.com/orgs/nodejs/projects/13/views/1).
+
+This board tracks:
+
+- Codemod kind (deprecation, breaking change, ecosystem)
+- Node.js version
+- Status (backlog, todo, in progress, done, not planned) _If you want to contribute, please check the "todo" column_
+
+## Migrations guides
+
+You can find all migrations guide on the [migration guides section](/blog/migrations).
+
+Please also note that migration guides for major-major releases only contain end-of-life [deprecations](https://nodejs.org/docs/latest/api/deprecations.html) and breaking changes.
diff --git a/apps/site/pages/en/learn/migrations/introduction.md b/apps/site/pages/en/learn/migrations/introduction.md
deleted file mode 100644
index 40c45a25259f5..0000000000000
--- a/apps/site/pages/en/learn/migrations/introduction.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: Userland Migrations
-layout: learn
-authors: JakobJingleheimer
----
-
-# Userland Migrations
-
-Node.js provides migrations for "userland" (what you write vs node's own) source-code to facilitate adoption of new features and upgrading source-code affected by breaking changes. These are done in collaboration with [`codemod`](https://www.codemod.com), who also work with other major projects like Next.js, React, and Tailwind. Node.js's migrations live in the [`nodejs/userland-migrations`](https://github.com/nodejs/userland-migrations) repository and are overseen by the [`@nodejs/userland-migrations`](https://github.com/orgs/nodejs/teams/userland-migrations) team.
-
-Official migrations are published under the `@nodejs` namespace within the [codemod registry](https://codemod.com/registry?framework=node.js). These have been reviewed and/or authored by Node.js members. There are also unofficial migrations available which have not been reviewed by Node.js.
-
-A migration alters a project's source-code to apply a new design pattern, like:
-
-```console
-cd path/to/your/project
-npx codemod@latest @nodejs/correct-ts-specifiers
-```
-
-The cited migration transforms legacy typescript imports to standards-compliant specifiers like:
-
-```ts displayName="before"
-import Foo from './foo';
-```
-
-```ts displayName="after"
-import type Foo from './foo/index.ts';
-```
diff --git a/packages/i18n/src/locales/en.json b/packages/i18n/src/locales/en.json
index 18faf3a92c9af..b18753e427e20 100644
--- a/packages/i18n/src/locales/en.json
+++ b/packages/i18n/src/locales/en.json
@@ -48,7 +48,8 @@
"profiling": "Profiling Node.js Applications",
"fetch": "Fetching data with Node.js",
"websocket": "WebSocket client with Node.js",
- "securityBestPractices": "Security Best Practices"
+ "securityBestPractices": "Security Best Practices",
+ "userlandMigrations": "Introduction to Userland Migrations"
}
},
"typescript": {
@@ -98,12 +99,6 @@
"acceptInputFromTheCommandLineInNodejs": "Accept input from the command line in Node.js"
}
},
- "migrations": {
- "links": {
- "migrations": "Userland Migrations",
- "introduction": "Introduction to Userland Migrations"
- }
- },
"modules": {
"links": {
"modules": "Modules",
@@ -303,7 +298,7 @@
},
"blog": {
"blogHeader": {
- "subtitle": "The latest Node.js news, case studies, tutorials, and resources.",
+ "subtitle": "The latest Node.js news, migrations guides and events summaries",
"rssLink": "RSS feed"
}
}
@@ -334,6 +329,7 @@
"video": "Video",
"weekly": "Weekly Updates",
"wg": "Working Groups",
+ "migrations": "Migrations Guides",
"events": "Events"
}
},