Three UX bugs in the icon picker: 1. Skeleton-forever on edit screens. The input was pre-filled with the full CDN URL, the search query fired with that URL, and the DB only stores bare filenames, so the response was always empty -> 15 skeletons, forever. Decouple the input display from the query: initialize search to the committed value and only fire the query when the user has actually typed something different. 2. Loading / error / no-results all looked identical (15 skeletons). Split the render into four explicit branches: isError (with retry), isLoading (skeletons, only on cold first load), results, no-results. 3. No relevance ranking and no SVG-first ordering. Add orderBy in the icons router: relevance tier (exact > prefix > substring) -> SVG first -> alphabetical. Patterns are bound as JS strings so the SQL works across sqlite / postgresql / mysql without concat operator differences. Also add placeholderData: keepPreviousData so refetching during typing doesn't flash the dropdown to skeletons, fix the upload pre-fill that was leaking a local media URL into the search, drop the no-op updateSelectedOptionIndex, and mark the file as a client component so Next.js can render it from server-component routes. Add common.iconPicker headerLoading / noResults / error keys to en.json (other locales fall back to en until the next sync). No ternaries in the changed files. Intended simplifications are marked with ponytail: comments.
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.





