docs: streamline release v2 documentation (#6760)
No files matched your search
@@ -13,17 +13,8 @@ import { airQualityWidget } from ".";
|
||||
|
||||
<WidgetHeader widget={airQualityWidget} categories={["Health", "Weather"]} />
|
||||
|
||||
The Air Quality & UV widget shows the current air quality index for a selected location. It adds the UV index,
|
||||
dominant pollutant, particulate matter and the highest available pollen reading as space allows. Open the advanced
|
||||
view for a 24-hour AQI and UV chart, all available pollutant and pollen readings, and seven-day daily maxima.
|
||||
|
||||
Select the European or US AQI scale, or use the automatic setting. Automatic uses the US scale for viewers whose
|
||||
locale region is the United States and the European scale everywhere else. The selected scale stays in widget options
|
||||
instead of being repeated beside every reading. Pollen values are individual measured concentrations; the widget does
|
||||
not combine them into a single pollen index.
|
||||
|
||||
The categories and colors summarize published index bands and are not medical advice. Pollutant concentrations use
|
||||
micrograms per cubic meter (`µg/m³`), and pollen uses grains per cubic meter.
|
||||
The Air Quality & UV widget shows current and forecast AQI, UV, pollutant, and pollen data for a location. Choose the
|
||||
European or US AQI scale; automatic mode uses the US scale for US locales and the European scale elsewhere.
|
||||
|
||||
<WidgetInteractionGuide />
|
||||
|
||||
@@ -37,11 +28,8 @@ micrograms per cubic meter (`µg/m³`), and pollen uses grains per cubic meter.
|
||||
|
||||
### Data source
|
||||
|
||||
Homarr uses the free Open-Meteo Air Quality API. The widget refreshes active data every 15 minutes and requests a
|
||||
seven-day forecast for European AQI, US AQI, UV, particulate matter, ozone, nitrogen dioxide, sulphur dioxide, carbon
|
||||
monoxide, and available alder, birch, grass, mugwort, olive and ragweed pollen. Identical location requests reuse the
|
||||
server response for 15 minutes. If a refresh fails, Homarr can keep a recent successful response visible for up to 24
|
||||
hours instead of replacing it with an empty state.
|
||||
Data comes from the Open-Meteo Air Quality API and refreshes every 15 minutes. A recent successful response can remain
|
||||
visible for up to 24 hours when the API is unavailable.
|
||||
|
||||
Set `NO_EXTERNAL_CONNECTION=true` to disable this and other internet-backed requests. If you need to allowlist the
|
||||
service, use `https://air-quality-api.open-meteo.com`.
|
||||
|
Before Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 5.7 KiB |
@@ -11,25 +11,8 @@ import { appWidget } from ".";
|
||||
|
||||
<WidgetHeader widget={appWidget} categories={["Links", "Apps"]} />
|
||||
|
||||
The app widget allows you to add a link to an application or a website that you want to access quickly from your Homarr board. Compact tiles retain the familiar title, optional description, and centered app icon proportions.
|
||||
It also supports a status check to indicate whether Homarr can reach the application or website.
|
||||
|
||||
### Screenshots
|
||||
|
||||
import githubApp from "./img/github.png";
|
||||
import jellyseerrApp from "./img/jellyseerr-description-tooltip.png";
|
||||
import piHoleApp from "./img/pi-hole-ping-icon.png";
|
||||
|
||||
<div className="flex gap-1">
|
||||
<img src={githubApp} alt="app github with-status-check" width={128 * 1.5} height={128 * 1.5} />
|
||||
<img src={piHoleApp} alt="app pi-hole with-status-check status-check-icon" width={128 * 1.5} height={128 * 1.5} />
|
||||
<img src={jellyseerrApp} alt="app jellyseerr with-description-tooltip" height={128 * 1.5} />
|
||||
</div>
|
||||
|
||||
### Interactions
|
||||
|
||||
App tiles stay compact and open their configured destination directly. They do not use the shared widget context menu;
|
||||
configure the app and its status check from the tile's edit actions.
|
||||
The App widget opens an application or website and can show whether Homarr can reach it. Configure the target and status
|
||||
check from the tile's edit actions.
|
||||
|
||||
### Adding the widget
|
||||
|
||||
|
||||
@@ -14,7 +14,8 @@ import { archiveTeamWarriorWidget } from ".";
|
||||
|
||||
<WidgetHeader widget={archiveTeamWarriorWidget} categories={["Archiving", "Monitoring"]} />
|
||||
|
||||
Use this widget to see what your ArchiveTeam Warrior is preserving without leaving Homarr. The compact view keeps the current project, runner state, job counts, bandwidth, and optional broadcast message visible. Advanced view adds the complete active-job list, job start times, project and bandwidth-session identifiers, session transfer totals, exact update time, and the full broadcast message whenever one is available. A failed refresh keeps the last snapshot visible with a stale-data warning.
|
||||
The ArchiveTeam Warrior widget shows the current project, runner state, jobs, bandwidth, and broadcast message. Advanced
|
||||
view adds active-job and session details. A failed refresh keeps the last snapshot with a stale-data warning.
|
||||
|
||||
### Supported integration
|
||||
|
||||
|
||||
@@ -1,36 +1,21 @@
|
||||
---
|
||||
title: "Assistant"
|
||||
description: "Have a complete assistant conversation directly on a board."
|
||||
description: "Have an Assistant conversation directly on a board."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { AddingWidget } from "@site/src/components/widgets/adding";
|
||||
import { WidgetHeader } from "@site/src/components/widgets/header";
|
||||
import { assistantWidget } from ".";
|
||||
import assistantWidgetImage from "../../management/img/assistant-widget.png";
|
||||
|
||||
<WidgetHeader widget={assistantWidget} categories={["Productivity"]} />
|
||||
|
||||
The Assistant widget puts the app-wide assistant on a board. It uses the same active conversation as the user-menu and
|
||||
command-menu surfaces, so messages and approvals stay synchronized.
|
||||
The Assistant widget provides the same active conversation as the app-wide Assistant. Messages, tool calls, and
|
||||
approvals stay synchronized between surfaces.
|
||||
|
||||
An administrator must first configure and enable Assistant in **Management → Assistant**. Signed-out users are prompted
|
||||
to sign in, while an incomplete or disabled configuration shows an unavailable state.
|
||||
|
||||
<img
|
||||
src={assistantWidgetImage}
|
||||
alt="Assistant widget embedded on a dashboard with its conversation header, automatic approvals control, model selector, and composer"
|
||||
style={{ maxWidth: "100%" }}
|
||||
/>
|
||||
An administrator must first configure [Assistant](/docs/management/assistant). Short widget layouts show an action to
|
||||
open the full Assistant instead of compressing the conversation.
|
||||
|
||||
### Adding the widget
|
||||
|
||||
<AddingWidget />
|
||||
|
||||
The default size is ten columns by four rows and shrinks to fit narrower boards. Short layouts show an **Open
|
||||
assistant** action instead of compressing the conversation controls; increase the widget height to keep the complete
|
||||
conversation inline.
|
||||
|
||||
Responses continue when the widget leaves the viewport. Drafts and attachments remain local to each visible Assistant
|
||||
surface, and private conversation data is never stored in board settings. Normal Homarr permissions and approval rules
|
||||
still apply to every action.
|
||||
@@ -13,12 +13,8 @@ import { bookmarksWidget } from ".";
|
||||
|
||||
<WidgetHeader widget={bookmarksWidget} categories={["Links", "Apps"]} />
|
||||
|
||||
The bookmarks widget keeps direct URLs and Homarr Apps in one ordered list.
|
||||
Paste a URL and press Enter, paste several comma-separated or one-per-line URLs, or search for an existing App.
|
||||
URLs do not need an App record; Homarr uses the site's favicon and falls back to a link icon when it cannot load one.
|
||||
Bookmarks selected from Apps continue to use the App name, URL, icon, and description.
|
||||
|
||||
**Adaptive** layout is the practical default: it changes between icons, compact rows, and tiles as the widget changes shape. **Compact grid** keeps every card to a short row. Enable **Expand cards to fill row** when cards in an incomplete final row should use the remaining width. Every compact item exposes its destination on hover, while advanced view expands items into descriptive cards.
|
||||
The Bookmarks widget keeps direct URLs and Homarr Apps in one ordered list. URLs do not require an App record; Homarr
|
||||
uses the site's favicon when available. Choose adaptive, compact-grid, or other layouts from the widget configuration.
|
||||
|
||||
### Screenshots
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Calendar"
|
||||
description: "Display events from your integrations in a calendar view within a certain relative time period"
|
||||
description: "Display calendar events and upcoming media releases."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
@@ -10,9 +10,6 @@ import { WidgetHeader } from "@site/src/components/widgets/header";
|
||||
import { AddingWidget } from "@site/src/components/widgets/adding";
|
||||
import { WidgetConfig } from "@site/src/components/widgets/configuration";
|
||||
import { WidgetIntegrations } from "@site/src/components/widgets/integrations";
|
||||
import { IconAd } from "@tabler/icons-react";
|
||||
import Tabs from "@theme/Tabs";
|
||||
import TabItem from "@theme/TabItem";
|
||||
import { calendarWidget } from ".";
|
||||
import { lidarrIntegration } from "@site/docs/integrations/lidarr";
|
||||
import { nextcloudIntegration } from "@site/docs/integrations/nextcloud";
|
||||
@@ -21,58 +18,40 @@ import { radarrIntegration } from "@site/docs/integrations/radarr";
|
||||
import { readarrIntegration } from "@site/docs/integrations/readarr";
|
||||
import { sonarrIntegration } from "@site/docs/integrations/sonarr";
|
||||
import { icalIntegration } from "@site/docs/integrations/ical";
|
||||
|
||||
<WidgetHeader widget={calendarWidget} categories={["Media manager", "Servarr"]} />
|
||||
|
||||
The calendar widget shows a month view of events from different integrations.
|
||||
It allows you to view calendar events or upcoming releases from your media managers.
|
||||
Calendar requests use normal human month numbers (`1` for January through `12` for December), including when
|
||||
the same data is requested through Homarr's MCP or Assistant tools.
|
||||
|
||||
### Screenshots
|
||||
|
||||
import currentView from "./img/current-view.png";
|
||||
import advancedView from "./img/advanced-view.png";
|
||||
|
||||
<div className="flex flex-col gap-1">
|
||||
<img src={currentView} alt="Calendar month view with marked events" width={513} height={303} />
|
||||
<img src={advancedView} alt="Calendar advanced view with grouped events" width={800} height={484} />
|
||||
</div>
|
||||
<WidgetHeader widget={calendarWidget} categories={["Media manager", "Servarr"]} />
|
||||
|
||||
### Supported Integrations
|
||||
The Calendar widget combines events and upcoming releases in a month view. Advanced view shows a grouped event list with
|
||||
source, title, location, and description. Healthy integrations remain visible when another source fails.
|
||||
|
||||
### Month view
|
||||
|
||||
<img src={currentView} alt="Calendar month view with marked events" />
|
||||
|
||||
### Advanced view
|
||||
|
||||
<img src={advancedView} alt="Calendar advanced view with grouped events" />
|
||||
|
||||
### Supported integrations
|
||||
|
||||
<WidgetIntegrations
|
||||
items={[
|
||||
{
|
||||
integration: nextcloudIntegration,
|
||||
},
|
||||
{
|
||||
integration: lidarrIntegration,
|
||||
},
|
||||
{
|
||||
integration: radarrIntegration,
|
||||
},
|
||||
{
|
||||
integration: readarrIntegration,
|
||||
},
|
||||
{
|
||||
integration: sonarrIntegration,
|
||||
},
|
||||
{
|
||||
integration: icalIntegration,
|
||||
},
|
||||
{
|
||||
integration: homeAssistantIntegration,
|
||||
},
|
||||
{ integration: nextcloudIntegration },
|
||||
{ integration: lidarrIntegration },
|
||||
{ integration: radarrIntegration },
|
||||
{ integration: readarrIntegration },
|
||||
{ integration: sonarrIntegration },
|
||||
{ integration: icalIntegration },
|
||||
{ integration: homeAssistantIntegration },
|
||||
]}
|
||||
/>
|
||||
|
||||
### Interactions
|
||||
|
||||
- Colored dots directly below a date mark its events. They scale with the widget and are hidden when the calendar is too short.
|
||||
- Hover over a marked date to preview its events in a popover.
|
||||
- The advanced view replaces the month grid with a grouped event list, keeps every event attributed to its source integration, and expands titles, locations, and descriptions. Use its previous and next controls to change months.
|
||||
- If one selected integration is unavailable, its warning indicator remains visible while events from healthy integrations continue to load.
|
||||
- Hover or select a marked date to inspect its events.
|
||||
- Use advanced view to browse grouped events by month.
|
||||
|
||||
<WidgetInteractionGuide />
|
||||
|
||||
|
||||
@@ -13,27 +13,8 @@ import { clockWidget } from ".";
|
||||
|
||||
<WidgetHeader widget={clockWidget} categories={["Time"]} />
|
||||
|
||||
The clock widget displays the current date and time in a customizable format.
|
||||
|
||||
Advanced view turns it into a World Clock. The configured primary timezone stays prominent while New York, Paris, and
|
||||
Tokyo are included as secondary defaults. You can add, rename, remove, and reorder up to six cities in widget options;
|
||||
London, Sydney, and UTC are also available as quick presets.
|
||||
|
||||
The digital advanced view keeps the primary timezone prominent and presents every secondary city as a concise,
|
||||
comparable card. The primary clock includes a segmented 24-hour rail with a current-time marker, elapsed and remaining
|
||||
time, six-hour ticks, and a legend for night, dawn, day, and dusk. These phases are based on local clock time and are not
|
||||
astronomical sunrise or sunset calculations. Secondary cards stop after their localized date and timezone offsets.
|
||||
|
||||
The compact widget remains a single numeric clock. The time-format selector shows common Day.js presets with live
|
||||
examples and applies to the primary clock. Choosing a format with seconds enables second-level updates; 12-hour and
|
||||
24-hour display are selected through those same formats. The date-format selector likewise
|
||||
shows live Day.js examples and their tokens. Secondary cities always include a short localized date and a
|
||||
Yesterday, Today, or Tomorrow label relative to the primary timezone. UTC and relative offsets follow current timezone
|
||||
rules, including daylight-saving changes.
|
||||
|
||||
Weather remains optional and uses its own configured location rather than a World Clock city. Its icon is static by
|
||||
default and can be animated explicitly; reduced-motion preferences always disable animation. An unsupported saved
|
||||
timezone is identified without preventing valid clocks from rendering.
|
||||
The Date and time widget shows a configurable clock and optional weather. Advanced view adds a world clock with up to
|
||||
six named timezones. Time and date formats use Day.js tokens and follow current timezone and daylight-saving rules.
|
||||
|
||||
### Screenshots
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ import { coolifyIntegration } from "@site/docs/integrations/coolify";
|
||||
|
||||
<WidgetHeader widget={coolifyWidget} categories={["System monitoring", "Deployment"]} />
|
||||
|
||||
The Coolify widget displays a compact overview of your Coolify instance. It can show servers, applications, and services with status indicators, project and environment context, direct links to Coolify, and the installed Coolify version. Compact resource badges and footer details remain visible without height-based hiding.
|
||||
The Coolify widget shows servers, applications, and services with their status, project, environment, and Coolify links.
|
||||
|
||||
### Supported Integrations
|
||||
|
||||
@@ -27,9 +27,8 @@ The Coolify widget displays a compact overview of your Coolify instance. It can
|
||||
]}
|
||||
/>
|
||||
|
||||
Advanced view opens the Servers, Applications, and Services sections regardless of their compact visibility switches. It identifies each Coolify integration, shows server `is_reachable` and `is_usable` values, and lists applications nested in services when the API provides them. Healthy integrations remain visible if another source fails, with the failed source identified by a warning.
|
||||
|
||||
IP addresses remain masked in advanced view until you explicitly use the eye control. Public resource, Coolify dashboard, and log links retain the widget's safe new-tab handling.
|
||||
Advanced view shows all sections, source integrations, reachability fields, and nested applications. IP addresses remain
|
||||
masked until revealed. Healthy integrations remain visible when another source fails.
|
||||
|
||||
<WidgetInteractionGuide advancedView />
|
||||
|
||||
@@ -49,8 +48,4 @@ IP addresses remain masked in advanced view until you explicitly use the eye con
|
||||
| **Applications** | Lists applications with runtime status, project and environment context, public URL links, Coolify dashboard links, and log links. |
|
||||
| **Services** | Lists services with runtime status, project and environment context, public URL links, Coolify dashboard links, and log links. |
|
||||
|
||||
### Notes
|
||||
|
||||
- The widget supports one or more Coolify integrations. With multiple integrations, each instance is shown as a separate card.
|
||||
- The Coolify API token is team-scoped. Homarr only shows resources available to the team where the token was created.
|
||||
- Data is cached for 30 seconds and refreshed in the background.
|
||||
The Coolify API token is team-scoped; Homarr shows only resources available to that team.
|
||||
@@ -13,25 +13,11 @@ import { countdownWidget } from ".";
|
||||
|
||||
<WidgetHeader widget={countdownWidget} categories={["Time"]} />
|
||||
|
||||
The Countdowns widget tracks up to 20 events without an integration. Add each event in widget options, choose its local
|
||||
date and time, and select an IANA timezone. Events can be reordered by dragging them.
|
||||
The Countdowns widget tracks up to 20 one-time or yearly events without an integration. Events use an IANA timezone and
|
||||
can be reordered; the first event is shown in compact view.
|
||||
|
||||
The compact widget shows the first configured event, so dragging an event to the top selects the countdown displayed on
|
||||
the board. Advanced view uses that same event for its larger summary and preserves the configured order within its
|
||||
upcoming and completed groups. List cards keep their occurrence date at the bottom, below the optional progress bar.
|
||||
|
||||
One-time events remain completed after their target. A yearly event keeps the same local date and wall-clock time in its
|
||||
configured timezone, including when daylight-saving offsets change. A February 29 event waits until the next leap year.
|
||||
If a configured local time falls in a daylight-saving gap, the first valid time afterward is used; if it occurs twice,
|
||||
the earlier occurrence is used.
|
||||
|
||||
Progress is optional. One-time events need a start date before a percentage can be calculated. Yearly events show
|
||||
progress from the previous occurrence to the next. When enabled, seconds remain visible for every upcoming event.
|
||||
|
||||
Browser notifications are an optional local preference in advanced view and are disabled by default. Permission is
|
||||
requested only after you enable notifications, and alerts can fire once per occurrence while Homarr is open. Browser
|
||||
storage uses the board and widget identifiers to keep preferences separate and prevent duplicate alerts; clearing site
|
||||
data resets them. Widget previews do not persist alert preferences.
|
||||
Optional progress uses the configured start date. Browser notifications are local to the current browser and can fire
|
||||
only while Homarr is open.
|
||||
|
||||
<WidgetInteractionGuide />
|
||||
|
||||
|
||||
@@ -1,63 +1,34 @@
|
||||
---
|
||||
title: "Custom API"
|
||||
description: "Displays data from a custom API endpoint using configurable display types and optional JSX templates."
|
||||
description: "Displays data from a custom API using a safe JSX template."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { WidgetInteractionGuide } from "@site/src/components/widgets/interactions";
|
||||
|
||||
import { WidgetHeader } from "@site/src/components/widgets/header";
|
||||
import { AddingWidget } from "@site/src/components/widgets/adding";
|
||||
import { customApiWidget } from ".";
|
||||
|
||||
<WidgetHeader widget={customApiWidget} categories={["Custom", "API"]} />
|
||||
|
||||
A definition contains API sources, named requests, a widget options schema, and one safe JSX template.
|
||||
|
||||
Temporary inputs exist only while the tile is mounted. Homarr encrypts source credentials separately.
|
||||
|
||||
Homarr does not send these credentials to the browser. Homarr does not include them in an export.
|
||||
|
||||
<WidgetInteractionGuide advancedView={false} />
|
||||
A Custom API widget renders a saved [Custom Widget definition](/docs/management/custom-widgets). The definition provides
|
||||
API sources, named requests, widget options, and safe JSX. Credentials remain encrypted on the server.
|
||||
|
||||
### Adding the widget
|
||||
|
||||
<AddingWidget />
|
||||
|
||||
Select a definition from the searchable picker. Configure its generated widget options.
|
||||
|
||||
Select a refresh interval. The board item stores the definition ID and the validated widget option values.
|
||||
|
||||
Credentials remain on the server.
|
||||
Select a definition, configure its generated options, and choose a refresh interval.
|
||||
|
||||
:::note
|
||||
Custom API widgets must first be created in **Management → Custom Widgets** before they appear in the widget picker.
|
||||
Action buttons require the request's minimum board permission, which is `modify` by default. Anonymous viewers cannot run
|
||||
mutations. DELETE additionally requires full permission and confirmation.
|
||||
Custom Widgets must be created under **Management → Custom Widgets** before they appear in the widget picker.
|
||||
:::
|
||||
|
||||
### Permissions and actions
|
||||
### Permissions and requests
|
||||
|
||||
Each named request declares its minimum board permission. This permission does not depend on the HTTP method.
|
||||
Each request declares its minimum board permission. Public boards may run queries for anonymous viewers, but actions
|
||||
require authentication. DELETE actions require full board permission and confirmation.
|
||||
|
||||
Anonymous visitors can load queries from a Custom API widget on a public board. Definitions placed only on private
|
||||
boards remain unavailable to them.
|
||||
The refresh interval reruns load queries. Manual queries run through `SubFetch`; successful actions can invalidate their
|
||||
declared queries.
|
||||
|
||||
Queries and actions can use GET, POST, PUT, or PATCH. DELETE is valid only for actions so it can never run
|
||||
automatically while a board loads. The `kind` value controls the remaining runtime behavior.
|
||||
|
||||
A DELETE request requires full board permission and confirmation. An anonymous viewer cannot run an action.
|
||||
|
||||
Homarr disables interactive controls in board edit mode. An action runs only after a user action.
|
||||
|
||||
Mounting, refresh polling, and automatic retries do not run actions. An authoring preview simulates actions by default.
|
||||
|
||||
An administrator can enable live actions for the short preview session.
|
||||
|
||||
### Refresh behavior
|
||||
|
||||
The refresh interval runs load queries again. `SubFetch` runs manual queries.
|
||||
|
||||
Each query can declare a cache duration. A successful action can invalidate only its declared queries.
|
||||
|
||||
Read [Custom Widgets management](/docs/management/custom-widgets) for authoring, widget options, named requests, Mantine, network scopes, and security limits.
|
||||
See [Custom Widgets](/docs/management/custom-widgets) for authoring, network scopes, and security limits.
|
||||
@@ -4,15 +4,10 @@ description: "Control Pi-hole, AdGuard Home, or Technitium DNS from your dashboa
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { WidgetInteractionGuide } from "@site/src/components/widgets/interactions";
|
||||
|
||||
import { WidgetHeader } from "@site/src/components/widgets/header";
|
||||
import { AddingWidget } from "@site/src/components/widgets/adding";
|
||||
import { WidgetConfig } from "@site/src/components/widgets/configuration";
|
||||
import { WidgetIntegrations } from "@site/src/components/widgets/integrations";
|
||||
import { IconAd } from "@tabler/icons-react";
|
||||
import Tabs from "@theme/Tabs";
|
||||
import TabItem from "@theme/TabItem";
|
||||
import { dnsHoleControlsWidget } from ".";
|
||||
import { adguardHomeIntegration } from "@site/docs/integrations/adguard-home";
|
||||
import { piHoleIntegration } from "@site/docs/integrations/pi-hole";
|
||||
@@ -20,9 +15,8 @@ import { technitiumDnsIntegration } from "@site/docs/integrations/technitium-dns
|
||||
|
||||
<WidgetHeader widget={dnsHoleControlsWidget} categories={["DNS Hole"]} />
|
||||
|
||||
When several DNS integrations are selected, Homarr keeps healthy controls available if one source fails and shows a warning identifying the unavailable integration.
|
||||
|
||||
This widget lets permitted users enable, disable, or temporarily pause one or more DNS services. It shares the summary query and cache with DNS Hole Summary. Every selected source stays available in the normal scrollable view, with its familiar textual status control retained at compact heights. Bulk actions keep successful results visible and report the number of failures.
|
||||
The DNS Hole Controls widget enables, disables, or temporarily pauses one or more DNS services. Actions require Interact
|
||||
access. Healthy controls remain available when another selected integration fails.
|
||||
|
||||
### Screenshots
|
||||
|
||||
@@ -55,8 +49,6 @@ import smallSize from "./img/small.png";
|
||||
- Apply an action to all available services from the top action row. Homarr keeps successful results visible and reports how many sources failed.
|
||||
- Interaction controls only appear when the current user has permission for that integration.
|
||||
|
||||
<WidgetInteractionGuide advancedView={false} />
|
||||
|
||||
### Adding the widget
|
||||
|
||||
<AddingWidget />
|
||||
|
||||
@@ -4,22 +4,16 @@ description: "Displays the summary of your DNS Hole."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { WidgetInteractionGuide } from "@site/src/components/widgets/interactions";
|
||||
|
||||
import { WidgetHeader } from "@site/src/components/widgets/header";
|
||||
import { AddingWidget } from "@site/src/components/widgets/adding";
|
||||
import { WidgetConfig } from "@site/src/components/widgets/configuration";
|
||||
import { WidgetIntegrations } from "@site/src/components/widgets/integrations";
|
||||
import { IconAd } from "@tabler/icons-react";
|
||||
import Tabs from "@theme/Tabs";
|
||||
import TabItem from "@theme/TabItem";
|
||||
import { dnsHoleSummaryWidget } from ".";
|
||||
|
||||
<WidgetHeader widget={dnsHoleSummaryWidget} categories={["DNS Hole"]} />
|
||||
|
||||
When several DNS integrations are selected, Homarr keeps healthy sources visible if one source fails and shows a warning identifying the unavailable integration.
|
||||
|
||||
This widget combines statistics from every selected DNS service, including total queries, blocked queries, and blocklist size. Its data is cached under the same DNS query family as DNS Hole Controls, so placing both widgets on a board does not create a second integration request. When the widget has enough room, it adds a scrollable status row naming each selected source.
|
||||
The DNS Hole Summary widget combines total queries, blocked queries, and blocklist size from selected DNS services.
|
||||
Healthy sources remain visible when another integration fails.
|
||||
|
||||
### Screenshots
|
||||
|
||||
@@ -54,8 +48,6 @@ import { technitiumDnsIntegration } from "@site/docs/integrations/technitium-dns
|
||||
]}
|
||||
/>
|
||||
|
||||
<WidgetInteractionGuide advancedView={false} />
|
||||
|
||||
### Adding the widget
|
||||
|
||||
<AddingWidget />
|
||||
|
||||
@@ -7,15 +7,15 @@ hide_title: true
|
||||
import { WidgetHeader } from "@site/src/components/widgets/header";
|
||||
import { AddingWidget } from "@site/src/components/widgets/adding";
|
||||
import { WidgetConfig } from "@site/src/components/widgets/configuration";
|
||||
import { WidgetInteractionGuide } from "@site/src/components/widgets/interactions";
|
||||
import { dockerContainersWidget } from ".";
|
||||
|
||||
<WidgetHeader widget={dockerContainersWidget} categories={["Containers"]} />
|
||||
|
||||
This widget displays the resource usage of your Docker containers and allows you to manage them. Compact mode keeps every configured table column and shows the complete CPU and memory totals whenever the footer is available.
|
||||
Displays container resource usage and management actions for Docker environments configured through environment
|
||||
variables.
|
||||
|
||||
:::info
|
||||
This widget reads the Docker environments configured through environment variables. You do not need to create a Docker integration under **Management → Integrations**. The widget can only be used with administrator privileges.
|
||||
This widget does not use an integration from **Management → Integrations** and is restricted to administrators.
|
||||
:::
|
||||
|
||||
### Screenshots
|
||||
@@ -26,7 +26,7 @@ import dockerTable from "./img/table.png";
|
||||
|
||||
### Interactions
|
||||
|
||||
Hover a column header to reveal its grab handle, then drag it to reorder the table or drag the header's edge to resize it. The layout is saved automatically for each widget instance and restored after a reload. These controls are disabled while the board is in edit mode.
|
||||
Column order and width are saved per widget. These controls are unavailable while the board is in edit mode.
|
||||
|
||||
Each container row has an action menu, accessible via the three-dot icon or by right-clicking the row, with the following options:
|
||||
|
||||
@@ -35,8 +35,6 @@ Each container row has an action menu, accessible via the three-dot icon or by r
|
||||
- **Remove** - permanently remove the container after a second confirmation click
|
||||
- **Add to Homarr** - create a bookmark app from the container
|
||||
|
||||
<WidgetInteractionGuide advancedView={false} />
|
||||
|
||||
### Adding the widget
|
||||
|
||||
<AddingWidget />
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Download Client"
|
||||
description: "Allows you to view and manage your Downloads from both Torrent and Usenet clients."
|
||||
description: "View and manage downloads from Torrent and Usenet clients."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
@@ -18,127 +18,45 @@ import { WidgetConfig } from "@site/src/components/widgets/configuration";
|
||||
import { WidgetHeader } from "@site/src/components/widgets/header";
|
||||
import { WidgetIntegrations } from "@site/src/components/widgets/integrations";
|
||||
import { downloadsWidget } from ".";
|
||||
import advancedView from "./img/advanced-view.png";
|
||||
import filterPanel from "./img/filter-panel.png";
|
||||
|
||||
<WidgetHeader widget={downloadsWidget} categories={["Torrent client", "Usenet client", "Downloads"]} />
|
||||
|
||||
This widget displays torrent, Usenet, and miscellaneous download jobs, along with their progress and other relevant information. It supports 7 download client integrations and provides a rich, responsive table interface.
|
||||
The Download Client widget combines active jobs from supported Torrent, Usenet, and other download clients. Rows can be
|
||||
sorted, filtered, expanded, and configured by column. Advanced view adds queue statistics and the complete selected
|
||||
column set.
|
||||
|
||||
### Screenshots
|
||||
Pause, resume, and delete actions require Interact access to the source integration. `slskd` is list-only. If one source
|
||||
fails, jobs from healthy integrations remain available.
|
||||
|
||||
import downloadsCard from "./img/screenshot.png";
|
||||
import contextMenuImg from "./img/context-menu.png";
|
||||
import advancedViewImg from "./img/advanced-view.png";
|
||||
import filterPanelImg from "./img/filter-panel.png";
|
||||
### Advanced view
|
||||
|
||||
<div>
|
||||
<img src={downloadsCard} alt="Downloads widget showing torrent and usenet items" width={128 * 4} />
|
||||
</div>
|
||||
<img src={advancedView} alt="Downloads advanced view with queue statistics and expanded job details" />
|
||||
|
||||
#### Download-row context menu
|
||||
### Filtering
|
||||
|
||||
<div>
|
||||
<img src={contextMenuImg} alt="Downloads row context menu with pause, delete, and copy actions" width={128 * 4} />
|
||||
</div>
|
||||
<img src={filterPanel} alt="Downloads advanced view filtered by client and state" />
|
||||
|
||||
#### Advanced view
|
||||
|
||||
<div>
|
||||
<img
|
||||
src={advancedViewImg}
|
||||
alt="Downloads widget in advanced view with stats, sortable columns, and expanded details"
|
||||
width={128 * 6}
|
||||
/>
|
||||
</div>
|
||||
|
||||
#### Advanced filter panel
|
||||
|
||||
<div>
|
||||
<img src={filterPanelImg} alt="Downloads advanced view with the status filter panel open" width={128 * 6} />
|
||||
</div>
|
||||
|
||||
### Features
|
||||
|
||||
- **Responsive compact table** — in compact mode, selected columns use the established width breakpoints; widget height does not remove configured columns or the footer
|
||||
- **Sortable columns** — click any sortable column header to sort the current view; the configured default controls the initial column and direction
|
||||
- **Column customization** — choose which columns to display, then hover a header to reveal its grab handle for reordering or drag its edge to resize it; layouts save automatically per widget
|
||||
- **Download-row context menu** — copy a download name or ID from any row; pause, resume, and delete actions appear when you have Interact access to that integration
|
||||
- **Row expansion** — click any row to see full details inline without opening a separate modal
|
||||
- **Hover tooltips** — hover a download name to see size, speeds, ETA, ratio, and category; open tooltips close when switching between compact and advanced mode
|
||||
- **Global stats bar** — show queue progress, downloaded/total size, transfer speeds, global torrent ratio, and per-state counts in compact mode; advanced view always includes it
|
||||
- **Client filtering** — filter downloads by integration or status using the footer filter panel
|
||||
- **Global controls** — pause/resume actionable queues from the footer bar, limited to selected integrations where you have Interact access
|
||||
- **Status indicators** — color-coded badges show download state at a glance
|
||||
- **Speed overview** — total download and upload speeds for the selected clients are displayed in the footer
|
||||
|
||||
:::note
|
||||
|
||||
Compact layouts use their established width breakpoints: below 500px wide, speed columns are hidden; below 300px wide,
|
||||
the ETA and state columns are hidden too. Height does not remove configured columns or the footer. Advanced view bypasses
|
||||
the compact width reductions, keeps the selected column set, and always includes the stats bar and footer controls, with
|
||||
the filter panel available from the footer.
|
||||
|
||||
The filter panel changes the visible rows. Its client/status filters also change the stats bar's progress, size, and
|
||||
state counts, while transfer-speed totals summarize the selected clients and the global torrent ratio summarizes the
|
||||
selected torrent clients. The configured category/label filter can optionally be applied to the global torrent ratio
|
||||
through **Use category filter for global torrent ratio**; footer client/status filters do not change that ratio.
|
||||
|
||||
The per-item **Ratio** is sent bytes divided by the item's total size. **Global Ratio** is total uploaded bytes divided
|
||||
by total downloaded bytes.
|
||||
|
||||
Mutation controls depend on the integration's Interact permission. Users without that permission can still view rows and
|
||||
use the row menu's copy actions. `slskd` is list-only: its pause, resume, and delete operations are no-ops, so those
|
||||
controls have no effect for that client even when Interact permission exposes them.
|
||||
|
||||
The screenshot above is a Downloads row menu, separate from the shared widget context menu. When board right-click menus
|
||||
are enabled, the shared menu provides widget-level actions such as advanced view, widget options, refresh, and settings.
|
||||
|
||||
:::
|
||||
|
||||
### Supported Integrations
|
||||
### Supported integrations
|
||||
|
||||
<WidgetIntegrations
|
||||
items={[
|
||||
{
|
||||
integration: sabnzbdIntegration,
|
||||
note: "Usenet client",
|
||||
},
|
||||
{
|
||||
integration: nzbgetIntegration,
|
||||
note: "Usenet client",
|
||||
},
|
||||
{
|
||||
integration: delugeIntegration,
|
||||
note: "Torrent client",
|
||||
},
|
||||
{
|
||||
integration: transmissionIntegration,
|
||||
note: "Torrent client",
|
||||
},
|
||||
{
|
||||
integration: qBittorentIntegration,
|
||||
note: "Torrent client",
|
||||
},
|
||||
{
|
||||
integration: aria2Integration,
|
||||
note: "Multi-protocol download client",
|
||||
},
|
||||
{
|
||||
integration: slskdIntegration,
|
||||
note: "Soulseek client (list-only; mutation controls are no-ops)",
|
||||
},
|
||||
{ integration: sabnzbdIntegration, note: "Usenet client" },
|
||||
{ integration: nzbgetIntegration, note: "Usenet client" },
|
||||
{ integration: delugeIntegration, note: "Torrent client" },
|
||||
{ integration: transmissionIntegration, note: "Torrent client" },
|
||||
{ integration: qBittorentIntegration, note: "Torrent client" },
|
||||
{ integration: aria2Integration, note: "Multi-protocol download client" },
|
||||
{ integration: slskdIntegration, note: "Soulseek client; list-only" },
|
||||
]}
|
||||
/>
|
||||
|
||||
### Interactions
|
||||
|
||||
- **Right-click** any download to copy its name or ID; pause, resume, and delete are available only with Interact access
|
||||
- **Click** any row to expand it and see full download details inline
|
||||
- **Hover** a download name for a quick stats tooltip
|
||||
- **Stats toggle** — show or hide the global stats bar in compact mode; advanced view always shows the stats bar without
|
||||
changing the compact choice
|
||||
- **Pause / Resume** actionable queues using the footer controls
|
||||
- **Filter** rows by integration or status using the filter button in the footer
|
||||
- **Sort** by clicking sortable column headers; the default sort is configured per widget, while header changes apply to the current view
|
||||
- Select a row to expand its details.
|
||||
- Right-click a row to copy identifiers or run permitted actions.
|
||||
- Use the footer to filter clients and states, show statistics, or pause and resume actionable queues.
|
||||
|
||||
<WidgetInteractionGuide />
|
||||
|
||||
|
||||
@@ -16,9 +16,8 @@ import { sonarrIntegration } from "@site/docs/integrations/sonarr";
|
||||
|
||||
<WidgetHeader widget={mediaMissingWidget} categories={["Media", "Downloads"]} />
|
||||
|
||||
Monitor which movies and episodes are missing from your library, and track what is currently being downloaded. The widget pulls data from Radarr and Sonarr and groups results by type in two tabs.
|
||||
|
||||
Advanced view always shows both Missing and Queued panels side by side when space allows, requests at least 50 items per source, exposes queue status and time remaining, and keeps partial-integration warnings visible. Compact tab visibility and page-size choices continue to shape the board tile.
|
||||
The Media Missing & Queue widget shows monitored movies and episodes that are not yet available and items currently in
|
||||
the Radarr or Sonarr download queue. Advanced view shows both groups with queue status and time remaining.
|
||||
|
||||
### Screenshots
|
||||
|
||||
@@ -52,16 +51,6 @@ import widgetCompact from "./img/compact.png";
|
||||
| **Missing** | Lists movies (Radarr) and episodes (Sonarr) that are monitored but not yet available in your library. |
|
||||
| **Queued** | Shows items currently being downloaded with a progress bar and estimated time remaining. |
|
||||
|
||||
### Sizing
|
||||
|
||||
The widget adapts to its container size, so it looks good at any grid size:
|
||||
|
||||
- **Wide** — fits as many columns of cards as the width allows, filling larger widgets instead of stretching a single column.
|
||||
- **Short** — packs items into more, tighter columns so they stay visible in the limited height.
|
||||
- **Narrow (1×N)** — tab labels collapse to counts only and posters scale down.
|
||||
|
||||
Each item shows its poster art (with the artwork bleeding softly behind the card), a type badge, and — on the queue — an animated progress bar with the estimated time remaining.
|
||||
|
||||
<WidgetInteractionGuide />
|
||||
|
||||
### Adding the widget
|
||||
|
||||
@@ -17,11 +17,8 @@ import { plexIntegration } from "@site/docs/integrations/plex";
|
||||
|
||||
<WidgetHeader widget={mediaReleasesWidget} categories={["Releases", "Media"]} />
|
||||
|
||||
Provides a list of newly added media or upcoming releases from your media server. Compact rows retain their poster, full release date and time, and configured metadata.
|
||||
|
||||
Releases retain the name and icon of the integration that supplied them. If one integration is unavailable, releases from healthy integrations remain visible and a warning identifies the failed source without exposing connection details. The widget reports an error only when every selected integration fails.
|
||||
|
||||
Advanced view displays every release in a roomy poster layout with its complete available metadata, description, tags, and visible source name, regardless of the compact layout and visibility options.
|
||||
The Media releases widget shows newly added media or upcoming releases with their source, date, artwork, and configured
|
||||
metadata. Advanced view adds descriptions and tags. Healthy integrations remain visible when another source fails.
|
||||
|
||||
### Screenshots
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 48 KiB |
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Media server streams"
|
||||
description: "Show the current streams on your media servers"
|
||||
description: "Show active sessions on media servers."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
@@ -10,9 +10,6 @@ import { WidgetHeader } from "@site/src/components/widgets/header";
|
||||
import { AddingWidget } from "@site/src/components/widgets/adding";
|
||||
import { WidgetConfig } from "@site/src/components/widgets/configuration";
|
||||
import { WidgetIntegrations } from "@site/src/components/widgets/integrations";
|
||||
import { IconAd } from "@tabler/icons-react";
|
||||
import Tabs from "@theme/Tabs";
|
||||
import TabItem from "@theme/TabItem";
|
||||
import { mediaServerWidget } from ".";
|
||||
import { embyIntegration } from "@site/docs/integrations/emby";
|
||||
import { jellyfinIntegration } from "@site/docs/integrations/jellyfin";
|
||||
@@ -21,43 +18,24 @@ import { plexIntegration } from "@site/docs/integrations/plex";
|
||||
|
||||
<WidgetHeader widget={mediaServerWidget} categories={["Media server"]} />
|
||||
|
||||
The media server widget shows active sessions across your media servers.
|
||||
It shows playback progress, pause state, time remaining, the streaming resolution (e.g. `1080p`), and whether each session is direct play, direct stream, or transcoding audio or video. Location and bitrate can be toggled independently. Compact mode keeps the user, currently playing, and status columns together with the stream summary and integration names.
|
||||
The Media server streams widget combines active sessions from selected servers. It shows playback progress, resolution,
|
||||
bitrate, location, and direct-play or transcoding state according to the widget configuration. Advanced view adds search,
|
||||
sorting, and session metadata.
|
||||
|
||||
Select a session to inspect its media metadata in an anchored popover. Advanced mode adds search, sorting, location, bitrate, and a summary of playing and transcoding sessions while keeping separate integration instances identifiable. Compact visibility switches do not hide location or bitrate from the complete advanced session view.
|
||||
If one selected server is unavailable, a warning indicator identifies the degraded result while sessions from healthy servers remain usable.
|
||||
Sessions without user metadata remain visible and are labeled as an unknown user.
|
||||
Healthy integrations remain available when another source fails. Navidrome and Plex return currently playing sessions
|
||||
rather than every connected session.
|
||||
|
||||
### Screenshots
|
||||
|
||||
import mediaTable from "./img/table.png";
|
||||
import mediaAdvancedView from "./img/advanced-view.png";
|
||||
|
||||
<div className="flex flex-col gap-1">
|
||||
<img src={mediaTable} alt="Media server compact streams table" width={303} height={198} />
|
||||
<img src={mediaAdvancedView} alt="Media server advanced view with stream summary" width={800} height={484} />
|
||||
</div>
|
||||
|
||||
### Supported Integrations
|
||||
### Supported integrations
|
||||
|
||||
<WidgetIntegrations
|
||||
items={[
|
||||
{
|
||||
integration: embyIntegration,
|
||||
},
|
||||
{
|
||||
integration: jellyfinIntegration,
|
||||
},
|
||||
{
|
||||
integration: navidromeIntegration,
|
||||
note: "Will always show only currently playing audio streams, not all active sessions.",
|
||||
},
|
||||
{
|
||||
integration: plexIntegration,
|
||||
note: "Will always show only currently playing streams, not all active sessions.",
|
||||
},
|
||||
{ integration: embyIntegration },
|
||||
{ integration: jellyfinIntegration },
|
||||
{ integration: navidromeIntegration, note: "Currently playing audio only" },
|
||||
{ integration: plexIntegration, note: "Currently playing streams only" },
|
||||
]}
|
||||
/>
|
||||
|
||||
<WidgetInteractionGuide />
|
||||
|
||||
### Adding the widget
|
||||
|
||||
@@ -11,16 +11,12 @@ import { AddingWidget } from "@site/src/components/widgets/adding";
|
||||
import { WidgetConfig } from "@site/src/components/widgets/configuration";
|
||||
import { WidgetHeader } from "@site/src/components/widgets/header";
|
||||
import { WidgetIntegrations } from "@site/src/components/widgets/integrations";
|
||||
import { IconAd } from "@tabler/icons-react";
|
||||
import TabItem from "@theme/TabItem";
|
||||
import Tabs from "@theme/Tabs";
|
||||
import { networkControllerStatusWidget } from ".";
|
||||
|
||||
<WidgetHeader widget={networkControllerStatusWidget} categories={["Network controller"]} />
|
||||
|
||||
Shows connected users and connected guest devices on wired or wireless networks.
|
||||
|
||||
Compact view aggregates the configured controllers into one familiar card for the selected Wi-Fi or wired total. A failed refresh is shown as a small warning instead of replacing the totals card. Advanced view shows both totals separately for every controller, preserving each integration's name, type, and exact update time while keeping partial-source and stale-data warnings visible.
|
||||
The Network Status widget shows connected users and guests on wired or wireless networks. Advanced view separates totals
|
||||
by controller. Healthy controllers remain visible when another source fails.
|
||||
|
||||
### Screenshots
|
||||
|
||||
|
||||
@@ -8,17 +8,14 @@ import { WidgetInteractionGuide } from "@site/src/components/widgets/interaction
|
||||
|
||||
import { unifiControllerIntegration } from "@site/docs/integrations/unifi-controller";
|
||||
import { AddingWidget } from "@site/src/components/widgets/adding";
|
||||
import { WidgetConfig } from "@site/src/components/widgets/configuration";
|
||||
import { WidgetHeader } from "@site/src/components/widgets/header";
|
||||
import { WidgetIntegrations } from "@site/src/components/widgets/integrations";
|
||||
import { IconAd } from "@tabler/icons-react";
|
||||
import TabItem from "@theme/TabItem";
|
||||
import Tabs from "@theme/Tabs";
|
||||
import { networkControllerSummaryWidget } from ".";
|
||||
|
||||
<WidgetHeader widget={networkControllerSummaryWidget} categories={["Network controller"]} />
|
||||
|
||||
Shows whether your WAN, internet, Wi-Fi, and VPN are available. The compact board view keeps the familiar status list, including internet latency and the connected VPN-user count.
|
||||
The Network Controller Summary widget shows WAN, internet, Wi-Fi, and VPN status, including latency and connected-user
|
||||
counts.
|
||||
|
||||
### Screenshots
|
||||
|
||||
@@ -36,7 +33,7 @@ import summaryCard from "./img/summary.png";
|
||||
]}
|
||||
/>
|
||||
|
||||
In advanced view, each controller gets its own information matrix showing source, last update, WAN and web status, latency, ping, web uptime, separate Wi-Fi and LAN user and guest counts, and connected VPN users.
|
||||
Advanced view separates status and user counts by controller.
|
||||
|
||||
<WidgetInteractionGuide />
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 733 B |
|
Before Width: | Height: | Size: 1016 B |
|
Before Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 980 B |
|
Before Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 5.9 KiB |
@@ -1,32 +1,31 @@
|
||||
---
|
||||
title: "Notebook"
|
||||
description: "A simple notebook widget that supports markdown."
|
||||
description: "Rich text notes on a board."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { WidgetInteractionGuide } from "@site/src/components/widgets/interactions";
|
||||
|
||||
import { AddingWidget } from "@site/src/components/widgets/adding";
|
||||
import { WidgetConfig } from "@site/src/components/widgets/configuration";
|
||||
import { WidgetHeader } from "@site/src/components/widgets/header";
|
||||
import { notebookWidget } from ".";
|
||||
import normalView from "./img/normal.png";
|
||||
import editView from "./img/edit.png";
|
||||
|
||||
<WidgetHeader widget={notebookWidget} categories={["Notes"]} />
|
||||
|
||||
The notebook widget focuses on usability and is designed to be as simple as possible to bring a familiar editing experience to regular users.
|
||||
It is based on Tiptap.dev and supports most of its features.
|
||||
The Notebook widget stores rich text on a board. Its editor supports headings, formatting, lists, links, images, tables,
|
||||
text direction, and alignment.
|
||||
|
||||
### Screenshots
|
||||
Select the edit action or double-click the document to edit it. Save or cancel from the same action area. Editing follows
|
||||
the board's permissions.
|
||||
|
||||
import editOff from "./img/normal.png";
|
||||
import editOn from "./img/edit.png";
|
||||
### View mode
|
||||
|
||||
<div className="flex gap-1">
|
||||
<img src={editOff} alt="notebook edit-off" width={128 * 3} />
|
||||
<img src={editOn} alt="notebook edit-on" width={128 * 3} />
|
||||
</div>
|
||||
<img src={normalView} alt="Notebook widget showing a saved note" width={550} />
|
||||
|
||||
<WidgetInteractionGuide advancedView={false} />
|
||||
### Editing
|
||||
|
||||
<img src={editView} alt="Notebook editor with its formatting toolbar" width={550} />
|
||||
|
||||
### Adding the widget
|
||||
|
||||
@@ -35,127 +34,3 @@ import editOn from "./img/edit.png";
|
||||
### Configuration
|
||||
|
||||
<WidgetConfig configuration={notebookWidget.configuration} />
|
||||
|
||||
### Editing
|
||||
|
||||
When your permissions allow it, hover the widget, focus within it, or use a touch device to reveal the edit button in the top right. You can also double-click the document to edit it directly.
|
||||
|
||||

|
||||
|
||||
You can then decide to save your changes or cancel them to exit editing, using the buttons placed in the same location.
|
||||
|
||||

|
||||
|
||||
### Notebook toolbar functions
|
||||
|
||||
The notebook offers a variety of functions to edit the text and more.
|
||||
|
||||

|
||||
|
||||
#### Common text formatting
|
||||
|
||||
| Function | Description |
|
||||
| ---------------------- | ------------------------------------------------------------------- |
|
||||
| Bold | Makes the selected text bold |
|
||||
| Italic | Tilts the selected text |
|
||||
| Strikethrough | Puts a bar through the selected text |
|
||||
| Color text | Changes the color of the text |
|
||||
| Colored highlight text | Highlights the text with a chosen color |
|
||||
| Code | Elevates the text to a box |
|
||||
| Clear formatting | Erases any of the preceding function's effects on the selected text |
|
||||
|
||||
#### Heading
|
||||
|
||||
Choose a heading size for the line, making the text bigger. Working like titles and sub-titles.
|
||||
|
||||
#### Text Alignment
|
||||
|
||||
Select the alignment on the line. Left, center or right.
|
||||
|
||||
#### Text direction
|
||||
|
||||
Set the current paragraph or heading to left-to-right or right-to-left. This is useful when writing right-to-left text while Homarr is using a left-to-right language, or vice versa.
|
||||
|
||||
#### Misc functions
|
||||
|
||||
##### Blockquote
|
||||
|
||||
Puts the current line in a quoting block.
|
||||
|
||||
##### Horizontal line
|
||||
|
||||
Adds a line that goes from the far right to the far left as a separator.
|
||||
|
||||
#### Lists
|
||||
|
||||
##### Bullet lists
|
||||
|
||||
Simple list with a dot preceding each element.
|
||||
|
||||
##### Ordered lists
|
||||
|
||||
List with numbers preceding each element.
|
||||
|
||||
##### Check lists
|
||||
|
||||
List with a checkbox on each element.
|
||||
|
||||
##### Indentation changes
|
||||
|
||||

|
||||
|
||||
When you are currently in a list of any sort, the last 2 buttons will appear and will allow you to change the indentation of the current list item.
|
||||
|
||||
#### Insert functions
|
||||
|
||||
##### Link controls
|
||||
|
||||
The first buttons is to insert a link, or edit an existing link. The link will be applied on the selected text.
|
||||
|
||||
Pasting a link directly into the text will automatically put the link anchor on it too.
|
||||
|
||||
The second button will remove the link while leaving the text intact.
|
||||
|
||||

|
||||
|
||||
This is the modal for the link, The little button in the textbox can be clicked to make the link open in a new tab.
|
||||
|
||||
##### Image controls
|
||||
|
||||

|
||||
|
||||
##### Source
|
||||
|
||||
You can use a normal link to an image or you can also use locally stored images.
|
||||
|
||||
##### Width
|
||||
|
||||
The aspect ratio will always be respected, so only the width field is necessary.
|
||||
You can provide a value in a plain number or you can also use percents to have your image size dynamically change on different screens.
|
||||
|
||||
#### Table
|
||||
|
||||
This last control allows you to add a table, for which you can determine the number of columns and row before inserting it.
|
||||
|
||||

|
||||
|
||||
Clicking that button while in a table will delete it.
|
||||
|
||||
##### Table controls
|
||||
|
||||

|
||||
|
||||
While in a table, further controls will appear to help edit the table.
|
||||
|
||||
The first one will color the background of the selected cells.
|
||||
|
||||
The second will merge selected cells.
|
||||
|
||||
All the following ones are for editing the wize of the table:
|
||||
|
||||
- Add column on the right
|
||||
- Add column on the left
|
||||
- Delete Column
|
||||
- Add row on top
|
||||
- Add row below
|
||||
- Delete Row
|
||||
|
Before Width: | Height: | Size: 18 KiB |
@@ -4,15 +4,10 @@ description: "Display notification history from an integration"
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
import { WidgetInteractionGuide } from "@site/src/components/widgets/interactions";
|
||||
|
||||
import { WidgetHeader } from "@site/src/components/widgets/header";
|
||||
import { AddingWidget } from "@site/src/components/widgets/adding";
|
||||
import { WidgetConfig } from "@site/src/components/widgets/configuration";
|
||||
import { WidgetIntegrations } from "@site/src/components/widgets/integrations";
|
||||
import { IconAd } from "@tabler/icons-react";
|
||||
import Tabs from "@theme/Tabs";
|
||||
import TabItem from "@theme/TabItem";
|
||||
import { notificationsWidget } from ".";
|
||||
import { ntfyIntegration } from "@site/docs/integrations/ntfy";
|
||||
import { nextcloudIntegration } from "@site/docs/integrations/nextcloud";
|
||||
@@ -20,13 +15,8 @@ import { gotifyIntegration } from "@site/docs/integrations/gotify";
|
||||
|
||||
<WidgetHeader widget={notificationsWidget} categories={["Notifications", "Messaging"]} />
|
||||
|
||||
The notifications widget allows you to display notifications from various integrations in a unified view. Compact mode presents them as a vertical list of padded notification cards.
|
||||
|
||||
### Screenshots
|
||||
|
||||
import notificationsScreenshot from "./img/notifications.png";
|
||||
|
||||
<img src={notificationsScreenshot} alt="notifications" width={256} height={256} />
|
||||
Displays notification history from the configured integration. Advanced view shows full message bodies, sources, and
|
||||
available service icons.
|
||||
|
||||
### Supported Integrations
|
||||
|
||||
@@ -34,10 +24,6 @@ import notificationsScreenshot from "./img/notifications.png";
|
||||
items={[{ integration: ntfyIntegration }, { integration: nextcloudIntegration }, { integration: gotifyIntegration }]}
|
||||
/>
|
||||
|
||||
Advanced view always shows available notification logos and sources and removes the compact body line limit. External notification links retain the same safe new-tab behavior.
|
||||
|
||||
<WidgetInteractionGuide advancedView />
|
||||
|
||||
### Adding the widget
|
||||
|
||||
<AddingWidget />
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "PatchMon"
|
||||
description: "Displays host patch statistics from PatchMon including update and security counts."
|
||||
description: "Displays host patch and security update statistics from PatchMon."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
@@ -15,77 +15,17 @@ import { patchmonIntegration } from "@site/docs/integrations/patchmon";
|
||||
|
||||
<WidgetHeader widget={patchmonWidget} categories={["Health Monitoring"]} />
|
||||
|
||||
This widget displays patch statistics from your PatchMon instance, including total hosts, hosts needing updates, and security update counts. Each stat is shown with a dedicated icon and severity-tinted card background for quick visual scanning.
|
||||
The PatchMon widget shows host compliance, available updates, security updates, outdated packages, and optional operating
|
||||
system distribution. Thresholds can use counts or percentages. Advanced view shows the complete posture summary.
|
||||
|
||||
PatchMon does not render a built-in widget title. To add a label on your board, open **Edit item → Advanced options → Title** — the same optional overlay badge used by other Homarr widgets.
|
||||
## Authentication
|
||||
|
||||
### Authentication
|
||||
PatchMon data requires a signed-in Homarr session, including on public boards. Visibility options change presentation,
|
||||
not the integration response available to an authorized user.
|
||||
|
||||
:::note
|
||||
This widget requires a **signed-in Homarr session**. Anonymous visitors cannot load PatchMon data, even when the board is [public](/docs/management/boards#access-control). Placing this widget on a public board does not expose patch or security statistics to guests.
|
||||
### Supported integration
|
||||
|
||||
Stat visibility toggles in the widget settings control **display only**. Authenticated users with integration query access still receive the full API payload regardless of which stats are hidden in the UI.
|
||||
:::
|
||||
|
||||
### Compliance hero
|
||||
|
||||
When **Show compliance hero** is enabled (default), the widget displays a ring showing the percentage of hosts that are fully up to date. The ring color follows the same threshold rules as the "Up-to-Date Hosts" stat. When the widget is **2 or more columns wide**, the hero also shows the "Patch Compliance" label and exact host count (e.g. "27 / 42") beside the ring.
|
||||
|
||||
In **1-column-wide** layouts (such as 1×1), the compliance hero switches to a ring-only view so useful compliance data remains visible in tight spaces. If the compliance hero is disabled, compact widgets fall back to the next selected content: OS distribution when enabled, then the first enabled stat.
|
||||
|
||||
### Threshold colors
|
||||
|
||||
When **Enable threshold colors** is on (default), stat values and card backgrounds are colored for at-a-glance severity:
|
||||
|
||||
| Stat | Green | Yellow | Red |
|
||||
| --------------------------- | ------------- | ------ | --------- |
|
||||
| Needs Updates | 0 | 1–4 | 5+ |
|
||||
| Security Updates | 0 | 1–9 | 10+ |
|
||||
| Hosts with Security Updates | 0 | — | 1+ |
|
||||
| Up-to-Date Hosts | 100% of total | 90–99% | below 90% |
|
||||
| Outdated Packages | 0 | 1–49 | 50+ |
|
||||
|
||||
Enable **Advanced thresholds** to override warning and critical values per stat, using either absolute counts or percentages of total hosts.
|
||||
|
||||
### OS distribution
|
||||
|
||||
When **Show OS distribution** is enabled, the widget shows a breakdown of monitored hosts by operating system. Two display modes are available:
|
||||
|
||||
- **Horizontal bars** (default) — a scrollable list of colored progress bars showing each OS's share
|
||||
- **Donut chart** — a compact donut chart visualization that scales down in narrow layouts
|
||||
|
||||
The OS distribution limit defaults to **All**. A widget size of **2×3** or larger is recommended when using this section alongside the default stats, but compact 1×1 and 2×1 layouts can still show multiple OS rows when OS distribution is the primary selected content. Wider donut layouts can also show a compact legend beside the chart.
|
||||
|
||||
### Responsive sizing
|
||||
|
||||
The widget adapts its layout based on the available space:
|
||||
|
||||
| Widget size | Layout |
|
||||
| ----------------- | ------------------------------------------------------------------------------------------------------------------- |
|
||||
| **1×1** | Primary selected content: compliance ring (no label), compact OS distribution, or up to two enabled stats |
|
||||
| **2×1** / **1×2** | Compact primary content; **2×1** shows compliance label and host ratio beside the ring; **1×2** uses ring-only hero |
|
||||
| **2×2** (default) | Compliance hero, stat grid with icons, and tinted cards |
|
||||
| **2×3** / **3×2** | Hero, stats, OS distribution, and "last updated" footer |
|
||||
| **3×3** or larger | Full layout with up to 4-column stat grid, donut chart, and optional OS legend |
|
||||
|
||||
### Last updated
|
||||
|
||||
When the widget has enough space, a "last updated" timestamp appears at the bottom showing how recently PatchMon refreshed its data. Narrow layouts use a shortened timestamp such as `5m ago`; wider short layouts can show the full translated text.
|
||||
|
||||
### Advanced view
|
||||
|
||||
Advanced view is a complete PatchMon posture view. It always shows the compliance hero, all eight host and package statistics, the full OS distribution with versions, and the last-updated time. Compact visibility switches and OS limits still shape the board tile, but do not hide already-fetched security information in advanced view. Threshold and chart-style choices remain in effect.
|
||||
|
||||
### Supported Integrations
|
||||
|
||||
<WidgetIntegrations
|
||||
items={[
|
||||
{
|
||||
integration: patchmonIntegration,
|
||||
note: "Displays host patch and security update statistics",
|
||||
},
|
||||
]}
|
||||
/>
|
||||
<WidgetIntegrations items={[{ integration: patchmonIntegration }]} />
|
||||
|
||||
<WidgetInteractionGuide />
|
||||
|
||||
|
||||
@@ -10,19 +10,13 @@ import { WidgetHeader } from "@site/src/components/widgets/header";
|
||||
import { AddingWidget } from "@site/src/components/widgets/adding";
|
||||
import { WidgetConfig } from "@site/src/components/widgets/configuration";
|
||||
import { WidgetIntegrations } from "@site/src/components/widgets/integrations";
|
||||
import { IconAd } from "@tabler/icons-react";
|
||||
import Tabs from "@theme/Tabs";
|
||||
import TabItem from "@theme/TabItem";
|
||||
import { smartHomeEntityStateWidget } from ".";
|
||||
import { homeAssistantIntegration } from "@site/docs/integrations/home-assistant";
|
||||
|
||||
<WidgetHeader widget={smartHomeEntityStateWidget} categories={["Smart home"]} />
|
||||
|
||||
The entity state enables you to display the current state of an entity. Compact mode presents the friendly name first and its state beneath it.
|
||||
This works with most entities and enables you display almost any data.
|
||||
It is recommended that you transform data on the integration as much as possible since Homarr's capabilities in transformation are very limited.
|
||||
|
||||
Advanced view shows the safe Home Assistant metadata owned by Homarr: the friendly name, entity ID, unit, device class, icon, last-changed time, and last-updated time. Arbitrary attributes remain intentionally excluded.
|
||||
The Entity State widget shows a Home Assistant entity's state and can optionally toggle it. Advanced view includes the
|
||||
entity ID, unit, device class, icon, and update timestamps; arbitrary attributes are not exposed.
|
||||
|
||||
### Screenshots
|
||||
|
||||
@@ -59,18 +53,10 @@ import temperature from "./img/temperature.png";
|
||||
|
||||
<WidgetConfig configuration={smartHomeEntityStateWidget.configuration} />
|
||||
|
||||
### How to find the entity ID
|
||||
### Entity ID
|
||||
|
||||
To find the entity ID in Home Assistant, follow these steps:
|
||||
|
||||
1. Open Home Assistant and go to the **Developer Tools** section (usually found in the sidebar).
|
||||
2. Click on the **States** tab.
|
||||
3. In the list of entities, find the entity you want to use.
|
||||
4. The entity ID will be displayed in the format `domain.object_id` (e.g., `light.living_room_light`).
|
||||
5. Copy the entity ID and paste it into the widget configuration in Homarr. It will then show the State that is visible in Home Assistant.
|
||||
Find the entity under **Home Assistant → Developer Tools → States** and copy its `domain.object_id` value.
|
||||
|
||||
import retrieveEntityId from "./img/retrieve-entity-id.png";
|
||||
|
||||
<div>
|
||||
<img src={retrieveEntityId} alt="homeassistant retrieve-entity-id" width={256 * 2} />
|
||||
</div>
|
||||
<img src={retrieveEntityId} alt="Home Assistant entity IDs under Developer Tools and States" width={256 * 2} />
|
||||
@@ -10,17 +10,13 @@ import { WidgetHeader } from "@site/src/components/widgets/header";
|
||||
import { AddingWidget } from "@site/src/components/widgets/adding";
|
||||
import { WidgetConfig } from "@site/src/components/widgets/configuration";
|
||||
import { WidgetIntegrations } from "@site/src/components/widgets/integrations";
|
||||
import { IconAd } from "@tabler/icons-react";
|
||||
import Tabs from "@theme/Tabs";
|
||||
import TabItem from "@theme/TabItem";
|
||||
import { smartHomeExecuteAutomationWidget } from ".";
|
||||
import { homeAssistantIntegration } from "@site/docs/integrations/home-assistant";
|
||||
|
||||
<WidgetHeader widget={smartHomeExecuteAutomationWidget} categories={["Automation"]} />
|
||||
|
||||
The execute automation widget allows you to trigger an automation with one click.
|
||||
|
||||
Advanced view shows the automation ID, interaction permission, last successful run in the current browser session, and the latest action error together. Session-only history is not presented as Home Assistant history.
|
||||
The Execute Automation widget triggers a Home Assistant automation. Advanced view shows the automation ID, permission,
|
||||
latest error, and last successful run in the current browser session.
|
||||
|
||||
### Screenshots
|
||||
|
||||
@@ -47,10 +43,6 @@ import withDisplayname from "./img/with-displayname.png";
|
||||
]}
|
||||
/>
|
||||
|
||||
### Interactions
|
||||
|
||||
- Trigger the automation by clicking on the widget.
|
||||
|
||||
<WidgetInteractionGuide />
|
||||
|
||||
### Adding the widget
|
||||
|
||||
@@ -13,20 +13,11 @@ import { timerWidget } from ".";
|
||||
|
||||
<WidgetHeader widget={timerWidget} categories={["Productivity", "Time"]} />
|
||||
|
||||
The Timer / Pomodoro widget runs in your browser and does not require an integration. A running timer uses a saved
|
||||
deadline, so reopening the board or returning from a background tab restores the correct remaining time.
|
||||
The Timer / Pomodoro widget runs in the browser without an integration. Timer mode uses one duration; Pomodoro mode
|
||||
alternates configurable focus, short-break, and long-break phases.
|
||||
|
||||
Timer mode uses one configured duration. Pomodoro mode starts with a focus session, follows most completed focus
|
||||
sessions with a short break, and uses a long break after the configured number of focus sessions. Automatic break and
|
||||
focus starts are separate options and are disabled by default. When automatic starts are enabled, elapsed phases are
|
||||
reconciled from their original deadlines after the board returns to the foreground.
|
||||
|
||||
Advanced view shows the sequence, durations, and local alert preferences. Sounds are enabled by default, while browser
|
||||
notifications are requested only after you enable them. Progress and alert preferences are stored per board and widget
|
||||
in the current browser; clearing site data resets them, and widget previews do not persist timer state.
|
||||
|
||||
Alerts can fire while Homarr is open, but browser or operating-system settings may suppress notifications. Reduced-motion
|
||||
and forced-colors preferences replace the animated completion effect with a static border.
|
||||
Progress and alert preferences are stored per board and widget in the current browser. Notifications can fire only
|
||||
while Homarr is open.
|
||||
|
||||
<WidgetInteractionGuide />
|
||||
|
||||
|
||||
@@ -15,9 +15,8 @@ import { tracearrIntegration } from "@site/docs/integrations/tracearr";
|
||||
|
||||
<WidgetHeader widget={tracearrWidget} categories={["Media Monitoring"]} />
|
||||
|
||||
The Tracearr widget provides a real-time monitoring dashboard for your media server activity. It displays active streams, user statistics, recent watching history, and policy violations. Compact mode renders every enabled section in that familiar order without hiding or truncating sections based on widget height.
|
||||
|
||||
When multiple Tracearr integrations are selected, every stream, violation, and activity row keeps its source identity and an integration-scoped key. Data from healthy sources remains visible if another source fails, and a warning identifies each unavailable integration without exposing private request details. If every selected integration fails, the widget reports an error; if cached data remains visible after a later total failure, a stale-data warning is shown.
|
||||
The Tracearr widget shows active streams, user statistics, recent activity, and policy violations. Rows identify their
|
||||
source integration, and healthy sources remain visible when another source fails.
|
||||
|
||||
### Sections
|
||||
|
||||
@@ -28,16 +27,6 @@ When multiple Tracearr integrations are selected, every stream, violation, and a
|
||||
| **Recent Activity** | A paginated list of watching history with user avatars and watched status. |
|
||||
| **Violations** | Alerts for policy violations (e.g., concurrent stream limits) with severity levels. |
|
||||
|
||||
### Screenshots
|
||||
|
||||
import widgetOverview from "./img/widget-overview.png";
|
||||
import streamsAndStats from "./img/streams-and-stats.png";
|
||||
|
||||
<div className="flex flex-col gap-2">
|
||||
<img src={widgetOverview} alt="tracearr-widget-overview" width={128 * 4} />
|
||||
<img src={streamsAndStats} alt="tracearr-streams-and-stats" width={128 * 4} />
|
||||
</div>
|
||||
|
||||
<WidgetInteractionGuide />
|
||||
|
||||
### Adding the widget
|
||||
|
||||
@@ -15,27 +15,8 @@ import { peaNutIntegration } from "@site/docs/integrations/peanut";
|
||||
|
||||
<WidgetHeader widget={upsWidget} categories={["UPS"]} />
|
||||
|
||||
This widget displays the status of the UPS devices reported by a Network UPS Tools (NUT) server. Each device shows its
|
||||
status (online, on battery, charging or low battery), battery charge and estimated runtime, output load, and input and
|
||||
output voltage.
|
||||
|
||||
Every device keeps an integration-scoped identity. Advanced view always labels each device with its owning integration, while compact layouts add the source label only when multiple healthy integrations are present.
|
||||
|
||||
When multiple UPS integrations are selected, devices from healthy sources remain visible if another source fails. A warning indicator identifies each unavailable integration without exposing private request details. If every selected integration fails, the widget reports an error; if cached data remains visible after a later total failure, a stale-data warning is shown.
|
||||
|
||||
### Layouts
|
||||
|
||||
import screenshotFull from "./img/screenshot.png";
|
||||
import screenshotCompact from "./img/screenshot-compact.png";
|
||||
import screenshotMini from "./img/screenshot-mini.png";
|
||||
|
||||
The widget adapts to the size of the tile, so it stays readable from a full dashboard panel down to a single cell. Multiple UPS devices scroll within the widget at any height.
|
||||
|
||||
| Layout | Size | Preview |
|
||||
| ------- | --------------- | --------------------------------------------------------------------------- |
|
||||
| Full | 3+ columns wide | <img src={screenshotFull} alt="UPS widget full layout" width={239} /> |
|
||||
| Compact | ~2 columns | <img src={screenshotCompact} alt="UPS widget compact layout" width={171} /> |
|
||||
| Mini | 1 column | <img src={screenshotMini} alt="UPS widget mini layout" width={90} /> |
|
||||
The UPS widget shows NUT device state, battery charge, runtime, load, and voltage. Advanced view identifies each source
|
||||
integration. Devices from healthy integrations remain visible when another source fails.
|
||||
|
||||
### Supported Integrations
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 23 KiB |
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "Weather"
|
||||
description: "Displays the current weather information of a set location."
|
||||
description: "Displays current weather and a forecast for a location."
|
||||
hide_title: true
|
||||
---
|
||||
|
||||
@@ -13,21 +13,8 @@ import { weatherWidget } from ".";
|
||||
|
||||
<WidgetHeader widget={weatherWidget} categories={["Weather"]} />
|
||||
|
||||
The Weather Widget displays current conditions and a responsive forecast for a selected location. New widgets start
|
||||
with the city and a three-day forecast visible. As the widget gets smaller, it keeps the current condition and
|
||||
temperature readable before removing secondary details or forecast days.
|
||||
|
||||
Select a forecast day to inspect precipitation, apparent temperature, humidity, wind, UV index, sunrise, sunset and
|
||||
daylight duration with a mouse, keyboard or touch. Open the advanced view for a current-condition summary, a 24-hour
|
||||
temperature and precipitation chart, and the complete seven-day forecast. The chart has an equivalent data table for
|
||||
assistive technologies.
|
||||
|
||||
The **Show humidity** option controls humidity across the compact current-conditions view, advanced summary, hourly
|
||||
details, and daily forecast details. Forecast cards use a roomier adaptive grid in advanced view, with four columns on
|
||||
the standard desktop surface and fewer columns as the surface narrows.
|
||||
|
||||
Weather icons are static by default. Animation can be enabled in the widget configuration, but the operating system's
|
||||
reduced-motion preference always disables it.
|
||||
The Weather widget shows current conditions and a responsive forecast. Select a forecast day for details; advanced view
|
||||
adds hourly temperature and precipitation charts and the complete seven-day forecast.
|
||||
|
||||
<WidgetInteractionGuide />
|
||||
|
||||
@@ -41,10 +28,8 @@ reduced-motion preference always disables it.
|
||||
|
||||
### Data source
|
||||
|
||||
We use the Open Meteo API to fetch the weather and locations. Active weather data refreshes every ten minutes, while
|
||||
identical location requests can reuse a server response for five minutes. A manual refresh may therefore return the
|
||||
same still-current server response. If a refresh fails, Homarr keeps the last successful data visible and shows an
|
||||
error indicator.
|
||||
Weather and location data come from Open-Meteo. Active weather refreshes every ten minutes; identical location requests
|
||||
can reuse a server response for five minutes. Failed refreshes keep the last successful data with an error indicator.
|
||||
|
||||
Set `NO_EXTERNAL_CONNECTION=true` to disable this and other internet-backed requests.
|
||||
If you need to whitelist the api, please use the following URL: `https://open-meteo.com`
|
||||
Set `NO_EXTERNAL_CONNECTION=true` to disable this and other internet-backed requests. Allowlist
|
||||
`https://open-meteo.com` when outbound access is restricted.
|
||||