-
What Grafana version and what operating system are you using?
Grafana version: Grafana v11.6.8 (c3e34314f7)
OS: macOS Tahoe 26.5.2 -
What are you trying to achieve?
I would like to understand whether Grafana has an upper limit on the number of dashboards that a user can mark as Favorites (Starred/Favorited dashboards). -
How are you trying to achieve it?
We are reviewing the dashboard pinning/favorites functionality and updating our product documentation. We want to verify whether Grafana enforces any limit on the number of dashboards that can be marked as favorites by a user. -
What happened?
We could not find any documented limit in Grafana and have not encountered any restrictions during initial testing -
What did you expect to happen?
We would like confirmation on the following:- Is there a maximum number of dashboards that can be marked as favorites per user?
- If a limit exists, what is the default value and can it be configured?
- Are there any performance considerations when a large number of dashboards are marked as favorites?
-
Can you copy/paste the configuration(s) that you are having problems with?
No specific configuration is involved. This is a general question regarding Grafanaβs favorites/starred dashboards functionality. -
Did you receive any errors in the Grafana UI or in related logs? If so, please tell us exactly what they were.
No errors were observed. -
Did you follow any online instructions? If so, what is the URL?
We reviewed the Grafana documentation but could not find information regarding any maximum limit for favorited/starred dashboards.
I ran source AI source code analysis for you:
1. Is there a maximum number of starred dashboards per user?
No hard limit exists. The starring system has no enforced cap on the number of dashboards a user can mark as favorites. Reviewing the full stack confirms this:
pkg/services/star/starimpl/star.goβAdd()simply validates the command and callsInsert(). No count check, no quota guard.pkg/services/star/starimpl/xorm_store.goβInsert()writes a row to thestartable without any row-count check.pkg/services/star/model.goβ The data model has no max-stars field or quota target.
The quota system ([quota] in grafana.ini) covers org-level dashboards, users, data sources, API keys, and alert rules β not per-user starred dashboards. There is no user_star quota target defined anywhere in the codebase.
2. Default value and configurability
| Config Key | Applies To | Default |
|---|---|---|
quota.org_dashboard |
Dashboards created per org | 100 |
quota.user_org |
Orgs a user can create | 10 |
| (no key) | Dashboards starred per user | No limit, not configurable |
There is no grafana.ini setting that bounds how many dashboards can be starred per user.
3. Performance considerations with many starred dashboards
There are real performance implications buried in the code:
a) List() loads all stars on every search request β no pagination
grafana / grafana / pkg / services / star / starimpl / xorm_store.go
func (s *sqlStore) List(ctx context.Context, query *star.GetUserStarsQuery) (*star.GetUserStarsResult, error) {
userStars := make(map[string]bool)
err := s.db.WithDbSession(ctx, func(dbSession *db.Session) error {
var stars = make([]star.Star, 0)
err := dbSession.Where("user_id=?", query.UserID).Find(&stars)
for _, star := range stars {
A full table scan filtered only by user_id β no LIMIT. If a user has thousands of starred dashboards, this returns all of them every time.
b) Star UIDs are injected into every search query
grafana / grafana / pkg / services / search / service.gov1
if query.IsStarred && len(query.DashboardIds) == 0 && len(query.DashboardUIDs) == 0 {
for uid := range staredDashUIDs {
query.DashboardUIDs = append(query.DashboardUIDs, uid)
}
}
When a user searches for starred dashboards, all starred UIDs are passed as a filter list to the dashboard search query. A very large number of UIDs can generate expensive IN (...) clauses in SQL or large request payloads to the Kubernetes API (Unified Storage mode).
c) Stars are loaded on every SearchHandler call
grafana / grafana / pkg / services / search / service.gov2
staredDashUIDs, err := s.getUserStars(ctx)
getUserStars is called unconditionally on every search, even when IsStarred=false. A user with many favorites causes a DB round-trip on every dashboard search.
Summary
| Question | Answer |
|---|---|
| Hard limit on starred dashboards per user? | |
| Default limit | N/A β unlimited |
| Configurable? | grafana.ini or quota system |
| Performance concerns with many favorites? | List() query, full UID list injected into searches, and stars fetched on every search request |
If you anticipate users starring hundreds or thousands of dashboards, the main risks are: increased DB query time on the star table, large IN clauses in dashboard search SQL, and growing memory allocations for the map[string]bool built on every request.
Thanks a lot @jangaraj