diff --git a/src/apps/dashboard/constants/helpLinks.ts b/src/apps/dashboard/constants/helpLinks.ts
index 69d55e0bd..6cce009cc 100644
--- a/src/apps/dashboard/constants/helpLinks.ts
+++ b/src/apps/dashboard/constants/helpLinks.ts
@@ -22,10 +22,7 @@ export const HelpLinks = [
paths: ['/dashboard/playback/transcoding'],
url: 'https://jellyfin.org/docs/general/server/transcoding'
}, {
- paths: [
- '/dashboard/plugins',
- '/dashboard/plugins/catalog'
- ],
+ paths: ['/dashboard/plugins'],
url: 'https://jellyfin.org/docs/general/server/plugins/'
}, {
paths: ['/dashboard/plugins/repositories'],
diff --git a/src/apps/dashboard/features/plugins/components/PackageCard.tsx b/src/apps/dashboard/features/plugins/components/PackageCard.tsx
deleted file mode 100644
index 0145a2eac..000000000
--- a/src/apps/dashboard/features/plugins/components/PackageCard.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import React from 'react';
-import type { PackageInfo } from '@jellyfin/sdk/lib/generated-client/models/package-info';
-import ExtensionIcon from '@mui/icons-material/Extension';
-import BaseCard from 'apps/dashboard/components/BaseCard';
-import { useLocation } from 'react-router-dom';
-
-type IProps = {
- pkg: PackageInfo;
-};
-
-const PackageCard = ({ pkg }: IProps) => {
- const location = useLocation();
-
- return (
- }
- to={{
- pathname: `/dashboard/plugins/${pkg.guid}`,
- search: `?name=${encodeURIComponent(pkg.name || '')}`,
- hash: location.hash
- }}
- />
- );
-};
-
-export default PackageCard;
diff --git a/src/apps/dashboard/features/plugins/utils/getPackageCategories.ts b/src/apps/dashboard/features/plugins/utils/getPackageCategories.ts
deleted file mode 100644
index 74a9932be..000000000
--- a/src/apps/dashboard/features/plugins/utils/getPackageCategories.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import type { PackageInfo } from '@jellyfin/sdk/lib/generated-client/models/package-info';
-
-const getPackageCategories = (packages?: PackageInfo[]) => {
- if (!packages) return [];
-
- const categories: string[] = [];
-
- for (const pkg of packages) {
- if (pkg.category && !categories.includes(pkg.category)) {
- categories.push(pkg.category);
- }
- }
-
- return categories.sort((a, b) => a.localeCompare(b));
-};
-
-export default getPackageCategories;
diff --git a/src/apps/dashboard/features/plugins/utils/getPackagesByCategory.ts b/src/apps/dashboard/features/plugins/utils/getPackagesByCategory.ts
deleted file mode 100644
index fcaa21ad4..000000000
--- a/src/apps/dashboard/features/plugins/utils/getPackagesByCategory.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import type { PackageInfo } from '@jellyfin/sdk/lib/generated-client/models/package-info';
-
-const getPackagesByCategory = (packages: PackageInfo[] | undefined, category: string) => {
- if (!packages) return [];
-
- return packages
- .filter(pkg => pkg.category === category)
- .sort((a, b) => {
- if (a.name && b.name) {
- return a.name.localeCompare(b.name);
- } else {
- return 0;
- }
- });
-};
-
-export default getPackagesByCategory;
diff --git a/src/apps/dashboard/routes/plugins/catalog.tsx b/src/apps/dashboard/routes/plugins/catalog.tsx
deleted file mode 100644
index cd98de672..000000000
--- a/src/apps/dashboard/routes/plugins/catalog.tsx
+++ /dev/null
@@ -1,98 +0,0 @@
-import Settings from '@mui/icons-material/Settings';
-import Box from '@mui/material/Box';
-import Grid from '@mui/material/Grid2';
-import IconButton from '@mui/material/IconButton';
-import Stack from '@mui/material/Stack';
-import TextField from '@mui/material/TextField';
-import Typography from '@mui/material/Typography';
-import React, { useCallback, useMemo, useState } from 'react';
-import { Link } from 'react-router-dom';
-
-import { usePackages } from 'apps/dashboard/features/plugins/api/usePackages';
-import PackageCard from 'apps/dashboard/features/plugins/components/PackageCard';
-import { PluginCategory } from 'apps/dashboard/features/plugins/constants/pluginCategory';
-import { CATEGORY_LABELS } from 'apps/dashboard/features/plugins/constants/categoryLabels';
-import getPackageCategories from 'apps/dashboard/features/plugins/utils/getPackageCategories';
-import getPackagesByCategory from 'apps/dashboard/features/plugins/utils/getPackagesByCategory';
-import Loading from 'components/loading/LoadingComponent';
-import Page from 'components/Page';
-import globalize from 'lib/globalize';
-
-export const Component = () => {
- const { data: packages, isPending: isPackagesPending } = usePackages();
- const [ searchQuery, setSearchQuery ] = useState('');
-
- const filteredPackages = useMemo(() => {
- return packages?.filter(i => i.name?.toLocaleLowerCase().includes(searchQuery.toLocaleLowerCase()));
- }, [ packages, searchQuery ]);
-
- const packageCategories = getPackageCategories(filteredPackages);
-
- const updateSearchQuery = useCallback((e: React.ChangeEvent) => {
- setSearchQuery(e.target.value);
- }, []);
-
- const getCategoryLabel = (category: string) => {
- const categoryKey = category.replace(/\s/g, '') as PluginCategory;
-
- if (CATEGORY_LABELS[categoryKey]) {
- return globalize.translate(CATEGORY_LABELS[categoryKey]);
- }
-
- console.warn('[AvailablePlugins] unmapped category label', category);
- return category;
- };
-
- if (isPackagesPending) {
- return ;
- }
-
- return (
-
-
-
-
- {globalize.translate('TabCatalog')}
-
-
-
-
-
-
-
- {packageCategories.map(category => (
-
- {getCategoryLabel(category)}
-
-
- {getPackagesByCategory(filteredPackages, category).map(pkg => (
-
-
-
- ))}
-
-
- ))}
-
-
-
- );
-};
-
-Component.displayName = 'PluginsCatalogPage';
diff --git a/src/strings/en-us.json b/src/strings/en-us.json
index 71acbbdd2..bf999b735 100644
--- a/src/strings/en-us.json
+++ b/src/strings/en-us.json
@@ -1605,7 +1605,6 @@
"TabAccess": "Access",
"TabAdvanced": "Advanced",
"HeaderBackups": "Backups",
- "TabCatalog": "Catalog",
"TabDashboard": "Dashboard",
"TabLatest": "Recently Added",
"TabLogs": "Logs",