diff --git a/src/apps/dashboard/AppLayout.tsx b/src/apps/dashboard/AppLayout.tsx
index 46191d3fee..16c81771cc 100644
--- a/src/apps/dashboard/AppLayout.tsx
+++ b/src/apps/dashboard/AppLayout.tsx
@@ -16,6 +16,7 @@ import { useLocale } from 'hooks/useLocale';
import AppTabs from './components/AppTabs';
import AppDrawer from './components/drawer/AppDrawer';
+import HelpButton from './components/toolbar/HelpButton';
import { DASHBOARD_APP_PATHS } from './routes/routes';
import './AppOverrides.scss';
@@ -68,6 +69,9 @@ export const Component: FC = () => {
isDrawerAvailable={!isMediumScreen && isDrawerAvailable}
isDrawerOpen={isDrawerOpen}
onDrawerButtonClick={onToggleDrawer}
+ buttons={
+
+ }
>
diff --git a/src/apps/dashboard/components/toolbar/HelpButton.tsx b/src/apps/dashboard/components/toolbar/HelpButton.tsx
new file mode 100644
index 0000000000..7a47ca9407
--- /dev/null
+++ b/src/apps/dashboard/components/toolbar/HelpButton.tsx
@@ -0,0 +1,36 @@
+import HelpOutline from '@mui/icons-material/HelpOutline';
+import IconButton from '@mui/material/IconButton/IconButton';
+import Tooltip from '@mui/material/Tooltip/Tooltip';
+import React from 'react';
+import { Route, Routes } from 'react-router-dom';
+
+import { HelpLinks } from 'apps/dashboard/constants/helpLinks';
+import globalize from 'lib/globalize';
+
+const HelpButton = () => (
+
+ {
+ HelpLinks.map(({ paths, url }) => paths.map(path => (
+
+
+
+
+
+ }
+ />
+ ))).flat()
+ }
+
+);
+
+export default HelpButton;
diff --git a/src/apps/dashboard/constants/helpLinks.ts b/src/apps/dashboard/constants/helpLinks.ts
new file mode 100644
index 0000000000..450d8c5ff2
--- /dev/null
+++ b/src/apps/dashboard/constants/helpLinks.ts
@@ -0,0 +1,51 @@
+export const HelpLinks = [
+ {
+ paths: ['/dashboard/devices'],
+ url: 'https://jellyfin.org/docs/general/server/devices'
+ }, {
+ paths: ['/dashboard/libraries'],
+ url: 'https://jellyfin.org/docs/general/server/libraries'
+ }, {
+ paths: [
+ '/dashboard/livetv',
+ '/dashboard/livetv/tuner',
+ '/dashboard/recordings'
+ ],
+ url: 'https://jellyfin.org/docs/general/server/live-tv/'
+ }, {
+ paths: ['/dashboard/livetv/guide'],
+ url: 'https://jellyfin.org/docs/general/server/live-tv/setup-guide#adding-guide-data'
+ }, {
+ paths: ['/dashboard/networking'],
+ url: 'https://jellyfin.org/docs/general/networking/'
+ }, {
+ paths: ['/dashboard/playback/transcoding'],
+ url: 'https://jellyfin.org/docs/general/server/transcoding'
+ }, {
+ paths: [
+ '/dashboard/plugins',
+ '/dashboard/plugins/catalog'
+ ],
+ url: 'https://jellyfin.org/docs/general/server/plugins/'
+ }, {
+ paths: ['/dashboard/plugins/repositories'],
+ url: 'https://jellyfin.org/docs/general/server/plugins/#repositories'
+ }, {
+ paths: ['/dashboard/settings'],
+ url: 'https://jellyfin.org/docs/general/server/settings'
+ }, {
+ paths: ['/dashboard/tasks'],
+ url: 'https://jellyfin.org/docs/general/server/tasks'
+ }, {
+ paths: ['/dashboard/users'],
+ url: 'https://jellyfin.org/docs/general/server/users/adding-managing-users'
+ }, {
+ paths: [
+ '/dashboard/users/access',
+ '/dashboard/users/parentalcontrol',
+ '/dashboard/users/password',
+ '/dashboard/users/profile'
+ ],
+ url: 'https://jellyfin.org/docs/general/server/users/'
+ }
+];
diff --git a/src/apps/dashboard/routes/playback/trickplay.tsx b/src/apps/dashboard/routes/playback/trickplay.tsx
index 859bb94c92..442111145d 100644
--- a/src/apps/dashboard/routes/playback/trickplay.tsx
+++ b/src/apps/dashboard/routes/playback/trickplay.tsx
@@ -150,7 +150,6 @@ const PlaybackTrickplay: FC = () => {
diff --git a/src/apps/dashboard/routes/users/access.tsx b/src/apps/dashboard/routes/users/access.tsx
index e55c94412a..f2394f9669 100644
--- a/src/apps/dashboard/routes/users/access.tsx
+++ b/src/apps/dashboard/routes/users/access.tsx
@@ -247,7 +247,6 @@ const UserLibraryAccess = () => {
diff --git a/src/apps/dashboard/routes/users/add.tsx b/src/apps/dashboard/routes/users/add.tsx
index 920d38691f..e5d670c49a 100644
--- a/src/apps/dashboard/routes/users/add.tsx
+++ b/src/apps/dashboard/routes/users/add.tsx
@@ -188,7 +188,6 @@ const UserNew = () => {
diff --git a/src/apps/dashboard/routes/users/index.tsx b/src/apps/dashboard/routes/users/index.tsx
index c1348714e3..e0b3f4d5dd 100644
--- a/src/apps/dashboard/routes/users/index.tsx
+++ b/src/apps/dashboard/routes/users/index.tsx
@@ -170,7 +170,6 @@ const UserProfiles = () => {
btnClassName='fab submit sectionTitleButton'
btnTitle='ButtonAddUser'
btnIcon='add'
- url='https://jellyfin.org/docs/general/server/users/adding-managing-users'
/>
diff --git a/src/apps/dashboard/routes/users/parentalcontrol.tsx b/src/apps/dashboard/routes/users/parentalcontrol.tsx
index 20e338b603..8af285d836 100644
--- a/src/apps/dashboard/routes/users/parentalcontrol.tsx
+++ b/src/apps/dashboard/routes/users/parentalcontrol.tsx
@@ -362,7 +362,6 @@ const UserParentalControl = () => {
@@ -406,7 +405,6 @@ const UserParentalControl = () => {
btnClassName='fab submit sectionTitleButton'
btnTitle='Add'
btnIcon='add'
- isLinkVisible={false}
/>
{globalize.translate('AllowContentWithTagsHelp')}
@@ -431,7 +429,6 @@ const UserParentalControl = () => {
btnClassName='fab submit sectionTitleButton'
btnTitle='Add'
btnIcon='add'
- isLinkVisible={false}
/>
{globalize.translate('BlockContentWithTagsHelp')}
@@ -455,7 +452,6 @@ const UserParentalControl = () => {
btnClassName='fab submit sectionTitleButton'
btnTitle='Add'
btnIcon='add'
- isLinkVisible={false}
/>
{globalize.translate('HeaderAccessScheduleHelp')}
diff --git a/src/apps/dashboard/routes/users/password.tsx b/src/apps/dashboard/routes/users/password.tsx
index 7aa6fbc0b7..41f1fb4529 100644
--- a/src/apps/dashboard/routes/users/password.tsx
+++ b/src/apps/dashboard/routes/users/password.tsx
@@ -42,7 +42,6 @@ const UserPassword = () => {
diff --git a/src/apps/dashboard/routes/users/profile.tsx b/src/apps/dashboard/routes/users/profile.tsx
index 8605feaf35..fa4b077845 100644
--- a/src/apps/dashboard/routes/users/profile.tsx
+++ b/src/apps/dashboard/routes/users/profile.tsx
@@ -290,7 +290,6 @@ const UserEdit = () => {
diff --git a/src/components/tvproviders/schedulesdirect.template.html b/src/components/tvproviders/schedulesdirect.template.html
index 8e8a447e9b..bdcca34f21 100644
--- a/src/components/tvproviders/schedulesdirect.template.html
+++ b/src/components/tvproviders/schedulesdirect.template.html
@@ -1,7 +1,6 @@
diff --git a/src/components/tvproviders/xmltv.template.html b/src/components/tvproviders/xmltv.template.html
index 7fedce7033..8c24139b34 100644
--- a/src/components/tvproviders/xmltv.template.html
+++ b/src/components/tvproviders/xmltv.template.html
@@ -1,7 +1,6 @@
diff --git a/src/controllers/dashboard/devices/device.html b/src/controllers/dashboard/devices/device.html
index b9a6be2727..45dd733f72 100644
--- a/src/controllers/dashboard/devices/device.html
+++ b/src/controllers/dashboard/devices/device.html
@@ -5,7 +5,6 @@