diff --git a/apps/site/components/Downloads/Release/PlatformDropdown.tsx b/apps/site/components/Downloads/Release/PlatformDropdown.tsx
index a4839ae966f42..7c84d4b60c00c 100644
--- a/apps/site/components/Downloads/Release/PlatformDropdown.tsx
+++ b/apps/site/components/Downloads/Release/PlatformDropdown.tsx
@@ -4,6 +4,7 @@ import { useContext, useEffect, useMemo } from 'react';
import type { FC } from 'react';
import Select from '@/components/Common/Select';
+import WinGet from '@/components/Icons/Platform/WinGet';
import Choco from '@/components/Icons/Platform/Choco';
import Docker from '@/components/Icons/Platform/Docker';
import FNM from '@/components/Icons/Platform/FNM';
@@ -31,7 +32,7 @@ const PlatformDropdown: FC = () => {
}
if (os === 'LINUX' || os === 'MAC') {
- disabledItems.push('CHOCO');
+ disabledItems.push('WINGET', 'CHOCO');
}
const releaseSupportsHomebrew = supportedHomebrewVersions.includes(
@@ -68,6 +69,7 @@ const PlatformDropdown: FC = () => {
values={formatDropdownItems({
items: platformItems,
icons: {
+ WINGET: ,
NVM: ,
FNM: ,
BREW: ,
diff --git a/apps/site/components/Icons/Platform/WinGet.tsx b/apps/site/components/Icons/Platform/WinGet.tsx
new file mode 100644
index 0000000000000..7be80d75f3504
--- /dev/null
+++ b/apps/site/components/Icons/Platform/WinGet.tsx
@@ -0,0 +1,21 @@
+import type { FC, SVGProps } from 'react';
+
+const WinGet: FC> = props => (
+ // TODO: Use real svg for WinGet: https://github.com/microsoft/winget-cli/issues/4691
+ // For now, the Windows logo is used as a placeholder
+
+);
+
+export default WinGet;
diff --git a/apps/site/i18n/locales/en.json b/apps/site/i18n/locales/en.json
index b2f9ef45f86e2..417bab323bbd8 100644
--- a/apps/site/i18n/locales/en.json
+++ b/apps/site/i18n/locales/en.json
@@ -303,16 +303,19 @@
"activateFNM": "activate fnm",
"noteWithColon": "NOTE:",
"dockerIsNotNodejsPackageManager": "Docker is not a Node.js package manager.",
- "PleaseEndureAlreadyInstallOnSystem": "Please ensure it is already installed on your system.",
+ "PleaseEnsureAlreadyInstallOnSystem": "Please ensure it is already installed on your system.",
"dockerInstructions": "Follow official instructions at https://docs.docker.com/desktop/",
"dockerImagesLink": "Docker images are provided officially at https://github.com/nodejs/docker-node/",
"pullsNodejsDockerImage": "pulls the Node.js Docker image",
"homebrewIsNotNodejsPackageManager": "Homebrew is not a Node.js package manager.",
"homebrewInstructions": "Follow official instructions at https://brew.sh/",
"homebrewSupportsIntallingMajorNodejsVersion": "Homebrew only supports installing major Node.js versions and might not support the latest Node.js version from the {version} release line.",
+ "wingetIsNotNodejsPackageManager": "The Windows Package Manager is not a Node.js package manager.",
+ "wingetInstructions": "Follow official instructions at https://learn.microsoft.com/en-us/windows/package-manager/winget/install",
+ "wingetNotMaintainedByNodejs": "WinGet is not officially maintained by the Node.js project and might not support the {version} version of Node.js",
"chocolateyIsNotNodejsPackageManager": "Chocolatey is not a Node.js package manager.",
"chocolateyInstructions": "Follow official instructions at https://chocolatey.org/",
- "chocolateyNotMaintanedByNodejs": "Chocolatey is not officially maintained by the Node.js project and might not support the {version} version of Node.js"
+ "chocolateyNotMaintainedByNodejs": "Chocolatey is not officially maintained by the Node.js project and might not support the {version} version of Node.js"
}
}
}
diff --git a/apps/site/types/release.ts b/apps/site/types/release.ts
index b1e794e940c8c..2824735f35584 100644
--- a/apps/site/types/release.ts
+++ b/apps/site/types/release.ts
@@ -3,7 +3,7 @@ import type { ReactNode } from 'react';
import type { NodeRelease } from '@/types/releases';
import type { UserOS } from '@/types/userOS';
-export type PackageManager = 'NVM' | 'FNM' | 'BREW' | 'DOCKER' | 'CHOCO';
+export type PackageManager = 'NVM' | 'FNM' | 'BREW' | 'DOCKER' | 'WINGET' | 'CHOCO';
export interface ReleaseState {
os: UserOS;
diff --git a/apps/site/util/downloadUtils.ts b/apps/site/util/downloadUtils.ts
index 9a63c751a10e7..833e254cbcb3f 100644
--- a/apps/site/util/downloadUtils.ts
+++ b/apps/site/util/downloadUtils.ts
@@ -13,6 +13,7 @@ export enum PackageManagerLabel {
NVM = 'nvm',
FNM = 'fnm',
BREW = 'Brew',
+ WINGET = 'WinGet',
CHOCO = 'Chocolatey',
DOCKER = 'Docker',
}
@@ -37,6 +38,10 @@ export const operatingSystemItems = [
];
export const platformItems = [
+ {
+ label: PackageManagerLabel.WINGET,
+ value: 'WINGET' as PackageManager,
+ },
{
label: PackageManagerLabel.NVM,
value: 'NVM' as PackageManager,
diff --git a/apps/site/util/getNodeDownloadSnippet.ts b/apps/site/util/getNodeDownloadSnippet.ts
index 43083610ecec6..7a8944bdd76a7 100644
--- a/apps/site/util/getNodeDownloadSnippet.ts
+++ b/apps/site/util/getNodeDownloadSnippet.ts
@@ -15,6 +15,7 @@ export const getNodeDownloadSnippet = (
FNM: '',
BREW: '',
DOCKER: '',
+ WINGET: '',
CHOCO: '',
};
@@ -22,7 +23,7 @@ export const getNodeDownloadSnippet = (
snippets.DOCKER = dedent`
# ${t('layouts.download.codeBox.noteWithColon')}
# ${t('layouts.download.codeBox.dockerIsNotNodejsPackageManager')}
- # ${t('layouts.download.codeBox.PleaseEndureAlreadyInstallOnSystem')}
+ # ${t('layouts.download.codeBox.PleaseEnsureAlreadyInstallOnSystem')}
# ${t('layouts.download.codeBox.dockerInstructions')}
# ${t('layouts.download.codeBox.dockerImagesLink')}
@@ -69,7 +70,7 @@ export const getNodeDownloadSnippet = (
snippets.BREW = dedent`
# ${t('layouts.download.codeBox.noteWithColon')}
# ${t('layouts.download.codeBox.homebrewIsNotNodejsPackageManager')}
- # ${t('layouts.download.codeBox.PleaseEndureAlreadyInstallOnSystem')}
+ # ${t('layouts.download.codeBox.PleaseEnsureAlreadyInstallOnSystem')}
# ${t('layouts.download.codeBox.homebrewInstructions')}
# ${t('layouts.download.codeBox.homebrewSupportsIntallingMajorNodejsVersion', { version: release.major })}
@@ -84,6 +85,22 @@ export const getNodeDownloadSnippet = (
}
if (os === 'WIN') {
+ snippets.WINGET = dedent`
+ # ${t('layouts.download.codeBox.noteWithColon')}
+ # ${t('layouts.download.codeBox.wingetIsNotNodejsPackageManager')}
+ # ${t('layouts.download.codeBox.PleaseEnsureAlreadyInstallOnSystem')}
+ # ${t('layouts.download.codeBox.wingetInstructions')}
+ # ${t('layouts.download.codeBox.wingetNotMaintainedByNodejs', { version: release.versionWithPrefix })}
+
+ # ${t('layouts.download.codeBox.downloadAndInstallNodejs')}
+ winget install -e --id OpenJS.NodeJS${release.isLts ? '.LTS' : ''} -v ${release.version}
+
+ # ${t('layouts.download.codeBox.verifiesRightNodejsVersion')}
+ node -v # ${t('layouts.download.codeBox.shouldPrint', { version: release.versionWithPrefix })}
+
+ # ${t('layouts.download.codeBox.verifiesRightNpmVersion')}
+ npm -v # ${t('layouts.download.codeBox.shouldPrint', { version: release.npm })}`;
+
snippets.FNM = dedent`
# ${t('layouts.download.codeBox.installsFnm')}
winget install Schniz.fnm
@@ -100,9 +117,9 @@ export const getNodeDownloadSnippet = (
snippets.CHOCO = dedent`
# ${t('layouts.download.codeBox.noteWithColon')}
# ${t('layouts.download.codeBox.chocolateyIsNotNodejsPackageManager')}
- # ${t('layouts.download.codeBox.PleaseEndureAlreadyInstallOnSystem')}
+ # ${t('layouts.download.codeBox.PleaseEnsureAlreadyInstallOnSystem')}
# ${t('layouts.download.codeBox.chocolateyInstructions')}
- # ${t('layouts.download.codeBox.chocolateyNotMaintanedByNodejs', { version: release.versionWithPrefix })}
+ # ${t('layouts.download.codeBox.chocolateyNotMaintainedByNodejs', { version: release.versionWithPrefix })}
# ${t('layouts.download.codeBox.downloadAndInstallNodejs')}
choco install nodejs${release.isLts ? '-lts' : ''} --version="${release.version}"