From e5ee468fa58957dfd13510124e47eca8399db366 Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 29 Sep 2026 20:59:18 +0200 Subject: [PATCH 1/3] chore: pause automatic CODEOWNERS review requests --- CODEOWNERS | 234 ----------------------------------------------------- 1 file changed, 234 deletions(-) delete mode 100644 CODEOWNERS diff --git a/CODEOWNERS b/CODEOWNERS deleted file mode 100644 index 5565a85fc..000000000 --- a/CODEOWNERS +++ /dev/null @@ -1,234 +0,0 @@ -# ── CODEOWNERS ─────────────────────────────────────── -* @homarr-labs/maintainers - -# Specific features / integrations -# These owners come from the PR that introduced each integration implementation. -# Specific rules override the global fallback because CODEOWNERS uses the last -# matching pattern; do not include @homarr-labs/maintainers here unless they -# should also be requested for that integration. - -# AdGuard Home - introduced in https://github.com/homarr-labs/homarr/pull/929 by @hillaliy -apps/docs/docs/integrations/adguard-home @hillaliy -packages/integrations/src/adguard-home @hillaliy - -# Anchor - introduced in https://github.com/homarr-labs/homarr/pull/5040 by @ohmzi -apps/docs/docs/integrations/anchor @ohmzi -packages/integrations/src/anchor @ohmzi - -# ArchiveTeam Warrior - introduced in https://github.com/homarr-labs/homarr/pull/5784 by @darbyjack -apps/docs/docs/integrations/archive-team-warrior @darbyjack -packages/integrations/src/archive-team-warrior @darbyjack - -# Bazarr - introduced in https://github.com/homarr-labs/homarr/pull/6156 by @Ayush7614 -apps/docs/docs/integrations/bazarr @Ayush7614 -apps/docs/docs/widgets/bazarr @Ayush7614 -packages/api/src/router/widgets/bazarr.ts @Ayush7614 -packages/integrations/src/bazarr @Ayush7614 -packages/request-handler/src/bazarr.ts @Ayush7614 -packages/widgets/src/bazarr @Ayush7614 - -# Audiobookshelf - introduced in https://github.com/homarr-labs/homarr/pull/5910 by @ajnart -apps/docs/docs/integrations/audiobookshelf @ajnart -packages/integrations/src/audiobookshelf @ajnart - -# Beszel - introduced in https://github.com/homarr-labs/homarr/pull/5900 by @ajnart -apps/docs/docs/integrations/beszel @ajnart -packages/integrations/src/beszel @ajnart - -# Codeberg - introduced in https://github.com/homarr-labs/homarr/pull/3253 by @Aandree5 -apps/docs/docs/integrations/codeberg @Aandree5 -packages/integrations/src/codeberg @Aandree5 - -# Coolify - introduced in https://github.com/homarr-labs/homarr/pull/4789 by @Rhiz3K -apps/docs/docs/integrations/coolify @Rhiz3K -packages/integrations/src/coolify @Rhiz3K - -# Dash. - introduced in https://github.com/homarr-labs/homarr/pull/1541 by @manuel-rw -apps/docs/docs/integrations/dash-dot @manuel-rw -packages/integrations/src/dashdot @manuel-rw - -# Docker Hub - introduced in https://github.com/homarr-labs/homarr/pull/3253 by @Aandree5 -apps/docs/docs/integrations/docker-hub @Aandree5 -packages/integrations/src/docker-hub @Aandree5 - -# Emby - introduced in https://github.com/homarr-labs/homarr/pull/2466 by @Meierschlumpf -apps/docs/docs/integrations/emby @Meierschlumpf -packages/integrations/src/emby @Meierschlumpf - -# GitHub - introduced in https://github.com/homarr-labs/homarr/pull/3253 by @Aandree5 -apps/docs/docs/integrations/github @Aandree5 -packages/integrations/src/github @Aandree5 - -# GitHub Container Registry - introduced in https://github.com/homarr-labs/homarr/pull/3727 by @Aandree5 -apps/docs/docs/integrations/github-containerregistry @Aandree5 -packages/integrations/src/github-container-registry @Aandree5 - -# GitLab - introduced in https://github.com/homarr-labs/homarr/pull/3253 by @Aandree5 -apps/docs/docs/integrations/gitlab @Aandree5 -packages/integrations/src/gitlab @Aandree5 - -# Glances - introduced in https://github.com/homarr-labs/homarr/pull/5102 by @manuel-rw -apps/docs/docs/integrations/glances @manuel-rw -packages/integrations/src/glances @manuel-rw - -# Gluetun - introduced in https://github.com/homarr-labs/homarr/pull/5812 by @Lok3sh-kumar -apps/docs/docs/integrations/gluetun @Lok3sh-kumar -packages/integrations/src/gluetun @Lok3sh-kumar - -# Gotify - introduced in https://github.com/homarr-labs/homarr/pull/5847 by @Nerdy-Technician -apps/docs/docs/integrations/gotify @Nerdy-Technician -packages/integrations/src/gotify @Nerdy-Technician - -# Home Assistant - introduced in https://github.com/homarr-labs/homarr/pull/578 by @manuel-rw -apps/docs/docs/integrations/home-assistant @manuel-rw -packages/integrations/src/homeassistant @manuel-rw - -# ICal - introduced in https://github.com/homarr-labs/homarr/pull/3980 by @NicolasNewman -apps/docs/docs/integrations/ical @NicolasNewman -packages/integrations/src/ical @NicolasNewman - -# Immich - introduced in https://github.com/homarr-labs/homarr/pull/5165 by @manuel-rw -apps/docs/docs/integrations/immich @manuel-rw -packages/integrations/src/immich @manuel-rw - -# Jellyfin - introduced in https://github.com/homarr-labs/homarr/pull/672 by @manuel-rw -apps/docs/docs/integrations/jellyfin @manuel-rw -packages/integrations/src/jellyfin @manuel-rw - -# Jellyseerr - introduced in https://github.com/homarr-labs/homarr/pull/774 by @manuel-rw -apps/docs/docs/integrations/jellyseerr @manuel-rw -packages/integrations/src/jellyseerr @manuel-rw - -# LinuxServer.io - introduced in https://github.com/homarr-labs/homarr/pull/3607 by @Aandree5 -apps/docs/docs/integrations/linux-server-io @Aandree5 -packages/integrations/src/linuxserverio @Aandree5 - -# Navidrome - introduced in https://github.com/homarr-labs/homarr/pull/5910 by @ajnart -apps/docs/docs/integrations/navidrome @ajnart -packages/integrations/src/navidrome @ajnart - -# Nextcloud - introduced in https://github.com/homarr-labs/homarr/pull/2501 by @manuel-rw -apps/docs/docs/integrations/nextcloud @manuel-rw -packages/integrations/src/nextcloud @manuel-rw - -# npm - introduced in https://github.com/homarr-labs/homarr/pull/3253 by @Aandree5 -apps/docs/docs/integrations/npm @Aandree5 -packages/integrations/src/npm @Aandree5 - -# ntfy - introduced in https://github.com/homarr-labs/homarr/pull/2900 by @itzTheMeow -apps/docs/docs/integrations/ntfy @ajnart @manuel-rw -packages/integrations/src/ntfy @ajnart @manuel-rw - -# OpenMediaVault - introduced in https://github.com/homarr-labs/homarr/pull/1142 by @hillaliy -apps/docs/docs/integrations/open-media-vault @hillaliy -packages/integrations/src/openmediavault @hillaliy - -# OPNsense - introduced in https://github.com/homarr-labs/homarr/pull/3424 by @Oupsman -apps/docs/docs/integrations/opnsense @Oupsman -packages/integrations/src/opnsense @Oupsman - -# Overseerr - introduced in https://github.com/homarr-labs/homarr/pull/774 by @manuel-rw -apps/docs/docs/integrations/overseerr @manuel-rw -packages/integrations/src/overseerr @manuel-rw - -# Paperless-ngx - introduced in https://github.com/homarr-labs/homarr/pull/5910 by @ajnart -apps/docs/docs/integrations/paperless-ngx @ajnart -packages/integrations/src/paperless-ngx @ajnart - -# PatchMon - introduced in https://github.com/homarr-labs/homarr/pull/6119 by @mrjoshuap -apps/docs/docs/integrations/patchmon @mrjoshuap -packages/integrations/src/patchmon @mrjoshuap -packages/widgets/src/patchmon @mrjoshuap -packages/api/src/router/widgets/patchmon.ts @mrjoshuap -packages/request-handler/src/patchmon.ts @mrjoshuap - -# PeaNUT - introduced in https://github.com/homarr-labs/homarr/pull/5862 by @afonsojramos -apps/docs/docs/integrations/peanut @afonsojramos -packages/integrations/src/peanut @afonsojramos - -# Pi-hole - introduced in https://github.com/homarr-labs/homarr/pull/521 by @Meierschlumpf -apps/docs/docs/integrations/pi-hole @Meierschlumpf -packages/integrations/src/pi-hole @Meierschlumpf - -# Plex - introduced in https://github.com/homarr-labs/homarr/pull/1342 by @hillaliy -apps/docs/docs/integrations/plex @hillaliy -packages/integrations/src/plex @hillaliy - -# Prowlarr - introduced in https://github.com/homarr-labs/homarr/pull/965 by @hillaliy -apps/docs/docs/integrations/prowlarr @hillaliy -packages/integrations/src/prowlarr @hillaliy - -# Proxmox - introduced in https://github.com/homarr-labs/homarr/pull/1969 by @Meierschlumpf -apps/docs/docs/integrations/proxmox @Meierschlumpf -packages/integrations/src/proxmox @Meierschlumpf - -# Quay - introduced in https://github.com/homarr-labs/homarr/pull/3607 by @Aandree5 -apps/docs/docs/integrations/quay @Aandree5 -packages/integrations/src/quay @Aandree5 - -# search.ch - introduced in https://github.com/homarr-labs/homarr/pull/5180 by @Meierschlumpf -apps/docs/docs/integrations/search-ch @Meierschlumpf -packages/integrations/src/search-ch @Meierschlumpf - -# Speedtest Tracker - introduced in https://github.com/homarr-labs/homarr/pull/5363 by @kylegrieder -apps/docs/docs/integrations/speedtest-tracker @kylegrieder -packages/integrations/src/speedtest-tracker @kylegrieder - -# Synology - introduced in https://github.com/homarr-labs/homarr/pull/6121 by @mrjoshuap -apps/docs/docs/integrations/synology @mrjoshuap -packages/integrations/src/synology @mrjoshuap - -# Technitium DNS - introduced in https://github.com/homarr-labs/homarr/pull/5832 by @lopsch -apps/docs/docs/integrations/technitium-dns @lopsch -packages/integrations/src/technitium @lopsch - -# Tracearr - introduced in https://github.com/homarr-labs/homarr/pull/5060 by @StrandedTurtle -apps/docs/docs/integrations/tracearr @StrandedTurtle -packages/integrations/src/tracearr @StrandedTurtle - -# TrueNAS - introduced in https://github.com/homarr-labs/homarr/pull/3745 by @manuel-rw -apps/docs/docs/integrations/truenas @manuel-rw @afonsojramos -packages/integrations/src/truenas @manuel-rw @afonsojramos - -# Umami - introduced in https://github.com/homarr-labs/homarr/pull/5362 by @febrile42 -apps/docs/docs/integrations/umami @febrile42 -packages/integrations/src/umami @febrile42 - -# UniFi Controller - introduced in https://github.com/homarr-labs/homarr/pull/2236 by @pitschi -apps/docs/docs/integrations/unifi-controller @pitschi -packages/integrations/src/unifi-controller @pitschi - -# Unraid - introduced in https://github.com/homarr-labs/homarr/pull/4439 by @manuel-rw -apps/docs/docs/integrations/unraid @manuel-rw -packages/integrations/src/unraid @manuel-rw - -# Uptime Kuma - introduced in https://github.com/homarr-labs/homarr/pull/5910 by @ajnart -apps/docs/docs/integrations/uptime-kuma @ajnart -packages/integrations/src/uptime-kuma @ajnart - -# What's Up Docker (WUD) - introduced in https://github.com/homarr-labs/homarr/pull/6523 by @tiimonn -apps/docs/docs/integrations/whats-up-docker @tiimonn -apps/docs/docs/widgets/whats-up-docker @tiimonn -packages/api/src/router/widgets/wud.ts @tiimonn -packages/integrations/src/wud @tiimonn -packages/request-handler/src/wud.ts @tiimonn -packages/widgets/src/wud @tiimonn - -# Traefik - by @Nerdy-Technician -apps/docs/docs/integrations/traefik @Nerdy-Technician -apps/docs/docs/widgets/traefik @Nerdy-Technician -packages/api/src/router/widgets/traefik.ts @Nerdy-Technician -packages/integrations/src/traefik @Nerdy-Technician -packages/request-handler/src/traefik.ts @Nerdy-Technician -packages/widgets/src/traefik @Nerdy-Technician - -# Exempt Renovate-managed files (no owners) -package.json -**/package.json -package-lock.json -**/package-lock.json -pnpm-lock.yaml -**/pnpm-lock.yaml -pnpm-workspace.yaml -Dockerfile -docker-compose.yml From d80a53f52e77ff141beb9858a920a06f59cd767f Mon Sep 17 00:00:00 2001 From: Releases Homarr <175486441+homarr-releases[bot]@users.noreply.github.com> Date: Fri, 2 Oct 2026 19:07:46 +0000 Subject: [PATCH 2/3] chore(release): 2.0.0 [skip ci] --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bade777fc..80aeb682a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,5 @@ +## [2.0.0](https://github.com/homarr-labs/homarr/compare/v1.77.2...v2.0.0) (2026-10-02) + ## [1.77.1](https://github.com/homarr-labs/homarr/compare/v1.77.0...v1.77.1) (2026-09-11) ## [1.77.0](https://github.com/homarr-labs/homarr/compare/v1.76.2...v1.77.0) (2026-09-06) From fb1537a24803280ca94c79a96577c14afe3c1a31 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 2 Oct 2026 20:15:37 +0000 Subject: [PATCH 3/3] docs(helm): update chart installation page --- .../docs/getting-started/installation/helm.md | 339 ++++++++++-------- 1 file changed, 181 insertions(+), 158 deletions(-) diff --git a/apps/docs/docs/getting-started/installation/helm.md b/apps/docs/docs/getting-started/installation/helm.md index 5e8058a9c..9092c0030 100644 --- a/apps/docs/docs/getting-started/installation/helm.md +++ b/apps/docs/docs/getting-started/installation/helm.md @@ -2,9 +2,9 @@ homarr logo -![Version: 8.28.2](https://img.shields.io/badge/Version-8.28.2-informational?style=flat) +![Version: 8.30.0](https://img.shields.io/badge/Version-8.30.0-informational?style=flat) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat) -![AppVersion: v1.76.2](https://img.shields.io/badge/AppVersion-v1.76.2-informational?style=flat) +![AppVersion: v2.0.0](https://img.shields.io/badge/AppVersion-v2.0.0-informational?style=flat) A Helm chart to deploy homarr for Kubernetes @@ -12,7 +12,7 @@ A Helm chart to deploy homarr for Kubernetes ## Source Code -- +* ## Requirements @@ -76,39 +76,38 @@ To avoid including sensitive information in plain text within your version contr Below is an exhaustive list of all secrets: -| FEATURE | SECRET NAME | SECRET KEYS | Required | -| -------- | ---------------- | ------------------------------------ | -------- | -| OIDC | auth-oidc-secret | oidc-client-id
oidc-client-secret | No | -| LDAP | auth-ldap-secret | bind-password | No | -| DATABASE | db-secret | db-url | No | -| DATABASE | db-encryption | db-encryption-key | yes | +| FEATURE | SECRET NAME | SECRET KEYS | Required | +|-----------|-------------------------|-----------------------------------------|----------| +| OIDC | auth-oidc-secret | oidc-client-id
oidc-client-secret | No | +| LDAP | auth-ldap-secret | bind-password | No | +| DATABASE | db-secret | db-url | No | +| DATABASE | db-encryption | db-encryption-key | yes | ### Database -SQLite is the default; PostgreSQL is also supported. Existing MySQL installations must [convert to SQLite before upgrading to v2](/docs/advanced/mysql-to-sqlite). - You have multiple options for configuring the database: -| DRIVER TYPE | Persistence mode | -| -------------- | ---------------------------- | -| better-sqlite3 | Pod disk | -| better-sqlite3 | homarr-database PVC | -| node-postgres | External Postgresql database | +| DRIVER TYPE | Persistence mode | +|----------------|---------------------------------| +| better-sqlite3 | Pod disk | +| better-sqlite3 | homarr-database PVC | +| mysql2 | External MySql database | +| node-postgres | External Postgresql database | #### Pod disk -No additional configuration is required. However, keep in mind that if the pod restarts, all data will be lost. This setup is not _recommended_ for production use. +No additional configuration is required. However, keep in mind that if the pod restarts, all data will be lost. This setup is not *recommended* for production use. To create the necessary database secret, execute the following command:
Required Secrets -```yaml +````yaml kubectl create secret generic db-encryption \ --from-literal=db-encryption-key='' \ --namespace homarr -``` +````
@@ -121,11 +120,11 @@ Associated secret to create :
DB Required Secrets -```yaml +````yaml kubectl create secret generic db-encryption \ --from-literal=db-encryption-key='' \ --namespace homarr -``` +````
@@ -134,16 +133,47 @@ Bellow an example of the override value file :
values.yaml -```yaml +````yaml persistence: homarrDatabase: enabled: true storageClassName: "default" size: "1Gi" -``` +````
+#### External MySql database + +To create the necessary database secrets, execute the following command: + +
+Required Secrets + +````yaml +kubectl create secret generic db-encryption \ +--from-literal=db-encryption-key='' \ +--namespace homarr +```` + +````yaml +kubectl create secret generic db-secret \ +--from-literal=db-url='mysql://user:password@host:port/homarrdb' \ +--namespace homarr +```` +
+ +Below is an example of the override values file: + +
+values.yaml + +````yaml +database: + type: mysql +```` +
+ #### External Postgresql database To create the necessary database secrets, execute the following command: @@ -151,17 +181,17 @@ To create the necessary database secrets, execute the following command:
Required Secrets -```yaml +````yaml kubectl create secret generic db-encryption \ --from-literal=db-encryption-key='' \ --namespace homarr -``` +```` -```yaml +````yaml kubectl create secret generic db-secret \ --from-literal=db-url='postgresql://user:password@host:port/homarrdb' \ --namespace homarr -``` +````
@@ -170,11 +200,10 @@ Below is an example of the override values file:
values.yaml -```yaml +````yaml database: type: postgresql -``` - +````
### Ingress @@ -184,7 +213,7 @@ The ingress section in the values.yaml file allows you to configure how external
values.yaml -```yaml +````yaml service: enabled: true # Ensure the service is enabled for Ingress to route traffic ingress: @@ -202,8 +231,7 @@ ingress: - "homarr.homelab.dev" - "www.homarr.homelab.dev" secretName: homelab-tls -``` - +````
### HTTPRoute (Gateway API) @@ -214,9 +242,9 @@ This provides a more expressive and future-proof alternative to Ingress, with su
values.yaml -```yaml +````yaml service: - enabled: true # must be enabled for HTTPRoute to forward traffic + enabled: true # must be enabled for HTTPRoute to forward traffic httproute: enabled: true parentRefs: @@ -232,15 +260,14 @@ httproute: backendRefs: - name: homarr port: 7575 -``` - +````
#### Notes: - parentRefs: the Gateway(s) this route attaches to. Gateways must already exist. - hostnames: domain names this route applies to. -- rules: each rule can define matches (paths, headers, queries), optional filters, and backendRefs to services +- rules: each rule can define matches (paths, headers, queries), optional filters, and backendRefs to services - TLS must be configured on the Gateway (not on HTTPRoute). For example, the Gateway can have a TLS listener for homarr.homelab.dev, and this route will automatically apply once matched. ### Certificates @@ -257,7 +284,7 @@ Use inline certificates to generate a ConfigMap, mounted as individual files.
values.yaml -```yaml +````yaml persistence: homarrTrustedCerts: enabled: true @@ -271,8 +298,7 @@ persistence: -----BEGIN CERTIFICATE----- MIID...EFGH== -----END CERTIFICATE----- -``` - +````
Behavior: @@ -287,7 +313,7 @@ Use inline certificates to generate a Kubernetes Secret, mounted as files.
values.yaml -```yaml +````yaml persistence: homarrTrustedCerts: enabled: true @@ -301,8 +327,7 @@ persistence: -----BEGIN CERTIFICATE----- MIIC...XYZ== -----END CERTIFICATE----- -``` - +````
Behavior: @@ -317,17 +342,16 @@ Use an existing Kubernetes Secret, assuming its keys are filenames.
values.yaml -```yaml +````yaml persistence: homarrTrustedCerts: enabled: true type: existingSecret existingSecretName: "existingSecretName" existingSecretKeys: - - cert3.crt - - cert4.crt -``` - + - cert3.crt + - cert4.crt +````
Behavior: @@ -348,115 +372,114 @@ All available values are listed on the [artifacthub](https://artifacthub.io/pack ## Values -| Key | Type | Default | Description | -| -------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| additionalObjects | list | `[]` | Additional resources to deploy. These objects are templated. | -| affinity | object | `{}` | Node affinity for pod scheduling | -| autoscaling.enabled | bool | `false` | Enable autoscaling | -| autoscaling.maxReplicas | int | `100` | Maximum replicas | -| autoscaling.minReplicas | int | `1` | Minimum replicas | -| autoscaling.targetCPUUtilizationPercentage | int | `80` | Target CPU utilization for autoscaling | -| containerPorts | object | `{"http":{"port":7575,"protocol":"TCP"}}` | containerPorts defines the ports to open on the container. It is a map where each entry specifies: - `port` (int) (required): The port number to expose inside the container. - `protocol` (string) (required): The network protocol (TCP or UDP) used for the port. - `disabled` (bool) : Optional flag to disable this port (defaults to false). Can be overridden via Helm values. By default, this configuration exposes TCP port 7575 with the name `http`. | -| database.migrationEnabled | bool | `true` | Database migration configuration. DB_MIGRATIONS_DISABLED Set to `true` to disable database migrations. Migrations are enabled by default (`false`). | -| database.type | string | `"sqlite"` | Database type: sqlite or postgresql | -| env.AUTH_COOKIE_PREFIX | string | `"homarr"` | Prefix used for all authentication cookies. Change if you run another Auth.js/NextAuth app on the same hostname to avoid cookie name collisions. Only letters, numbers, hyphens and underscores. | -| env.AUTH_LDAP_BASE | string | `nil` | Base dn of your LDAP server | -| env.AUTH_LDAP_BIND_DN | string | `nil` | User used for finding users and groups | -| env.AUTH_LDAP_GROUP_CLASS | string | `"groupOfUniqueNames"` | Class used for querying groups | -| env.AUTH_LDAP_GROUP_FILTER_EXTRA_ARG | string | `nil` | Extra arguments for user's groups search filter (& based) | -| env.AUTH_LDAP_GROUP_MEMBER_ATTRIBUTE | string | `"member"` | Attribute used for querying group member | -| env.AUTH_LDAP_GROUP_MEMBER_USER_ATTRIBUTE | string | `"dn"` | User attribute used for comparing with group member | -| env.AUTH_LDAP_SEARCH_SCOPE | string | `"base"` | LDAP search scope between base, one or sub | -| env.AUTH_LDAP_URI | string | `nil` | URI of your LDAP server | -| env.AUTH_LDAP_USERNAME_ATTRIBUTE | string | `"uid"` | Attribute used for username | -| env.AUTH_LDAP_USERNAME_FILTER_EXTRA_ARG | string | `nil` | Extra arguments for user search filter (& based) | -| env.AUTH_LDAP_USER_MAIL_ATTRIBUTE | string | `"mail"` | Attribute used for mail field | -| env.AUTH_LOGOUT_REDIRECT_URL | string | `nil` | URL to redirect to after clicking logging out. | -| env.AUTH_OIDC_AUTO_LOGIN | string | `"false"` | Automatically redirect to OIDC login | -| env.AUTH_OIDC_CLIENT_NAME | string | `"OIDC"` | Display name of provider (in login screen) | -| env.AUTH_OIDC_GROUPS_ATTRIBUTE | string | `"groups"` | Attribute used for groups (roles) claim | -| env.AUTH_OIDC_ISSUER | string | `nil` | Issuer URI of OIDC provider without trailing slash (/) | -| env.AUTH_OIDC_NAME_ATTRIBUTE_OVERWRITE | string | `nil` | Overwrite name attribute. By default, it will use preferred_username if it does not contain a @ and otherwise name. | -| env.AUTH_OIDC_SCOPE_OVERWRITE | string | `"openid email profile groups"` | Override the OIDC scopes | -| env.AUTH_PROVIDERS | string | `"credentials"` | Enabled authentication methods. Multiple providers can be enabled with by separating them with , (ex. AUTH_PROVIDERS=credentials,oidc, it is highly recommended to just enable one provider). | -| env.AUTH_SESSION_EXPIRY_TIME | string | `"30d"` | Time for the session to time out. Can be set as pure number, which will automatically be used in seconds, or followed by s, m, h or d for seconds, minutes, hours or days. (ex: "30m") | -| env.ENABLE_DNS_CACHING | string | `"false"` | Enables dns caching. This is not yet working for all users. See #4006 | -| env.LOG_LEVEL | string | `"info"` | Log level to use. Possible values: debug/info/warn/error | -| env.NO_EXTERNAL_CONNECTION | string | `"false"` | Disables some requests that need internet connection | -| env.TZ | string | `"Europe/Paris"` | Your local time zone | -| envSecrets.authLdapCredentials.existingSecret | string | `"auth-ldap-secret"` | Name of existing secret containing LDAP credentials | -| envSecrets.authLdapCredentials.ldapBindingPassword | string | `"bind-password"` | Password for bind user secret key | -| envSecrets.authOidcCredentials.existingSecret | string | `"auth-oidc-secret"` | Name of existing secret containing OIDC credentials | -| envSecrets.authOidcCredentials.oidcClientId | string | `"oidc-client-id"` | ID of OIDC client (application) secret key | -| envSecrets.authOidcCredentials.oidcClientSecret | string | `"oidc-client-secret"` | Secret of OIDC client (application) secret key | -| envSecrets.dbCredentials.dbUrlKey | string | `"db-url"` | Secret key for DB_URL Example for external database: `postgresql://username:password@host:port/homarrdb` | -| envSecrets.dbCredentials.existingSecret | string | `"db-secret"` | Name of existing secret containing DB credentials | -| envSecrets.dbEncryption.existingSecret | string | `"db-encryption"` | Name of existing secret containing DB encryption | -| envSecrets.dbEncryption.key | string | `"db-encryption-key"` | Secret key for SECRET_ENCRYPTION_KEY can be generated with `openssl rand -hex 32` | -| fullnameOverride | string | `""` | Overrides chart's fullname | -| hostAliases | list | `[]` | Add static entries to /etc/hosts in the Pod. This is useful in the following cases: - You are running in a dual-stack cluster (IPv4 + IPv6) and want to force usage of IPv4 for specific hostnames - Your application is having DNS resolution issues or IPv6 preference issues - You need to override or simulate DNS entries without changing global DNS - You are running in an air-gapped or isolated environment without external DNS Example: hostAliases: - ip: "192.168.1.10" hostnames: - "example.com" - "example.internal" | -| httproute | object | `{"enabled":false,"hostnames":["chart-example.local"],"parentRefs":[{"name":"my-gateway","namespace":"default"}],"rules":[{"backendRefs":[{"name":"homarr","port":7575}],"filters":[],"matches":[{"path":{"type":"PathPrefix","value":"/"}}]}]}` | Gateway API HTTPRoute configuration | -| httproute.enabled | bool | `false` | Enable HTTPRoute | -| httproute.hostnames | list | `["chart-example.local"]` | Hostnames this route matches (similar to ingress.hosts.host) | -| httproute.parentRefs | list | `[{"name":"my-gateway","namespace":"default"}]` | References to the parent Gateway(s) this route attaches to. Each item must include at least a `name`, and optionally a `namespace`. | -| httproute.rules | list | `[{"backendRefs":[{"name":"homarr","port":7575}],"filters":[],"matches":[{"path":{"type":"PathPrefix","value":"/"}}]}]` | List of routing rules. Each rule can include: - matches: path/header/query matching - filters: optional transformations (redirects, header modifications, etc.) - backendRefs: one or more Kubernetes Services to forward traffic to | -| httproute.rules[0].filters | list | `[]` | Optional filters for this rule (default: empty) | -| httproute.rules[0].matches[0].path.type | string | `"PathPrefix"` | Path match type. One of: Exact, PathPrefix, RegularExpression | -| httproute.rules[0].matches[0].path.value | string | `"/"` | Path value to match | -| image.pullPolicy | string | `"IfNotPresent"` | Image pull policy | -| image.repository | string | `"ghcr.io/homarr-labs/homarr"` | Image repository | -| image.tag | string | `"v1.76.2"` | Overrides the image tag whose default is the chart appVersion | -| imagePullSecrets | list | `[]` | Secrets for Docker registry | -| ingress.annotations | object | `{}` | Ingress annotations | -| ingress.enabled | bool | `false` | Enable ingress | -| ingress.hosts | list | `[{"host":"chart-example.local","paths":[{"path":"/"}]}]` | Ingress hosts configuration | -| ingress.ingressClassName | string | `""` | Ingress class name | -| ingress.tls | list | `[]` | Ingress TLS configuration | -| livenessProbe.failureThreshold | int | `3` | Failure threshold for liveness probe - number of consecutive failures before pod is restarted | -| livenessProbe.httpGet.path | string | `"/api/health/live"` | This is the liveness check endpoint used by Kubernetes to determine if the application is still running. | -| livenessProbe.httpGet.port | int | `7575` | The port on which the liveness check will be performed. This must be the same as the container port exposed by the application. | -| livenessProbe.initialDelaySeconds | int | `10` | Initial delay in seconds before the liveness probe starts | -| livenessProbe.periodSeconds | int | `10` | Period in seconds between liveness probe checks | -| livenessProbe.timeoutSeconds | int | `1` | Timeout in seconds for each liveness probe check | -| nameOverride | string | `""` | Overrides chart's name | -| nodeSelector | object | `{}` | Node selectors for pod scheduling | -| persistence.homarrDatabase.accessMode | string | `"ReadWriteOnce"` | homarr-database access mode | -| persistence.homarrDatabase.enabled | bool | `false` | Enable homarr-database persistent storage | -| persistence.homarrDatabase.mountPath | string | `"/appdata"` | homarr-database mount path inside the pod | -| persistence.homarrDatabase.name | string | `"homarr-database"` | homarr-database persistent storage name | -| persistence.homarrDatabase.size | string | `"50Mi"` | homarr-database storage size | -| persistence.homarrDatabase.storageClassName | string | `"local-path"` | homarr-database storage class name | -| persistence.homarrDatabase.volumeClaimName | string | `""` | homarr-database optional volumeClaimName to target specific PV | -| persistence.homarrTrustedCerts.certificates | string | `nil` | homarr-trusted-certificates certificates, each entry will become a new trusted certificate as a dedicated file (works only for "configmap" and "secret" mode) | -| persistence.homarrTrustedCerts.enabled | bool | `false` | Enable trusted certificates persistence | -| persistence.homarrTrustedCerts.existingSecretKeys | string | `nil` | List of keys (filenames) to mount from the existing secret (used only when type is "existingSecret") | -| persistence.homarrTrustedCerts.existingSecretName | string | `""` | Name of the existing Kubernetes Secret to mount (required if type is "existingSecret") | -| persistence.homarrTrustedCerts.mountPath | string | `"/appdata/trusted-certificates"` | homarr-trusted-certificates mount path inside the pod | -| persistence.homarrTrustedCerts.type | string | `"configmap"` | Persistence mode can be : configmap (declarative), secret (declarative) or existingSecret (mount an existing Kubernetes Secret by name and specify which keys to mount as files) | -| podAnnotations | object | `{}` | Pod annotations | -| podLabels | object | `{}` | Pod labels | -| podSecurityContext | object | `{}` | Pod security context | -| rbac | object | `{"enabled":false}` | Enable RBAC resources for Kubernetes integration Creates Role, ClusterRole, and associated bindings for Homarr's Kubernetes features | -| rbac.enabled | bool | `false` | Enable to create RBAC resources and activate Kubernetes integration | -| readinessProbe.failureThreshold | int | `3` | Failure threshold for readiness probe - number of consecutive failures before pod is considered unready | -| readinessProbe.httpGet.path | string | `"/api/health/ready"` | This is the readiness check endpoint used by Kubernetes to determine if the application is ready to handle traffic. | -| readinessProbe.httpGet.port | int | `7575` | The port on which the readiness check will be performed. This must match the container's exposed port. | -| readinessProbe.initialDelaySeconds | int | `10` | Initial delay in seconds before the readiness probe starts. increase this value if the pod is slow to fully start. | -| readinessProbe.periodSeconds | int | `10` | Period in seconds between readiness probe checks | -| readinessProbe.timeoutSeconds | int | `1` | Timeout in seconds for each readiness probe check | -| replicaCount | int | `1` | Number of replicas | -| resources | object | `{}` | Resource configuration | -| securityContext | object | `{}` | Security context | -| service.enabled | bool | `true` | Enable service | -| service.ipFamilies | list | `[]` | List of IP families to use for the service. Examples: - ["IPv4"] - ["IPv6"] - ["IPv4", "IPv6"] for dual-stack Leave empty to use cluster default behavior | -| service.ipFamilyPolicy | string | `"SingleStack"` | Defines how the service assigns IP families (IPv4/IPv6) Possible values: - SingleStack (default): Only one IP family, usually IPv4 - PreferDualStack: Use dual-stack if the cluster supports it, fallback to single - RequireDualStack: Fail if dual-stack cannot be assigned | -| service.ports.app.port | int | `7575` | Service port | -| service.ports.app.protocol | string | `"TCP"` | Service protocol | -| service.ports.app.targetPort | string | `"http"` | Service target port | -| service.type | string | `"ClusterIP"` | Service type | -| strategyType | string | `"RollingUpdate"` | `strategyType` specifies the strategy used to replace old Pods by new ones. `strategyType` can be `"Recreate"` or `"RollingUpdate"`. `"RollingUpdate"` is the default value and updates Pods in a rolling update fashion. `"Recreate"` will kill all existing Pods before new ones are created. The `"Recreate"` strategy is necessary when persistent volume's `accessMode` is set to `"ReadWriteOnce"` when using `helm upgrade`, as pod volume attachments to an existing PersistentVolumeClaim need to be cleared before a new pod can attach to it. | -| tolerations | list | `[]` | Node tolerations for pod scheduling | +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| additionalObjects | list | `[]` | Additional resources to deploy. These objects are templated. | +| affinity | object | `{}` | Node affinity for pod scheduling | +| autoscaling.enabled | bool | `false` | Enable autoscaling | +| autoscaling.maxReplicas | int | `100` | Maximum replicas | +| autoscaling.minReplicas | int | `1` | Minimum replicas | +| autoscaling.targetCPUUtilizationPercentage | int | `80` | Target CPU utilization for autoscaling | +| containerPorts | object | `{"http":{"port":7575,"protocol":"TCP"}}` | containerPorts defines the ports to open on the container. It is a map where each entry specifies: - `port` (int) (required): The port number to expose inside the container. - `protocol` (string) (required): The network protocol (TCP or UDP) used for the port. - `disabled` (bool) : Optional flag to disable this port (defaults to false). Can be overridden via Helm values. By default, this configuration exposes TCP port 7575 with the name `http`. | +| database.migrationEnabled | bool | `true` | Database migration configuration. DB_MIGRATIONS_DISABLED Set to `true` to disable database migrations. Migrations are enabled by default (`false`). | +| database.type | string | `"sqlite"` | Database type: sqlite, mysql or postgresql | +| env.AUTH_COOKIE_PREFIX | string | `"homarr"` | Prefix used for all authentication cookies. Change if you run another Auth.js/NextAuth app on the same hostname to avoid cookie name collisions. Only letters, numbers, hyphens and underscores. | +| env.AUTH_LDAP_BASE | string | `nil` | Base dn of your LDAP server | +| env.AUTH_LDAP_BIND_DN | string | `nil` | User used for finding users and groups | +| env.AUTH_LDAP_GROUP_CLASS | string | `"groupOfUniqueNames"` | Class used for querying groups | +| env.AUTH_LDAP_GROUP_FILTER_EXTRA_ARG | string | `nil` | Extra arguments for user's groups search filter (& based) | +| env.AUTH_LDAP_GROUP_MEMBER_ATTRIBUTE | string | `"member"` | Attribute used for querying group member | +| env.AUTH_LDAP_GROUP_MEMBER_USER_ATTRIBUTE | string | `"dn"` | User attribute used for comparing with group member | +| env.AUTH_LDAP_SEARCH_SCOPE | string | `"base"` | LDAP search scope between base, one or sub | +| env.AUTH_LDAP_URI | string | `nil` | URI of your LDAP server | +| env.AUTH_LDAP_USERNAME_ATTRIBUTE | string | `"uid"` | Attribute used for username | +| env.AUTH_LDAP_USERNAME_FILTER_EXTRA_ARG | string | `nil` | Extra arguments for user search filter (& based) | +| env.AUTH_LDAP_USER_MAIL_ATTRIBUTE | string | `"mail"` | Attribute used for mail field | +| env.AUTH_LOGOUT_REDIRECT_URL | string | `nil` | URL to redirect to after clicking logging out. | +| env.AUTH_OIDC_AUTO_LOGIN | string | `"false"` | Automatically redirect to OIDC login | +| env.AUTH_OIDC_CLIENT_NAME | string | `"OIDC"` | Display name of provider (in login screen) | +| env.AUTH_OIDC_GROUPS_ATTRIBUTE | string | `"groups"` | Attribute used for groups (roles) claim | +| env.AUTH_OIDC_ISSUER | string | `nil` | Issuer URI of OIDC provider without trailing slash (/) | +| env.AUTH_OIDC_NAME_ATTRIBUTE_OVERWRITE | string | `nil` | Overwrite name attribute. By default, it will use preferred_username if it does not contain a @ and otherwise name. | +| env.AUTH_OIDC_SCOPE_OVERWRITE | string | `"openid email profile groups"` | Override the OIDC scopes | +| env.AUTH_PROVIDERS | string | `"credentials"` | Enabled authentication methods. Multiple providers can be enabled with by separating them with , (ex. AUTH_PROVIDERS=credentials,oidc, it is highly recommended to just enable one provider). | +| env.AUTH_SESSION_EXPIRY_TIME | string | `"30d"` | Time for the session to time out. Can be set as pure number, which will automatically be used in seconds, or followed by s, m, h or d for seconds, minutes, hours or days. (ex: "30m") | +| env.ENABLE_DNS_CACHING | string | `"false"` | Enables dns caching. This is not yet working for all users. See #4006 | +| env.LOG_LEVEL | string | `"info"` | Log level to use. Possible values: debug/info/warn/error | +| env.NO_EXTERNAL_CONNECTION | string | `"false"` | Disables some requests that need internet connection | +| env.TZ | string | `"Europe/Paris"` | Your local time zone | +| envSecrets.authLdapCredentials.existingSecret | string | `"auth-ldap-secret"` | Name of existing secret containing LDAP credentials | +| envSecrets.authLdapCredentials.ldapBindingPassword | string | `"bind-password"` | Password for bind user secret key | +| envSecrets.authOidcCredentials.existingSecret | string | `"auth-oidc-secret"` | Name of existing secret containing OIDC credentials | +| envSecrets.authOidcCredentials.oidcClientId | string | `"oidc-client-id"` | ID of OIDC client (application) secret key | +| envSecrets.authOidcCredentials.oidcClientSecret | string | `"oidc-client-secret"` | Secret of OIDC client (application) secret key | +| envSecrets.dbCredentials.dbUrlKey | string | `"db-url"` | Secret key for DB_URL Example for external database: `mysql://username:password@host:port/homarrdb` or `postgresql://username:password@host:port/homarrdb` | +| envSecrets.dbCredentials.existingSecret | string | `"db-secret"` | Name of existing secret containing DB credentials | +| envSecrets.dbEncryption.existingSecret | string | `"db-encryption"` | Name of existing secret containing DB encryption | +| envSecrets.dbEncryption.key | string | `"db-encryption-key"` | Secret key for SECRET_ENCRYPTION_KEY can be generated with `openssl rand -hex 32` | +| fullnameOverride | string | `""` | Overrides chart's fullname | +| hostAliases | list | `[]` | Add static entries to /etc/hosts in the Pod. This is useful in the following cases: - You are running in a dual-stack cluster (IPv4 + IPv6) and want to force usage of IPv4 for specific hostnames - Your application is having DNS resolution issues or IPv6 preference issues - You need to override or simulate DNS entries without changing global DNS - You are running in an air-gapped or isolated environment without external DNS Example: hostAliases: - ip: "192.168.1.10" hostnames: - "example.com" - "example.internal" | +| httproute | object | `{"enabled":false,"hostnames":["chart-example.local"],"parentRefs":[{"name":"my-gateway","namespace":"default"}],"rules":[{"backendRefs":[{"name":"homarr","port":7575}],"filters":[],"matches":[{"path":{"type":"PathPrefix","value":"/"}}]}]}` | Gateway API HTTPRoute configuration | +| httproute.enabled | bool | `false` | Enable HTTPRoute | +| httproute.hostnames | list | `["chart-example.local"]` | Hostnames this route matches (similar to ingress.hosts.host) | +| httproute.parentRefs | list | `[{"name":"my-gateway","namespace":"default"}]` | References to the parent Gateway(s) this route attaches to. Each item must include at least a `name`, and optionally a `namespace`. | +| httproute.rules | list | `[{"backendRefs":[{"name":"homarr","port":7575}],"filters":[],"matches":[{"path":{"type":"PathPrefix","value":"/"}}]}]` | List of routing rules. Each rule can include: - matches: path/header/query matching - filters: optional transformations (redirects, header modifications, etc.) - backendRefs: one or more Kubernetes Services to forward traffic to | +| httproute.rules[0].filters | list | `[]` | Optional filters for this rule (default: empty) | +| httproute.rules[0].matches[0].path.type | string | `"PathPrefix"` | Path match type. One of: Exact, PathPrefix, RegularExpression | +| httproute.rules[0].matches[0].path.value | string | `"/"` | Path value to match | +| image.pullPolicy | string | `"IfNotPresent"` | Image pull policy | +| image.repository | string | `"ghcr.io/homarr-labs/homarr"` | Image repository | +| image.tag | string | `"v2.0.0"` | Overrides the image tag whose default is the chart appVersion | +| imagePullSecrets | list | `[]` | Secrets for Docker registry | +| ingress.annotations | object | `{}` | Ingress annotations | +| ingress.enabled | bool | `false` | Enable ingress | +| ingress.hosts | list | `[{"host":"chart-example.local","paths":[{"path":"/"}]}]` | Ingress hosts configuration | +| ingress.ingressClassName | string | `""` | Ingress class name | +| ingress.tls | list | `[]` | Ingress TLS configuration | +| livenessProbe.failureThreshold | int | `3` | Failure threshold for liveness probe - number of consecutive failures before pod is restarted | +| livenessProbe.httpGet.path | string | `"/api/health/live"` | This is the liveness check endpoint used by Kubernetes to determine if the application is still running. | +| livenessProbe.httpGet.port | int | `7575` | The port on which the liveness check will be performed. This must be the same as the container port exposed by the application. | +| livenessProbe.initialDelaySeconds | int | `10` | Initial delay in seconds before the liveness probe starts | +| livenessProbe.periodSeconds | int | `10` | Period in seconds between liveness probe checks | +| livenessProbe.timeoutSeconds | int | `1` | Timeout in seconds for each liveness probe check | +| nameOverride | string | `""` | Overrides chart's name | +| nodeSelector | object | `{}` | Node selectors for pod scheduling | +| persistence.homarrDatabase.accessMode | string | `"ReadWriteOnce"` | homarr-database access mode | +| persistence.homarrDatabase.enabled | bool | `false` | Enable homarr-database persistent storage | +| persistence.homarrDatabase.mountPath | string | `"/appdata"` | homarr-database mount path inside the pod | +| persistence.homarrDatabase.name | string | `"homarr-database"` | homarr-database persistent storage name | +| persistence.homarrDatabase.size | string | `"50Mi"` | homarr-database storage size | +| persistence.homarrDatabase.storageClassName | string | `"local-path"` | homarr-database storage class name | +| persistence.homarrDatabase.volumeClaimName | string | `""` | homarr-database optional volumeClaimName to target specific PV | +| persistence.homarrTrustedCerts.certificates | string | `nil` | homarr-trusted-certificates certificates, each entry will become a new trusted certificate as a dedicated file (works only for "configmap" and "secret" mode) | +| persistence.homarrTrustedCerts.enabled | bool | `false` | Enable trusted certificates persistence | +| persistence.homarrTrustedCerts.existingSecretKeys | string | `nil` | List of keys (filenames) to mount from the existing secret (used only when type is "existingSecret") | +| persistence.homarrTrustedCerts.existingSecretName | string | `""` | Name of the existing Kubernetes Secret to mount (required if type is "existingSecret") | +| persistence.homarrTrustedCerts.mountPath | string | `"/appdata/trusted-certificates"` | homarr-trusted-certificates mount path inside the pod | +| persistence.homarrTrustedCerts.type | string | `"configmap"` | Persistence mode can be : configmap (declarative), secret (declarative) or existingSecret (mount an existing Kubernetes Secret by name and specify which keys to mount as files) | +| podAnnotations | object | `{}` | Pod annotations | +| podLabels | object | `{}` | Pod labels | +| podSecurityContext | object | `{}` | Pod security context | +| rbac | object | `{"enabled":false}` | Enable RBAC resources for Kubernetes integration Creates Role, ClusterRole, and associated bindings for Homarr's Kubernetes features | +| rbac.enabled | bool | `false` | Enable to create RBAC resources and activate Kubernetes integration | +| readinessProbe.failureThreshold | int | `3` | Failure threshold for readiness probe - number of consecutive failures before pod is considered unready | +| readinessProbe.httpGet.path | string | `"/api/health/ready"` | This is the readiness check endpoint used by Kubernetes to determine if the application is ready to handle traffic. | +| readinessProbe.httpGet.port | int | `7575` | The port on which the readiness check will be performed. This must match the container's exposed port. | +| readinessProbe.initialDelaySeconds | int | `10` | Initial delay in seconds before the readiness probe starts. increase this value if the pod is slow to fully start. | +| readinessProbe.periodSeconds | int | `10` | Period in seconds between readiness probe checks | +| readinessProbe.timeoutSeconds | int | `1` | Timeout in seconds for each readiness probe check | +| replicaCount | int | `1` | Number of replicas | +| resources | object | `{}` | Resource configuration | +| securityContext | object | `{}` | Security context | +| service.enabled | bool | `true` | Enable service | +| service.ipFamilies | list | `[]` | List of IP families to use for the service. Examples: - ["IPv4"] - ["IPv6"] - ["IPv4", "IPv6"] for dual-stack Leave empty to use cluster default behavior | +| service.ipFamilyPolicy | string | `"SingleStack"` | Defines how the service assigns IP families (IPv4/IPv6) Possible values: - SingleStack (default): Only one IP family, usually IPv4 - PreferDualStack: Use dual-stack if the cluster supports it, fallback to single - RequireDualStack: Fail if dual-stack cannot be assigned | +| service.ports.app.port | int | `7575` | Service port | +| service.ports.app.protocol | string | `"TCP"` | Service protocol | +| service.ports.app.targetPort | string | `"http"` | Service target port | +| service.type | string | `"ClusterIP"` | Service type | +| strategyType | string | `"RollingUpdate"` | `strategyType` specifies the strategy used to replace old Pods by new ones. `strategyType` can be `"Recreate"` or `"RollingUpdate"`. `"RollingUpdate"` is the default value and updates Pods in a rolling update fashion. `"Recreate"` will kill all existing Pods before new ones are created. The `"Recreate"` strategy is necessary when persistent volume's `accessMode` is set to `"ReadWriteOnce"` when using `helm upgrade`, as pod volume attachments to an existing PersistentVolumeClaim need to be cleared before a new pod can attach to it. | +| tolerations | list | `[]` | Node tolerations for pod scheduling | --- - Autogenerated from chart metadata using [helm-docs](https://github.com/norwoodj/helm-docs)