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)
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 @@
-
+

-
+
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)