style: auto-fix lint and format

This commit is contained in:
ajnart authored and github-actions[bot] committed 2026-07-15 13:54:18 +00:00
1 parent 06db42129c
commit 51d8a3cc53
177 files changed
+7758 -6562

No files matched your search

@@ -1,37 +1,44 @@
---
title: 'AdGuard Home'
title: "AdGuard Home"
description: "AdGuard Home is a network-wide software for blocking ads and trackers, providing a safer and faster internet experience."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconAd, IconDeviceGamepad } from "@tabler/icons-react";
import { adguardHomeIntegration } from '.';
import { dnsHoleSummaryWidget } from '@site/docs/widgets/dns-hole-summary';
import { dnsHoleControlsWidget } from '@site/docs/widgets/dns-hole-controls';
import { adguardHomeIntegration } from ".";
import { dnsHoleSummaryWidget } from "@site/docs/widgets/dns-hole-summary";
import { dnsHoleControlsWidget } from "@site/docs/widgets/dns-hole-controls";
<IntegrationHeader
integration={adguardHomeIntegration}
categories={['DNS Hole']}
/>
<IntegrationHeader integration={adguardHomeIntegration} categories={["DNS Hole"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: dnsHoleSummaryWidget,
},{
widget: dnsHoleControlsWidget
}]}
items={[
{
widget: dnsHoleSummaryWidget,
},
{
widget: dnsHoleControlsWidget,
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['username', 'password'],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["username", "password"],
steps: [],
},
]}
/>
+28 -23
View File
@@ -1,40 +1,45 @@
---
title: 'Anchor'
title: "Anchor"
description: "Anchor is a self-hosted note-taking application."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { anchorIntegration } from '.';
import { anchorNoteWidget } from '@site/docs/widgets/anchor-note';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { anchorIntegration } from ".";
import { anchorNoteWidget } from "@site/docs/widgets/anchor-note";
<IntegrationHeader
integration={anchorIntegration}
categories={['Notes']}
/>
<IntegrationHeader integration={anchorIntegration} categories={["Notes"]} />
The Anchor integration lets Homarr connect to your Anchor instance so you can display and edit selected notes directly from your dashboard.
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: anchorNoteWidget
}]}
items={[
{
widget: anchorNoteWidget,
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: [
'Open your Anchor instance.',
'Generate or copy an API key from Anchor settings.',
'Paste that key into the API Key secret field in Homarr.'
]
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [
"Open your Anchor instance.",
"Generate or copy an API key from Anchor settings.",
"Paste that key into the API Key secret field in Homarr.",
],
},
]}
/>
+28 -23
View File
@@ -1,38 +1,43 @@
---
title: 'Aria2'
title: "Aria2"
description: "Lightweight multiprotocol & multi-source command-line download utility. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink"
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { aria2Integration } from '.';
import { downloadsWidget } from '@site/docs/widgets/downloads';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { aria2Integration } from ".";
import { downloadsWidget } from "@site/docs/widgets/downloads";
<IntegrationHeader
integration={aria2Integration}
categories={['Download', 'Multiprotocol', 'Multi-source']}
/>
<IntegrationHeader integration={aria2Integration} categories={["Download", "Multiprotocol", "Multi-source"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: downloadsWidget,
}]}
items={[
{
widget: downloadsWidget,
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[
{
credentials: ['apiKey'],
steps: []
},
{
credentials: [],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [],
},
{
credentials: [],
steps: [],
},
]}
/>
@@ -1,41 +1,40 @@
---
title: 'Audiobookshelf'
title: "Audiobookshelf"
description: "Audiobookshelf is a self-hosted audiobook and podcast server that lets you manage and stream your audio library."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { audiobookshelfIntegration } from '.';
import { audioStatsWidget } from '@site/docs/widgets/audio-stats';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { audiobookshelfIntegration } from ".";
import { audioStatsWidget } from "@site/docs/widgets/audio-stats";
<IntegrationHeader
integration={audiobookshelfIntegration}
categories={['Media']}
/>
<IntegrationHeader integration={audiobookshelfIntegration} categories={["Media"]} />
Audiobookshelf provides library statistics including audiobook and podcast counts, listening time, and active sessions.
### Widgets & Capabilities
<IntegrationCapabilites
items={[
{ widget: audioStatsWidget },
]}
/>
<IntegrationCapabilites items={[{ widget: audioStatsWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: [
'Open your Audiobookshelf instance',
'Go to Settings → Users',
'Click on your user account',
'Copy the API token from the user details',
]
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [
"Open your Audiobookshelf instance",
"Go to Settings → Users",
"Click on your user account",
"Copy the API token from the user details",
],
},
]}
/>
+28 -24
View File
@@ -1,31 +1,30 @@
---
title: 'Bazarr'
title: "Bazarr"
description: "Bazarr is a companion application to Sonarr and Radarr that manages and downloads subtitles."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { bazarrIntegration } from '.';
import { bazarrWidget } from '@site/docs/widgets/bazarr';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { bazarrIntegration } from ".";
import { bazarrWidget } from "@site/docs/widgets/bazarr";
<IntegrationHeader
integration={bazarrIntegration}
categories={['Subtitles', 'Media']}
/>
<IntegrationHeader integration={bazarrIntegration} categories={["Subtitles", "Media"]} />
Bazarr complements Sonarr and Radarr by managing subtitle downloads. The Homarr integration uses your Bazarr API key to fetch missing subtitle counts and health badges.
### Screenshots
import apiKeySettings from './img/api-key-settings.png';
import widgetOverview from '@site/docs/widgets/bazarr/img/widget-overview.png';
import apiKeySettings from "./img/api-key-settings.png";
import widgetOverview from "@site/docs/widgets/bazarr/img/widget-overview.png";
<div className="flex flex-col gap-4">
<div>
<p>API key location in Bazarr (<strong>Settings → General → Security</strong>):</p>
<p>
API key location in Bazarr (<strong>Settings → General → Security</strong>):
</p>
<img src={apiKeySettings} alt="bazarr-api-key-settings" width={128 * 4} />
</div>
<div>
@@ -35,20 +34,25 @@ import widgetOverview from '@site/docs/widgets/bazarr/img/widget-overview.png';
</div>
### Widgets & Capabilities
<IntegrationCapabilites
items={[{ widget: bazarrWidget }]}
/>
<IntegrationCapabilites items={[{ widget: bazarrWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
You can find your Bazarr API key under **Settings → General → Security**.
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: [
"Open Bazarr and go to Settings → General → Security.",
"Copy the API key and paste it into Homarr when creating the integration.",
],
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [
"Open Bazarr and go to Settings → General → Security.",
"Copy the API key and paste it into Homarr when creating the integration.",
],
},
]}
/>
+32 -28
View File
@@ -1,25 +1,22 @@
---
title: 'Beszel'
title: "Beszel"
description: "Beszel is a lightweight server monitoring platform with Docker stats, historical data, and alert functions."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { beszelIntegration } from '.';
import { beszelSystemStatsWidget } from '@site/docs/widgets/beszel-system-stats';
import { beszelSystemGridWidget } from '@site/docs/widgets/beszel-system-grid';
import { beszelSystemTableWidget } from '@site/docs/widgets/beszel-system-table';
import { beszelAlertsWidget } from '@site/docs/widgets/beszel-alerts';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { beszelIntegration } from ".";
import { beszelSystemStatsWidget } from "@site/docs/widgets/beszel-system-stats";
import { beszelSystemGridWidget } from "@site/docs/widgets/beszel-system-grid";
import { beszelSystemTableWidget } from "@site/docs/widgets/beszel-system-table";
import { beszelAlertsWidget } from "@site/docs/widgets/beszel-alerts";
import beszelDashboard from './img/beszel-dashboard.png';
import beszelDashboard from "./img/beszel-dashboard.png";
<IntegrationHeader
integration={beszelIntegration}
categories={['System Monitoring']}
/>
<IntegrationHeader integration={beszelIntegration} categories={["System Monitoring"]} />
Beszel monitors your servers in real time via lightweight agents, collecting CPU, memory, disk, network, GPU, temperature, and Docker container metrics. It stores historical data and supports configurable alerts.
@@ -28,26 +25,33 @@ Beszel monitors your servers in real time via lightweight agents, collecting CPU
<img src={beszelDashboard} alt="Beszel dashboard overview showing all four widgets" />
### Widgets & Capabilities
<IntegrationCapabilites
items={[
{ widget: beszelSystemStatsWidget },
{ widget: beszelSystemGridWidget },
{ widget: beszelSystemTableWidget },
{ widget: beszelAlertsWidget },
]}
items={[
{ widget: beszelSystemStatsWidget },
{ widget: beszelSystemGridWidget },
{ widget: beszelSystemTableWidget },
{ widget: beszelAlertsWidget },
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['username', 'password'],
steps: [
'Open your Beszel hub instance (default port 8090)',
'Use the same credentials you use to log in to the Beszel web UI',
]
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["username", "password"],
steps: [
"Open your Beszel hub instance (default port 8090)",
"Use the same credentials you use to log in to the Beszel web UI",
],
},
]}
/>
:::tip
Beszel uses PocketBase under the hood. The default admin credentials are set during the initial Beszel setup.
+37 -30
View File
@@ -1,29 +1,24 @@
---
title: 'Coolify'
description: 'Self-hosted PaaS and deployment platform'
title: "Coolify"
description: "Self-hosted PaaS and deployment platform"
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { coolifyIntegration } from '.';
import { coolifyWidget } from '../../widgets/coolify';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { coolifyIntegration } from ".";
import { coolifyWidget } from "../../widgets/coolify";
<IntegrationHeader
integration={coolifyIntegration}
categories={['System monitoring', 'Deployment']}
/>
<IntegrationHeader integration={coolifyIntegration} categories={["System monitoring", "Deployment"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[
{ widget: coolifyWidget }
]}
/>
<IntegrationCapabilites items={[{ widget: coolifyWidget }]} />
### Adding the integration
<AddingIntegration />
:::info URL configuration
@@ -31,16 +26,28 @@ Use the root URL of your Coolify instance, for example `https://coolify.example.
:::
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: [
'Open your Coolify instance and make sure you are in the team you want Homarr to monitor.',
(<span>Enable API access under <strong>Settings &gt; Advanced</strong> if it is disabled.</span>),
(<span>Go to <strong>Security &gt; API Tokens</strong>.</span>),
'Enter a name, e.g. "Homarr".',
(<span>Select the <code>read</code> permission. The Coolify widget only reads version, server, project, application, and service data.</span>),
'Click "Create".',
'Copy the generated token immediately. Coolify only shows it once.',
'Paste the token into the API Key field in Homarr.'
]
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [
"Open your Coolify instance and make sure you are in the team you want Homarr to monitor.",
<span>
Enable API access under <strong>Settings &gt; Advanced</strong> if it is disabled.
</span>,
<span>
Go to <strong>Security &gt; API Tokens</strong>.
</span>,
'Enter a name, e.g. "Homarr".',
<span>
Select the <code>read</code> permission. The Coolify widget only reads version, server, project, application,
and service data.
</span>,
'Click "Create".',
"Copy the generated token immediately. Coolify only shows it once.",
"Paste the token into the API Key field in Homarr.",
],
},
]}
/>
+20 -19
View File
@@ -1,32 +1,33 @@
---
title: 'Dash.'
title: "Dash."
description: "Dash. is a system performance and resource monitoring tool"
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconHeartRateMonitor } from "@tabler/icons-react";
import { dashDotIntegration } from '.';
import { healthMonitoringWidget } from '@site/docs/widgets/health-monitoring';
import { systemResourcesWidget } from '@site/docs/widgets/system-resources';
import { dashDotIntegration } from ".";
import { healthMonitoringWidget } from "@site/docs/widgets/health-monitoring";
import { systemResourcesWidget } from "@site/docs/widgets/system-resources";
<IntegrationHeader
integration={dashDotIntegration}
categories={['System monitoring']}
/>
<IntegrationHeader integration={dashDotIntegration} categories={["System monitoring"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: healthMonitoringWidget
}, {
widget: systemResourcesWidget
}]}
items={[
{
widget: healthMonitoringWidget,
},
{
widget: systemResourcesWidget,
},
]}
/>
### Adding the integration
<AddingIntegration />
<AddingIntegration />
+25 -20
View File
@@ -1,36 +1,41 @@
---
title: 'Deluge'
title: "Deluge"
description: "Deluge is a lightweight, Free Software, cross-platform BitTorrent client."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconDownload } from "@tabler/icons-react";
import Alert from '@theme/Admonition';
import { delugeIntegration } from '.';
import { downloadsWidget } from '@site/docs/widgets/downloads';
import Alert from "@theme/Admonition";
import { delugeIntegration } from ".";
import { downloadsWidget } from "@site/docs/widgets/downloads";
<IntegrationHeader
integration={delugeIntegration}
categories={['Torrent client']}
/>
<IntegrationHeader integration={delugeIntegration} categories={["Torrent client"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: downloadsWidget
}]}
items={[
{
widget: downloadsWidget,
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['password'],
steps: [],
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["password"],
steps: [],
},
]}
/>
+29 -17
View File
@@ -1,32 +1,31 @@
---
title: 'Docker'
title: "Docker"
description: "Docker is a platform where you can run your applications in containers, allowing for easy deployment and management of applications."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconBrandDocker, IconTool } from "@tabler/icons-react";
import { dockerIntegration } from '.';
import { dockerContainersWidget } from '@site/docs/widgets/docker-containers';
import { dockerIntegration } from ".";
import { dockerContainersWidget } from "@site/docs/widgets/docker-containers";
<IntegrationHeader
integration={dockerIntegration}
categories={['Containers']}
/>
<IntegrationHeader integration={dockerIntegration} categories={["Containers"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
items={[
{
widget: dockerContainersWidget,
note: "This widget can only be used with administrator privileges"
}]}
note: "This widget can only be used with administrator privileges",
},
]}
/>
## Enabling the Docker integration
This integration must first be enabled.
If you directly run on the host system and you have docker installed, it will be enabled by default.
Otherwise, you'll need to mount the [docker socket](https://docs.docker.com/engine/security/protect-access/) to the Homarr container,
@@ -49,15 +48,17 @@ services:
environment:
- SECRET_ENCRYPTION_KEY=your_64_character_hex_string # <--- can be generated with `openssl rand -hex 32`
ports:
- '7575:7575'
- "7575:7575"
```
With docker run, add this parameter: `-v /var/run/docker.sock:/var/run/docker.sock`.
In Windows, you'll need to adjust the slashes: `-v //var/run/docker.sock:/var/run/docker.sock`
### Managing your Docker containers within Homarr
Homarr allows you to interact with Docker containers running on your system.
Each container row has an action menu with the following options:
- **View logs** - opens a dedicated logs page with a live terminal
- **Start** - start a stopped container
- **Stop** - stop a running container
@@ -98,11 +99,13 @@ Currently Homarr supports one label for configuration of the containers:
- **homarr.hide:** If set to any value, the container will be hidden from the Docker Containers widget and tools page.
### Security
Mounting docker sockets can be risky, as they permit full control over your docker service.
As an example, a thread actor could abuse Homarr use the socket to start, stop or delete containers on your system.
Therefore we recommend the usage of a socket proxy, which can prohibit certain actions.
A few examples include:
- https://github.com/linuxserver/docker-socket-proxy
- https://github.com/Tecnativa/docker-socket-proxy
@@ -110,36 +113,44 @@ See documentation of the respective proxies on how to configure them.
Homarr may behave in unexpected ways when you use proxies.
#### Permissions
Homarr needs the following permissions from the Docker API:
- Containers/Start
- Containers/Stop
- Containers/Restart
- Containers/Remove
For socket proxies, you will need these permissions:
- `CONTAINERS=1`
- `POST=1`
**Caution:** `POST` access is security critical as it provides extensive capabilities to modify your docker environment. Please leave it disabled if you're concerned about this.
As a workaround, you can use [LSIO's socket proxy](https://github.com/linuxserver/docker-socket-proxy) and set the following:
- ALLOW_START=1
- ALLOW_STOP=1
- ALLOW_RESTARTS=1
These will work even with `POST=0`.
These will work even with `POST=0`.
You lose the ability to remove containers, but start, stop and restarts should work just fine.
#### Connecting to Docker via Socket Proxies
To connect to Docker via a socket proxy, you'll need to add these two environment variables in the compose file:
- `DOCKER_HOSTNAMES=<name of the socket proxy container>`
- `DOCKER_PORTS=<socket proxy port, usually 2375>`
Refer: https://homarr.dev/docs/advanced/environment-variables/
You will also need to add Homarr to the network of your socket proxy. You can do it like this:
1. Add the network to your compose file (with appropriate changes):
```yaml
networks:
socket-proxy:
@@ -148,6 +159,7 @@ networks:
```
2. Add the network to the homarr service in the compose file:
```yaml
networks:
- socket-proxy
+21 -23
View File
@@ -1,37 +1,35 @@
---
title: 'Emby'
title: "Emby"
description: "Emby is a media server platform that allows you to organize, manage, and stream your personal media collection."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconVideo, IconTicket } from "@tabler/icons-react";
import { embyIntegration } from '.';
import { mediaServerWidget } from '@site/docs/widgets/media-server';
import { mediaReleasesWidget } from '@site/docs/widgets/media-releases';
import { embyIntegration } from ".";
import { mediaServerWidget } from "@site/docs/widgets/media-server";
import { mediaReleasesWidget } from "@site/docs/widgets/media-releases";
<IntegrationHeader
integration={embyIntegration}
categories={['Media server']}
/>
<IntegrationHeader integration={embyIntegration} categories={["Media server"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[
{ widget: mediaServerWidget },
{ widget: mediaReleasesWidget }
]}
/>
<IntegrationCapabilites items={[{ widget: mediaServerWidget }, { widget: mediaReleasesWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [],
},
]}
/>
+28 -22
View File
@@ -1,37 +1,43 @@
---
title: 'Glances'
title: "Glances"
description: "Glances is a cross-platform system monitoring tool."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { glancesIntegration } from '.';
import { systemResourcesWidget } from '@site/docs/widgets/system-resources';
import { healthMonitoringWidget } from '@site/docs/widgets/health-monitoring';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { glancesIntegration } from ".";
import { systemResourcesWidget } from "@site/docs/widgets/system-resources";
import { healthMonitoringWidget } from "@site/docs/widgets/health-monitoring";
<IntegrationHeader
integration={glancesIntegration}
categories={['System Monitoring']}
/>
<IntegrationHeader integration={glancesIntegration} categories={["System Monitoring"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: systemResourcesWidget
}, {
widget: healthMonitoringWidget
}]}
items={[
{
widget: systemResourcesWidget,
},
{
widget: healthMonitoringWidget,
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: [],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: [],
steps: [],
},
]}
/>
+31 -25
View File
@@ -1,20 +1,17 @@
---
title: 'Gluetun'
description: 'Connect Gluetun to Homarr as a VPN integration.'
title: "Gluetun"
description: "Connect Gluetun to Homarr as a VPN integration."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { gluetunIntegration } from '.';
import { vpnWidget } from '@site/docs/widgets/vpn';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { gluetunIntegration } from ".";
import { vpnWidget } from "@site/docs/widgets/vpn";
<IntegrationHeader
integration={gluetunIntegration}
categories={['VPN', 'Network']}
/>
<IntegrationHeader integration={gluetunIntegration} categories={["VPN", "Network"]} />
[Gluetun](https://github.com/qdm12/gluetun) exposes a control server that Homarr can query to report the VPN tunnel
status, DNS status, public IP address, and active provider details in the VPN widget.
@@ -22,9 +19,11 @@ status, DNS status, public IP address, and active provider details in the VPN wi
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: vpnWidget,
}]}
items={[
{
widget: vpnWidget,
},
]}
/>
### Setting up the Gluetun control server
@@ -40,13 +39,20 @@ Refer to the [Gluetun control server documentation](https://github.com/qdm12/glu
Gluetun's control server can be left unprotected or secured with either an API key or HTTP Basic authentication.
Choose the option that matches how your Gluetun instance integration is set up.
<IntegrationSecrets secrets={[{
credentials: [],
steps: [],
},{
credentials: ['username', 'password'],
steps: [],
},{
credentials: ['apiKey'],
steps: [],
},,]} />
<IntegrationSecrets
secrets={[
{
credentials: [],
steps: [],
},
{
credentials: ["username", "password"],
steps: [],
},
{
credentials: ["apiKey"],
steps: [],
},
,
]}
/>
+24 -18
View File
@@ -1,33 +1,39 @@
---
title: 'Gotify'
title: "Gotify"
description: "Gotify is a simple, self-hosted server for sending and receiving messages in real time."
hide_title: true
---
import { notificationsWidget } from '@site/docs/widgets/notifications';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { gotifyIntegration } from '.';
import { notificationsWidget } from "@site/docs/widgets/notifications";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { gotifyIntegration } from ".";
<IntegrationHeader
integration={gotifyIntegration}
categories={['Notifications', 'Messaging']}
/>
<IntegrationHeader integration={gotifyIntegration} categories={["Notifications", "Messaging"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: notificationsWidget
}]}
items={[
{
widget: notificationsWidget,
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['username', 'password'],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["username", "password"],
steps: [],
},
]}
/>
@@ -1,45 +1,51 @@
---
title: 'Home Assistant'
title: "Home Assistant"
description: "Home Assistant is an open-source home automation platform that focuses on privacy and local control, allowing you to automate and control your smart home devices."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconBinaryTree } from "@tabler/icons-react";
import { homeAssistantIntegration } from '.';
import { smartHomeEntityStateWidget } from '@site/docs/widgets/smart-home-entity-state';
import { smartHomeExecuteAutomationWidget } from '@site/docs/widgets/smart-home-execute-automation';
import { homeAssistantIntegration } from ".";
import { smartHomeEntityStateWidget } from "@site/docs/widgets/smart-home-entity-state";
import { smartHomeExecuteAutomationWidget } from "@site/docs/widgets/smart-home-execute-automation";
<IntegrationHeader
integration={homeAssistantIntegration}
categories={['Smart Home', 'Automation']}
/>
<IntegrationHeader integration={homeAssistantIntegration} categories={["Smart Home", "Automation"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: smartHomeEntityStateWidget
}, {
widget: smartHomeExecuteAutomationWidget,
}]}
items={[
{
widget: smartHomeEntityStateWidget,
},
{
widget: smartHomeExecuteAutomationWidget,
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: [
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [
"Click on your profile in the bottom left corner of Home Assistant.",
"Switch to the Security tab.",
"Scroll down to the Long-lived access tokens section.",
"Click on the Create Token button.",
"Enter a name for the token (e.g., 'Homarr Integration') and click Create.",
"Copy the generated token and paste it into the Homarr integration settings.",
]
}]} />
],
},
]}
/>
+25 -19
View File
@@ -1,38 +1,44 @@
---
title: 'iCal'
title: "iCal"
description: "iCal is a standard for calendar data exchange, allowing users to share and manage calendar events across different platforms."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconZoomQuestion, IconChartBar, IconSearch } from "@tabler/icons-react";
import { icalIntegration } from '.';
import { calendarWidget } from '@site/docs/widgets/calendar';
import { icalIntegration } from ".";
import { calendarWidget } from "@site/docs/widgets/calendar";
<IntegrationHeader
integration={icalIntegration}
categories={['Calendar']}
/>
<IntegrationHeader integration={icalIntegration} categories={["Calendar"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: calendarWidget
}]}
items={[
{
widget: calendarWidget,
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['url'],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["url"],
steps: [],
},
]}
/>
## Using the iCal integration
The iCal integration allows you to add external calendars to Homarr. Any calendar that provides a public iCal URL can be integrated, such as Google Calendar, Apple Calendar, or Outlook.
The iCal integration allows you to add external calendars to Homarr. Any calendar that provides a public iCal URL can be integrated, such as Google Calendar, Apple Calendar, or Outlook.
+16 -22
View File
@@ -1,36 +1,29 @@
---
title: 'Immich'
title: "Immich"
description: "Self-hosted photo and video management solution"
hide_title: true
---
import { immichAlbumCarouselWidget } from '../../widgets/immich-album-carousel';import {
IntegrationHeader
} from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { immichIntegration } from '.';
import { immichServerStatsWidget } from '../../widgets/immich-server-stats';
import { immichAlbumCarouselWidget } from "../../widgets/immich-album-carousel";
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { immichIntegration } from ".";
import { immichServerStatsWidget } from "../../widgets/immich-server-stats";
<IntegrationHeader
integration={immichIntegration}
categories={['Photo server']}
/>
<IntegrationHeader integration={immichIntegration} categories={["Photo server"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[
{ widget: immichAlbumCarouselWidget },
{ widget: immichServerStatsWidget }
]}
/>
<IntegrationCapabilites items={[{ widget: immichAlbumCarouselWidget }, { widget: immichServerStatsWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: [
@@ -56,9 +49,10 @@ import { immichServerStatsWidget } from '../../widgets/immich-server-stats';
<code>server.about</code>.
<br />
Additional permissions may be required depending on your Immich version. If you encounter authorization errors, grant any missing permissions requested by the server.
</span>
),
'Create the integration in Homarr and copy the API key to there'
]
'Create the integration in Homarr and copy the API key to there'
]
}]} />
+25 -26
View File
@@ -1,40 +1,39 @@
---
title: 'Jellyfin'
title: "Jellyfin"
description: "Jellyfin is a free and open-source media server software that allows you to organize, manage, and share your media files."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconVideo, IconTicket } from "@tabler/icons-react";
import { jellyfinIntegration } from '.';
import { mediaServerWidget } from '@site/docs/widgets/media-server';
import { mediaReleasesWidget } from '@site/docs/widgets/media-releases';
import { jellyfinIntegration } from ".";
import { mediaServerWidget } from "@site/docs/widgets/media-server";
import { mediaReleasesWidget } from "@site/docs/widgets/media-releases";
<IntegrationHeader
integration={jellyfinIntegration}
categories={['Media server']}
/>
<IntegrationHeader integration={jellyfinIntegration} categories={["Media server"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[
{ widget: mediaServerWidget },
{ widget: mediaReleasesWidget }
]}
/>
<IntegrationCapabilites items={[{ widget: mediaServerWidget }, { widget: mediaReleasesWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: []
},{
credentials: ['username', 'password'],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [],
},
{
credentials: ["username", "password"],
steps: [],
},
]}
/>
@@ -1,45 +1,52 @@
---
title: 'Jellyseerr'
title: "Jellyseerr"
description: "Jellyseerr is a self-hosted media request management system that integrates with Jellyfin and other media servers."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconZoomQuestion, IconChartBar, IconSearch } from "@tabler/icons-react";
import { jellyseerrIntegration } from '.';
import { mediaRequestListWidget } from '@site/docs/widgets/media-request-list';
import { mediaRequestStatsWidget } from '@site/docs/widgets/media-request-stats';
import { jellyseerrIntegration } from ".";
import { mediaRequestListWidget } from "@site/docs/widgets/media-request-list";
import { mediaRequestStatsWidget } from "@site/docs/widgets/media-request-stats";
<IntegrationHeader
integration={jellyseerrIntegration}
categories={['Media requests']}
/>
<IntegrationHeader integration={jellyseerrIntegration} categories={["Media requests"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: mediaRequestListWidget,
},{
widget: mediaRequestStatsWidget,
}, {
capability: {
icon: IconSearch,
name: "Media Search",
description: "Search for movies and TV shows directly from Spotlight and request them.",
path: "../../management/search-engines/#media-request-search"
}
}]}
items={[
{
widget: mediaRequestListWidget,
},
{
widget: mediaRequestStatsWidget,
},
{
capability: {
icon: IconSearch,
name: "Media Search",
description: "Search for movies and TV shows directly from Spotlight and request them.",
path: "../../management/search-engines/#media-request-search",
},
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [],
},
]}
/>
@@ -1,20 +1,16 @@
---
title: 'Kubernetes'
title: "Kubernetes"
description: "Kubernetes is a powerful container orchestration platform that automates the deployment, scaling, and management of containerized applications."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconBrandDocker, IconTool } from "@tabler/icons-react";
import { kubernetesIntegration } from '.';
import { kubernetesIntegration } from ".";
<IntegrationHeader
integration={kubernetesIntegration}
categories={['Containers']}
/>
<IntegrationHeader integration={kubernetesIntegration} categories={["Containers"]} />
Homarr provides a user-friendly Kubernetes dashboard that offers an overview of your cluster’s resources in a clear and structured interface. It allows users to view key Kubernetes objects, including `Pods`, `Services`, `Ingresses`, `Nodes`, `ConfigMaps`, `Secrets`, `Namespaces`, and `Volumes`, as well as basic metrics when the Kubernetes Metrics Server is enabled.
@@ -47,7 +43,7 @@ Enabling RBAC in the Helm chart creates the necessary Kubernetes Role-Based Acce
- Service Account: A dedicated service account for Homarr.
- Role & RoleBinding: Grants permissions within a specific namespace to list, watch, and get pods, services, secrets, configmaps, and more.
- ClusterRole & ClusterRoleBinding: Extends the same permissions cluster-wide for additional flexibility.
:::
:::
### Homarr Dashboard Overview
+24 -19
View File
@@ -1,35 +1,40 @@
---
title: 'Lidarr'
title: "Lidarr"
description: "Lidarr is a music management tool that automates the process of downloading, sorting, and renaming music."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconCalendar } from "@tabler/icons-react";
import { lidarrIntegration } from '.';
import { calendarWidget } from '@site/docs/widgets/calendar';
import { lidarrIntegration } from ".";
import { calendarWidget } from "@site/docs/widgets/calendar";
<IntegrationHeader
integration={lidarrIntegration}
categories={['Media manager', "Servarr"]}
/>
<IntegrationHeader integration={lidarrIntegration} categories={["Media manager", "Servarr"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: calendarWidget
}]}
items={[
{
widget: calendarWidget,
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [],
},
]}
/>
+23 -24
View File
@@ -1,39 +1,38 @@
---
title: 'Navidrome'
title: "Navidrome"
description: "Navidrome is a self-hosted music server and streamer compatible with the Subsonic API."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { navidromeIntegration } from '.';
import { audioStatsWidget } from '@site/docs/widgets/audio-stats';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { navidromeIntegration } from ".";
import { audioStatsWidget } from "@site/docs/widgets/audio-stats";
<IntegrationHeader
integration={navidromeIntegration}
categories={['Media']}
/>
<IntegrationHeader integration={navidromeIntegration} categories={["Media"]} />
Navidrome provides music library statistics including artist, album, and song counts, as well as now playing information via the Subsonic API.
### Widgets & Capabilities
<IntegrationCapabilites
items={[
{ widget: audioStatsWidget },
]}
/>
<IntegrationCapabilites items={[{ widget: audioStatsWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['username', 'password'],
steps: [
'Use the same credentials you use to log in to Navidrome',
'The user must have access to the Subsonic API (enabled by default)',
]
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["username", "password"],
steps: [
"Use the same credentials you use to log in to Navidrome",
"The user must have access to the Subsonic API (enabled by default)",
],
},
]}
/>
+29 -26
View File
@@ -1,40 +1,43 @@
---
title: 'Nextcloud'
title: "Nextcloud"
description: "Nextcloud is a self-hosted productivity platform that provides file storage, collaboration tools, and more."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconCalendar } from "@tabler/icons-react";
import Alert from '@theme/Admonition';
import { nextcloudIntegration } from '.';
import { calendarWidget } from '@site/docs/widgets/calendar';
import { notificationsWidget } from '@site/docs/widgets/notifications';
import Alert from "@theme/Admonition";
import { nextcloudIntegration } from ".";
import { calendarWidget } from "@site/docs/widgets/calendar";
import { notificationsWidget } from "@site/docs/widgets/notifications";
<IntegrationHeader
integration={nextcloudIntegration}
categories={['Calendar', 'Notifications']}
/>
<IntegrationHeader integration={nextcloudIntegration} categories={["Calendar", "Notifications"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[
{ widget: calendarWidget },
{ widget: notificationsWidget }
]}
/>
<IntegrationCapabilites items={[{ widget: calendarWidget }, { widget: notificationsWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['username', 'password'],
steps: [],
header: <Alert type="info">
Users who use 2FA will have to use Nextcloud's App Password tool to grant Homarr access, as 2FA breaks the traditional process. For more information, see [Nextcloud's Documentation](https://docs.nextcloud.com/server/stable/admin_manual/configuration_user/authentication.html#app-passwords)
</Alert>,
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["username", "password"],
steps: [],
header: (
<Alert type="info">
Users who use 2FA will have to use Nextcloud's App Password tool to grant Homarr access, as 2FA breaks the
traditional process. For more information, see [Nextcloud's
Documentation](https://docs.nextcloud.com/server/stable/admin_manual/configuration_user/authentication.html#app-passwords)
</Alert>
),
},
]}
/>
+28 -21
View File
@@ -1,37 +1,44 @@
---
title: 'Ntfy'
title: "Ntfy"
description: "Ntfy is a simple, open-source notification service that allows you to send and receive notifications across devices."
hide_title: true
---
import { notificationsWidget } from '@site/docs/widgets/notifications';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { notificationsWidget } from "@site/docs/widgets/notifications";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { IconMessage } from "@tabler/icons-react";
import { ntfyIntegration } from '.';
import { ntfyIntegration } from ".";
<IntegrationHeader
integration={ntfyIntegration}
categories={['Notifications', 'Messaging']}
/>
<IntegrationHeader integration={ntfyIntegration} categories={["Notifications", "Messaging"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: notificationsWidget
}]}
items={[
{
widget: notificationsWidget,
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['topic'],
steps: []
}, {
credentials: ['topic', 'apiKey'],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["topic"],
steps: [],
},
{
credentials: ["topic", "apiKey"],
steps: [],
},
]}
/>
+25 -20
View File
@@ -1,36 +1,41 @@
---
title: 'NZBGet'
title: "NZBGet"
description: "NZBGet is a lightweight and efficient Usenet downloader."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconDownload } from "@tabler/icons-react";
import { nzbgetIntegration } from '.';
import Alert from '@theme/Admonition';
import { downloadsWidget } from '@site/docs/widgets/downloads';
import { nzbgetIntegration } from ".";
import Alert from "@theme/Admonition";
import { downloadsWidget } from "@site/docs/widgets/downloads";
<IntegrationHeader
integration={nzbgetIntegration}
categories={['Usenet client']}
/>
<IntegrationHeader integration={nzbgetIntegration} categories={["Usenet client"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: downloadsWidget,
}]}
items={[
{
widget: downloadsWidget,
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['username', 'password'],
steps: [],
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["username", "password"],
steps: [],
},
]}
/>
@@ -1,42 +1,52 @@
---
title: 'Open Media Vault'
title: "Open Media Vault"
description: "Open Media Vault is a free network-attached storage server based on the Debian operating system."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconHeartRateMonitor } from "@tabler/icons-react";
import { openMediaVaultIntegration } from '.';
import Alert from '@theme/Admonition'
import { healthMonitoringWidget } from '@site/docs/widgets/health-monitoring';
import { systemResourcesWidget } from '@site/docs/widgets/system-resources';
import { openMediaVaultIntegration } from ".";
import Alert from "@theme/Admonition";
import { healthMonitoringWidget } from "@site/docs/widgets/health-monitoring";
import { systemResourcesWidget } from "@site/docs/widgets/system-resources";
<IntegrationHeader
integration={openMediaVaultIntegration}
categories={['System monitoring']}
/>
<IntegrationHeader integration={openMediaVaultIntegration} categories={["System monitoring"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: healthMonitoringWidget,
note: "To use this widget, you must have the OpenMediaVault plugin openmediavault-cputemp installed.",
}, {
widget: systemResourcesWidget
}]}
items={[
{
widget: healthMonitoringWidget,
note: "To use this widget, you must have the OpenMediaVault plugin openmediavault-cputemp installed.",
},
{
widget: systemResourcesWidget,
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['username', 'password'],
steps: [],
body: <Alert type="caution">
The user used here must have administrative permissions or Homarr won't be able to read the system performance and resource data.
</Alert>
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["username", "password"],
steps: [],
body: (
<Alert type="caution">
The user used here must have administrative permissions or Homarr won't be able to read the system performance
and resource data.
</Alert>
),
},
]}
/>
+47 -37
View File
@@ -1,65 +1,75 @@
---
title: 'OPNsense'
title: "OPNsense"
description: "OPNsense is an open-source, easy-to-use, and easy-to-build firewall and routing platform."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconHeartRateMonitor } from "@tabler/icons-react";
import { opnsenseIntegration } from '.';
import Alert from '@theme/Admonition'
import { firewallWidget } from '../../widgets/firewall';
import { opnsenseIntegration } from ".";
import Alert from "@theme/Admonition";
import { firewallWidget } from "../../widgets/firewall";
<IntegrationHeader
integration={opnsenseIntegration}
categories={['Firewall']}
/>
<IntegrationHeader integration={opnsenseIntegration} categories={["Firewall"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: firewallWidget,
}]}
items={[
{
widget: firewallWidget,
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
tabLabel: "ApiKey (Key & Secret)",
credentials: ['opnsenseApiKey', 'opnsenseApiSecret'],
header: <Alert type="info">
This integration does not require full API access to the firewall. The following guide outlines the process for creating a restricted OPNsense user with a scrambled password, designed exclusively for API access. This ensures minimal permissions and prevents local login capability.
</Alert>,
steps: [
<IntegrationSecrets
secrets={[
{
tabLabel: "ApiKey (Key & Secret)",
credentials: ["opnsenseApiKey", "opnsenseApiSecret"],
header: (
<Alert type="info">
This integration does not require full API access to the firewall. The following guide outlines the process
for creating a restricted OPNsense user with a scrambled password, designed exclusively for API access. This
ensures minimal permissions and prevents local login capability.
</Alert>
),
steps: [
"Log in to the OPNsense web interface as an administrator",
"Navigate to System → Access → Users",
"Click the + (Add) button to create a new user",
<>
Fill in the user details:
<ul>
<li>Username: Enter a unique name</li>
<li>Password: Leave empty</li>
<li>Scrambled Password: Enable this option</li>
<li>Full name: (Optional) Add a descriptive name</li>
</ul>
Fill in the user details:
<ul>
<li>Username: Enter a unique name</li>
<li>Password: Leave empty</li>
<li>Scrambled Password: Enable this option</li>
<li>Full name: (Optional) Add a descriptive name</li>
</ul>
</>,
<>
In Privileges section → Select the option below:
<ul>
<li>Lobby: Dashboard</li>
<li>Reporting: Traffic</li>
</ul>
In Privileges section → Select the option below:
<ul>
<li>Lobby: Dashboard</li>
<li>Reporting: Traffic</li>
</ul>
</>,
"Click Save",
"Return to the Users list",
"Find the user and click the ticket icon in the Commands column",
"Click Yes in the popup to confirm",
"A txt file will download automatically, containing: Key and Secret",
"Save this file securely—this information will only be shown once"
],
}]} />
"Save this file securely—this information will only be shown once",
],
},
]}
/>
+36 -29
View File
@@ -1,45 +1,52 @@
---
title: 'Overseerr'
title: "Overseerr"
description: "Overseerr is a self-hosted media request management system that integrates with Plex."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconZoomQuestion, IconChartBar, IconSearch } from "@tabler/icons-react";
import { overseerrIntegration } from '.';
import { mediaRequestListWidget } from '@site/docs/widgets/media-request-list';
import { mediaRequestStatsWidget } from '@site/docs/widgets/media-request-stats';
import { overseerrIntegration } from ".";
import { mediaRequestListWidget } from "@site/docs/widgets/media-request-list";
import { mediaRequestStatsWidget } from "@site/docs/widgets/media-request-stats";
<IntegrationHeader
integration={overseerrIntegration}
categories={['Media requests']}
/>
<IntegrationHeader integration={overseerrIntegration} categories={["Media requests"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: mediaRequestListWidget
}, {
widget: mediaRequestStatsWidget
}, {
capability: {
icon: IconSearch,
name: "Media Search",
description: "Search for movies and TV shows directly from Spotlight and request them.",
path: "../../management/search-engines/#media-request-search"
}
}]}
items={[
{
widget: mediaRequestListWidget,
},
{
widget: mediaRequestStatsWidget,
},
{
capability: {
icon: IconSearch,
name: "Media Search",
description: "Search for movies and TV shows directly from Spotlight and request them.",
path: "../../management/search-engines/#media-request-search",
},
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [],
},
]}
/>
@@ -1,41 +1,40 @@
---
title: 'Paperless-ngx'
title: "Paperless-ngx"
description: "Paperless-ngx is a document management system that transforms your physical documents into a searchable online archive."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { paperlessNgxIntegration } from '.';
import { paperlessNgxWidget } from '@site/docs/widgets/paperless-ngx';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { paperlessNgxIntegration } from ".";
import { paperlessNgxWidget } from "@site/docs/widgets/paperless-ngx";
<IntegrationHeader
integration={paperlessNgxIntegration}
categories={['Documents']}
/>
<IntegrationHeader integration={paperlessNgxIntegration} categories={["Documents"]} />
Paperless-ngx provides document statistics including total documents, inbox count, correspondents, tags, and document types.
### Widgets & Capabilities
<IntegrationCapabilites
items={[
{ widget: paperlessNgxWidget },
]}
/>
<IntegrationCapabilites items={[{ widget: paperlessNgxWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: [
'Open your Paperless-ngx instance',
'Navigate to Settings → Django Admin → Tokens',
'Create a new token for your user',
'Copy the token value',
]
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [
"Open your Paperless-ngx instance",
"Navigate to Settings → Django Admin → Tokens",
"Create a new token for your user",
"Copy the token value",
],
},
]}
/>
+25 -26
View File
@@ -1,43 +1,42 @@
---
title: 'PatchMon'
title: "PatchMon"
description: "PatchMon is a patch management and monitoring solution for Linux hosts."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { patchmonIntegration } from '.';
import { patchmonWidget } from '@site/docs/widgets/patchmon';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { patchmonIntegration } from ".";
import { patchmonWidget } from "@site/docs/widgets/patchmon";
<IntegrationHeader
integration={patchmonIntegration}
categories={['Health Monitoring']}
/>
<IntegrationHeader integration={patchmonIntegration} categories={["Health Monitoring"]} />
PatchMon provides host and package update statistics including total hosts, hosts needing updates, and security update counts.
The PatchMon widget requires users to be **signed in to Homarr**; see the [PatchMon widget documentation](/docs/widgets/patchmon#authentication) for details on authentication and public boards.
### Widgets & Capabilities
<IntegrationCapabilites
items={[
{ widget: patchmonWidget },
]}
/>
<IntegrationCapabilites items={[{ widget: patchmonWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['patchmonApiKey', 'patchmonApiSecret'],
steps: [
'Open your PatchMon instance',
'Navigate to Settings and create a new GetHomepage API key',
'Copy the API key and secret from the success dialog',
'Paste them into Homarr — Basic authentication is handled automatically',
]
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["patchmonApiKey", "patchmonApiSecret"],
steps: [
"Open your PatchMon instance",
"Navigate to Settings and create a new GetHomepage API key",
"Copy the API key and secret from the success dialog",
"Paste them into Homarr — Basic authentication is handled automatically",
],
},
]}
/>
+31 -26
View File
@@ -1,48 +1,53 @@
---
title: 'PeaNUT'
description: 'A tiny dashboard for Network UPS Tools (NUT) servers.'
title: "PeaNUT"
description: "A tiny dashboard for Network UPS Tools (NUT) servers."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { peaNutIntegration } from '.';
import { upsWidget } from '@site/docs/widgets/ups';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { peaNutIntegration } from ".";
import { upsWidget } from "@site/docs/widgets/ups";
<IntegrationHeader
integration={peaNutIntegration}
categories={['UPS', 'Hardware']}
/>
<IntegrationHeader integration={peaNutIntegration} categories={["UPS", "Hardware"]} />
[PeaNUT](https://github.com/Brandawg93/PeaNUT) exposes the data of your [Network UPS Tools](https://networkupstools.org/) servers
over a REST API, which Homarr reads to display the status of your UPS devices.
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
items={[
{
widget: upsWidget,
}]}
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
PeaNUT secures its API with HTTP Basic authentication when the `WEB_USERNAME` and `WEB_PASSWORD` environment variables
are set on the PeaNUT instance. Provide the same credentials here. If the instance runs with `AUTH_DISABLED=true`, no
secrets are required.
<IntegrationSecrets secrets={[{
credentials: ['username', 'password'],
steps: [
"Set WEB_USERNAME and WEB_PASSWORD on your PeaNUT instance.",
"Create an integration in Homarr with the PeaNUT URL and those credentials.",
],
},{
credentials: [],
steps: [
"If PeaNUT runs with AUTH_DISABLED=true, create the integration with no credentials.",
],
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["username", "password"],
steps: [
"Set WEB_USERNAME and WEB_PASSWORD on your PeaNUT instance.",
"Create an integration in Homarr with the PeaNUT URL and those credentials.",
],
},
{
credentials: [],
steps: ["If PeaNUT runs with AUTH_DISABLED=true, create the integration with no credentials."],
},
]}
/>
+36 -29
View File
@@ -1,47 +1,54 @@
---
title: 'Pi-hole'
title: "Pi-hole"
description: "Pi-hole is a network-wide ad blocker that acts as a DNS sinkhole, blocking unwanted content and improving your browsing experience."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconAd, IconDeviceGamepad } from "@tabler/icons-react";
import Alert from '@theme/Admonition';
import { dnsHoleSummaryWidget } from '@site/docs/widgets/dns-hole-summary';
import { dnsHoleControlsWidget } from '@site/docs/widgets/dns-hole-controls';
import { piHoleIntegration } from '.';
import Alert from "@theme/Admonition";
import { dnsHoleSummaryWidget } from "@site/docs/widgets/dns-hole-summary";
import { dnsHoleControlsWidget } from "@site/docs/widgets/dns-hole-controls";
import { piHoleIntegration } from ".";
<IntegrationHeader integration={piHoleIntegration} categories={["DNS Hole"]} />
<IntegrationHeader
integration={piHoleIntegration}
categories={['DNS Hole']}
/>
<Alert type="note" className='my-2'>
Homarr supports both Pi-hole v5 and v6. It automatically detects the version and uses the correct API.
<Alert type="note" className="my-2">
Homarr supports both Pi-hole v5 and v6. It automatically detects the version and uses the correct API.
</Alert>
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: dnsHoleSummaryWidget,
},{
widget: dnsHoleControlsWidget
}]}
items={[
{
widget: dnsHoleSummaryWidget,
},
{
widget: dnsHoleControlsWidget,
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: [],
body: "Please note, that in v6 of Pi-hole you no longer specify an API key, but instead either a password or application password. We suggest to use the application password when possible."
}, {
credentials: [],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [],
body: "Please note, that in v6 of Pi-hole you no longer specify an API key, but instead either a password or application password. We suggest to use the application password when possible.",
},
{
credentials: [],
steps: [],
},
]}
/>
+32 -26
View File
@@ -1,41 +1,47 @@
---
title: 'Plex'
title: "Plex"
description: "Plex is a media server platform that allows you to organize, manage, and stream your personal media collection."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconVideo, IconTicket } from "@tabler/icons-react";
import { plexIntegration } from '.';
import { mediaServerWidget } from '@site/docs/widgets/media-server';
import { mediaReleasesWidget } from '@site/docs/widgets/media-releases';
import { plexIntegration } from ".";
import { mediaServerWidget } from "@site/docs/widgets/media-server";
import { mediaReleasesWidget } from "@site/docs/widgets/media-releases";
<IntegrationHeader
integration={plexIntegration}
categories={['Media server']}
/>
<IntegrationHeader integration={plexIntegration} categories={["Media server"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[
{ widget: mediaServerWidget },
{ widget: mediaReleasesWidget }
]}
/>
<IntegrationCapabilites items={[{ widget: mediaServerWidget }, { widget: mediaReleasesWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: [
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [
<span>
Follow the official <a href="https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/" target="_blank" rel="noopener noreferrer">Plex documentation</a> to find your authentication token.
</span>
]
}]} />
Follow the official{" "}
<a
href="https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/"
target="_blank"
rel="noopener noreferrer"
>
Plex documentation
</a>{" "}
to find your authentication token.
</span>,
],
},
]}
/>
+20 -18
View File
@@ -1,32 +1,34 @@
---
title: 'Prowlarr'
title: "Prowlarr"
description: "Prowlarr is an indexer manager for Usenet and BitTorrent, providing a unified interface to manage your indexers."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconHeartRateMonitor } from "@tabler/icons-react";
import { prowlarrIntegration } from '.';
import { indexerManagerWidget } from '@site/docs/widgets/indexer-manager';
import { prowlarrIntegration } from ".";
import { indexerManagerWidget } from "@site/docs/widgets/indexer-manager";
<IntegrationHeader
integration={prowlarrIntegration}
categories={['Indexer']}
/>
<IntegrationHeader integration={prowlarrIntegration} categories={["Indexer"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{ widget: indexerManagerWidget }]}
/>
<IntegrationCapabilites items={[{ widget: indexerManagerWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [],
},
]}
/>
+70 -66
View File
@@ -1,103 +1,107 @@
---
title: 'Proxmox'
title: "Proxmox"
description: "Proxmox is a powerful open-source virtualization platform that allows you to run virtual machines and containers."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconHeartRateMonitor } from "@tabler/icons-react";
import { proxmoxIntegration } from '.';
import Alert from '@theme/Admonition'
import { healthMonitoringWidget } from '@site/docs/widgets/health-monitoring';
import { systemResourcesWidget } from '@site/docs/widgets/system-resources';
import { proxmoxIntegration } from ".";
import Alert from "@theme/Admonition";
import { healthMonitoringWidget } from "@site/docs/widgets/health-monitoring";
import { systemResourcesWidget } from "@site/docs/widgets/system-resources";
<IntegrationHeader
integration={proxmoxIntegration}
categories={['System monitoring']}
/>
<IntegrationHeader integration={proxmoxIntegration} categories={["System monitoring"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[
{ widget: healthMonitoringWidget },
]}
/>
<IntegrationCapabilites items={[{ widget: healthMonitoringWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
header: <Alert type="caution">
The Proxmox API may not work with Linux PAM standard authentication. It is strongly recommended to use the Proxmox VE authentication server realm when creating your API user.
</Alert>,
credentials: ['username', 'tokenId', 'realm', 'apiKey'],
steps: [
<IntegrationSecrets
secrets={[
{
header: (
<Alert type="caution">
The Proxmox API may not work with Linux PAM standard authentication. It is strongly recommended to use the
Proxmox VE authentication server realm when creating your API user.
</Alert>
),
credentials: ["username", "tokenId", "realm", "apiKey"],
steps: [
"Navigate to the Proxmox portal, click on Datacenter",
"Expand Permissions, click on Groups",
"Click the Create button",
"Name the group something informative, like api-users",
"Click on the Permissions 'folder'",
<>
Click Add {"->"} Group Permission
<ul>
<li>Path: /</li>
<li>Group: group from Step 4 above</li>
<li>Role: PVEAuditor</li>
<li>Propagate: Checked</li>
</ul>
Click Add {"->"} Group Permission
<ul>
<li>Path: /</li>
<li>Group: group from Step 4 above</li>
<li>Role: PVEAuditor</li>
<li>Propagate: Checked</li>
</ul>
</>,
"Expand Permissions, click on Users",
<>
Click the Add button
<ul>
<li>User name: something informative like api</li>
<li>Realm: Proxmox VE authentication server</li>
<li>Password: create a secure password for the user</li>
<li>Confirm Password: re-enter the password</li>
<li>Group: group from Step 4 above</li>
</ul>
Click the Add button
<ul>
<li>User name: something informative like api</li>
<li>Realm: Proxmox VE authentication server</li>
<li>Password: create a secure password for the user</li>
<li>Confirm Password: re-enter the password</li>
<li>Group: group from Step 4 above</li>
</ul>
</>,
"Expand Permissions, click on API Tokens",
<>
Click the Add button
<ul>
<li>User: user from Step 8 above</li>
<li>Token ID: something informative like the application or purpose like homarr</li>
<li>Privilege Separation: unchecked</li>
</ul>
Click the Add button
<ul>
<li>User: user from Step 8 above</li>
<li>Token ID: something informative like the application or purpose like homarr</li>
<li>Privilege Separation: unchecked</li>
</ul>
</>,
"Copy the Secret that is shown in Step 10 because it is only shown once",
"Go back to the 'Permissions' menu",
<>
Click Add {"->"} API Token Permission
<ul>
<li>Path: /</li>
<li>API Token: select the API token created in Step 10</li>
<li>Role: PVE Auditor</li>
<li>Propagate: Checked</li>
</ul>
Click Add {"->"} API Token Permission
<ul>
<li>Path: /</li>
<li>API Token: select the API token created in Step 10</li>
<li>Role: PVE Auditor</li>
<li>Propagate: Checked</li>
</ul>
</>,
],
body: <>
<span>
Sometimes you'll also find the <code>api@pve!homarr</code> format,
within Homarr you'll have to split it up into:
</span>
<ul>
],
body: (
<>
<span>
Sometimes you'll also find the <code>api@pve!homarr</code> format, within Homarr you'll have to split it up
into:
</span>
<ul>
<li>
<b>Username:</b> api
<b>Username:</b> api
</li>
<li>
<b>Realm:</b> pve
<b>Realm:</b> pve
</li>
<li>
<b>Token ID:</b> homarr
<b>Token ID:</b> homarr
</li>
</ul>
</>
}]} />
</ul>
</>
),
},
]}
/>
@@ -1,37 +1,39 @@
---
title: 'qBittorrent'
title: "qBittorrent"
description: "qBittorrent is a free and open-source BitTorrent client."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconDownload } from "@tabler/icons-react";
import { qBittorentIntegration } from '.';
import Alert from '@theme/Admonition';
import { downloadsWidget } from '@site/docs/widgets/downloads';
import { qBittorentIntegration } from ".";
import Alert from "@theme/Admonition";
import { downloadsWidget } from "@site/docs/widgets/downloads";
<IntegrationHeader
integration={qBittorentIntegration}
categories={['Torrent client']}
/>
<IntegrationHeader integration={qBittorentIntegration} categories={["Torrent client"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{ widget: downloadsWidget }]}
/>
<IntegrationCapabilites items={[{ widget: downloadsWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: []
},{
credentials: ['username', 'password'],
steps: [],
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [],
},
{
credentials: ["username", "password"],
steps: [],
},
]}
/>
+20 -19
View File
@@ -1,33 +1,34 @@
---
title: 'Radarr'
title: "Radarr"
description: "Radarr is a movie management tool that automates the process of downloading, sorting, and renaming movies."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconCalendar } from "@tabler/icons-react";
import { radarrIntegration } from '.';
import { calendarWidget } from '@site/docs/widgets/calendar';
import { radarrIntegration } from ".";
import { calendarWidget } from "@site/docs/widgets/calendar";
<IntegrationHeader
integration={radarrIntegration}
categories={['Media manager', "Servarr"]}
/>
<IntegrationHeader integration={radarrIntegration} categories={["Media manager", "Servarr"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{ widget: calendarWidget }]}
/>
<IntegrationCapabilites items={[{ widget: calendarWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [],
},
]}
/>
+20 -19
View File
@@ -1,33 +1,34 @@
---
title: 'Readarr'
title: "Readarr"
description: "Readarr is a book management tool that automates the process of downloading, sorting, and renaming books."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconCalendar } from "@tabler/icons-react";
import { readarrIntegration } from '.';
import { calendarWidget } from '@site/docs/widgets/calendar';
import { readarrIntegration } from ".";
import { calendarWidget } from "@site/docs/widgets/calendar";
<IntegrationHeader
integration={readarrIntegration}
categories={['Media manager', "Servarr"]}
/>
<IntegrationHeader integration={readarrIntegration} categories={["Media manager", "Servarr"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{ widget: calendarWidget }]}
/>
<IntegrationCapabilites items={[{ widget: calendarWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [],
},
]}
/>
+21 -20
View File
@@ -1,34 +1,35 @@
---
title: 'SABnzbd'
title: "SABnzbd"
description: "SABnzbd is an Open Source Binary Newsreader."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconDownload } from "@tabler/icons-react";
import { sabnzbdIntegration } from '.';
import Alert from '@theme/Admonition';
import { downloadsWidget } from '@site/docs/widgets/downloads';
import { sabnzbdIntegration } from ".";
import Alert from "@theme/Admonition";
import { downloadsWidget } from "@site/docs/widgets/downloads";
<IntegrationHeader
integration={sabnzbdIntegration}
categories={['Usenet client']}
/>
<IntegrationHeader integration={sabnzbdIntegration} categories={["Usenet client"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{ widget: downloadsWidget}]}
/>
<IntegrationCapabilites items={[{ widget: downloadsWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: [],
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [],
},
]}
/>
+36 -29
View File
@@ -1,45 +1,52 @@
---
title: 'Seerr'
title: "Seerr"
description: "Seerr is a self-hosted media request management system that integrates with various media servers."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconZoomQuestion, IconChartBar, IconSearch } from "@tabler/icons-react";
import { seerrIntegration } from '.';
import { mediaRequestListWidget } from '@site/docs/widgets/media-request-list';
import { mediaRequestStatsWidget } from '@site/docs/widgets/media-request-stats';
import { seerrIntegration } from ".";
import { mediaRequestListWidget } from "@site/docs/widgets/media-request-list";
import { mediaRequestStatsWidget } from "@site/docs/widgets/media-request-stats";
<IntegrationHeader
integration={seerrIntegration}
categories={['Media requests']}
/>
<IntegrationHeader integration={seerrIntegration} categories={["Media requests"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: mediaRequestListWidget
}, {
widget: mediaRequestStatsWidget
}, {
capability: {
icon: IconSearch,
name: "Media Search",
description: "Search for movies and TV shows directly from Spotlight and request them.",
path: "../../management/search-engines/#media-request-search"
}
}]}
items={[
{
widget: mediaRequestListWidget,
},
{
widget: mediaRequestStatsWidget,
},
{
capability: {
icon: IconSearch,
name: "Media Search",
description: "Search for movies and TV shows directly from Spotlight and request them.",
path: "../../management/search-engines/#media-request-search",
},
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [],
},
]}
/>
+24 -19
View File
@@ -1,34 +1,39 @@
---
title: 'Slskd'
title: "Slskd"
description: "A modern client-server application for the Soulseek file sharing network."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { slskdIntegration } from '.';
import { downloadsWidget } from '@site/docs/widgets/downloads';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { slskdIntegration } from ".";
import { downloadsWidget } from "@site/docs/widgets/downloads";
<IntegrationHeader
integration={slskdIntegration}
categories={['System Monitoring']}
/>
<IntegrationHeader integration={slskdIntegration} categories={["System Monitoring"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: downloadsWidget
}]}
items={[
{
widget: downloadsWidget,
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ["apiKey"],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [],
},
]}
/>
+20 -19
View File
@@ -1,33 +1,34 @@
---
title: 'Sonarr'
title: "Sonarr"
description: "Sonarr is a TV series management tool that automates the process of downloading, sorting, and renaming episodes."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconCalendar } from "@tabler/icons-react";
import { sonarrIntegration } from '.';
import { calendarWidget } from '@site/docs/widgets/calendar';
import { sonarrIntegration } from ".";
import { calendarWidget } from "@site/docs/widgets/calendar";
<IntegrationHeader
integration={sonarrIntegration}
categories={['Media manager', "Servarr"]}
/>
<IntegrationHeader integration={sonarrIntegration} categories={["Media manager", "Servarr"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{ widget: calendarWidget }]}
/>
<IntegrationCapabilites items={[{ widget: calendarWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [],
},
]}
/>
@@ -1,34 +1,39 @@
---
title: 'Speedtest Tracker'
description: 'Speedtest Tracker is a self-hosted internet performance tracking application.'
title: "Speedtest Tracker"
description: "Speedtest Tracker is a self-hosted internet performance tracking application."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { speedtestTrackerIntegration } from '.';
import { speedtestTrackerWidget } from '@site/docs/widgets/speedtest-tracker';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { speedtestTrackerIntegration } from ".";
import { speedtestTrackerWidget } from "@site/docs/widgets/speedtest-tracker";
<IntegrationHeader
integration={speedtestTrackerIntegration}
categories={['Speedtest']}
/>
<IntegrationHeader integration={speedtestTrackerIntegration} categories={["Speedtest"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: speedtestTrackerWidget
}]}
items={[
{
widget: speedtestTrackerWidget,
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [],
},
]}
/>
@@ -19,11 +19,7 @@ import Alert from "@theme/Admonition";
### Widgets & Capabilities
<IntegrationCapabilites
items={[
{ widget: healthMonitoringWidget },
{ widget: systemResourcesWidget },
{ widget: systemDisksWidget },
]}
items={[{ widget: healthMonitoringWidget }, { widget: systemResourcesWidget }, { widget: systemDisksWidget }]}
/>
### Supported metrics
+24 -22
View File
@@ -1,36 +1,38 @@
---
title: 'Tdarr'
title: "Tdarr"
description: "Tdarr is a distributed media transcoding system that allows you to process and optimize your media files across multiple nodes."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconTransform } from "@tabler/icons-react";
import { tdarrIntegration } from '.';
import { mediaTranscodingWidget } from '@site/docs/widgets/media-transcoding';
import { tdarrIntegration } from ".";
import { mediaTranscodingWidget } from "@site/docs/widgets/media-transcoding";
<IntegrationHeader
integration={tdarrIntegration}
categories={['Media Transcoding']}
/>
<IntegrationHeader integration={tdarrIntegration} categories={["Media Transcoding"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{ widget: mediaTranscodingWidget }]}
/>
<IntegrationCapabilites items={[{ widget: mediaTranscodingWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: []
}, {
credentials: [],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [],
},
{
credentials: [],
steps: [],
},
]}
/>
@@ -1,62 +1,72 @@
---
title: 'Technitium DNS'
title: "Technitium DNS"
description: "Technitium DNS Server is a self-hosted DNS server with ad-blocking and network-wide filtering capabilities."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import Alert from '@theme/Admonition';
import { technitiumDnsIntegration } from '.';
import { dnsHoleSummaryWidget } from '@site/docs/widgets/dns-hole-summary';
import { dnsHoleControlsWidget } from '@site/docs/widgets/dns-hole-controls';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import Alert from "@theme/Admonition";
import { technitiumDnsIntegration } from ".";
import { dnsHoleSummaryWidget } from "@site/docs/widgets/dns-hole-summary";
import { dnsHoleControlsWidget } from "@site/docs/widgets/dns-hole-controls";
<IntegrationHeader
integration={technitiumDnsIntegration}
categories={['DNS Hole']}
/>
<IntegrationHeader integration={technitiumDnsIntegration} categories={["DNS Hole"]} />
<Alert type="note" className='my-2'>
Homarr supports Technitium DNS v11 and above. The correct API version is detected automatically - no manual configuration is required.
<Alert type="note" className="my-2">
Homarr supports Technitium DNS v11 and above. The correct API version is detected automatically - no manual
configuration is required.
</Alert>
### Widgets & Capabilities
<IntegrationCapabilites
items={[{
widget: dnsHoleSummaryWidget,
},{
widget: dnsHoleControlsWidget
}]}
items={[
{
widget: dnsHoleSummaryWidget,
},
{
widget: dnsHoleControlsWidget,
},
]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<Alert type="info" className='my-2'>
The **API token** option is recommended. API tokens are non-expiring and do not require storing your admin password in Homarr.
Username and password authentication uses a session token that expires after inactivity, triggering a silent re-login on the next request.
<Alert type="info" className="my-2">
The **API token** option is recommended. API tokens are non-expiring and do not require storing your admin password in
Homarr. Username and password authentication uses a session token that expires after inactivity, triggering a silent
re-login on the next request.
</Alert>
<Alert type="warning" className='my-2'>
The **DNS Hole Controls** widget (enabling, disabling, and timed disabling of blocking) requires the token to have settings-level permissions.
The **DNS Hole Summary** widget (stats only) works with any valid token.
If Homarr cannot read the blocking status due to insufficient permissions, the status indicator will be hidden but statistics will still be shown.
<Alert type="warning" className="my-2">
The **DNS Hole Controls** widget (enabling, disabling, and timed disabling of blocking) requires the token to have
settings-level permissions. The **DNS Hole Summary** widget (stats only) works with any valid token. If Homarr cannot
read the blocking status due to insufficient permissions, the status indicator will be hidden but statistics will
still be shown.
</Alert>
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: [
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [
"Open the Technitium DNS web console and sign in.",
"Click on your username in the top-right corner and select \"Create API Token\".",
"Give the token a name (e.g. \"Homarr\") and click \"Create Token\".",
"Copy the generated token and paste it into the API Key field in Homarr."
]
}, {
credentials: ['username', 'password'],
steps: [],
body: "Enter your Technitium DNS admin credentials. Homarr will exchange them for a session token and transparently re-authenticate when the session expires."
}]} />
'Click on your username in the top-right corner and select "Create API Token".',
'Give the token a name (e.g. "Homarr") and click "Create Token".',
"Copy the generated token and paste it into the API Key field in Homarr.",
],
},
{
credentials: ["username", "password"],
steps: [],
body: "Enter your Technitium DNS admin credentials. Homarr will exchange them for a session token and transparently re-authenticate when the session expires.",
},
]}
/>
+23 -24
View File
@@ -1,38 +1,37 @@
---
title: 'Tracearr'
title: "Tracearr"
description: "Tracearr is a comprehensive media monitoring solution that tracks streams, user activity, and policy violations in your media server (including Plex, Jellyfin, Emby)."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { tracearrIntegration } from '.';
import { tracearrWidget } from '@site/docs/widgets/tracearr';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { tracearrIntegration } from ".";
import { tracearrWidget } from "@site/docs/widgets/tracearr";
<IntegrationHeader
integration={tracearrIntegration}
categories={['Media Monitoring']}
/>
<IntegrationHeader integration={tracearrIntegration} categories={["Media Monitoring"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[
{ widget: tracearrWidget }
]}
/>
<IntegrationCapabilites items={[{ widget: tracearrWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: [
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [
<span>
In Tracearr, go to <strong>Settings → API</strong> and generate or copy your API key.
</span>
]
}]} />
In Tracearr, go to <strong>Settings → API</strong> and generate or copy your API key.
</span>,
],
},
]}
/>
@@ -1,34 +1,35 @@
---
title: 'Transmission'
title: "Transmission"
description: "A Fast, Easy and Free Bittorrent Client."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconDownload } from "@tabler/icons-react";
import { transmissionIntegration } from '.';
import Alert from '@theme/Admonition';
import { downloadsWidget } from '@site/docs/widgets/downloads';
import { transmissionIntegration } from ".";
import Alert from "@theme/Admonition";
import { downloadsWidget } from "@site/docs/widgets/downloads";
<IntegrationHeader
integration={transmissionIntegration}
categories={['Torrent client']}
/>
<IntegrationHeader integration={transmissionIntegration} categories={["Torrent client"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[{ widget: downloadsWidget }]}
/>
<IntegrationCapabilites items={[{ widget: downloadsWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['username', 'password'],
steps: [],
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["username", "password"],
steps: [],
},
]}
/>
+47 -41
View File
@@ -1,61 +1,67 @@
---
title: 'TrueNAS'
title: "TrueNAS"
description: "Enterprise network-attached storage for your home, office, and cloud."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { truenasIntegration } from '.';
import { systemResourcesWidget } from '@site/docs/widgets/system-resources';
import { healthMonitoringWidget } from '@site/docs/widgets/health-monitoring';
import Alert from '@theme/Admonition';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { truenasIntegration } from ".";
import { systemResourcesWidget } from "@site/docs/widgets/system-resources";
import { healthMonitoringWidget } from "@site/docs/widgets/health-monitoring";
import Alert from "@theme/Admonition";
<IntegrationHeader
integration={truenasIntegration}
categories={['NAS', 'Hardware']}
/>
<IntegrationHeader integration={truenasIntegration} categories={["NAS", "Hardware"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[
{ widget: healthMonitoringWidget },
{ widget: systemResourcesWidget },
]}
/>
<IntegrationCapabilites items={[{ widget: healthMonitoringWidget }, { widget: systemResourcesWidget }]} />
### Adding the integration
<AddingIntegration />
<Alert type="info" title="Use the HTTPS address">
TrueNAS only serves its API over HTTPS, so enter the <code>https://</code> URL of your TrueNAS web interface. If it uses a self-signed certificate (the default), add it under <a href="/docs/management/certificates">Management &gt; Tools &gt; Certificates</a> so Homarr can establish the connection.
TrueNAS only serves its API over HTTPS, so enter the <code>https://</code> URL of your TrueNAS web interface. If it
uses a self-signed certificate (the default), add it under{" "}
<a href="/docs/management/certificates">Management &gt; Tools &gt; Certificates</a> so Homarr can establish the
connection.
</Alert>
### Secrets
<IntegrationSecrets secrets={[
<IntegrationSecrets
secrets={[
{
credentials: ['apiKey'],
header: <Alert type="tip" title="Recommended">
API key authentication is the recommended method. It works across current TrueNAS versions and does not depend on user group membership.
</Alert>,
steps: [
"In the TrueNAS web interface, click your user avatar in the top-right corner and select \"API Keys\".",
"Click \"Add\", give the key a name such as \"Homarr\", and confirm.",
"Copy the generated key immediately - TrueNAS only shows it once - and paste it as the API Key when creating the integration in Homarr.",
],
credentials: ["apiKey"],
header: (
<Alert type="tip" title="Recommended">
API key authentication is the recommended method. It works across current TrueNAS versions and does not depend
on user group membership.
</Alert>
),
steps: [
'In the TrueNAS web interface, click your user avatar in the top-right corner and select "API Keys".',
'Click "Add", give the key a name such as "Homarr", and confirm.',
"Copy the generated key immediately - TrueNAS only shows it once - and paste it as the API Key when creating the integration in Homarr.",
],
},
{
credentials: ['username', 'password'],
steps: [
"In the TrueNAS web interface, go to \"Credentials\" > \"Users\" > \"Add\" and create a user with a secure password.",
"Grant the user administrative access so Homarr can read system, pool, and reporting data.",
"Save the user and create the integration in Homarr with these credentials.",
],
body: <Alert type="caution" title="Administrative access required">
The account must have administrative API access. The <code>auxiliary_administrator</code> group was removed in TrueNAS 25.10; on that version or newer, use API key authentication instead, or assign the user a full-admin role.
</Alert>,
credentials: ["username", "password"],
steps: [
'In the TrueNAS web interface, go to "Credentials" > "Users" > "Add" and create a user with a secure password.',
"Grant the user administrative access so Homarr can read system, pool, and reporting data.",
"Save the user and create the integration in Homarr with these credentials.",
],
body: (
<Alert type="caution" title="Administrative access required">
The account must have administrative API access. The <code>auxiliary_administrator</code> group was removed in
TrueNAS 25.10; on that version or newer, use API key authentication instead, or assign the user a full-admin
role.
</Alert>
),
},
]} />
]}
/>
+36 -37
View File
@@ -1,53 +1,52 @@
---
title: 'Umami'
description: 'Privacy-focused, open-source web analytics'
title: "Umami"
description: "Privacy-focused, open-source web analytics"
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { umamiIntegration } from '.';
import { umamiWidget } from '../../widgets/umami';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { umamiIntegration } from ".";
import { umamiWidget } from "../../widgets/umami";
<IntegrationHeader
integration={umamiIntegration}
categories={['Analytics']}
/>
<IntegrationHeader integration={umamiIntegration} categories={["Analytics"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[
{ widget: umamiWidget }
]}
/>
<IntegrationCapabilites items={[{ widget: umamiWidget }]} />
### Adding the integration
<AddingIntegration />
:::tip URL configuration
- **Umami Cloud:** Use `https://api.umami.is/v1`
- **Self-hosted:** Use `http://your-umami-host:3000/api`
:::
:::
### Secrets
<IntegrationSecrets secrets={[
{
credentials: ['apiKey'],
steps: [
'Log in to your Umami instance (or Umami Cloud at https://cloud.umami.is)',
'Open Settings → API Keys',
'Click "Create API key"',
'Enter a name, e.g. "Homarr", and save',
'Copy the generated API key into Homarr',
]
},
{
credentials: ['username', 'password'],
steps: [
'Use the username and password of your Umami account',
'Note: username/password auth is for self-hosted instances only - Umami Cloud requires an API key',
]
}
]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [
"Log in to your Umami instance (or Umami Cloud at https://cloud.umami.is)",
"Open Settings → API Keys",
'Click "Create API key"',
'Enter a name, e.g. "Homarr", and save',
"Copy the generated API key into Homarr",
],
},
{
credentials: ["username", "password"],
steps: [
"Use the username and password of your Umami account",
"Note: username/password auth is for self-hosted instances only - Umami Cloud requires an API key",
],
},
]}
/>
@@ -1,40 +1,40 @@
---
title: 'Unifi Controller'
title: "Unifi Controller"
description: "Unifi Controller is a network management platform for Unifi devices."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import {IntegrationSecrets} from '@site/src/components/integrations/secrets';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { IconTopologyFull } from "@tabler/icons-react";
import { unifiControllerIntegration } from '.';
import { networkControllerSummaryWidget } from '@site/docs/widgets/network-controller-summary';
import { networkControllerStatusWidget } from '@site/docs/widgets/network-controller-status';
import { unifiControllerIntegration } from ".";
import { networkControllerSummaryWidget } from "@site/docs/widgets/network-controller-summary";
import { networkControllerStatusWidget } from "@site/docs/widgets/network-controller-status";
<IntegrationHeader
integration={unifiControllerIntegration}
categories={['Network controller']}
/>
<IntegrationHeader integration={unifiControllerIntegration} categories={["Network controller"]} />
This integration is using the [node-unifi](https://www.npmjs.com/package/node-unifi) library under the hood to connect to the Unifi Controller.
Therfore it should support CloudKey Gen1, CloudKey Gen2, UnifiOS-based UDM-Pro controllers as well as self-hosted UniFi controllers.
### Widgets & Capabilities
<IntegrationCapabilites
items={[
{ widget: networkControllerSummaryWidget },
{ widget: networkControllerStatusWidget}
]}
items={[{ widget: networkControllerSummaryWidget }, { widget: networkControllerStatusWidget }]}
/>
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['username', 'password'],
steps: []
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["username", "password"],
steps: [],
},
]}
/>
+53 -41
View File
@@ -1,59 +1,71 @@
---
title: 'Unraid'
title: "Unraid"
description: "Versatile operating system that lets you run applications, virtual machines, and storage devices on your server"
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { unraidIntegration } from '.';
import { systemResourcesWidget } from '@site/docs/widgets/system-resources';
import { healthMonitoringWidget } from '@site/docs/widgets/health-monitoring';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { unraidIntegration } from ".";
import { systemResourcesWidget } from "@site/docs/widgets/system-resources";
import { healthMonitoringWidget } from "@site/docs/widgets/health-monitoring";
import imgManagement from "./imgs/unraid-management.png";
import imgCreateApiKey from "./imgs/unraid-create-api-key.png";
import imgCopyApiKey from "./imgs/copy-api-key.png";
import imgSelectApikeyPreset from "./imgs/unraid-select-api-key-preset.png";
<IntegrationHeader
integration={unraidIntegration}
categories={['NAS', 'Hardware']}
/>
<IntegrationHeader integration={unraidIntegration} categories={["NAS", "Hardware"]} />
### Widgets & Capabilities
<IntegrationCapabilites
items={[
{ widget: healthMonitoringWidget },
{ widget: systemResourcesWidget },
]}
/>
<IntegrationCapabilites items={[{ widget: healthMonitoringWidget }, { widget: systemResourcesWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['apiKey'],
steps: [
<span>Are you using Unraid pre-7.2? If yes, please first <a href={"https://docs.unraid.net/API/#plugin-installation-pre-72-and-advanced-users"} target={"_blank"}>follow the steps here to install the Unraid API</a>.</span>,
<>
<span>Open the settings and open the management access</span><br/>
<img src={imgManagement} alt="Unraid management" style={{ height: 160 }} />
</>,
<>
<span>Click on the "API Keys" tab at the top and click on the "create API key" button. Choose "Create new"</span><br/>
<img src={imgCreateApiKey} alt="Unraid management" style={{ height: 120 }} />
</>,
<>
<span>Enter a suitable name for your API key (e.g. Homarr), select the "Viewer" preset and submit the modal.</span><br/>
<img src={imgSelectApikeyPreset} alt="Unraid management" style={{ height: 350 }} />
</>,
<>
<span>Last, copy the API key after your API key has been created</span><br/>
<img src={imgCopyApiKey} alt="Unraid management" style={{ height: 200 }} />
</>
],
}]} />
<IntegrationSecrets
secrets={[
{
credentials: ["apiKey"],
steps: [
<span>
Are you using Unraid pre-7.2? If yes, please first{" "}
<a href={"https://docs.unraid.net/API/#plugin-installation-pre-72-and-advanced-users"} target={"_blank"}>
follow the steps here to install the Unraid API
</a>
.
</span>,
<>
<span>Open the settings and open the management access</span>
<br />
<img src={imgManagement} alt="Unraid management" style={{ height: 160 }} />
</>,
<>
<span>
Click on the "API Keys" tab at the top and click on the "create API key" button. Choose "Create new"
</span>
<br />
<img src={imgCreateApiKey} alt="Unraid management" style={{ height: 120 }} />
</>,
<>
<span>
Enter a suitable name for your API key (e.g. Homarr), select the "Viewer" preset and submit the modal.
</span>
<br />
<img src={imgSelectApikeyPreset} alt="Unraid management" style={{ height: 350 }} />
</>,
<>
<span>Last, copy the API key after your API key has been created</span>
<br />
<img src={imgCopyApiKey} alt="Unraid management" style={{ height: 200 }} />
</>,
],
},
]}
/>
@@ -1,43 +1,42 @@
---
title: 'Uptime Kuma'
title: "Uptime Kuma"
description: "Uptime Kuma is a self-hosted monitoring tool that tracks the availability of your services and websites."
hide_title: true
---
import { IntegrationHeader } from '@site/src/components/integrations/header';
import { IntegrationCapabilites } from '@site/src/components/integrations/widgets';
import { AddingIntegration } from '@site/src/components/integrations/adding';
import { IntegrationSecrets } from '@site/src/components/integrations/secrets';
import { uptimeKumaIntegration } from '.';
import { uptimeKumaWidget } from '@site/docs/widgets/uptime-kuma';
import { IntegrationHeader } from "@site/src/components/integrations/header";
import { IntegrationCapabilites } from "@site/src/components/integrations/widgets";
import { AddingIntegration } from "@site/src/components/integrations/adding";
import { IntegrationSecrets } from "@site/src/components/integrations/secrets";
import { uptimeKumaIntegration } from ".";
import { uptimeKumaWidget } from "@site/docs/widgets/uptime-kuma";
<IntegrationHeader
integration={uptimeKumaIntegration}
categories={['Monitoring']}
/>
<IntegrationHeader integration={uptimeKumaIntegration} categories={["Monitoring"]} />
Uptime Kuma monitors the availability of your services and provides uptime statistics through its status page API.
### Widgets & Capabilities
<IntegrationCapabilites
items={[
{ widget: uptimeKumaWidget },
]}
/>
<IntegrationCapabilites items={[{ widget: uptimeKumaWidget }]} />
### Adding the integration
<AddingIntegration />
### Secrets
<IntegrationSecrets secrets={[{
credentials: ['slug'],
steps: [
'Navigate to your Uptime Kuma instance',
'Go to Status Pages and create or select a status page',
<IntegrationSecrets
secrets={[
{
credentials: ["slug"],
steps: [
"Navigate to your Uptime Kuma instance",
"Go to Status Pages and create or select a status page",
'The slug is the URL path of your status page (e.g. "default" for /status/default)',
]
}]} />
],
},
]}
/>
:::tip
If you don't specify a slug, Homarr will use `default` as the status page slug.