Thomas Camlong 09c56002d6 fix(db): name the custom widget secret foreign key within mysql limits
drizzle derives `custom_widget_secret_definition_id_custom_widget_definition_id_fk`,
which is 65 characters. MySQL caps identifiers at 64 and rejects it with
error 1059, so migration 0040 created the key under a shortened name. The
schema never declared that name, so every `migration:mysql:generate` run
re-proposed dropping and recreating the key under the long one, producing a
migration that cannot be applied.

Declaring the shortened name explicitly makes the schema match what is
actually in the database. Only the mysql schema changes; sqlite and
postgresql keep their derived names and need no migration.

The parity test matched keys across dialects by generated name, which no
longer holds, so it now matches on what a key links - its columns, target
table and target columns - and compares the referential actions. That also
means it reads keys through getTableConfig and so covers table-level
declarations, not just inline .references() ones.

Adds a guard test asserting no mysql table, foreign key or index name
exceeds 64 characters, so the next long pairing fails in CI instead of
producing an unappliable migration.
2026-08-07 18:14:23 +02:00
2026-08-07 15:25:03 +02:00
2026-07-13 18:32:48 +02:00
2026-07-13 18:32:48 +02:00
2026-07-31 18:16:44 +00:00
2026-08-03 17:55:03 +02:00
2024-11-05 21:11:14 +01:00
2026-07-13 18:32:48 +02:00

  Latest Release (Semver)   CI Status  

Live Demo 🎮 • Install 💻 • Translations 🈺 • Discord 👋

  • 🖌️ Highly customizable with an extensive drag and drop grid system
  • ✨ Integrates seamlessly with your favorite self-hosted applications
  • 📌 Easy and fast app management - no YAML involved
  • 👤 Detailed and easy to use user management with permissions and groups
  • 👥 Support for single sign on via OIDC / LDAP
  • 🙊 Safe encryption using BCrypt and AES-256-CBC for your valuable data
  • 🕔 Realtime widget updates using WebSockets, tRPC and Redis
  • 🔍 Search through thousands of data points in supported integrations or your data in Homarr using the fast built-in search
  • 🦞 Icon picker with over 11K icons
  • 🚀 Compatible with any major consumer hardware (x86, Raspberry Pi, old laptops, ...) and most OS (Windows, Linux, TrueNAS, Unraid)
  • 🖥️ Extensive Kubernetes support with Helm for efficient scaling & high reliability




Please click here for official installation instructions




Homarr is a free-to-use open source project maintained by volunteers and developers from all over the world. We publish under the Apache License 2.0 license which allows commercial usage. We invest multiple hours daily in providing support, developing Homarr, integrating to third party software and more. We also pay for licensing and server hosting fees. Please consider helping us cover these costs to enable the future development of Homarr. Thank you!

Please click here to sponsor us at OpenCollective

You can also support us by helping with translating the entire project to as many languages as possible or contributing directly to the code or documentation. Please read our Contribution Guidelines. All contributions, regardless of their size or scope, are welcome and highly appreciated! Thank you ❤️

Sponsors

Thanks to your generous sponsors, we can continue to build Homarr. Check them out for high-quality and easy-to-use development tools. Feel free to contact us at homarr-labs@proton.me if you wish to become a sponsor.

Covered by Argos Visual Testing
Supported by PikaPods

S
Description
A modern and easy to use dashboard. 40+ integrations. 20K+ icons built in. Authentication out of the box. No YAML, drag and drop configuration.
https://homarr.dev Readme Apache-2.0
243 MiB
0 Stars 1 Watchers 0 Forks
Languages
TypeScript 89.5%
MDX 7%
Go 1.8%
CSS 0.9%
JavaScript 0.4%
Other 0.3%