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 50d2531ddf2d2..417bab323bbd8 100644
--- a/apps/site/i18n/locales/en.json
+++ b/apps/site/i18n/locales/en.json
@@ -310,6 +310,9 @@
"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/",
"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..999b009a7b58b 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',
}
@@ -49,6 +50,10 @@ export const platformItems = [
label: PackageManagerLabel.BREW,
value: 'BREW' as PackageManager,
},
+ {
+ label: PackageManagerLabel.WINGET,
+ value: 'WINGET' as PackageManager,
+ },
{
label: PackageManagerLabel.CHOCO,
value: 'CHOCO' as PackageManager,
diff --git a/apps/site/util/getNodeDownloadSnippet.ts b/apps/site/util/getNodeDownloadSnippet.ts
index 0eb424805b901..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: '',
};
@@ -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