# Homarr documentation (/docs) ## Install or upgrade [#install-or-upgrade] Start with Docker Compose, Kubernetes, or your hosting platform. Update your Docker installation while keeping its data and configuration. New to Homarr? [Learn how boards, apps, integrations, and widgets fit together](/docs/getting-started), then [complete your first-board setup](/docs/getting-started/after-the-installation). ## Configure your dashboard [#configure-your-dashboard] | I want to… | Guide | | ----------------------------------- | ----------------------------------------------- | | Add links to my services | [Apps and bookmarks](/docs/management/apps) | | Arrange and share a dashboard | [Boards](/docs/management/boards) | | Connect a service to Homarr | [Find an integration](/docs/integrations) | | Display service data on a board | [Choose a widget](/docs/widgets) | | Install a community widget or style | [Use the Workshop](/docs/workshop) | | Manage access for other people | [Users and permissions](/docs/management/users) | ## Operate your installation [#operate-your-installation] * [Environment variables](/docs/advanced/environment-variables): deployment settings and defaults. * [Single sign-on](/docs/advanced/single-sign-on): credentials, LDAP, and OIDC configuration. * [Scheduled tasks](/docs/management/tasks): background work and task status. * [Get help](/docs/community): support channels and ways to contribute. ## Extend Homarr [#extend-homarr] [Build a Custom Widget](/docs/management/custom-widgets), [connect an AI client with MCP](/docs/management/mcp), or use the [HTTP API reference](/api-reference). For changes to Homarr itself, follow the [development setup](/docs/advanced/development/getting-started). # Advanced configuration (/docs/advanced) These guides cover changes that affect how Homarr is deployed, secured, operated, or extended. ## Deploy and secure [#deploy-and-secure] Configure Homarr at deployment time. Connect an external identity provider. Run Homarr behind a reverse proxy. Change the user and group used by the container. ## Customize [#customize] Apply custom CSS to Homarr. Configure icon sources and behavior. Navigate and operate Homarr with the keyboard. ## Develop and automate [#develop-and-automate] Use administrative commands from the terminal. Set up a development environment and contribute code. # Move from MySQL to SQLite (/docs/advanced/mysql-to-sqlite) Homarr v2 supports SQLite (the default) and PostgreSQL. MySQL installations must convert before upgrading to v2. The standalone converter is tested against the **Homarr v1.77.1 database schema** and writes its corresponding SQLite database. Homarr v2 applies its normal migrations when it first opens that file. The converter does not modify the source database. ## Before converting [#before-converting] 1. Back up the MySQL database, `/appdata`, your deployment configuration, and `SECRET_ENCRYPTION_KEY`. Keep the previous Homarr image available for rollback. 2. Upgrade to the latest stable v1 release (**v1.77.1** at the tested baseline) first and let its migrations finish successfully. Back up that database before continuing. 3. Stop every Homarr instance that writes to this database. Leave MySQL running and keep Homarr stopped throughout conversion and cutover. The converter validates the schema and migration journal against v1.77.1; it does not identify the application binary version. Older releases with identical schemas are compatible. Different schemas, incomplete migrations, and existing output files are rejected. ## Convert [#convert] From a checkout containing `tools/mysql-to-sqlite`, build the converter: ```sh docker build -t homarr-mysql-to-sqlite tools/mysql-to-sqlite mkdir -p converted ``` Create `mysql-conversion.env` with credentials for the source database: ```dotenv MYSQL_HOST=mysql.example.com MYSQL_PORT=3306 MYSQL_USER=homarr MYSQL_PASSWORD=replace-with-your-password MYSQL_DATABASE=homarr ``` `MYSQL_PORT` defaults to `3306`. Use a host reachable from the converter container; `localhost` refers to the container itself. Keep this credentials file out of version control. Run the converter after stopping Homarr: ```sh docker run --rm --user "$(id -u):$(id -g)" --env-file mysql-conversion.env \ -v "$(pwd)/converted:/output" \ homarr-mysql-to-sqlite --output /output/db.sqlite --homarr-stopped ``` Running as your user keeps the output file readable by you. The required `--homarr-stopped` flag confirms that you stopped Homarr; it does not stop your deployment. Wait for the converter to exit successfully before using `converted/db.sqlite`. For a TLS connection, add `MYSQL_SSL_CA=/certs/mysql-ca.pem` to the env file and mount the PEM certificate with `-v "$(pwd)/mysql-ca.pem:/certs/mysql-ca.pem:ro"`. The certificate file must be readable by the container user. ## Start Homarr v2 [#start-homarr-v2] 1. Keep a separate copy of the converted file before the first v2 startup. 2. Place `db.sqlite` at `/appdata/db/db.sqlite` in the appdata volume used by Homarr. Ensure the Homarr process can write to the file and its directory. 3. Set `DB_DRIVER=better-sqlite3` and `DB_URL=/appdata/db/db.sqlite`. Remove the previous MySQL connection settings; if you explicitly set `DB_DIALECT`, change it to `sqlite`. 4. Preserve the original `/appdata` files and **the same `SECRET_ENCRYPTION_KEY`**. The converter copies encrypted values without re-encrypting them; a different key will make those secrets unreadable. 5. Start Homarr v2 and wait for its database migrations to finish. Check the startup logs, sign in, and verify your boards, users, integrations, and uploaded files. The converter output is a raw SQLite database. Do not upload it to the backup ZIP import page. ## Roll back [#roll-back] Stop Homarr v2, then restore your previous deployment configuration, image, appdata backup, and encryption key, pointing it at the preserved MySQL database. Do not open the v2 SQLite database with the older Homarr image. Changes made after switching to SQLite are not synchronized back to MySQL. Keep the original database and backups until you have verified the new installation. # Donate (/docs/community/donate) Donations fund Homarr's development infrastructure and community services. Support the project through [OpenCollective](https://opencollective.com/homarr). For sponsorships or donated services, use the private contact listed on [Get in touch](/docs/community/get-in-touch). # Frequently Asked Questions (/docs/community/faq) ## Can Homarr run on a Raspberry Pi? [#can-homarr-run-on-a-raspberry-pi] Yes, when the device uses a supported `linux/arm64` operating system. `linux/arm/v7` is not supported. See [Prerequisites](/docs/getting-started). ## Can I use custom app icons? [#can-i-use-custom-app-icons] Yes. Use a direct image URL, one of Homarr's icon sources, or upload an image. See [Icons](/docs/advanced/icons). ## Can I create widgets? [#can-i-create-widgets] Yes. [Custom Widgets](/docs/management/custom-widgets) use server-side API requests and safe JSX. They can be written in the workbench or created with an MCP-connected agent. ## Can Homarr be exposed to the internet? [#can-homarr-be-exposed-to-the-internet] Homarr supports authenticated and public deployments. Terminate HTTPS at a reverse proxy, keep Homarr updated, and grant public board access only when anonymous viewing is intended. See [Board access control](/docs/management/boards#access-control) and [Single sign-on](/docs/advanced/single-sign-on). ## Where are the logs? [#where-are-the-logs] Use **Management → Tools → Logs** for retained and live application logs. Container startup failures and older events are available through the deployment platform, for example `docker container logs homarr`. Use the browser developer console only for client-side failures. Review logs before sharing them because URLs and other deployment details may be present. ## Why can Homarr not reach a service behind Gluetun? [#why-can-homarr-not-reach-a-service-behind-gluetun] Gluetun's firewall blocks traffic that is not explicitly allowed. Configure its [`FIREWALL_OUTBOUND_SUBNETS`](https://github.com/qdm12/gluetun-wiki/blob/main/setup/options/firewall.md) for the relevant LAN or Docker subnet, and use an address reachable from the Homarr container. ## Where do I report a bug or request a feature? [#where-do-i-report-a-bug-or-request-a-feature] Use the [GitHub issue templates](https://github.com/homarr-labs/homarr/issues/new/choose). For community support, see [Get in touch](/docs/community/get-in-touch). ## Can Homarr be used commercially? [#can-homarr-be-used-commercially] Yes. Homarr is licensed under the [Apache License 2.0](/docs/community/license). Commercial users can support development through [OpenCollective](/docs/community/donate). # Get in touch (/docs/community/get-in-touch) ## GitHub [#github] Use the [issue templates](https://github.com/homarr-labs/homarr/issues/new/choose) for bugs and feature requests. ## Discord [#discord] Use the [Homarr Discord server](https://discord.gg/aCsmEV5RgA) for community support, release discussion, and dashboard showcases. ## Email [#email] Use [homarr-labs@proton.me](mailto\:homarr-labs@proton.me) for security reports, sponsorships, and other private matters. Bug reports and feature requests belong on GitHub. # Community (/docs/community) * [Frequently asked questions](/docs/community/faq): resolve common setup and operation issues. * [Get in touch](/docs/community/get-in-touch): choose the right support or discussion channel. * [Translations](/docs/community/translations): improve Homarr in your language. * [Donate](/docs/community/donate): support ongoing development. * [License](/docs/community/license): understand how Homarr is licensed. # License (/docs/community/license) Homarr is licensed under [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0). ## TL;DR [#tldr] | Action | Allowed | | -------------- | ------- | | Copy | ✅ | | Modify | ✅ | | Distribution | ✅ | | Commercial Use | ✅ | | Private Use | ✅ | | Attribution | ✅ | | Liability | ❌ | | Warranty | ❌ | Please consider [making a donation](/docs/community/donate) to Homarr, if this project has been useful for your needs. Donations help us to keep Homarr up to date, implement new features and help our users with problems and questions. ## Full License [#full-license] ```txt Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright (c) 2025 Meier Lukas, Thomas Camlong and Homarr Labs Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ``` # Translations (/docs/community/translations) Homarr translations are managed on [Crowdin](https://translate.homarr.dev/). Select a language, translate strings in context, and submit them for proofreading. Approved translations ship with a later Homarr release. ## Translate from Homarr [#translate-from-homarr] Select **Crowdin (live translations)** as the application language, connect a Crowdin account, and choose the target language. Select text in Homarr or use Crowdin's in-context panel to edit a string. Live translation submits changes to Crowdin; it does not update the installed Homarr image. Crowdin's preview option can show pending translations before the next Homarr release. ## Guidelines [#guidelines] * Preserve the meaning and context of the English source. * Keep terminology consistent with existing translations. * Do not add punctuation, formatting, or explanatory text that is absent from the source. * Improve an existing translation only when the replacement is more accurate. Contact the [Discord community](/docs/community/get-in-touch#discord) to help proofread a language. # After the installation (/docs/getting-started/after-the-installation) After Homarr starts, open its URL. An unfinished installation redirects to the onboarding screen at `/init`. Choose **Get started** for a new installation or **Restore backup** to import a compatible SQLite backup. Onboarding writes the administrator and board configuration to the database. If onboarding returns after a restart, check that `/appdata` is writable and persisted. See the [Docker installation guide](/docs/getting-started/installation/docker). ## Complete onboarding [#complete-onboarding] Onboarding is split into six short sections. Integrations, Workshop, Assistant, and MCP are optional; skip them when you only need a working board. Choose the language, theme, usual server address, and anonymous analytics preference. Review the database, Docker, Kubernetes, Assistant, and Workshop capabilities Homarr can reach. Import detected services or add integrations manually. Unfinished integrations can be skipped. Set the board name, colors, corner radius, column count, and optional sidebars. Optionally connect the Workshop, configure an Assistant provider, or review the MCP endpoint. Check the final summary, then build the board. Homarr opens the exact board it configured. The final screen links directly to the new board and the management area. Board layout, integrations, apps, and appearance can all be changed later. Homarr onboarding welcome screen with Get started and Restore backup actions Board onboarding section for colors, columns, corner radius, and sidebars Onboarding review showing the board settings Homarr will create ## Core concepts [#core-concepts] ### Boards [#boards] A **board** is a dashboard page containing apps, widgets, and Containers. Boards can be public or restricted to users and groups. Each user can choose a home board. Board management with board previews See [Boards](/docs/management/boards) for responsive layouts, access control, appearance, and home-board settings. ### Apps [#apps] An **app** is a saved shortcut: a name, URL, icon, and optional status check. Add an App tile or a Bookmarks widget to show apps on a board. App management with saved shortcuts See [Apps](/docs/management/apps) or [Icons](/docs/advanced/icons). ### Integrations [#integrations] An **integration** is a server-side connection from Homarr to a supported service such as Sonarr, Home Assistant, or Docker. Integrations provide data and actions to widgets. They can also be linked to apps. Integration catalog with compatible widgets See [Managing integrations](/docs/management/integrations) and the [integration catalog](/docs/integrations). ### Widgets [#widgets] A **widget** is a board tile. Some widgets work on their own; others require one or more integrations. Configuration, supported integrations, and non-obvious limitations are documented on each widget page. Board in edit mode with the add-content menu See the [widget catalog](/docs/widgets). ### Containers and rails [#containers-and-rails] A **Container** groups board items and can be nested. A **rail** reserves a fixed area at the left or right of a responsive layout. Both are configured in board edit mode. Board layout settings with fixed sidebars See [Boards](/docs/management/boards#containers-and-rails). ### Users, groups, and permissions [#users-groups-and-permissions] Users inherit permissions and default boards from their groups. Resource-specific access can further restrict boards and integrations. Group permission settings See [Users and groups](/docs/management/users) and [single sign-on](/docs/advanced/single-sign-on). ## Explore further [#explore-further] * [Server settings](/docs/management/settings) * [Assistant](/docs/management/assistant) * [Custom Widgets](/docs/management/custom-widgets) * [Community Workshop](/docs/workshop) * [API](/docs/management/api) and [MCP](/docs/management/mcp) * [Keyboard shortcuts](/docs/advanced/keyboard-shortcuts) See the [glossary](/docs/getting-started/glossary) for a compact list of Homarr terms. # Glossary (/docs/getting-started/glossary) This glossary explains Homarr's main components and the terms used for them. | Term | Definition | | --------------- | -------------------------------------------------------------------------------- | | App | A saved shortcut with a name, destination, icon, and optional status check | | Assistant | A conversation interface that can use model responses and Homarr tools | | Board | A dashboard page where apps, widgets, and Containers are arranged | | Container | A resizable board area containing apps, widgets, or nested Containers | | Custom Widget | A validated definition for an API-backed board tile | | Edit mode | The board state used to add, move, resize, configure, or remove content | | Homarr provider | An Assistant provider routed through Workshop with a per-user allowance | | Integration | A server-side connection from Homarr to a supported service | | Layout | An arrangement of board items selected for a viewport width | | Provider | The model API selected for Assistant | | Rail | A fixed area at the left or right of a non-Mobile board layout | | Task | A background workload that runs without an active browser session | | Widget | A board tile that displays information or provides actions | | Workshop | A separate community service for sharing Custom Widget definitions and board CSS | # Getting started (/docs/getting-started) ## How Homarr works Services expose data, integrations connect to them, widgets use the data, and boards arrange the widgets. ### Board edit mode Add items, move them, and resize them on the grid. Each viewport can have its own layout. [Board docs](/docs/management/boards) 1. **Add** Choose an app, widget, or container. ![Add item menu in board edit mode](/_next/static/media/manage-board-header-choose-item.2qlh-qua0k-cl.png) 2. **Move** Drag the item to another grid position. ![Dragging an app tile on a board](/_next/static/media/move-item.0fhpcdq2oqhjd.gif) 3. **Resize** Drag the resize handle to change its grid area. ![Resizing an app tile on a board](/_next/static/media/resize-item.071zdjoog7ioh.gif) ## Requirements [#requirements] * `linux/amd64` or `linux/arm64`; * 500 MB RAM; * 600 MB free disk space for the container image; * a persistent writable `/appdata` directory. `linux/arm/v7` is not supported. ## Choose an installation method [#choose-an-installation-method] - [Docker Compose](/docs/getting-started/installation/docker) (Recommended): General-purpose deployment with a persistent appdata volume. - [Helm](/docs/getting-started/installation/helm) (Kubernetes): Deploy Homarr into an existing cluster. - [NAS and hosting guides](/docs/getting-started/installation) (Platforms): Unraid, TrueNAS, Synology, Portainer, Proxmox, and more. After Homarr starts, open it in a browser and complete onboarding. Then continue with [After the installation](/docs/getting-started/after-the-installation) for the core concepts and the most useful next links. # Integrations (/docs/integrations) An integration stores the connection and authentication details Homarr needs to communicate with another service. Widgets and management tools can then reuse that connection. Each guide identifies the required URL and credentials, supported capabilities, and the widgets that use the integration. Filter the guides by service name or what the service does, such as media server, monitoring, or storage. ## Before you connect a service [#before-you-connect-a-service] 1. Confirm that Homarr can reach the service from its own network. 2. Create the least-privileged account, token, or API key supported by the service. 3. Add the integration in **Manage → Integrations**. 4. Test the connection before adding dependent widgets. See [Manage integrations](/docs/management/integrations) for the shared workflow. # Assistant (/docs/management/assistant) Assistant answers questions and operates Homarr through the signed-in user's permissions. Read-only tools can run automatically; changes require approval by default. The Assistant management page ## Request flow [#request-flow] ## Configuration [#configuration] Under **Management → Assistant**, select a provider, configure its API URL and key when required, select the default model, and enable Assistant. Users can choose another available model for a conversation. Provider presets cover common APIs. **Custom endpoint** accepts an OpenAI-compatible Chat Completions API. For a model server outside the Homarr container, use a hostname that the container can resolve instead of `localhost`. The [Homarr provider](/docs/workshop/homarr-provider) is available through the Community Workshop without an administrator API key and has a daily request allowance. ## Access [#access] Open Assistant from the user menu, with `Shift+A`, from search with `Cmd/Ctrl+/`, or through the [Assistant widget](/docs/widgets/assistant). Assistant can work with boards, apps, integrations, widgets, Custom Widgets, and supported connected services. Mention Homarr resources with `@`; the model loads additional live context only when needed. Conversations are stored per user and can be searched, renamed, exported, or deleted. ## Permissions and data [#permissions-and-data] * Every tool call uses the current user's Homarr permissions. * Automatic approvals apply only to the current conversation and reset when switching conversations. * Provider keys and custom headers are encrypted and are not returned to the browser. * Prompts, attachments, tool definitions, and tool results are sent to the selected model provider. See [MCP](/docs/management/mcp) to connect an external AI client and [Custom Widget agent authoring](/docs/management/custom-widgets/agent-authoring) for widget generation. ## Troubleshooting [#troubleshooting] * **No models found:** check the API URL, discovery path, and API key, or enter a model ID manually. * **Assistant is unavailable:** enable it and save the configuration. * **Tool calls stop:** use a model that supports streaming and tool calls. * **Local endpoint is unreachable:** check container DNS, routing, and the model server's listen address. # Backup and restore (/docs/management/backup) Administrators using SQLite can export and restore the complete Homarr database under **Management → Tools → Backup**. PostgreSQL installations must use their database-native backup tools. The Backup and restore management page For an existing MySQL installation, [convert to SQLite before upgrading to v2](/docs/advanced/mysql-to-sqlite). The converter produces a database file, not a backup ZIP. ## Export [#export] The ZIP contains: | File | Contents | | --------------- | ----------------------------------------------------------- | | `db.sqlite` | Apps, integrations, boards, users, settings, and other data | | `metadata.json` | Homarr version, backup timestamp, and encryption metadata | Export requires typing `I understand`. Store the ZIP as sensitive data: it contains the database and the material needed to restore encrypted integration credentials. ## Restore [#restore] Select a Homarr backup ZIP. The browser previews entity counts, board names, and required database migrations before the archive is uploaded. Restoring replaces the current SQLite database and cannot be undone. It also invalidates the current database session. After a successful management restore, Homarr waits for the restarted server and sends the administrator to sign in again. The first-run onboarding restore keeps its existing board destination. A backup can be restored on another Homarr instance. When its `SECRET_ENCRYPTION_KEY` differs, Homarr re-encrypts stored integration secrets for the target instance. Version metadata is used to apply compatible migrations. The same restore flow is available during first-run onboarding, before the target database contains user data. # Manage Homarr (/docs/management) ## Everyday configuration [#everyday-configuration] Create, organize, share, and configure boards. Add the services and links shown on boards. Configure reusable service connections. Control access and permissions. Change server and user preferences. ## Content and extensions [#content-and-extensions] Manage uploaded assets. Configure search shortcuts. Build Custom JSX widgets. Configure Homarr's assistant features. ## Operations [#operations] Configure API keys and use the generated reference. Connect external assistants to Homarr. Inspect scheduled and background tasks. Inspect application logs. Trust certificates used by connected services. Export and restore Homarr data. # Model Context Protocol (MCP) (/docs/management/mcp) Connect an AI client to Homarr to manage boards, apps, integrations, and other services through MCP tools. Homarr uses MCP v2 (protocol `2026-07-28`) at `/api/mcp`, with compatibility for 2025 Streamable HTTP clients. Requests are stateless: each request authenticates independently, without an MCP session ID. The AI / MCP management tab ## Connect a client [#connect-a-client] Create an API key under **Management → Tools → API → Authentication**. Add this configuration to your client, replacing the URL and API key: ```json { "mcpServers": { "homarr": { "url": "https://homarr.example.com/api/mcp", "headers": { "ApiKey": "." } } } } ``` Use the complete key, including the ID, dot, and token. Keep it private and use HTTPS for remote connections. The **AI / MCP** tab on Homarr's API page provides your endpoint, configuration, and available tools. For clients that only support STDIO, use `mcp-remote`: ```json { "mcpServers": { "homarr": { "command": "npx", "args": ["-y", "mcp-remote", "https://homarr.example.com/api/mcp", "--header", "ApiKey:."] } } } ``` ### OAuth [#oauth] Clients with OAuth support can authorize through OAuth 2.1 with PKCE instead of an API key. Homarr publishes discovery metadata under `/.well-known/`. If your reverse proxy does not preserve the public host and protocol, set `BASE_URL` to your public origin, such as `https://homarr.example.com`, without a path. ## Permissions and tools [#permissions-and-tools] Tools use the permissions of the API key owner or OAuth user. Queries read data; mutations change it. Inspect the **AI / MCP** tab or your client's tool list for available actions. Custom Widget and Workshop authoring tools, prompts, and resources require administrator access. For Custom Widgets, install the official skill and follow the preview-and-evidence workflow described in [Connect an agent](/docs/management/custom-widgets/agent-authoring). Secret values are configured in Homarr and are never returned through MCP. The built-in [Assistant](/docs/management/assistant) uses the same tool catalog with the current Homarr session and asks for approval before mutations by default. ## Authenticated integration requests [#authenticated-integration-requests] `integration_request` calls API endpoints without a dedicated tool, using stored integration credentials. Get `integrationId` from `integration_all`. Every method requires **full integration access**: arbitrary GET endpoints can expose credentials or change state. DELETE additionally requires `confirmed: true` after user confirmation. Ask your agent to consult the service's official API docs with its browsing tools, or provide the endpoint contract. For example, using the [Sonarr API docs](https://sonarr.tv/docs/api/#v3): ```json { "integrationId": "", "method": "GET", "path": "/api/v3/series" } ``` Deleting series 42 **and its episode files**, after confirmation: ```json { "integrationId": "", "method": "DELETE", "path": "/api/v3/series/42?deleteFiles=true", "confirmed": true } ``` Supports GET, POST, PUT, PATCH and DELETE with an optional JSON `body` (10 KiB maximum; not allowed for GET). Returns `{status, data}` with parsed JSON, text, or `null` for an empty body, including upstream error responses. Known credentials are redacted. Requests have a 15-second total deadline, a 10-second per-request timeout and a 1 MiB response limit. HTTPS uses Homarr's trusted certificates and hostname exceptions. Paths follow `new URL(path, integration.url)`: `/api/...` starts at the origin root; `api/...` resolves relative to the configured URL's directory. Absolute URLs, protocol-relative paths, credentials, fragments and redirects are rejected. The built-in Assistant's default mutation approval applies to this tool, including GET calls. ## Verify the connection [#verify-the-connection] This request lists tools through the older-client compatibility path. It checks authentication and tool discovery: ```sh curl -X POST \ -H 'Content-Type: application/json' \ -H 'Accept: application/json, text/event-stream' \ -H 'ApiKey: .' \ -d '{"jsonrpc":"2.0","method":"tools/list","id":1}' \ https://homarr.example.com/api/mcp ``` A successful discovery or initialization response alone does not verify that tools can be listed. ## Troubleshooting [#troubleshooting] * **`invalid_token`**: copy the complete API key in `.` format. * **Missing tools**: check the user's permissions. Invalid tool schemas and duplicate names are omitted; check server logs for `MCP tool omitted from catalog` and report the diagnostic with your Homarr version. Exclude API keys. * **`Date cannot be represented in JSON Schema`**: update Homarr. Older versions could fail to list all tools because of an unsupported date schema. * **`410 Gone` on `/sse` or `/message`**: use `/api/mcp` with a Streamable HTTP client. The old `/api/mcp/mcp` URL remains an alias. # Homarr provider (/docs/workshop/homarr-provider) The Homarr provider gives Community Workshop users access to a server-selected model without configuring an Assistant API key. Select **Homarr** under **Management → Assistant**, enable Assistant, then sign in to the Workshop when prompted. ## Allowance [#allowance] * Each user receives 50 request units per UTC day. * Each model request consumes one unit; a tool loop can consume several. * Forwarded requests count even when the upstream model fails. * A shared daily service limit also applies. Assistant shows the remaining allowance and reset time beside the model control. ## Data handling [#data-handling] Prompts, attachments, tools, and tool results pass through Workshop and OpenRouter. Workshop does not retain request or response content; it stores the user, UTC day, and counters required for limits. OpenRouter is configured for zero data retention with data collection disabled. Operators configure the model, limits, and upstream key; see the [Workshop operator guide](/docs/advanced/development/workshop-operator#homarr-provider). # Community Workshop (/docs/workshop) The [Community Workshop](/workshop) hosts community Custom Widgets and dashboard CSS. Experimental Workshop content is community-maintained. Review its source and permissions before installation. ## Content flow [#content-flow] Workshop also exposes the [Homarr Assistant provider](/docs/workshop/homarr-provider). Its model-routing and quota path is separate from Custom Widget and CSS submissions. ## Install content [#install-content] Browse **Widgets** or **CSS**, search by title, description, or author, and sort the listings. Use **Hide outdated** to exclude submissions marked outdated. The result count shows how many listings match; **Reset filters** restores the full list. * Install a Custom Widget from **Management → Custom Widgets → Import from Workshop**. * Import dashboard CSS from **Board settings → Custom CSS → Import from Workshop**. To install from the website, open a listing and review its source. Its **Install in Homarr** section sits beside the download and copy controls: * Select **Download widget JSON**, then open **Management → Custom Widgets → Import** and select the file. * For CSS, select **Copy CSS**, paste it into **Board settings → Custom CSS**, and save. Custom Widget credentials are configured in your Homarr instance and are not part of the Workshop submission. ## Publish content [#publish-content] Publish a saved Custom Widget from its action menu under **Management → Custom Widgets**. Custom CSS and manual submissions can be published from the Workshop website. Sign in to the Workshop and open **Yours** to update or delete submissions and review reports. Signed-in users can vote, comment, and report content; Workshop moderators can remove content. Workshop moderation is separate from administration of a Homarr instance. See the [Workshop operator guide](/docs/advanced/development/workshop-operator) to host Workshop or [Workshop development](/docs/advanced/development/workshop) to run it from the repository. # Command line interface (/docs/advanced/command-line) The Homarr image includes a recovery CLI for operations that cannot be completed in the web interface. It is not an application API; use the [API](/docs/management/api) or [MCP endpoint](/docs/management/mcp) for automation. Back up the database and stop Homarr before running a command that changes data. Failed commands print an error and return a non-zero exit code, so shell scripts can stop safely. ## Run the recovery CLI [#run-the-recovery-cli] Open a shell in the container, then pass a command to `homarr`: ```sh docker exec -it /bin/bash homarr ``` ### QNAP Container Station [#qnap-container-station] 1. Open **Container Station**. Container Station in the QNAP application menu 2. Select **Containers**. Containers menu in QNAP Container Station 3. Select the Homarr container. Homarr container selected in QNAP Container Station 4. Select **Execute**. Execute action for the Homarr container in QNAP Container Station 5. Select `/bin/bash`, then select **Execute**. Bash selected in the QNAP execute console 6. Run `homarr ` in the console. Bash console open for Homarr in QNAP Container Station See the pages in this section for available commands. ## Build a local branch harness [#build-a-local-branch-harness] The repository's host-side CLI can build the current checkout and run it as a named Docker harness: Homarr developer CLI showing pull requests, local images, and PR CI status ```sh pnpm cli harness setup feature-board ``` This creates `homarr:feature-board`, starts it with persistent demo data, and prints the assigned URL. Query the port again with: ```sh pnpm cli harness port feature-board ``` Pass environment overrides with repeated `--env` options: ```sh pnpm cli harness setup feature-board \ --env WORKSHOP_WEB_URL=https://example.test \ --env FEATURE_FLAG=true ``` Related commands are `harness build `, `harness run `, and `harness stop `. # Getting started (/docs/advanced/development/getting-started) ## Set up your development environment [#set-up-your-development-environment] ### Prerequisites [#prerequisites] * **Node.js 24.18 or newer**: You can download it from the [official website](https://nodejs.org/). * **Corepack**: Run `corepack enable` so the repository selects its pinned pnpm 11 version. * **Git**: You can download it from the [official website](https://git-scm.com/). * **Docker or Docker Desktop**: Required for the Redis service and the developer Docker CLI. * **Go 1.25+**: Required only for the developer Docker CLI. You can download it from the [official website](https://go.dev/). * **GitHub CLI**: Required only for pull-request image features. Install it from the [official website](https://cli.github.com/), then authenticate with `gh auth login`. The versions in the root `package.json` are the supported baseline. Let Corepack select the repository version instead of installing an unrelated global pnpm: ```sh corepack enable corepack install pnpm install --frozen-lockfile ``` ### Run the Homarr application [#run-the-homarr-application] 1. Copy `.env.example` to `.env`. 2. Run `openssl rand -hex 32` twice. Set `AUTH_SECRET` and `SECRET_ENCRYPTION_KEY` to the two different generated values in `.env`; the example leaves both empty. Keep this file private and preserve `SECRET_ENCRYPTION_KEY` when reusing a database. 3. Set `DB_URL` to an absolute writable SQLite file path. Migration and application commands run from different workspace directories, so a relative path can point them at different databases. 4. Keep Redis and the optional local databases running in one terminal. 5. Apply migrations and start Next.js in another terminal. ```sh cp .env.example .env ``` Terminal 1: ```sh pnpm docker:dev ``` Terminal 2: ```sh pnpm db:migration:sqlite:run pnpm dev ``` The infrastructure command remains in the foreground. Open `http://127.0.0.1:3000`; the first user created through Homarr becomes the instance administrator. Use `pnpm docker:dev:up` instead when you only need Redis in the background. Running the migration also seeds the default data; use `pnpm db:seed` to seed it explicitly later. `pnpm dev` starts only Next.js. When your work needs scheduled tasks or live subscriptions, run the relevant service in a separate terminal alongside it: ```sh pnpm --filter @homarr/tasks dev ``` ```sh pnpm --filter @homarr/websocket dev ``` The WebSocket service listens on port 3001. Production startup embeds both services, so these extra commands are only needed for development. Workshop contributors can set up PocketBase and Fumadocs with the dedicated [Workshop development guide](/docs/advanced/development/workshop). ### Useful commands [#useful-commands] * `pnpm dev` — Next.js on port 3000. * `pnpm dev:benchmark` — authenticated-board benchmark; readiness-only `--smoke` runs are not performance claims. * `pnpm dev:cli -- dev` — browse and run local images and remote pull-request images. * `pnpm dev:cli -- build ` — build the current checkout as `homarr:`. * `pnpm dev:cli -- build --pr ` — build a pull request from a temporary checkout. * `pnpm dev:cli -- rebuild ` — rebuild an image from its recorded checkout or pull request. * `pnpm dev:cli:install` — optionally install the developer CLI as a `homarr` binary. * `pnpm dev:docs` — Fumadocs on port 3003. * `pnpm docker:dev:up` — Redis development service in the background. * `pnpm cli` — Homarr operations CLI. * `pnpm db:migration:sqlite:run` — create or update a SQLite database. * `pnpm db:seed` — seed the default database data explicitly. * `pnpm db:studio` — inspect the database. * `pnpm format` / `pnpm format:fix` — check or apply oxfmt. * `pnpm lint` / `pnpm lint:fix` — check or apply oxlint. * `pnpm typecheck` — typecheck all workspaces. * `pnpm test` — unit and contract suites. * `pnpm build` — production monorepo build. * `docker build -t homarr:local .` — build a production Docker image. * `docker run -p 7575:7575 -e SECRET_ENCRYPTION_KEY='your_64_character_hex_string' homarr:local` — run it. ## CI and focused validation [#ci-and-focused-validation] The main CI workflow runs lint, typechecking, affected workspace builds, workspace configuration checks, OpenAPI validation, and Custom Widget architecture and bundle checks. Unit and E2E suites do not run in CI. Preview images publish after the Fast gate and both architecture builds succeed; browser tests do not block publication. The container job builds an amd64 image when no preview image was built. Workshop CI runs only when its workflow or Docker build inputs change. It validates Compose configuration and publishes production images on its configured release branches. Its Docker integration and image tests are manual; workspace typechecks run in the main Fast gate. Choose the smallest relevant suite when changing behavior: | Command | Scope | Requirements | | ------------------------------------------------- | -------------------------------------------------------------- | --------------------------------------------------------------------- | | `pnpm test ` | Focused unit or contract tests | Workspace dependencies | | `pnpm test` | All unit and contract tests, without Docker integration suites | Workspace dependencies | | `pnpm test:coverage` | Unit and contract tests with coverage | Workspace dependencies | | `pnpm test:integration ` | Docker-backed service and database compatibility tests | Docker | | `pnpm test:e2e ` | Browser and container scenarios | Docker; Playwright Chromium and system dependencies for browser tests | | `pnpm test:docs-screenshots` | Regenerate Assistant documentation screenshots | Same browser prerequisites | | `pnpm test:workshop` / `pnpm test:workshop-image` | Workshop integration / production-image validation | Docker | Omit `` to run all tests in that command's scope. E2E and screenshot commands use a local image tagged `homarr-e2e`, or an image selected with `HOMARR_E2E_IMAGE`. The default commands run once without automatic retries; coverage is opt-in. The screenshot generator is excluded from both unit and E2E commands. Keep behavioral coverage for authorization, migrations, persistence, and widget execution. Avoid tests that only search source code for particular component names, JSX, CSS, or documentation wording. ## Documentation development [#documentation-development] Run `pnpm dev:docs` to open the Next.js and Fumadocs site at `http://127.0.0.1:3003`. Content lives in `apps/docs/docs/`; the nearest `meta.json` controls navigation. Keep integration and widget setup metadata in their typed `index.ts` files alongside the page. After changing content, navigation, or shared MDX components, run: ```sh pnpm --filter @homarr/docs build pnpm --filter @homarr/docs validate:links pnpm --filter @homarr/docs verify:search pnpm --filter @homarr/docs verify:seo ``` The build writes a static site to `apps/docs/out/`. Check heading links, search results, and the page's Markdown export when changing shared components. The [Fumadocs documentation](https://fumadocs.dev/docs) describes supported components and source APIs; match examples to the versions installed in this repository. # Kubernetes (/docs/advanced/development/kubernetes) This guide provides step-by-step instructions for setting up a Kubernetes cluster using kind, configuring multiple nodes, and installing the Metrics Server. ## Prerequisites [#prerequisites] Ensure you have the following installed: * [Docker](https://docs.docker.com/get-started/get-docker/) (required for running `kind` clusters). * [Kind](https://kind.sigs.k8s.io/docs/user/quick-start/) (Kubernetes in Docker). * [Kubectl](https://kubernetes.io/docs/tasks/tools/) (Kubernetes command-line tool). Additionally, ensure that Kubernetes tools are enabled in your environment by setting the following variable in your `.env` file: ```bash # Enable Kubernetes tool ENABLE_KUBERNETES=true ``` ### 1. Creating a Kubernetes Cluster with Multiple Nodes [#1-creating-a-kubernetes-cluster-with-multiple-nodes] We will create a Kubernetes cluster using `kind` with one control plane node and two worker nodes. #### Define the Cluster Configuration [#define-the-cluster-configuration] Create a configuration file named `kind-config.yaml` with the following content: ```bash cat > kind-config.yaml </`. The usual folder only needs an `index.ts` definition and a lazily imported `component.tsx`; complex widgets can add local files as needed. 1. Add the stable kind to `packages/definitions/src/widget.ts` and its documentation slug to the direct typed map in `packages/definitions/src/docs/widget-doc-slugs.ts`. 2. Export `definition` and `componentLoader` from `packages/widgets/src//index.ts` with `createWidgetDefinition`. The local definition owns its icon, query keys, refresh interval, options, matchers, and errors. Keep the component behind `withDynamicImport` so adding a widget does not load it on every dashboard. 3. For an integration-backed widget, add its integration kinds and selection rules once to `packages/definitions/src/widget-integration-map.ts`, then spread `getWidgetIntegrationConfig(kind)` into the local definition. This server-safe config is also the API authorization boundary, avoiding a package cycle without duplicating widget metadata. 4. Register the widget in both explicit literal loader maps and the type-only module map in `packages/widgets/src/registry.ts`, then add its icon to `packages/ui/src/widget-icons.ts`. The module and component loaders must both use literal import paths. Keeping them separate lets a cold widget load request its definition and component chunks in parallel; the type-only map preserves exact option and component inference. Keep all three maps in the same order so drift is obvious in review. 5. If the widget needs server data, add its tRPC router under `packages/api/src/router/widgets/` and add its explicit lazy import to `packages/api/src/router/widgets/index.ts`. Keep upstream requests and Redis response caching in `@homarr/request-handler`. Use the widget integration middleware for integration-backed procedures. 6. Add canonical documentation in `apps/docs/docs/widgets//`. Weather is the small integration-free example. Downloads shows integration selection, polling, server caching, mutations, partial upstream failures, and a larger options surface. ## Add an integration [#add-an-integration] Keep the HTTP client and its capability-specific types in `packages/integrations/src//`. 1. Add the typed definition to `packages/definitions/src/integration.ts`, including credential alternatives, categories, documentation slug, ports, Docker aliases, and onboarding metadata when relevant. 2. Add an explicit lazy creator to `packages/integrations/src/base/creator.ts`. The literal import keeps the implementation out of the initial server bundle and makes the registration easy to find. 3. Implement only the interfaces required by the widgets that use the service. 4. Add canonical documentation in `apps/docs/docs/integrations//`. Its `index.ts` must satisfy `IntegrationDefinition` so invalid metadata fails type checking without widening the object. Use a type-only import and `satisfies IntegrationDefinition`; do not cast the object. Beszel is a compact example with several widgets sharing one integration client. ## Write user documentation [#write-user-documentation] Write for technically capable self-hosters. Keep each page short and operational. * Start with one sentence describing what the integration or widget adds to Homarr. * Include prerequisites, credentials, permissions, destructive actions, and non-obvious limits only when they matter. * Use numbered steps only when order matters. Prefer the exact UI labels a user must select. * Do not add marketing, implementation history, architecture internals, or explanations of basic self-hosting concepts. * End when the user can configure and verify the feature; do not repeat the same information in a summary. The usual page needs only an introduction and a `Configuration` section. Add `Notes` or `Troubleshooting` only for real caveats. ## Data and errors [#data-and-errors] * TanStack Query owns browser caching and refresh behavior. Redis owns shared server response caching for bounded key spaces. Public handlers whose keys come from arbitrary URLs, domains, symbols, or coordinates stay in the bounded process-local cache. * Cache raw service responses, never authorization decisions or decrypted credentials. Integration-backed cache keys include keyed credential fingerprints and the complete integration identity, and are invalidated after mutations. The fingerprints change with credentials without exposing their values in Redis keys. * Give upstream requests a finite deadline and pass the request handler's `AbortSignal` into clients that support it. Admission is bounded per handler. Request deduplication and distributed lock ownership remain active until the upstream settles or a bounded cleanup grace expires, while unresolved upstream work stays separately capped. * Keep validation and authorization on the server. Client-side checks improve UX but do not replace tRPC guards. * Use the shared logger with safe identifiers, operation names, duration, and the original error cause. Never log secrets or full upstream payloads. * Multi-integration reads should return successful providers when one service fails and surface a clear error when all providers fail. Registration files intentionally contain boring, explicit imports. This small amount of repetition preserves exact TypeScript inference, gives Next.js discoverable lazy chunks, and keeps Ctrl+click navigation reliable. ## Registry imports [#registry-imports] Use `@homarr/widgets/manifest` to load registered widgets. `loadWidgetDefinition` is the metadata-only path; `loadWidgetComponent` loads only the UI module; and `loadWidgetResources` requests both paths in parallel. These loaders cache in-flight and successful promises and remove rejected promises so a later request can retry. The former root `widgetImports` and `loadWidgetDynamic` exports are intentionally not compatibility aliases. `widgetImports` synchronously imported every widget module, and `loadWidgetDynamic` depended on that eager map. Restoring them at the package root would defeat lazy definition chunks or add client-only runtime dependencies to every root consumer. Migrate metadata consumers to `loadWidgetDefinition`, renderers to `loadWidgetResources`, and type-only registry consumers from the removed internal `WidgetImportRecord` helper to the root `WidgetImports` type. `@homarr/widgets/catalog` remains as a deprecated compatibility subpath for `widgetCatalogIcons`. New imports should use `@homarr/ui/widget-icons`, which is the canonical server-safe icon catalog. # Workshop operator guide (/docs/advanced/development/workshop-operator) Workshop uses PocketBase. The production image serves the Workshop website and API from one origin and stores state in `/pb_data`. ## Environment variables [#environment-variables] | Variable | Purpose | Default | | -------------------------------------- | -------------------------------------------- | ------------------------------ | | `HOMARR_WEBSITE_URL` | Documentation/site base used by Homarr links | `https://homarr.dev` | | `WORKSHOP_API_URL` | PocketBase API used by Homarr and docs | `HOMARR_WEBSITE_URL` | | `WORKSHOP_WEB_URL` | Public Workshop URL | `HOMARR_WEBSITE_URL/workshop` | | `WORKSHOP_PUBLIC_ORIGIN` | PocketBase-generated links and email | Required in production | | `PB_ALLOWED_ORIGINS` | Allowed browser origins | `*` | | `GITHUB_CLIENT_ID` | GitHub OAuth application ID | — | | `GITHUB_CLIENT_SECRET` | GitHub OAuth application secret | — | | `OPENROUTER_API_KEY` | Enables the Homarr Assistant provider | Provider disabled when empty | | `HOMARR_AI_DAILY_REQUEST_LIMIT` | Per-user daily request allowance | `50` | | `HOMARR_AI_GLOBAL_DAILY_REQUEST_LIMIT` | Shared daily request ceiling | `10000` | | `HOMARR_AI_OPENROUTER_BASE_URL` | OpenRouter-compatible upstream | `https://openrouter.ai/api/v1` | | `HOMARR_AI_OPENROUTER_MODEL` | Upstream model behind `homarr/model` | Selected by the Homarr team | Public URL variables accept HTTP(S) origins without embedded credentials, query strings, or fragments. Restart the container after changing runtime configuration. ## Documentation search and AI [#documentation-search-and-ai] The documentation uses Fumadocs search with an index generated during the website build. Search runs in the browser and needs no hosted search credentials or crawler. The **Ask AI** launcher connects to Kapa separately. `KAPA_WEBSITE_ID` is a public website integration ID, read when building the documentation. The default uses Homarr's integration. For a private deployment, pass your own ID or an empty value to disable it: `docker build --build-arg KAPA_WEBSITE_ID= -f apps/workshop/Dockerfile .`. Changing this value requires rebuilding the image; setting it on an already-built container has no effect. For your own Kapa integration, enable the deployment domain in Kapa and configure a Website Crawl source for your published docs. Preview the `main` content selector and verify extracted headings, code, and integration details. After a migration, refresh the source and check answer citations. `/llms.txt` alone does not configure Kapa ingestion. See the [Kapa website widget guide](https://docs.kapa.ai/integrations/website-widget/quickstart). ## Authentication and email [#authentication-and-email] Configure both GitHub OAuth variables and use `https:///api/oauth2-redirect` as the callback. Supplying only one OAuth variable is a startup error. Configure SMTP for comment, report, and removal notifications. For the central community, `PB_ALLOWED_ORIGINS=*` permits requests from self-hosted Homarr origins. A private deployment can use a comma-separated allowlist. ## Homarr provider [#homarr-provider] `OPENROUTER_API_KEY` enables the [Homarr provider](/docs/workshop/homarr-provider). The Workshop server chooses the upstream model and enforces per-user and global daily limits. It requests zero-data-retention routing, disables data-collecting providers, and does not retain prompts or responses. Keep an OpenRouter account-level credit limit as the monetary backstop; request limits are not cost limits. ## Deployment [#deployment] The v2 image is `ghcr.io/homarr-labs/workshop:v2`; immutable `sha-` tags are preferable for promotion. The service listens on port 8090. When using a reverse proxy, forward the complete hostname, including `/api`, `/_/`, and `/workshop-runtime-config.js`. Use a dedicated hostname when Homarr already occupies the intended origin. Verify `/api/health`, the Workshop page, a public listing request, GitHub sign-in, and one installation after deployment. ## Backup and restore [#backup-and-restore] Stop writes and copy `/pb_data` for a consistent backup. A restore replaces the selected PocketBase data directory, so preserve the current volume and verify that the backup contains `data.db` first. Rehearse the restore outside production and verify sign-in and one installation afterward. # Workshop development (/docs/advanced/development/workshop) See the [main development guide](/docs/advanced/development/getting-started) for repository prerequisites. Start PocketBase: ```sh cp apps/workshop/.env.example apps/workshop/.env docker compose --env-file apps/workshop/.env -f apps/workshop/docker-compose.yml up --build workshop ``` Start Fumadocs in another terminal: ```sh WORKSHOP_API_URL=http://127.0.0.1:8090 pnpm dev:docs ``` PocketBase runs at `http://127.0.0.1:8090`; create the first superuser under `/_/`. Workshop is available at `http://127.0.0.1:3003/workshop`. To connect a local Homarr instance, set: ```dotenv HOMARR_WEBSITE_URL=http://127.0.0.1:3003 WORKSHOP_API_URL=http://127.0.0.1:8090 WORKSHOP_WEB_URL=http://127.0.0.1:3003/workshop ``` Restart the affected development process after changing these variables. See [`apps/workshop/README.md`](https://github.com/homarr-labs/homarr/blob/HEAD/apps/workshop/README.md) for OAuth, moderation, tests, and service maintenance. # Widgets (/docs/widgets) Widgets turn apps, integrations, and Homarr data into useful board content. Some work on their own; others require one or more configured integrations. Each widget guide explains its configuration, required integrations, supported interactions, permissions, and important empty or error states. ## Add a widget [#add-a-widget] 1. Open a board and enter edit mode. 2. Select **Add item**, then choose **Widget**. 3. Pick a widget and complete its configuration. 4. Move or resize it, then leave edit mode to use it. Filter the guides by widget name or the information you want to display, such as calendar, weather, or storage. See [After installation](/docs/getting-started/after-the-installation) for the complete first-board workflow. # Environment variables (/docs/advanced/environment-variables) Homarr offers a few environment variables, which can be used to configure the container. With docker you can add the `_FILE` suffix to any environment variable, which will read the value from a file. This is especially useful for [docker secrets](https://docs.docker.com/engine/swarm/secrets/#use-secrets-in-compose). ## General [#general] Using the `PUID` and `PGID` will require you to set the correct permissions on the mounted volumes and if used the docker socket. See more in the [Running as a different user](/docs/advanced/running-as-different-user) documentation. | Environment Variable | Description | Possible values | Default | | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | ----------------------------- | | `PUID` | User ID to run the container as | Any valid user ID | `0` | | `PGID` | Group ID to run the container as | Any valid group ID | `0` | | `LOG_LEVEL` | Log level to use | `debug` / `info` / `warn` / `error` | `info` | | `BASE_URL` | Public Homarr origin used by MCP OAuth metadata and redirects. Set this when a reverse proxy does not preserve the public host and protocol. | HTTP(S) origin without a path | - | | `NO_EXTERNAL_CONNECTION` | Disables Homarr's internet-backed requests, including update checks, weather, location search, and RSS feeds | `true` or `false` | `false` | | `ENABLE_DNS_CACHING` | Enables dns caching. Enabled by default, but if you experience issues with IPv6 or static IPs, see [#4006](https://github.com/homarr-labs/homarr/issues/4006) or disable this flag | `true` or `false` | `true` | | `HOMARR_DISABLE_IPV6` | Disables the IPv6 listener of the internal nginx proxy, even when the host supports IPv6. IPv6 is normally disabled automatically when the host has no IPv6 configured. See [#4596](https://github.com/homarr-labs/homarr/issues/4596) | `true` or `false` | `false` | | `HOMARR_WEBSITE_URL` | Main Homarr documentation/site base used by runtime links. Must be an absolute HTTP(S) URL. | HTTP(S) URL | `https://homarr.dev` | | `WORKSHOP_API_URL` | PocketBase API used by Homarr and standalone documentation. | HTTP(S) URL | `HOMARR_WEBSITE_URL` | | `WORKSHOP_WEB_URL` | Public Workshop website used by links in Homarr, Custom Widgets, onboarding, and assistant context. | HTTP(S) URL | `HOMARR_WEBSITE_URL/workshop` | Workshop service operators can find its server-only configuration in the [Workshop operator guide](/docs/advanced/development/workshop-operator#environment-variables). ### Workshop service [#workshop-service] These variables configure the separate Workshop service, not the Homarr application container. | Environment Variable | Description | Default | | ------------------------------------------- | ------------------------------------------------------------------------- | --------------------------------- | | `WORKSHOP_PUBLIC_ORIGIN` | Public origin used in PocketBase links and email | Required in production | | `PB_ALLOWED_ORIGINS` | Browser origins allowed to call PocketBase | `*` for the public community | | `WORKSHOP_IMAGE` | Workshop image used by the staging Compose file | `ghcr.io/homarr-labs/workshop:v2` | | `WORKSHOP_EXPOSE_PORT` | Host port for the combined staging service | `8090` | | `PB_EXPOSE_PORT` | Host port for local PocketBase development | `8090` | | `DOCS_EXPOSE_PORT` | Host port for local documentation development | `3003` | | `GITHUB_CLIENT_ID` / `GITHUB_CLIENT_SECRET` | Optional GitHub OAuth application credentials | - | | `OPENROUTER_API_KEY` | Server-only upstream key that enables the Homarr Assistant provider | Provider disabled | | `HOMARR_AI_DAILY_REQUEST_LIMIT` | Daily Assistant request units per user | `50` | | `HOMARR_AI_GLOBAL_DAILY_REQUEST_LIMIT` | Daily Assistant request units shared by all users | `10000` | | `HOMARR_AI_OPENROUTER_BASE_URL` | OpenRouter-compatible provider endpoint | `https://openrouter.ai/api/v1` | | `HOMARR_AI_OPENROUTER_MODEL` | Upstream model exposed through the stable `homarr/model` alias | Selected by the Homarr team | | `HOMARR_AI_ALLOW_INSECURE_UPSTREAM` | Allows an HTTP upstream for local provider tests; never use in production | `false` | ## Authentication [#authentication] See [Single Sign-On](/docs/advanced/single-sign-on) for more informations. ## Security [#security] The `SECRET_ENCRYPTION_KEY` is required. If none is specified before starting the container, a random key will be shown in the error message and the container will exit. | Environment Variable | Description | Possible values | Default | | ----------------------- | ------------------------------------------- | ----------------------- | ------- | | `SECRET_ENCRYPTION_KEY` | Secret used to encrypt secrets in database. | 64 character hex string | - | A random secret can be generated by using the following command: `openssl rand -hex 32` ## Docker [#docker] | Environment Variable | Description | Possible values | Default | | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | ------- | | `DOCKER_SOCKET_PATHS` | Comma-separated mounted Docker-compatible socket paths. Homarr discovers each path as a selectable Docker environment | For example `/var/run/docker.sock,/var/run/podman.sock` | - | | `DOCKER_HOSTNAMES` | Comma-separated plaintext TCP hostnames. Pair each hostname with the port in the same position in `DOCKER_PORTS` | For example `localhost,docker.example.com` | - | | `DOCKER_PORTS` | Comma-separated plaintext TCP ports paired with `DOCKER_HOSTNAMES` | For example `2375,2376` | - | | `DOCKER_ENDPOINTS` | Optional advanced JSON configuration for custom names, TLS, or restricted capabilities. It takes precedence over the simple variables above. See the [Docker and Podman connection guide](/docs/integrations/docker) | A JSON array of endpoint descriptors | - | ## Database [#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). | Environment Variable | Description | Possible values | Default | | -------------------- | ----------------------------------------------------------------------------------------- | ---------------------------------- | ----------------------- | | `DB_DRIVER` | Database driver to use. Use `better-sqlite3` for SQLite or `node-postgres` for PostgreSQL | `better-sqlite3` / `node-postgres` | `better-sqlite3` | | `DB_DIALECT` | Database dialect to use. | `sqlite` / `postgresql` | `sqlite` | | `DB_URL` | Database URL to connect to. | Any valid database URL | `/appdata/db/db.sqlite` | | `DB_HOST` | Database host to connect to. | Any valid database host | - | | `DB_PORT` | Database port to connect to. | Any valid database port | - | | `DB_NAME` | Database name to connect to. | Any valid database name | - | | `DB_USER` | Database user to connect with. | Any valid database user | - | | `DB_PASSWORD` | Database password to connect with. | Any valid database password | - | You can either use the url or host, port, name and credentials combined. The URL will be prioritized over the other values. ## Redis [#redis] By default Redis is running within the installation. (for example in Docker). However for example for K8s it can be useful to use an external Redis instance. External redis is currently not supported with Proxmox Community Scripts | Environment Variable | Description | Possible values | Default | | ---------------------- | ---------------------------------------------------------------------------------------------------- | ------------------------ | ------- | | `REDIS_IS_EXTERNAL` | Whether Redis is running externally. | `true` / `false` | `false` | | `REDIS_HOST` | Hostname of the Redis instance. | Any valid hostname | - | | `REDIS_PORT` | Port of the Redis instance. | Any valid port | `6379` | | `REDIS_USERNAME` | Username to connect to the Redis instance. | Any valid username | - | | `REDIS_PASSWORD` | Password to connect to the Redis instance. | Any valid password | - | | `REDIS_DATABASE_INDEX` | Select which database of your redis instance should be used. | Any numeric index | - | | `REDIS_TLS_CA` | CA certificate for Redis TLS connections. If a certificate is specified the connection will use TLS. | Any valid CA certificate | - | ## Proxy [#proxy] | Environment Variable | Description | Possible values | Default | | -------------------- | ------------------------------------------------------------------- | ------------------------- | ------- | | `HTTP_PROXY` | HTTP proxy to use | Any valid HTTP proxy URL | - | | `HTTPS_PROXY` | HTTPS proxy to use | Any valid HTTPS proxy URL | - | | `NO_PROXY` | Comma separated list of hosts that should be excluded from proxying | Any valid hostnames | - | ## Advanced deployments [#advanced-deployments] The advanced deployments environment variables should only be used if you know what you are doing. | Environment Variable | Description | | ------------------------ | --------------------------------------------------- | | `DB_MIGRATIONS_DISABLED` | Disable db migrations. For example for helm charts. | All public URL variables reject non-HTTP protocols, embedded credentials, query strings, and fragments, and normalize trailing slashes when Homarr or the documentation site starts. # Icons (/docs/advanced/icons) ## Icon picker [#icon-picker] Icons in Homarr are automatically requested from multiple sources: * [Dashboard Icons](https://dashboardicons.com/) - Our recommended source with more than 1,888 curated, high-quality icons * [selfh.st icons](https://github.com/selfhst/icons) * [Simple icons](https://github.com/simple-icons/simple-icons) * [Tabler icons](https://tabler-icons.io/) * [Papirus icons](https://github.com/PapirusDevelopmentTeam/papirus-icon-theme) * [Homelab Svg assets](https://github.com/loganmarchione/homelab-svg-assets) * **Local icons**: automatically fetched from the [medias feature](/docs/management/media/) Using these icon sources, Homarr provides a total collection of over 11,000 icons at your fingertips. The image picker searches this collection after a short typing delay. When a name is available, such as an app or search engine name, the picker uses it as the initial search. Results show your locally uploaded images first, followed by SVG icons and then other image formats. ### Finding Missing Icons [#finding-missing-icons] If you can't find the icon you're looking for in Homarr's built-in picker, we strongly recommend checking [Dashboard Icons](https://dashboardicons.com/). It offers a modern, user-friendly interface and a curated collection of high-quality icons specifically designed for dashboards and app directories. Icon picker Icons that are high quality and printable ([SVG](https://wikipedia.org/wiki/Scalable_Vector_Graphics)) are marked with a red badge "SVG" at the top right. You can clear the selected image with the clear button or the usual keyboard shortcut for deleting a line (Command+Backspace on macOS or Control+Backspace on other platforms). Clearing the field does not restore the previous image. ### Using external icons [#using-external-icons] If you don't find the icon you're looking for on Dashboard Icons or wish to use a different source, you can simply enter a URL that points to an icon. Direct HTTP(S) image URLs are used as entered instead of being searched in the built-in repositories. The picker previews the image and shows whether it loaded successfully. It is important that the URL directly points to the file without any advertisements or elements around it. ### Uploading a local image [#uploading-a-local-image] Users with media upload permission can select **Upload image** next to the field. After the upload finishes, the new local image is selected immediately and is available at the top of future searches. # Keyboard Shortcuts (/docs/advanced/keyboard-shortcuts) Homarr has the following keyboard shortcuts: | Shortcut | Description | | --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | | `MOD` + `K` | Opens search, including local apps, boards, integrations, pages, commands, and preferences | | `MOD` + `P` | Opens app search | | `MOD` + `/` | Opens Homarr Assistant inside search | | `MOD` + `Shift` + `/` (`MOD` + `?`) | Opens preference search | | `Shift` + `A` | Opens the full Homarr Assistant | | `MOD` + `J` | Toggles Dark Mode | | `MOD` + `E` | Toggles Edit Mode | | Hold `Shift` for 500 ms over a supported widget | Opens its temporary advanced view | | Hold `Shift` + `Ctrl`/`Cmd` over a supported widget | Keeps its advanced view open until it is closed | | `Esc` | Stops keyboard tile editing, cancels an active pointer or touch move/resize, or closes an open advanced view or board menu | ## Search and commands [#search-and-commands] Search is designed as the fastest route to Homarr. Start typing after `MOD` + `K` to find local apps, boards, integrations, pages, commands, and preferences without entering a separate mode first. Local Homarr results appear before configured search-engine actions and Assistant fallbacks. Commands include opening the board switcher without leaving the keyboard. Type `!` to enter Web mode when you want to browse configured engine shortcuts or discover DuckDuckGo bangs; bang discovery is excluded from ordinary Search results. Use the dedicated shortcuts above to start in apps, Assistant, or preferences. Inside search, choose a mode to narrow the same query when needed. Media request search is available only when a supported Seerr integration is configured. ## Widget advanced view [#widget-advanced-view] Supported widgets open a temporary advanced view when you hold `Shift` over them for 500 ms. Hold `Shift` plus `Ctrl` on Windows/Linux or `Cmd` on macOS over the widget to keep the advanced view open, or use its menu. ## Board editing [#board-editing] `MOD` + `E` enters edit mode. Homarr keeps the current board visible while the editor prepares; movement and resizing become available when it is ready. When a tile is focused in edit mode: | Shortcut | Description | | -------------------- | --------------------------------------------------------------------------- | | `Enter` or `Space` | Starts or stops keyboard editing | | Arrow keys | Moves the focused tile within its current canvas, rail, or Container | | `Shift` + Arrow keys | Resizes from the tile's lower-right corner: Left/Up shrink; Right/Down grow | | `Esc` | Stops keyboard editing without undoing its changes | Keyboard moves and resizes apply immediately. To move an item between a canvas, rail, or Container, drag it there or use **Move / resize item** for precise numeric placement. Commands at a grid boundary or at the tile's minimum size are ignored and announced instead of moving or shrinking the tile. On touch screens, press and hold a tile before moving it; a quick tap does not start a drag. Resize handles accept direct touch input. During a pointer or touch move or resize, `Esc` cancels the interaction and restores the layout from before it started. Here `MOD` refers to the modifier key, which is `Ctrl` on Windows and `Cmd` on macOS. The focus of your browser must be set on Homarr. If you click outside of Homarr, you might need to click once somewhere in Homarr to send all keystrokes again to Homarr. If the shortcuts are not working, ensure that you have selected the correct keyboard layout. # Running as a different user (/docs/advanced/running-as-different-user) By default the container is running with user `root` and group `root`. You can change the user and group by using the `PUID` and `PGID` environment variables. Important to note is, that you'll also need to change the permissions for the mounted directories accordingly. At startup, Homarr updates ownership of its data directories and runtime caches for the selected user and group. Startup time depends on the amount of persistent data; application code and dependencies do not need ownership changes. ## Without mounted Docker socket [#without-mounted-docker-socket] To run your container as a different user, you can use the `PUID` and `PGID` environment variables: ```yml title="docker-compose.yml" #---------------------------------------------------------------------# # Homarr - A simple, yet powerful dashboard for your server. # #---------------------------------------------------------------------# services: homarr: container_name: homarr image: ghcr.io/homarr-labs/homarr:latest restart: unless-stopped volumes: - ./homarr/appdata:/appdata environment: - SECRET_ENCRYPTION_KEY=your_64_character_hex_string # <--- can be generated with `openssl rand -hex 32` - PUID=1000 - PGID=1000 ports: - "7575:7575" ``` After that you'll need to create the appdata directory and set the correct permissions: ```bash title="On host" mkdir -p ./homarr/appdata chown -R 1000:1000 ./homarr/appdata ``` ## With mounted Docker socket [#with-mounted-docker-socket] If you want to use the Docker integration, you'll need to set the correct permissions for the Docker socket as well, most of the times it will have the owner group set to docker group. In any way, it is recommended to create this group and set it's permissions to it, if it doesn't exist yet: ```bash title="On host" groupadd -g 999 docker ``` Then you can set the permissions for the Docker socket: ```bash title="On host" chown root:docker /var/run/docker.sock ``` After that you can set the `PUID` and `PGID` environment variables in your `docker-compose.yml` file: ```yml title="docker-compose.yml" #---------------------------------------------------------------------# # Homarr - A simple, yet powerful dashboard for your server. # #---------------------------------------------------------------------# services: homarr: container_name: homarr image: ghcr.io/homarr-labs/homarr:latest restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock - ./homarr/appdata:/appdata environment: - SECRET_ENCRYPTION_KEY=your_64_character_hex_string # <--- can be generated with `openssl rand -hex 32` - PUID=1000 - PGID=999 ports: - "7575:7575" ``` And set the permissions for the mounted directories: ```bash title="On host" mkdir -p ./homarr/appdata chown -R 1000:999 ./homarr/appdata ``` Important here is that the group ID is set to `999` as we created the `docker` group with this ID. # Single Sign On (/docs/advanced/single-sign-on) Homarr supports multiple authentication options, from internal userbase (credentials), to LDAP (with Active directory support), and OIDC. ## Common configuration [#common-configuration] | Environment Variable | Description | Default Value | | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | | AUTH\_PROVIDERS | Select Which provider to use between *credentials*, *ldap* and *oidc*.
Multiple providers can be enabled with by separating them with `,`, (ex. `AUTH_PROVIDERS=credentials,oidc`, it is highly recommended to just enable one provider). | credentials | | AUTH\_LOGOUT\_REDIRECT\_URL | URL to redirect to after clicking logging out. | --- | | AUTH\_SESSION\_EXPIRY\_TIME | 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") | "30d" | | AUTH\_COOKIE\_PREFIX | Prefix used for all authentication cookies (session, csrf, callback, pkce, state, nonce). Change this if you run another Auth.js/NextAuth app on the same hostname as Homarr (browsers scope cookies by host, not by port) to avoid cookie name collisions. Only letters, numbers, hyphens and underscores are allowed. | `homarr` | ## Credentials provider [#credentials-provider] This is the default provider. First user is created using the onboarding process and the rest can be created by this user (see [user management](/docs/management/users)) ## LDAP provider [#ldap-provider] This provider authenticates against an LDAP server. Any user in LDAP server that signs in gets created in Homarr database. Roles are fetched from LDAP groups. Groups with the same name of Homarr will be used to synchronize them.
Example Setup
In this setup we are using [lldap](https://github.com/lldap/lldap). Install your server using docker or [as a service](https://github.com/lldap/lldap/blob/main/example_configs/lldap.service). Minimal configuration requires 4 env variables, LDAP URI, base, user and password for querying data. There's more variables, but all have defaults corresponding to lldap defaults. These might need to be changed if you have different LDAP provider. ``` docker run ... AUTH_PROVIDERS="ldap" AUTH_LDAP_URI="ldap://example.com:3890" AUTH_LDAP_BASE="dc=example,dc=com" // Same as LLDAP_LDAP_BASE_DN AUTH_LDAP_BIND_DN="uid=admin,ou=People,dc=example,dc=com" AUTH_LDAP_BIND_PASSWORD="adminpass" // Same as LLDAP_LDAP_USER_PASS ``` ``` #Docker compose version: x services: homarr: environment: AUTH_PROVIDERS: ldap AUTH_LDAP_URI: ldap://example.com:3890 AUTH_LDAP_BASE: dc=example,dc=com #Same as LLDAP_LDAP_BASE_DN AUTH_LDAP_BIND_DN: uid=admin,ou=People,dc=example,dc=com AUTH_LDAP_BIND_PASSWORD: adminpass #Same as LLDAP_LDAP_USER_PASS ``` In lldap, create a user and admin group, assign this user to the external admin group configured during onboarding. You can log in using this user and he will be in the group. Here is another example for Active Directory: ``` AUTH_LDAP_URI="ldap://ldap.abc.xyz:389 AUTH_LDAP_BASE="DC=abc,DC=xyz" AUTH_LDAP_BIND_DN="CN=Administrator,CN=Users,DC=abc,DC=xyz" AUTH_LDAP_BIND_PASSWORD="YourAdministratorPassword" AUTH_LDAP_USERNAME_ATTRIBUTE="sAMAccountName" AUTH_LDAP_USER_MAIL_ATTRIBUTE="userPrincipalName" AUTH_LDAP_GROUP_CLASS="group" AUTH_LDAP_GROUP_MEMBER_ATTRIBUTE="member" AUTH_LDAP_GROUP_MEMBER_USER_ATTRIBUTE="dn" AUTH_LDAP_SEARCH_SCOPE="sub" AUTH_LDAP_USERNAME_FILTER_EXTRA_ARG="(sAMAccountType=805306368)" ``` User mail attribute is set to userPrincipalName as it follows the right schema, but it is recommended to use real emails and the default 'mail' value.
### LDAP configuration [#ldap-configuration] | Environment Variable | Description | Default value | | --------------------------------------- | --------------------------------------------------------- | ------------------ | | `AUTH_LDAP_URI` | URI of your LDAP server | --- | | `AUTH_LDAP_BASE` | Base dn of your LDAP server | --- | | `AUTH_LDAP_BIND_DN` | User used for finding users and groups | --- | | `AUTH_LDAP_BIND_PASSWORD` | Password for bind user | --- | | `AUTH_LDAP_USERNAME_ATTRIBUTE` | Attribute used for username | uid | | `AUTH_LDAP_USER_MAIL_ATTRIBUTE` | Attribute used for mail field | mail | | `AUTH_LDAP_GROUP_CLASS` | Class used for querying groups | groupOfUniqueNames | | `AUTH_LDAP_GROUP_MEMBER_ATTRIBUTE` | Attribute used for querying group member | member | | `AUTH_LDAP_GROUP_MEMBER_USER_ATTRIBUTE` | User attribute used for comparing with group member | dn | | `AUTH_LDAP_SEARCH_SCOPE` | Serach scopes between base, one and sub | base | | `AUTH_LDAP_USERNAME_FILTER_EXTRA_ARG` | Extra arguments for user search filter (& based) | --- | | `AUTH_LDAP_GROUP_FILTER_EXTRA_ARG` | Extra arguments for user's groups search filter (& based) | --- | ## OIDC provider [#oidc-provider] This provider authenticates using OIDC protocol. Users signed in using OIDC are created in Homarr. Roles are fetched from group claims. This can also be changed to roles for example added to a azure app registration by using the `AUTH_OIDC_GROUPS_ATTRIBUTE`. If you'd rather manage group memberships for OIDC users locally (instead of via the IdP), set `AUTH_OIDC_GROUPS_LOCAL_MANAGEMENT=true`. While enabled, Homarr stops syncing OIDC users' group memberships from the groups claim, and admins can add/remove OIDC users on a group's members page. If you turn this back to `false`, the next login of each user resumes the regular sync and reconciles their groups with the IdP's claim again, which may remove memberships that were added manually while local management was enabled. To let an existing credentials user also sign in with OIDC, set `AUTH_OIDC_ENABLE_DANGEROUS_CREDENTIALS_LINKING=true`. On the first OIDC sign-in, Homarr links a credentials user with the same email address instead of creating a second user. The user keeps their password login, local username and profile, groups, permissions, boards, settings, and API keys. OIDC profile and group claims do not overwrite the credentials-owned data. Homarr requires the OIDC profile to contain `email_verified: true` while this option is enabled. Only enable this when your OIDC provider verifies email addresses, because a matching email could otherwise be used to take over an existing account.
Example Setup
In this example we will be using [Authelia](https://github.com/authelia/authelia). You can use any setup, but the simplest is [local](https://github.com/authelia/authelia/blob/master/examples/compose/local/authelia/configuration.yml). You also have to [enable OIDC in Authelia](https://www.authelia.com/configuration/identity-providers/open-id-connect/). Create a client for homarr. To generate client secret you can [use authelia](https://www.authelia.com/integration/openid-connect/frequently-asked-questions/#how-do-i-generate-client-secrets). This is an example config: ```yaml identity_providers: oidc: ... clients: - id: homarr secret: public: false authorization_policy: one_factor redirect_uris: - https://example.com/api/auth/callback/oidc - http://localhost:3000/api/auth/callback/oidc scopes: - openid - groups - profile - email userinfo_signing_algorithm: none consent_mode: implicit # self hosted ``` In Homarr use following env variables. ``` AUTH_PROVIDERS="oidc" AUTH_OIDC_ISSUER="https://auth.example.com" AUTH_OIDC_CLIENT_SECRET="client_secret" AUTH_OIDC_CLIENT_ID="homarr" AUTH_OIDC_CLIENT_NAME="Authelia" AUTH_OIDC_FORCE_USERINFO="true" --> from v4.39 of authelia and above this is required ``` For an azure app registration the setup could look like this: ``` AUTH_PROVIDERS="oidc" AUTH_OIDC_ISSUER="https://login.microsoftonline.com//v2.0" AUTH_OIDC_CLIENT_SECRET="" AUTH_OIDC_CLIENT_ID="" AUTH_OIDC_CLIENT_NAME="Azure" AUTH_OIDC_SCOPE_OVERWRITE="openid email profile" # Groups scope does not exist in azure AUTH_OIDC_GROUPS_ATTRIBUTE="roles" # We use the roles of the app registration so that we don't need to use uuids as our groups ```
### OIDC configuration [#oidc-configuration] | Environment Variable | Description | Default value | | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------- | | `AUTH_OIDC_ISSUER` | Issuer URI of OIDC provider. This has generally to be **without trailing slash** except for **Authentik** | --- | | `AUTH_OIDC_CLIENT_ID` | ID of OIDC client (application) | --- | | `AUTH_OIDC_CLIENT_SECRET` | Secret of OIDC client (application) | --- | | `AUTH_OIDC_CLIENT_NAME` | Display name of provider (in login screen) | OIDC | | `AUTH_OIDC_AUTO_LOGIN` | Automatically redirect to OIDC login | false | | `AUTH_OIDC_SCOPE_OVERWRITE` | Overwrite default scopes (openid, profile, email) | openid email profile groups | | `AUTH_OIDC_GROUPS_ATTRIBUTE` | Attribute used for groups (roles) claim. Dot-separated paths such as `resource_access.homarr.roles` are supported. | groups | | `AUTH_OIDC_GROUPS_LOCAL_MANAGEMENT` | Stop syncing group memberships of OIDC users from the groups claim and manage them locally via the group members page instead | false | | `AUTH_OIDC_NAME_ATTRIBUTE_OVERWRITE` | Overwrite name attribute. Dot-separated paths are supported. By default it will use preferred\_username if it does not contain a `@` and otherwise name. | --- | | `AUTH_OIDC_FORCE_USERINFO` | Force userinfo endpoint to be used for user information. | false | | `AUTH_OIDC_ENABLE_DANGEROUS_ACCOUNT_LINKING` | Enable account linking for OIDC provider. This will link the OIDC accounts by email. Be sure that you have verified emails to prevent stealing accounts. | false | | `AUTH_OIDC_ENABLE_DANGEROUS_CREDENTIALS_LINKING` | Link an OIDC identity to an existing credentials user with the same email. The credentials login and existing user data are preserved. Requires the OIDC profile to contain `email_verified: true`. | false | | `AUTH_OIDC_TOKEN_ENDPOINT_AUTH_METHOD` | Override method for the token endpoint authentication. Supported values are `client_secret_basic`, `client_secret_post`, `client_secret_jwt` and `none`. | client\_secret\_basic | ### OIDC permissions [#oidc-permissions] To give a user special permissions, first create a new group in homarr and assign the permission desired. For example if the group on homarr is called `homarr-admins` a new group on the oidc provider, for example authentik needs to be created with the same name, that would be `homarr-admins`. After assigning the group on the oidc provider to the user, and logging again into homarr, the user should automatically get placed in that group and inherit the permissions defined. ## Example setups [#example-setups] This example demonstrates how to use [Authentik](https://goauthentik.io/) as an OIDC provider for Homarr. User and group management is handled within Authentik. Homarr synchronizes group memberships based on OIDC claims provided by Authentik. To grant administrative privileges, create a group in Authentik (e.g., `homarr-admins`) and add the relevant users. Then add the group with the same name in Homarr and assign the desired permissions to it.
Example Setup
**1. Configure Authentik:** * Create an OIDC application in Authentik for Homarr. * Set the redirect URIs to: * `https:///api/auth/callback/oidc` * `http://localhost:3000/api/auth/callback/oidc` (for local development) * Record the client ID, client secret, and application slug. * Create a group (e.g., `homarr-admins`) and assign users who require admin access. **2. Example .env file:** Generate `SECRET_ENCRYPTION_KEY` with `openssl rand -hex 32`; do not copy an example key between installs. ```bash OIDC_CLIENT_ID= OIDC_CLIENT_SECRET= OIDC_SLUG=homarr #Application slug in Authentik AUTH_DOMAIN=auth.example.com #Authentik FQDN ADMIN_GROUP=homarr-admins #Authentik group for Homarr admins HOMARR_FQDN=homarr.example.com #Homarr FQDN SECRET_ENCRYPTION_KEY= ``` **3. Example Docker Compose configuration:** ```yaml {14-24} services: homarr: image: ghcr.io/homarr-labs/homarr:latest container_name: homarr restart: unless-stopped ports: - '7575:7575' volumes: - ./homarr:/appdata - /var/run/docker.sock:/var/run/docker.sock:ro environment: - TZ=America/Los_Angeles - SECRET_ENCRYPTION_KEY=${SECRET_ENCRYPTION_KEY} - AUTH_PROVIDERS=oidc #(optional: include ',credentials' to keep local accounts as fallback) - AUTH_OIDC_CLIENT_ID=${OIDC_CLIENT_ID} - AUTH_OIDC_CLIENT_SECRET=${OIDC_CLIENT_SECRET} - AUTH_OIDC_ISSUER=https://${AUTH_DOMAIN}/application/o/${OIDC_SLUG}/ - AUTH_OIDC_URI=https://${AUTH_DOMAIN}/application/o/authorize - AUTH_OIDC_CLIENT_NAME=authentik - AUTH_OIDC_SCOPE_OVERWRITE=openid email profile groups - AUTH_OIDC_GROUPS_ATTRIBUTE=groups - AUTH_LOGOUT_REDIRECT_URL=https://${AUTH_DOMAIN}/application/o/${OIDC_SLUG}/end-session/ - AUTH_OIDC_AUTO_LOGIN=true #To sign in with Authentik automatically networks: - my-network networks: my-network: external: true ``` **4. Additional Notes:** * Ensure both Authentik and Homarr are accessible via the specified FQDNs. * The `AUTH_OIDC_GROUPS_ATTRIBUTE` should correspond to the claim in Authentik that contains group names (typically `groups`). * Your user will automatically be placed in groups that have the same name as those of authentik. So simply create them in Homarr and give them the permissions you want. * For further information, refer to the [Authentik OIDC documentation](https://goauthentik.io/docs/providers/oauth2/).
See [OIDC configuration](#oidc-configuration) for additional options.
This example demonstrates how to use [Google Auth Platform](https://console.cloud.google.com/auth/overview) as an OIDC provider for Homarr. Unfortunately Google does not support synchronization of group membership. See [https://issuetracker.google.com/issues/133774835?pli=1](https://issuetracker.google.com/issues/133774835?pli=1).
Example Setup
**1. Setup (Google):** * Create a Project in [Google Cloud Console](https://console.cloud.google.com/) for Homarr and switch to that Project. * Configure [Authorized Domains](https://console.cloud.google.com/auth/branding) and set it to ``. * Create a new [OAuth Client](https://console.cloud.google.com/auth/clients): * Select Application Type `Web` * Set the redirect URI to `https:///api/auth/callback/oidc` * Record the `Client-ID` and `Client Key` (secret). **2. Example .env file (Homarr):** Generate `SECRET_ENCRYPTION_KEY` with `openssl rand -hex 32`; do not copy an example key between installs. ```bash OIDC_CLIENT_ID= OIDC_CLIENT_SECRET= HOMARR_FQDN=homarr.example.com #Homarr FQDN SECRET_ENCRYPTION_KEY= ``` **3. Example Docker Compose configuration (Homarr):** ```yaml {14-20} services: homarr: image: ghcr.io/homarr-labs/homarr:latest container_name: homarr restart: unless-stopped ports: - '7575:7575' volumes: - ./homarr:/appdata - /var/run/docker.sock:/var/run/docker.sock:ro environment: - TZ=Europe/Berlin - SECRET_ENCRYPTION_KEY=${SECRET_ENCRYPTION_KEY} - AUTH_PROVIDERS=oidc #(optional: include ',credentials' to keep local accounts as fallback) - AUTH_OIDC_CLIENT_ID=${OIDC_CLIENT_ID} - AUTH_OIDC_CLIENT_SECRET=${OIDC_CLIENT_SECRET} - AUTH_OIDC_ISSUER=https://accounts.google.com - AUTH_OIDC_CLIENT_NAME=Google - AUTH_OIDC_SCOPE_OVERWRITE=openid email profile - AUTH_OIDC_NAME_ATTRIBUTE_OVERWRITE=name networks: - my-network networks: my-network: external: true ```
See [OIDC configuration](#oidc-configuration) for additional options.
# Proxies and Certificates (/docs/advanced/proxy) ## Allowing self-signed certificates [#allowing-self-signed-certificates] Some users may come across a barrier, where they're unable to receive a 200 response from the Ping widget for some apps, while using self-signed certificates or a local certificate authory. What's going on? Homarr is trying to communicate to your apps via the integrations. It usually doesn't matter if Homarr is running on `http` or `https`. Your apps have a self-signed certificate - Homarr will recognize that the certificate was signed by an unknown authority and requests will be blocked. To allow self-signed certificates, you can configure them on the certificates management page. You can find more informations on the dedicated page: [Certificates](/docs/management/certificates/) ## Securing Homarr with Traefik [#securing-homarr-with-traefik] Copying the configuration straight from the docker-compose file won't work if you are running Homarr behind Traefik, such as a Portainer setup, or docker-swarm. In that case, you should use the following slightly modified configuration: ```yaml version: "3" services: homarr: container_name: homarr image: ghcr.io/homarr-labs/homarr:latest restart: unless-stopped volumes: - ./homarr/appdata:/appdata environment: - BASE_URL=https://your.internal.dns.address.here.com - SECRET_ENCRYPTION_KEY=your_64_character_hex_string # <--- can be generated with `openssl rand -hex 32` networks: - proxy labels: traefik.enable: true traefik.http.routers.homarr.rule: Host(`your.internal.dns.address.here.com`) traefik.http.routers.homarr.entrypoints: websecure traefik.http.routers.homarr-secure.app: homarr networks: proxy: external: true ```
A sample Traefik docker-compose.yml using Cloudflare for certificate generation that works with the configuration above would be: ```yaml version: "3" apps: traefik: image: traefik:latest container_name: traefik restart: unless-stopped security_opt: - no-new-privileges:true networks: - proxy ports: - 80:80 - 443:443 environment: - CF_API_EMAIL=yourcfemail@here.com - CF_DNS_API_TOKEN=long-token-from-cf command: - "--log.level=DEBUG" - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--providers.docker.endpoint=unix:///var/run/docker.sock" - "--entrypoints.web.address=:80" - "--entrypoints.web.http.redirections.entryPoint.to=websecure" - "--entrypoints.web.http.redirections.entryPoint.scheme=https" - "--entrypoints.web.http.redirections.entrypoint.permanent=true" - "--entrypoints.websecure.address=:443" - "--entrypoints.websecure.http.tls.certResolver=cloudflare" - "--certificatesresolvers.cloudflare.acme.storage=acme.json" - "--certificatesResolvers.cloudflare.acme.email=yourcfemail@here.com" - "--certificatesResolvers.cloudflare.acme.dnsChallenge=true" - "--certificatesResolvers.cloudflare.acme.dnschallenge.provider=cloudflare" - "--certificatesResolvers.cloudflare.acme.dnschallenge.resolvers=1.1.1.1:53,1.0.0.1:53" - "--serversTransport.insecureSkipVerify=true" # Or proxmox gives an error 500 due to its own self-signed cert volumes: - /etc/localtime:/etc/localtime:ro - /var/run/docker.sock:/var/run/docker.sock:ro - ./data/acme.json:/acme.json networks: proxy: external: true ``` Of particular note here is that both configurations explicitly define which network they are using, in this case "proxy", but it can be named anything. It just has to be the same across all apps for which Traefik is serving as a proxy. These are marked as external because the proxy network was manually created by running: `docker network create proxy` but this might be unnecessary depending on HOW exactly you are running Traefik. For example, if running [Traefik with Portainer](https://docs.portainer.io/advanced/reverse-proxy/traefik#deploying-in-a-docker-standalone-scenario), you can follow their official docs on how to set up Traefik and Portainer together, and you can just focus on the Homarr docker labels instead. ## Securing Homarr with Caddy [#securing-homarr-with-caddy] If you are using Caddy as the reverse proxy for your setup, your `docker-compose.yml` should look something like this: ```yaml services: # <-- [Homarr installation] caddy: container_name: caddy image: caddy:2 restart: unless-stopped ports: - 80:80 - 443:443 - 443:443/udp volumes: - ./Caddyfile:/etc/caddy/Caddyfile - caddy_data:/data - caddy_config:/config networks: - proxy volumes: caddy_data: caddy_config: networks: proxy: external: true ``` Homarr and Caddy must share the same Docker network: ```yaml homarr: ... networks: - proxy ``` Next, create a file named `Caddyfile` at the same level as your `docker-compose.yml` file with the following content: ``` homarr.mydomain.com { reverse_proxy homarr:7575 } ``` If you want more information about working with Caddy and Docker Compose, refer to the official documentation: [https://caddyserver.com/docs/running#docker-compose](https://caddyserver.com/docs/running#docker-compose) # Styling (/docs/advanced/styling) Homarr uses Mantine and supports custom CSS at two scopes: * **Global:** **Management → Settings → Instance branding → Custom CSS**. * **Board:** **Board settings → Custom CSS**. Board CSS loads after the global stylesheet and can override it. Both editors accept direct CSS and Workshop imports. Custom CSS can break after updates and is not an authorization boundary. Hidden controls remain accessible to users who have permission to use them. ## Target elements [#target-elements] Use browser developer tools to inspect the element and test a selector. Prefer stable semantic or Mantine class names; avoid generated classes such as `mantine-Card-x2fske`, which change between builds. To target one widget, add a custom class under **Edit item → Advanced options** and use that class in the board CSS. Use `!important` only when the existing cascade requires it. ## Theme variables [#theme-variables] Mantine exposes [CSS variables](https://mantine.dev/styles/css-variables-list/) that can be overridden globally or per board: ```css :root { --mantine-primary-color-filled: #ffbb00; } ``` CSS changes presentation only; use widgets, integrations, permissions, or application code for behavior. # Docker (/docs/getting-started/installation/docker) Docker Compose is the recommended installation method. Install [Docker Engine](https://docs.docker.com/engine/install/) and the [Compose plugin](https://docs.docker.com/compose/install/). ## Docker Compose [#docker-compose] Start Homarr from the directory containing `docker-compose.yaml`: ```sh docker compose up -d ``` Persist `/appdata`; it contains the database and configuration. Mount the Docker socket only when Homarr needs Docker discovery or management. Integration URLs must be reachable from the Homarr container. Browser-facing app URLs may use a different hostname; see [Managing integrations](/docs/management/integrations#configuration). ### Update [#update] Update the image and recreate the container with the same configuration. Homarr runs database migrations automatically at startup, including when moving from v1 to v2; no separate upgrade procedure is needed. Keep the `/appdata` mount and `SECRET_ENCRYPTION_KEY` unchanged. Workshop connects to the production service by default. ```sh docker compose pull docker compose up -d ``` ### Uninstall [#uninstall] `docker compose down` removes the containers and Compose network. Delete the configured `/appdata` host directory or volume only when the Homarr data is no longer needed. ## Docker CLI [#docker-cli] The equivalent standalone container is: ```sh docker run \ --name homarr \ --restart unless-stopped \ -p 7575:7575 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /absolute/path/to/homarr/appdata:/appdata \ -e SECRET_ENCRYPTION_KEY='your_64_character_hex_string' \ -d ghcr.io/homarr-labs/homarr:latest ``` Remove the Docker socket mount when it is not required. To update, pull the current image, recreate the container with the same arguments, and keep the `/appdata` mount and `SECRET_ENCRYPTION_KEY` unchanged. # EasyPanel (/docs/getting-started/installation/easy-panel) Easypanel has not updated to 1.0 yet. There template is still on 0.15.4. Easypanel is a modern server control panel. If you [run Easypanel](https://easypanel.io/docs) on your server, you can deploy Homarr with 1 click on it. [![Deploy to Easypanel](https://easypanel.io/img/deploy-on-easypanel-40.svg)](https://easypanel.io/docs/templates/homarr) # Helm (/docs/getting-started/installation/helm) homarr logo ![Version: 8.28.2](https://img.shields.io/badge/Version-8.28.2-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) A Helm chart to deploy homarr for Kubernetes **Homepage:** [https://homarr-labs.github.io/charts/charts/homarr/](https://homarr-labs.github.io/charts/charts/homarr/) ## Source Code [#source-code] * [https://github.com/homarr-labs/homarr](https://github.com/homarr-labs/homarr) ## Requirements [#requirements] Kubernetes: `>=1.24.0-0` ## Dependencies [#dependencies] This chart has no dependencies. ## Installing the Chart [#installing-the-chart] To install the chart with the release name `homarr` ### OCI (Recommended) [#oci-recommended] ```console helm install homarr oci://ghcr.io/homarr-labs/charts/homarr ``` ### Traditional [#traditional] ```console helm repo add homarr-labs https://homarr-labs.github.io/charts/ helm repo update helm install homarr homarr-labs/homarr ``` ## Uninstalling the Chart [#uninstalling-the-chart] To uninstall the `homarr` deployment ```console helm uninstall homarr ``` The command removes all the Kubernetes components associated with the chart **including persistent volumes** and deletes the release. ## Configuration [#configuration] Read through the [values.yaml](https://github.com/homarr-labs/charts/blob/dev/charts/homarr/values.yaml) file. It has several commented out suggested values. Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. ```console helm install homarr \ --set env.TZ="America/New York" \ homarr-labs/homarr ``` Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. ```console helm install homarr homarr-labs/homarr -f values.yaml ``` ## Custom configuration [#custom-configuration] ### Secrets [#secrets] To avoid including sensitive information in plain text within your version control, consider using a declarative approach by applying secrets directly with kubectl apply. For example, instead of including repository credentials in your Helm values, you can leverage a kubernetes secrets manager. 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 | ### Database [#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 | #### Pod disk [#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. To create the necessary database secret, execute the following command:
Required Secrets ```yaml kubectl create secret generic db-encryption \ --from-literal=db-encryption-key='' \ --namespace homarr ```
#### PVC [#pvc] To persist data, you need to enable the `homarr-database` PVC. This will store the Homarr database on a mounted volume. Associated secret to create :
DB Required Secrets ```yaml kubectl create secret generic db-encryption \ --from-literal=db-encryption-key='' \ --namespace homarr ```
Bellow an example of the override value file :
values.yaml ```yaml persistence: homarrDatabase: enabled: true storageClassName: "default" size: "1Gi" ```
#### External Postgresql database [#external-postgresql-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='postgresql://user:password@host:port/homarrdb' \ --namespace homarr ```
Below is an example of the override values file:
values.yaml ```yaml database: type: postgresql ```
### Ingress [#ingress] The ingress section in the values.yaml file allows you to configure how external traffic accesses your application through an Ingress resource. This section defines whether Ingress is enabled, the class to use, and how to set up hosts, paths, and TLS for secure connections.
values.yaml ```yaml service: enabled: true # Ensure the service is enabled for Ingress to route traffic ingress: enabled: true ingressClassName: "traefik" annotations: # Add any additional annotations as needed hosts: - host: homarr.homelab.dev paths: - path: / pathType: ImplementationSpecific tls: - hosts: - "homarr.homelab.dev" - "www.homarr.homelab.dev" secretName: homelab-tls ```
### HTTPRoute (Gateway API) [#httproute-gateway-api] The httproute section in the values.yaml file allows you to configure how external traffic accesses your application using the Kubernetes Gateway API. This provides a more expressive and future-proof alternative to Ingress, with support for advanced routing, filters, and multiple parent Gateways.
values.yaml ```yaml service: enabled: true # must be enabled for HTTPRoute to forward traffic httproute: enabled: true parentRefs: - name: my-gateway namespace: default hostnames: - homarr.homelab.dev rules: - matches: - path: type: PathPrefix value: / backendRefs: - name: homarr port: 7575 ```
#### Notes: [#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 * 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 [#certificates] Configuration for trusted certificate persistence. Supports: * Declarative config via `configmap` or `secret` * Pre-existing secret with `existingSecret` #### type: configmap [#type-configmap] Use inline certificates to generate a ConfigMap, mounted as individual files.
values.yaml ```yaml persistence: homarrTrustedCerts: enabled: true type: configmap certificates: cert1.crt: | -----BEGIN CERTIFICATE----- MIID...ABCD== -----END CERTIFICATE----- cert2.crt: | -----BEGIN CERTIFICATE----- MIID...EFGH== -----END CERTIFICATE----- ```
Behavior: * Helm creates a ConfigMap with keys cert1.crt and cert2.crt * Mounts them as /appdata/trusted-certificates/cert1.crt and /appdata/trusted-certificates/cert2.crt #### type: secret [#type-secret] Use inline certificates to generate a Kubernetes Secret, mounted as files.
values.yaml ```yaml persistence: homarrTrustedCerts: enabled: true type: secret certificates: cert1.crt: | -----BEGIN CERTIFICATE----- MIIC...XYZ== -----END CERTIFICATE----- cart2.crt: | -----BEGIN CERTIFICATE----- MIIC...XYZ== -----END CERTIFICATE----- ```
Behavior: * Helm creates a Kubernetes Secret with cert1.crt and cart2.crt keys * Mounts it into the container #### type: existingSecret [#type-existingsecret] Use an existing Kubernetes Secret, assuming its keys are filenames.
values.yaml ```yaml persistence: homarrTrustedCerts: enabled: true type: existingSecret existingSecretName: "existingSecretName" existingSecretKeys: - cert3.crt - cert4.crt ```
Behavior: * No new Secret is created * Uses existingSecretName directly * Mounts all keys as files in /appdata/trusted-certificates #### Summary Table [#summary-table] | Type | Creates Resource | Requires Certificates | Uses Existing | Mounts As Files | | ---------------- | ---------------- | --------------------- | ------------- | --------------- | | `configmap` | ConfigMap | Yes (`certificates`) | ❌ | ✅ | | `secret` | Secret | Yes (`certificates`) | ❌ | ✅ | | `existingSecret` | ❌ | ❌ | ✅ | ✅ | All available values are listed on the [artifacthub](https://artifacthub.io/packages/helm/homarr-labs/homarr?modal=values). If you find any issue please open an issue on [github](https://github.com/homarr-labs/charts/issues/new?assignees=maintainers\&labels=bug\&projects=\&template=bug_report.yaml) ## Values [#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 | *** Autogenerated from chart metadata using [helm-docs](https://github.com/norwoodj/helm-docs) # Home Assistant Add-on (/docs/getting-started/installation/home-assistant) Home Assistant Add-on is now updated to 1.0. Please add the new repository to your Add-on store. Also make sure to follow the [migration guide](https://homarr.dev/blog/2025/01/19/migration-guide-1.0/) so you don't lose your existing setup. Homarr can be seamlessly integrated into your Home Assistant setup with this add-on. This is perfect for users who rely on Home Assistant as their primary server and don't have a separate device for hosting. ## Prerequisites [#prerequisites] * [Home Assistant](https://www.home-assistant.io/getting-started/) * Add-ons are only available if you've used the Home Assistant Operating System or Home Assistant Supervised installation method. ## Installation [#installation] 1. **Add Repository**: Navigate to your Home Assistant Supervisor panel, and go to the Add-on Store. Add the following repository URL: `https://github.com/Wiggen94/ha-homarr-v1-server` or click this button [![Open your Home Assistant instance and show the add add-on repository dialog with a specific repository URL pre-filled.](https://my.home-assistant.io/badges/supervisor_add_addon_repository.svg)](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2FWiggen94%2Fha-homarr-v1-server) 2. **Install the Add-on**: Search for "Homarr Server" in the Add-on Store and select it. Click on "Install" to start the installation process. 3. **Start the Add-on**: Once installed and configured, start the Homarr Server add-on from the Home Assistant Supervisor panel. 4. **Access Homarr**: Homarr will be available at `http://:7575`. Open this address in your browser to access your Homarr dashboard. Your configuration, data and icons will be saved at /shares # Hostinger (/docs/getting-started/installation/hostinger) Hostinger offers a one-click Docker deployment of Homarr on its VPS plans. Hostinger maintains the deployment template; you manage your Homarr instance and the VPS. [Deploy on Hostinger](https://www.hostinger.com/applications/homarr) ## Install Homarr [#install-homarr] 1. Open [Homarr on Hostinger](https://www.hostinger.com/applications/homarr), choose a VPS plan, and follow the account and server setup steps. 2. In the Hostinger dashboard, open **VPS**, select **Manage** for your server, and open **Docker Manager**. 3. If Homarr is not already deployed, choose **Compose → One Click Deploy**, select Homarr from the application catalog, and follow the deployment prompts. 4. Once the project is running, check its published port in Docker Manager. Configure a domain and HTTPS access to that port before creating your account over the internet, then open your HTTPS address. 5. Complete Homarr's onboarding to create your administrator account and first board. Continue with [After the installation](../after-the-installation.mdx). For the current dashboard workflow, see [Hostinger's Docker Manager deployment guide](https://www.hostinger.com/support/12040815-how-to-deploy-your-first-container-with-hostinger-docker-manager/). ## Connecting your services [#connecting-your-services] A VPS is outside your home network. For integrations with services at home, configure a private connection, such as a VPN, so the VPS can reach them. A browser bookmark to a local service does not give Homarr's server access to that service. Use HTTPS when accessing Homarr over the internet. Keep the VPS and Homarr updated, and back up Homarr's persistent data and `SECRET_ENCRYPTION_KEY` before updates. See the [Docker installation guide](./docker.mdx) for Homarr's storage and configuration requirements. ## Partnership [#partnership] Hostinger provides the VPS we use to deploy the Homarr Workshop and documentation website. We also have an affiliate partnership; purchases through a referral link may support the project. The link on this page currently goes directly to Hostinger's Homarr application page. # Install Homarr (/docs/getting-started/installation) Docker Compose is the best starting point for most self-hosters. Choose a platform-specific guide when Homarr will run inside an existing server manager or managed service. Start with **Docker Compose**. It is the recommended path, has the broadest community support, and makes updates and backups straightforward. ## Recommended [#recommended] The recommended installation for most Linux and Windows servers. Deploy Homarr into an existing Kubernetes cluster. Build and run Homarr directly from the repository. ## Self-hosting platforms [#self-hosting-platforms] Install Homarr from the Unraid Community Apps catalog. Run Homarr on a Synology NAS with Container Manager. Add Homarr to a Proxmox-based homelab. Install Homarr alongside your Home Assistant environment. Deploy and manage Homarr through Portainer stacks. Run Homarr on a QNAP NAS. Add Homarr from the Runtipi app store. ## Managed and app platforms [#managed-and-app-platforms] Deploy Homarr from an Easypanel template. Launch Homarr as a managed Railway service. Use a hosted Homarr instance without managing a server. Add Homarr to a Saltbox deployment. # Pika Pods (/docs/getting-started/installation/pika-pods) Pika Pods is a hosting platform for open source apps. You can deploy Homarr on Pika Pods with just a few clicks: [*![Deploy on PikaPods](https://www.pikapods.com/static/run-button.svg)*](https://www.pikapods.com/pods?run=homarr) # Portainer (/docs/getting-started/installation/portainer) ## Install with a stack [#install-with-a-stack] Create a Portainer stack with this Compose file: ```yml title="docker-compose.yml" #---------------------------------------------------------------------# # Homarr - A simple, yet powerful dashboard for your server. # #---------------------------------------------------------------------# services: homarr: container_name: homarr image: ghcr.io/homarr-labs/homarr:latest restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock # Optional, only if you want docker integration - /appdata:/appdata environment: - SECRET_ENCRYPTION_KEY=your_64_character_hex_string # <--- can be generated with `openssl rand -hex 32` ports: - "7575:7575" ``` Replace `` with an absolute host path, generate `SECRET_ENCRYPTION_KEY`, then deploy the stack. See [Portainer's stack documentation](https://docs.portainer.io/user/docker/stacks/add) for Portainer-specific options. ### Updating [#updating] Pull the current image and redeploy the stack: 1. Run `docker pull ghcr.io/homarr-labs/homarr:latest` to pull the latest image. 2. Re-run `docker-compose up -d` or re-deploy the stack in Portainer. # Proxmox (/docs/getting-started/installation/proxmox) This guide covers how to install homarr inside of a linux-container in ProxmoxVE, using a fully automated approach. # What is community-scripts? [#what-is-community-scripts] [https://community-scripts.org/](https://community-scripts.org/) This installation method is provided by the Proxmox Community-Scripts. We are a community-driven initiative that simplifies the setup of Proxmox Virtual Environment (VE). With hundreds of scripts to help you manage your Proxmox VE environment. Whether you're a seasoned user or a newcomer, we've got you covered. # Installation [#installation] It's as simple as pasting the following snippet into your Proxmox node's console ```bash bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/homarr.sh)" ``` Check out the website for more info: [https://community-scripts.org/scripts?q=homarr](https://community-scripts.org/scripts?q=homarr) Never trust any script directly injected from the web, without prior looking through it or searching the web for other's opinions. After executing this command, you will get asked, if you want to accept defaults or would like to specify things like IP-Adress, DNS etc, then choose advanced. After confirming the installation, the script will install the required dependencies, which may take a few minutes. Do not interrupt the installation. After you've installed Homarr, you can find a new LXC "homarr". # Updating [#updating] Updating is as simple as executing ```bash update ``` or running the script again but this time inside the container's shell: ```bash bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/homarr.sh)" ``` # Configuration [#configuration] Some Homarr features require setting environment variables. When installing Homarr on Proxmox using the community-scripts installer, these can be configured in the file /opt/homarr.env. This path is also documented on the community-scripts website as the configuration path. # Troubleshooting [#troubleshooting] If something does not work after an update, please first try rebooting the LXC or the homarr Service with ```bash systemctl restart homarr ``` # Getting help [#getting-help] * If you are looking for help with the script, updating the LXC or troubleshooting the installer, please get in contact with the support of the community scripts. They provide support on their [Discord](https://discord.gg/2wvnMDgdnU). If you found vulnerabilities, bugs or have a request for the script, [create a new issue here](https://github.com/community-scripts/ProxmoxVE/issues/new/choose). * If you are looking to report a bug, vulnerability or request a new feature, use [https://github.com/homarr-labs/homarr](https://github.com/homarr-labs/homarr) . You can ask for help on our Discord. # How to find logs [#how-to-find-logs] Homarr runs under a system service called `homarr`, so getting the logs is a simple as using the following command inside the LXC (Container) Shell ```bash systemctl status homarr ``` As Homarr logs really a log, it sometimes feels like the log is endless till you get the bottom, so a command like this only shows the latest 100 lines: ```bash journalctl -u homarr | tail -n 100 ``` # QNAP (/docs/getting-started/installation/qnap) The available QNAP guides target Homarr 0.15.10 and have not been updated for 1.0. Run Homarr with [Container Station](https://www.qnap.com/en/software/container-station) or the [third-party QNAP package](https://www.myqnap.org/product/homarr/). A community [Container Station guide](https://post.smzdm.com/p/awzm7op2/) is available in Chinese. # Railway (/docs/getting-started/installation/railway) Railway is a cloud platform that allows you to deploy your apps with ease. You can deploy Homarr on Railway with a few clicks. [*![Deploy on Railway](https://railway.com/button.svg)*](https://railway.com/deploy/_c4Kr9?referralCode=vishify) # Runtipi (/docs/getting-started/installation/runtipi) Homarr is available in the default [Runtipi](https://runtipi.io) app store. ## Installation [#installation] Install **Homarr** from the Runtipi app store and select either a port or domain for access. Runtipi manages start, stop, update, backup, and log operations under **My apps → Homarr**. Use a [user-config](https://runtipi.io/docs/guides/customize-app-config) to override the generated Compose configuration. See the [Runtipi installation documentation](https://runtipi.io/docs/getting-started/installation) for host setup. # Saltbox (/docs/getting-started/installation/saltbox) Saltbox installation command has not updated to 1.0 yet. There command still runs 0.15.10. You can also use this to install on Saltbox: ```bash sb install sandbox-homarr ``` # From source (/docs/getting-started/installation/source) Installing from source is a bad idea in many ways: * No isolation between applications * Dependency conflicts on your root operating system * Cumbersome update process * Permission management * Handling of conflicts Therefore, we highly discourage you from using this as a normal user. This method is only useful, when you want to develop on Homarr or extend it with your own functionality. ## Prerequisites [#prerequisites] * [Node.js](https://nodejs.org/en/download/) 24.18 or newer * [pnpm](https://pnpm.io/installation) at the version pinned in the repository's `package.json` * [Redis](https://redis.io/download) ## Steps [#steps]
  1. Clone the Repository using git clone [https://github.com/homarr-labs/homarr.git](https://github.com/homarr-labs/homarr.git)
  2. Enter the created directory using cd homarr
  3. Install all dependencies using pnpm install
  4. Copy `.env.example` to `.env` and set `DB_URL` to an absolute writable path, such as `DB_URL='/home/username/homarr/db.sqlite'`. Migration and application commands run from different workspace directories, so a relative path can point them at different databases.
  5. Run `openssl rand -hex 32` twice and set `AUTH_SECRET` and `SECRET_ENCRYPTION_KEY` to the two different generated values. Keep both values secret and preserve `SECRET_ENCRYPTION_KEY` with your backups.
  6. Run `pnpm run db:migration:sqlite:run` and wait that it completes
  7. Build the source using `pnpm build`
  8. Copy better-sqlite3.node files with `mkdir build` and `cp ./node_modules/better-sqlite3/build/Release/better_sqlite3.node ./build/better_sqlite3.node`
  9. Start a redis server using `redis-server`
  10. Run the server using `pnpm start`
  11. Open `http://localhost:3000` in your browser
# Synology (/docs/getting-started/installation/synology) The installation process is quite easy and fast on Synology devices. Since this method is used less often, we recommend you to follow this guide written by mariushosting. [https://mariushosting.com/how-to-install-homarr-on-your-synology-nas/](https://mariushosting.com/how-to-install-homarr-on-your-synology-nas/) # Unraid (/docs/getting-started/installation/unraid) You can install Homarr directly from your Unraid Dashboard, no terminal required. #### Prerequisites [#prerequisites] * [Unraid](https://unraid.net/) * [Community Apps](https://forums.unraid.net/topic/38582-plug-in-community-applications/) #### Install the Community Apps Plugin [#install-the-community-apps-plugin]
Install community applications plugin


Don't know whether you have the plugin installed or not? Search for this tab in the navigation: Unraid navigation with the Apps tab highlighted #### Installing [#installing] After you've installed the Community Apps Plugin, you can install Homarr from the Unraid Dashboard. 1. Navigate to the tab "Apps". 2. Search for "Homarr" and click on the result. 3. Click on "Install" and adjust the settings to your liking. Homarr result in Unraid Community Apps with installation actions After you've installed Homarr, you can find it under the tab "Docker". The official support thread is located [here](https://forums.unraid.net/topic/123478-support-smartphonelover-homarr/), but we prefer to communicate over GitHub and Discord instead. # AdGuard Home (/docs/integrations/adguard-home) AdGuard Home is a network-wide software for blocking ads and trackers, providing a safer and faster internet experience. Categories: DNS Hole ### Widgets & Capabilities [#widgets--capabilities] [DNS Hole Summary](/docs/widgets/dns-hole-summary): Displays the summary of your Pi-hole, AdGuard Home or Technitium DNS blocks and queries statistics [DNS Hole Controls](/docs/widgets/dns-hole-controls): Control the blocking feature of your Pi-hole, AdGuard Home or Technitium DNS from your dashboard ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **Username**: Account username for authentication. **Password**: Account password for authentication. # Anchor (/docs/integrations/anchor) Anchor is a self-hosted note-taking application. The Anchor integration lets Homarr display and edit selected notes directly from the dashboard. Categories: Notes The Anchor integration lets Homarr connect to your Anchor instance so you can display and edit selected notes directly from your dashboard. ### Widgets & Capabilities [#widgets--capabilities] [Anchor Note](/docs/widgets/anchor-note): Display and edit a selected note from Anchor ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Open your Anchor instance. 2. Generate or copy an API key from Anchor settings. 3. Paste that key into the API Key secret field in Homarr. # ArchiveTeam Warrior (/docs/integrations/archiveteam-warrior) ArchiveTeam Warrior is an easy-to-run virtual machine that helps preserve websites by using some of your bandwidth and disk space to download and upload content to ArchiveTeam’s archive. Categories: archiving The ArchiveTeam Warrior integration lets Homarr connect to your ArchiveTeam Warrior instance so you can manage and monitor your archiving tasks directly from your dashboard. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] ArchiveTeam Warrior does not require authentication by default. If your instance is protected with basic authentication, you can provide a username and password. No credentials required. **Username**: Account username for authentication. **Password**: Account password for authentication. # Aria2 (/docs/integrations/aria2) Lightweight multi-protocol & multi-source command-line download utility. It supports HTTP/HTTPS, FTP, SFTP, BitTorrent and Metalink Categories: Download, Multiprotocol, Multi-source ### Widgets & Capabilities [#widgets--capabilities] [Download Client](/docs/widgets/downloads): Allows you to view and manage your Downloads from both Torrent and Usenet clients. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. No credentials required. # Audiobookshelf (/docs/integrations/audiobookshelf) Audiobookshelf is a self-hosted audiobook and podcast server that lets you manage and stream your audio library. Categories: Media Audiobookshelf provides library statistics including audiobook and podcast counts, listening time, and active sessions. ### Widgets & Capabilities [#widgets--capabilities] [Audio Stats](/docs/widgets/audio-stats): Displays library statistics from Navidrome or Audiobookshelf, adapting its display based on the linked integration. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Open your Audiobookshelf instance 2. Go to Settings → Users 3. Click on your user account 4. Copy the API token from the user details # Autobrr (/docs/integrations/autobrr) Autobrr automates release-based actions for torrent and Usenet workflows. Categories: Miscellaneous ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Create an API key in Settings > API Keys. # Bazarr (/docs/integrations/bazarr) Bazarr is a companion application to Sonarr and Radarr that manages and downloads subtitles for your media library. Categories: Subtitles, Media Bazarr complements Sonarr and Radarr by managing subtitle downloads. The Homarr integration uses your Bazarr API key to fetch missing subtitle counts and health badges. ### Screenshots [#screenshots]

API key location in Bazarr (Settings → General → Security):

bazarr-api-key-settings

Bazarr widget on a Homarr board:

bazarr-widget-on-board
### Widgets & Capabilities [#widgets--capabilities] [Bazarr](/docs/widgets/bazarr): Displays missing subtitle counts and health indicators from your Bazarr instance. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] You can find your Bazarr API key under **Settings → General → Security**. **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Open Bazarr and go to Settings → General → Security. 2. Copy the API key and paste it into Homarr when creating the integration. # Caddy (/docs/integrations/caddy) Fast, extensible, and production-ready open source web server. Categories: Reverse proxy ### Widgets & Capabilities [#widgets--capabilities] The [Stats widget](/docs/widgets/stats) reads Caddy's `/reverse_proxy/upstreams` admin API endpoint and displays the configured upstream count, active requests, and remembered failed requests. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). Configure the integration URL to reach Caddy's admin API. Caddy listens on `localhost:2019` by default; when Homarr runs in a separate container, configure Caddy's admin endpoint on a private network address that Homarr can reach, or use a private socket or network path appropriate for your deployment. The admin API controls Caddy and must not be exposed to the public internet. If you change the admin address with `CADDY_ADMIN` or the global `admin` option, use that address in Homarr. Homarr sends no Caddy credentials; keep the endpoint private using Caddy's network and socket access controls. # Changedetection.io (/docs/integrations/changedetection) An open source web page change detection and notification service. Categories: Monitoring ### Widgets & Capabilities [#widgets--capabilities] The [Stats widget](/docs/widgets/stats) displays the number of unviewed watches with detected changes and the total number of watches. It reads the Changedetection.io API response from `/api/v1/watch`. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Open Changedetection.io and go to Settings > API. 2. Copy the API key and paste it into the API Key field when creating the integration in Homarr. # Beszel (/docs/integrations/beszel) Beszel is a lightweight server monitoring platform with Docker stats, historical data, and alert functions. Categories: System Monitoring Beszel monitors your servers in real time via lightweight agents, collecting CPU, memory, disk, network, GPU, temperature, and Docker container metrics. It stores historical data and supports configurable alerts. ### Screenshots [#screenshots] Beszel dashboard overview showing all four widgets ### Widgets & Capabilities [#widgets--capabilities] [Beszel System Stats](/docs/widgets/beszel-system-stats): Time-series charts for CPU, memory, disk, network, and Docker container metrics from Beszel. [Beszel Systems (Grid)](/docs/widgets/beszel-system-grid): Card grid view of all Beszel-monitored systems with real-time metrics. [Beszel Systems (Table)](/docs/widgets/beszel-system-table): Table view of all Beszel-monitored systems with sortable columns and status indicators. [Beszel Alerts](/docs/widgets/beszel-alerts): View Beszel alert configurations and history with triggered/ok status indicators. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **Username**: Account username for authentication. **Password**: Account password for authentication. Steps to retrieve the credentials: 1. Open your Beszel hub instance (default port 8090) 2. Use the same credentials you use to log in to the Beszel web UI Beszel uses PocketBase under the hood. The default admin credentials are set during the initial Beszel setup. # Dash. (/docs/integrations/dash-dot) Dash. is a system performance and resource monitoring tool Categories: System monitoring ### Widgets & Capabilities [#widgets--capabilities] [System Health Monitoring](/docs/widgets/health-monitoring): Displays information showing the health and status of your system(s). [System Resources](/docs/widgets/system-resources): Displays CPU, RAM and network of your host ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). # Deluge (/docs/integrations/deluge) Deluge is a lightweight, Free Software, cross-platform BitTorrent client. Categories: Torrent client ### Widgets & Capabilities [#widgets--capabilities] [Download Client](/docs/widgets/downloads): Allows you to view and manage your Downloads from both Torrent and Usenet clients. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **Password**: Account password for authentication. # Docker labels (/docs/integrations/docker-labels) During onboarding, Homarr scans running containers on every reachable [Docker-compatible host](/docs/integrations/docker). Labels let you provide exact app metadata instead of relying on image-name matching. You can review and deselect every result before Homarr creates anything. A container with valid Homarr labels takes priority over image-based discovery. Containers without valid labels can still be suggested from their image and published ports. ## Homarr labels [#homarr-labels] `homarr.name` and `homarr.href` are required for label discovery. All other labels are optional. | Label | Purpose | | -------------------- | -------------------------------------------------------------------------- | | `homarr.name` | App or integration display name | | `homarr.href` | Address opened by the app and used as the suggested integration address | | `homarr.group` | Container section that receives the selected app and compatible widget | | `homarr.icon` | App icon URL | | `homarr.description` | App description | | `homarr.ping` | Address used for app status checks | | `homarr.id` | Stable source identifier; defaults to the Docker container ID | | `homarr.board` | Intended board name; see [Board targeting](#board-targeting) | | `homarr.integration` | Homarr integration kind, for example `sonarr` | | `homarr.widget` | Homarr widget kind to add when it supports the selected integration | | `homarr.hide` | Excludes the container when this label is present, regardless of its value | Unknown integration and widget kinds are ignored. Do not put API keys, passwords, or other secrets in labels. Enter credentials in onboarding, where Homarr stores them using its normal encrypted integration-secret flow. ## Compose example [#compose-example] ```yaml services: sonarr: image: lscr.io/linuxserver/sonarr:latest labels: homarr.name: "Sonarr" homarr.href: "http://server.local:8989" homarr.group: "Media" homarr.icon: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/sonarr.svg" homarr.description: "TV library" homarr.ping: "http://server.local:8989" homarr.integration: "sonarr" homarr.widget: "calendar" ``` Use an address that is reachable where it is needed. A Docker service name can work for server-side integration requests, while an app link opened in a browser usually needs a LAN hostname, IP address, or reverse-proxy address. Onboarding accepts these self-hosted address formats directly and only requires the field to be non-empty. ## Homepage label fallback [#homepage-label-fallback] When `homarr.name` is absent, onboarding also understands these Homepage labels: * `homepage.name` * `homepage.href` * `homepage.group` * `homepage.icon` * `homepage.description` `homepage.name` and `homepage.href` are required for the fallback. Homarr does not combine partial Homarr metadata with Homepage metadata: once `homarr.name` is present, use `homarr.*` labels for the remaining fields too. ## What onboarding creates [#what-onboarding-creates] In **Connect**, label-discovered apps and integrations appear before image-based suggestions. You can import multiple services in one pass and edit every suggested address. For image-matched apps, Homarr uses the detected service type when building host, subdomain, or reverse-proxy path suggestions. When setup completes, Homarr rechecks the selected container sources and then: * creates an app with its name, address, icon, description, and ping address; * creates the requested integration and links its app after you provide required credentials; * places grouped apps in a board container named by `homarr.group`; * places ungrouped apps in the main board area; * adds `homarr.widget` only when the widget kind is valid and compatible with the selected integration; * keeps image-based discovery available for unlabeled containers. If a selected container disappears, targets another board, or requests an incompatible widget, setup finishes with a warning instead of creating an invalid board item. ## Board targeting [#board-targeting] On a fresh installation with one seeded `dashboard` board, one unique selected `homarr.board` value can name that first board. Otherwise, the label must match the board selected in onboarding. Services labeled for another board are skipped and reported in the completion warning. Onboarding configures one board at a time. Run normal board management after setup if you want to distribute services across several boards. # Emby (/docs/integrations/emby) Emby is a media server platform that allows you to organize, manage, and stream your personal media collection. Categories: Media server ### Widgets & Capabilities [#widgets--capabilities] [Media server streams](/docs/widgets/media-server): Show the current streams on your media servers [Media releases](/docs/widgets/media-releases): Display newly added medias or upcoming releases from different integrations ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. # FileFlows (/docs/integrations/fileflows) FileFlows is a file processing and media transcoding automation platform. Categories: Media Transcoding ### Widgets & Capabilities [#widgets--capabilities] The [Stats widget](/docs/widgets/stats) reads FileFlows' unauthenticated `GET /api/status` endpoint and displays queued, processing, and processed file counts together with FileFlows' formatted processing time. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). # Coolify (/docs/integrations/coolify) Self-hosted PaaS and deployment platform Categories: System monitoring, Deployment ### Widgets & Capabilities [#widgets--capabilities] [Coolify](/docs/widgets/coolify): Overview of your Coolify instance with servers, applications, and services. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). URL configuration Use the root URL of your Coolify instance, for example `https://coolify.example.com`. Homarr calls Coolify endpoints under `/api` and `/api/v1` automatically. ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Open your Coolify instance and make sure you are in the team you want Homarr to monitor. 2. Enable API access under **Settings > Advanced** if it is disabled. 3. Go to **Security > API Tokens**. 4. Enter a name, e.g. "Homarr". 5. Select the `read` permission. The Coolify widget only reads version, server, project, application, and service data. 6. Click "Create". 7. Copy the generated token immediately. Coolify only shows it once. 8. Paste the token into the API Key field in Homarr. # Frigate (/docs/integrations/frigate) Open source NVR with real-time object detection. Categories: Media ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The Frigate statistics use `/api/stats` and report camera count, service uptime, and version. Camera and object detection data requires a configured Frigate camera. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). Use Frigate's internal HTTP API (port **5000**), reachable from Homarr. This endpoint does not require credentials; the authenticated web interface on port 8971 is not supported by this integration. Keep the internal API on a trusted network. # Glances (/docs/integrations/glances) Glances is a cross-platform system monitoring tool. Categories: System Monitoring ### Widgets & Capabilities [#widgets--capabilities] [System Resources](/docs/widgets/system-resources): Displays CPU, RAM and network of your host [System Health Monitoring](/docs/widgets/health-monitoring): Displays information showing the health and status of your system(s). ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] No credentials required. # Gatus (/docs/integrations/gatus) An open source service health dashboard and monitoring tool. Categories: Monitoring ### Widgets & Capabilities [#widgets--capabilities] The [Stats widget](/docs/widgets/stats) reads Gatus' endpoint status API and displays the number of endpoints currently up, down, unknown, and the total number of endpoints. It uses each endpoint's latest result; endpoints without a result are counted as unknown. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). # Gluetun (/docs/integrations/gluetun) VPN control server integration for Homarr's VPN widget. Categories: VPN, Network [Gluetun](https://github.com/qdm12/gluetun) exposes a control server that Homarr can query to report the VPN tunnel status, DNS status, public IP address, and active provider details in the VPN widget. ### Widgets & Capabilities [#widgets--capabilities] [VPN](/docs/widgets/vpn): Monitor the connection status, public IP, and provider details of your VPN integrations. ### Setting up the Gluetun control server [#setting-up-the-gluetun-control-server] Refer to the [Gluetun control server documentation](https://github.com/qdm12/gluetun-wiki/blob/main/setup/advanced/control-server.md#authentication) to enable and configure authentication. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] Gluetun's control server can be left unprotected or secured with either an API key or HTTP Basic authentication. Choose the option that matches how your Gluetun instance integration is set up. No credentials required. **Username**: Account username for authentication. **Password**: Account password for authentication. **API Key**: API Key from the service for authentication. # Gotify (/docs/integrations/gotify) Gotify is a simple, self-hosted server for sending and receiving messages in real time. Categories: Notifications, Messaging ### Widgets & Capabilities [#widgets--capabilities] [Notifications](/docs/widgets/notifications): Display notification history from an integration ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **Username**: Account username for authentication. **Password**: Account password for authentication. # Docker (/docs/integrations/docker) Docker is a platform where you can run your applications in containers, allowing for easy deployment and management of applications. Categories: Containers ### Widgets and capabilities [#widgets-and-capabilities] [Docker stats](/docs/widgets/docker-containers): Stats of your containers Requires administrator access Docker endpoints are configured with environment variables rather than under **Management → Integrations**. ## Local socket [#local-socket] Mount the Docker socket into the Homarr container: ```yaml services: homarr: image: ghcr.io/homarr-labs/homarr:latest volumes: - /var/run/docker.sock:/var/run/docker.sock - ./homarr/appdata:/appdata ``` `/var/run/docker.sock` is the default. For other in-container paths, set a comma-separated list: ```yaml environment: DOCKER_SOCKET_PATHS: /var/run/docker.sock,/var/run/podman.sock ``` ## Podman [#podman] Homarr uses Podman's Docker-compatible API. Start the Podman socket, mount it, and include its in-container path in `DOCKER_SOCKET_PATHS`. For rootless Podman: ```sh systemctl --user enable --now podman.socket podman info --format '{{.Host.RemoteSocket.Path}}' ``` Run Homarr as the user that owns the socket. On SELinux systems, Podman may require `security_opt: [label=disable]` for the Homarr container. Rootful Podman normally exposes `/run/podman/podman.sock`. ## Remote endpoints [#remote-endpoints] For Docker socket proxies, list aligned hostnames and ports: ```yaml environment: DOCKER_HOSTNAMES: docker-proxy-home,docker-proxy-lab DOCKER_PORTS: 2375,2375 ``` Plaintext Docker API Unauthenticated Docker TCP provides control of the Docker host. Keep a socket proxy on a private network or use TLS. Use `DOCKER_ENDPOINTS` for named endpoints, TLS, or restricted capabilities: ```yaml environment: DOCKER_ENDPOINTS: >- [ { "id": "local", "name": "Local Docker", "kind": "docker", "transport": { "type": "socket", "path": "/var/run/docker.sock" }, "capabilities": ["inventory", "logs", "lifecycle", "remove"] }, { "id": "production", "name": "Production inventory", "kind": "docker", "transport": { "type": "tls", "host": "docker.example.com", "port": 2376, "caPath": "/run/secrets/docker-ca.pem" }, "capabilities": ["inventory", "logs"] } ] ``` Each endpoint requires a stable `id`, display `name`, `kind` (`docker` or `podman`), transport, and the `inventory` capability. Optional capabilities are `logs`, `lifecycle`, and `remove`. | Transport | Required values | | --------- | ----------------------------------------------------------------------------------- | | `socket` | Absolute in-container `path` | | `tls` | `host`, `port`, absolute `caPath`; optional `certPath` and `keyPath` for mutual TLS | | `tcp` | `host`, `port`, and `allowInsecure: true` | `DOCKER_ENDPOINTS` takes precedence over the socket, hostname, and port lists. ## Use in Homarr [#use-in-homarr] The Docker management page lists containers from every configured endpoint and can show logs, resource use, and permitted lifecycle actions. The Docker widget can include all endpoints or a selected subset. Assisted setup compares discovered containers with existing apps and integrations. Discovery is read-only; creating or updating a Homarr resource still requires confirmation. If one endpoint is unavailable, containers from healthy endpoints remain visible. The `homarr.hide` label excludes a container. Other `homarr.*` labels can provide apps, integrations, groups, and widgets during onboarding; see [Docker label discovery](/docs/integrations/docker-labels). ## Security [#security] A Docker or Podman socket grants extensive host control. Prefer a least-privilege socket proxy when lifecycle access is not required. Homarr needs `CONTAINERS=1` for inventory and `POST=1` for standard lifecycle actions with common proxies. LSIO's proxy can instead expose `ALLOW_START=1`, `ALLOW_STOP=1`, and `ALLOW_RESTARTS=1` while keeping `POST=0`; removal is then unavailable. Add Homarr to the proxy's Docker network and configure its service name and port with `DOCKER_HOSTNAMES` and `DOCKER_PORTS`. # Healthchecks (/docs/integrations/healthchecks) Healthchecks is a simple monitoring service for scheduled jobs and periodic tasks. Categories: Monitoring ### Widgets & Capabilities [#widgets--capabilities] The [Stats widget](/docs/widgets/stats) reads Healthchecks' Management API v3 and displays aggregate counts for checks in the `up`, `down`, `grace`, and `new` states. It does not request individual check endpoints. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. The read-only key is sufficient: Homarr only uses GET /api/v3/checks/. Steps to retrieve the credentials: 1. Open the Healthchecks project settings. 2. Create a project-specific read-only API key. 3. Copy the key into Homarr's API Key field. # Home Assistant (/docs/integrations/home-assistant) Home Assistant is an open-source home automation platform that focuses on privacy and local control, allowing you to automate and control your smart home devices. Categories: Smart Home, Automation ### Widgets & Capabilities [#widgets--capabilities] [Entity State](/docs/widgets/smart-home-entity-state): Display the state of an entity and toggle it optionally [Execute Automation](/docs/widgets/smart-home-execute-automation): Trigger an automation with one click Entity toggles and automation triggers send JSON requests to Home Assistant. A rejected action is shown as a failure. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Click on your profile in the bottom left corner of Home Assistant. 2. Switch to the Security tab. 3. Scroll down to the Long-lived access tokens section. 4. Click on the Create Token button. 5. Enter a name for the token (e.g., 'Homarr Integration') and click Create. 6. Copy the generated token and paste it into the Homarr integration settings. The [Statistics widget](/docs/widgets/stats) can display total entities, unavailable entities, lights currently on, and people currently home, retrieved from `/api/states`. Saved snapshots refresh on demand; use the dedicated controls for live interaction. # Homebox (/docs/integrations/homebox) A self-hosted inventory and household asset management application. Categories: Inventory management ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The [Stats widget](/docs/widgets/stats) reads Homebox's `/api/v1/groups/statistics` endpoint and displays items, locations, labels, items with a warranty, total value, and users. The `/api/v1/groups` response supplies the currency shown with the total value. ### Adding the integration [#adding-the-integration] The default Homebox port is `7745`. Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] Homebox requires the username (email address) and password of a Homebox account. Homarr authenticates for each stats fetch and does not retain the session token between fetches. **Username**: Account username for authentication. **Password**: Account password for authentication. Steps to retrieve the credentials: 1. Use the email address of a Homebox account as the username. 2. Enter that account's password in the Password field when creating the integration in Homarr. # iCal (/docs/integrations/ical) iCal is a standard for calendar data exchange, allowing users to share and manage calendar events across different platforms. Categories: Calendar ### Widgets & Capabilities [#widgets--capabilities] [Calendar](/docs/widgets/calendar): Display events from your integrations in a calendar view within a certain relative time period ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **Url**: The url of the service The integration accepts any public iCal URL, including calendars published by Google Calendar, Apple Calendar, and Outlook. # Immich (/docs/integrations/immich) Self-hosted photo and video management solution Categories: Photo server ### Widgets and capabilities [#widgets-and-capabilities] [Immich Album](/docs/widgets/immich-album-carousel): Shows a slideshow of pictures from an Immich album or your full library [Immich Server Stats](/docs/widgets/immich-server-stats): Information about your Immich instance ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] Create an API key under **Immich user settings → API Keys** with these permissions: `album.statistics`, `album.read`, `album.create`, `user.read`, `user.update`, `asset.read`, `asset.view`, `asset.download`, `asset.statistics`, `server.statistics`, and `server.about`. **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Create the API key in Immich and copy its value into the Homarr integration. # Jackett (/docs/integrations/jackett) Jackett exposes configured indexers through Torznab. Categories: Indexer ### Widgets & Capabilities [#widgets--capabilities] [Indexer manager status](/docs/widgets/indexer-manager): View the status of your indexers. [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Copy the API key from Jackett's dashboard. Jackett's API-key interface exposes configured indexers but does not provide their health history. The indexer widget displays “Health unavailable” for these entries. **Test all** performs an upstream Torznab search for each indexer and reports failures; it does not download results or change indexer configuration. Some indexers require a search query and may reject this generic test. Statistics exposes the configured-indexer count. An error count is not available from this interface. # Jellyfin (/docs/integrations/jellyfin) Jellyfin is a free and open-source media server software that allows you to organize, manage, and share your media files. Categories: Media server ### Widgets & Capabilities [#widgets--capabilities] [Media server streams](/docs/widgets/media-server): Show the current streams on your media servers [Media releases](/docs/widgets/media-releases): Display newly added medias or upcoming releases from different integrations ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. **Username**: Account username for authentication. **Password**: Account password for authentication. # Jellyseerr (/docs/integrations/jellyseerr) Jellyseerr is a self-hosted media request management system that integrates with Jellyfin and other media servers. Categories: Media requests ### Widgets & Capabilities [#widgets--capabilities] [Media Request List](/docs/widgets/media-request-list): See a list of all media requests from your integration [Media Requests Stats](/docs/widgets/media-request-stats): Statistics about your media requests [Media Search](/docs/management/search-engines/#media-request-search): Search for movies and TV shows directly from Spotlight and request them. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. # Jellystat (/docs/integrations/jellystat) A self-hosted statistics dashboard for Jellyfin. Categories: Media management ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The [Stats widget](/docs/widgets/stats) reads Jellystat's `stats/getViewsByLibraryType` endpoint for the last 30 days and displays audio, movie, series, and other play counts. These are playback views, not library inventory totals. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Open Jellystat and go to Settings > API Key. 2. Create or copy an API key, then paste it into Homarr's API Key field. # Karakeep (/docs/integrations/karakeep) A self-hostable bookmark manager for saving, organizing, and searching your links, notes, and media. Categories: Bookmark manager ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Open Karakeep and go to Settings > API Keys. 2. Create an API key with permission to read your bookmarks and copy it. 3. Paste the key into the API Key field when creating the integration in Homarr. # Komga (/docs/integrations/komga) A self-hosted media server for comics, manga, magazines, and ebooks. Categories: Media management ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The [Stats widget](/docs/widgets/stats) counts available libraries, series, and books through Komga's v1 REST API. Unavailable libraries are excluded. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Open Komga's Settings > API keys page and create a key with access to the libraries. 2. Paste the key into Homarr's API Key field. # Lidarr (/docs/integrations/lidarr) Lidarr is a music management tool that automates the process of downloading, sorting, and renaming music. Categories: Media manager, Servarr ### Widgets & Capabilities [#widgets--capabilities] [Calendar](/docs/widgets/calendar): Display events from your integrations in a calendar view within a certain relative time period ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. # Linkwarden (/docs/integrations/linkwarden) Self-hosted bookmark manager for organizing and archiving links. Categories: Bookmarks ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The Linkwarden stats widget is documented at [/docs/widgets/stats](/docs/widgets/stats). ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Open Linkwarden and go to your account settings. 2. Create an API token or access token. 3. Copy the token into Homarr's API Key field. # llama.cpp (/docs/integrations/llama-cpp) Connect to a local llama.cpp llama-server to show model, throughput and request status on your dashboard. Categories: System Monitoring The llama.cpp integration lets Homarr connect to a [llama-server](https://github.com/ggml-org/llama.cpp) instance so you can see the health of your local LLM, which model is loaded, and how fast it is generating — all from your dashboard. ### Widgets & Capabilities [#widgets--capabilities] [llama.cpp](/docs/widgets/llama-cpp): Shows the health, loaded model and generation speed of a local llama.cpp llama-server. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). URL configuration Use the root URL of your `llama-server`, for example `http://192.168.1.50:8080`. Homarr calls the `/health`, `/v1/models`, `/metrics` and `/slots` endpoints under that URL automatically. Metrics Generation speed and token counters are read from the Prometheus endpoint at `/metrics`. Start `llama-server` with the `--metrics` flag so these values are available: ```shell llama-server --model /path/to/model.gguf --metrics ``` Without `--metrics` the widget still shows health, model information, and active-request speed from `/slots`; metrics-backed counters and aggregate speed stay empty. Context and per-request speed Context (KV cache) usage and the in-flight request data are read from the `/slots` endpoint, which is available on every recent llama-server build and requires no extra flags. The per-request generation speed shown while a request is running is derived by tracking the request's decoded token count across polls, so it reflects the average speed of the request that is currently being generated. ### Secrets [#secrets] llama-server does not require authentication by default. The integration only needs the URL of your server. No credentials required. # Maintainerr (/docs/integrations/maintainerr) A media library maintenance tool for Plex, Jellyfin, and Emby. Categories: Media management ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The [Stats widget](/docs/widgets/stats) reads Maintainerr's `/api/storage-metrics` endpoint and shows handled items, episodes, movies, and the currently reclaimable collection storage. Maintainerr does not authenticate API requests. Protect the service with your network access controls before exposing it beyond a trusted network. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] No credentials required. # Mealie (/docs/integrations/mealie) A self-hosted recipe manager for organizing and sharing recipes. Categories: Recipe management ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The [Stats widget](/docs/widgets/stats) displays recipes and users in the API key's household, plus the group's shared categories and tags. The Stats widget uses Mealie's v2 endpoint, /api/households/statistics. Mealie v1 instances that only expose /api/groups/statistics are not supported. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Open Mealie and go to your profile's API Tokens page. 2. Create a long-lived API token for a user with access to the household whose statistics you want to display. 3. Copy the token and paste it into the API Key field when creating the integration in Homarr. # Navidrome (/docs/integrations/navidrome) Navidrome is a self-hosted music server and streamer compatible with the Subsonic API. Categories: Media, Media server Navidrome provides music library statistics including artist, album, and song counts, as well as now playing audio streams via the Subsonic API. ### Widgets & Capabilities [#widgets--capabilities] [Audio Stats](/docs/widgets/audio-stats): Displays library statistics from Navidrome or Audiobookshelf, adapting its display based on the linked integration. [Media server streams](/docs/widgets/media-server): Show the current streams on your media servers ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **Username**: Account username for authentication. **Password**: Account password for authentication. Steps to retrieve the credentials: 1. Use the same credentials you use to log in to Navidrome 2. The user must have access to the Subsonic API (enabled by default) The [Statistics widget](/docs/widgets/stats) can also combine selected statistics from this integration with other sources. # Kubernetes (/docs/integrations/kubernetes) Kubernetes is a powerful container orchestration platform that automates the deployment, scaling, and management of containerized applications. Categories: Containers Homarr provides a read-only view of pods, services, ingresses, nodes, ConfigMaps, Secrets, namespaces, and volumes. Metrics Server is optional; without it, inventory and reserved capacity remain available but live CPU and memory do not. ## In-cluster access [#in-cluster-access] Enable RBAC in the Homarr Helm values: ```yaml rbac: enabled: true ``` The chart creates the service account and read-only Role/ClusterRole bindings used by Homarr. Kubernetes 1.24 or newer is required. ## Kubeconfig contexts [#kubeconfig-contexts] When Homarr runs outside the cluster, mount a kubeconfig read-only and set `KUBECONFIG` to its in-container path: ```yaml services: homarr: volumes: - ./kubeconfig:/app/config/kubeconfig:ro environment: KUBECONFIG: /app/config/kubeconfig ``` The management page exposes every configured context. An unavailable context does not hide healthy contexts; a context without Metrics Server is marked **Metrics unavailable**. Kubernetes resources are not converted into Homarr apps or integrations during Docker discovery. # NetAlertX (/docs/integrations/netalertx) Network presence and device monitoring. Categories: Monitoring ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The statistics provider calls NetAlertX v2's `/devices/totals` endpoint and reports total, connected, new, and down-alert counts. Active network scanning is controlled by NetAlertX and is not enabled by Homarr. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Create or copy the NetAlertX API token and enter it as the API Key. Use the backend API address (port **20212** by default), not the web interface port. # Nextcloud (/docs/integrations/nextcloud) Nextcloud is a self-hosted productivity platform that provides file storage, collaboration tools, and more. Categories: Calendar, Notifications ### Widgets & Capabilities [#widgets--capabilities] [Calendar](/docs/widgets/calendar): Display events from your integrations in a calendar view within a certain relative time period [Notifications](/docs/widgets/notifications): Display notification history from an integration ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] Users who use 2FA will have to use Nextcloud's App Password tool to grant Homarr access, as 2FA breaks the traditional process. For more information, see [Nextcloud's Documentation](https://docs.nextcloud.com/server/stable/admin_manual/configuration_user/authentication.html#app-passwords) **Username**: Account username for authentication. **Password**: Account password for authentication. # Netdata (/docs/integrations/netdata) Real-time performance and health monitoring for systems and applications. Categories: Monitoring ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The [Stats widget](/docs/widgets/stats) reads Netdata's `/api/v1/info` endpoint and displays the number of active warnings and critical alarms. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). Point the integration at the Netdata Agent HTTP API, which listens on port `19999` by default. Netdata's `/api/v1/info` endpoint does not require authentication with the default Agent configuration. If bearer protection or network ACLs are enabled, allow Homarr to access this endpoint; the integration does not currently send an authentication token. # Ntfy (/docs/integrations/ntfy) Ntfy is a simple, open-source notification service that allows you to send and receive notifications across devices. Categories: Notifications, Messaging ### Widgets & Capabilities [#widgets--capabilities] [Notifications](/docs/widgets/notifications): Display notification history from an integration ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **Topic**: The topic to from which notifications should be retrieved. **Topic**: The topic to from which notifications should be retrieved. **API Key**: API Key from the service for authentication. # Miniflux (/docs/integrations/miniflux) Miniflux is a minimalist and opinionated feed reader. Categories: Feed reader ### Widgets & Capabilities [#widgets--capabilities] The [Stats widget](/docs/widgets/stats) displays the total read and unread entry counts from Miniflux. Create an API key in Miniflux and add it as the integration's `apiKey`; the key must belong to a user who can access the feeds whose counters should be shown. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. # NZBGet (/docs/integrations/nzbget) NZBGet is a lightweight and efficient Usenet downloader. Categories: Usenet client ### Widgets & Capabilities [#widgets--capabilities] [Download Client](/docs/widgets/downloads): Allows you to view and manage your Downloads from both Torrent and Usenet clients. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **Username**: Account username for authentication. **Password**: Account password for authentication. # Open Media Vault (/docs/integrations/open-media-vault) Open Media Vault is a free network-attached storage server based on the Debian operating system. Categories: System monitoring ### Widgets & Capabilities [#widgets--capabilities] [System Health Monitoring](/docs/widgets/health-monitoring): Displays information showing the health and status of your system(s). To use this widget, you must have the OpenMediaVault plugin openmediavault-cputemp installed. [System Resources](/docs/widgets/system-resources): Displays CPU, RAM and network of your host Disk temperatures are matched to filesystem partitions, including device names without the `/dev/` prefix. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **Username**: Account username for authentication. **Password**: Account password for authentication. The user used here must have administrative permissions or Homarr won't be able to read the system performance and resource data. # OPNsense (/docs/integrations/opnsense) OPNsense is an open-source, easy-to-use, and easy-to-build firewall and routing platform Categories: Firewall ### Widgets and capabilities [#widgets-and-capabilities] [Firewall Monitoring](/docs/widgets/firewall): Displays a summary of firewalls. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] Use a dedicated API-only user with **Lobby: Dashboard** and **Reporting: Traffic** privileges. **API key and secret** **Api Key (Key)**: The Key part of the API Key for authentication. **Api Key (Secret)**: The Secret part of the API Key for authentication. Steps to retrieve the credentials: 1. Under System → Access → Users, create a user with Scrambled Password enabled. 2. Grant Lobby: Dashboard and Reporting: Traffic privileges, then save the user. 3. Use the ticket action for that user and confirm the API key download. 4. Copy the downloaded key and secret into Homarr. # Paperless-ngx (/docs/integrations/paperless-ngx) Paperless-ngx is a document management system that transforms your physical documents into a searchable online archive. Categories: Documents Paperless-ngx provides document statistics including total documents, inbox count, correspondents, tags, and document types. ### Widgets & Capabilities [#widgets--capabilities] [Paperless-ngx](/docs/widgets/paperless-ngx): Displays document management statistics including inbox ratio, document counts, and metadata. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Open your Paperless-ngx instance 2. Navigate to Settings → Django Admin → Tokens 3. Create a new token for your user 4. Copy the token value The [Statistics widget](/docs/widgets/stats) can also combine selected statistics from this integration with other sources. # Overseerr (/docs/integrations/overseerr) Overseerr is a self-hosted media request management system that integrates with Plex. Categories: Media requests ### Widgets & Capabilities [#widgets--capabilities] [Media Request List](/docs/widgets/media-request-list): See a list of all media requests from your integration [Media Requests Stats](/docs/widgets/media-request-stats): Statistics about your media requests [Media Search](/docs/management/search-engines/#media-request-search): Search for movies and TV shows directly from Spotlight and request them. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. # PeaNUT (/docs/integrations/peanut) A tiny dashboard for Network UPS Tools (NUT) servers. Categories: UPS, Hardware [PeaNUT](https://github.com/Brandawg93/PeaNUT) exposes the data of your [Network UPS Tools](https://networkupstools.org/) servers over a REST API, which Homarr reads to display the status of your UPS devices. ### Widgets & Capabilities [#widgets--capabilities] [UPS](/docs/widgets/ups): Monitor the status of your UPS devices through a NUT server. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] PeaNUT secures its API with HTTP Basic authentication when the `WEB_USERNAME` and `WEB_PASSWORD` environment variables are set on the PeaNUT instance. Provide the same credentials here. If the instance runs with `AUTH_DISABLED=true`, no secrets are required. **Username**: Account username for authentication. **Password**: Account password for authentication. Steps to retrieve the credentials: 1. Set WEB_USERNAME and WEB_PASSWORD on your PeaNUT instance. 2. Create an integration in Homarr with the PeaNUT URL and those credentials. No credentials required. Steps to retrieve the credentials: 1. If PeaNUT runs with AUTH_DISABLED=true, create the integration with no credentials. # PatchMon (/docs/integrations/patchmon) PatchMon is a patch management and monitoring solution for Linux hosts, tracking package updates and security patches across your infrastructure. Categories: Health Monitoring PatchMon provides host and package update statistics including total hosts, hosts needing updates, and security update counts. The PatchMon widget requires users to be **signed in to Homarr**; see the [PatchMon widget documentation](/docs/widgets/patchmon#authentication) for details on authentication and public boards. ### Widgets & Capabilities [#widgets--capabilities] [PatchMon](/docs/widgets/patchmon): Displays host patch statistics including total hosts, hosts needing updates, and security update counts. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: The API key from PatchMon's GetHomepage integration. **API Secret**: The API secret from PatchMon's GetHomepage integration. Steps to retrieve the credentials: 1. Open your PatchMon instance 2. Navigate to Settings and create a new GetHomepage API key 3. Copy the API key and secret from the success dialog 4. Paste them into Homarr — Basic authentication is handled automatically # Pi-hole (/docs/integrations/pi-hole) Pi-hole is a network-wide ad blocker that acts as a DNS sinkhole, blocking unwanted content and improving your browsing experience. Categories: DNS Hole Homarr supports both Pi-hole v5 and v6. It automatically detects the version and uses the correct API. ### Widgets & Capabilities [#widgets--capabilities] [DNS Hole Summary](/docs/widgets/dns-hole-summary): Displays the summary of your Pi-hole, AdGuard Home or Technitium DNS blocks and queries statistics [DNS Hole Controls](/docs/widgets/dns-hole-controls): Control the blocking feature of your Pi-hole, AdGuard Home or Technitium DNS from your dashboard ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Pi-hole v6 uses a password or application password instead of an API key. Prefer an application password. No credentials required. # Plant-it (/docs/integrations/plantit) A self-hosted gardening companion for tracking plants, species, photos, and care events. Categories: Plant management ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The Stats widget displays the number of plants, species, photos, and logged events in Plant-it. Homarr signs in with the configured Plant-it account before requesting these counters because current Plant-it releases expose stats through JWT authentication. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **Username**: Account username for authentication. **Password**: Account password for authentication. Steps to retrieve the credentials: 1. Create or use a Plant-it account with access to the REST API. 2. Enter the Plant-it username and password when creating the integration in Homarr. # Plex (/docs/integrations/plex) Plex is a media server platform that allows you to organize, manage, and stream your personal media collection. Categories: Media server ### Widgets & Capabilities [#widgets--capabilities] [Media server streams](/docs/widgets/media-server): Show the current streams on your media servers [Media releases](/docs/widgets/media-releases): Display newly added medias or upcoming releases from different integrations ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Follow the official [Plex documentation](https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/) to find your authentication token. # Prometheus (/docs/integrations/prometheus) An open-source systems monitoring and alerting toolkit. Categories: Monitoring ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The [Stats widget](/docs/widgets/stats) reads Prometheus' `/api/v1/targets` endpoint and displays active targets, split into up and down counts. Targets with another health value remain included in the total. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). Use the Prometheus server URL. If the server is protected with HTTP Basic authentication, configure both the integration username and password; Homarr sends them with the targets request. The provider uses this fixed endpoint and does not execute arbitrary PromQL queries. # Proxmox (/docs/integrations/proxmox) Proxmox is a powerful open-source virtualization platform that allows you to run virtual machines and containers. Categories: System monitoring ### Widgets and capabilities [#widgets-and-capabilities] [System Health Monitoring](/docs/widgets/health-monitoring): Displays information showing the health and status of your system(s). ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] Use a Proxmox VE (`pve`) user and API token with the `PVEAuditor` role at `/` and **Propagate** enabled. PAM authentication may not work with the API. **Username**: Account username for authentication. **Token ID**: Token ID used for authentication **Realm**: The realm used for authentication, most of the time this is pve **API Key**: API Key from the service for authentication. For `api@pve!homarr`, use username `api`, realm `pve`, and token ID `homarr`. Steps to retrieve the credentials: 1. Create a Proxmox VE user or group and grant PVEAuditor at / with Propagate enabled. 2. Create an API token for that user. Disable privilege separation to inherit the user permission, or grant the token the same PVEAuditor permission. 3. Copy the token secret when Proxmox displays it and enter the user, realm, token ID, and secret in Homarr. # Prowlarr (/docs/integrations/prowlarr) Prowlarr is an indexer manager for Usenet and BitTorrent, providing a unified interface to manage your indexers. Categories: Indexer ### Widgets & Capabilities [#widgets--capabilities] [Indexer manager status](/docs/widgets/indexer-manager): View the status of your indexers. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. # qBittorrent (/docs/integrations/q-bittorent) qBittorrent is a free and open-source BitTorrent client. Categories: Torrent client ### Widgets & Capabilities [#widgets--capabilities] [Download Client](/docs/widgets/downloads): Allows you to view and manage your Downloads from both Torrent and Usenet clients. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. **Username**: Account username for authentication. **Password**: Account password for authentication. # Readarr (/docs/integrations/readarr) Readarr is a book management tool that automates the process of downloading, sorting, and renaming books. Categories: Media manager, Servarr ### Widgets & Capabilities [#widgets--capabilities] [Calendar](/docs/widgets/calendar): Display events from your integrations in a calendar view within a certain relative time period ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. # Radarr (/docs/integrations/radarr) Radarr is a movie management tool that automates the process of downloading, sorting, and renaming movies. Categories: Media manager, Servarr ### Widgets & Capabilities [#widgets--capabilities] [Calendar](/docs/widgets/calendar): Display events from your integrations in a calendar view within a certain relative time period ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. # RomM (/docs/integrations/romm) A self-hosted ROM manager for organizing and playing your game library. Categories: Game management ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The [Stats widget](/docs/widgets/stats) reads RomM's `/api/stats` response and displays platform, ROM, save, state, screenshot, and total file size metrics. The integration does not need a separate API key or credential; the configured URL must point to a RomM instance whose stats endpoint is reachable by Homarr. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] No credentials required. # SABnzbd (/docs/integrations/sabnzbd) SABnzbd is an Open Source Binary Newsreader. Categories: Usenet client ### Widgets & Capabilities [#widgets--capabilities] [Download Client](/docs/widgets/downloads): Allows you to view and manage your Downloads from both Torrent and Usenet clients. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. # Scrutiny (/docs/integrations/scrutiny) Hard drive S.M.A.R.T. monitoring and reporting. Categories: Monitoring ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The Scrutiny statistics expose passed, failed, and unknown non-archived devices. Scrutiny must have access to SMART-capable disks for these values to represent real disk health. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). # Slskd (/docs/integrations/slskd) A modern client-server application for the Soulseek file sharing network. Categories: System Monitoring ### Widgets & Capabilities [#widgets--capabilities] [Download Client](/docs/widgets/downloads): Allows you to view and manage your Downloads from both Torrent and Usenet clients. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. # Seerr (/docs/integrations/seerr) Seerr is a self-hosted media request management system that integrates with various media servers. Categories: Media requests ### Widgets & Capabilities [#widgets--capabilities] [Media Request List](/docs/widgets/media-request-list): See a list of all media requests from your integration [Media Requests Stats](/docs/widgets/media-request-stats): Statistics about your media requests [Media Search](/docs/management/search-engines/#media-request-search): Search for movies and TV shows directly from Spotlight and request them. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. # Sonarr (/docs/integrations/sonarr) Sonarr is a TV series management tool that automates the process of downloading, sorting, and renaming episodes. Categories: Media manager, Servarr ### Widgets & Capabilities [#widgets--capabilities] [Calendar](/docs/widgets/calendar): Display events from your integrations in a calendar view within a certain relative time period ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. # Speedtest Tracker (/docs/integrations/speedtest-tracker) Speedtest Tracker is a self-hosted internet performance tracking application. Categories: Speedtest ### Widgets & Capabilities [#widgets--capabilities] [Speedtest Tracker](/docs/widgets/speedtest-tracker): Displays speed test results from your Speedtest Tracker instance. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. # Spoolman (/docs/integrations/spoolman) Spoolman tracks 3D printer filament spools, their contents, and usage. Categories: 3D printing ### Widgets & Capabilities [#widgets--capabilities] The [Stats widget](/docs/widgets/stats) displays the number of active spools and their total remaining filament weight. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). # Stash (/docs/integrations/stash) A self-hosted media organizer for your adult collection. Categories: Media management ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The [Stats widget](/docs/widgets/stats) reads Stash's GraphQL stats query and displays scene and image counts and sizes, scene duration, and gallery, performer, studio, and tag counts. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Open Stash and go to Settings > Security. 2. Create an API key and copy it. 3. Paste the key into the API Key field when creating the integration in Homarr. # Syncthing Relay Server (/docs/integrations/syncthing-relay) A Syncthing relay server for connecting clients that cannot connect directly. Categories: Networking ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The [Stats widget](/docs/widgets/stats) reads the relay server's `/status` endpoint and displays active sessions, connections, and bytes proxied. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). Point the integration at the Syncthing Relay Server status endpoint. `strelaysrv` exposes `/status` on port `22070` by default; the relay protocol itself uses port `22067`. # Synology DiskStation (/docs/integrations/synology) Monitor CPU, memory, storage volumes, and system health from Synology DSM. Categories: NAS, Hardware ### Widgets & Capabilities [#widgets--capabilities] [System Health Monitoring](/docs/widgets/health-monitoring): Displays information showing the health and status of your system(s). [System Resources](/docs/widgets/system-resources): Displays CPU, RAM and network of your host [System disks](/docs/widgets/system-disks): Disk usage of your system ### Supported metrics [#supported-metrics] | Widget section | DSM API source | May be unavailable | | ---------------------------- | ----------------------------------------------------- | ------------------------------------------------------- | | CPU ring / chart | `SYNO.Core.System.Utilization` | — | | Memory ring / chart | `SYNO.Core.System.Utilization` | — | | CPU temperature ring | `SYNO.Core.System` system info | Models without a temperature sensor | | Network charts | `SYNO.Core.System.Utilization` network totals | Some DSM builds or permission configurations | | Load average (info modal) | `SYNO.Core.System.Utilization` CPU load fields | — | | Storage volume usage | `SYNO.Core.System` storage info / Storage Manager API | — | | SMART status and temperature | Storage Manager and SMART APIs | Disk-to-volume mapping may be incomplete on some setups | | Reboot / update indicator | `SYNO.Core.System.Status` / upgrade APIs | Permission-dependent | | GPU | Not available | Typical DiskStation models | ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). Enter the HTTP or HTTPS URL of your Synology DSM web interface, for example [http://diskstation.local:5000](http://diskstation.local:5000){" "} or [https://diskstation.local:5001](https://diskstation.local:5001). If DSM uses a self-signed certificate, add it under{" "} Management > Tools > Certificates so Homarr can connect securely. ### Secrets [#secrets] **Username**: Account username for authentication. **Password**: Account password for authentication. Homarr reads system, storage, and utilization data from APIs that require membership in the default Administrators group. Accounts with 2-step verification enabled cannot authenticate with this integration. Use a dedicated service account without 2FA. If login fails during testing, temporarily disable automatic blocking for invalid logins under Control Panel > Security > Protection, then re-enable it after Homarr connects successfully. Steps to retrieve the credentials: 1. Create a dedicated DSM user with a strong password for Homarr. 2. Add the user to the default Administrators group so Homarr can read `SYNO.Core.System` metrics. 3. Under User Groups and Permissions, deny access to shared folders and most applications. 4. Allow login to DSM only, optionally restricted by source IP address. 5. Log in once with the service account in DSM to accept terms and conditions. ### Storage volume selection [#storage-volume-selection] Health Monitoring and System Disks widgets can filter Synology storage volumes when **every** selected integration is a Synology DiskStation. Leave **Visible storage volumes** empty to show all volumes, or pick specific volumes from the list. When multiple Synology integrations are connected, volumes are labeled with the integration name. The volume filter is hidden when the widget also uses non-Synology integrations such as TrueNAS or Unraid. When no volume filter is configured, the first volume returned by DSM is not guaranteed to be `volume_1`. # Tandoor (/docs/integrations/tandoor) A recipe management application for organizing and sharing recipes. Categories: Recipe management ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The [Stats widget](/docs/widgets/stats) displays the number of users, recipes, and keywords visible to the API key's account. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Open Tandoor and go to Settings > API. 2. Generate a user API key with the read scope and copy it. 3. Paste the key into the API Key field when creating the integration in Homarr. User and recipe totals refer to the first accessible Tandoor space, matching Homepage. Keyword totals use the API token's accessible scope. # Tdarr (/docs/integrations/tdarr) Tdarr is a distributed media transcoding system that allows you to process and optimize your media files across multiple nodes. Categories: Media Transcoding ### Widgets & Capabilities [#widgets--capabilities] [Media transcoding](/docs/widgets/media-transcoding): Statistics, current queue and worker status of your media transcoding ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. No credentials required. # Technitium DNS (/docs/integrations/technitium-dns) Technitium DNS Server is a self-hosted DNS server with ad-blocking and network-wide filtering capabilities. Categories: DNS Hole Homarr supports Technitium DNS v11 and above. The correct API version is detected automatically - no manual configuration is required. ### Widgets & Capabilities [#widgets--capabilities] [DNS Hole Summary](/docs/widgets/dns-hole-summary): Displays the summary of your Pi-hole, AdGuard Home or Technitium DNS blocks and queries statistics [DNS Hole Controls](/docs/widgets/dns-hole-controls): Control the blocking feature of your Pi-hole, AdGuard Home or Technitium DNS from your dashboard ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] The **API token** option is recommended. API tokens are non-expiring and do not require storing your admin password in Homarr. Username and password authentication uses a session token that expires after inactivity, triggering a silent re-login on the next request. The **DNS Hole Controls** widget (enabling, disabling, and timed disabling of blocking) requires the token to have settings-level permissions. The **DNS Hole Summary** widget (stats only) works with any valid token. If Homarr cannot read the blocking status due to insufficient permissions, the status indicator will be hidden but statistics will still be shown. **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Open the Technitium DNS web console and sign in. 2. Click on your username in the top-right corner and select "Create API Token". 3. Give the token a name (e.g. "Homarr") and click "Create Token". 4. Copy the generated token and paste it into the API Key field in Homarr. **Username**: Account username for authentication. **Password**: Account password for authentication. Enter your Technitium DNS admin credentials. Homarr will exchange them for a session token and transparently re-authenticate when the session expires. # Tracearr (/docs/integrations/tracearr) Tracearr is a comprehensive media monitoring solution that tracks streams, user activity, and policy violations in your media server. Categories: Media Monitoring ### Widgets & Capabilities [#widgets--capabilities] [Tracearr](/docs/widgets/tracearr): Monitor media server streams, user activity, and policy violations. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. In Tracearr, go to **Settings → API** and generate or copy your API key. # Traefik (/docs/integrations/traefik) Cloud-native reverse proxy and load balancer Categories: Reverse proxy, Monitoring ### Widgets & Capabilities [#widgets--capabilities] [Traefik](/docs/widgets/traefik): Overview of Traefik routers, services, middlewares, and entry points. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). URL configuration Use the URL where Traefik exposes its dashboard/API, for example `http://traefik:8080` or `https://traefik.example.com`. Homarr calls Traefik endpoints under `/api` automatically. API requirement Traefik must have the API enabled. For local or internal setups this is commonly exposed through `api.insecure=true`; for production setups, expose the `api@internal` service through an authenticated router. ### Secrets [#secrets] No credentials required. Steps to retrieve the credentials: 1. Choose this option when the Traefik API is only reachable from a trusted internal network and does not require authentication. **Username**: Account username for authentication. **Password**: Account password for authentication. Steps to retrieve the credentials: 1. Use this option when your Traefik dashboard route is protected by Basic Auth. 2. Enter the same username and password required to open the Traefik dashboard. **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Use this option when your Traefik dashboard route accepts a bearer token. 2. Paste the token into the API Key field in Homarr. # Transmission (/docs/integrations/transmission) A Fast, Easy and Free Bittorrent Client. Categories: Torrent client ### Widgets & Capabilities [#widgets--capabilities] [Download Client](/docs/widgets/downloads): Allows you to view and manage your Downloads from both Torrent and Usenet clients. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **Username**: Account username for authentication. **Password**: Account password for authentication. # Trilium (/docs/integrations/trilium) A hierarchical note-taking application for building large personal knowledge bases. Categories: Note taking ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The Stats widget reads the Trilium metrics endpoint and displays the application version, active note count, and database size. It requires TriliumNext version 0.94.0 or newer. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Open TriliumNext and go to Options > ETAPI. 2. Create a new ETAPI token and copy it. 3. Paste the token into the API Key field when creating the integration in Homarr. # Tube Archivist (/docs/integrations/tubearchivist) A self-hosted YouTube media server for downloading and organizing videos. Categories: Media management ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The [Stats widget](/docs/widgets/stats) reads Tube Archivist's video, channel, playlist, and download statistics endpoints and displays archived content plus pending downloads. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Open Tube Archivist's Settings page and copy the generated API token. 2. Paste the token into Homarr's API Key field. # TrueNAS (/docs/integrations/truenas) Enterprise network-attached storage for your home, office, and cloud. Categories: NAS, Hardware ### Widgets & Capabilities [#widgets--capabilities] [System Health Monitoring](/docs/widgets/health-monitoring): Displays information showing the health and status of your system(s). [System Resources](/docs/widgets/system-resources): Displays CPU, RAM and network of your host Disk space uses each pool's root dataset to account for RAIDZ parity and dataset limits. If dataset space is unavailable, Homarr falls back to physical pool space, which reads higher on RAIDZ, and keeps reporting pool health. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). TrueNAS only serves its API over HTTPS, so enter the https\:// URL of your TrueNAS web interface. If it uses a self-signed certificate (the default), add it under{" "} Management > Tools > Certificates so Homarr can establish the connection. ### Secrets [#secrets] API key authentication is the recommended method. It works across current TrueNAS versions and does not depend on user group membership. **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. In the TrueNAS web interface, click your user avatar in the top-right corner and select "API Keys". 2. Click "Add", give the key a name such as "Homarr", and confirm. 3. Copy the generated key immediately - TrueNAS only shows it once - and paste it as the API Key when creating the integration in Homarr. **Username**: Account username for authentication. **Password**: Account password for authentication. The account must have administrative API access. The `auxiliary_administrator` group was removed in TrueNAS 25.10; on that version or newer, use API key authentication instead, or assign the user a full-admin role. Steps to retrieve the credentials: 1. In the TrueNAS web interface, go to "Credentials" > "Users" > "Add" and create a user with a secure password. 2. Grant the user administrative access so Homarr can read system, pool, and reporting data. 3. Save the user and create the integration in Homarr with these credentials. # Umami (/docs/integrations/umami) Privacy-focused, open-source web analytics Categories: Analytics ### Widgets & Capabilities [#widgets--capabilities] [Umami Analytics](/docs/widgets/umami): Display visitor stats from your Umami analytics instance ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). URL configuration * **Umami Cloud:** Use `https://api.umami.is/v1` * **Self-hosted:** Use `http://your-umami-host:3000/api` ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Log in to your Umami instance (or Umami Cloud at https://cloud.umami.is) 2. Open Settings → API Keys 3. Click "Create API key" 4. Enter a name, e.g. "Homarr", and save 5. Copy the generated API key into Homarr **Username**: Account username for authentication. **Password**: Account password for authentication. Steps to retrieve the credentials: 1. Use the username and password of your Umami account 2. Note: username/password auth is for self-hosted instances only - Umami Cloud requires an API key # Unifi Controller (/docs/integrations/unifi-controller) Unifi Controller is a network management platform for Unifi devices. Categories: Network controller This integration is using the [node-unifi](https://www.npmjs.com/package/node-unifi) library under the hood to connect to the Unifi Controller. Therefore it should support CloudKey Gen1, CloudKey Gen2, UnifiOS-based UDM-Pro controllers as well as self-hosted UniFi controllers. ### Widgets & Capabilities [#widgets--capabilities] [Network Controller Summary](/docs/widgets/network-controller-summary): Displays the summary of a Network Controller [Network Status](/docs/widgets/network-controller-status): Display connected devices on a network ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). Use the local HTTPS address of your controller: * UniFi OS consoles such as Dream Router, Dream Machine, Cloud Gateway, and CloudKey use `https://` (port 443). * Self-hosted UniFi Network Servers normally use `https://:8443`. * If you omit the port, Homarr tries port 443 first and then port 8443 when the first port cannot be reached. Use a local administrator account. Cloud-only accounts and accounts with multi-factor authentication are not supported by the underlying client. ### Secrets [#secrets] **Username**: Account username for authentication. **Password**: Account password for authentication. # Unmanic (/docs/integrations/unmanic) A simple tool for processing videos and audio files. Categories: Media Transcoding ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The [Stats widget](/docs/widgets/stats) reads Unmanic's worker status with `GET /unmanic/api/v2/workers/status` and pending task count with the read-only `POST /unmanic/api/v2/pending/tasks` endpoint. Unmanic does not authenticate these API requests. Protect the service with your network access controls before exposing it beyond a trusted network. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] No credentials required. # Unraid (/docs/integrations/unraid) Versatile operating system that lets you run applications, virtual machines, and storage devices on your server Categories: NAS, Hardware ### Widgets & Capabilities [#widgets--capabilities] [System Health Monitoring](/docs/widgets/health-monitoring): Displays information showing the health and status of your system(s). [System Resources](/docs/widgets/system-resources): Displays CPU, RAM and network of your host CPU usage is averaged across logical processors, including SMT threads. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Are you using Unraid pre-7.2? If yes, please first [follow the steps here to install the Unraid API](https://docs.unraid.net/API/#plugin-installation-pre-72-and-advanced-users). 2. Open the settings and open the management access ![Unraid management](/_next/static/media/unraid-management.0d-69jt005qm-.png) 3. Click on the "API Keys" tab at the top and click on the "create API key" button. Choose "Create new" ![Unraid management](/_next/static/media/unraid-create-api-key.3w0he94zwfigw.png) 4. Enter a suitable name for your API key (e.g. Homarr), select the "Viewer" preset and submit the modal. ![Unraid management](/_next/static/media/unraid-select-api-key-preset.0v67-xz64vwpb.png) 5. Last, copy the API key after your API key has been created ![Unraid management](/_next/static/media/copy-api-key.1kp-0ytc3r3bd.png) # Uptime Kuma (/docs/integrations/uptime-kuma) Uptime Kuma is a self-hosted monitoring tool that tracks the availability of your services and websites. Categories: Monitoring Uptime Kuma monitors the availability of your services and provides uptime statistics through its status page API. ### Widgets & Capabilities [#widgets--capabilities] [Uptime Kuma](/docs/widgets/uptime-kuma): Displays monitor uptime statistics, average uptime percentage, and service status counts. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] **Slug**: The slug or path identifier for the resource Steps to retrieve the credentials: 1. Navigate to your Uptime Kuma instance 2. Go to Status Pages and create or select a status page 3. The slug is the URL path of your status page (e.g. "default" for /status/default) If you don't specify a slug, Homarr will use `default` as the status page slug. # What's Up Docker (/docs/integrations/whats-up-docker) What's Up Docker (WUD) watches your Docker containers and reports which ones have newer image versions available. Categories: Health Monitoring The What's Up Docker integration lets Homarr connect to your [WUD](https://github.com/getwud/wud) instance so you can see how many of your watched containers have image updates available directly from your dashboard. ### Widgets & Capabilities [#widgets--capabilities] [What's Up Docker](/docs/widgets/whats-up-docker): Displays how many watched containers have image updates available. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). URL configuration Use the root URL of your WUD instance, for example `https://wud.example.com`. Homarr uses `/api/containers` under that URL for both connection testing and widget data. ### Secrets [#secrets] WUD 9 requires authentication. Enter your WUD username and password in Homarr; the initial admin credentials configured with `WUD_AUTH_ADMIN_USER` and `WUD_AUTH_ADMIN_PASSWORD` work with Basic authentication. Older WUD versions without authentication can leave both fields empty. Credentials are sent to the configured URL over HTTP or HTTPS. Use HTTPS outside a trusted internal network. No credentials required. **Username**: Account username for authentication. **Password**: Account password for authentication. Steps to retrieve the credentials: 1. Use your WUD account credentials; older versions can use a configured WUD_AUTH_BASIC_* user 2. Enter that username and password in Homarr — Basic authentication is handled automatically # xTeVe (/docs/integrations/xteve) A M3U proxy for IPTV services with EPG support. Categories: Media server ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The [Stats widget](/docs/widgets/stats) sends xTeVe's read-only `POST /api/` status command and displays all, active, and XEPG stream counts. The default xTeVe web port is `34400`. ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). ### Secrets [#secrets] No credentials required. If xTeVe authentication is enabled, provide the xTeVe username and password so Homarr can log in before requesting status. **Username**: Account username for authentication. **Password**: Account password for authentication. # Your Spotify (/docs/integrations/your-spotify) A self-hosted Spotify listening history tracker. Categories: Music ### Widgets & Capabilities [#widgets--capabilities] [Statistics](/docs/widgets/stats): Combine selected statistics from multiple integrations in cards, compact rows, or grouped tables. The [Stats widget](/docs/widgets/stats) reads Your Spotify's `songs_per`, `time_per`, and `different_artists_per` endpoints and displays songs listened, listening time, and distinct artists. Homarr requests the fixed all-time range used by the upstream widget (`start=2006-04-23T00:00:00.000Z` and `timeSplit=all`). ### Adding the integration [#adding-the-integration] Create the connection under **Management → Integrations**. See [Managing integrations](/docs/management/integrations). Point the integration at the Your Spotify API service, which listens on port `8080` by default. The API endpoints use the public token generated under `Settings > Account > Public token`; add that token as the integration's API key. ### Secrets [#secrets] **API Key**: API Key from the service for authentication. Steps to retrieve the credentials: 1. Open Your Spotify's Settings > Account > Public token and generate a token if needed. 2. Paste the public token into the API Key field when creating the integration in Homarr. # API (/docs/management/api) Homarr exposes OpenAPI and tRPC endpoints for automation. Open the generated specification under **Management → Tools → API** or use the [interactive API reference](/api-reference). Homarr's API documentation page ## Authentication [#authentication] Create an API key from the **Authentication** tab. Its value has the form `.` and is shown once. Send it in the `ApiKey` header: ```sh curl -H 'ApiKey: .' https://homarr.example.com/api/info ``` The same header authenticates tRPC requests under `/api/trpc`. Without a key, browser requests can use the Homarr session cookie. API keys do not expire automatically and act as the user that created them. Every request uses that user's group and resource permissions. ## Invitation dates [#invitation-dates] `POST /api/invites` and the tRPC `invite.createInvite` procedure accept `expirationDate` as an ISO 8601 timestamp with a timezone, for example `2026-12-01T18:00:00Z`. Homarr validates the timestamp and stores it as a date. tRPC callers should send the ISO string rather than a JavaScript `Date` object. ## Health probes [#health-probes] The liveness endpoint does not require authentication: ```sh curl https://homarr.example.com/api/health/live ``` It returns JSON with overall and per-component status and latency. HTTP `200` means every dependency is healthy; HTTP `500` identifies an unhealthy component without exposing its internal error. Health responses are not cached. ## Pagination [#pagination] General paginated endpoints accept at most 100 records per page, and shared search endpoints accept a limit of at most 100. Request subsequent pages instead of using a larger value. ## Permission behavior [#permission-behavior] Unauthorized operations return `FORBIDDEN`. List endpoints filter records on the server when resource-specific access applies. App catalog endpoints such as `app.all`, `app.getPaginated`, and `app.search` require **Modify all apps** because they include internal URLs. Use `app.selectable` for the reduced board-picker fields. Integration list and search endpoints return only integrations the key owner can access. Check each integration's `hasUseAccess` and `hasInteractAccess` fields before reading data or invoking actions. ## Board automation [#board-automation] The API can create, duplicate, rename, delete, and configure boards; manage board content; and set desktop or mobile home boards. Each board has exactly one Mobile and one Base layout. Mobile uses breakpoint `0`; all breakpoints are unique. Custom layouts can use any other breakpoint, and Homarr selects the highest breakpoint that fits the viewport. Preserve layout roles and use the canonical layouts returned by save operations, including generated IDs. Creating or changing an integration-backed widget requires use access to each newly selected integration. ## Docker targets [#docker-targets] Docker actions identify both the configured endpoint and the container: ```json { "targets": [{ "endpointId": "local", "id": "container-id" }] } ``` Read both values from `docker.getContainers` immediately before calling `docker.startAll`, `stopAll`, `restartAll`, or `removeAll`. The endpoint ID prevents collisions between Docker or Podman hosts. `docker.getContainers` accepts optional `endpointIds`. Omit it or pass an empty array for every configured endpoint. ## Partial upstream failures [#partial-upstream-failures] Queries that combine several integrations can return healthy data alongside failure metadata. The exact response shape depends on the endpoint; inspect the generated schema instead of assuming a common `error` field. When every selected integration fails, the query returns an error. ## Custom Widget resources [#custom-widget-resources] Authenticated administrators can retrieve the current Custom Widget authoring prompt, schema, component catalog, skill, and focused references under `/api/custom-widgets/`. Use [Custom Widget agent authoring](/docs/management/custom-widgets/agent-authoring) for the lifecycle and [MCP](/docs/management/mcp) when the client supports Model Context Protocol. ## Gotify notification deletion [#gotify-notification-deletion] The Notifications widget's `widget.notifications.deleteNotification` tRPC mutation accepts `integrationId` and `notificationId` (a positive decimal string). It requires a signed-in user with Interact access to a Gotify integration, deletes the message from Gotify, and invalidates its notification cache. It is not exposed through REST or MCP. ## Integration statistics [#integration-statistics] `widget.stats.catalog` lists the metric keys and units for one integration. `widget.stats.snapshot` reads its shared snapshot without making service requests. `widget.stats.refresh` refreshes it through the shared concurrency limit; `force: true` bypasses the one-hour freshness check. Each procedure requires `integrationId` and checks Query access, including for cached values. These procedures are also exposed through MCP under `stats`. They are not REST endpoints. Refresh returns the current snapshot, which may still be old if another process is refreshing that source. Inspect `updatedAt`, `stale`, `error`, and `retryAt`; a refresh failure retains successful values. See the [Statistics widget](../../widgets/stats) for cache behavior. # Apps (/docs/management/apps) An **app** is a saved shortcut used by the App and Bookmarks widgets. It contains a name, destination, icon, and optional status-check address. The Apps management page ## How an app is used [#how-an-app-is-used] ## Configuration [#configuration] Create and manage apps under **Management → Apps**. | Field | Purpose | | ----------- | ---------------------------------------------------------------------------------------- | | Name | Label shown on the board | | Icon URL | Direct image URL, icon-library result, or uploaded image | | Description | Optional tooltip | | URL | Destination opened from the board; custom URI schemes are supported except `javascript:` | | Ping URL | Optional HTTP(S) address used for status checks when it differs from the destination | An app can be linked to an [integration](../integrations). Integration widgets then use the app as their destination when they provide a link to the service. See [Icons](/docs/advanced/icons) for icon sources and uploads. ## Permissions [#permissions] * `app-create` creates apps. * `app-modify-all` lists and edits every app. * `app-full-all` also deletes and uses every app. * `app-use-all` allows using every app on boards without granting management access. Users with only `app-create` can open the page and create an app, but do not receive the existing app list. # Certificates (/docs/management/certificates) On this page you can manage your trusted certificates. For example if you use a self signed certificate for one of the integrations you want to connect, you can add it here. Below you can see a screenshot of the certificates page. The items show the subject, filename and when it expires. The color of the icon indicates how long it is valid. The Trusted certificates management page Trusted certificates page listing a certificate's subject, filename, and expiry | Color | Meaning | | --------- | --------------------------- | | 🟩 Green | Valid for more than 30 days | | 🟨 Yellow | Valid for less than 30 days | | 🟧 Orange | Valid for less than a week | | 🟥 Red | Valid for less than a day | ## Opening the certificates page [#opening-the-certificates-page] Navigate to `Management` > `Tools` > `Certificates`. ## Add a certificate [#add-a-certificate] To add a certificate click on the "Add certificate" button. The upload form expands directly on the certificates page. Add certificate button on the Trusted certificates page Then select the certificate file you want to add and click the "Add" button. You can cancel to collapse the form without leaving the page. ## Delete a certificate [#delete-a-certificate] To delete a certificate you can click on the trash icon in the certificate card. Certificate card with subject, filename, expiry date, and delete action The first click arms the action and the second click confirms the deletion in place; no confirmation dialog is opened. ## Managing it through file system [#managing-it-through-file-system] The certificates are stored in the `/appdata/trusted-certificates` directory which is mounted through `/appdata`. This means you can automate the update of the certificates by simply replacing or adding a new file in the directory. ## Obtaining certificates [#obtaining-certificates] Every integration has its own way of obtaining certificates. Generally it is recommended to search for the documentation of the integration you are using. Most of the time you can find the certificate in the file system of the integration. Below you can find instructions for some of the integrations. ### Pi-hole (v6) [#pi-hole-v6] Since version 6 of Pi-hole, the web interface can be accessed through HTTPS. The certificate can be found in the path `/etc/pihole/tls_ca.crt`. To add the certificate, this file needs to be copied and uploaded to Homarr. You can find more details regarding SSL / TLS for Pi-hole [here](https://docs.pi-hole.net/api/tls/). ### Proxmox [#proxmox] For the default Proxmox VE cluster certificates, trust the cluster CA from `/etc/pve/pve-root-ca.pem` on any node. See [Proxmox certificate management](https://pve.proxmox.com/wiki/Certificate_Management). # Boards (/docs/management/boards) A **board** is a dashboard page containing apps, widgets, and Containers. Its name is unique and forms the board URL. Boards can be public or restricted to users and groups. The Boards management page Create, duplicate, open, and delete boards under **Management → Boards**. Press `Shift+C` from a board to open the board switcher. ## Responsive layouts [#responsive-layouts] Mobile and Base are protected layouts. New boards use three Mobile columns; Base uses the column count selected at creation. Additional layouts use unique breakpoints. Homarr selects the layout with the highest breakpoint that fits the current viewport. Tiles use fixed `200 × 200` logical-pixel cells with a `24px` gap. Homarr scales the complete layout to the available width instead of changing each widget's proportions. **Reset from Base** regenerates a Mobile or custom layout from the current Base layout. ### Containers and rails [#containers-and-rails] A **Container** groups apps, widgets, and nested Containers. It can have a label, collapse control, app-opening action, border color, and CSS classes. Items can occupy the outermost rows and columns of a Container. The drop preview shows the position where the item will remain when released. Dragging an item onto another item of the same size swaps their positions. Displaced items snap directly to their previewed positions without a movement animation and stay there when you release the pointer. A **rail** reserves one to three columns at the left or right of a non-Mobile layout. Rails stay fixed while the page scrolls and store their contents separately for each layout. ## Edit a board [#edit-a-board] Enter edit mode from the board header to add, move, resize, configure, or remove content. Save the board to persist the layout. * Drag from an item's inactive content area; Containers use their grip. * Hold `Ctrl` on Windows/Linux or `Cmd` on macOS to select several items. * Use **Move / resize item** for another canvas, rail, Container, or exact coordinates. * Keyboard users can focus a tile, press Enter or Space, then move with arrow keys or resize with Shift + arrow keys. * Press Escape during a pointer or touch interaction to restore the item to its previous position. The add-content menu can create an app, integration, widget, or Container without leaving the board. When adding apps, click one app to add it immediately, or choose **Select multiple** to add several at once. `Ctrl`/`Cmd` click remains available as a shortcut. ## Board settings [#board-settings] Board settings cover: * **General:** page title, browser title, logo, and favicon. * **Layout:** responsive layouts, breakpoints, columns, and rails. * **Background:** image, attachment, size, and repeat behavior. * **Appearance:** colors, opacity, icon color, and item radius. * **Custom CSS:** styles applied only to the current board. * **Behaviour:** app status and widget context-menu behavior. See [Styling](/docs/advanced/styling) for board and global CSS. Outside edit mode, widgets may expose an advanced view and a context menu for status, refresh, quick options, settings, and actions. Available controls depend on the widget and the user's board and integration permissions. ## Access control [#access-control] Public boards are readable without signing in. Private boards require user, group, or global access. | Board access | View | Edit content and settings | Access control, rename, delete | | ------------ | ---- | ------------------------- | ------------------------------ | | View | Yes | No | No | | Modify | Yes | Yes | No | | Full | Yes | Yes | Yes | Inherited access comes from group permissions. Resource-specific access can be granted from the board's access-control section. Renaming a board changes its URL without a redirect. Deleting a board is permanent. ## Home boards [#home-boards] A **home board** opens at `/` and `/boards`. Desktop and mobile home boards are separate from the responsive layouts inside a board. Defaults can be set for a user, group, or the whole server. User settings take priority, followed by matching groups, the `Everyone` group, and server defaults. Server-wide fallback boards must be public. See [Users and groups](/docs/management/users) and [Server settings](/docs/management/settings#boards). ## Widget previews [#widget-previews] The add and edit dialogs use the target board section’s sizing and scale. Large widgets may be shrunk to fit the preview area; their content layout is preserved. Custom CSS that depends on dashboard ancestors may render differently inside the dialog. # Integrations (/docs/management/integrations) An **integration** is a server-side connection from Homarr to a supported service. Integrations provide data and actions to widgets and can be linked to apps. The integration catalog See the [integration catalog](/docs/integrations) for service-specific URLs, credentials, and supported widgets. ## Browser and server routes [#browser-and-server-routes] ## Configuration [#configuration] Create and manage integrations under **Management → Integrations**. Select a service, provide its base URL and required credentials, then test the connection. Homarr does not save a new integration until the test succeeds. Use a URL reachable from the Homarr server or container. Unless an integration page says otherwise, provide the service root rather than a settings or API subpage. Credentials are encrypted and used only by the server. Linking an app is optional; it provides the browser-facing URL used by widgets that open the service. Creating an integration with a server URL, API key, and linked app Integrations can also be created while adding content to a board. Editing a connection from a widget updates that integration everywhere it is used. ## Permissions [#permissions] | Level | Allows | | -------- | -------------------------------------------------------- | | Use | Select the integration and read its data | | Interact | Run supported actions, such as pausing a download | | Full | Change the URL, credentials, permissions, and linked app | Per-integration access for users and groups Global integration permissions apply to every integration. Resource access can instead be granted to specific users or groups. Lists are filtered on the server and only include connections the current user can manage. ## Connection problems [#connection-problems] If a connection test fails: 1. Check the integration page for the required base URL and credentials. 2. Test name resolution and HTTP access from the Homarr container or pod, not only from the host or browser. 3. Check Homarr and upstream-service logs, then any reverse proxy, firewall, VLAN, VPN, or DNS between them. 4. For a self-signed certificate, add the expected certificate under [Certificates](/docs/management/certificates). Do not disable upstream security controls as a general troubleshooting step. # Connect an agent (/docs/management/custom-widgets/agent-authoring) An MCP-connected agent can validate, preview, test, and save Custom Widgets. The API key owner must be a Homarr administrator. Install the official skill: ```sh npx skills add https://github.com/homarr-labs/homarr --skill homarr-custom-widget ``` The skill routes the agent to the release-matched schema, runtime, security, examples, and component metadata. It keeps those references separate so the agent loads only what the current widget needs. ## MCP resources [#mcp-resources] * Prompt: `homarr-custom-widget-author` * Skill: `homarr://custom-widgets/skill` * References: `homarr://custom-widgets/references/{schema|runtime|security}` * Schema: `homarr://custom-widgets/schema` * Components: `homarr://custom-widgets/components` and `components/{name}` * Examples: `homarr://custom-widgets/examples/{name}` Equivalent HTTP resources are available under `/api/custom-widgets/` for authenticated administrators. ## Authoring lifecycle [#authoring-lifecycle] 1. Load the skill and only the references needed for the design. 2. Read the external API documentation and build the definition. 3. Validate the JSX, then create a preview from the complete definition. 4. Run every returned query and simulate every relevant action against the current preview revision. 5. Inspect the preview and redacted journal. Revise the existing preview for JSX-only changes. 6. Save from the final tested preview. 7. Configure deployment-specific source URLs and credentials, then preview the saved definition again. Use `templateLines` for multiline JSX tool input. A preview must have current evidence for every query and action before it can be saved. Simulation counts as action evidence without performing the mutation. If the agent does not have a source URL or credential, it can request a short-lived Homarr configuration URL. An authenticated administrator completes it in Homarr; the agent receives the status, never the plaintext credential. Agents can also search, inspect, install, and configure existing Workshop widgets instead of regenerating them. See [MCP](/docs/management/mcp) for client configuration and [requests and security](/docs/management/custom-widgets/requests-and-security) for the runtime limits. # Create a Custom Widget (/docs/management/custom-widgets/authoring) The workbench provides editors for general metadata, API sources, requests, widget options, JSX, and preview data. Raw JSON is available when direct editing is faster. ## Workflow [#workflow] 1. Configure each API source, network scope, authentication method, and credential. 2. Add named queries and actions. Values can reference widget options or invocation parameters. 3. Define widget options and their defaults. 4. Write JSX using `data`, `status`, `options`, and temporary `inputs`. 5. Run **Test and preview**, inspect the response data and redacted request journal, then save. Changing the definition, options, or credentials invalidates the previous preview. Preview actions are simulated unless **Run actions against the configured API** is enabled for that preview session. Widget options support text, textarea, number, switch, select, multi-select, slider, date, time, color, icon, URL, duration, time zone, and JSON controls. Dynamic choices can come from a load query. See the [safe JSX runtime](/docs/management/custom-widgets/custom-jsx), [component reference](/docs/management/custom-widgets/component-reference), and [request reference](/docs/management/custom-widgets/requests-and-security) for the authoring contract. ## Create with another AI service [#create-with-another-ai-service] **Create or fix with any AI** copies a self-contained prompt for an ordinary ChatGPT or Claude conversation. The model must return one fenced `json` block containing the complete definition. Paste that block into the workbench, add credentials separately, and validate it against a real preview. For an MCP-connected agent, use the [Homarr Custom Widget skill](/docs/management/custom-widgets/agent-authoring) instead. # Component reference (/docs/management/custom-widgets/component-reference) Search the components and properties exposed by Homarr's safe Custom JSX runtime. The live schema and diagnostics remain authoritative: properties marked as blocked cannot be passed from widget code, and denied components are shown only for explanation. Custom JSX 2.0.0, Mantine 9.6.0. Properties are optional unless marked required. [Download the complete JSON catalog](/custom-widgets/component-catalog-v1.json). ## Global properties - `abbr`: `string`. - `about`: `string`. - `accentHeight`: `string | number`. - `accept`: `string`. - `accessKey`: `string`. - `accumulate`: `"none" | "sum"`. Known values: "none", "sum". - `additive`: `"sum" | "replace"`. Known values: "replace", "sum". - `align`: `"center" | "left" | "right"`. Known values: "center", "char", "justify", "left", "right". - `alignmentBaseline`: `"inherit" | "auto" | "baseline" | "before-edge" | "text-before-edge" | "middle" | "central" | "after-edge" | "text-after-edge" | "ideographic" | "alphabetic" | "hanging" | "mathematical"`. Known values: "after-edge", "alphabetic", "auto", "baseline", "before-edge", "central", "hanging", "ideographic", "inherit", "mathematical", "middle", "text-after-edge", "text-before-edge". - `allowReorder`: `"yes" | "no"`. Known values: "no", "yes". - `alphabetic`: `string | number`. - `alt`: `string`. - `amplitude`: `string | number`. - `arabicForm`: `"initial" | "medial" | "terminal" | "isolated"`. Known values: "initial", "isolated", "medial", "terminal". - `aria-activedescendant`: `string`. Identifies the currently active element when DOM focus is on a composite widget, textbox, group, or application. - `aria-atomic`: `false | true | "true" | "false"`. Indicates whether assistive technologies will present all, or only parts of, the changed region based on the change notifications defined by the aria-relevant attribute. Known values: false, "false", true, "true". - `aria-autocomplete`: `"none" | "inline" | "list" | "both"`. Indicates whether inputting text could trigger display of one or more predictions of the user's intended value for an input and specifies how predictions would be presented if they are made. Known values: "both", "inline", "list", "none". - `aria-braillelabel`: `string`. Defines a string value that labels the current element, which is intended to be converted into Braille. - `aria-brailleroledescription`: `string`. Defines a human-readable, author-localized abbreviated description for the role of an element, which is intended to be converted into Braille. - `aria-busy`: `false | true | "true" | "false"`. Known values: false, "false", true, "true". - `aria-checked`: `false | true | "true" | "false" | "mixed"`. Indicates the current "checked" state of checkboxes, radio buttons, and other widgets. Known values: false, "false", "mixed", true, "true". - `aria-colcount`: `number`. Defines the total number of columns in a table, grid, or treegrid. - `aria-colindex`: `number`. Defines an element's column index or position with respect to the total number of columns within a table, grid, or treegrid. - `aria-colindextext`: `string`. Defines a human readable text alternative of aria-colindex. - `aria-colspan`: `number`. Defines the number of columns spanned by a cell or gridcell within a table, grid, or treegrid. - `aria-controls`: `string`. Identifies the element (or elements) whose contents or presence are controlled by the current element. - `aria-current`: `false | true | "time" | "true" | "false" | "page" | "step" | "location" | "date"`. Indicates the element that represents the current item within a container or set of related elements. Known values: "date", false, "false", "location", "page", "step", "time", true, "true". - `aria-describedby`: `string`. Identifies the element (or elements) that describes the object. - `aria-description`: `string`. Defines a string value that describes or annotates the current element. - `aria-details`: `string`. Identifies the element that provides a detailed, extended description for the object. - `aria-disabled`: `false | true | "true" | "false"`. Indicates that the element is perceivable but disabled, so it is not editable or otherwise operable. Known values: false, "false", true, "true". - `aria-dropeffect`: `"link" | "none" | "copy" | "execute" | "move" | "popup"`. Indicates what functions can be performed when a dragged object is released on the drop target. Known values: "copy", "execute", "link", "move", "none", "popup". - `aria-errormessage`: `string`. Identifies the element that provides an error message for the object. - `aria-expanded`: `false | true | "true" | "false"`. Indicates whether the element, or another grouping element it controls, is currently expanded or collapsed. Known values: false, "false", true, "true". - `aria-flowto`: `string`. Identifies the next element (or elements) in an alternate reading order of content which, at the user's discretion, allows assistive technology to override the general default of reading in document source order. - `aria-grabbed`: `false | true | "true" | "false"`. Indicates an element's "grabbed" state in a drag-and-drop operation. Known values: false, "false", true, "true". - `aria-haspopup`: `false | true | "dialog" | "menu" | "grid" | "true" | "false" | "listbox" | "tree"`. Indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by an element. Known values: "dialog", false, "false", "grid", "listbox", "menu", "tree", true, "true". - `aria-hidden`: `false | true | "true" | "false"`. Indicates whether the element is exposed to an accessibility API. Known values: false, "false", true, "true". - `aria-invalid`: `false | true | "true" | "false" | "grammar" | "spelling"`. Indicates the entered value does not conform to the format expected by the application. Known values: false, "false", "grammar", "spelling", true, "true". - `aria-keyshortcuts`: `string`. Indicates keyboard shortcuts that an author has implemented to activate or give focus to an element. - `aria-label`: `string`. Defines a string value that labels the current element. - `aria-labelledby`: `string`. Identifies the element (or elements) that labels the current element. - `aria-level`: `number`. Defines the hierarchical level of an element within a structure. - `aria-live`: `"off" | "assertive" | "polite"`. Indicates that an element will be updated, and describes the types of updates the user agents, assistive technologies, and user can expect from the live region. Known values: "assertive", "off", "polite". - `aria-modal`: `false | true | "true" | "false"`. Indicates whether an element is modal when displayed. Known values: false, "false", true, "true". - `aria-multiline`: `false | true | "true" | "false"`. Indicates whether a text box accepts multiple lines of input or only a single line. Known values: false, "false", true, "true". - `aria-multiselectable`: `false | true | "true" | "false"`. Indicates that the user may select more than one item from the current selectable descendants. Known values: false, "false", true, "true". - `aria-orientation`: `"horizontal" | "vertical"`. Indicates whether the element's orientation is horizontal, vertical, or unknown/ambiguous. Known values: "horizontal", "vertical". - `aria-owns`: `string`. Identifies an element (or elements) in order to define a visual, functional, or contextual parent/child relationship between DOM elements where the DOM hierarchy cannot be used to represent the relationship. - `aria-placeholder`: `string`. Defines a short hint (a word or short phrase) intended to aid the user with data entry when the control has no value. A hint could be a sample value or a brief description of the expected format. - `aria-posinset`: `number`. Defines an element's number or position in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM. - `aria-pressed`: `false | true | "true" | "false" | "mixed"`. Indicates the current "pressed" state of toggle buttons. Known values: false, "false", "mixed", true, "true". - `aria-readonly`: `false | true | "true" | "false"`. Indicates that the element is not editable, but is otherwise operable. Known values: false, "false", true, "true". - `aria-relevant`: `"text" | "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text additions" | "text removals"`. Indicates what notifications the user agent will trigger when the accessibility tree within a live region is modified. Known values: "additions", "additions removals", "additions text", "all", "removals", "removals additions", "removals text", "text", "text additions", "text removals". - `aria-required`: `false | true | "true" | "false"`. Indicates that user input is required on the element before a form may be submitted. Known values: false, "false", true, "true". - `aria-roledescription`: `string`. Defines a human-readable, author-localized description for the role of an element. - `aria-rowcount`: `number`. Defines the total number of rows in a table, grid, or treegrid. - `aria-rowindex`: `number`. Defines an element's row index or position with respect to the total number of rows within a table, grid, or treegrid. - `aria-rowindextext`: `string`. Defines a human readable text alternative of aria-rowindex. - `aria-rowspan`: `number`. Defines the number of rows spanned by a cell or gridcell within a table, grid, or treegrid. - `aria-selected`: `false | true | "true" | "false"`. Indicates the current "selected" state of various widgets. Known values: false, "false", true, "true". - `aria-setsize`: `number`. Defines the number of items in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM. - `aria-sort`: `"none" | "ascending" | "descending" | "other"`. Indicates if items in a table or grid are sorted in ascending or descending order. Known values: "ascending", "descending", "none", "other". - `aria-valuemax`: `number`. Defines the maximum allowed value for a range widget. - `aria-valuemin`: `number`. Defines the minimum allowed value for a range widget. - `aria-valuenow`: `number`. Defines the current value for a range widget. - `aria-valuetext`: `string`. Defines the human readable text alternative of aria-valuenow for a range widget. - `ascent`: `string | number`. - `attributeName`: `string`. - `attributeType`: `string`. - `autoCapitalize`: `(string & {}) | "none" | "off" | "on" | "sentences" | "words" | "characters"`. Known values: "characters", "none", "off", "on", "sentences", "words". - `autoComplete`: `HTMLInputAutoCompleteAttribute`. - `autoCorrect`: `string`. - `autoReverse`: `false | true | "true" | "false"`. Known values: false, "false", true, "true". - `autoSave`: `string`. - `azimuth`: `string | number`. - `baseFrequency`: `string | number`. - `baseProfile`: `string | number`. - `baselineShift`: `string | number`. - `bbox`: `string | number`. - `bd`: `StyleProp>`. Border - `bdrs`: `StyleProp`. BorderRadius, theme key: theme.radius Known values: "lg", "md", "sm", "xl", "xs". - `begin`: `string | number`. - `bg`: `StyleProp`. Background, theme key: theme.colors Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `bga`: `StyleProp`. BackgroundAttachment Known values: "-moz-initial", "fixed", "inherit", "initial", "local", "revert", "revert-layer", "scroll", "unset". - `bgcolor`: `string`. - `bgp`: `StyleProp>`. BackgroundPosition - `bgr`: `StyleProp`. BackgroundRepeat Known values: "-moz-initial", "inherit", "initial", "no-repeat", "repeat", "repeat-x", "repeat-y", "revert", "revert-layer", "round", "space", "unset". - `bgsz`: `StyleProp>`. BackgroundSize - `bias`: `string | number`. - `border`: `number`. - `by`: `string | number`. - `c`: `StyleProp`. Color Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `calcMode`: `string | number`. - `capHeight`: `string | number`. - `capture`: `false | true | "user" | "environment"`. Known values: "environment", false, true, "user". - `cellPadding`: `string | number`. - `cellSpacing`: `string | number`. - `checked`: `false | true`. Known values: false, true. - `clip`: `string | number`. - `clipPath`: `string`. - `clipPathUnits`: `string | number`. - `clipRule`: `string | number`. - `colSpan`: `number`. - `color`: `string`. Key of `theme.colors` or any valid CSS color Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "initials", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `colorInterpolation`: `string | number`. - `colorInterpolationFilters`: `"inherit" | "auto" | "sRGB" | "linearRGB"`. Known values: "auto", "inherit", "linearRGB", "sRGB". - `colorProfile`: `string | number`. - `colorRendering`: `string | number`. - `cols`: `number`. - `content`: `string`. - `contentScriptType`: `string | number`. - `contentStyleType`: `string | number`. - `contextMenu`: `string`. - `crossOrigin`: `"" | "anonymous" | "use-credentials"`. Known values: "", "anonymous", "use-credentials". - `cursor`: `string | number`. - `cx`: `string | number`. - `cy`: `string | number`. - `d`: `string`. - `darkHidden`: `false | true`. Determines whether component should be hidden in dark color scheme with `display: none` Known values: false, true. - `datatype`: `string`. - `decelerate`: `string | number`. - `defaultChecked`: `false | true`. Known values: false, true. - `defaultValue`: `string | number | readonly string[]`. - `descent`: `string | number`. - `diffuseConstant`: `string | number`. - `dir`: `string`. - `dirName`: `string`. - `direction`: `string | number`. - `disabled`: `false | true`. Known values: false, true. - `display`: `StyleProp`. Known values: "-moz-initial", "-ms-flexbox", "-ms-grid", "-ms-inline-flexbox", "-ms-inline-grid", "-webkit-flex", "-webkit-inline-flex", "block", "contents", "flex", "flow", "flow-root", "grid", "inherit", "initial", "inline", "inline-block", "inline-flex", "inline-grid", "inline-list-item", "inline-table", "list-item", "none", "revert", "revert-layer", "ruby", "ruby-base", "ruby-base-container", "ruby-text", "ruby-text-container", "run-in", "table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row", "table-row-group", "unset". - `divisor`: `string | number`. - `dominantBaseline`: `"inherit" | "auto" | "text-before-edge" | "middle" | "central" | "text-after-edge" | "ideographic" | "alphabetic" | "hanging" | "mathematical" | "use-script" | "no-change" | "reset-size"`. Known values: "alphabetic", "auto", "central", "hanging", "ideographic", "inherit", "mathematical", "middle", "no-change", "reset-size", "text-after-edge", "text-before-edge", "use-script". - `draggable`: `false | true | "true" | "false"`. Known values: false, "false", true, "true". - `dur`: `string | number`. - `dx`: `string | number`. - `dy`: `string | number`. - `edgeMode`: `string | number`. - `elevation`: `string | number`. - `enableBackground`: `string | number`. - `end`: `string | number`. - `enterKeyHint`: `"search" | "enter" | "done" | "go" | "next" | "previous" | "send"`. Known values: "done", "enter", "go", "next", "previous", "search", "send". - `exponent`: `string | number`. - `exportparts`: `string`. - `externalResourcesRequired`: `false | true | "true" | "false"`. Known values: false, "false", true, "true". - `ff`: `StyleProp<"text" | (string & {}) | "monospace" | "heading">`. FontFamily Known values: "heading", "monospace", "text". - `fill`: `string`. - `fillOpacity`: `string | number`. - `fillRule`: `"inherit" | "nonzero" | "evenodd"`. Known values: "evenodd", "inherit", "nonzero". - `filter`: `string`. - `filterRes`: `string | number`. - `filterUnits`: `string | number`. - `flex`: `StyleProp>`. - `floodColor`: `string | number`. - `floodOpacity`: `string | number`. - `focusable`: `false | true | "auto" | "true" | "false"`. Known values: "auto", false, "false", true, "true". - `fontFamily`: `string`. - `fontSize`: `string | number`. - `fontSizeAdjust`: `string | number`. - `fontStretch`: `string | number`. - `fontStyle`: `string | number`. - `fontVariant`: `string | number`. - `fontWeight`: `string | number`. - `format`: `string | number`. - `fr`: `string | number`. - `frame`: `false | true`. Known values: false, true. - `from`: `string | number`. - `fs`: `StyleProp`. FontStyle Known values: "-moz-initial", "inherit", "initial", "italic", "normal", "oblique", "revert", "revert-layer", "unset". - `fw`: `StyleProp`. FontWeight Known values: "-moz-initial", "bold", "bolder", "inherit", "initial", "lighter", "normal", "revert", "revert-layer", "unset". - `fx`: `string | number`. - `fy`: `string | number`. - `fz`: `StyleProp`. FontSize, theme key: theme.fontSizes Known values: "h1", "h2", "h3", "h4", "h5", "h6", "lg", "md", "sm", "xl", "xs". - `g1`: `string | number`. - `g2`: `string | number`. - `glyphName`: `string | number`. - `glyphOrientationHorizontal`: `string | number`. - `glyphOrientationVertical`: `string | number`. - `gradientTransform`: `string`. - `gradientUnits`: `string`. - `h`: `StyleProp>`. Height, theme key: theme.spacing - `hanging`: `string | number`. - `headers`: `string`. - `height`: `string | number`. Height of the brush in pixels. - `hidden`: `false | true`. Known values: false, true. - `hiddenFrom`: `MantineBreakpoint`. Breakpoint above which the component is hidden with `display: none` Known values: "lg", "md", "sm", "xl", "xs". - `horizAdvX`: `string | number`. - `horizOriginX`: `string | number`. - `href`: `string`. - `id`: `string`. Static id used as base to generate `aria-` attributes, by default generates random id - `ideographic`: `string | number`. - `imageRendering`: `string | number`. - `in`: `string`. - `in2`: `string | number`. - `inert`: `false | true`. Known values: false, true. - `inlist`: `unknown`. - `inputMode`: `"search" | "text" | "none" | "tel" | "url" | "email" | "numeric" | "decimal"`. Hints at the type of data that might be entered by the user while editing the element or its contents Known values: "decimal", "email", "none", "numeric", "search", "tel", "text", "url". - `intercept`: `string | number`. - `is`: `string`. Specify that a standard HTML element should behave like a defined custom built-in element - `itemID`: `string`. - `itemProp`: `string`. - `itemScope`: `false | true`. Known values: false, true. - `itemType`: `string`. - `k`: `string | number`. - `k1`: `string | number`. - `k2`: `string | number`. - `k3`: `string | number`. - `k4`: `string | number`. - `kernelMatrix`: `string | number`. - `kernelUnitLength`: `string | number`. - `kerning`: `string | number`. - `key`: `Key | null`. Stable identity used by React when rendering collections. - `keyPoints`: `string | number`. - `keySplines`: `string | number`. - `keyTimes`: `string | number`. - `lang`: `string`. - `lengthAdjust`: `string | number`. - `letterSpacing`: `string | number`. - `lh`: `StyleProp`. LineHeight, theme key: lineHeights Known values: "h1", "h2", "h3", "h4", "h5", "h6", "lg", "md", "sm", "xl", "xs". - `lightHidden`: `false | true`. Determines whether component should be hidden in light color scheme with `display: none` Known values: false, true. - `lightingColor`: `string | number`. - `limitingConeAngle`: `string | number`. - `list`: `string`. - `local`: `string | number`. - `lts`: `StyleProp>`. LetterSpacing - `m`: `StyleProp`. Margin, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `mah`: `StyleProp>`. MaxHeight, theme key: theme.spacing - `markerEnd`: `string`. - `markerHeight`: `string | number`. - `markerMid`: `string`. - `markerStart`: `string`. - `markerUnits`: `string | number`. - `markerWidth`: `string | number`. - `mask`: `string`. - `maskContentUnits`: `string | number`. - `maskUnits`: `string | number`. - `mathematical`: `string | number`. - `maw`: `StyleProp>`. MaxWidth, theme key: theme.spacing - `max`: `string | number`. - `maxLength`: `number`. - `mb`: `StyleProp`. MarginBottom, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `me`: `StyleProp`. MarginInlineEnd, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `media`: `string`. - `method`: `string`. - `mie`: `StyleProp`. MarginInlineEnd, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `mih`: `StyleProp>`. MinHeight, theme key: theme.spacing - `min`: `string | number`. - `minLength`: `number`. - `mis`: `StyleProp`. MarginInlineStart, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `miw`: `StyleProp>`. MinWidth, theme key: theme.spacing - `ml`: `StyleProp`. MarginLeft, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `mod`: `BoxMod`. Element modifiers transformed into `data-` attributes, for example, `{ 'data-size': 'xl' }`, falsy values are removed - `mode`: `string | number`. - `mr`: `StyleProp`. MarginRight, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `ms`: `StyleProp`. MarginInlineStart, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `mt`: `StyleProp`. MarginTop, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `multiple`: `false | true`. Known values: false, true. - `mx`: `StyleProp`. MarginInline, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `my`: `StyleProp`. MarginBlock, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `name`: `string`. - `nonce`: `string`. - `numOctaves`: `string | number`. - `offset`: `string | number`. - `opacity`: `StyleProp`. Known values: "-moz-initial", "inherit", "initial", "revert", "revert-layer", "unset". - `operator`: `string | number`. - `order`: `string | number`. - `orient`: `string | number`. - `orientation`: `string | number`. - `origin`: `string | number`. - `overflow`: `string | number`. - `overlinePosition`: `string | number`. - `overlineThickness`: `string | number`. - `p`: `StyleProp`. Padding, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `paintOrder`: `string | number`. - `panose1`: `string | number`. - `part`: `string`. - `path`: `string`. - `pathLength`: `string | number`. - `pattern`: `string`. - `patternContentUnits`: `string`. - `patternTransform`: `string | number`. - `patternUnits`: `string`. - `pb`: `StyleProp`. PaddingBottom, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `pe`: `StyleProp`. PaddingInlineEnd, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `pie`: `StyleProp`. PaddingInlineEnd, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `pis`: `StyleProp`. PaddingInlineStart, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `pl`: `StyleProp`. PaddingLeft, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `placeholder`: `string`. - `pointerEvents`: `string | number`. - `points`: `string`. - `pointsAtX`: `string | number`. - `pointsAtY`: `string | number`. - `pointsAtZ`: `string | number`. - `pr`: `StyleProp`. PaddingRight, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `prefix`: `string`. - `preserveAlpha`: `false | true | "true" | "false"`. Known values: false, "false", true, "true". - `preserveAspectRatio`: `string`. - `primitiveUnits`: `string | number`. - `property`: `string`. - `ps`: `StyleProp`. PaddingInlineStart, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `pt`: `StyleProp`. PaddingTop, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `px`: `StyleProp`. PaddingInline, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `py`: `StyleProp`. PaddingBlock, theme key: theme.spacing Known values: "lg", "md", "sm", "xl", "xs". - `r`: `string | number`. - `radioGroup`: `string`. - `radius`: `MantineRadius`. Key of `theme.radius` or any valid CSS value to set `border-radius`, numbers are converted to rem Known values: "lg", "md", "sm", "xl", "xs". - `readOnly`: `false | true`. Known values: false, true. - `rel`: `string`. - `renderingIntent`: `string | number`. - `repeatCount`: `string | number`. - `repeatDur`: `string | number`. - `required`: `false | true`. Known values: false, true. - `requiredExtensions`: `string | number`. - `requiredFeatures`: `string | number`. - `resource`: `string`. - `restart`: `string | number`. - `result`: `string`. - `results`: `number`. - `rev`: `string`. - `role`: `AriaRole`. - `rotate`: `string | number`. - `rowSpan`: `number`. - `rows`: `number`. - `rules`: `"none" | "all" | "rows" | "groups" | "columns"`. Known values: "all", "columns", "groups", "none", "rows". - `rx`: `string | number`. - `ry`: `string | number`. - `scale`: `string | number`. - `scope`: `string`. - `security`: `string`. - `seed`: `string | number`. - `shadow`: `MantineShadow`. Key of `theme.shadows` or any other valid CSS `box-shadow` value Known values: "lg", "md", "sm", "xl", "xs". - `shapeRendering`: `string | number`. - `size`: `"xs" | "sm" | "md" | "lg" | "xl"`. Component size Known values: "compact-lg", "compact-md", "compact-sm", "compact-xl", "compact-xs", "input-lg", "input-md", "input-sm", "input-xl", "input-xs", "lg", "md", "sm", "xl", "xs". - `slope`: `string | number`. - `slot`: `string`. - `spacing`: `string | number`. - `specularConstant`: `string | number`. - `specularExponent`: `string | number`. - `speed`: `string | number`. - `spellCheck`: `false | true | "true" | "false"`. Known values: false, "false", true, "true". - `spreadMethod`: `string`. - `src`: `string`. - `startOffset`: `string | number`. - `stdDeviation`: `string | number`. - `stemh`: `string | number`. - `stemv`: `string | number`. - `step`: `string | number`. - `stitchTiles`: `string | number`. - `stopColor`: `string`. - `stopOpacity`: `string | number`. - `strikethroughPosition`: `string | number`. - `strikethroughThickness`: `string | number`. - `string`: `string | number`. - `stroke`: `string`. - `strokeDasharray`: `string | number`. - `strokeDashoffset`: `string | number`. - `strokeLinecap`: `"inherit" | "round" | "butt" | "square"`. Known values: "butt", "inherit", "round", "square". - `strokeLinejoin`: `"inherit" | "round" | "miter" | "bevel"`. Known values: "bevel", "inherit", "miter", "round". - `strokeMiterlimit`: `string | number`. - `strokeOpacity`: `string | number`. - `strokeWidth`: `string | number`. - `style`: `CSSProperties`. Style to apply to the root element, used for virtualizer positioning - `styles`: `Partial>`. - `summary`: `string`. - `surfaceScale`: `string | number`. - `systemLanguage`: `string | number`. - `ta`: `StyleProp`. TextAlign Known values: "-khtml-center", "-khtml-left", "-khtml-right", "-moz-center", "-moz-initial", "-moz-left", "-moz-right", "-webkit-center", "-webkit-left", "-webkit-match-parent", "-webkit-right", "center", "end", "inherit", "initial", "justify", "left", "match-parent", "revert", "revert-layer", "right", "start", "unset". - `tabIndex`: `number`. Tab index for the node - `tableValues`: `string | number`. - `target`: `string`. - `targetX`: `string | number`. - `targetY`: `string | number`. - `td`: `StyleProp>`. TextDecoration - `textAnchor`: `"inherit" | "end" | "start" | "middle"`. Known values: "end", "inherit", "middle", "start". - `textDecoration`: `string | number`. - `textLength`: `string | number`. - `textRendering`: `string | number`. - `title`: `string`. Item title, displayed next to the bullet - `to`: `string | number`. - `transform`: `string`. - `translate`: `"yes" | "no"`. Known values: "no", "yes". - `tt`: `StyleProp`. TextTransform Known values: "-moz-initial", "capitalize", "full-size-kana", "full-width", "inherit", "initial", "lowercase", "math-auto", "none", "revert", "revert-layer", "unset", "uppercase". - `type`: `"button" | "submit" | "reset"`. Known values: "button", "checkbox", "color", "date", "datetime-local", "email", "file", "hidden", "image", "month", "number", "password", "radio", "range", "reset", "search", "submit", "tel", "text", "time", "url", "week". - `typeof`: `string`. - `u1`: `string | number`. - `u2`: `string | number`. - `underlinePosition`: `string | number`. - `underlineThickness`: `string | number`. - `unicode`: `string | number`. - `unicodeBidi`: `string | number`. - `unicodeRange`: `string | number`. - `unitsPerEm`: `string | number`. - `unselectable`: `"off" | "on"`. Known values: "off", "on". - `vAlphabetic`: `string | number`. - `vHanging`: `string | number`. - `vIdeographic`: `string | number`. - `vMathematical`: `string | number`. - `valign`: `"bottom" | "top" | "baseline" | "middle"`. Known values: "baseline", "bottom", "middle", "top". - `value`: `string | number | readonly string[]`. - `values`: `string`. - `variant`: `string`. Variant passed from parent component, sets `data-variant` Known values: "contained", "contrast", "dashed", "default", "dot", "dotted", "filled", "gradient", "light", "outline", "pills", "separated", "solid", "subtle", "text", "transparent", "unstyled", "vertical", "white". - `vectorEffect`: `string | number`. - `version`: `string`. - `vertAdvY`: `string | number`. - `vertOriginX`: `string | number`. - `vertOriginY`: `string | number`. - `viewBox`: `string`. - `viewTarget`: `string | number`. - `visibility`: `string | number`. - `visibleFrom`: `MantineBreakpoint`. Breakpoint below which the component is hidden with `display: none` Known values: "lg", "md", "sm", "xl", "xs". - `vocab`: `string`. - `w`: `StyleProp>`. Width, theme key: theme.spacing - `width`: `string | number`. Width of the brush in pixels. If undefined, defaults to the chart width. - `widths`: `string | number`. - `withBorder`: `false | true`. Adds border to the root element Known values: false, true. - `wordSpacing`: `string | number`. - `wrap`: `string`. - `writingMode`: `string | number`. - `x`: `string | number`. The x-coordinate of brush. If left undefined, it will be computed from the chart's offset and margins. - `x1`: `string | number`. - `x2`: `string | number`. - `xChannelSelector`: `string`. - `xHeight`: `string | number`. - `xlinkActuate`: `string`. - `xlinkArcrole`: `string`. - `xlinkHref`: `string`. - `xlinkRole`: `string`. - `xlinkShow`: `string`. - `xlinkTitle`: `string`. - `xlinkType`: `string`. - `xmlBase`: `string`. - `xmlLang`: `string`. - `xmlSpace`: `string`. - `xmlns`: `string`. - `xmlnsXlink`: `string`. - `y`: `string | number`. The y-coordinate of brush. If left undefined, it will be computed from the chart's offset and margins. - `y1`: `string | number`. - `y2`: `string | number`. - `yChannelSelector`: `string`. - `z`: `string | number`. - `zoomAndPan`: `string`. ## Blocked capabilities - `__proto__` (prop): This capability is blocked by the Custom JSX safety boundary. - `apply` (prop): This capability is blocked by the Custom JSX safety boundary. - `arguments` (prop): This capability is blocked by the Custom JSX safety boundary. - `autoFocus` (prop): This capability is blocked by the Custom JSX safety boundary. - `backdropFilter` (prop): This capability is blocked by the Custom JSX safety boundary. - `behavior` (prop): This capability is blocked by the Custom JSX safety boundary. - `bottom` (prop): This capability is blocked by the Custom JSX safety boundary. - `call` (prop): This capability is blocked by the Custom JSX safety boundary. - `callee` (prop): This capability is blocked by the Custom JSX safety boundary. - `caller` (prop): This capability is blocked by the Custom JSX safety boundary. - `children` (prop): Children must be expressed as interpreted JSX, not passed as a raw prop. - `className` (prop): Unscoped class injection can escape widget CSS isolation. - `classNames` (prop): Unscoped class injection can escape widget CSS isolation. - `classes` (prop): Unscoped class injection can escape widget CSS isolation. - `clipPath` (prop): This capability is blocked by the Custom JSX safety boundary. - `component` (prop): Polymorphic roots can replace the Homarr-owned element boundary. - `constructor` (prop): This capability is blocked by the Custom JSX safety boundary. - `content` (prop): This capability is blocked by the Custom JSX safety boundary. - `contentEditable` (prop): This capability is blocked by the Custom JSX safety boundary. - `dangerouslySetInnerHTML` (prop): Raw HTML injection is not available to authored widgets. - `filter` (prop): This capability is blocked by the Custom JSX safety boundary. - `form` (prop): External form submission is outside the named-request security boundary. - `formAction` (prop): External form submission is outside the named-request security boundary. - `formEncType` (prop): External form submission is outside the named-request security boundary. - `formMethod` (prop): External form submission is outside the named-request security boundary. - `formNoValidate` (prop): External form submission is outside the named-request security boundary. - `formTarget` (prop): External form submission is outside the named-request security boundary. - `innerRef` (prop): Refs expose underlying React components and DOM nodes. - `inset` (prop): This capability is blocked by the Custom JSX safety boundary. - `left` (prop): This capability is blocked by the Custom JSX safety boundary. - `mask` (prop): This capability is blocked by the Custom JSX safety boundary. - `ping` (prop): This capability is blocked by the Custom JSX safety boundary. - `pointerEvents` (prop): This capability is blocked by the Custom JSX safety boundary. - `popover` (prop): This capability is blocked by the Custom JSX safety boundary. - `popoverTarget` (prop): Portal targeting can render or interact outside the widget root. - `popoverTargetAction` (prop): Portal targeting can render or interact outside the widget root. - `portalProps` (prop): Portal targeting can render or interact outside the widget root. - `pos` (prop): This capability is blocked by the Custom JSX safety boundary. - `position` (prop): This capability is blocked by the Custom JSX safety boundary. - `prototype` (prop): This capability is blocked by the Custom JSX safety boundary. - `ref` (prop): Refs expose underlying React components and DOM nodes. - `renderRoot` (prop): Polymorphic roots can replace the Homarr-owned element boundary. - `right` (prop): This capability is blocked by the Custom JSX safety boundary. - `srcDoc` (prop): Raw HTML injection is not available to authored widgets. - `suppressContentEditableWarning` (prop): This capability is blocked by the Custom JSX safety boundary. - `suppressHydrationWarning` (prop): This capability is blocked by the Custom JSX safety boundary. - `top` (prop): This capability is blocked by the Custom JSX safety boundary. - `withinPortal` (prop): Portal targeting can render or interact outside the widget root. - `zIndex` (prop): This capability is blocked by the Custom JSX safety boundary. - `on*` (prop-pattern): Authored event callbacks can execute code outside the declarative runtime. - `*Ref` (prop-pattern): Refs expose underlying React components and DOM nodes. - `__*` (prop-pattern): Private and prototype-related properties are outside the supported authoring surface. ## Accordion @mantine/core; navigation; safety: wrapped. Bind a temporary string input with `bind`. Initialize with `defaultValue`; reset with `resetKey`. Subcomponents: Accordion.Chevron, Accordion.Control, Accordion.Item, Accordion.Panel. - `attributes`: `{ label?: Record; content?: Record; root?: Record; item?: Record; ... 4 more ...; control?: Record<...>; }`. - `chevron`: `React.ReactNode`. Custom chevron icon - `chevronIconSize`: `string | number`. Size of the default chevron icon. Ignored when `chevron` prop is set. Use `chevronSize` instead when using custom chevron. - `chevronPosition`: `"left" | "right"`. Position of the chevron relative to the item label Known values: "left", "right". - `chevronSize`: `string | number`. Size of the chevron icon container - `color`: `string`. - `defaultValue`: `AccordionValue`. Uncontrolled component default value - `disableChevronRotation`: `false | true`. If set, chevron rotation is disabled Known values: false, true. - `disableCollapse`: `false | true`. If set, the open item cannot be collapsed by clicking it again, so one item always stays open. Only applies when `multiple` is `false`. Known values: false, true. - `keepMounted`: `false | true`. If set to `false`, panels are unmounted when collapsed. By default, panels stay mounted when collapsed. Known values: false, true. - `keepMountedMode`: `"activity" | "display-none"`. Controls how inactive panels content is hidden when `keepMounted` is `true`, `'activity'` – hidden with `Activity` component, `'display-none'` – hidden with `display: none` styles Known values: "activity", "display-none". - `loop`: `false | true`. If set, arrow keys loop through items (first to last and last to first) Known values: false, true. - `multiple`: `Multiple`. If set, multiple items can be opened at the same time - `order`: `2 | 3 | 4 | 5 | 6`. Sets heading level (h2-h6) for `Accordion.Control` elements. Wraps each control in the corresponding heading tag, recommended to meet WAI-ARIA accessibility requirements. Has no visual effect. Known values: 2, 3, 4, 5, 6. - `transitionDuration`: `number`. Transition duration in ms - `unstyled`: `false | true`. Known values: false, true. - `value`: `AccordionValue`. Controlled component value - `variant`: `(string & {}) | AccordionVariant`. Known values: "contained", "default", "filled", "separated". - Provide an accessible label for controls without visible text. [Upstream documentation for Accordion](https://mantine.dev/core/accordion/) ## Accordion.Chevron @mantine/core; navigation; safety: wrapped. - `color`: `string`. - `display`: `string | number`. - `opacity`: `string | number`. - `radius`: `string | number`. - `size`: `string | number`. Controls `width` and `height` of the icon, `16` by default - `type`: `string`. - Provide an accessible label for controls without visible text. [Upstream documentation for Accordion.Chevron](https://mantine.dev/core/accordion/) ## Accordion.Control @mantine/core; navigation; safety: wrapped. - `chevron`: `React.ReactNode`. Custom chevron icon - `color`: `string`. - `icon`: `React.ReactNode`. Icon displayed next to the label - `styles`: `Partial>`. - `type`: `"button" | "submit" | "reset"`. Known values: "button", "reset", "submit". - `variant`: `string`. - Provide an accessible label for controls without visible text. [Upstream documentation for Accordion.Control](https://mantine.dev/core/accordion/) ## Accordion.Item @mantine/core; navigation; safety: wrapped. - `color`: `string`. - `styles`: `Partial>`. - `value`: `string`. Required. Value that is used to manage the accordion state - `variant`: `string`. - Provide an accessible label for controls without visible text. [Upstream documentation for Accordion.Item](https://mantine.dev/core/accordion/) ## Accordion.Panel @mantine/core; navigation; safety: wrapped. - `color`: `string`. - `keepMounted`: `false | true`. If set, overrides the Accordion-level `keepMounted` value. When undefined (default), uses Accordion's `keepMounted` setting. Known values: false, true. - `keepMountedMode`: `"activity" | "display-none"`. If set, overrides the Accordion-level `keepMountedMode` value. When undefined (default), uses Accordion's `keepMountedMode` setting. Known values: "activity", "display-none". - `styles`: `Partial>`. - `variant`: `string`. - Provide an accessible label for controls without visible text. [Upstream documentation for Accordion.Panel](https://mantine.dev/core/accordion/) ## AccordionChevron @mantine/core; navigation; safety: wrapped. - `color`: `string`. - `display`: `string | number`. - `opacity`: `string | number`. - `radius`: `string | number`. - `size`: `string | number`. Controls `width` and `height` of the icon, `16` by default - `type`: `string`. - Provide an accessible label for controls without visible text. [Upstream documentation for AccordionChevron](https://mantine.dev/core/accordion-chevron/) ## AccordionControl @mantine/core; navigation; safety: wrapped. - `chevron`: `React.ReactNode`. Custom chevron icon - `color`: `string`. - `icon`: `React.ReactNode`. Icon displayed next to the label - `styles`: `Partial>`. - `type`: `"button" | "submit" | "reset"`. Known values: "button", "reset", "submit". - `variant`: `string`. - Provide an accessible label for controls without visible text. [Upstream documentation for AccordionControl](https://mantine.dev/core/accordion-control/) ## AccordionItem @mantine/core; navigation; safety: wrapped. - `color`: `string`. - `styles`: `Partial>`. - `value`: `string`. Required. Value that is used to manage the accordion state - `variant`: `string`. - Provide an accessible label for controls without visible text. [Upstream documentation for AccordionItem](https://mantine.dev/core/accordion-item/) ## AccordionPanel @mantine/core; navigation; safety: wrapped. - `color`: `string`. - `keepMounted`: `false | true`. If set, overrides the Accordion-level `keepMounted` value. When undefined (default), uses Accordion's `keepMounted` setting. Known values: false, true. - `keepMountedMode`: `"activity" | "display-none"`. If set, overrides the Accordion-level `keepMountedMode` value. When undefined (default), uses Accordion's `keepMountedMode` setting. Known values: "activity", "display-none". - `styles`: `Partial>`. - `variant`: `string`. - Provide an accessible label for controls without visible text. [Upstream documentation for AccordionPanel](https://mantine.dev/core/accordion-panel/) ## ActionBar @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary Subcomponents: ActionBar.CloseButton, ActionBar.Divider. [Upstream documentation for ActionBar](https://mantine.dev/core/action-bar/) ## ActionBar.CloseButton @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for ActionBar.CloseButton](https://mantine.dev/core/action-bar/) ## ActionBar.Divider @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for ActionBar.Divider](https://mantine.dev/core/action-bar/) ## ActionBarCloseButton @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for ActionBarCloseButton](https://mantine.dev/core/action-bar-close-button/) ## ActionBarDivider @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for ActionBarDivider](https://mantine.dev/core/action-bar-divider/) ## ActionButton @homarr/widgets; network; safety: wrapped. Runs a named user-triggered action. - `color`: `string`. - `confirmMessage`: `string`. - `disabled`: `boolean | string`. - `errorMessage`: `string`. - `fullWidth`: `boolean | string`. - `icon`: `string`. - `label`: `string`. - `params`: `Record`. - `requestId`: `string`. Identifier of the named Custom Widget action. - `size`: `string`. - `successMessage`: `string`. - `variant`: `string`. - Action labels must describe their effect; destructive actions require confirmation. [Upstream documentation for ActionButton](https://homarr.dev/docs/management/custom-widgets/) ## ActionIcon @mantine/core; interaction; safety: wrapped. Subcomponents: ActionIcon.Group, ActionIcon.GroupSection. - `attributes`: `{ root?: Record; icon?: Record; loader?: Record; }`. - `autoContrast`: `false | true`. If set, adjusts text color based on background color for `filled` variant Known values: false, true. - `color`: `DefaultMantineColor`. Key of `theme.colors` or any valid CSS color. Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `data-disabled`: `false | true`. Known values: false, true. - `gradient`: `MantineGradient`. Gradient values used with `variant="gradient"`. - `loaderProps`: `LoaderProps`. Props passed down to the `Loader` component. Ignored when `loading` prop is not set. - `loading`: `false | true`. If set, `Loader` component is displayed instead of the `children` Known values: false, true. - `size`: `number | MantineSize | (string & {}) | "input-xs" | "input-sm" | "input-md" | "input-lg" | "input-xl"`. Controls width and height of the button. Numbers are converted to rem. Known values: "input-lg", "input-md", "input-sm", "input-xl", "input-xs", "lg", "md", "sm", "xl", "xs". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `(string & {}) | ActionIconVariant`. Known values: "default", "filled", "gradient", "light", "outline", "subtle", "transparent", "white". - Provide a visible label or aria-label. [Upstream documentation for ActionIcon](https://mantine.dev/core/action-icon/) ## ActionIcon.Group @mantine/core; interaction; safety: wrapped. - `attributes`: `{ group?: Record; }`. - `borderWidth`: `string | number`. `border-width` of the child components. - `color`: `string`. - `orientation`: `"horizontal" | "vertical"`. Group orientation Known values: "horizontal", "vertical". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Provide a visible label or aria-label. [Upstream documentation for ActionIcon.Group](https://mantine.dev/core/action-icon/) ## ActionIcon.GroupSection @mantine/core; interaction; safety: wrapped. - `attributes`: `{ groupSection?: Record; }`. - `autoContrast`: `false | true`. If set, adjusts text color based on background color for `filled` variant Known values: false, true. - `color`: `string`. - `gradient`: `MantineGradient`. Gradient values used with `variant="gradient"`. - `size`: `number | MantineSize | (string & {})`. Controls section `height`, `font-size` and horizontal `padding` Known values: "lg", "md", "sm", "xl", "xs". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `(string & {}) | ActionIconVariant`. Known values: "default", "filled", "gradient", "light", "outline", "subtle", "transparent", "white". - Provide a visible label or aria-label. [Upstream documentation for ActionIcon.GroupSection](https://mantine.dev/core/action-icon/) ## ActionIconGroup @mantine/core; interaction; safety: wrapped. - `attributes`: `{ group?: Record; }`. - `borderWidth`: `string | number`. `border-width` of the child components. - `color`: `string`. - `orientation`: `"horizontal" | "vertical"`. Group orientation Known values: "horizontal", "vertical". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Provide a visible label or aria-label. [Upstream documentation for ActionIconGroup](https://mantine.dev/core/action-icon-group/) ## ActionIconGroupSection @mantine/core; interaction; safety: wrapped. - `attributes`: `{ groupSection?: Record; }`. - `autoContrast`: `false | true`. If set, adjusts text color based on background color for `filled` variant Known values: false, true. - `color`: `string`. - `gradient`: `MantineGradient`. Gradient values used with `variant="gradient"`. - `size`: `number | MantineSize | (string & {})`. Controls section `height`, `font-size` and horizontal `padding` Known values: "lg", "md", "sm", "xl", "xs". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `(string & {}) | ActionIconVariant`. Known values: "default", "filled", "gradient", "light", "outline", "subtle", "transparent", "white". - Provide a visible label or aria-label. [Upstream documentation for ActionIconGroupSection](https://mantine.dev/core/action-icon-group-section/) ## Affix @mantine/core; blocked; safety: denied. Unavailable: Escapes the widget layout boundary [Upstream documentation for Affix](https://mantine.dev/core/affix/) ## Alert @mantine/core; feedback; safety: wrapped. - `attributes`: `{ body?: Record; label?: Record; title?: Record; root?: Record; icon?: Record<...>; wrapper?: Record<...>; message?: Record<...>; closeButton?: Record<...>; }`. - `autoContrast`: `false | true`. If set, adjusts text color based on background color for `filled` variant Known values: false, true. - `closeButtonLabel`: `string`. Close button `aria-label` - `color`: `DefaultMantineColor`. Key of `theme.colors` or any valid CSS color Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `icon`: `React.ReactNode`. Icon displayed next to the title - `title`: `React.ReactNode`. Alert title - `unstyled`: `false | true`. Known values: false, true. - `variant`: `(string & {}) | AlertVariant`. Known values: "default", "filled", "light", "outline", "transparent", "white". - `withCloseButton`: `false | true`. Determines whether close button should be displayed Known values: false, true. - Do not rely on color alone to communicate status. [Upstream documentation for Alert](https://mantine.dev/core/alert/) ## AlphaSlider @mantine/core; interaction; safety: wrapped. - `attributes`: `{ slider?: Record; sliderOverlay?: Record; thumb?: Record; }`. - `color`: `string`. Required. - `focusable`: `false | true`. If set, slider thumb can be focused Known values: false, true. - `size`: `MantineSize | (string & {})`. Slider size Known values: "lg", "md", "sm", "xl", "xs". - `unstyled`: `false | true`. Known values: false, true. - `value`: `number`. Required. Controlled component value - `variant`: `string`. - Provide a visible label or aria-label. [Upstream documentation for AlphaSlider](https://mantine.dev/core/alpha-slider/) ## Anchor @mantine/core; navigation; safety: wrapped. - `attributes`: `{ root?: Record; }`. - `gradient`: `MantineGradient`. Gradient configuration, ignored when `variant` is not `gradient` - `inherit`: `false | true`. Determines whether font properties should be inherited from the parent Known values: false, true. - `inline`: `false | true`. Sets `line-height` to 1 for centering Known values: false, true. - `lineClamp`: `number`. Number of lines after which Text will be truncated - `size`: `"xs" | "sm" | "md" | "lg" | "xl" | (string & {})`. Controls `font-size` and `line-height` Known values: "lg", "md", "sm", "xl", "xs". - `textWrap`: `"wrap" | "nowrap" | "balance" | "pretty" | "stable"`. Controls `text-wrap` CSS property Known values: "balance", "nowrap", "pretty", "stable", "wrap". - `truncate`: `false | true | "end" | "start"`. Side on which Text must be truncated, if `true`, text is truncated from the start Known values: "end", false, "start", true. - `underline`: `"always" | "hover" | "not-hover" | "never"`. Defines when `text-decoration: underline` styles are applied. Known values: "always", "hover", "never", "not-hover". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `(string & {}) | TextVariant`. Known values: "gradient", "text". - Provide an accessible label for controls without visible text. [Upstream documentation for Anchor](https://mantine.dev/core/anchor/) ## AngleSlider @mantine/core; interaction; safety: wrapped. - `attributes`: `{ label?: Record; mark?: Record; root?: Record; thumb?: Record; marks?: Record<...>; }`. - `color`: `string`. - `defaultValue`: `number`. Uncontrolled component default value - `hiddenInputProps`: `React.DetailedHTMLProps, HTMLInputElement>`. Props passed down to the hidden input - `marks`: `{ value: number; label?: string; }[]`. Array of marks displayed on the slider - `restrictToMarks`: `false | true`. If set, the selection is allowed only from the given marks array Known values: false, true. - `size`: `number`. Slider size in px - `step`: `number`. Step between values - `thumbSize`: `number`. Size of the thumb in px. Calculated based on the `size` value by default. - `unstyled`: `false | true`. Known values: false, true. - `value`: `number`. Controlled component value - `variant`: `string`. - `withLabel`: `false | true`. If set, the label is displayed inside the slider Known values: false, true. - Provide a visible label or aria-label. [Upstream documentation for AngleSlider](https://mantine.dev/core/angle-slider/) ## AppShell @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary Subcomponents: AppShell.Aside, AppShell.Footer, AppShell.Header, AppShell.Main, AppShell.Navbar, AppShell.Section. [Upstream documentation for AppShell](https://mantine.dev/core/app-shell/) ## AppShell.Aside @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for AppShell.Aside](https://mantine.dev/core/app-shell/) ## AppShell.Footer @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for AppShell.Footer](https://mantine.dev/core/app-shell/) ## AppShell.Header @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for AppShell.Header](https://mantine.dev/core/app-shell/) ## AppShell.Main @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for AppShell.Main](https://mantine.dev/core/app-shell/) ## AppShell.Navbar @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for AppShell.Navbar](https://mantine.dev/core/app-shell/) ## AppShell.Section @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for AppShell.Section](https://mantine.dev/core/app-shell/) ## AppShellAside @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for AppShellAside](https://mantine.dev/core/app-shell-aside/) ## AppShellFooter @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for AppShellFooter](https://mantine.dev/core/app-shell-footer/) ## AppShellHeader @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for AppShellHeader](https://mantine.dev/core/app-shell-header/) ## AppShellMain @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for AppShellMain](https://mantine.dev/core/app-shell-main/) ## AppShellNavbar @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for AppShellNavbar](https://mantine.dev/core/app-shell-navbar/) ## AppShellSection @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for AppShellSection](https://mantine.dev/core/app-shell-section/) ## AreaChart @mantine/charts; charts; safety: wrapped. - `accessibilityLayer`: `false | true`. Determines whether the chart should be keyboard-navigable with the recharts accessibility layer, `true` by default Known values: false, true. - `activeDotProps`: `MantineChartDotProps`. Props passed down to all active dots. Ignored if `withDots={false}` is set. - `areaChartProps`: `(CartesianChartProps & { ref?: React.Ref; })`. Props passed down to recharts `AreaChart` component - `attributes`: `{ area?: Record; legend?: Record; grid?: Record; root?: Record; ... 17 more ...; tooltipBody?: Record<...>; }`. - `brushProps`: `Omit`. Props passed down to the `Brush` component - `color`: `string`. - `connectNulls`: `false | true`. If set, points with `null` values are connected Known values: false, true. - `curveType`: `"step" | "bump" | "linear" | "natural" | "monotone" | "stepBefore" | "stepAfter"`. Type of the curve Known values: "bump", "linear", "monotone", "natural", "step", "stepAfter", "stepBefore". - `data`: `ChartData`. Required. Data used to display chart - `dataKey`: `string`. Required. Key of the `data` object for x-axis values - `dotProps`: `MantineChartDotProps`. Props passed down to all dots. Ignored if `withDots={false}` is set. - `fillOpacity`: `number`. Controls fill opacity of all areas - `gridAxis`: `"none" | "x" | "y" | "xy"`. Specifies which lines should be displayed in the grid, `'x'` by default Known values: "none", "x", "xy", "y". - `gridColor`: `DefaultMantineColor`. Color of the grid and cursor lines, by default depends on color scheme Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `gridProps`: `Omit`. Props passed down to the `CartesianGrid` component - `legendProps`: `Omit`. Props passed down to the `Legend` component - `orientation`: `"horizontal" | "vertical"`. Chart orientation, `'horizontal'` by default Known values: "horizontal", "vertical". - `referenceAreas`: `ChartReferenceAreaProps[]`. Reference areas that should be displayed on the chart - `referenceDots`: `ChartReferenceDotProps[]`. Reference dots that should be displayed on the chart - `referenceLines`: `ChartReferenceLineProps[]`. Reference lines that should be displayed on the chart - `rightYAxisLabel`: `string`. A label to display next to the right y-axis - `rightYAxisProps`: `Omit`. Props passed down to the `YAxis` recharts component rendered on the right side - `series`: `AreaChartSeries[]`. Required. An array of objects with `name` and `color` keys. Determines which data should be consumed from the `data` array. - `splitColors`: `[DefaultMantineColor, DefaultMantineColor]`. A tuple of colors used when `type="split"` is set, ignored in all other cases. A tuple may include theme colors reference or any valid CSS colors - `splitOffset`: `number`. Offset for the split gradient. By default, value is inferred from `data` and `series` if possible. Must be generated from the data array with `getSplitOffset` function. - `strokeWidth`: `number`. Stroke width for the chart areas - `textColor`: `DefaultMantineColor`. Color of the text displayed inside the chart, `'dimmed'` by default Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `tickLine`: `"none" | "x" | "y" | "xy"`. Specifies which axis should have tick line, `'y'` by default Known values: "none", "x", "xy", "y". - `tooltipAnimationDuration`: `number`. Tooltip position animation duration in ms, `0` by default - `tooltipProps`: `Omit, "ref">`. Props passed down to the `Tooltip` component - `type`: `"default" | "stacked" | "percent" | "split" | "stream"`. Controls how chart areas are positioned relative to each other. Set to `'stream'` to render a streamgraph. Known values: "default", "percent", "split", "stacked", "stream". - `unit`: `string`. Unit displayed next to each tick in y-axis - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - `withBrush`: `false | true`. Determines whether a brush (range selector) should be displayed under the chart, `false` by default Known values: false, true. - `withDots`: `false | true`. Determines whether dots should be displayed Known values: false, true. - `withGradient`: `false | true`. Determines whether the chart area should be represented with a gradient instead of the solid color Known values: false, true. - `withLegend`: `false | true`. Determines whether chart legend should be displayed, `false` by default Known values: false, true. - `withPointLabels`: `false | true`. If set, each point has an associated label Known values: false, true. - `withRightYAxis`: `false | true`. Determines whether additional y-axis should be displayed on the right side of the chart, `false` by default Known values: false, true. - `withTooltip`: `false | true`. Determines whether chart tooltip should be displayed, `true` by default Known values: false, true. - `withXAxis`: `false | true`. Determines whether x-axis should be displayed. Defaults to `false` for `type="stream"` with `orientation="vertical"` – the floating baseline makes the values not meaningful to read off. Known values: false, true. - `withYAxis`: `false | true`. Determines whether y-axis should be displayed. Defaults to `false` for `type="stream"` with `orientation="horizontal"` – the floating baseline makes the values not meaningful to read off. Known values: false, true. - `xAxisLabel`: `string`. A label to display below the x-axis - `xAxisProps`: `Omit`. Props passed down to the `XAxis` recharts component - `yAxisLabel`: `string`. A label to display next to the y-axis - `yAxisProps`: `Omit`. Props passed down to the `YAxis` recharts component - Include a nearby text summary of the chart data. [Upstream documentation for AreaChart](https://mantine.dev/charts/area-chart/) ## AreaGradient @mantine/charts; blocked; safety: denied. Unavailable: Low-level chart implementation helper [Upstream documentation for AreaGradient](https://mantine.dev/charts/area-gradient/) ## AspectRatio @mantine/core; layout; safety: wrapped. - `attributes`: `{ root?: Record; }`. - `color`: `string`. - `ratio`: `number`. Aspect ratio, for example, `16 / 9`, `4 / 3`, `1920 / 1080` - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Keep visual order consistent with reading order. [Upstream documentation for AspectRatio](https://mantine.dev/core/aspect-ratio/) ## Autocomplete @mantine/core; interaction; safety: wrapped. Bind a temporary string input with `bind`. Initialize with `defaultValue`; reset with `resetKey`. - `attributes`: `{ input?: Record; label?: Record; option?: Record; section?: Record; ... 11 more ...; groupLabel?: Record<...>; }`. - `autoSelectOnBlur`: `false | true`. If set, the highlighted option is selected when the input loses focus Known values: false, true. - `clearButtonProps`: `InputClearButtonProps`. Props passed down to the clear button - `clearSectionMode`: `"both" | "rightSection" | "clear"`. Determines how the clear button and rightSection are rendered Known values: "both", "clear", "rightSection". - `clearable`: `false | true`. If set, the clear button is displayed when the component has a value Known values: false, true. - `color`: `string`. - `comboboxProps`: `ComboboxProps`. Props passed down to `Combobox` component - `data`: `ComboboxGenericData`. Data used to display options. Values must be unique. - `defaultDropdownOpened`: `false | true`. Uncontrolled dropdown initial opened state Known values: false, true. - `defaultValue`: `string`. Default value for uncontrolled component - `description`: `React.ReactNode`. Contents of `Input.Description` component. If not set, description is not displayed. - `descriptionProps`: `(InputDescriptionProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Description` component - `dropdownOpened`: `false | true`. Controlled dropdown opened state Known values: false, true. - `error`: `React.ReactNode`. Contents of `Input.Error` component. If not set, error is not displayed. - `errorProps`: `(InputErrorProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Error` component - `floatingHeight`: `"viewport"`. If set to `'viewport'`, the dropdown grows to fill the available vertical space in the viewport. Disables the `flip` middleware. Known values: "viewport". - `inputSize`: `string`. HTML `size` attribute for the input element (number of visible characters) - `inputWrapperOrder`: `("input" | "label" | "description" | "error")[]`. Controls order and visibility of wrapper elements. Only elements included in this array will be rendered. - `label`: `React.ReactNode`. Contents of `Input.Label` component. If not set, label is not displayed. - `labelProps`: `(InputLabelProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Label` component - `leftSection`: `React.ReactNode`. Content section displayed on the left side of the input - `leftSectionPointerEvents`: `"-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset" | "none" | "auto" | "all" | "fill" | "stroke" | "painted" | "visible" | "visibleFill" | "visiblePainted" | "visibleStroke"`. Sets `pointer-events` styles on the `leftSection` element. Use `'all'` when section contains interactive elements (buttons, links). Known values: "-moz-initial", "all", "auto", "fill", "inherit", "initial", "none", "painted", "revert", "revert-layer", "stroke", "unset", "visible", "visibleFill", "visiblePainted", "visibleStroke". - `leftSectionProps`: `React.DetailedHTMLProps, HTMLDivElement>`. Props passed down to the `leftSection` element - `leftSectionWidth`: `Property.Width`. Left section width, used to set `width` of the section and input `padding-left`, by default equals to the input height - `limit`: `number`. Maximum number of options displayed at a time, `Infinity` by default - `loading`: `false | true`. Displays loading indicator in the left or right section Known values: false, true. - `loadingPosition`: `"left" | "right"`. Position of the loading indicator Known values: "left", "right". - `maxDropdownHeight`: `string | number`. `max-height` of the dropdown, only applicable when `withScrollArea` prop is `true`, `250` by default - `openOnFocus`: `false | true`. If set, the dropdown opens when the input receives focus Known values: false, true. - `rightSection`: `React.ReactNode`. Content section displayed on the right side of the input - `rightSectionPointerEvents`: `"-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset" | "none" | "auto" | "all" | "fill" | "stroke" | "painted" | "visible" | "visibleFill" | "visiblePainted" | "visibleStroke"`. Sets `pointer-events` styles on the `rightSection` element. Use `'all'` when section contains interactive elements (buttons, links). Known values: "-moz-initial", "all", "auto", "fill", "inherit", "initial", "none", "painted", "revert", "revert-layer", "stroke", "unset", "visible", "visibleFill", "visiblePainted", "visibleStroke". - `rightSectionProps`: `React.DetailedHTMLProps, HTMLDivElement>`. Props passed down to the `rightSection` element - `rightSectionWidth`: `Property.Width`. Right section width, used to set `width` of the section and input `padding-right`, by default equals to the input height - `scrollAreaProps`: `ScrollAreaProps`. Props passed to the underlying `ScrollArea` component in the dropdown - `selectFirstOptionOnChange`: `false | true`. If set, the first option is selected when value changes, `false` by default Known values: false, true. - `selectFirstOptionOnDropdownOpen`: `false | true`. If set, the first option is selected when dropdown opens, `false` by default Known values: false, true. - `size`: `MantineSize | (string & {})`. Controls input `height`, horizontal `padding`, and `font-size` Known values: "lg", "md", "sm", "xl", "xs". - `success`: `React.ReactNode`. Contents of `Input.Success` component. If not set, success is not displayed. - `successProps`: `(InputSuccessProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Success` component - `type`: `HTMLInputTypeAttribute`. Known values: "button", "checkbox", "color", "date", "datetime-local", "email", "file", "hidden", "image", "month", "number", "password", "radio", "range", "reset", "search", "submit", "tel", "text", "time", "url", "week". - `unstyled`: `false | true`. Known values: false, true. - `value`: `string`. Controlled component value - `variant`: `(string & {}) | InputVariant`. Known values: "default", "filled", "unstyled". - `withAsterisk`: `false | true`. If set, the required asterisk is displayed next to the label. Overrides `required` prop. Does not add required attribute to the input. Known values: false, true. - `withErrorStyles`: `false | true`. Determines whether the input should have red border and red text color when the `error` prop is set Known values: false, true. - `withScrollArea`: `false | true`. Determines whether the options should be wrapped with `ScrollArea.AutoSize`, `true` by default Known values: false, true. - `withSuccessStyles`: `false | true`. Determines whether the input should have green border when the `success` prop is set Known values: false, true. - `wrapperProps`: `WrapperProps`. Props passed down to the root element - Provide a visible label or aria-label. [Upstream documentation for Autocomplete](https://mantine.dev/core/autocomplete/) ## Avatar @mantine/core; content; safety: wrapped. Subcomponents: Avatar.Group. - `allowedInitialsColors`: `DefaultMantineColor[]`. A list of colors that is used for autogenerated initials. By default, all default Mantine colors can be used except gray and dark. - `attributes`: `{ image?: Record; root?: Record; placeholder?: Record; }`. - `autoContrast`: `false | true`. If set, adjusts text color based on background color for `filled` variant Known values: false, true. - `color`: `DefaultMantineColor | "initials"`. Key of `theme.colors` or any valid CSS color Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "initials", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `gradient`: `MantineGradient`. Gradient configuration for `variant="gradient"` - `imageProps`: `React.DetailedHTMLProps, HTMLImageElement>`. Attributes passed down to `img` element - `size`: `number | MantineSize | (string & {})`. Width and height of the avatar, numbers are converted to rem Known values: "lg", "md", "sm", "xl", "xs". - `src`: `null | string`. Image url, if the image cannot be loaded or `src={null}`, then placeholder is displayed instead - `unstyled`: `false | true`. Known values: false, true. - `variant`: `(string & {}) | AvatarVariant`. Known values: "default", "filled", "gradient", "light", "outline", "transparent", "white". - Provide meaningful text alternatives for non-text content. [Upstream documentation for Avatar](https://mantine.dev/core/avatar/) ## Avatar.Group @mantine/core; content; safety: wrapped. - `attributes`: `{ group?: Record; }`. - `color`: `string`. - `spacing`: `MantineSpacing`. Negative space between Avatar components Known values: "lg", "md", "sm", "xl", "xs". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for Avatar.Group](https://mantine.dev/core/avatar/) ## AvatarGroup @mantine/core; content; safety: wrapped. - `attributes`: `{ group?: Record; }`. - `color`: `string`. - `spacing`: `MantineSpacing`. Negative space between Avatar components Known values: "lg", "md", "sm", "xl", "xs". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for AvatarGroup](https://mantine.dev/core/avatar-group/) ## BackgroundImage @mantine/core; content; safety: wrapped. - `attributes`: `{ root?: Record; }`. - `src`: `string`. Required. Image url - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for BackgroundImage](https://mantine.dev/core/background-image/) ## Badge @mantine/core; content; safety: wrapped. - `attributes`: `{ label?: Record; section?: Record; root?: Record; }`. - `autoContrast`: `false | true`. If set, adjusts text color based on background color for `filled` variant Known values: false, true. - `circle`: `false | true`. If set, badge `min-width` becomes equal to its `height` and horizontal padding is removed Known values: false, true. - `color`: `DefaultMantineColor`. Key of `theme.colors` or any valid CSS color Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `fullWidth`: `false | true`. Determines whether Badge should take 100% of its parent width Known values: false, true. - `gradient`: `MantineGradient`. Gradient configuration used when `variant=\"gradient\"` - `leftSection`: `React.ReactNode`. Content displayed on the left side of the badge label - `rightSection`: `React.ReactNode`. Content displayed on the right side of the badge label - `size`: `MantineSize | (string & {})`. Controls `font-size`, `height` and horizontal `padding` Known values: "lg", "md", "sm", "xl", "xs". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `(string & {}) | BadgeVariant`. Known values: "default", "dot", "filled", "gradient", "light", "outline", "transparent", "white". - Provide meaningful text alternatives for non-text content. [Upstream documentation for Badge](https://mantine.dev/core/badge/) ## BarChart @mantine/charts; charts; safety: wrapped. - `accessibilityLayer`: `false | true`. Determines whether the chart should be keyboard-navigable with the recharts accessibility layer, `true` by default Known values: false, true. - `attributes`: `{ legend?: Record; grid?: Record; root?: Record; tooltip?: Record; ... 17 more ...; tooltipBody?: Record<...>; }`. - `barChartProps`: `(CartesianChartProps & { ref?: React.Ref; })`. Props passed down to recharts `BarChart` component - `barLabelColor`: `DefaultMantineColor`. Controls color of the bar label, by default the value is determined by the chart orientation Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `brushProps`: `Omit`. Props passed down to the `Brush` component - `color`: `string`. - `cursorFill`: `DefaultMantineColor`. Fill of hovered bar section, by default value is based on color scheme Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `data`: `Record[]`. Required. Data used to display chart. - `dataKey`: `string`. Required. Key of the `data` object for x-axis values - `fillOpacity`: `number`. Controls fill opacity of all bars - `gridAxis`: `"none" | "x" | "y" | "xy"`. Specifies which lines should be displayed in the grid, `'x'` by default Known values: "none", "x", "xy", "y". - `gridColor`: `DefaultMantineColor`. Color of the grid and cursor lines, by default depends on color scheme Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `gridProps`: `Omit`. Props passed down to the `CartesianGrid` component - `legendProps`: `Omit`. Props passed down to the `Legend` component - `maxBarWidth`: `number`. Maximum bar width in px - `minBarSize`: `number`. Sets minimum height of the bar in px - `orientation`: `"horizontal" | "vertical"`. Chart orientation, `'horizontal'` by default Known values: "horizontal", "vertical". - `referenceAreas`: `ChartReferenceAreaProps[]`. Reference areas that should be displayed on the chart - `referenceDots`: `ChartReferenceDotProps[]`. Reference dots that should be displayed on the chart - `referenceLines`: `ChartReferenceLineProps[]`. Reference lines that should be displayed on the chart - `rightYAxisLabel`: `string`. A label to display next to the right y-axis - `rightYAxisProps`: `Omit`. Props passed down to the `YAxis` recharts component rendered on the right side - `series`: `BarChartSeries[]`. Required. An array of objects with `name` and `color` keys. Determines which data should be consumed from the `data` array. - `textColor`: `DefaultMantineColor`. Color of the text displayed inside the chart, `'dimmed'` by default Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `tickLine`: `"none" | "x" | "y" | "xy"`. Specifies which axis should have tick line, `'y'` by default Known values: "none", "x", "xy", "y". - `tooltipAnimationDuration`: `number`. Tooltip position animation duration in ms, `0` by default - `tooltipProps`: `Omit, "ref">`. Props passed down to the `Tooltip` component - `type`: `"default" | "stacked" | "percent" | "waterfall"`. Controls how bars are positioned relative to each other Known values: "default", "percent", "stacked", "waterfall". - `unit`: `string`. Unit displayed next to each tick in y-axis - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - `withBarValueLabel`: `false | true`. Determines whether a label with bar value should be displayed on top of each bar, incompatible with `type="stacked"` and `type="percent"` Known values: false, true. - `withBrush`: `false | true`. Determines whether a brush (range selector) should be displayed under the chart, `false` by default Known values: false, true. - `withLegend`: `false | true`. Determines whether chart legend should be displayed, `false` by default Known values: false, true. - `withRightYAxis`: `false | true`. Determines whether additional y-axis should be displayed on the right side of the chart, `false` by default Known values: false, true. - `withTooltip`: `false | true`. Determines whether chart tooltip should be displayed, `true` by default Known values: false, true. - `withXAxis`: `false | true`. Determines whether x-axis should be displayed, `true` by default Known values: false, true. - `withYAxis`: `false | true`. Determines whether y-axis should be displayed, `true` by default Known values: false, true. - `xAxisLabel`: `string`. A label to display below the x-axis - `xAxisProps`: `Omit`. Props passed down to the `XAxis` recharts component - `yAxisLabel`: `string`. A label to display next to the y-axis - `yAxisProps`: `Omit`. Props passed down to the `YAxis` recharts component - Include a nearby text summary of the chart data. [Upstream documentation for BarChart](https://mantine.dev/charts/bar-chart/) ## BarsList @mantine/charts; charts; safety: wrapped. - `attributes`: `{ root?: Record; bar?: Record; barLabel?: Record; barValue?: Record; labelsRow?: Record<...>; }`. - `autoContrast`: `false | true`. If set, adjusts text color based on background color Known values: false, true. - `barColor`: `DefaultMantineColor`. Default bar background color, used when item does not have color specified Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `barGap`: `MantineSpacing`. Controls gap between bars Known values: "lg", "md", "sm", "xl", "xs". - `barHeight`: `string | number`. Bar height - `barTextColor`: `DefaultMantineColor`. Bar text color, overrides autoContrast Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `barsLabel`: `string`. Label displayed above the bars column - `color`: `string`. - `data`: `BarsListBarData[]`. Required. Data for bars - `minBarSize`: `string | number`. Minimum bar width - `unstyled`: `false | true`. Known values: false, true. - `valueLabel`: `string`. Label displayed above the values column - `variant`: `string`. - Include a nearby text summary of the chart data. [Upstream documentation for BarsList](https://mantine.dev/charts/bars-list/) ## Blockquote @mantine/core; content; safety: wrapped. - `attributes`: `{ cite?: Record; root?: Record; icon?: Record; }`. - `cite`: `React.ReactNode`. Reference to a cited quote - `color`: `DefaultMantineColor`. Key of `theme.colors` or any valid CSS color Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `icon`: `React.ReactNode`. Blockquote icon, displayed at the top left side - `iconSize`: `string | number`. Controls icon `width` and `height`, numbers are converted to rem - `textWrap`: `"wrap" | "nowrap" | "balance" | "pretty" | "stable"`. Controls `text-wrap` CSS property Known values: "balance", "nowrap", "pretty", "stable", "wrap". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for Blockquote](https://mantine.dev/core/blockquote/) ## Box @mantine/core; layout; safety: wrapped. - `size`: `string | number`. Size passed from parent component, sets `data-size` if value is not number like - `variant`: `string`. Variant passed from parent component, sets `data-variant` - Keep visual order consistent with reading order. [Upstream documentation for Box](https://mantine.dev/core/box/) ## Breadcrumbs @mantine/core; navigation; safety: wrapped. - `attributes`: `{ root?: Record; separator?: Record; breadcrumb?: Record; }`. - `color`: `string`. - `separator`: `React.ReactNode`. Separator between children - `separatorMargin`: `MantineSpacing`. Controls spacing between separator and breadcrumb Known values: "lg", "md", "sm", "xl", "xs". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Provide an accessible label for controls without visible text. [Upstream documentation for Breadcrumbs](https://mantine.dev/core/breadcrumbs/) ## BubbleChart @mantine/charts; charts; safety: wrapped. - `accessibilityLayer`: `false | true`. Determines whether the chart should be keyboard-navigable with the recharts accessibility layer, `true` by default Known values: false, true. - `attributes`: `{ root?: Record; tooltip?: Record; axis?: Record; }`. - `color`: `DefaultMantineColor`. Color of the chart items. Key of `theme.colors` or any valid CSS color. Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `data`: `Record[]`. Required. Chart data - `dataKey`: `BubbleChartDataKey`. Required. Data keys for x, y and z axis - `gridColor`: `DefaultMantineColor`. Color of the grid and cursor lines, by default depends on color scheme Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `label`: `string`. Chart label displayed next to the x axis - `range`: `[number, number]`. Required. Z axis range - `scatterProps`: `Partial>`. Props passed down to the `Scatter` component - `textColor`: `DefaultMantineColor`. Color of the text displayed inside the chart Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `tooltipProps`: `Omit, "ref">`. Props passed down to the `Tooltip` component - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - `withTooltip`: `false | true`. Determines whether the tooltip should be displayed Known values: false, true. - `xAxisProps`: `Omit`. Props passed down to the `XAxis` recharts component - `yAxisProps`: `Omit`. Props passed down to the `YAxis` recharts component - `zAxisProps`: `Omit, "ref">`. Props passed down to the `ZAxis` recharts component - Include a nearby text summary of the chart data. [Upstream documentation for BubbleChart](https://mantine.dev/charts/bubble-chart/) ## BulletChart @mantine/charts; charts; safety: wrapped. - `attributes`: `{ label?: Record; track?: Record; root?: Record; target?: Record; ... 5 more ...; targetLabel?: Record<...>; }`. - `barColor`: `DefaultMantineColor`. Color of the actual value bar, Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `barSize`: `string | number`. Height of the actual value bar, - `color`: `string`. - `label`: `React.ReactNode`. Label displayed next to the chart - `orientation`: `"horizontal" | "vertical"`. Orientation, Known values: "horizontal", "vertical". - `ranges`: `BulletChartRange[]`. Required. Qualitative ranges displayed as background bands - `size`: `string | number`. Height of the chart track area (ranges), - `target`: `number`. Target value, displayed as a marker line - `targetColor`: `DefaultMantineColor`. Color of the target marker, Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `targetRatio`: `number`. Target marker size relative to chart size, - `targetSize`: `string | number`. Target marker thickness, - `unstyled`: `false | true`. Known values: false, true. - `value`: `number`. Required. Current actual value - `variant`: `string`. - `withTooltip`: `false | true`. Whether to show tooltip on hover, Known values: false, true. - Include a nearby text summary of the chart data. [Upstream documentation for BulletChart](https://mantine.dev/charts/bullet-chart/) ## Burger @mantine/core; interaction; safety: wrapped. - `attributes`: `{ root?: Record; burger?: Record; }`. - `color`: `DefaultMantineColor`. Key of `theme.colors` of any valid CSS value, by default `theme.white` in dark color scheme and `theme.black` in light Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `lineSize`: `string | number`. Controls height of lines, by default calculated based on `size` prop - `opened`: `false | true`. State of the burger, when `true` burger is transformed into X Known values: false, true. - `size`: `number | MantineSize | (string & {})`. Controls burger `width` and `height`, numbers are converted to rem Known values: "lg", "md", "sm", "xl", "xs". - `transitionDuration`: `number`. `transition-duration` property value in ms - `transitionTimingFunction`: `string`. `transition-timing-function` property value - `type`: `"button" | "submit" | "reset"`. Known values: "button", "reset", "submit". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Provide a visible label or aria-label. [Upstream documentation for Burger](https://mantine.dev/core/burger/) ## Button @mantine/core; interaction; safety: wrapped. Subcomponents: Button.Group, Button.GroupSection. - `attributes`: `{ label?: Record; section?: Record; root?: Record; loader?: Record; inner?: Record<...>; }`. - `autoContrast`: `false | true`. If set, adjusts text color based on background color for `filled` variant Known values: false, true. - `color`: `DefaultMantineColor`. Key of `theme.colors` or any valid CSS color Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `data-disabled`: `false | true`. Known values: false, true. - `fullWidth`: `false | true`. Sets `width: 100%` Known values: false, true. - `gradient`: `MantineGradient`. Gradient configuration used for `variant="gradient"` - `justify`: `Property.JustifyContent`. Sets `justify-content` of `inner` element, can be used to change distribution of sections and label Known values: "-moz-initial", "center", "end", "flex-end", "flex-start", "inherit", "initial", "left", "normal", "revert", "revert-layer", "right", "space-around", "space-between", "space-evenly", "start", "stretch", "unset". - `leftSection`: `React.ReactNode`. Content on the left side of the button label - `loaderProps`: `LoaderProps`. Props added to the `Loader` component (only visible when `loading` prop is set) - `loading`: `false | true`. If set, the `Loader` component is displayed over the button Known values: false, true. - `rightSection`: `React.ReactNode`. Content on the right side of the button label - `size`: `ButtonSize`. Controls button `height`, `font-size` and horizontal `padding` Known values: "compact-lg", "compact-md", "compact-sm", "compact-xl", "compact-xs", "lg", "md", "sm", "xl", "xs". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `(string & {}) | ButtonVariant`. Known values: "default", "filled", "gradient", "light", "outline", "subtle", "transparent", "white". - Provide a visible label or aria-label. [Upstream documentation for Button](https://mantine.dev/core/button/) ## Button.Group @mantine/core; interaction; safety: wrapped. - `attributes`: `{ group?: Record; }`. - `borderWidth`: `string | number`. `border-width` of the child `Button` components. Numbers are converted to rem. - `orientation`: `"horizontal" | "vertical"`. Orientation of the group Known values: "horizontal", "vertical". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Provide a visible label or aria-label. [Upstream documentation for Button.Group](https://mantine.dev/core/button/) ## Button.GroupSection @mantine/core; interaction; safety: wrapped. - `attributes`: `{ groupSection?: Record; }`. - `autoContrast`: `false | true`. If set, adjusts text color based on background color for `filled` variant Known values: false, true. - `color`: `string`. - `gradient`: `MantineGradient`. Gradient configuration used when `variant="gradient"` - `size`: `ButtonSize`. Controls section `height`, `font-size` and horizontal `padding` Known values: "compact-lg", "compact-md", "compact-sm", "compact-xl", "compact-xs", "lg", "md", "sm", "xl", "xs". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `(string & {}) | ButtonVariant`. Known values: "default", "filled", "gradient", "light", "outline", "subtle", "transparent", "white". - Provide a visible label or aria-label. [Upstream documentation for Button.GroupSection](https://mantine.dev/core/button/) ## ButtonGroup @mantine/core; content; safety: wrapped. - `attributes`: `{ group?: Record; }`. - `borderWidth`: `string | number`. `border-width` of the child `Button` components. Numbers are converted to rem. - `orientation`: `"horizontal" | "vertical"`. Orientation of the group Known values: "horizontal", "vertical". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for ButtonGroup](https://mantine.dev/core/button-group/) ## ButtonGroupSection @mantine/core; content; safety: wrapped. - `attributes`: `{ groupSection?: Record; }`. - `autoContrast`: `false | true`. If set, adjusts text color based on background color for `filled` variant Known values: false, true. - `color`: `string`. - `gradient`: `MantineGradient`. Gradient configuration used when `variant="gradient"` - `size`: `ButtonSize`. Controls section `height`, `font-size` and horizontal `padding` Known values: "compact-lg", "compact-md", "compact-sm", "compact-xl", "compact-xs", "lg", "md", "sm", "xl", "xs". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `(string & {}) | ButtonVariant`. Known values: "default", "filled", "gradient", "light", "outline", "subtle", "transparent", "white". - Provide meaningful text alternatives for non-text content. [Upstream documentation for ButtonGroupSection](https://mantine.dev/core/button-group-section/) ## Calendar @mantine/dates; dates; safety: wrapped. - `ariaLabels`: `CalendarAriaLabels`. `aria-label` attributes for controls on different levels - `attributes`: `{ month?: Record; weekday?: Record; weekdaysRow?: Record; monthRow?: Record; ... 18 more ...; yearsListRow?: Record<...>; }`. - `color`: `string`. - `columnsToScroll`: `number`. Number of columns to scroll with next/prev buttons, same as `numberOfColumns` if not set explicitly - `date`: `string | Date`. Displayed date in controlled mode - `defaultDate`: `string | Date`. Initial displayed date in uncontrolled mode - `defaultLevel`: `"month" | "year" | "decade"`. Initial displayed level in uncontrolled mode Known values: "decade", "month", "year". - `enableKeyboardNavigation`: `false | true`. Enable enhanced keyboard navigation (Ctrl/Cmd + Arrow keys for year navigation, Ctrl/Cmd + Shift + Arrow keys for decade navigation, Y key to open year view) Known values: false, true. - `firstDayOfWeek`: `0 | 2 | 3 | 4 | 5 | 6 | 1`. Number 0-6, where 0 – Sunday and 6 – Saturday. Known values: 0, 1, 2, 3, 4, 5, 6. - `fullWidth`: `false | true`. Determines whether the list should take the full width of its container Known values: false, true. - `headerControlsOrder`: `("next" | "previous" | "level")[]`. Controls order - `hideOutsideDates`: `false | true`. Determines whether outside dates should be hidden Known values: false, true. - `hideWeekdays`: `false | true`. Determines whether weekdays row should be hidden Known values: false, true. - `highlightToday`: `false | true`. Determines whether today should be highlighted with a border Known values: false, true. - `level`: `"month" | "year" | "decade"`. Current displayed level displayed in controlled mode Known values: "decade", "month", "year". - `locale`: `string`. Dayjs locale, defaults to value defined in DatesProvider - `maxDate`: `string | Date`. Maximum possible date in `YYYY-MM-DD` format or Date object - `maxLevel`: `"month" | "year" | "decade"`. Max level that user can go up to (decade, year, month) Known values: "decade", "month", "year". - `minDate`: `string | Date`. Minimum possible date in `YYYY-MM-DD` format or Date object - `minLevel`: `"month" | "year" | "decade"`. Min level that user can go down to (decade, year, month) Known values: "decade", "month", "year". - `nextIcon`: `React.ReactNode`. Change next icon - `nextLabel`: `string`. Next button `aria-label` - `numberOfColumns`: `number`. Number of columns displayed next to each other - `previousIcon`: `React.ReactNode`. Change previous icon - `previousLabel`: `string`. Previous button `aria-label` - `size`: `"xs" | "sm" | "md" | "lg" | "xl"`. Component size Known values: "lg", "md", "sm", "xl", "xs". - `static`: `false | true`. Determines whether days should be static, static days can be used to display month if it is not expected that user will interact with the component in any way Known values: false, true. - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - `weekendDays`: `DayOfWeek[]`. Indices of weekend days, 0-6, where 0 is Sunday and 6 is Saturday. The default value is defined by `DatesProvider`. - `withCellSpacing`: `false | true`. Determines whether controls should be separated Known values: false, true. - `withNativeLevelSelect`: `false | true`. Determines whether level select controls should be rendered as native `` elements Known values: false, true. - `withNext`: `false | true`. Determines whether next control should be rendered Known values: false, true. - `withPrevious`: `false | true`. Determines whether previous control should be rendered Known values: false, true. - `yearsSelectRange`: `[number, number]`. Year range for native level select, tuple of `[startYear, endYear]`. Defaults to `[currentYear - 100, currentYear + 50]` or values derived from `minDate`/`maxDate` if set. - Include a textual date when the visual calendar carries meaning. [Upstream documentation for CalendarHeader](https://mantine.dev/dates/calendar-header/) ## CandlestickChart @mantine/charts; charts; safety: wrapped. - `accessibilityLayer`: `false | true`. Determines whether the chart should be keyboard-navigable with the recharts accessibility layer, `true` by default Known values: false, true. - `attributes`: `{ grid?: Record; root?: Record; tooltip?: Record; container?: Record; ... 12 more ...; candle?: Record<...>; }`. - `candleStrokeWidth`: `number`. Stroke width of the candle wick and body outline - `color`: `string`. - `composedChartProps`: `(CartesianChartProps & { ref?: React.Ref; })`. Props passed down to recharts `ComposedChart` component - `data`: `Record[]`. Required. Data used to display chart - `dataKey`: `string`. Required. Key of the `data` object for x-axis values - `dataKeys`: `CandlestickChartDataKeys`. Keys of the `data` object used to read open, high, low and close values - `downColor`: `DefaultMantineColor`. Color of candles with `close < open`, key of `theme.colors` or any valid CSS color Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `gridAxis`: `"none" | "x" | "y" | "xy"`. Specifies which lines should be displayed in the grid, `'x'` by default Known values: "none", "x", "xy", "y". - `gridColor`: `DefaultMantineColor`. Color of the grid and cursor lines, by default depends on color scheme Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `gridProps`: `Omit`. Props passed down to the `CartesianGrid` component - `labels`: `Partial`. Labels of open, high, low and close values displayed in the tooltip - `maxCandleWidth`: `number`. Maximum candle width in px - `referenceAreas`: `ChartReferenceAreaProps[]`. Reference areas that should be displayed on the chart - `referenceDots`: `ChartReferenceDotProps[]`. Reference dots that should be displayed on the chart - `referenceLines`: `ChartReferenceLineProps[]`. Reference lines that should be displayed on the chart - `textColor`: `DefaultMantineColor`. Color of the text displayed inside the chart, `'dimmed'` by default Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `tickLine`: `"none" | "x" | "y" | "xy"`. Specifies which axis should have tick line, `'y'` by default Known values: "none", "x", "xy", "y". - `tooltipAnimationDuration`: `number`. Tooltip position animation duration in ms, `0` by default - `tooltipProps`: `Omit, "ref">`. Props passed down to the `Tooltip` component - `unit`: `string`. Unit displayed next to each tick in y-axis - `unstyled`: `false | true`. Known values: false, true. - `upColor`: `DefaultMantineColor`. Color of candles with `close >= open`, key of `theme.colors` or any valid CSS color Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `variant`: `string`. - `withTooltip`: `false | true`. Determines whether chart tooltip should be displayed, `true` by default Known values: false, true. - `withXAxis`: `false | true`. Determines whether x-axis should be displayed, `true` by default Known values: false, true. - `withYAxis`: `false | true`. Determines whether y-axis should be displayed, `true` by default Known values: false, true. - `xAxisLabel`: `string`. A label to display below the x-axis - `xAxisProps`: `Omit`. Props passed down to the `XAxis` recharts component - `yAxisLabel`: `string`. A label to display next to the y-axis - `yAxisProps`: `Omit`. Props passed down to the `YAxis` recharts component - Include a nearby text summary of the chart data. [Upstream documentation for CandlestickChart](https://mantine.dev/charts/candlestick-chart/) ## Card @mantine/core; layout; safety: wrapped. Subcomponents: Card.Section. - `attributes`: `{ section?: Record; root?: Record; }`. - `orientation`: `"horizontal" | "vertical"`. Card orientation Known values: "horizontal", "vertical". - `padding`: `MantineSpacing`. Key of `theme.spacing` or any valid CSS value to set padding Known values: "lg", "md", "sm", "xl", "xs". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Keep visual order consistent with reading order. [Upstream documentation for Card](https://mantine.dev/core/card/) ## Card.Section @mantine/core; layout; safety: wrapped. - `inheritPadding`: `false | true`. If set, the section inherits padding from the parent `Card` Known values: false, true. - `styles`: `Partial>`. - `variant`: `string`. - Keep visual order consistent with reading order. [Upstream documentation for Card.Section](https://mantine.dev/core/card/) ## CardSection @mantine/core; layout; safety: wrapped. - `inheritPadding`: `false | true`. If set, the section inherits padding from the parent `Card` Known values: false, true. - `styles`: `Partial>`. - `variant`: `string`. - Keep visual order consistent with reading order. [Upstream documentation for CardSection](https://mantine.dev/core/card-section/) ## Cascader @mantine/core; content; safety: wrapped. - `allowDeselect`: `false | true`. If set, the selected value can be deselected by selecting it again Known values: false, true. - `attributes`: `{ input?: Record; label?: Record; option?: Record; section?: Record; ... 21 more ...; flatOption?: Record<...>; }`. - `changeOnSelect`: `false | true`. If set, any intermediate option can be selected, not only leaf options Known values: false, true. - `checkIconPosition`: `"left" | "right"`. Position of the check icon relative to the option label Known values: "left", "right". - `chevronColor`: `DefaultMantineColor`. Controls the default chevron color Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `clearButtonProps`: `InputClearButtonProps`. Props passed down to the clear button - `clearSectionMode`: `"both" | "rightSection" | "clear"`. Determines how the clear button and `rightSection` are rendered Known values: "both", "clear", "rightSection". - `clearable`: `false | true`. If set, the clear button is displayed when a value is selected Known values: false, true. - `closeOnSelect`: `false | true`. Determines whether the dropdown should be closed when a value is selected, defaults to `!allowDeselect` Known values: false, true. - `color`: `string`. - `columnWidth`: `string | number`. Width of each column - `comboboxProps`: `Record`. Props passed down to the underlying `Combobox` component - `data`: `CascaderOption[]`. Required. Hierarchical options data - `defaultDropdownOpened`: `false | true`. Uncontrolled dropdown opened state Known values: false, true. - `defaultSearchValue`: `string`. Uncontrolled search value - `defaultValue`: `string[] | null`. Uncontrolled selected path from root to node - `description`: `React.ReactNode`. Contents of `Input.Description` component. If not set, description is not displayed. - `descriptionProps`: `(InputDescriptionProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Description` component - `dropdownOpened`: `false | true`. Controlled dropdown opened state Known values: false, true. - `error`: `React.ReactNode`. Contents of `Input.Error` component. If not set, error is not displayed. - `errorProps`: `(InputErrorProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Error` component - `expandTrigger`: `"hover" | "click"`. Determines how the next column is opened Known values: "click", "hover". - `hiddenInputProps`: `Omit, HTMLInputElement>, "value">`. Props passed down to the hidden input - `inputSize`: `string`. HTML `size` attribute for the input element (number of visible characters) - `inputWrapperOrder`: `("input" | "label" | "description" | "error")[]`. Controls order and visibility of wrapper elements. Only elements included in this array will be rendered. - `label`: `React.ReactNode`. Contents of `Input.Label` component. If not set, label is not displayed. - `labelProps`: `(InputLabelProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Label` component - `leftSection`: `React.ReactNode`. Content section displayed on the left side of the input - `leftSectionPointerEvents`: `"-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset" | "none" | "auto" | "all" | "fill" | "stroke" | "painted" | "visible" | "visibleFill" | "visiblePainted" | "visibleStroke"`. Sets `pointer-events` styles on the `leftSection` element. Use `'all'` when section contains interactive elements (buttons, links). Known values: "-moz-initial", "all", "auto", "fill", "inherit", "initial", "none", "painted", "revert", "revert-layer", "stroke", "unset", "visible", "visibleFill", "visiblePainted", "visibleStroke". - `leftSectionProps`: `React.DetailedHTMLProps, HTMLDivElement>`. Props passed down to the `leftSection` element - `leftSectionWidth`: `Property.Width`. Left section width, used to set `width` of the section and input `padding-left`, by default equals to the input height - `loading`: `false | true`. Displays loading indicator in the left or right section Known values: false, true. - `loadingPosition`: `"left" | "right"`. Position of the loading indicator Known values: "left", "right". - `maxDisplayedLevels`: `number`. Maximum number of columns (levels) displayed next to each other, deeper levels replace earlier ones - `maxDropdownHeight`: `string | number`. Max height of a column before it becomes scrollable - `nextLevelsControlLabel`: `string`. `aria-label` and `title` of the control that reveals levels hidden after the visible ones by `maxDisplayedLevels` - `nothingFoundMessage`: `React.ReactNode`. Message displayed when there are no options or search results - `openOnFocus`: `false | true`. Opens the dropdown when the input is focused in `searchable` mode Known values: false, true. - `pointer`: `false | true`. Determines whether the input should have `cursor: pointer` style. Use when input acts as a button-like trigger (e.g., `component="button"` for Select/DatePicker). Known values: false, true. - `previousLevelsControlLabel`: `string`. `aria-label` and `title` of the control that reveals levels hidden before the visible ones by `maxDisplayedLevels` - `rightSection`: `React.ReactNode`. Content section displayed on the right side of the input - `rightSectionPointerEvents`: `"-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset" | "none" | "auto" | "all" | "fill" | "stroke" | "painted" | "visible" | "visibleFill" | "visiblePainted" | "visibleStroke"`. Sets `pointer-events` styles on the `rightSection` element. Use `'all'` when section contains interactive elements (buttons, links). Known values: "-moz-initial", "all", "auto", "fill", "inherit", "initial", "none", "painted", "revert", "revert-layer", "stroke", "unset", "visible", "visibleFill", "visiblePainted", "visibleStroke". - `rightSectionProps`: `React.DetailedHTMLProps, HTMLDivElement>`. Props passed down to the `rightSection` element - `rightSectionWidth`: `Property.Width`. Right section width, used to set `width` of the section and input `padding-right`, by default equals to the input height - `safeAreaPolygon`: `boolean | CascaderSafeAreaPolygonOptions`. Determines whether the next column stays open while the cursor moves toward it, applicable only when `expandTrigger="hover"`. Pass an object to configure safe polygon behavior. - `scrollAreaProps`: `ScrollAreaProps`. Props passed down to the dropdown `ScrollArea` - `searchValue`: `string`. Controlled search value - `searchable`: `false | true`. If set, options can be searched by their flattened paths Known values: false, true. - `separator`: `React.ReactNode`. Path separator displayed in the input and search results - `size`: `MantineSize | (string & {})`. Controls input `height`, horizontal `padding`, and `font-size` Known values: "lg", "md", "sm", "xl", "xs". - `success`: `React.ReactNode`. Contents of `Input.Success` component. If not set, success is not displayed. - `successProps`: `(InputSuccessProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Success` component - `type`: `HTMLInputTypeAttribute`. Known values: "button", "checkbox", "color", "date", "datetime-local", "email", "file", "hidden", "image", "month", "number", "password", "radio", "range", "reset", "search", "submit", "tel", "text", "time", "url", "week". - `unstyled`: `false | true`. Known values: false, true. - `value`: `string[] | null`. Controlled selected path from root to node - `variant`: `(string & {}) | InputVariant`. Known values: "default", "filled", "unstyled". - `withAsterisk`: `false | true`. If set, the required asterisk is displayed next to the label. Overrides `required` prop. Does not add required attribute to the input. Known values: false, true. - `withCheckIcon`: `false | true`. If set, the check icon is displayed on the selected option Known values: false, true. - `withColumns`: `false | true`. Renders the dropdown as cascading columns. When `false`, options are rendered as a flat list of paths, the same way as search results (useful for narrow/mobile layouts) Known values: false, true. - `withErrorStyles`: `false | true`. Determines whether the input should have red border and red text color when the `error` prop is set Known values: false, true. - `withSuccessStyles`: `false | true`. Determines whether the input should have green border when the `success` prop is set Known values: false, true. - `wrapperProps`: `WrapperProps`. Props passed down to the root element - Provide meaningful text alternatives for non-text content. [Upstream documentation for Cascader](https://mantine.dev/core/cascader/) ## Center @mantine/core; layout; safety: wrapped. - `attributes`: `{ root?: Record; }`. - `inline`: `false | true`. If set, `inline-flex` is used instead of `flex` Known values: false, true. - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Keep visual order consistent with reading order. [Upstream documentation for Center](https://mantine.dev/core/center/) ## ChartBrush @mantine/charts; charts; safety: wrapped. - `alwaysShowText`: `false | true`. Known values: false, true. - `ariaLabel`: `string`. - `attributes`: `{ brush?: Record; }`. - `color`: `string`. - `display`: `string | number`. - `dy`: `number`. - `endIndex`: `number`. The default end index of brush. If the option is not set, the end index will be calculated by the length of data. - `gap`: `number`. Number of data points to skip between chart refreshes. - `height`: `number`. Height of the brush in pixels. - `leaveTimeOut`: `number`. - `opacity`: `string | number`. - `padding`: `Padding`. - `radius`: `string | number`. - `startIndex`: `number`. The default start index of brush. If the option is not set, the start index will be 0. - `travellerWidth`: `number`. The width of each traveller. - `type`: `string`. - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - `width`: `number`. Width of the brush in pixels. If undefined, defaults to the chart width. - `x`: `number`. The x-coordinate of brush. If left undefined, it will be computed from the chart's offset and margins. - `y`: `number`. The y-coordinate of brush. If left undefined, it will be computed from the chart's offset and margins. - Include a nearby text summary of the chart data. [Upstream documentation for ChartBrush](https://mantine.dev/charts/chart-brush/) ## ChartLegend @mantine/charts; charts; safety: wrapped. - `attributes`: `{ legend?: Record; legendItem?: Record; legendItemColor?: Record; legendItemName?: Record<...>; }`. - `centered`: `false | true`. Determines whether the legend should be centered Known values: false, true. - `color`: `string`. - `legendPosition`: `"bottom" | "top" | "middle"`. Required. Position of the legend relative to the chart, used to apply margin on the corresponding side Known values: "bottom", "middle", "top". - `payload`: `readonly Record[]`. Chart data provided by recharts - `series`: `ChartSeries[]`. Data used for labels, only applicable for area charts: AreaChart, LineChart, BarChart - `showColor`: `false | true`. Determines whether color swatch should be shown next to the label Known values: false, true. - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Include a nearby text summary of the chart data. [Upstream documentation for ChartLegend](https://mantine.dev/charts/chart-legend/) ## ChartTooltip @mantine/charts; charts; safety: wrapped. - `attributes`: `{ tooltip?: Record; tooltipItem?: Record; tooltipItemBody?: Record; tooltipItemColor?: Record<...>; tooltipItemName?: Record<...>; tooltipItemData?: Record<...>; tooltipLabel?: Record<...>; tool...`. - `color`: `string`. - `label`: `React.ReactNode`. Main tooltip label - `payload`: `Record[] | readonly Record[]`. Chart data provided by recharts - `segmentId`: `string | number`. Segment to display data for, identified by its index in the data array (preferred, isolates duplicate names) or by its name. Only applicable when `type="radial"`. If not set, all data is rendered. - `series`: `ChartSeries[]`. Chart series data, applicable only for `area` type - `showColor`: `false | true`. Determines whether the color swatch should be visible Known values: false, true. - `type`: `"area" | "radial" | "scatter"`. Tooltip type that determines the content and styles, `area` for LineChart, AreaChart and BarChart, `radial` for DonutChart and PieChart Known values: "area", "radial", "scatter". - `unit`: `string`. Data units, provided by parent component - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Include a nearby text summary of the chart data. [Upstream documentation for ChartTooltip](https://mantine.dev/charts/chart-tooltip/) ## CheckIcon @mantine/core; content; safety: wrapped. - `color`: `string`. - `display`: `string | number`. - `opacity`: `string | number`. - `radius`: `string | number`. - `size`: `string | number`. - `type`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for CheckIcon](https://mantine.dev/core/check-icon/) ## Checkbox @mantine/core; interaction; safety: wrapped. Bind a temporary boolean input with `bind`. Initialize with `defaultChecked`; reset with `resetKey`. Subcomponents: Checkbox.Card, Checkbox.Group, Checkbox.Indicator. - `attributes`: `{ body?: Record; input?: Record; label?: Record; root?: Record; ... 4 more ...; labelWrapper?: Record<...>; }`. - `autoContrast`: `false | true`. If set, adjusts icon color based on background color for `filled` variant Known values: false, true. - `color`: `DefaultMantineColor`. Key of `theme.colors` or any valid CSS color to set input background color in checked state Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `description`: `React.ReactNode`. Description below the label - `error`: `React.ReactNode`. Error message below the label - `iconColor`: `DefaultMantineColor`. Key of `theme.colors` or any valid CSS color to set icon color. By default, depends on `theme.autoContrast`. Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `indeterminate`: `false | true`. Indeterminate state of the checkbox. If set, `checked` prop is dismissed. Known values: false, true. - `label`: `React.ReactNode`. `label` associated with the checkbox - `labelPosition`: `"left" | "right"`. Position of the label relative to the input Known values: "left", "right". - `size`: `MantineSize | (string & {})`. Controls size of the component Known values: "lg", "md", "sm", "xl", "xs". - `type`: `HTMLInputTypeAttribute`. Known values: "button", "checkbox", "color", "date", "datetime-local", "email", "file", "hidden", "image", "month", "number", "password", "radio", "range", "reset", "search", "submit", "tel", "text", "time", "url", "week". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `(string & {}) | CheckboxVariant`. Known values: "filled", "outline". - `withErrorStyles`: `false | true`. If set, applies error styles to the checkbox when `error` prop is set Known values: false, true. - `wrapperProps`: `(React.ClassAttributes & React.HTMLAttributes & DataAttributes)`. Props passed down to the root element - Provide a visible label or aria-label. [Upstream documentation for Checkbox](https://mantine.dev/core/checkbox/) ## Checkbox.Card @mantine/core; interaction; safety: wrapped. - `attributes`: `{ card?: Record; }`. - `color`: `string`. - `indeterminate`: `false | true`. Indeterminate state of the checkbox. If set, `checked` prop is ignored and `aria-checked` is set to `mixed` Known values: false, true. - `type`: `"button" | "submit" | "reset"`. Known values: "button", "reset", "submit". - `unstyled`: `false | true`. Known values: false, true. - `value`: `string`. Value of the checkbox, used with `Checkbox.Group` - `variant`: `string`. - Provide a visible label or aria-label. [Upstream documentation for Checkbox.Card](https://mantine.dev/core/checkbox/) ## Checkbox.Group @mantine/core; interaction; safety: wrapped. Bind a temporary string[] input with `bind`. Initialize with `defaultValue`; reset with `resetKey`. - `attributes`: `{ label?: Record; root?: Record; description?: Record; error?: Record; success?: Record<...>; required?: Record<...>; }`. - `color`: `string`. - `defaultValue`: `Value[]`. Default value for uncontrolled component - `description`: `React.ReactNode`. Contents of `Input.Description` component. If not set, description is not displayed. - `descriptionProps`: `(InputDescriptionProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Description` component - `error`: `React.ReactNode`. Contents of `Input.Error` component. If not set, error is not displayed. - `errorProps`: `(InputErrorProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Error` component - `hiddenInputProps`: `(React.ClassAttributes & React.InputHTMLAttributes & DataAttributes)`. Props passed down to the hidden input for uncontrolled forms - `hiddenInputValuesSeparator`: `string`. Separator for values in the hidden input for uncontrolled forms - `inputWrapperOrder`: `("input" | "label" | "description" | "error")[]`. Controls order and visibility of wrapper elements. Only elements included in this array will be rendered. - `label`: `React.ReactNode`. Contents of `Input.Label` component. If not set, label is not displayed. - `labelElement`: `"div" | "label"`. Root element for the label. Use `'div'` when wrapper contains multiple input elements and you need to handle `htmlFor` manually. Known values: "div", "label". - `labelProps`: `(InputLabelProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Label` component - `maxSelectedValues`: `number`. Maximum number of checkboxes that can be selected. When the limit is reached, unselected checkboxes will be disabled - `size`: `MantineSize | (string & {})`. Controls size of the `Input.Wrapper` Known values: "lg", "md", "sm", "xl", "xs". - `success`: `React.ReactNode`. Contents of `Input.Success` component. If not set, success is not displayed. - `successProps`: `(InputSuccessProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Success` component - `unstyled`: `false | true`. Known values: false, true. - `value`: `Value[]`. Controlled component value - `variant`: `string`. - `withAsterisk`: `false | true`. If set, the required asterisk is displayed next to the label. Overrides `required` prop. Does not add required attribute to the input. Known values: false, true. - `wrapperProps`: `(React.ClassAttributes & React.HTMLAttributes & DataAttributes)`. Props passed down to the root element (`Input.Wrapper` component) - Provide a visible label or aria-label. [Upstream documentation for Checkbox.Group](https://mantine.dev/core/checkbox/) ## Checkbox.Indicator @mantine/core; interaction; safety: wrapped. - `attributes`: `{ icon?: Record; indicator?: Record; }`. - `autoContrast`: `false | true`. If set, adjusts icon color based on background color for `filled` variant Known values: false, true. - `color`: `DefaultMantineColor`. Key of `theme.colors` or any valid CSS color to set input background color in checked state Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `iconColor`: `DefaultMantineColor`. Key of `theme.colors` or any valid CSS color to set icon color, by default value depends on `theme.autoContrast` Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `indeterminate`: `false | true`. Indeterminate state of the checkbox. If set, `checked` prop is ignored. Known values: false, true. - `size`: `number | MantineSize | (string & {})`. Controls size of the component Known values: "lg", "md", "sm", "xl", "xs". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `(string & {}) | CheckboxIndicatorVariant`. Known values: "filled", "outline". - Provide a visible label or aria-label. [Upstream documentation for Checkbox.Indicator](https://mantine.dev/core/checkbox/) ## CheckboxCard @mantine/core; content; safety: wrapped. - `attributes`: `{ card?: Record; }`. - `color`: `string`. - `indeterminate`: `false | true`. Indeterminate state of the checkbox. If set, `checked` prop is ignored and `aria-checked` is set to `mixed` Known values: false, true. - `type`: `"button" | "submit" | "reset"`. Known values: "button", "reset", "submit". - `unstyled`: `false | true`. Known values: false, true. - `value`: `string`. Value of the checkbox, used with `Checkbox.Group` - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for CheckboxCard](https://mantine.dev/core/checkbox-card/) ## CheckboxGroup @mantine/core; content; safety: wrapped. Bind a temporary string[] input with `bind`. Initialize with `defaultValue`; reset with `resetKey`. - `attributes`: `{ label?: Record; root?: Record; description?: Record; error?: Record; success?: Record<...>; required?: Record<...>; }`. - `color`: `string`. - `defaultValue`: `Value[]`. Default value for uncontrolled component - `description`: `React.ReactNode`. Contents of `Input.Description` component. If not set, description is not displayed. - `descriptionProps`: `(InputDescriptionProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Description` component - `error`: `React.ReactNode`. Contents of `Input.Error` component. If not set, error is not displayed. - `errorProps`: `(InputErrorProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Error` component - `hiddenInputProps`: `(React.ClassAttributes & React.InputHTMLAttributes & DataAttributes)`. Props passed down to the hidden input for uncontrolled forms - `hiddenInputValuesSeparator`: `string`. Separator for values in the hidden input for uncontrolled forms - `inputWrapperOrder`: `("input" | "label" | "description" | "error")[]`. Controls order and visibility of wrapper elements. Only elements included in this array will be rendered. - `label`: `React.ReactNode`. Contents of `Input.Label` component. If not set, label is not displayed. - `labelElement`: `"div" | "label"`. Root element for the label. Use `'div'` when wrapper contains multiple input elements and you need to handle `htmlFor` manually. Known values: "div", "label". - `labelProps`: `(InputLabelProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Label` component - `maxSelectedValues`: `number`. Maximum number of checkboxes that can be selected. When the limit is reached, unselected checkboxes will be disabled - `size`: `MantineSize | (string & {})`. Controls size of the `Input.Wrapper` Known values: "lg", "md", "sm", "xl", "xs". - `success`: `React.ReactNode`. Contents of `Input.Success` component. If not set, success is not displayed. - `successProps`: `(InputSuccessProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Success` component - `unstyled`: `false | true`. Known values: false, true. - `value`: `Value[]`. Controlled component value - `variant`: `string`. - `withAsterisk`: `false | true`. If set, the required asterisk is displayed next to the label. Overrides `required` prop. Does not add required attribute to the input. Known values: false, true. - `wrapperProps`: `(React.ClassAttributes & React.HTMLAttributes & DataAttributes)`. Props passed down to the root element (`Input.Wrapper` component) - Provide meaningful text alternatives for non-text content. [Upstream documentation for CheckboxGroup](https://mantine.dev/core/checkbox-group/) ## CheckboxIndicator @mantine/core; content; safety: wrapped. - `attributes`: `{ icon?: Record; indicator?: Record; }`. - `autoContrast`: `false | true`. If set, adjusts icon color based on background color for `filled` variant Known values: false, true. - `color`: `DefaultMantineColor`. Key of `theme.colors` or any valid CSS color to set input background color in checked state Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `iconColor`: `DefaultMantineColor`. Key of `theme.colors` or any valid CSS color to set icon color, by default value depends on `theme.autoContrast` Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `indeterminate`: `false | true`. Indeterminate state of the checkbox. If set, `checked` prop is ignored. Known values: false, true. - `size`: `number | MantineSize | (string & {})`. Controls size of the component Known values: "lg", "md", "sm", "xl", "xs". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `(string & {}) | CheckboxIndicatorVariant`. Known values: "filled", "outline". - Provide meaningful text alternatives for non-text content. [Upstream documentation for CheckboxIndicator](https://mantine.dev/core/checkbox-indicator/) ## Chip @mantine/core; interaction; safety: wrapped. Subcomponents: Chip.Group. - `attributes`: `{ input?: Record; label?: Record; root?: Record; iconWrapper?: Record; checkIcon?: Record<...>; }`. - `autoContrast`: `false | true`. If set, adjusts text color based on the chip background color for `filled` variant Known values: false, true. - `color`: `DefaultMantineColor`. Key of `theme.colors` or any valid CSS color. Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `icon`: `React.ReactNode`. Any element or component to replace the default icon - `size`: `"xs" | "sm" | "md" | "lg" | "xl"`. Controls various properties related to the component size Known values: "lg", "md", "sm", "xl", "xs". - `type`: `"checkbox" | "radio"`. Chip input type Known values: "checkbox", "radio". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `(string & {}) | ChipVariant`. Known values: "filled", "light", "outline". - `wrapperProps`: `(React.ClassAttributes & React.HTMLAttributes & DataAttributes)`. Props passed down to the root element - Provide a visible label or aria-label. [Upstream documentation for Chip](https://mantine.dev/core/chip/) ## Chip.Group @mantine/core; interaction; safety: wrapped. Bind a temporary string input with `bind`. Initialize with `defaultValue`; reset with `resetKey`. - `defaultValue`: `(Multiple extends true ? Value[] : Value | null)`. Uncontrolled component initial value - `multiple`: `Multiple`. If set, multiple values can be selected - `value`: `(Multiple extends true ? Value[] : Value | null)`. Controlled component value - Provide a visible label or aria-label. [Upstream documentation for Chip.Group](https://mantine.dev/core/chip/) ## ChipGroup @mantine/core; content; safety: wrapped. Bind a temporary string input with `bind`. Initialize with `defaultValue`; reset with `resetKey`. - `defaultValue`: `(Multiple extends true ? Value[] : Value | null)`. Uncontrolled component initial value - `multiple`: `Multiple`. If set, multiple values can be selected - `value`: `(Multiple extends true ? Value[] : Value | null)`. Controlled component value - Provide meaningful text alternatives for non-text content. [Upstream documentation for ChipGroup](https://mantine.dev/core/chip-group/) ## CloseButton @mantine/core; interaction; safety: wrapped. - `attributes`: `{ root?: Record; }`. - `data-disabled`: `false | true`. Known values: false, true. - `icon`: `React.ReactNode`. React node to replace the default close icon. If set, `iconSize` prop is ignored. - `iconSize`: `string | number`. `X` icon `width` and `height` - `size`: `number | MantineSize | (string & {})`. Controls width and height of the button. Numbers are converted to rem. Known values: "lg", "md", "sm", "xl", "xs". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `(string & {}) | CloseButtonVariant`. Known values: "subtle", "transparent". - Provide a visible label or aria-label. [Upstream documentation for CloseButton](https://mantine.dev/core/close-button/) ## CloseIcon @mantine/core; content; safety: wrapped. - `color`: `string`. - `display`: `string | number`. - `opacity`: `string | number`. - `radius`: `string | number`. - `size`: `string`. Icon width and height, `var(--icon-size)` by default - `type`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for CloseIcon](https://mantine.dev/core/close-icon/) ## Code @mantine/core; content; safety: wrapped. - `attributes`: `{ root?: Record; }`. - `block`: `false | true`. If set, code is rendered in `pre` Known values: false, true. - `color`: `DefaultMantineColor`. Key of `theme.colors` or any valid CSS color, controls `background-color` of the code. By default, calculated based on the color scheme. Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for Code](https://mantine.dev/core/code/) ## Collapse @mantine/core; navigation; safety: wrapped. - `animateOpacity`: `false | true`. Determines whether the opacity is animated Known values: false, true. - `color`: `string`. - `expanded`: `false | true`. Required. Expanded state Known values: false, true. - `keepMounted`: `false | true`. If set, the element is kept in the DOM when collapsed. When `true`, React 19 `Activity` is used to preserve state while collapsed. When `false`, the element is unmounted after the exit animation. Known values: false, true. - `keepMountedMode`: `"activity" | "display-none"`. Controls how the element is hidden when `keepMounted` is set: `'activity'` – hidden with React 19 `Activity` component, `'display-none'` – hidden with `display: none` styles Known values: "activity", "display-none". - `orientation`: `"horizontal" | "vertical"`. Collapse orientation Known values: "horizontal", "vertical". - `transitionDuration`: `number`. Transition duration in ms - `transitionTimingFunction`: `string`. Transition timing function - Provide an accessible label for controls without visible text. [Upstream documentation for Collapse](https://mantine.dev/core/collapse/) ## Collapsible @homarr/widgets; interaction; safety: allowed. Shows and hides a bounded content section. - `defaultOpen`: `boolean`. - `title`: `string`. Required. - Provide a visible label or aria-label. [Upstream documentation for Collapsible](https://homarr.dev/docs/management/custom-widgets/) ## ColorInput @mantine/core; interaction; safety: wrapped. Bind a temporary string input with `bind`. Initialize with `defaultValue`; reset with `resetKey`. - `attributes`: `{ body?: Record; input?: Record; label?: Record; section?: Record; ... 19 more ...; swatch?: Record<...>; }`. - `closeOnColorSwatchClick`: `false | true`. If set, the dropdown is closed when one of the color swatches is clicked Known values: false, true. - `color`: `string`. - `defaultValue`: `string`. Uncontrolled component default value - `description`: `React.ReactNode`. Contents of `Input.Description` component. If not set, description is not displayed. - `descriptionProps`: `(InputDescriptionProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Description` component - `disallowInput`: `false | true`. If input is not allowed, the user can only pick value with color picker and swatches Known values: false, true. - `error`: `React.ReactNode`. Contents of `Input.Error` component. If not set, error is not displayed. - `errorProps`: `(InputErrorProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Error` component - `eyeDropperButtonProps`: `Record`. Props passed down to the eye dropper button - `eyeDropperIcon`: `React.ReactNode`. An icon to replace the default eye dropper icon - `fixOnBlur`: `false | true`. If set, the input value resets to the last known valid value when the input loses focus Known values: false, true. - `format`: `"hex" | "hexa" | "rgba" | "rgb" | "hsl" | "hsla"`. Color format. `hexa`, `rgba`, `hsla` values render alpha channel slider Known values: "hex", "hexa", "hsl", "hsla", "rgb", "rgba". - `fullWidth`: `false | true`. If set, the component takes 100% width of its container Known values: false, true. - `inputSize`: `string`. HTML `size` attribute for the input element (number of visible characters) - `inputWrapperOrder`: `("input" | "label" | "description" | "error")[]`. Controls order and visibility of wrapper elements. Only elements included in this array will be rendered. - `label`: `React.ReactNode`. Contents of `Input.Label` component. If not set, label is not displayed. - `labelProps`: `(InputLabelProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Label` component - `leftSection`: `React.ReactNode`. Content section displayed on the left side of the input - `leftSectionPointerEvents`: `"-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset" | "none" | "auto" | "all" | "fill" | "stroke" | "painted" | "visible" | "visibleFill" | "visiblePainted" | "visibleStroke"`. Sets `pointer-events` styles on the `leftSection` element. Use `'all'` when section contains interactive elements (buttons, links). Known values: "-moz-initial", "all", "auto", "fill", "inherit", "initial", "none", "painted", "revert", "revert-layer", "stroke", "unset", "visible", "visibleFill", "visiblePainted", "visibleStroke". - `leftSectionProps`: `React.DetailedHTMLProps, HTMLDivElement>`. Props passed down to the `leftSection` element - `leftSectionWidth`: `Property.Width`. Left section width, used to set `width` of the section and input `padding-left`, by default equals to the input height - `loading`: `false | true`. Displays loading indicator in the left or right section Known values: false, true. - `loadingPosition`: `"left" | "right"`. Position of the loading indicator Known values: "left", "right". - `pointer`: `false | true`. Determines whether the input should have `cursor: pointer` style. Use when input acts as a button-like trigger (e.g., `component="button"` for Select/DatePicker). Known values: false, true. - `popoverProps`: `PopoverProps`. Props passed down to the `Popover` component - `rightSection`: `React.ReactNode`. Content section displayed on the right side of the input - `rightSectionPointerEvents`: `"-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset" | "none" | "auto" | "all" | "fill" | "stroke" | "painted" | "visible" | "visibleFill" | "visiblePainted" | "visibleStroke"`. Sets `pointer-events` styles on the `rightSection` element. Use `'all'` when section contains interactive elements (buttons, links). Known values: "-moz-initial", "all", "auto", "fill", "inherit", "initial", "none", "painted", "revert", "revert-layer", "stroke", "unset", "visible", "visibleFill", "visiblePainted", "visibleStroke". - `rightSectionProps`: `React.DetailedHTMLProps, HTMLDivElement>`. Props passed down to the `rightSection` element - `rightSectionWidth`: `Property.Width`. Right section width, used to set `width` of the section and input `padding-right`, by default equals to the input height - `size`: `MantineSize | (string & {})`. Controls input `height`, horizontal `padding`, and `font-size` Known values: "lg", "md", "sm", "xl", "xs". - `success`: `React.ReactNode`. Contents of `Input.Success` component. If not set, success is not displayed. - `successProps`: `(InputSuccessProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Success` component - `swatches`: `string[]`. A list of colors used to display swatches list below the color picker - `swatchesPerRow`: `number`. Number of swatches per row - `type`: `HTMLInputTypeAttribute`. Known values: "button", "checkbox", "color", "date", "datetime-local", "email", "file", "hidden", "image", "month", "number", "password", "radio", "range", "reset", "search", "submit", "tel", "text", "time", "url", "week". - `unstyled`: `false | true`. Known values: false, true. - `value`: `string`. Controlled component value - `variant`: `(string & {}) | InputVariant`. Known values: "default", "filled", "unstyled". - `withAsterisk`: `false | true`. If set, the required asterisk is displayed next to the label. Overrides `required` prop. Does not add required attribute to the input. Known values: false, true. - `withErrorStyles`: `false | true`. Determines whether the input should have red border and red text color when the `error` prop is set Known values: false, true. - `withEyeDropper`: `false | true`. If set, the eye dropper button is displayed in the right section Known values: false, true. - `withPicker`: `false | true`. If `false`, the component displays only swatches Known values: false, true. - `withPreview`: `false | true`. If set, the preview color swatch is displayed in the left section of the input Known values: false, true. - `withSuccessStyles`: `false | true`. Determines whether the input should have green border when the `success` prop is set Known values: false, true. - `wrapperProps`: `WrapperProps`. Props passed down to the root element - Provide a visible label or aria-label. [Upstream documentation for ColorInput](https://mantine.dev/core/color-input/) ## ColorPicker @mantine/core; interaction; safety: wrapped. Bind a temporary string input with `bind`. Initialize with `defaultValue`; reset with `resetKey`. - `alphaLabel`: `string`. Alpha slider `aria-label` - `attributes`: `{ body?: Record; slider?: Record; wrapper?: Record; sliderOverlay?: Record; ... 6 more ...; swatch?: Record<...>; }`. - `color`: `string`. - `defaultValue`: `string`. Uncontrolled component default value - `focusable`: `false | true`. If set, interactive elements (sliders thumbs and swatches) are focusable with keyboard Known values: false, true. - `format`: `"hex" | "hexa" | "rgba" | "rgb" | "hsl" | "hsla"`. Color format. `hexa`, `rgba`, `hsla` values render alpha channel slider Known values: "hex", "hexa", "hsl", "hsla", "rgb", "rgba". - `fullWidth`: `false | true`. If set, the component takes 100% width of its container Known values: false, true. - `hiddenInputProps`: `(React.ClassAttributes & React.InputHTMLAttributes & DataAttributes)`. Props spread to the hidden input - `hueLabel`: `string`. Hue slider `aria-label` - `saturationLabel`: `string`. Saturation slider `aria-label` - `size`: `MantineSize | (string & {})`. Component size Known values: "lg", "md", "sm", "xl", "xs". - `swatches`: `string[]`. A list of colors used to display swatches list below the color picker - `swatchesPerRow`: `number`. Number of swatches per row - `unstyled`: `false | true`. Known values: false, true. - `value`: `string`. Controlled component value - `variant`: `string`. - `withPicker`: `false | true`. If `false`, the component displays only swatches Known values: false, true. - Provide a visible label or aria-label. [Upstream documentation for ColorPicker](https://mantine.dev/core/color-picker/) ## ColorSchemeScript @mantine/core; blocked; safety: denied. Unavailable: Writes global document state [Upstream documentation for ColorSchemeScript](https://mantine.dev/core/color-scheme-script/) ## ColorSwatch @mantine/core; content; safety: wrapped. - `attributes`: `{ root?: Record; alphaOverlay?: Record; shadowOverlay?: Record; colorOverlay?: Record<...>; childrenOverlay?: Record<...>; }`. - `color`: `string`. Required. Valid CSS color to display - `size`: `Property.Width`. Swatch `width` and `height`, any valid CSS value, numbers are converted to rem. - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - `withShadow`: `false | true`. If set, the swatch has inner `box-shadow` Known values: false, true. - Provide meaningful text alternatives for non-text content. [Upstream documentation for ColorSwatch](https://mantine.dev/core/color-swatch/) ## Combobox @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks Subcomponents: Combobox.Chevron, Combobox.ClearButton, Combobox.Dropdown, Combobox.DropdownTarget, Combobox.Empty, Combobox.EventsTarget, Combobox.Footer, Combobox.Group, Combobox.Header, Combobox.HiddenInput, Combobox.Option, Combobox.Options, Combobox.Search, Combobox.Target. [Upstream documentation for Combobox](https://mantine.dev/core/combobox/) ## Combobox.Chevron @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for Combobox.Chevron](https://mantine.dev/core/combobox/) ## Combobox.ClearButton @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for Combobox.ClearButton](https://mantine.dev/core/combobox/) ## Combobox.Dropdown @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for Combobox.Dropdown](https://mantine.dev/core/combobox/) ## Combobox.DropdownTarget @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for Combobox.DropdownTarget](https://mantine.dev/core/combobox/) ## Combobox.Empty @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for Combobox.Empty](https://mantine.dev/core/combobox/) ## Combobox.EventsTarget @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for Combobox.EventsTarget](https://mantine.dev/core/combobox/) ## Combobox.Footer @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for Combobox.Footer](https://mantine.dev/core/combobox/) ## Combobox.Group @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for Combobox.Group](https://mantine.dev/core/combobox/) ## Combobox.Header @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for Combobox.Header](https://mantine.dev/core/combobox/) ## Combobox.HiddenInput @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for Combobox.HiddenInput](https://mantine.dev/core/combobox/) ## Combobox.Option @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for Combobox.Option](https://mantine.dev/core/combobox/) ## Combobox.Options @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for Combobox.Options](https://mantine.dev/core/combobox/) ## Combobox.Search @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for Combobox.Search](https://mantine.dev/core/combobox/) ## Combobox.Target @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for Combobox.Target](https://mantine.dev/core/combobox/) ## ComboboxChevron @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for ComboboxChevron](https://mantine.dev/core/combobox-chevron/) ## ComboboxClearButton @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for ComboboxClearButton](https://mantine.dev/core/combobox-clear-button/) ## ComboboxDropdown @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for ComboboxDropdown](https://mantine.dev/core/combobox-dropdown/) ## ComboboxDropdownTarget @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for ComboboxDropdownTarget](https://mantine.dev/core/combobox-dropdown-target/) ## ComboboxEmpty @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for ComboboxEmpty](https://mantine.dev/core/combobox-empty/) ## ComboboxEventsTarget @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for ComboboxEventsTarget](https://mantine.dev/core/combobox-events-target/) ## ComboboxFooter @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for ComboboxFooter](https://mantine.dev/core/combobox-footer/) ## ComboboxGroup @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for ComboboxGroup](https://mantine.dev/core/combobox-group/) ## ComboboxHeader @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for ComboboxHeader](https://mantine.dev/core/combobox-header/) ## ComboboxHiddenInput @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for ComboboxHiddenInput](https://mantine.dev/core/combobox-hidden-input/) ## ComboboxOption @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for ComboboxOption](https://mantine.dev/core/combobox-option/) ## ComboboxOptions @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for ComboboxOptions](https://mantine.dev/core/combobox-options/) ## ComboboxPopover @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks Subcomponents: ComboboxPopover.Target. [Upstream documentation for ComboboxPopover](https://mantine.dev/core/combobox-popover/) ## ComboboxPopover.Target @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for ComboboxPopover.Target](https://mantine.dev/core/combobox-popover/) ## ComboboxPopoverTarget @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for ComboboxPopoverTarget](https://mantine.dev/core/combobox-popover-target/) ## ComboboxSearch @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for ComboboxSearch](https://mantine.dev/core/combobox-search/) ## ComboboxTarget @mantine/core; blocked; safety: denied. Unavailable: Low-level composition primitive that requires authored callbacks [Upstream documentation for ComboboxTarget](https://mantine.dev/core/combobox-target/) ## CompositeChart @mantine/charts; charts; safety: wrapped. - `accessibilityLayer`: `false | true`. Determines whether the chart should be keyboard-navigable with the recharts accessibility layer, `true` by default Known values: false, true. - `activeDotProps`: `MantineChartDotProps`. Props passed down to all active dots. Ignored if `withDots={false}` is set. - `attributes`: `{ area?: Record; legend?: Record; line?: Record; grid?: Record; ... 19 more ...; tooltipBody?: Record<...>; }`. - `brushProps`: `Omit`. Props passed down to the `Brush` component - `color`: `string`. - `composedChartProps`: `(CartesianChartProps & { ref?: React.Ref; })`. Props passed down to recharts `AreaChart` component - `connectNulls`: `false | true`. Determines whether points with `null` values should be connected Known values: false, true. - `curveType`: `"step" | "bump" | "linear" | "natural" | "monotone" | "stepBefore" | "stepAfter"`. Type of the curve Known values: "bump", "linear", "monotone", "natural", "step", "stepAfter", "stepBefore". - `data`: `Record[]`. Required. Data used to display chart - `dataKey`: `string`. Required. Key of the `data` object for x-axis values - `dotProps`: `MantineChartDotProps`. Props passed down to all dots. Ignored if `withDots={false}` is set. - `gridAxis`: `"none" | "x" | "y" | "xy"`. Specifies which lines should be displayed in the grid, `'x'` by default Known values: "none", "x", "xy", "y". - `gridColor`: `DefaultMantineColor`. Color of the grid and cursor lines, by default depends on color scheme Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `gridProps`: `Omit`. Props passed down to the `CartesianGrid` component - `legendProps`: `Omit`. Props passed down to the `Legend` component - `maxBarWidth`: `number`. Maximum bar width in px - `minBarSize`: `number`. Sets minimum height of the bar in px - `referenceAreas`: `ChartReferenceAreaProps[]`. Reference areas that should be displayed on the chart - `referenceDots`: `ChartReferenceDotProps[]`. Reference dots that should be displayed on the chart - `referenceLines`: `ChartReferenceLineProps[]`. Reference lines that should be displayed on the chart - `rightYAxisLabel`: `string`. A label to display next to the right y-axis - `rightYAxisProps`: `Omit`. Props passed down to the `YAxis` recharts component rendered on the right side - `series`: `CompositeChartSeries[]`. Required. An array of objects with `name` and `color` keys. Determines which data should be consumed from the `data` array. - `strokeWidth`: `number`. Stroke width for the chart lines - `textColor`: `DefaultMantineColor`. Color of the text displayed inside the chart, `'dimmed'` by default Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `tickLine`: `"none" | "x" | "y" | "xy"`. Specifies which axis should have tick line, `'y'` by default Known values: "none", "x", "xy", "y". - `tooltipAnimationDuration`: `number`. Tooltip position animation duration in ms, `0` by default - `tooltipProps`: `Omit, "ref">`. Props passed down to the `Tooltip` component - `unit`: `string`. Unit displayed next to each tick in y-axis - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - `withBarValueLabel`: `false | true`. Determines whether a label with bar value should be displayed on top of each bar Known values: false, true. - `withBrush`: `false | true`. Determines whether a brush (range selector) should be displayed under the chart, `false` by default Known values: false, true. - `withDots`: `false | true`. Determines whether dots should be displayed Known values: false, true. - `withLegend`: `false | true`. Determines whether chart legend should be displayed, `false` by default Known values: false, true. - `withPointLabels`: `false | true`. Determines whether each point should have associated label Known values: false, true. - `withRightYAxis`: `false | true`. Determines whether additional y-axis should be displayed on the right side of the chart, `false` by default Known values: false, true. - `withTooltip`: `false | true`. Determines whether chart tooltip should be displayed, `true` by default Known values: false, true. - `withXAxis`: `false | true`. Determines whether x-axis should be displayed, `true` by default Known values: false, true. - `withYAxis`: `false | true`. Determines whether y-axis should be displayed, `true` by default Known values: false, true. - `xAxisLabel`: `string`. A label to display below the x-axis - `xAxisProps`: `Omit`. Props passed down to the `XAxis` recharts component - `yAxisLabel`: `string`. A label to display next to the y-axis - `yAxisProps`: `Omit`. Props passed down to the `YAxis` recharts component - Include a nearby text summary of the chart data. [Upstream documentation for CompositeChart](https://mantine.dev/charts/composite-chart/) ## Container @mantine/core; layout; safety: wrapped. - `attributes`: `{ root?: Record; }`. - `color`: `string`. - `fluid`: `false | true`. If set, the container takes 100% width of its parent and `size` prop is ignored. Known values: false, true. - `size`: `number | MantineSize | (string & {})`. `max-width` of the container, value is not responsive – it is the same for all screen sizes. Numbers are converted to rem. Ignored when `fluid` prop is set. Known values: "lg", "md", "sm", "xl", "xs". - `strategy`: `"block" | "grid"`. Centering strategy Known values: "block", "grid". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Keep visual order consistent with reading order. [Upstream documentation for Container](https://mantine.dev/core/container/) ## CopyButton @mantine/core; interaction; safety: wrapped. - `timeout`: `number`. Copied status timeout in ms - `value`: `string`. Required. Value that is copied to the clipboard when the button is clicked - Provide a visible label or aria-label. [Upstream documentation for CopyButton](https://mantine.dev/core/copy-button/) ## DataList @mantine/core; content; safety: wrapped. Subcomponents: DataList.Item, DataList.ItemLabel, DataList.ItemValue. - `attributes`: `{ root?: Record; item?: Record; itemLabel?: Record; itemValue?: Record; }`. - `color`: `string`. - `gap`: `MantineSpacing`. Key of `theme.spacing` or any valid CSS value to set gap between items Known values: "lg", "md", "sm", "xl", "xs". - `labelWidth`: `Property.MinWidth`. Controls min-width of the label (dt) element, any valid CSS value - `orientation`: `"horizontal" | "vertical"`. Controls arrangement of label and value within each item. `horizontal` renders label and value side by side, `vertical` stacks label on top of value Known values: "horizontal", "vertical". - `size`: `"xs" | "sm" | "md" | "lg" | "xl"`. Controls `font-size` and `line-height` Known values: "lg", "md", "sm", "xl", "xs". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - `withDivider`: `false | true`. Adds border between items Known values: false, true. - Provide meaningful text alternatives for non-text content. [Upstream documentation for DataList](https://mantine.dev/core/data-list/) ## DataList.Item @mantine/core; content; safety: wrapped. - `color`: `string`. - `styles`: `Partial>`. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for DataList.Item](https://mantine.dev/core/data-list/) ## DataList.ItemLabel @mantine/core; content; safety: wrapped. - `color`: `string`. - `styles`: `Partial>`. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for DataList.ItemLabel](https://mantine.dev/core/data-list/) ## DataList.ItemValue @mantine/core; content; safety: wrapped. - `color`: `string`. - `styles`: `Partial>`. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for DataList.ItemValue](https://mantine.dev/core/data-list/) ## DataListItem @mantine/core; content; safety: wrapped. - `color`: `string`. - `styles`: `Partial>`. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for DataListItem](https://mantine.dev/core/data-list-item/) ## DataListItemLabel @mantine/core; content; safety: wrapped. - `color`: `string`. - `styles`: `Partial>`. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for DataListItemLabel](https://mantine.dev/core/data-list-item-label/) ## DataListItemValue @mantine/core; content; safety: wrapped. - `color`: `string`. - `styles`: `Partial>`. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for DataListItemValue](https://mantine.dev/core/data-list-item-value/) ## DateInput @mantine/dates; dates; safety: wrapped. Bind a temporary string input with `bind`. Initialize with `defaultValue`; reset with `resetKey`. - `allowDeselect`: `false | true`. If set, the value can be deselected by deleting everything from the input or by clicking the selected date in the dropdown. By default, `true` if `clearable` prop is set, `false` otherwise. Known values: false, true. - `ariaLabels`: `CalendarAriaLabels`. `aria-label` attributes for controls on different levels - `attributes`: `{ input?: Record; label?: Record; section?: Record; root?: Record; ... 31 more ...; presetButton?: Record<...>; }`. - `clearButtonProps`: `React.DetailedHTMLProps, HTMLButtonElement>`. Props passed down to the clear button - `clearSectionMode`: `"both" | "rightSection" | "clear"`. Determines how the clear button and rightSection are rendered Known values: "both", "clear", "rightSection". - `clearable`: `false | true`. If set, clear button is displayed in the `rightSection` when the component has value. Ignored if `rightSection` prop is set. Known values: false, true. - `color`: `string`. - `columnsToScroll`: `number`. Number of columns to scroll with next/prev buttons, same as `numberOfColumns` if not set explicitly - `date`: `string | Date`. Displayed date in controlled mode - `defaultDate`: `string | Date`. Initial displayed date in uncontrolled mode - `defaultLevel`: `"month" | "year" | "decade"`. Initial displayed level (uncontrolled) Known values: "decade", "month", "year". - `defaultValue`: `DateValue`. Uncontrolled component default value - `description`: `React.ReactNode`. Contents of `Input.Description` component. If not set, description is not displayed. - `descriptionProps`: `(InputDescriptionProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Description` component - `error`: `React.ReactNode`. Contents of `Input.Error` component. If not set, error is not displayed. - `errorProps`: `(InputErrorProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Error` component - `firstDayOfWeek`: `0 | 2 | 3 | 4 | 5 | 6 | 1`. Number 0-6, where 0 – Sunday and 6 – Saturday. Known values: 0, 1, 2, 3, 4, 5, 6. - `fixOnBlur`: `false | true`. If set to `false`, invalid user input is preserved and is not corrected on blur Known values: false, true. - `fullWidth`: `false | true`. Determines whether the calendar should take the full width of its container Known values: false, true. - `hasNextLevel`: `false | true`. Determines whether next level button should be enabled Known values: false, true. - `headerControlsOrder`: `("next" | "previous" | "level")[]`. Controls order - `hideOutsideDates`: `false | true`. Determines whether outside dates should be hidden Known values: false, true. - `hideWeekdays`: `false | true`. Determines whether weekdays row should be hidden Known values: false, true. - `highlightToday`: `false | true`. Determines whether today should be highlighted with a border Known values: false, true. - `inputSize`: `string`. HTML `size` attribute for the input element (number of visible characters) - `inputWrapperOrder`: `("input" | "label" | "description" | "error")[]`. Controls order and visibility of wrapper elements. Only elements included in this array will be rendered. - `label`: `React.ReactNode`. Contents of `Input.Label` component. If not set, label is not displayed. - `labelProps`: `(InputLabelProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Label` component - `leftSection`: `React.ReactNode`. Content section displayed on the left side of the input - `leftSectionPointerEvents`: `"-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset" | "none" | "auto" | "all" | "fill" | "stroke" | "painted" | "visible" | "visibleFill" | "visiblePainted" | "visibleStroke"`. Sets `pointer-events` styles on the `leftSection` element. Use `'all'` when section contains interactive elements (buttons, links). Known values: "-moz-initial", "all", "auto", "fill", "inherit", "initial", "none", "painted", "revert", "revert-layer", "stroke", "unset", "visible", "visibleFill", "visiblePainted", "visibleStroke". - `leftSectionProps`: `React.DetailedHTMLProps, HTMLDivElement>`. Props passed down to the `leftSection` element - `leftSectionWidth`: `Property.Width`. Left section width, used to set `width` of the section and input `padding-left`, by default equals to the input height - `level`: `"month" | "year" | "decade"`. Current displayed level (controlled) Known values: "decade", "month", "year". - `loading`: `false | true`. Displays loading indicator in the left or right section Known values: false, true. - `loadingPosition`: `"left" | "right"`. Position of the loading indicator Known values: "left", "right". - `locale`: `string`. Dayjs locale, defaults to value defined in DatesProvider - `maxDate`: `string | Date`. Maximum possible date in `YYYY-MM-DD` format or Date object - `maxLevel`: `"month" | "year" | "decade"`. Max level that user can go up to Known values: "decade", "month", "year". - `minDate`: `string | Date`. Minimum possible date in `YYYY-MM-DD` format or Date object - `nextDisabled`: `false | true`. Disables next control Known values: false, true. - `nextIcon`: `React.ReactNode`. Change next icon - `nextLabel`: `string`. Next button `aria-label` - `numberOfColumns`: `number`. Number of columns displayed next to each other - `pointer`: `false | true`. Determines whether the input should have `cursor: pointer` style. Use when input acts as a button-like trigger (e.g., `component="button"` for Select/DatePicker). Known values: false, true. - `popoverProps`: `Partial>`. Props passed down to the `Popover` component - `presets`: `DatePickerPreset<"default">[]`. Predefined values to pick from - `previousDisabled`: `false | true`. Disables previous control Known values: false, true. - `previousIcon`: `React.ReactNode`. Change previous icon - `previousLabel`: `string`. Previous button `aria-label` - `rightSection`: `React.ReactNode`. Content section displayed on the right side of the input - `rightSectionPointerEvents`: `"-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset" | "none" | "auto" | "all" | "fill" | "stroke" | "painted" | "visible" | "visibleFill" | "visiblePainted" | "visibleStroke"`. Sets `pointer-events` styles on the `rightSection` element. Use `'all'` when section contains interactive elements (buttons, links). Known values: "-moz-initial", "all", "auto", "fill", "inherit", "initial", "none", "painted", "revert", "revert-layer", "stroke", "unset", "visible", "visibleFill", "visiblePainted", "visibleStroke". - `rightSectionProps`: `React.DetailedHTMLProps, HTMLDivElement>`. Props passed down to the `rightSection` element - `rightSectionWidth`: `Property.Width`. Right section width, used to set `width` of the section and input `padding-right`, by default equals to the input height - `size`: `"xs" | "sm" | "md" | "lg" | "xl"`. Component size Known values: "lg", "md", "sm", "xl", "xs". - `success`: `React.ReactNode`. Contents of `Input.Success` component. If not set, success is not displayed. - `successProps`: `(InputSuccessProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Success` component - `type`: `HTMLInputTypeAttribute`. Known values: "button", "checkbox", "color", "date", "datetime-local", "email", "file", "hidden", "image", "month", "number", "password", "radio", "range", "reset", "search", "submit", "tel", "text", "time", "url", "week". - `unstyled`: `false | true`. Known values: false, true. - `value`: `DateValue`. Controlled component value - `variant`: `(string & {}) | InputVariant`. Known values: "default", "filled", "unstyled". - `weekendDays`: `DayOfWeek[]`. Indices of weekend days, 0-6, where 0 is Sunday and 6 is Saturday. The default value is defined by `DatesProvider`. - `withAsterisk`: `false | true`. If set, the required asterisk is displayed next to the label. Overrides `required` prop. Does not add required attribute to the input. Known values: false, true. - `withCellSpacing`: `false | true`. Determines whether controls should be separated Known values: false, true. - `withErrorStyles`: `false | true`. Determines whether the input should have red border and red text color when the `error` prop is set Known values: false, true. - `withNativeLevelSelect`: `false | true`. Determines whether level select controls should be rendered as native `` elements Known values: false, true. - `withWeekNumbers`: `false | true`. Determines whether week numbers should be displayed Known values: false, true. - `yearsSelectRange`: `[number, number]`. Year range for native level select, tuple of `[startYear, endYear]`. Defaults to `[currentYear - 100, currentYear + 50]` or values derived from `minDate`/`maxDate` if set. - Include a textual date when the visual calendar carries meaning. [Upstream documentation for DatePicker](https://mantine.dev/dates/date-picker/) ## DatePickerInput @mantine/dates; dates; safety: wrapped. Bind a temporary string input with `bind`. Initialize with `defaultValue`; reset with `resetKey`. - `allowDeselect`: `(Type extends "default" ? boolean : never)`. Determines whether user can deselect the date by clicking on selected item, applicable only when type="default" - `allowSingleDateInRange`: `(Type extends "range" ? boolean : never)`. Determines whether a single day can be selected as range, applicable only when type="range" - `ariaLabels`: `CalendarAriaLabels`. `aria-label` attributes for controls on different levels - `attributes`: `{ input?: Record; label?: Record; section?: Record; root?: Record; ... 32 more ...; datePickerRoot?: Record<...>; }`. - `clearButtonProps`: `React.DetailedHTMLProps, HTMLButtonElement>`. Props passed down to the clear button - `clearSectionMode`: `"both" | "rightSection" | "clear"`. Determines how the clear button and rightSection are rendered Known values: "both", "clear", "rightSection". - `clearable`: `false | true`. If set, clear button is displayed in the `rightSection` when the component has value. Ignored if `rightSection` prop is set. Known values: false, true. - `closeOnChange`: `false | true`. Determines whether the dropdown is closed when date is selected, not applicable with `type="multiple"` Known values: false, true. - `color`: `string`. - `columnsToScroll`: `number`. Number of columns to scroll with next/prev buttons, same as `numberOfColumns` if not set explicitly - `date`: `string | Date`. Displayed date in controlled mode - `defaultDate`: `string | Date`. Initial displayed date in uncontrolled mode - `defaultLevel`: `"month" | "year" | "decade"`. Initial displayed level (uncontrolled) Known values: "decade", "month", "year". - `defaultValue`: `DatePickerValue`. Default value for uncontrolled component - `description`: `React.ReactNode`. Contents of `Input.Description` component. If not set, description is not displayed. - `descriptionProps`: `(InputDescriptionProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Description` component - `enableKeyboardNavigation`: `false | true`. Enable enhanced keyboard navigation (Ctrl/Cmd + Arrow keys for year navigation, Ctrl/Cmd + Shift + Arrow keys for decade navigation, Y key to open year view) Known values: false, true. - `error`: `React.ReactNode`. Contents of `Input.Error` component. If not set, error is not displayed. - `errorProps`: `(InputErrorProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Error` component - `firstDayOfWeek`: `0 | 2 | 3 | 4 | 5 | 6 | 1`. Number 0-6, where 0 – Sunday and 6 – Saturday. Known values: 0, 1, 2, 3, 4, 5, 6. - `fullWidth`: `false | true`. Determines whether the list should take the full width of its container Known values: false, true. - `headerControlsOrder`: `("next" | "previous" | "level")[]`. Controls order - `hideOutsideDates`: `false | true`. Determines whether outside dates should be hidden Known values: false, true. - `hideWeekdays`: `false | true`. Determines whether weekdays row should be hidden Known values: false, true. - `highlightToday`: `false | true`. Determines whether today should be highlighted with a border Known values: false, true. - `inputSize`: `string`. HTML `size` attribute for the input element (number of visible characters) - `inputWrapperOrder`: `("input" | "label" | "description" | "error")[]`. Controls order and visibility of wrapper elements. Only elements included in this array will be rendered. - `label`: `React.ReactNode`. Contents of `Input.Label` component. If not set, label is not displayed. - `labelProps`: `(InputLabelProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Label` component - `labelSeparator`: `string`. Separator between range value - `leftSection`: `React.ReactNode`. Content section displayed on the left side of the input - `leftSectionPointerEvents`: `"-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset" | "none" | "auto" | "all" | "fill" | "stroke" | "painted" | "visible" | "visibleFill" | "visiblePainted" | "visibleStroke"`. Sets `pointer-events` styles on the `leftSection` element. Use `'all'` when section contains interactive elements (buttons, links). Known values: "-moz-initial", "all", "auto", "fill", "inherit", "initial", "none", "painted", "revert", "revert-layer", "stroke", "unset", "visible", "visibleFill", "visiblePainted", "visibleStroke". - `leftSectionProps`: `React.DetailedHTMLProps, HTMLDivElement>`. Props passed down to the `leftSection` element - `leftSectionWidth`: `Property.Width`. Left section width, used to set `width` of the section and input `padding-left`, by default equals to the input height - `level`: `"month" | "year" | "decade"`. Current displayed level (controlled) Known values: "decade", "month", "year". - `loading`: `false | true`. Displays loading indicator in the left or right section Known values: false, true. - `loadingPosition`: `"left" | "right"`. Position of the loading indicator Known values: "left", "right". - `locale`: `string`. Dayjs locale, defaults to value defined in DatesProvider - `maxDate`: `string | Date`. Maximum possible date in `YYYY-MM-DD` format or Date object - `maxLevel`: `"month" | "year" | "decade"`. Known values: "decade", "month", "year". - `minDate`: `string | Date`. Minimum possible date in `YYYY-MM-DD` format or Date object - `nextIcon`: `React.ReactNode`. Change next icon - `nextLabel`: `string`. Next button `aria-label` - `numberOfColumns`: `number`. Number of columns displayed next to each other - `pointer`: `false | true`. Determines whether the input should have `cursor: pointer` style. Use when input acts as a button-like trigger (e.g., `component="button"` for Select/DatePicker). Known values: false, true. - `popoverProps`: `Partial>`. Props passed down to `Popover` component - `presets`: `DatePickerPreset[]`. Predefined values to pick from - `previousIcon`: `React.ReactNode`. Change previous icon - `previousLabel`: `string`. Previous button `aria-label` - `rightSection`: `React.ReactNode`. Content section displayed on the right side of the input - `rightSectionPointerEvents`: `"-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset" | "none" | "auto" | "all" | "fill" | "stroke" | "painted" | "visible" | "visibleFill" | "visiblePainted" | "visibleStroke"`. Sets `pointer-events` styles on the `rightSection` element. Use `'all'` when section contains interactive elements (buttons, links). Known values: "-moz-initial", "all", "auto", "fill", "inherit", "initial", "none", "painted", "revert", "revert-layer", "stroke", "unset", "visible", "visibleFill", "visiblePainted", "visibleStroke". - `rightSectionProps`: `React.DetailedHTMLProps, HTMLDivElement>`. Props passed down to the `rightSection` element - `rightSectionWidth`: `Property.Width`. Right section width, used to set `width` of the section and input `padding-right`, by default equals to the input height - `size`: `"xs" | "sm" | "md" | "lg" | "xl"`. Component size Known values: "lg", "md", "sm", "xl", "xs". - `sortDates`: `false | true`. Determines whether dates values should be sorted before `onChange` call, only applicable with type="multiple" Known values: false, true. - `success`: `React.ReactNode`. Contents of `Input.Success` component. If not set, success is not displayed. - `successProps`: `(InputSuccessProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Success` component - `type`: `DatePickerType | Type`. Picker type: range, multiple or default Known values: "default", "multiple", "range". - `unstyled`: `false | true`. Known values: false, true. - `value`: `DatePickerValue`. Value for controlled component - `valueFormat`: `string`. `dayjs` format for input value - `variant`: `(string & {}) | InputVariant`. Known values: "default", "filled", "unstyled". - `weekendDays`: `DayOfWeek[]`. Indices of weekend days, 0-6, where 0 is Sunday and 6 is Saturday. The default value is defined by `DatesProvider`. - `withAsterisk`: `false | true`. If set, the required asterisk is displayed next to the label. Overrides `required` prop. Does not add required attribute to the input. Known values: false, true. - `withCellSpacing`: `false | true`. Determines whether controls should be separated Known values: false, true. - `withErrorStyles`: `false | true`. Determines whether the input should have red border and red text color when the `error` prop is set Known values: false, true. - `withNativeLevelSelect`: `false | true`. Determines whether level select controls should be rendered as native `` elements Known values: false, true. - `withSeconds`: `false | true`. Determines whether the seconds input should be displayed Known values: false, true. - `withSuccessStyles`: `false | true`. Determines whether the input should have green border when the `success` prop is set Known values: false, true. - `withWeekNumbers`: `false | true`. Determines whether week numbers should be displayed Known values: false, true. - `wrapperProps`: `WrapperProps`. Props passed down to the root element - `yearsSelectRange`: `[number, number]`. Year range for native level select, tuple of `[startYear, endYear]`. Defaults to `[currentYear - 100, currentYear + 50]` or values derived from `minDate`/`maxDate` if set. - `dropdownType` is blocked: Modal picker mode escapes the widget overlay boundary - `modalProps` is blocked: Modal picker configuration escapes the widget overlay boundary - Include a textual date when the visual calendar carries meaning. [Upstream documentation for DateTimePicker](https://mantine.dev/dates/date-time-picker/) ## DatesProvider @mantine/dates; blocked; safety: denied. Unavailable: Replaces a Homarr-owned provider boundary [Upstream documentation for DatesProvider](https://mantine.dev/dates/dates-provider/) ## Day @mantine/dates; dates; safety: wrapped. - `attributes`: `{ day?: Record; }`. - `color`: `string`. - `date`: `string`. Required. Date that is displayed in `YYYY-MM-DD` format - `firstInRange`: `false | true`. Determines whether the day is first in range selection Known values: false, true. - `fullWidth`: `false | true`. Determines whether the day should take the full width of its cell Known values: false, true. - `highlightToday`: `false | true`. Determines whether today should be highlighted with a border Known values: false, true. - `inRange`: `false | true`. Determines whether the day is selected in range Known values: false, true. - `lastInRange`: `false | true`. Determines whether the day is last in range selection Known values: false, true. - `outside`: `false | true`. Determines whether the day is outside of the current month Known values: false, true. - `selected`: `false | true`. Determines whether the day is selected Known values: false, true. - `size`: `"xs" | "sm" | "md" | "lg" | "xl"`. Control width and height of the day Known values: "lg", "md", "sm", "xl", "xs". - `static`: `false | true`. Determines which element is used as root, `'button'` by default, `'div'` if static prop is set Known values: false, true. - `type`: `"button" | "submit" | "reset"`. Known values: "button", "reset", "submit". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - `weekend`: `false | true`. Determines whether the day is considered to be a weekend Known values: false, true. - Include a textual date when the visual calendar carries meaning. [Upstream documentation for Day](https://mantine.dev/dates/day/) ## DecadeLevel @mantine/dates; dates; safety: wrapped. - `attributes`: `{ calendarHeader?: Record; calendarHeaderControl?: Record; calendarHeaderLevel?: Record; ... 5 more ...; yearsListRow?: Record<...>; }`. - `color`: `string`. - `decade`: `string`. Required. Displayed decade - `fullWidth`: `false | true`. Determines whether the calendar should take the full width of its container Known values: false, true. - `headerControlsOrder`: `("next" | "previous" | "level")[]`. Controls order - `levelControlAriaLabel`: `string`. Level control `aria-label` - `locale`: `string`. Dayjs locale, defaults to value defined in DatesProvider - `maxDate`: `string | Date`. Maximum possible date in `YYYY-MM-DD` format or Date object - `minDate`: `string | Date`. Minimum possible date in `YYYY-MM-DD` format or Date object - `nextDisabled`: `false | true`. Disables next control Known values: false, true. - `nextIcon`: `React.ReactNode`. Change next icon - `nextLabel`: `string`. Next button `aria-label` - `previousDisabled`: `false | true`. Disables previous control Known values: false, true. - `previousIcon`: `React.ReactNode`. Change previous icon - `previousLabel`: `string`. Previous button `aria-label` - `size`: `"xs" | "sm" | "md" | "lg" | "xl"`. Component size Known values: "lg", "md", "sm", "xl", "xs". - `styles`: `Partial>`. - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - `withCellSpacing`: `false | true`. Determines whether controls should be separated Known values: false, true. - `withNativeLevelSelect`: `false | true`. Determines whether level select controls should be rendered as native `` elements Known values: false, true. - `yearsSelectRange`: `[number, number]`. Year range for native level select, tuple of `[startYear, endYear]`. Defaults to `[currentYear - 100, currentYear + 50]` or values derived from `minDate`/`maxDate` if set. - Include a textual date when the visual calendar carries meaning. [Upstream documentation for DecadeLevelGroup](https://mantine.dev/dates/decade-level-group/) ## Dialog @mantine/core; blocked; safety: denied. Unavailable: Escapes the widget layout and focus boundary [Upstream documentation for Dialog](https://mantine.dev/core/dialog/) ## DirectionProvider @mantine/core; blocked; safety: denied. Unavailable: Replaces a Homarr-owned provider boundary [Upstream documentation for DirectionProvider](https://mantine.dev/core/direction-provider/) ## Divider @mantine/core; layout; safety: wrapped. - `attributes`: `{ label?: Record; root?: Record; }`. - `color`: `DefaultMantineColor`. Key of `theme.colors` or any valid CSS color value Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `label`: `React.ReactNode`. Divider label, visible only with `orientation="horizontal"` - `labelPosition`: `"center" | "left" | "right"`. Label position Known values: "center", "left", "right". - `orientation`: `"horizontal" | "vertical"`. Divider orientation Known values: "horizontal", "vertical". - `size`: `number | MantineSize | (string & {})`. Controls width/height (depends on orientation) Known values: "lg", "md", "sm", "xl", "xs". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `(string & {}) | DividerVariant`. Known values: "dashed", "dotted", "solid". - Keep visual order consistent with reading order. [Upstream documentation for Divider](https://mantine.dev/core/divider/) ## DonutChart @mantine/charts; charts; safety: wrapped. - `accessibilityLayer`: `false | true`. Determines whether the chart should be keyboard-navigable with the recharts accessibility layer, `true` by default Known values: false, true. - `attributes`: `{ label?: Record; legend?: Record; root?: Record; tooltip?: Record; ... 9 more ...; tooltipBody?: Record<...>; }`. - `chartLabel`: `string | number`. Chart label, displayed in the center of the chart - `color`: `string`. - `data`: `DonutChartCell[]`. Required. Data used to render chart - `endAngle`: `number`. Controls angle at which charts ends. Set to `0` to render the chart as semicircle. - `labelColor`: `DefaultMantineColor`. Controls text color of all labels, by default depends on color scheme Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `labelsType`: `"value" | "name" | "percent"`. Type of labels to display, `'value'` by default Known values: "name", "percent", "value". - `legendProps`: `Omit`. Props passed down to recharts `Legend` component - `paddingAngle`: `number`. Controls padding between segments - `pieChartProps`: `(PolarChartProps & { ref?: React.Ref; })`. Props passed down to recharts `PieChart` component - `pieProps`: `Partial>`. Props passed down to recharts `Pie` component - `size`: `number`. Controls chart width and height, height is increased by 40 if `withLabels` prop is set. Cannot be less than `thickness`. - `startAngle`: `number`. Controls angle at which chart starts. Set to `180` to render the chart as semicircle. - `strokeColor`: `DefaultMantineColor`. Controls color of the segments stroke, by default depends on color scheme Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `strokeWidth`: `number`. Controls width of segments stroke - `thickness`: `number`. Controls thickness of the chart segments - `tooltipAnimationDuration`: `number`. Tooltip animation duration in ms - `tooltipDataSource`: `"all" | "segment"`. Determines which data is displayed in the tooltip. `'all'` – display all values, `'segment'` – display only hovered segment. Known values: "all", "segment". - `tooltipProps`: `Omit, "ref">`. Props passed down to `Tooltip` recharts component - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - `withLabels`: `false | true`. Determines whether each segment should have associated label Known values: false, true. - `withLabelsLine`: `false | true`. Determines whether segments labels should have lines that connect the segment with the label Known values: false, true. - `withLegend`: `false | true`. Determines whether the legend should be displayed Known values: false, true. - `withTooltip`: `false | true`. Determines whether the tooltip should be displayed when one of the section is hovered Known values: false, true. - Include a nearby text summary of the chart data. [Upstream documentation for DonutChart](https://mantine.dev/charts/donut-chart/) ## Drawer @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary Subcomponents: Drawer.Body, Drawer.CloseButton, Drawer.Content, Drawer.Header, Drawer.Overlay, Drawer.Root, Drawer.Stack, Drawer.Title. [Upstream documentation for Drawer](https://mantine.dev/core/drawer/) ## Drawer.Body @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for Drawer.Body](https://mantine.dev/core/drawer/) ## Drawer.CloseButton @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for Drawer.CloseButton](https://mantine.dev/core/drawer/) ## Drawer.Content @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for Drawer.Content](https://mantine.dev/core/drawer/) ## Drawer.Header @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for Drawer.Header](https://mantine.dev/core/drawer/) ## Drawer.Overlay @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for Drawer.Overlay](https://mantine.dev/core/drawer/) ## Drawer.Root @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for Drawer.Root](https://mantine.dev/core/drawer/) ## Drawer.Stack @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for Drawer.Stack](https://mantine.dev/core/drawer/) ## Drawer.Title @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for Drawer.Title](https://mantine.dev/core/drawer/) ## DrawerBody @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for DrawerBody](https://mantine.dev/core/drawer-body/) ## DrawerCloseButton @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for DrawerCloseButton](https://mantine.dev/core/drawer-close-button/) ## DrawerContent @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for DrawerContent](https://mantine.dev/core/drawer-content/) ## DrawerHeader @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for DrawerHeader](https://mantine.dev/core/drawer-header/) ## DrawerOverlay @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for DrawerOverlay](https://mantine.dev/core/drawer-overlay/) ## DrawerRoot @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for DrawerRoot](https://mantine.dev/core/drawer-root/) ## DrawerStack @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for DrawerStack](https://mantine.dev/core/drawer-stack/) ## DrawerTitle @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for DrawerTitle](https://mantine.dev/core/drawer-title/) ## EmptyState @mantine/core; content; safety: wrapped. Subcomponents: EmptyState.Actions, EmptyState.Description, EmptyState.Indicator, EmptyState.Title. - `align`: `"center" | "left" | "right"`. Content alignment. `center` stacks the content in a centered column, `left`/`right` place the indicator on the side with the content next to it Known values: "center", "left", "right". - `attributes`: `{ body?: Record; title?: Record; root?: Record; description?: Record; indicator?: Record<...>; actions?: Record<...>; }`. - `color`: `DefaultMantineColor`. Key of `theme.colors` or any valid CSS color, used by `filled` and `light` variants Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `description`: `React.ReactNode`. Description content, rendered inside `EmptyState.Description` - `icon`: `React.ReactNode`. Icon or illustration, rendered inside `EmptyState.Indicator` - `size`: `"xs" | "sm" | "md" | "lg" | "xl"`. Controls indicator size, gap between elements and font sizes of title and description Known values: "lg", "md", "sm", "xl", "xs". - `title`: `React.ReactNode`. Title content, rendered inside `EmptyState.Title` - `unstyled`: `false | true`. Known values: false, true. - `variant`: `"filled" | "light"`. Controls the indicator appearance. `filled` and `light` display a colored circular background behind the icon. If not set, the icon is displayed with dimmed color Known values: "filled", "light". - `withIndicatorBackground`: `false | true`. If set, a neutral circular background is displayed behind the indicator. Setting `variant` always displays a colored background regardless of this prop Known values: false, true. - Provide meaningful text alternatives for non-text content. [Upstream documentation for EmptyState](https://mantine.dev/core/empty-state/) ## EmptyState.Actions @mantine/core; content; safety: wrapped. - `color`: `string`. - `styles`: `Partial>`. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for EmptyState.Actions](https://mantine.dev/core/empty-state/) ## EmptyState.Description @mantine/core; content; safety: wrapped. - `color`: `string`. - `styles`: `Partial>`. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for EmptyState.Description](https://mantine.dev/core/empty-state/) ## EmptyState.Indicator @mantine/core; content; safety: wrapped. - `color`: `string`. - `styles`: `Partial>`. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for EmptyState.Indicator](https://mantine.dev/core/empty-state/) ## EmptyState.Title @mantine/core; content; safety: wrapped. - `color`: `string`. - `order`: `2 | 3 | 4 | 5 | 6 | 1`. Heading order, renders the title as `h1`–`h6` element. By default, the title is rendered as a `div` without semantic heading level Known values: 1, 2, 3, 4, 5, 6. - `styles`: `Partial>`. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for EmptyState.Title](https://mantine.dev/core/empty-state/) ## EmptyStateActions @mantine/core; content; safety: wrapped. - `color`: `string`. - `styles`: `Partial>`. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for EmptyStateActions](https://mantine.dev/core/empty-state-actions/) ## EmptyStateDescription @mantine/core; content; safety: wrapped. - `color`: `string`. - `styles`: `Partial>`. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for EmptyStateDescription](https://mantine.dev/core/empty-state-description/) ## EmptyStateIndicator @mantine/core; content; safety: wrapped. - `color`: `string`. - `styles`: `Partial>`. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for EmptyStateIndicator](https://mantine.dev/core/empty-state-indicator/) ## EmptyStateTitle @mantine/core; content; safety: wrapped. - `color`: `string`. - `order`: `2 | 3 | 4 | 5 | 6 | 1`. Heading order, renders the title as `h1`–`h6` element. By default, the title is rendered as a `div` without semantic heading level Known values: 1, 2, 3, 4, 5, 6. - `styles`: `Partial>`. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for EmptyStateTitle](https://mantine.dev/core/empty-state-title/) ## Fieldset @mantine/core; layout; safety: wrapped. - `attributes`: `{ legend?: Record; root?: Record; }`. - `color`: `string`. - `legend`: `React.ReactNode`. Fieldset legend - `unstyled`: `false | true`. Known values: false, true. - `variant`: `(string & {}) | FieldsetVariant`. Known values: "default", "filled", "unstyled". - Keep visual order consistent with reading order. [Upstream documentation for Fieldset](https://mantine.dev/core/fieldset/) ## FileButton @mantine/core; blocked; safety: denied. Unavailable: Requests local file-system access [Upstream documentation for FileButton](https://mantine.dev/core/file-button/) ## FileInput @mantine/core; blocked; safety: denied. Unavailable: Requests local file-system access [Upstream documentation for FileInput](https://mantine.dev/core/file-input/) ## FlatTreeNode @mantine/core; content; safety: wrapped. - `checkOnSpace`: `false | true`. If set, tree node is checked on space key press Known values: false, true. - `expandOnClick`: `false | true`. If set, tree node with children is expanded on click Known values: false, true. - `expandOnSpace`: `false | true`. If set, tree node with children is expanded on space key press Known values: false, true. - `expanded`: `false | true`. Required. Whether the node is expanded Known values: false, true. - `hasChildren`: `false | true`. Required. Whether the node has children Known values: false, true. - `level`: `number`. Required. Nesting level of the node, starts at 1 - `linesPath`: `FlatTreeLineState[]`. Line state per ancestor + own level, computed by `flattenTreeData`. When provided and the tree root has `data-with-lines`, connector lines are rendered. - `node`: `TreeNodeData`. Required. Node data from tree data - `parent`: `null | string`. Required. Value of the parent node, `null` for root nodes - `selectOnClick`: `false | true`. If set, tree node is selected on click Known values: false, true. - `style`: `React.CSSProperties`. Style to apply to the root element, used for virtualizer positioning - `tree`: `UseTreeReturnType`. Required. Tree controller instance, return value of `useTree` hook - Provide meaningful text alternatives for non-text content. [Upstream documentation for FlatTreeNode](https://mantine.dev/core/flat-tree-node/) ## Flex @mantine/core; layout; safety: wrapped. - `align`: `StyleProp`. `align-items` CSS property Known values: "-moz-initial", "anchor-center", "baseline", "center", "end", "flex-end", "flex-start", "inherit", "initial", "normal", "revert", "revert-layer", "self-end", "self-start", "start", "stretch", "unset". - `attributes`: `{ root?: Record; }`. - `color`: `string`. - `columnGap`: `StyleProp`. `column-gap` CSS property Known values: "lg", "md", "sm", "xl", "xs". - `direction`: `StyleProp`. `flex-direction` CSS property Known values: "-moz-initial", "column", "column-reverse", "inherit", "initial", "revert", "revert-layer", "row", "row-reverse", "unset". - `gap`: `StyleProp`. `gap` CSS property Known values: "lg", "md", "sm", "xl", "xs". - `justify`: `StyleProp`. `justify-content` CSS property Known values: "-moz-initial", "center", "end", "flex-end", "flex-start", "inherit", "initial", "left", "normal", "revert", "revert-layer", "right", "space-around", "space-between", "space-evenly", "start", "stretch", "unset". - `rowGap`: `StyleProp`. `row-gap` CSS property Known values: "lg", "md", "sm", "xl", "xs". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - `wrap`: `StyleProp`. `flex-wrap` CSS property Known values: "-moz-initial", "inherit", "initial", "nowrap", "revert", "revert-layer", "unset", "wrap", "wrap-reverse". - Keep visual order consistent with reading order. [Upstream documentation for Flex](https://mantine.dev/core/flex/) ## FloatingArrow @mantine/core; content; safety: wrapped. - `arrowOffset`: `number`. Required. - `arrowPosition`: `"center" | "side" | "merge"`. Required. Known values: "center", "merge", "side". - `arrowRadius`: `number`. Required. - `arrowSize`: `number`. Required. - `arrowX`: `number`. - `arrowY`: `number`. - `color`: `string`. - `position`: `"left" | "right" | "bottom" | "top" | "left-end" | "left-start" | "right-end" | "right-start" | "bottom-end" | "bottom-start" | "top-end" | "top-start"`. Required. Known values: "bottom", "bottom-end", "bottom-start", "left", "left-end", "left-start", "right", "right-end", "right-start", "top", "top-end", "top-start". - `visible`: `false | true`. Known values: false, true. - Provide meaningful text alternatives for non-text content. [Upstream documentation for FloatingArrow](https://mantine.dev/core/floating-arrow/) ## FloatingIndicator @mantine/core; layout; safety: wrapped. - `attributes`: `{ root?: Record; }`. - `color`: `string`. - `displayAfterTransitionEnd`: `false | true`. Controls whether the indicator should be hidden initially and displayed after the parent's transition ends. Set to `true` when the parent container has CSS transitions (e.g., `transform: scale()`) to prevent the indicator from appearing at the wrong position during the parent's animation. Known values: false, true. - `parent`: `HTMLElement | null`. Parent container element that must have `position: relative`. The indicator's position is calculated relative to this element. - `target`: `HTMLElement | null`. Target element over which the indicator is displayed. The indicator will be positioned to match the target's size and position. - `transitionDuration`: `string | number`. Transition duration in ms - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Keep visual order consistent with reading order. [Upstream documentation for FloatingIndicator](https://mantine.dev/core/floating-indicator/) ## FloatingWindow @mantine/core; blocked; safety: denied. Unavailable: Creates a separate browser window Subcomponents: FloatingWindow.ResizeHandle. [Upstream documentation for FloatingWindow](https://mantine.dev/core/floating-window/) ## FloatingWindow.ResizeHandle @mantine/core; blocked; safety: denied. Unavailable: Escapes or replaces the widget layout, focus, scrolling, or overlay boundary [Upstream documentation for FloatingWindow.ResizeHandle](https://mantine.dev/core/floating-window/) ## FocusTrap @mantine/core; blocked; safety: denied. Unavailable: Can capture focus outside the widget interaction flow Subcomponents: FocusTrap.InitialFocus. [Upstream documentation for FocusTrap](https://mantine.dev/core/focus-trap/) ## FocusTrap.InitialFocus @mantine/core; blocked; safety: denied. Unavailable: Can capture focus outside the widget interaction flow [Upstream documentation for FocusTrap.InitialFocus](https://mantine.dev/core/focus-trap/) ## FocusTrapInitialFocus @mantine/core; blocked; safety: denied. Unavailable: Can capture focus outside the widget interaction flow [Upstream documentation for FocusTrapInitialFocus](https://mantine.dev/core/focus-trap-initial-focus/) ## FunnelChart @mantine/charts; charts; safety: wrapped. - `accessibilityLayer`: `false | true`. Determines whether the chart should be keyboard-navigable with the recharts accessibility layer, `true` by default Known values: false, true. - `attributes`: `{ legend?: Record; root?: Record; tooltip?: Record; legendItem?: Record; ... 8 more ...; tooltipBody?: Record<...>; }`. - `color`: `string`. - `data`: `FunnelChartCell[]`. Required. Data used to render chart - `funnelChartProps`: `(CartesianChartProps & { ref?: React.Ref; })`. Props passed down to recharts `FunnelChart` component - `funnelProps`: `Partial>`. Props passed down to recharts `Pie` component - `labelColor`: `DefaultMantineColor`. Controls text color of all labels Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `labelsPosition`: `"left" | "right" | "inside"`. Controls labels position relative to the segment Known values: "inside", "left", "right". - `legendProps`: `Omit`. Props passed down to recharts `Legend` component - `size`: `number`. Controls chart width and height - `strokeColor`: `DefaultMantineColor`. Controls color of the segments stroke, by default depends on color scheme Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `strokeWidth`: `number`. Controls width of segments stroke - `tooltipAnimationDuration`: `number`. Tooltip animation duration in ms - `tooltipDataSource`: `"all" | "segment"`. Determines which data is displayed in the tooltip. `'all'` – display all values, `'segment'` – display only hovered segment. Known values: "all", "segment". - `tooltipProps`: `Omit, "ref">`. Props passed down to `Tooltip` recharts component - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - `withLabels`: `false | true`. Determines whether each segment should have associated label Known values: false, true. - `withLegend`: `false | true`. Determines whether the legend should be displayed Known values: false, true. - `withTooltip`: `false | true`. Determines whether the tooltip should be displayed when a section is hovered Known values: false, true. - Include a nearby text summary of the chart data. [Upstream documentation for FunnelChart](https://mantine.dev/charts/funnel-chart/) ## GaugeChart @mantine/charts; charts; safety: wrapped. - `attributes`: `{ label?: Record; section?: Record; track?: Record; root?: Record; needle?: Record<...>; }`. - `color`: `string`. - `endAngle`: `number`. End angle in degrees, - `filledColor`: `DefaultMantineColor`. Color of the filled arc when sections are not provided Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `label`: `React.ReactNode`. Label displayed in the center of the gauge - `max`: `number`. Maximum value of the gauge, - `min`: `number`. Minimum value of the gauge, - `radius`: `string | number`. - `roundCaps`: `false | true`. Whether to round arc endpoints. Not applied to `sections` – rounded caps of adjacent sections would overlap each other. Known values: false, true. - `sections`: `GaugeChartSection[]`. Threshold sections of the gauge arc, each section is filled from the previous section upper bound to its own `value`. If set, the arc is not filled based on `value`. - `size`: `number`. Chart size (width and height), - `startAngle`: `number`. Start angle in degrees, - `target`: `number`. Value marked on the arc with a line marker, use to display a goal or the current value of a gauge with `sections` - `targetColor`: `DefaultMantineColor`. Color of the target marker Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `targetSize`: `number`. Thickness of the target marker, - `thickness`: `number`. Arc thickness in px, - `trackColor`: `DefaultMantineColor`. Color of the gauge track (unfilled portion) Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `type`: `string`. - `unstyled`: `false | true`. Known values: false, true. - `value`: `number`. Required. Current value to display. Fills the arc from `min` up to `value`, unless `sections` is set – then the arc is colored by thresholds and the value is displayed only in the center label. - `variant`: `string`. - Include a nearby text summary of the chart data. [Upstream documentation for GaugeChart](https://mantine.dev/charts/gauge-chart/) ## Grid @mantine/core; layout; safety: wrapped. Subcomponents: Grid.Col. - `align`: `Property.AlignItems`. Sets `align-items` Known values: "-moz-initial", "anchor-center", "baseline", "center", "end", "flex-end", "flex-start", "inherit", "initial", "normal", "revert", "revert-layer", "self-end", "self-start", "start", "stretch", "unset". - `attributes`: `{ col?: Record; root?: Record; inner?: Record; container?: Record; }`. - `breakpoints`: `GridBreakpoints`. Breakpoints values, only used with `type="container"` - `color`: `string`. - `columnGap`: `StyleProp`. Column gap, overrides `gap` for horizontal spacing Known values: "lg", "md", "sm", "xl", "xs". - `columns`: `number`. Number of columns in each row - `gap`: `StyleProp`. Gap between columns and rows, key of `theme.spacing` or any valid CSS value Known values: "lg", "md", "sm", "xl", "xs". - `grow`: `false | true`. If set, columns in the last row expand to fill all available space Known values: false, true. - `justify`: `Property.JustifyContent`. Sets `justify-content` Known values: "-moz-initial", "center", "end", "flex-end", "flex-start", "inherit", "initial", "left", "normal", "revert", "revert-layer", "right", "space-around", "space-between", "space-evenly", "start", "stretch", "unset". - `overflow`: `Property.Overflow`. Sets `overflow` CSS property on the root element Known values: "-moz-hidden-unscrollable", "-moz-initial", "auto", "clip", "hidden", "inherit", "initial", "overlay", "revert", "revert-layer", "scroll", "unset", "visible". - `rowGap`: `StyleProp`. Row gap, overrides `gap` for vertical spacing Known values: "lg", "md", "sm", "xl", "xs". - `type`: `"media" | "container"`. Type of queries used for responsive styles Known values: "container", "media". - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Keep visual order consistent with reading order. [Upstream documentation for Grid](https://mantine.dev/core/grid/) ## Grid.Col @mantine/core; layout; safety: wrapped. - `align`: `StyleProp`. Vertical alignment of the column, controls `align-self` CSS property Known values: "-moz-initial", "anchor-center", "auto", "baseline", "center", "end", "flex-end", "flex-start", "inherit", "initial", "normal", "revert", "revert-layer", "self-end", "self-start", "start", "stretch", "unset". - `color`: `string`. - `offset`: `StyleProp`. Column start offset – number of empty columns before this column - `order`: `StyleProp`. Column order, use to reorder columns at different viewport sizes - `span`: `StyleProp`. Column span Known values: "auto", "content". - `styles`: `Partial>`. - `variant`: `string`. - Keep visual order consistent with reading order. [Upstream documentation for Grid.Col](https://mantine.dev/core/grid/) ## GridCol @mantine/core; layout; safety: wrapped. - `align`: `StyleProp`. Vertical alignment of the column, controls `align-self` CSS property Known values: "-moz-initial", "anchor-center", "auto", "baseline", "center", "end", "flex-end", "flex-start", "inherit", "initial", "normal", "revert", "revert-layer", "self-end", "self-start", "start", "stretch", "unset". - `color`: `string`. - `offset`: `StyleProp`. Column start offset – number of empty columns before this column - `order`: `StyleProp`. Column order, use to reorder columns at different viewport sizes - `span`: `StyleProp`. Column span Known values: "auto", "content". - `styles`: `Partial>`. - `variant`: `string`. - Keep visual order consistent with reading order. [Upstream documentation for GridCol](https://mantine.dev/core/grid-col/) ## Group @mantine/core; layout; safety: wrapped. - `align`: `Property.AlignItems`. Controls `align-items` CSS property Known values: "-moz-initial", "anchor-center", "baseline", "center", "end", "flex-end", "flex-start", "inherit", "initial", "normal", "revert", "revert-layer", "self-end", "self-start", "start", "stretch", "unset". - `attributes`: `{ root?: Record; }`. - `color`: `string`. - `gap`: `MantineSpacing`. Key of `theme.spacing` or any valid CSS value for `gap`, numbers are converted to rem Known values: "lg", "md", "sm", "xl", "xs". - `grow`: `false | true`. Determines whether each child element should have `flex-grow: 1` style Known values: false, true. - `justify`: `Property.JustifyContent`. Controls `justify-content` CSS property Known values: "-moz-initial", "center", "end", "flex-end", "flex-start", "inherit", "initial", "left", "normal", "revert", "revert-layer", "right", "space-around", "space-between", "space-evenly", "start", "stretch", "unset". - `preventGrowOverflow`: `false | true`. Determines whether children should take only dedicated amount of space (`max-width` style is set based on the number of children) Known values: false, true. - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - `wrap`: `"-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset" | "wrap" | "nowrap" | "wrap-reverse"`. Controls `flex-wrap` CSS property Known values: "-moz-initial", "inherit", "initial", "nowrap", "revert", "revert-layer", "unset", "wrap", "wrap-reverse". - Keep visual order consistent with reading order. [Upstream documentation for Group](https://mantine.dev/core/group/) ## HeadlessMantineProvider @mantine/core; blocked; safety: denied. Unavailable: Replaces a Homarr-owned provider boundary [Upstream documentation for HeadlessMantineProvider](https://mantine.dev/core/headless-mantine-provider/) ## Heatmap @mantine/charts; charts; safety: wrapped. - `attributes`: `{ legend?: Record; rect?: Record; root?: Record; weekdayLabel?: Record; monthLabel?: Record<...>; legendLabel?: Record<...>; legendRect?: Record<...>; }`. - `color`: `string`. - `colors`: `string[]`. Colors array, used to calculate color for each value, by default 4 shades of green colors are used - `data`: `Record`. Required. Heatmap data, key is date in `YYYY-MM-DD` format (interpreted as a UTC calendar day) - `domain`: `[number, number]`. Heatmap domain, array of 2 numbers, min and max values, calculated from data by default - `endDate`: `string | Date`. Heatmap end date. Current date by default. Date is normalized to UTC midnight of the intended calendar day. - `firstDayOfWeek`: `0 | 2 | 3 | 4 | 5 | 6 | 1`. First day of week, 0 – Sunday, 1 – Monday. Known values: 0, 1, 2, 3, 4, 5, 6. - `fontSize`: `number`. Font size of month and weekday labels - `gap`: `number`. Gap between rects in px - `legendLabels`: `[string, string]`. Legend labels, array of 2 elements: [min label, max label] - `monthLabels`: `string[]`. Month labels, array of 12 elements, can be used for localization - `monthLabelsPosition`: `"bottom" | "top"`. Month labels position relative to the heatmap Known values: "bottom", "top". - `monthsLabelsHeight`: `number`. Height of month labels row - `radius`: `string | number`. - `rectRadius`: `number`. Rect radius in px - `rectSize`: `number`. Size of day rect in px - `splitMonths`: `false | true`. If set, inserts a spacer column between months Known values: false, true. - `startDate`: `string | Date`. Heatmap start date. Current date - 1 year by default. Date is normalized to UTC midnight of the intended calendar day. - `tooltipProps`: `Partial`. Props passed down to the `Tooltip.Floating` component - `type`: `string`. - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - `weekdayLabels`: `string[]`. Weekday labels, array of 7 elements, can be used for localization - `weekdaysLabelsWidth`: `number`. Width of weekday labels column - `withLegend`: `false | true`. If set, legend with color levels is displayed below the heatmap Known values: false, true. - `withMonthLabels`: `false | true`. If set, month labels are displayed Known values: false, true. - `withOutsideDates`: `false | true`. If set, trailing dates that do not fall into the given `startDate` – `endDate` range are displayed to fill empty space. Known values: false, true. - `withTooltip`: `false | true`. If set, tooltip is displayed on rect hover Known values: false, true. - `withWeekdayLabels`: `false | true`. If set, weekday labels are displayed Known values: false, true. - Include a nearby text summary of the chart data. [Upstream documentation for Heatmap](https://mantine.dev/charts/heatmap/) ## HiddenDatesInput @mantine/dates; blocked; safety: denied. Unavailable: Internal date-input primitive [Upstream documentation for HiddenDatesInput](https://mantine.dev/dates/hidden-dates-input/) ## Highlight @mantine/core; content; safety: wrapped. - `accentInsensitive`: `false | true`. Perform accent-insensitive matching. When enabled cafe will match cafe, café, cafè, etc. Known values: false, true. - `attributes`: `{ root?: Record; }`. - `caseInsensitive`: `false | true`. Perform case-insensitive matching. Known values: false, true. - `color`: `string | (string & {})`. Default background color for all highlighted text. Key of `theme.colors` or any valid CSS color, passed to `Mark` component. Can be overridden per term when using HighlightTerm objects. - `gradient`: `MantineGradient`. Gradient configuration, ignored when `variant` is not `gradient` - `highlight`: `string | string[] | HighlightTerm[]`. Required. Substring(s) to highlight in `children`. Can be: - string: single term - string[]: multiple terms with same color - HighlightTerm[]: multiple terms with custom colors per term - Matching is case-insensitive and accent-insensitive by default, use `caseInsensitive` and `accentInsensitive` props to control this behavior - Regex special characters are automatically escaped - When multiple substrings are provided, longer matches take precedence - Empty strings and whitespace-only strings are ignored - `inherit`: `false | true`. Determines whether font properties should be inherited from the parent Known values: false, true. - `inline`: `false | true`. Sets `line-height` to 1 for centering Known values: false, true. - `lineClamp`: `number`. Number of lines after which Text will be truncated - `size`: `"xs" | "sm" | "md" | "lg" | "xl" | (string & {})`. Controls `font-size` and `line-height` Known values: "lg", "md", "sm", "xl", "xs". - `span`: `false | true`. Shorthand for `component="span"` Known values: false, true. - `textWrap`: `"wrap" | "nowrap" | "balance" | "pretty" | "stable"`. Controls `text-wrap` CSS property Known values: "balance", "nowrap", "pretty", "stable", "wrap". - `truncate`: `false | true | "end" | "start"`. Side on which Text must be truncated, if `true`, text is truncated from the start Known values: "end", false, "start", true. - `unstyled`: `false | true`. Known values: false, true. - `variant`: `(string & {}) | TextVariant`. Known values: "gradient", "text". - `wholeWord`: `false | true`. Only match whole words (adds word boundaries to regex). When enabled, 'the' will not match 'there'. Known values: false, true. - Provide meaningful text alternatives for non-text content. [Upstream documentation for Highlight](https://mantine.dev/core/highlight/) ## HoverCard @mantine/core; navigation; safety: wrapped. Subcomponents: HoverCard.Dropdown, HoverCard.Group, HoverCard.Target. - `arrowOffset`: `number`. Arrow offset in px - `arrowPosition`: `"center" | "side" | "merge"`. Arrow position Known values: "center", "merge", "side". - `arrowRadius`: `number`. Arrow `border-radius` in px - `arrowSize`: `number`. Arrow size in px - `attributes`: `{ dropdown?: Record; overlay?: Record; arrow?: Record; }`. - `clickOutsideEvents`: `string[]`. Events that trigger outside clicks - `closeDelay`: `number`. Delay in ms before the dropdown closes after mouse leaves the target or dropdown. Overridden by HoverCard.Group delay if used within a group. - `closeOnClickOutside`: `false | true`. Determines whether dropdown should be closed on outside clicks Known values: false, true. - `closeOnEscape`: `false | true`. Determines whether dropdown should be closed when `Escape` key is pressed Known values: false, true. - `defaultOpened`: `false | true`. Initial opened state for uncontrolled component Known values: false, true. - `floatingStrategy`: `"fixed" | "absolute"`. Changes floating ui [position strategy](https://floating-ui.com/docs/usefloating#strategy) Known values: "absolute", "fixed". - `hideDetached`: `false | true`. If set, the dropdown is hidden when the element is hidden with styles or not visible on the screen Known values: false, true. - `initiallyOpened`: `false | true`. Initial opened state Known values: false, true. - `keepMounted`: `false | true`. If set, the dropdown is not unmounted from the DOM when hidden. `display: none` styles are added instead. Known values: false, true. - `keepMountedMode`: `"activity" | "display-none"`. Controls how the dropdown is hidden when `keepMounted` is set: `'activity'` – hidden with React 19 `Activity` component, `'display-none'` – hidden with `display: none` styles Known values: "activity", "display-none". - `middlewares`: `PopoverMiddlewares`. Floating ui middlewares to configure position handling - `offset`: `number | FloatingAxesOffsets`. Offset of the dropdown element - `openDelay`: `number`. Delay in ms before the dropdown opens after mouse enters the target. Overridden by HoverCard.Group delay if used within a group. - `overlayProps`: `(OverlayProps & ElementProps<"div">)`. Props passed down to `Overlay` component - `position`: `"left" | "right" | "bottom" | "top" | "left-end" | "left-start" | "right-end" | "right-start" | "bottom-end" | "bottom-start" | "top-end" | "top-start"`. Dropdown position relative to the target element Known values: "bottom", "bottom-end", "bottom-start", "left", "left-end", "left-start", "right", "right-end", "right-start", "top", "top-end", "top-start". - `preventPositionChangeWhenVisible`: `false | true`. If `true`, the dropdown picks its side on open (flip runs once, preferring the `position` prop) and then never changes side — scrolling, resizing, and content size changes will not flip the dropdown. The side is recalculated fresh on the next open. Does not affect the `shift` middleware. Set to `false` to keep flip active and allow the dropdown to re-flip on every change. Known values: false, true. - `returnFocus`: `false | true`. Determines whether focus should be automatically returned to control when dropdown closes Known values: false, true. - `transitionProps`: `Partial>`. Props passed down to the `Transition` component. Use to configure duration and animation type. - `trapFocus`: `false | true`. Determines whether focus should be trapped within dropdown Known values: false, true. - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - `width`: `PopoverWidth`. Dropdown width, or `'target'` to make dropdown width the same as target element - `withArrow`: `false | true`. Determines whether component should have an arrow Known values: false, true. - `withOverlay`: `false | true`. Determines whether the overlay should be displayed when the dropdown is opened Known values: false, true. - `withRoles`: `false | true`. Determines whether dropdown and target elements should have accessible roles Known values: false, true. - Provide an accessible label for controls without visible text. [Upstream documentation for HoverCard](https://mantine.dev/core/hover-card/) ## HoverCard.Dropdown @mantine/core; navigation; safety: wrapped. - `color`: `string`. - `styles`: `Partial>`. - `variant`: `string`. - Provide an accessible label for controls without visible text. [Upstream documentation for HoverCard.Dropdown](https://mantine.dev/core/hover-card/) ## HoverCard.Group @mantine/core; navigation; safety: wrapped. - `closeDelay`: `number`. Close delay in ms - `openDelay`: `number`. Open delay in ms - Provide an accessible label for controls without visible text. [Upstream documentation for HoverCard.Group](https://mantine.dev/core/hover-card/) ## HoverCard.Target @mantine/core; navigation; safety: wrapped. - `eventPropsWrapperName`: `string`. Name of the prop to wrap event listeners in. Use when the target component expects event listeners in a nested object. For example, some components expect `componentProps={{ onMouseEnter, onMouseLeave }}`. - `popupType`: `string`. Popup accessible type - Provide an accessible label for controls without visible text. [Upstream documentation for HoverCard.Target](https://mantine.dev/core/hover-card/) ## HoverCardDropdown @mantine/core; navigation; safety: wrapped. - `color`: `string`. - `styles`: `Partial>`. - `variant`: `string`. - Provide an accessible label for controls without visible text. [Upstream documentation for HoverCardDropdown](https://mantine.dev/core/hover-card-dropdown/) ## HoverCardGroup @mantine/core; navigation; safety: wrapped. - `closeDelay`: `number`. Close delay in ms - `openDelay`: `number`. Open delay in ms - Provide an accessible label for controls without visible text. [Upstream documentation for HoverCardGroup](https://mantine.dev/core/hover-card-group/) ## HoverCardTarget @mantine/core; navigation; safety: wrapped. - `eventPropsWrapperName`: `string`. Name of the prop to wrap event listeners in. Use when the target component expects event listeners in a nested object. For example, some components expect `componentProps={{ onMouseEnter, onMouseLeave }}`. - `popupType`: `string`. Popup accessible type - Provide an accessible label for controls without visible text. [Upstream documentation for HoverCardTarget](https://mantine.dev/core/hover-card-target/) ## HueSlider @mantine/core; interaction; safety: wrapped. - `attributes`: `{ slider?: Record; sliderOverlay?: Record; thumb?: Record; }`. - `color`: `string`. - `focusable`: `false | true`. If set, slider thumb can be focused Known values: false, true. - `size`: `MantineSize | (string & {})`. Slider size Known values: "lg", "md", "sm", "xl", "xs". - `unstyled`: `false | true`. Known values: false, true. - `value`: `number`. Required. Controlled component value - `variant`: `string`. - Provide a visible label or aria-label. [Upstream documentation for HueSlider](https://mantine.dev/core/hue-slider/) ## Image @mantine/core; content; safety: wrapped. - `attributes`: `{ root?: Record; }`. - `fallbackSrc`: `string`. Image url used as a fallback if the image cannot be loaded - `fit`: `"-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset" | "none" | "contain" | "cover" | "fill" | "scale-down"`. Controls `object-fit` style Known values: "-moz-initial", "contain", "cover", "fill", "inherit", "initial", "none", "revert", "revert-layer", "scale-down", "unset". - `src`: `unknown`. Image url - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for Image](https://mantine.dev/core/image/) ## Indicator @mantine/core; content; safety: wrapped. - `attributes`: `{ root?: Record; indicator?: Record; }`. - `autoContrast`: `false | true`. If set, adjusts text color based on background color Known values: false, true. - `color`: `DefaultMantineColor`. Key of `theme.colors` or any valid CSS color value Known values: "blue", "cyan", "dark", "grape", "gray", "green", "indigo", "lime", "orange", "pink", "red", "teal", "violet", "yellow". - `inline`: `false | true`. Changes container display from block to inline-block, use when wrapping elements with fixed width Known values: false, true. - `label`: `React.ReactNode`. Label displayed inside the indicator, for example, notification count - `maxValue`: `number`. Maximum value to display. If label is a number greater than this value, it will be displayed as `{maxValue}+` - `offset`: `number | { x: number; y: number; }`. Distance in pixels to offset the indicator from its default position, useful for elements with border-radius. Can be a number for uniform offset or an object with `x` and `y` properties for separate horizontal and vertical offsets - `position`: `"bottom-end" | "bottom-start" | "top-end" | "top-start" | "bottom-center" | "top-center" | "middle-center" | "middle-end" | "middle-start"`. Indicator position relative to the target element Known values: "bottom-center", "bottom-end", "bottom-start", "middle-center", "middle-end", "middle-start", "top-center", "top-end", "top-start". - `processing`: `false | true`. If set, the indicator has processing animation Known values: false, true. - `showZero`: `false | true`. Determines whether indicator with label `0` should be displayed Known values: false, true. - `size`: `string | number`. Indicator width and height - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - Provide meaningful text alternatives for non-text content. [Upstream documentation for Indicator](https://mantine.dev/core/indicator/) ## InlineDateTimePicker @mantine/dates; dates; safety: wrapped. Bind a temporary string input with `bind`. Initialize with `defaultValue`; reset with `resetKey`. - `allowDeselect`: `(Type extends "default" ? boolean : never)`. Determines whether user can deselect the date by clicking on selected item, applicable only when type="default" - `allowSingleDateInRange`: `(Type extends "range" ? boolean : never)`. Determines whether a single day can be selected as range, applicable only when type="range" - `ariaLabels`: `CalendarAriaLabels`. `aria-label` attributes for controls on different levels - `attributes`: `{ root?: Record; month?: Record; weekday?: Record; weekdaysRow?: Record; ... 28 more ...; rangeInfo?: Record<...>; }`. - `color`: `string`. - `columnsToScroll`: `number`. Number of columns to scroll with next/prev buttons, same as `numberOfColumns` if not set explicitly - `date`: `string | Date`. Displayed date in controlled mode - `defaultDate`: `string | Date`. Initial displayed date in uncontrolled mode - `defaultLevel`: `"month" | "year" | "decade"`. Initial displayed level (uncontrolled) Known values: "decade", "month", "year". - `defaultTimeValue`: `string`. Default time value in `HH:mm` or `HH:mm:ss` format. Assigned to time when date is selected. - `defaultValue`: `DatePickerValue`. Default value for uncontrolled component - `enableKeyboardNavigation`: `false | true`. Enable enhanced keyboard navigation (Ctrl/Cmd + Arrow keys for year navigation, Ctrl/Cmd + Shift + Arrow keys for decade navigation, Y key to open year view) Known values: false, true. - `endTimePickerProps`: `Omit`. Props passed down to the end time `TimePicker` component in range mode - `firstDayOfWeek`: `0 | 2 | 3 | 4 | 5 | 6 | 1`. Number 0-6, where 0 – Sunday and 6 – Saturday. Known values: 0, 1, 2, 3, 4, 5, 6. - `fullWidth`: `false | true`. Determines whether the list should take the full width of its container Known values: false, true. - `headerControlsOrder`: `("next" | "previous" | "level")[]`. Controls order - `hideOutsideDates`: `false | true`. Determines whether outside dates should be hidden Known values: false, true. - `hideWeekdays`: `false | true`. Determines whether weekdays row should be hidden Known values: false, true. - `highlightToday`: `false | true`. Determines whether today should be highlighted with a border Known values: false, true. - `labelSeparator`: `string`. Separator between range values - `level`: `"month" | "year" | "decade"`. Current displayed level (controlled) Known values: "decade", "month", "year". - `locale`: `string`. Dayjs locale, defaults to value defined in DatesProvider - `maxDate`: `string | Date`. Max date - `maxLevel`: `"month" | "year" | "decade"`. Known values: "decade", "month", "year". - `minDate`: `string | Date`. Min date - `nextIcon`: `React.ReactNode`. Change next icon - `nextLabel`: `string`. Next button `aria-label` - `numberOfColumns`: `number`. Number of columns displayed next to each other - `presets`: `DatePickerPreset[]`. Predefined values to pick from - `previousIcon`: `React.ReactNode`. Change previous icon - `previousLabel`: `string`. Previous button `aria-label` - `size`: `"xs" | "sm" | "md" | "lg" | "xl"`. Component size Known values: "lg", "md", "sm", "xl", "xs". - `submitButtonProps`: `(ActionIconProps & React.ClassAttributes & React.ButtonHTMLAttributes)`. Props passed down to the submit button - `timePickerProps`: `Omit`. Props passed down to `TimePicker` component - `type`: `DatePickerType | Type`. Picker type: range, multiple or default Known values: "default", "multiple", "range". - `unstyled`: `false | true`. Known values: false, true. - `value`: `DatePickerValue`. Value for controlled component - `variant`: `string`. - `weekendDays`: `DayOfWeek[]`. Indices of weekend days, 0-6, where 0 is Sunday and 6 is Saturday. The default value is defined by `DatesProvider`. - `withCellSpacing`: `false | true`. Determines whether controls should be separated Known values: false, true. - `withNativeLevelSelect`: `false | true`. Determines whether level select controls should be rendered as native `` elements Known values: false, true. - `withNext`: `false | true`. Determines whether next control should be rendered Known values: false, true. - `withPrevious`: `false | true`. Determines whether previous control should be rendered Known values: false, true. - `withWeekNumbers`: `false | true`. Determines whether week numbers should be displayed Known values: false, true. - `yearsSelectRange`: `[number, number]`. Year range for native level select, tuple of `[startYear, endYear]`. Defaults to `[currentYear - 100, currentYear + 50]` or values derived from `minDate`/`maxDate` if set. - Include a textual date when the visual calendar carries meaning. [Upstream documentation for MonthLevel](https://mantine.dev/dates/month-level/) ## MonthLevelGroup @mantine/dates; dates; safety: wrapped. - `attributes`: `{ month?: Record; weekday?: Record; weekdaysRow?: Record; monthRow?: Record; ... 10 more ...; levelsGroup?: Record<...>; }`. - `color`: `string`. - `firstDayOfWeek`: `0 | 2 | 3 | 4 | 5 | 6 | 1`. Number 0-6, where 0 – Sunday and 6 – Saturday. Known values: 0, 1, 2, 3, 4, 5, 6. - `fullWidth`: `false | true`. Determines whether the calendar should take the full width of its container Known values: false, true. - `hasNextLevel`: `false | true`. Determines whether next level button should be enabled Known values: false, true. - `headerControlsOrder`: `("next" | "previous" | "level")[]`. Controls order - `hideOutsideDates`: `false | true`. Determines whether outside dates should be hidden Known values: false, true. - `hideWeekdays`: `false | true`. Determines whether weekdays row should be hidden Known values: false, true. - `highlightToday`: `false | true`. Determines whether today should be highlighted with a border Known values: false, true. - `locale`: `string`. `dayjs` locale, the default value is defined by `DatesProvider` - `maxDate`: `string | Date`. Maximum possible date, in `YYYY-MM-DD` format - `minDate`: `string | Date`. Minimum possible date, in `YYYY-MM-DD` format - `month`: `string`. Required. Month to display - `nextDisabled`: `false | true`. Disables next control Known values: false, true. - `nextIcon`: `React.ReactNode`. Change next icon - `nextLabel`: `string`. Next button `aria-label` - `numberOfColumns`: `number`. Number of columns to display next to each other - `previousDisabled`: `false | true`. Disables previous control Known values: false, true. - `previousIcon`: `React.ReactNode`. Change previous icon - `previousLabel`: `string`. Previous button `aria-label` - `size`: `"xs" | "sm" | "md" | "lg" | "xl"`. Controls size Known values: "lg", "md", "sm", "xl", "xs". - `static`: `false | true`. Passed as `isStatic` prop to `Month` component Known values: false, true. - `styles`: `Partial>`. - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - `weekendDays`: `DayOfWeek[]`. Indices of weekend days, 0-6, where 0 is Sunday and 6 is Saturday. The default value is defined by `DatesProvider`. - `withCellSpacing`: `false | true`. Determines whether controls should be separated by space Known values: false, true. - `withNativeLevelSelect`: `false | true`. Determines whether level select controls should be rendered as native `` elements Known values: false, true. - Include a textual date when the visual calendar carries meaning. [Upstream documentation for MonthPicker](https://mantine.dev/dates/month-picker/) ## MonthPickerInput @mantine/dates; dates; safety: wrapped. Bind a temporary string input with `bind`. Initialize with `defaultValue`; reset with `resetKey`. - `allowDeselect`: `(Type extends "default" ? boolean : never)`. Determines whether user can deselect the date by clicking on selected item, applicable only when type="default" - `allowSingleDateInRange`: `(Type extends "range" ? boolean : never)`. Determines whether a single day can be selected as range, applicable only when type="range" - `ariaLabels`: `CalendarAriaLabels`. `aria-label` attributes for controls on different levels - `attributes`: `{ input?: Record; label?: Record; section?: Record; root?: Record; ... 23 more ...; monthPickerRoot?: Record<...>; }`. - `clearButtonProps`: `React.DetailedHTMLProps, HTMLButtonElement>`. Props passed down to the clear button - `clearSectionMode`: `"both" | "rightSection" | "clear"`. Determines how the clear button and rightSection are rendered Known values: "both", "clear", "rightSection". - `clearable`: `false | true`. If set, clear button is displayed in the `rightSection` when the component has value. Ignored if `rightSection` prop is set. Known values: false, true. - `closeOnChange`: `false | true`. Determines whether the dropdown is closed when date is selected, not applicable with `type="multiple"` Known values: false, true. - `color`: `string`. - `columnsToScroll`: `number`. Number of columns to scroll with next/prev buttons, same as `numberOfColumns` if not set explicitly - `date`: `string | Date`. Displayed date in controlled mode - `defaultDate`: `string | Date`. Initial displayed date in uncontrolled mode - `defaultLevel`: `"month" | "year" | "decade"`. Initial displayed level (uncontrolled) Known values: "decade", "month", "year". - `defaultValue`: `DatePickerValue`. Default value for uncontrolled component - `description`: `React.ReactNode`. Contents of `Input.Description` component. If not set, description is not displayed. - `descriptionProps`: `(InputDescriptionProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Description` component - `error`: `React.ReactNode`. Contents of `Input.Error` component. If not set, error is not displayed. - `errorProps`: `(InputErrorProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Error` component - `fullWidth`: `false | true`. Determines whether the list should take the full width of its container Known values: false, true. - `inputSize`: `string`. HTML `size` attribute for the input element (number of visible characters) - `inputWrapperOrder`: `("input" | "label" | "description" | "error")[]`. Controls order and visibility of wrapper elements. Only elements included in this array will be rendered. - `label`: `React.ReactNode`. Contents of `Input.Label` component. If not set, label is not displayed. - `labelProps`: `(InputLabelProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Label` component - `labelSeparator`: `string`. Separator between range value - `leftSection`: `React.ReactNode`. Content section displayed on the left side of the input - `leftSectionPointerEvents`: `"-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset" | "none" | "auto" | "all" | "fill" | "stroke" | "painted" | "visible" | "visibleFill" | "visiblePainted" | "visibleStroke"`. Sets `pointer-events` styles on the `leftSection` element. Use `'all'` when section contains interactive elements (buttons, links). Known values: "-moz-initial", "all", "auto", "fill", "inherit", "initial", "none", "painted", "revert", "revert-layer", "stroke", "unset", "visible", "visibleFill", "visiblePainted", "visibleStroke". - `leftSectionProps`: `React.DetailedHTMLProps, HTMLDivElement>`. Props passed down to the `leftSection` element - `leftSectionWidth`: `Property.Width`. Left section width, used to set `width` of the section and input `padding-left`, by default equals to the input height - `level`: `"month" | "year" | "decade"`. Current displayed level (controlled) Known values: "decade", "month", "year". - `loading`: `false | true`. Displays loading indicator in the left or right section Known values: false, true. - `loadingPosition`: `"left" | "right"`. Position of the loading indicator Known values: "left", "right". - `locale`: `string`. Dayjs locale, defaults to value defined in DatesProvider - `maxDate`: `string | Date`. Maximum possible date in `YYYY-MM-DD` format or Date object - `maxLevel`: `"month" | "year" | "decade"`. Max level that user can go up to Known values: "decade", "month", "year". - `minDate`: `string | Date`. Minimum possible date in `YYYY-MM-DD` format or Date object - `nextLabel`: `string`. Next button `aria-label` - `numberOfColumns`: `number`. Number of columns displayed next to each other - `pointer`: `false | true`. Determines whether the input should have `cursor: pointer` style. Use when input acts as a button-like trigger (e.g., `component="button"` for Select/DatePicker). Known values: false, true. - `popoverProps`: `Partial>`. Props passed down to `Popover` component - `presets`: `MonthPickerPreset[]`. Predefined values to pick from - `previousLabel`: `string`. Previous button `aria-label` - `rightSection`: `React.ReactNode`. Content section displayed on the right side of the input - `rightSectionPointerEvents`: `"-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset" | "none" | "auto" | "all" | "fill" | "stroke" | "painted" | "visible" | "visibleFill" | "visiblePainted" | "visibleStroke"`. Sets `pointer-events` styles on the `rightSection` element. Use `'all'` when section contains interactive elements (buttons, links). Known values: "-moz-initial", "all", "auto", "fill", "inherit", "initial", "none", "painted", "revert", "revert-layer", "stroke", "unset", "visible", "visibleFill", "visiblePainted", "visibleStroke". - `rightSectionProps`: `React.DetailedHTMLProps, HTMLDivElement>`. Props passed down to the `rightSection` element - `rightSectionWidth`: `Property.Width`. Right section width, used to set `width` of the section and input `padding-right`, by default equals to the input height - `size`: `"xs" | "sm" | "md" | "lg" | "xl"`. Component size Known values: "lg", "md", "sm", "xl", "xs". - `sortDates`: `false | true`. Determines whether dates values should be sorted before `onChange` call, only applicable with type="multiple" Known values: false, true. - `success`: `React.ReactNode`. Contents of `Input.Success` component. If not set, success is not displayed. - `successProps`: `(InputSuccessProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Success` component - `type`: `DatePickerType | Type`. Picker type: range, multiple or default Known values: "default", "multiple", "range". - `unstyled`: `false | true`. Known values: false, true. - `value`: `DatePickerValue`. Value for controlled component - `valueFormat`: `string`. `dayjs` format for input value - `variant`: `(string & {}) | InputVariant`. Known values: "default", "filled", "unstyled". - `withAsterisk`: `false | true`. If set, the required asterisk is displayed next to the label. Overrides `required` prop. Does not add required attribute to the input. Known values: false, true. - `withCellSpacing`: `false | true`. Determines whether controls should be separated Known values: false, true. - `withErrorStyles`: `false | true`. Determines whether the input should have red border and red text color when the `error` prop is set Known values: false, true. - `withNativeLevelSelect`: `false | true`. Determines whether level select controls should be rendered as native `` elements Known values: false, true. - `withNext`: `false | true`. Determines whether next control should be rendered Known values: false, true. - `withPrevious`: `false | true`. Determines whether previous control should be rendered Known values: false, true. - `year`: `string`. Required. Displayed year value in `YYYY-MM-DD` format - `yearsSelectRange`: `[number, number]`. Year range for native level select, tuple of `[startYear, endYear]`. Defaults to `[currentYear - 100, currentYear + 50]` or values derived from `minDate`/`maxDate` if set. - Include a textual date when the visual calendar carries meaning. [Upstream documentation for YearLevel](https://mantine.dev/dates/year-level/) ## YearLevelGroup @mantine/dates; dates; safety: wrapped. - `attributes`: `{ calendarHeader?: Record; calendarHeaderControl?: Record; calendarHeaderLevel?: Record; ... 6 more ...; monthsListControl?: Record<...>; }`. - `color`: `string`. - `fullWidth`: `false | true`. Determines whether the calendar should take the full width of its container Known values: false, true. - `hasNextLevel`: `false | true`. Determines whether next level button should be enabled Known values: false, true. - `headerControlsOrder`: `("next" | "previous" | "level")[]`. Controls order - `locale`: `string`. Dayjs locale, defaults to value defined in DatesProvider - `maxDate`: `string | Date`. Maximum possible date in `YYYY-MM-DD` format or Date object - `minDate`: `string | Date`. Minimum possible date in `YYYY-MM-DD` format or Date object - `nextDisabled`: `false | true`. Disables next control Known values: false, true. - `nextIcon`: `React.ReactNode`. Change next icon - `nextLabel`: `string`. Next button `aria-label` - `numberOfColumns`: `number`. Number of columns displayed next to each other - `previousDisabled`: `false | true`. Disables previous control Known values: false, true. - `previousIcon`: `React.ReactNode`. Change previous icon - `previousLabel`: `string`. Previous button `aria-label` - `size`: `"xs" | "sm" | "md" | "lg" | "xl"`. Component size Known values: "lg", "md", "sm", "xl", "xs". - `styles`: `Partial>`. - `unstyled`: `false | true`. Known values: false, true. - `variant`: `string`. - `withCellSpacing`: `false | true`. Determines whether controls should be separated Known values: false, true. - `withNativeLevelSelect`: `false | true`. Determines whether level select controls should be rendered as native `` elements Known values: false, true. - Include a textual date when the visual calendar carries meaning. [Upstream documentation for YearPicker](https://mantine.dev/dates/year-picker/) ## YearPickerInput @mantine/dates; dates; safety: wrapped. Bind a temporary string input with `bind`. Initialize with `defaultValue`; reset with `resetKey`. - `allowDeselect`: `(Type extends "default" ? boolean : never)`. Determines whether user can deselect the date by clicking on selected item, applicable only when type="default" - `allowSingleDateInRange`: `(Type extends "range" ? boolean : never)`. Determines whether a single day can be selected as range, applicable only when type="range" - `ariaLabels`: `CalendarAriaLabels`. `aria-label` attributes for controls on different levels - `attributes`: `{ input?: Record; label?: Record; section?: Record; root?: Record; ... 19 more ...; yearPickerRoot?: Record<...>; }`. - `clearButtonProps`: `React.DetailedHTMLProps, HTMLButtonElement>`. Props passed down to the clear button - `clearSectionMode`: `"both" | "rightSection" | "clear"`. Determines how the clear button and rightSection are rendered Known values: "both", "clear", "rightSection". - `clearable`: `false | true`. If set, clear button is displayed in the `rightSection` when the component has value. Ignored if `rightSection` prop is set. Known values: false, true. - `closeOnChange`: `false | true`. Determines whether the dropdown is closed when date is selected, not applicable with `type="multiple"` Known values: false, true. - `color`: `string`. - `columnsToScroll`: `number`. Number of columns to scroll with next/prev buttons, same as `numberOfColumns` if not set explicitly - `date`: `string | Date`. Displayed date in controlled mode - `defaultDate`: `string | Date`. Initial displayed date in uncontrolled mode - `defaultValue`: `DatePickerValue`. Default value for uncontrolled component - `description`: `React.ReactNode`. Contents of `Input.Description` component. If not set, description is not displayed. - `descriptionProps`: `(InputDescriptionProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Description` component - `error`: `React.ReactNode`. Contents of `Input.Error` component. If not set, error is not displayed. - `errorProps`: `(InputErrorProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Error` component - `fullWidth`: `false | true`. Determines whether the list should take the full width of its container Known values: false, true. - `inputSize`: `string`. HTML `size` attribute for the input element (number of visible characters) - `inputWrapperOrder`: `("input" | "label" | "description" | "error")[]`. Controls order and visibility of wrapper elements. Only elements included in this array will be rendered. - `label`: `React.ReactNode`. Contents of `Input.Label` component. If not set, label is not displayed. - `labelProps`: `(InputLabelProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Label` component - `labelSeparator`: `string`. Separator between range value - `leftSection`: `React.ReactNode`. Content section displayed on the left side of the input - `leftSectionPointerEvents`: `"-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset" | "none" | "auto" | "all" | "fill" | "stroke" | "painted" | "visible" | "visibleFill" | "visiblePainted" | "visibleStroke"`. Sets `pointer-events` styles on the `leftSection` element. Use `'all'` when section contains interactive elements (buttons, links). Known values: "-moz-initial", "all", "auto", "fill", "inherit", "initial", "none", "painted", "revert", "revert-layer", "stroke", "unset", "visible", "visibleFill", "visiblePainted", "visibleStroke". - `leftSectionProps`: `React.DetailedHTMLProps, HTMLDivElement>`. Props passed down to the `leftSection` element - `leftSectionWidth`: `Property.Width`. Left section width, used to set `width` of the section and input `padding-left`, by default equals to the input height - `loading`: `false | true`. Displays loading indicator in the left or right section Known values: false, true. - `loadingPosition`: `"left" | "right"`. Position of the loading indicator Known values: "left", "right". - `locale`: `string`. Dayjs locale, defaults to value defined in DatesProvider - `maxDate`: `string | Date`. Maximum possible date in `YYYY-MM-DD` format or Date object - `minDate`: `string | Date`. Minimum possible date in `YYYY-MM-DD` format or Date object - `nextLabel`: `string`. Next button `aria-label` - `numberOfColumns`: `number`. Number of columns displayed next to each other - `pointer`: `false | true`. Determines whether the input should have `cursor: pointer` style. Use when input acts as a button-like trigger (e.g., `component="button"` for Select/DatePicker). Known values: false, true. - `popoverProps`: `Partial>`. Props passed down to `Popover` component - `presets`: `YearPickerPreset[]`. Predefined values to pick from - `previousLabel`: `string`. Previous button `aria-label` - `rightSection`: `React.ReactNode`. Content section displayed on the right side of the input - `rightSectionPointerEvents`: `"-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset" | "none" | "auto" | "all" | "fill" | "stroke" | "painted" | "visible" | "visibleFill" | "visiblePainted" | "visibleStroke"`. Sets `pointer-events` styles on the `rightSection` element. Use `'all'` when section contains interactive elements (buttons, links). Known values: "-moz-initial", "all", "auto", "fill", "inherit", "initial", "none", "painted", "revert", "revert-layer", "stroke", "unset", "visible", "visibleFill", "visiblePainted", "visibleStroke". - `rightSectionProps`: `React.DetailedHTMLProps, HTMLDivElement>`. Props passed down to the `rightSection` element - `rightSectionWidth`: `Property.Width`. Right section width, used to set `width` of the section and input `padding-right`, by default equals to the input height - `size`: `"xs" | "sm" | "md" | "lg" | "xl"`. Component size Known values: "lg", "md", "sm", "xl", "xs". - `sortDates`: `false | true`. Determines whether dates values should be sorted before `onChange` call, only applicable with type="multiple" Known values: false, true. - `success`: `React.ReactNode`. Contents of `Input.Success` component. If not set, success is not displayed. - `successProps`: `(InputSuccessProps & DataAttributes & PlaceholderPolymorphicProps)`. Props passed down to the `Input.Success` component - `type`: `DatePickerType | Type`. Picker type: range, multiple or default Known values: "default", "multiple", "range". - `unstyled`: `false | true`. Known values: false, true. - `value`: `DatePickerValue`. Value for controlled component - `valueFormat`: `string`. `dayjs` format to display input value - `variant`: `(string & {}) | InputVariant`. Known values: "default", "filled", "unstyled". - `withAsterisk`: `false | true`. If set, the required asterisk is displayed next to the label. Overrides `required` prop. Does not add required attribute to the input. Known values: false, true. - `withCellSpacing`: `false | true`. Determines whether controls should be separated Known values: false, true. - `withErrorStyles`: `false | true`. Determines whether the input should have red border and red text color when the `error` prop is set Known values: false, true. - `withNativeLevelSelect`: `false | true`. Determines whether level select controls should be rendered as native `