<p>You can also use an icon for bookmarks similar to the <ahref="../services/#icons">options for service icons</a>. If both icon and abbreviation are supplied, the icon takes precedence.</p>
<p>By default, the description will use the hostname of the link, but you can override it with a custom description.</p>
</span><spanid="__span-0-10"><aid="__codelineno-0-10"name="__codelineno-0-10"href="#__codelineno-0-10"></a><spanclass="w"></span><spanclass="nt">description</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">The front page of the internet</span>
</span><spanid="__span-0-10"><aid="__codelineno-0-10"name="__codelineno-0-10"href="#__codelineno-0-10"></a><spanclass="w"></span><spanclass="nt">description</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">The front page of the internet</span>
<p>Docker instances are configured inside the <code>docker.yaml</code> file. Both IP:PORT and Socket connections are supported.</p>
<p>For IP:PORT, simply make sure your Docker instance <ahref="https://gist.github.com/styblope/dc55e0ad2a9848f2cc3307d4819d819f">has been configured</a> to accept API traffic over the HTTP API.</p>
<p>Since Docker supports connecting with TLS and client certificate authentication, you can include TLS details when connecting to the HTTP API. Further details of setting up Docker to accept TLS connections, and generation of the keys and certs can be found <ahref="https://docs.docker.com/engine/security/protect-access/#use-tls-https-to-protect-the-docker-daemon-socket">in the Docker documentation</a>. The file entries are relative to the <code>config</code> directory (location of <code>docker.yaml</code> file).</p>
<p>Due to security concerns with exposing the docker socket directly, you can use a <ahref="https://github.com/Tecnativa/docker-socket-proxy">docker-socket-proxy</a> container to expose the docker socket on a more restricted and secure API.</p>
<p>Here is an example docker-compose file that will expose the docker socket, and then connect to it from the homepage container:</p>
</span><spanid="__span-2-5"><aid="__codelineno-2-5"name="__codelineno-2-5"href="#__codelineno-2-5"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">CONTAINERS=1</span><spanclass="w"></span><spanclass="c1"># Allow access to viewing containers</span>
</span><spanid="__span-2-6"><aid="__codelineno-2-6"name="__codelineno-2-6"href="#__codelineno-2-6"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">SERVICES=1</span><spanclass="w"></span><spanclass="c1"># Allow access to viewing services (necessary when using Docker Swarm)</span>
</span><spanid="__span-2-7"><aid="__codelineno-2-7"name="__codelineno-2-7"href="#__codelineno-2-7"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">TASKS=1</span><spanclass="w"></span><spanclass="c1"># Allow access to viewing tasks (necessary when using Docker Swarm)</span>
</span><spanid="__span-2-8"><aid="__codelineno-2-8"name="__codelineno-2-8"href="#__codelineno-2-8"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">POST=0</span><spanclass="w"></span><spanclass="c1"># Disallow any POST operations (effectively read-only)</span>
</span><spanid="__span-2-5"><aid="__codelineno-2-5"name="__codelineno-2-5"href="#__codelineno-2-5"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">CONTAINERS=1</span><spanclass="w"></span><spanclass="c1"># Allow access to viewing containers</span>
</span><spanid="__span-2-6"><aid="__codelineno-2-6"name="__codelineno-2-6"href="#__codelineno-2-6"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">SERVICES=1</span><spanclass="w"></span><spanclass="c1"># Allow access to viewing services (necessary when using Docker Swarm)</span>
</span><spanid="__span-2-7"><aid="__codelineno-2-7"name="__codelineno-2-7"href="#__codelineno-2-7"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">TASKS=1</span><spanclass="w"></span><spanclass="c1"># Allow access to viewing tasks (necessary when using Docker Swarm)</span>
</span><spanid="__span-2-8"><aid="__codelineno-2-8"name="__codelineno-2-8"href="#__codelineno-2-8"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">POST=0</span><spanclass="w"></span><spanclass="c1"># Disallow any POST operations (effectively read-only)</span>
<p>Once you've configured your docker instances, you can then apply them to your services, to get stats and status reporting shown.</p>
@ -4895,53 +4895,53 @@
<p>Homepage features automatic service discovery for containers with the proper labels attached, all configuration options can be applied using dot notation, beginning with <code>homepage</code>.</p>
<p>Below is an example of the same service entry shown above, as docker labels.</p>
<p>When your Docker instance has been properly configured, this service will be automatically discovered and added to your Homepage. <strong>You do not need to specify the <code>server</code> or <code>container</code> values, as they will be automatically inferred.</strong></p>
<p><strong>When using docker swarm use <em>deploy/labels</em></strong></p>
<h2id="widgets">Widgets</h2>
<p>You may also configure widgets, along with the standard service entry, again, using dot notation.</p>
<p>Docker swarm is supported and Docker services are specified with the same <code>server</code> and <code>container</code> notation. To enable swarm support you will need to include a <code>swarm</code> setting in your docker.yaml, e.g.</p>
<p>For the automatic service discovery to discover all services it is important that homepage should be deployed on a manager node. Set deploy requirements to the master node in your stack yaml config, e.g.</p>
<p>Sometimes this is insufficient for complex or atypical application deployments. In these cases, the <code>pod-selector</code> field can be used. Any field selector can be used with it, so it allows for some very powerful selection capabilities.</p>
<p>For instance, it can be utilized to roll multiple underlying deployments under one application to see a high-level aggregate:</p>
</span><spanid="__span-2-8"><aid="__codelineno-2-8"name="__codelineno-2-8"href="#__codelineno-2-8"></a><spanclass="w"></span><spanclass="no">app.kubernetes.io/instance in (</span>
</span><spanid="__span-2-8"><aid="__codelineno-2-8"name="__codelineno-2-8"href="#__codelineno-2-8"></a><spanclass="w"></span><spanclass="no">app.kubernetes.io/instance in (</span>
<p>When the Kubernetes cluster connection has been properly configured, this service will be automatically discovered and added to your Homepage. <strong>You do not need to specify the <code>namespace</code> or <code>app</code> values, as they will be automatically inferred.</strong></p>
</span><spanid="__span-4-11"><aid="__codelineno-4-11"name="__codelineno-4-11"href="#__codelineno-4-11"></a><spanclass="w"></span><spanclass="nt">gethomepage.dev/app</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">emby-app</span><spanclass="w"></span><spanclass="c1"># optional, may be needed if app.kubernetes.io/name != ingress metadata.name</span>
<p>In addition to the href of the service, you can also specify the target location in which to open that link. See <ahref="../settings/#link-target">Link Target</a> for more details.</p>
<p>Using Emby as an example, this is how you would attach the Emby service widget.</p>
</span><spanid="__span-0-4"><aid="__codelineno-0-4"name="__codelineno-0-4"href="#__codelineno-0-4"></a><spanclass="w"></span><spanclass="nt">description</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">Movies & TV Shows</span>
</span><spanid="__span-0-4"><aid="__codelineno-0-4"name="__codelineno-0-4"href="#__codelineno-0-4"></a><spanclass="w"></span><spanclass="nt">description</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">Movies & TV Shows</span>
<p>Each widget can optionally provide a list of which fields should be visible via the <code>fields</code> widget property. If no fields are specified, then all fields will be displayed. The <code>fields</code> property must be a valid YAML array of strings. As an example, here is the entry for Sonarr showing only a couple of fields.</p>
<p><strong>In all cases a widget will work and display all fields without specifying the <code>fields</code> property.</strong></p>
</span><spanid="__span-0-9"><aid="__codelineno-0-9"name="__codelineno-0-9"href="#__codelineno-0-9"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">/path/to/config:/app/config</span><spanclass="w"></span><spanclass="c1"># Make sure your local config directory exists</span>
</span><spanid="__span-0-10"><aid="__codelineno-0-10"name="__codelineno-0-10"href="#__codelineno-0-10"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">/var/run/docker.sock:/var/run/docker.sock</span><spanclass="w"></span><spanclass="c1"># (optional) For docker integrations</span>
</span><spanid="__span-0-9"><aid="__codelineno-0-9"name="__codelineno-0-9"href="#__codelineno-0-9"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">/path/to/config:/app/config</span><spanclass="w"></span><spanclass="c1"># Make sure your local config directory exists</span>
</span><spanid="__span-0-10"><aid="__codelineno-0-10"name="__codelineno-0-10"href="#__codelineno-0-10"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">/var/run/docker.sock:/var/run/docker.sock</span><spanclass="w"></span><spanclass="c1"># (optional) For docker integrations</span>
</span></code></pre></div>
<h3id="running-as-non-root">Running as non-root</h3>
<p>By default, the Homepage container runs as root. Homepage also supports running your container as non-root via the standard <code>PUID</code> and <code>PGID</code> environment variables. When using these variables, make sure that any volumes mounted in to the container have the correct ownership and permissions set.</p>
@ -4675,17 +4675,17 @@
<p>In the docker compose example below, the environment variables <code>$PUID</code> and <code>$PGID</code> are set in a <code>.env</code> file.</p>
</span><spanid="__span-1-9"><aid="__codelineno-1-9"name="__codelineno-1-9"href="#__codelineno-1-9"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">/path/to/config:/app/config</span><spanclass="w"></span><spanclass="c1"># Make sure your local config directory exists</span>
</span><spanid="__span-1-10"><aid="__codelineno-1-10"name="__codelineno-1-10"href="#__codelineno-1-10"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">/var/run/docker.sock:/var/run/docker.sock</span><spanclass="w"></span><spanclass="c1"># (optional) For docker integrations, see alternative methods</span>
</span><spanid="__span-1-9"><aid="__codelineno-1-9"name="__codelineno-1-9"href="#__codelineno-1-9"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">/path/to/config:/app/config</span><spanclass="w"></span><spanclass="c1"># Make sure your local config directory exists</span>
</span><spanid="__span-1-10"><aid="__codelineno-1-10"name="__codelineno-1-10"href="#__codelineno-1-10"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">/var/run/docker.sock:/var/run/docker.sock</span><spanclass="w"></span><spanclass="c1"># (optional) For docker integrations, see alternative methods</span>
</span><spanid="__span-1-8"><aid="__codelineno-1-8"name="__codelineno-1-8"href="#__codelineno-1-8"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">My First Group</span><spanclass="p">:</span>
</span><spanid="__span-1-9"><aid="__codelineno-1-9"name="__codelineno-1-9"href="#__codelineno-1-9"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">My First Service</span><spanclass="p">:</span>
</span><spanid="__span-1-11"><aid="__codelineno-1-11"name="__codelineno-1-11"href="#__codelineno-1-11"></a><spanclass="w"></span><spanclass="nt">description</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">Homepage is awesome</span>
</span><spanid="__span-1-8"><aid="__codelineno-1-8"name="__codelineno-1-8"href="#__codelineno-1-8"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">My First Group</span><spanclass="p">:</span>
</span><spanid="__span-1-9"><aid="__codelineno-1-9"name="__codelineno-1-9"href="#__codelineno-1-9"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">My First Service</span><spanclass="p">:</span>
</span><spanid="__span-1-11"><aid="__codelineno-1-11"name="__codelineno-1-11"href="#__codelineno-1-11"></a><spanclass="w"></span><spanclass="nt">description</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">Homepage is awesome</span>
</span><spanid="__span-1-13"><aid="__codelineno-1-13"name="__codelineno-1-13"href="#__codelineno-1-13"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">My Second Group</span><spanclass="p">:</span>
</span><spanid="__span-1-14"><aid="__codelineno-1-14"name="__codelineno-1-14"href="#__codelineno-1-14"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">My Second Service</span><spanclass="p">:</span>
</span><spanid="__span-1-16"><aid="__codelineno-1-16"name="__codelineno-1-16"href="#__codelineno-1-16"></a><spanclass="w"></span><spanclass="nt">description</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">Homepage is the best</span>
</span><spanid="__span-1-13"><aid="__codelineno-1-13"name="__codelineno-1-13"href="#__codelineno-1-13"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">My Second Group</span><spanclass="p">:</span>
</span><spanid="__span-1-14"><aid="__codelineno-1-14"name="__codelineno-1-14"href="#__codelineno-1-14"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">My Second Service</span><spanclass="p">:</span>
</span><spanid="__span-1-16"><aid="__codelineno-1-16"name="__codelineno-1-16"href="#__codelineno-1-16"></a><spanclass="w"></span><spanclass="nt">description</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">Homepage is the best</span>
</span><spanid="__span-1-18"><aid="__codelineno-1-18"name="__codelineno-1-18"href="#__codelineno-1-18"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">My Third Group</span><spanclass="p">:</span>
</span><spanid="__span-1-19"><aid="__codelineno-1-19"name="__codelineno-1-19"href="#__codelineno-1-19"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">My Third Service</span><spanclass="p">:</span>
</span><spanid="__span-1-21"><aid="__codelineno-1-21"name="__codelineno-1-21"href="#__codelineno-1-21"></a><spanclass="w"></span><spanclass="nt">description</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">Homepage is 😎</span>
</span><spanid="__span-1-23"><aid="__codelineno-1-23"name="__codelineno-1-23"href="#__codelineno-1-23"></a><spanclass="w"></span><spanclass="c1"># show the kubernetes widget, with the cluster summary and individual nodes</span>
</span><spanid="__span-1-18"><aid="__codelineno-1-18"name="__codelineno-1-18"href="#__codelineno-1-18"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">My Third Group</span><spanclass="p">:</span>
</span><spanid="__span-1-19"><aid="__codelineno-1-19"name="__codelineno-1-19"href="#__codelineno-1-19"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">My Third Service</span><spanclass="p">:</span>
</span><spanid="__span-1-21"><aid="__codelineno-1-21"name="__codelineno-1-21"href="#__codelineno-1-21"></a><spanclass="w"></span><spanclass="nt">description</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">Homepage is 😎</span>
</span><spanid="__span-1-23"><aid="__codelineno-1-23"name="__codelineno-1-23"href="#__codelineno-1-23"></a><spanclass="w"></span><spanclass="c1"># show the kubernetes widget, with the cluster summary and individual nodes</span>
</span><spanid="__span-1-43"><aid="__codelineno-1-43"name="__codelineno-1-43"href="#__codelineno-1-43"></a><spanclass="c1"># The service account is necessary to allow discovery of other services</span>
</span><spanid="__span-1-48"><aid="__codelineno-1-48"name="__codelineno-1-48"href="#__codelineno-1-48"></a><spanclass="c1"># This enables the service account to access the necessary resources</span>
</span><spanid="__span-1-55"><aid="__codelineno-1-55"name="__codelineno-1-55"href="#__codelineno-1-55"></a><spanclass="w"></span><spanclass="c1"># Example annotations to add Homepage to your Homepage!</span>
</span><spanid="__span-1-55"><aid="__codelineno-1-55"name="__codelineno-1-55"href="#__codelineno-1-55"></a><spanclass="w"></span><spanclass="c1"># Example annotations to add Homepage to your Homepage!</span>
<h2id="install-with-kubernetes-manifests">Install with Kubernetes Manifests</h2>
<p>If you don't want to use the unofficial Helm chart, you can also create your own Kubernetes manifest(s) and apply them with <code>kubectl apply -f filename.yaml</code>.</p>
</span><spanid="__span-4-24"><aid="__codelineno-4-24"name="__codelineno-4-24"href="#__codelineno-4-24"></a><spanclass="w"></span><spanclass="no">- My First Group:</span>
</span><spanid="__span-4-25"><aid="__codelineno-4-25"name="__codelineno-4-25"href="#__codelineno-4-25"></a><spanclass="w"></span><spanclass="no">- My First Service:</span>
</span><spanid="__span-4-27"><aid="__codelineno-4-27"name="__codelineno-4-27"href="#__codelineno-4-27"></a><spanclass="w"></span><spanclass="no">description: Homepage is awesome</span>
</span><spanid="__span-4-24"><aid="__codelineno-4-24"name="__codelineno-4-24"href="#__codelineno-4-24"></a><spanclass="w"></span><spanclass="no">- My First Group:</span>
</span><spanid="__span-4-25"><aid="__codelineno-4-25"name="__codelineno-4-25"href="#__codelineno-4-25"></a><spanclass="w"></span><spanclass="no">- My First Service:</span>
</span><spanid="__span-4-27"><aid="__codelineno-4-27"name="__codelineno-4-27"href="#__codelineno-4-27"></a><spanclass="w"></span><spanclass="no">description: Homepage is awesome</span>
</span><spanid="__span-4-29"><aid="__codelineno-4-29"name="__codelineno-4-29"href="#__codelineno-4-29"></a><spanclass="w"></span><spanclass="no">- My Second Group:</span>
</span><spanid="__span-4-30"><aid="__codelineno-4-30"name="__codelineno-4-30"href="#__codelineno-4-30"></a><spanclass="w"></span><spanclass="no">- My Second Service:</span>
</span><spanid="__span-4-32"><aid="__codelineno-4-32"name="__codelineno-4-32"href="#__codelineno-4-32"></a><spanclass="w"></span><spanclass="no">description: Homepage is the best</span>
</span><spanid="__span-4-29"><aid="__codelineno-4-29"name="__codelineno-4-29"href="#__codelineno-4-29"></a><spanclass="w"></span><spanclass="no">- My Second Group:</span>
</span><spanid="__span-4-30"><aid="__codelineno-4-30"name="__codelineno-4-30"href="#__codelineno-4-30"></a><spanclass="w"></span><spanclass="no">- My Second Service:</span>
</span><spanid="__span-4-32"><aid="__codelineno-4-32"name="__codelineno-4-32"href="#__codelineno-4-32"></a><spanclass="w"></span><spanclass="no">description: Homepage is the best</span>
</span><spanid="__span-4-34"><aid="__codelineno-4-34"name="__codelineno-4-34"href="#__codelineno-4-34"></a><spanclass="w"></span><spanclass="no">- My Third Group:</span>
</span><spanid="__span-4-35"><aid="__codelineno-4-35"name="__codelineno-4-35"href="#__codelineno-4-35"></a><spanclass="w"></span><spanclass="no">- My Third Service:</span>
</span><spanid="__span-4-37"><aid="__codelineno-4-37"name="__codelineno-4-37"href="#__codelineno-4-37"></a><spanclass="w"></span><spanclass="no">description: Homepage is 😎</span>
</span><spanid="__span-4-34"><aid="__codelineno-4-34"name="__codelineno-4-34"href="#__codelineno-4-34"></a><spanclass="w"></span><spanclass="no">- My Third Group:</span>
</span><spanid="__span-4-35"><aid="__codelineno-4-35"name="__codelineno-4-35"href="#__codelineno-4-35"></a><spanclass="w"></span><spanclass="no">- My Third Service:</span>
</span><spanid="__span-4-37"><aid="__codelineno-4-37"name="__codelineno-4-37"href="#__codelineno-4-37"></a><spanclass="w"></span><spanclass="no">description: Homepage is 😎</span>
<li>In the UNRAID webGUI, go to the <strong>Apps</strong> tab.</li>
<li>In the search bar, search for <code>homepage</code>.</li>
<li>Click on <strong>Install</strong>.</li>
<li>Change the parameters to your liking.<ul>
<li>Change the parameters to your liking.</li>
<li>Click on <strong>APPLY</strong>.</li>
</ul>
</li>
</ul>
<h2id="run-the-container">Run the Container</h2>
<ul>
<li>While the container is running, open the WebUI.<ul>
<li>While the container is running, open the WebUI.</li>
<li>Opening the page will generate the configuration files.</li>
</ul>
</li>
</ul>
<p>You may need to set the permissions of the folders to be able to edit the files.</p>
<ul>
<li>Click on the Homepage icon.</li>
<li>Click on <strong>Console</strong>.<ul>
<li>Click on <strong>Console</strong>.</li>
<li>Enter <code>chmod -R u-x,go-rwx,go+u,ugo+X /app/config</code> and press <strong>Enter</strong>.</li>
<li>Enter <code>chmod -R u-x,go-rwx,go+u,ugo+X /app/public/icons</code> and press <strong>Enter</strong>.</li>
<li>Enter <code>chown -R nobody:users /app/config</code> and press <strong>Enter</strong>.</li>
<li>Enter <code>chown -R nobody:users /app/public/icons</code> and press <strong>Enter</strong>.</li>
</ul>
</li>
</ul>
<h2id="some-other-notes">Some Other Notes</h2>
<ul>
<li>
<p>To use the <ahref="../../configs/docker/">Docker integration</a>, you only need to use the <code>container:</code> parameter. There is no need to set the server.</p>
<divclass="admonition note">
<pclass="admonition-title">Note</p>
<p>To view detailed container statistics (CPU, RAM, etc.), or if you use a remote docker socket, <code>container:</code> will still need to be set. For example:</p>
</div>
<li>To use the <ahref="../../configs/docker/">Docker integration</a>, you only need to use the <code>container:</code> parameter. There is no need to set the server.</li>
</ul>
<p>!!! note</p>
<divclass="language-text highlight"><pre><span></span><code> To view detailed container statistics (CPU, RAM, etc.), or if you use a remote docker socket, `container:` will still need to be set. For example:
<p>When you upload a new image into the <strong>/images</strong> folder, you will need to restart the container for it to show up in the WebUI. Please see the <ahref="../../configs/services/#icons">service icons</a> for more information.</p>
</li>
<ul>
<li>When you upload a new image into the <strong>/images</strong> folder, you will need to restart the container for it to show up in the WebUI. Please see the <ahref="../../configs/services/#icons">service icons</a> for more information.</li>
<h2id="code-formatting-with-pre-commit-hooks">Code formatting with pre-commit hooks</h2>
<p>To ensure a consistent style and formatting across the project source, the project utilizes Git <ahref="https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks"><code>pre-commit</code></a> hooks to perform some formatting and linting before a commit is allowed.
That way, everyone uses the same style and some common issues can be caught early on.</p>
<p>Once installed, hooks will run when you commit. If the formatting isn't quite right or a linter catches something, the commit will be rejected.
You'll need to look at the output and fix the issue. Some hooks will format failing files, so all you need to do is <code>git add</code> those files again
<p>Homepage is developed in English, component contributions must be in English. All translations are community provided, so a huge thanks go out to all those who have helped out so far!</p>
<p>Homepage is developed in English, component contributions must be in English. All translations are community provided, so a huge thanks go out to all those who have helped out so far!</p>
<p>This allows you to display the date and/or time, can be heavily configured using <ahref="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat">Intl.DateTimeFormat</a>.</p>
<p>Formatting is locale aware and will present your date in the regional format you expect, for example, <code>9/16/22, 3:03 PM</code> for locale <code>en</code> and <code>16.09.22, 15:03</code> for <code>de</code>. You can also specify a locale just for the datetime widget with the <code>locale</code> option (see below).</p>
<p>Any options passed to <code>format</code> are passed directly to <ahref="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat">Intl.DateTimeFormat</a>, please reference the MDN documentation for all available options.</p>
<p>Valid text sizes are <code>4xl</code>, <code>3xl</code>, <code>2xl</code>, <code>xl</code>, <code>md</code>, <code>sm</code>, <code>xs</code>.</p>
<divclass="language-yaml highlight"><pre><span></span><code><spanid="__span-4-1"><aid="__codelineno-4-1"name="__codelineno-4-1"href="#__codelineno-4-1"></a><spanclass="c1"># 4 januari 2023 om 13:51:25 PST</span>
<p><em>(Find the Glances service widget <ahref="../../services/glances/">here</a>)</em></p>
<p>The Glances widget allows you to monitor the resources (CPU, memory, storage, temp & uptime) of host or another machine, and is designed to match the <code>resources</code> info widget. You can have multiple instances by adding another configuration block. The <code>cputemp</code>, <code>uptime</code>&<code>disk</code> states require separate API calls and thus are not enabled by default. Glances needs to be running in "web server" mode to enable the API, see the <ahref="https://glances.readthedocs.io/en/latest/quickstart.html#web-server-mode">glances docs</a>.</p>
</span><spanid="__span-0-3"><aid="__codelineno-0-3"name="__codelineno-0-3"href="#__codelineno-0-3"></a><spanclass="w"></span><spanclass="nt">username</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">user</span><spanclass="w"></span><spanclass="c1"># optional if auth enabled in Glances</span>
</span><spanid="__span-0-4"><aid="__codelineno-0-4"name="__codelineno-0-4"href="#__codelineno-0-4"></a><spanclass="w"></span><spanclass="nt">password</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">pass</span><spanclass="w"></span><spanclass="c1"># optional if auth enabled in Glances</span>
</span><spanid="__span-0-5"><aid="__codelineno-0-5"name="__codelineno-0-5"href="#__codelineno-0-5"></a><spanclass="w"></span><spanclass="nt">cpu</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">true</span><spanclass="w"></span><spanclass="c1"># optional, enabled by default, disable by setting to false</span>
</span><spanid="__span-0-6"><aid="__codelineno-0-6"name="__codelineno-0-6"href="#__codelineno-0-6"></a><spanclass="w"></span><spanclass="nt">mem</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">true</span><spanclass="w"></span><spanclass="c1"># optional, enabled by default, disable by setting to false</span>
</span><spanid="__span-0-7"><aid="__codelineno-0-7"name="__codelineno-0-7"href="#__codelineno-0-7"></a><spanclass="w"></span><spanclass="nt">cputemp</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">true</span><spanclass="w"></span><spanclass="c1"># disabled by default</span>
</span><spanid="__span-0-8"><aid="__codelineno-0-8"name="__codelineno-0-8"href="#__codelineno-0-8"></a><spanclass="w"></span><spanclass="nt">uptime</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">true</span><spanclass="w"></span><spanclass="c1"># disabled by default</span>
</span><spanid="__span-0-9"><aid="__codelineno-0-9"name="__codelineno-0-9"href="#__codelineno-0-9"></a><spanclass="w"></span><spanclass="nt">disk</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">/</span><spanclass="w"></span><spanclass="c1"># disabled by default, use mount point of disk(s) in glances. Can also be a list (see below)</span>
</span><spanid="__span-0-10"><aid="__codelineno-0-10"name="__codelineno-0-10"href="#__codelineno-0-10"></a><spanclass="w"></span><spanclass="nt">expanded</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">true</span><spanclass="w"></span><spanclass="c1"># show the expanded view</span>
</span><spanid="__span-0-3"><aid="__codelineno-0-3"name="__codelineno-0-3"href="#__codelineno-0-3"></a><spanclass="w"></span><spanclass="nt">username</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">user</span><spanclass="w"></span><spanclass="c1"># optional if auth enabled in Glances</span>
</span><spanid="__span-0-4"><aid="__codelineno-0-4"name="__codelineno-0-4"href="#__codelineno-0-4"></a><spanclass="w"></span><spanclass="nt">password</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">pass</span><spanclass="w"></span><spanclass="c1"># optional if auth enabled in Glances</span>
</span><spanid="__span-0-5"><aid="__codelineno-0-5"name="__codelineno-0-5"href="#__codelineno-0-5"></a><spanclass="w"></span><spanclass="nt">cpu</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">true</span><spanclass="w"></span><spanclass="c1"># optional, enabled by default, disable by setting to false</span>
</span><spanid="__span-0-6"><aid="__codelineno-0-6"name="__codelineno-0-6"href="#__codelineno-0-6"></a><spanclass="w"></span><spanclass="nt">mem</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">true</span><spanclass="w"></span><spanclass="c1"># optional, enabled by default, disable by setting to false</span>
</span><spanid="__span-0-7"><aid="__codelineno-0-7"name="__codelineno-0-7"href="#__codelineno-0-7"></a><spanclass="w"></span><spanclass="nt">cputemp</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">true</span><spanclass="w"></span><spanclass="c1"># disabled by default</span>
</span><spanid="__span-0-8"><aid="__codelineno-0-8"name="__codelineno-0-8"href="#__codelineno-0-8"></a><spanclass="w"></span><spanclass="nt">uptime</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">true</span><spanclass="w"></span><spanclass="c1"># disabled by default</span>
</span><spanid="__span-0-9"><aid="__codelineno-0-9"name="__codelineno-0-9"href="#__codelineno-0-9"></a><spanclass="w"></span><spanclass="nt">disk</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">/</span><spanclass="w"></span><spanclass="c1"># disabled by default, use mount point of disk(s) in glances. Can also be a list (see below)</span>
</span><spanid="__span-0-10"><aid="__codelineno-0-10"name="__codelineno-0-10"href="#__codelineno-0-10"></a><spanclass="w"></span><spanclass="nt">expanded</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">true</span><spanclass="w"></span><spanclass="c1"># show the expanded view</span>
</span><spanid="__span-0-5"><aid="__codelineno-0-5"name="__codelineno-0-5"href="#__codelineno-0-5"></a><spanclass="w"></span><spanclass="c1"># Shows the aggregate CPU stats</span>
</span><spanid="__span-0-9"><aid="__codelineno-0-9"name="__codelineno-0-9"href="#__codelineno-0-9"></a><spanclass="w"></span><spanclass="c1"># Shows a custom label</span>
</span><spanid="__span-0-15"><aid="__codelineno-0-15"name="__codelineno-0-15"href="#__codelineno-0-15"></a><spanclass="w"></span><spanclass="c1"># Shows the CPU for each node</span>
</span><spanid="__span-0-17"><aid="__codelineno-0-17"name="__codelineno-0-17"href="#__codelineno-0-17"></a><spanclass="w"></span><spanclass="c1"># Shows the memory for each node</span>
</span><spanid="__span-0-19"><aid="__codelineno-0-19"name="__codelineno-0-19"href="#__codelineno-0-19"></a><spanclass="w"></span><spanclass="c1"># Shows the label, which is always the node name</span>
</span><spanid="__span-0-5"><aid="__codelineno-0-5"name="__codelineno-0-5"href="#__codelineno-0-5"></a><spanclass="w"></span><spanclass="c1"># Shows the aggregate CPU stats</span>
</span><spanid="__span-0-9"><aid="__codelineno-0-9"name="__codelineno-0-9"href="#__codelineno-0-9"></a><spanclass="w"></span><spanclass="c1"># Shows a custom label</span>
</span><spanid="__span-0-15"><aid="__codelineno-0-15"name="__codelineno-0-15"href="#__codelineno-0-15"></a><spanclass="w"></span><spanclass="c1"># Shows the CPU for each node</span>
</span><spanid="__span-0-17"><aid="__codelineno-0-17"name="__codelineno-0-17"href="#__codelineno-0-17"></a><spanclass="w"></span><spanclass="c1"># Shows the memory for each node</span>
</span><spanid="__span-0-19"><aid="__codelineno-0-19"name="__codelineno-0-19"href="#__codelineno-0-19"></a><spanclass="w"></span><spanclass="c1"># Shows the label, which is always the node name</span>
</span><spanid="__span-0-2"><aid="__codelineno-0-2"name="__codelineno-0-2"href="#__codelineno-0-2"></a><spanclass="w"></span><spanclass="c1"># Show the expanded view</span>
</span><spanid="__span-0-4"><aid="__codelineno-0-4"name="__codelineno-0-4"href="#__codelineno-0-4"></a><spanclass="w"></span><spanclass="c1"># Shows a node representing the aggregate values</span>
</span><spanid="__span-0-6"><aid="__codelineno-0-6"name="__codelineno-0-6"href="#__codelineno-0-6"></a><spanclass="w"></span><spanclass="c1"># Shows the node names as labels</span>
</span><spanid="__span-0-8"><aid="__codelineno-0-8"name="__codelineno-0-8"href="#__codelineno-0-8"></a><spanclass="w"></span><spanclass="c1"># Show the nodes</span>
</span><spanid="__span-0-10"><aid="__codelineno-0-10"name="__codelineno-0-10"href="#__codelineno-0-10"></a><spanclass="w"></span><spanclass="c1"># An explicit list of nodes to show. All are shown by default if "nodes" is true</span>
</span><spanid="__span-0-2"><aid="__codelineno-0-2"name="__codelineno-0-2"href="#__codelineno-0-2"></a><spanclass="w"></span><spanclass="c1"># Show the expanded view</span>
</span><spanid="__span-0-4"><aid="__codelineno-0-4"name="__codelineno-0-4"href="#__codelineno-0-4"></a><spanclass="w"></span><spanclass="c1"># Shows a node representing the aggregate values</span>
</span><spanid="__span-0-6"><aid="__codelineno-0-6"name="__codelineno-0-6"href="#__codelineno-0-6"></a><spanclass="w"></span><spanclass="c1"># Shows the node names as labels</span>
</span><spanid="__span-0-8"><aid="__codelineno-0-8"name="__codelineno-0-8"href="#__codelineno-0-8"></a><spanclass="w"></span><spanclass="c1"># Show the nodes</span>
</span><spanid="__span-0-10"><aid="__codelineno-0-10"name="__codelineno-0-10"href="#__codelineno-0-10"></a><spanclass="w"></span><spanclass="c1"># An explicit list of nodes to show. All are shown by default if "nodes" is true</span>
</span><spanid="__span-0-6"><aid="__codelineno-0-6"name="__codelineno-0-6"href="#__codelineno-0-6"></a><spanclass="w"></span><spanclass="nt">units</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">metric</span><spanclass="w"></span><spanclass="c1"># or imperial</span>
</span><spanid="__span-0-7"><aid="__codelineno-0-7"name="__codelineno-0-7"href="#__codelineno-0-7"></a><spanclass="w"></span><spanclass="nt">cache</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">5</span><spanclass="w"></span><spanclass="c1"># Time in minutes to cache API responses, to stay within limits</span>
</span><spanid="__span-0-6"><aid="__codelineno-0-6"name="__codelineno-0-6"href="#__codelineno-0-6"></a><spanclass="w"></span><spanclass="nt">units</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">metric</span><spanclass="w"></span><spanclass="c1"># or imperial</span>
</span><spanid="__span-0-7"><aid="__codelineno-0-7"name="__codelineno-0-7"href="#__codelineno-0-7"></a><spanclass="w"></span><spanclass="nt">cache</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">5</span><spanclass="w"></span><spanclass="c1"># Time in minutes to cache API responses, to stay within limits</span>
</span></code></pre></div>
<p>You can optionally not pass a <code>latitude</code> and <code>longitude</code> and the widget will use your current location (requires a secure context, eg. HTTPS).</p>
<p>The free tier "One Call API" is all thats required, you will need to <ahref="https://home.openweathermap.org/subscriptions/unauth_subscribe/onecall_30/base">subscribe</a> and grab your API key.</p>
</span><spanid="__span-0-5"><aid="__codelineno-0-5"name="__codelineno-0-5"href="#__codelineno-0-5"></a><spanclass="w"></span><spanclass="nt">units</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">metric</span><spanclass="w"></span><spanclass="c1"># or imperial</span>
</span><spanid="__span-0-7"><aid="__codelineno-0-7"name="__codelineno-0-7"href="#__codelineno-0-7"></a><spanclass="w"></span><spanclass="nt">apiKey</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">youropenweathermapkey</span><spanclass="w"></span><spanclass="c1"># required only if not using provider, this reveals api key in requests</span>
</span><spanid="__span-0-8"><aid="__codelineno-0-8"name="__codelineno-0-8"href="#__codelineno-0-8"></a><spanclass="w"></span><spanclass="nt">cache</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">5</span><spanclass="w"></span><spanclass="c1"># Time in minutes to cache API responses, to stay within limits</span>
</span><spanid="__span-0-5"><aid="__codelineno-0-5"name="__codelineno-0-5"href="#__codelineno-0-5"></a><spanclass="w"></span><spanclass="nt">units</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">metric</span><spanclass="w"></span><spanclass="c1"># or imperial</span>
</span><spanid="__span-0-7"><aid="__codelineno-0-7"name="__codelineno-0-7"href="#__codelineno-0-7"></a><spanclass="w"></span><spanclass="nt">apiKey</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">youropenweathermapkey</span><spanclass="w"></span><spanclass="c1"># required only if not using provider, this reveals api key in requests</span>
</span><spanid="__span-0-8"><aid="__codelineno-0-8"name="__codelineno-0-8"href="#__codelineno-0-8"></a><spanclass="w"></span><spanclass="nt">cache</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">5</span><spanclass="w"></span><spanclass="c1"># Time in minutes to cache API responses, to stay within limits</span>
</span></code></pre></div>
<p>You can optionally not pass a <code>latitude</code> and <code>longitude</code> and the widget will use your current location (requires a secure context, eg. HTTPS).</p>
<p><em>Note: unfortunately, the package used for getting CPU temp (<ahref="https://systeminformation.io">systeminformation</a>) is not compatibile with some setups and will not report any value(s) for CPU temp.</em></p>
<p><strong>Any disk you wish to access must be mounted to your container as a volume.</strong></p>
</span><spanid="__span-0-7"><aid="__codelineno-0-7"name="__codelineno-0-7"href="#__codelineno-0-7"></a><spanclass="w"></span><spanclass="nt">units</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">imperial</span><spanclass="w"></span><spanclass="c1"># only used by cpu temp</span>
</span><spanid="__span-0-8"><aid="__codelineno-0-8"name="__codelineno-0-8"href="#__codelineno-0-8"></a><spanclass="w"></span><spanclass="nt">refresh</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">3000</span><spanclass="w"></span><spanclass="c1"># optional, in ms</span>
</span><spanid="__span-0-7"><aid="__codelineno-0-7"name="__codelineno-0-7"href="#__codelineno-0-7"></a><spanclass="w"></span><spanclass="nt">units</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">imperial</span><spanclass="w"></span><spanclass="c1"># only used by cpu temp</span>
</span><spanid="__span-0-8"><aid="__codelineno-0-8"name="__codelineno-0-8"href="#__codelineno-0-8"></a><spanclass="w"></span><spanclass="nt">refresh</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">3000</span><spanclass="w"></span><spanclass="c1"># optional, in ms</span>
</span></code></pre></div>
<p>You can also pass a <code>label</code> option, which allows you to group resources under named sections,</p>
<p><imgwidth="369"alt="Screenshot 2022-09-11 at 2 15 42 PM"src="https://user-images.githubusercontent.com/82196/189524583-abdf4cc6-99da-430c-b316-16c567db5639.png"></p>
<p>You can additionally supply an optional <code>expanded</code> property set to true in order to show additional details about the resources. By default the expanded property is set to false when not supplied.</p>
<p>You can add a search bar to your top widget area that can search using Google, Duckduckgo, Bing, Baidu, Brave or any other custom provider that supports the basic <code>?q=</code> search query param.</p>
</span><spanid="__span-0-2"><aid="__codelineno-0-2"name="__codelineno-0-2"href="#__codelineno-0-2"></a><spanclass="w"></span><spanclass="nt">provider</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">google</span><spanclass="w"></span><spanclass="c1"># google, duckduckgo, bing, baidu, brave or custom</span>
</span><spanid="__span-0-3"><aid="__codelineno-0-3"name="__codelineno-0-3"href="#__codelineno-0-3"></a><spanclass="w"></span><spanclass="nt">focus</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">true</span><spanclass="w"></span><spanclass="c1"># Optional, will set focus to the search bar on page load</span>
</span><spanid="__span-0-4"><aid="__codelineno-0-4"name="__codelineno-0-4"href="#__codelineno-0-4"></a><spanclass="w"></span><spanclass="nt">target</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">_blank</span><spanclass="w"></span><spanclass="c1"># One of _self, _blank, _parent or _top</span>
</span><spanid="__span-0-2"><aid="__codelineno-0-2"name="__codelineno-0-2"href="#__codelineno-0-2"></a><spanclass="w"></span><spanclass="nt">provider</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">google</span><spanclass="w"></span><spanclass="c1"># google, duckduckgo, bing, baidu, brave or custom</span>
</span><spanid="__span-0-3"><aid="__codelineno-0-3"name="__codelineno-0-3"href="#__codelineno-0-3"></a><spanclass="w"></span><spanclass="nt">focus</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">true</span><spanclass="w"></span><spanclass="c1"># Optional, will set focus to the search bar on page load</span>
</span><spanid="__span-0-4"><aid="__codelineno-0-4"name="__codelineno-0-4"href="#__codelineno-0-4"></a><spanclass="w"></span><spanclass="nt">target</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">_blank</span><spanclass="w"></span><spanclass="c1"># One of _self, _blank, _parent or _top</span>
<p><strong>Note: this widget is considered 'deprecated' since there is no longer a free Weather API tier for new members. See the openmeteo or openweathermap widgets for alternatives.</strong></p>
<p>The free tier is all thats required, you will need to <ahref="https://www.weatherapi.com/signup.aspx">register</a> and grab your API key.</p>
</span><spanid="__span-0-5"><aid="__codelineno-0-5"name="__codelineno-0-5"href="#__codelineno-0-5"></a><spanclass="w"></span><spanclass="nt">units</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">metric</span><spanclass="w"></span><spanclass="c1"># or imperial</span>
</span><spanid="__span-0-7"><aid="__codelineno-0-7"name="__codelineno-0-7"href="#__codelineno-0-7"></a><spanclass="w"></span><spanclass="nt">cache</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">5</span><spanclass="w"></span><spanclass="c1"># Time in minutes to cache API responses, to stay within limits</span>
</span><spanid="__span-0-5"><aid="__codelineno-0-5"name="__codelineno-0-5"href="#__codelineno-0-5"></a><spanclass="w"></span><spanclass="nt">units</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">metric</span><spanclass="w"></span><spanclass="c1"># or imperial</span>
</span><spanid="__span-0-7"><aid="__codelineno-0-7"name="__codelineno-0-7"href="#__codelineno-0-7"></a><spanclass="w"></span><spanclass="nt">cache</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">5</span><spanclass="w"></span><spanclass="c1"># Time in minutes to cache API responses, to stay within limits</span>
</span></code></pre></div>
<p>You can optionally not pass a <code>latitude</code> and <code>longitude</code> and the widget will use your current location (requires a secure context, eg. HTTPS).</p>
<p>You will need to generate a personal access token for an existing user, see the <ahref="https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=Windows#create-a-pat">azure documentation</a></p>
</span><spanid="__span-0-5"><aid="__codelineno-0-5"name="__codelineno-0-5"href="#__codelineno-0-5"></a><spanclass="w"></span><spanclass="nt">definitionId</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">pipelineDefinitionId</span><spanclass="w"></span><spanclass="c1"># required for pipelines</span>
</span><spanid="__span-0-6"><aid="__codelineno-0-6"name="__codelineno-0-6"href="#__codelineno-0-6"></a><spanclass="w"></span><spanclass="nt">branchName</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">branchName</span><spanclass="w"></span><spanclass="c1"># optional for pipelines, leave empty for all</span>
</span><spanid="__span-0-7"><aid="__codelineno-0-7"name="__codelineno-0-7"href="#__codelineno-0-7"></a><spanclass="w"></span><spanclass="nt">userEmail</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">email</span><spanclass="w"></span><spanclass="c1"># required for pull requests</span>
</span><spanid="__span-0-8"><aid="__codelineno-0-8"name="__codelineno-0-8"href="#__codelineno-0-8"></a><spanclass="w"></span><spanclass="nt">repositoryId</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">prRepositoryId</span><spanclass="w"></span><spanclass="c1"># required for pull requests</span>
</span><spanid="__span-0-5"><aid="__codelineno-0-5"name="__codelineno-0-5"href="#__codelineno-0-5"></a><spanclass="w"></span><spanclass="nt">definitionId</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">pipelineDefinitionId</span><spanclass="w"></span><spanclass="c1"># required for pipelines</span>
</span><spanid="__span-0-6"><aid="__codelineno-0-6"name="__codelineno-0-6"href="#__codelineno-0-6"></a><spanclass="w"></span><spanclass="nt">branchName</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">branchName</span><spanclass="w"></span><spanclass="c1"># optional for pipelines, leave empty for all</span>
</span><spanid="__span-0-7"><aid="__codelineno-0-7"name="__codelineno-0-7"href="#__codelineno-0-7"></a><spanclass="w"></span><spanclass="nt">userEmail</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">email</span><spanclass="w"></span><spanclass="c1"># required for pull requests</span>
</span><spanid="__span-0-8"><aid="__codelineno-0-8"name="__codelineno-0-8"href="#__codelineno-0-8"></a><spanclass="w"></span><spanclass="nt">repositoryId</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">prRepositoryId</span><spanclass="w"></span><spanclass="c1"># required for pull requests</span>
</span><spanid="__span-0-3"><aid="__codelineno-0-3"name="__codelineno-0-3"href="#__codelineno-0-3"></a><spanclass="w"></span><spanclass="nt">url</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">http://caddy.host.or.ip:adminport</span><spanclass="w"></span><spanclass="c1"># default admin port is 2019</span>
</span><spanid="__span-0-3"><aid="__codelineno-0-3"name="__codelineno-0-3"href="#__codelineno-0-3"></a><spanclass="w"></span><spanclass="nt">url</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">http://caddy.host.or.ip:adminport</span><spanclass="w"></span><spanclass="c1"># default admin port is 2019</span>
<p><strong>Note: this widget requires a feature of calibre-web that has not yet been distributed in versioned release. The code is contained in <ahref="https://hub.docker.com/layers/linuxserver/calibre-web/nightly/images/sha256-b27cbe5d17503de38135d925e226eb3e5ba04c558dbc865dc85d77824d35d7e2">"nightly" lsio builds after 25/8/23</a> or running the calibre-web source code including commit <ahref="https://github.com/janeczku/calibre-web/commit/0499e578cdd45db656da34cd2d7152c8d88ceb23">0499e57</a>.</strong></p>
<p><em>As of v0.6.10 this widget no longer accepts a Cloudflare global API key (or account email) due to security concerns. Instead, you should setup an API token which only requires the permissions <code>Account.Cloudflare Tunnel:Read</code>.</em></p>
</span><spanid="__span-0-3"><aid="__codelineno-0-3"name="__codelineno-0-3"href="#__codelineno-0-3"></a><spanclass="w"></span><spanclass="nt">accountid</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">accountid</span><spanclass="w"></span><spanclass="c1"># from zero trust dashboard url e.g. https://one.dash.cloudflare.com/<accountid>/home/quick-start</span>
</span><spanid="__span-0-4"><aid="__codelineno-0-4"name="__codelineno-0-4"href="#__codelineno-0-4"></a><spanclass="w"></span><spanclass="nt">tunnelid</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">tunnelid</span><spanclass="w"></span><spanclass="c1"># found in tunnels dashboard under the tunnel name</span>
</span><spanid="__span-0-5"><aid="__codelineno-0-5"name="__codelineno-0-5"href="#__codelineno-0-5"></a><spanclass="w"></span><spanclass="nt">key</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">cloudflareapitoken</span><spanclass="w"></span><spanclass="c1"># api token with `Account.Cloudflare Tunnel:Read` https://dash.cloudflare.com/profile/api-tokens</span>
</span><spanid="__span-0-3"><aid="__codelineno-0-3"name="__codelineno-0-3"href="#__codelineno-0-3"></a><spanclass="w"></span><spanclass="nt">accountid</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">accountid</span><spanclass="w"></span><spanclass="c1"># from zero trust dashboard url e.g. https://one.dash.cloudflare.com/<accountid>/home/quick-start</span>
</span><spanid="__span-0-4"><aid="__codelineno-0-4"name="__codelineno-0-4"href="#__codelineno-0-4"></a><spanclass="w"></span><spanclass="nt">tunnelid</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">tunnelid</span><spanclass="w"></span><spanclass="c1"># found in tunnels dashboard under the tunnel name</span>
</span><spanid="__span-0-5"><aid="__codelineno-0-5"name="__codelineno-0-5"href="#__codelineno-0-5"></a><spanclass="w"></span><spanclass="nt">key</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">cloudflareapitoken</span><spanclass="w"></span><spanclass="c1"># api token with `Account.Cloudflare Tunnel:Read` https://dash.cloudflare.com/profile/api-tokens</span>
<p>You can also specify slugs instead of symbols (since symbols aren't garaunteed to be unique). If you supply both, slugs will be used. For example:</p>
<p>This widget can show information from custom self-hosted or third party API.</p>
<p>Fields need to be defined in the <code>mappings</code> section YAML object to correlate with the value in the APIs JSON object. Final field definition needs to be the key with the desired value information.</p>
</span><spanid="__span-0-4"><aid="__codelineno-0-4"name="__codelineno-0-4"href="#__codelineno-0-4"></a><spanclass="w"></span><spanclass="nt">refreshInterval</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">10000</span><spanclass="w"></span><spanclass="c1"># optional - in milliseconds, defaults to 10s</span>
</span><spanid="__span-0-7"><aid="__codelineno-0-7"name="__codelineno-0-7"href="#__codelineno-0-7"></a><spanclass="w"></span><spanclass="nt">method</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">GET</span><spanclass="w"></span><spanclass="c1"># optional, e.g. POST</span>
</span><spanid="__span-0-8"><aid="__codelineno-0-8"name="__codelineno-0-8"href="#__codelineno-0-8"></a><spanclass="w"></span><spanclass="nt">headers</span><spanclass="p">:</span><spanclass="w"></span><spanclass="c1"># optional, must be object, see below</span>
</span><spanid="__span-0-10"><aid="__codelineno-0-10"name="__codelineno-0-10"href="#__codelineno-0-10"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">field</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">key</span><spanclass="w"></span><spanclass="c1"># needs to be YAML string or object</span>
</span><spanid="__span-0-12"><aid="__codelineno-0-12"name="__codelineno-0-12"href="#__codelineno-0-12"></a><spanclass="w"></span><spanclass="nt">format</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">text</span><spanclass="w"></span><spanclass="c1"># optional - defaults to text</span>
</span><spanid="__span-0-13"><aid="__codelineno-0-13"name="__codelineno-0-13"href="#__codelineno-0-13"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">field</span><spanclass="p">:</span><spanclass="w"></span><spanclass="c1"># needs to be YAML string or object</span>
</span><spanid="__span-0-18"><aid="__codelineno-0-18"name="__codelineno-0-18"href="#__codelineno-0-18"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">field</span><spanclass="p">:</span><spanclass="w"></span><spanclass="c1"># needs to be YAML string or object</span>
</span><spanid="__span-0-4"><aid="__codelineno-0-4"name="__codelineno-0-4"href="#__codelineno-0-4"></a><spanclass="w"></span><spanclass="nt">refreshInterval</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">10000</span><spanclass="w"></span><spanclass="c1"># optional - in milliseconds, defaults to 10s</span>
</span><spanid="__span-0-7"><aid="__codelineno-0-7"name="__codelineno-0-7"href="#__codelineno-0-7"></a><spanclass="w"></span><spanclass="nt">method</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">GET</span><spanclass="w"></span><spanclass="c1"># optional, e.g. POST</span>
</span><spanid="__span-0-8"><aid="__codelineno-0-8"name="__codelineno-0-8"href="#__codelineno-0-8"></a><spanclass="w"></span><spanclass="nt">headers</span><spanclass="p">:</span><spanclass="w"></span><spanclass="c1"># optional, must be object, see below</span>
</span><spanid="__span-0-10"><aid="__codelineno-0-10"name="__codelineno-0-10"href="#__codelineno-0-10"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">field</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">key</span><spanclass="w"></span><spanclass="c1"># needs to be YAML string or object</span>
</span><spanid="__span-0-12"><aid="__codelineno-0-12"name="__codelineno-0-12"href="#__codelineno-0-12"></a><spanclass="w"></span><spanclass="nt">format</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">text</span><spanclass="w"></span><spanclass="c1"># optional - defaults to text</span>
</span><spanid="__span-0-13"><aid="__codelineno-0-13"name="__codelineno-0-13"href="#__codelineno-0-13"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">field</span><spanclass="p">:</span><spanclass="w"></span><spanclass="c1"># needs to be YAML string or object</span>
</span><spanid="__span-0-18"><aid="__codelineno-0-18"name="__codelineno-0-18"href="#__codelineno-0-18"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">field</span><spanclass="p">:</span><spanclass="w"></span><spanclass="c1"># needs to be YAML string or object</span>
</span><spanid="__span-0-23"><aid="__codelineno-0-23"name="__codelineno-0-23"href="#__codelineno-0-23"></a><spanclass="w"></span><spanclass="nt">format</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">percent</span><spanclass="w"></span><spanclass="c1"># optional - defaults to text</span>
</span></code></pre></div>
<p>Supported formats for the values are <code>text</code>, <code>number</code>, <code>float</code>, <code>percent</code>, <code>bytes</code> and <code>bitrate</code>.</p>
<h2id="example">Example</h2>
<p>For the following JSON object from the API:</p>
</span><spanid="__span-1-15"><aid="__codelineno-1-15"name="__codelineno-1-15"href="#__codelineno-1-15"></a><spanclass="w"></span><spanclass="nt">"name"</span><spanclass="p">:</span><spanclass="w"></span><spanclass="s2">"Citadel of Ricks"</span>
</span><spanid="__span-1-15"><aid="__codelineno-1-15"name="__codelineno-1-15"href="#__codelineno-1-15"></a><spanclass="w"></span><spanclass="nt">"name"</span><spanclass="p">:</span><spanclass="w"></span><spanclass="s2">"Citadel of Ricks"</span>
</span><spanid="__span-3-9"><aid="__codelineno-3-9"name="__codelineno-3-9"href="#__codelineno-3-9"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">any</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">true</span><spanclass="w"></span><spanclass="c1"># will map all other values</span>
</span><spanid="__span-3-9"><aid="__codelineno-3-9"name="__codelineno-3-9"href="#__codelineno-3-9"></a><spanclass="w"></span><spanclass="p p-Indicator">-</span><spanclass="w"></span><spanclass="nt">any</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">true</span><spanclass="w"></span><spanclass="c1"># will map all other values</span>
<p>Uses the same password used to login to the webui, see <ahref="https://dev.deluge-torrent.org/wiki/Faq#Whatisthedefaultpassword">the deluge FAQ</a>.</p>
<li>Under the <code>User Groups</code> tab of the user config dialogue check the box for <code>Administrators</code>.</li>
<li>On the <code>Permissions</code> tab check the top box for <code>No Access</code>, effectively prohibiting the user from accessing anything in the shared folders.</li>
<li>Under <code>Applications</code> check the box next to <code>Deny</code> in the header to explicitly prohibit login to all applications.</li>
<li>Now <em>only</em> allow login to the <code>Download Station</code> application, either by<ul>
<li>Now <em>only</em> allow login to the <code>Download Station</code> application, either by</li>
<li>unchecking <code>Deny</code> in the respective row, or (if inheriting permission doesn't work because of other group settings)</li>
<li>checking <code>Allow</code> for this app, or</li>
<li>checking <code>By IP</code> for this app to limit the source of login attempts to one or more IP addresses/subnets.</li>
</ul>
</li>
<li>When the <code>Preview</code> column shows <code>Allow</code> in the <code>Download Station</code> row, click <code>Save</code>.</li>
</ol>
<p>Now configure the widget with the correct login information and test it.</p>
<p>If you encounter issues during testing, make sure to uncheck the option for automatic blocking due to invalid logins under <code>Control Panel > Security > Protection</code>. If desired, this setting can be reactivated once the login is established working.</p>
<p>You can create an API key from inside Emby at <code>Settings > Advanced > Api Keys</code>.</p>
<p>As of v0.6.11 the widget supports fields <code>["movies", "series", "episodes", "songs"]</code>. These blocks are disabled by default but can be enabled with the <code>enableBlocks</code> option, and the "Now Playing" feature (enabled by default) can be disabled with the <code>enableNowPlaying</code> option.</p>
</span><spanid="__span-0-4"><aid="__codelineno-0-4"name="__codelineno-0-4"href="#__codelineno-0-4"></a><spanclass="w"></span><spanclass="nt">username</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">username</span><spanclass="w"></span><spanclass="c1"># if set</span>
</span><spanid="__span-0-5"><aid="__codelineno-0-5"name="__codelineno-0-5"href="#__codelineno-0-5"></a><spanclass="w"></span><spanclass="nt">password</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">password</span><spanclass="w"></span><spanclass="c1"># if set</span>
</span><spanid="__span-0-4"><aid="__codelineno-0-4"name="__codelineno-0-4"href="#__codelineno-0-4"></a><spanclass="w"></span><spanclass="nt">username</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">username</span><spanclass="w"></span><spanclass="c1"># if set</span>
</span><spanid="__span-0-5"><aid="__codelineno-0-5"name="__codelineno-0-5"href="#__codelineno-0-5"></a><spanclass="w"></span><spanclass="nt">password</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">password</span><spanclass="w"></span><spanclass="c1"># if set</span>
<p>Please refer to <ahref="https://freshrss.github.io/FreshRSS/en/users/06_Mobile_access.html#enable-the-api-in-freshrss">Enable the API in FreshRSS</a> for the "API password" to be entered in the password field.</p>
</span><spanid="__span-0-3"><aid="__codelineno-0-3"name="__codelineno-0-3"href="#__codelineno-0-3"></a><spanclass="w"></span><spanclass="nt">serverType</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">csgo</span><spanclass="w"></span><spanclass="c1"># see https://github.com/gamedig/node-gamedig#games-list</span>
</span><spanid="__span-0-3"><aid="__codelineno-0-3"name="__codelineno-0-3"href="#__codelineno-0-3"></a><spanclass="w"></span><spanclass="nt">serverType</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">csgo</span><spanclass="w"></span><spanclass="c1"># see https://github.com/gamedig/node-gamedig#games-list</span>
<p>Requires <ahref="https://github.com/qdm12/gluetun-wiki/blob/main/setup/advanced/control-server.md">HTTP control server options</a> to be enabled.</p>
<p>Up to a maximum of four custom states and/or templates can be queried via the <code>custom</code> property like in the example below.
The <code>custom</code> property will have no effect as long as the <code>fields</code> property is defined.</p>
<ul>
<li><code>state</code> will query the state of the specified <code>entity_id</code><ul>
<li><code>state</code> will query the state of the specified <code>entity_id</code></li>
<li>state labels and values can be user defined and may reference entity attributes in curly brackets</li>
<li>if no state label is defined it will default to <code>"{attributes.friendly_name}"</code></li>
<li>if no state value is defined it will default to <code>"{state} {attributes.unit_of_measurement}"</code></li>
</ul>
</li>
<li><code>template</code> will query the specified template, see (Home Assistant Templating)[https://www.home-assistant.io/docs/configuration/templating]<ul>
<li><code>template</code> will query the specified template, see (Home Assistant Templating)[https://www.home-assistant.io/docs/configuration/templating]</li>
<li>if no template label is defined it will be empty</li>
<p>The Homebridge API is actually provided by the Config UI X plugin that has been included with Homebridge for a while, still it is required to be installed for this widget to work.</p>
<p>You can create an API key from inside Jellyfin at <code>Settings > Advanced > Api Keys</code>.</p>
<p>As of v0.6.11 the widget supports fields <code>["movies", "series", "episodes", "songs"]</code>. These blocks are disabled by default but can be enabled with the <code>enableBlocks</code> option, and the "Now Playing" feature (enabled by default) can be disabled with the <code>enableNowPlaying</code> option.</p>
<p>You may optionally pass values for <code>snapshotHost</code> and / or <code>snapshotPath</code> to select a specific backup source for the widget.</p>
<p>Use the base URL of the Mastodon instance you'd like to pull stats for. Does not require authentication as the stats are part of the public API endpoints.</p>
<p>Pass the stream URL from a service like <ahref="https://github.com/pikvm/ustreamer">µStreamer</a> or <ahref="https://github.com/ayufan/camera-streamer">camera-streamer</a>.</p>
<p>This widget uses the same authentication method as your browser when logging in (HTTP Basic Auth), and is often referred to as the ControlUsername and ControlPassword inside of Nzbget documentation.</p>
<p>Finally, create a new API key which will download an <code>apikey.txt</code> file with your key and secret in it. Use the values as the username and password fields, respectively, in your homepage config.</p>
<p>Use username & password, or the token key. Information about the token can be found in the <ahref="https://docs.paperless-ngx.com/api/#authorization">Paperless-ngx API documentation</a>. If both are provided, the token will be used.</p>
<p>Load is returned instead of cpu utilization. This is a limitation in the pfSense API due to the complexity of this calculation. This may become available in future versions.</p>
<p>As of v2022.12 <ahref="https://pi-hole.net/blog/2022/11/17/upcoming-changes-authentication-for-more-api-endpoints-required/#page-content">PiHole requires the use of an API key</a> if an admin password is set. Older versions do not require any authentication even if the admin uses a password.</p>
<p>Provides detailed information about currently active streams. You can find the API key from inside Tautulli at <code>Settings > Web Interface > API</code>.</p>
<p>Allowed fields: no configurable fields for this widget.</p>
<p>The core Plex API is somewhat limited but basic info regarding library sizes and the number of active streams is supported. For more detailed info regarding active streams see the <ahref="../plex-tautulli/">Plex Tautulli widget</a>.</p>
</span><spanid="__span-0-4"><aid="__codelineno-0-4"name="__codelineno-0-4"href="#__codelineno-0-4"></a><spanclass="w"></span><spanclass="nt">key</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">mytokenhere</span><spanclass="w"></span><spanclass="c1"># see https://www.plexopedia.com/plex-media-server/general/plex-token/</span>
</span><spanid="__span-0-4"><aid="__codelineno-0-4"name="__codelineno-0-4"href="#__codelineno-0-4"></a><spanclass="w"></span><spanclass="nt">key</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">mytokenhere</span><spanclass="w"></span><spanclass="c1"># see https://www.plexopedia.com/plex-media-server/general/plex-token/</span>
<p>You'll need to make sure you have the correct environment set for the integration to work properly. From the Environments section inside of Portainer, click the one you'd like to connect to and observe the ID at the end of the URL (should be), something like <code>#!/endpoints/1</code>, here <code>1</code> is the value to set as the <code>env</code> value. In order to generate an API key, please follow the steps outlined here https://docs.portainer.io/api/access.</p>
<p>You can set the optional <code>node</code> setting when you want to show metrics for a single node. By default it will show the average for the complete cluster.</p>
</span><spanid="__span-0-5"><aid="__codelineno-0-5"name="__codelineno-0-5"href="#__codelineno-0-5"></a><spanclass="w"></span><spanclass="nt">password</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">password</span><spanclass="w"></span><spanclass="c1"># only needed if set</span>
</span><spanid="__span-0-5"><aid="__codelineno-0-5"name="__codelineno-0-5"href="#__codelineno-0-5"></a><spanclass="w"></span><spanclass="nt">password</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">password</span><spanclass="w"></span><spanclass="c1"># only needed if set</span>