{"record":{"id":"a68769072155f79e","repo":"mattermost-community/focalboard","slug":"views-limit-reached-for-board","errorCode":null,"errorMessage":"views limit reached for board","messagePattern":"views limit reached for board","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/model/error.go","lineNumber":16,"sourceCode":"package model\n\nimport (\n\t\"database/sql\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"strings\"\n\n\tmmModel \"github.com/mattermost/mattermost/server/public/model\"\n\n\tpluginapi \"github.com/mattermost/mattermost/server/public/pluginapi\"\n)\n\nvar (\n\tErrViewsLimitReached        = errors.New(\"views limit reached for board\")\n\tErrPatchUpdatesLimitedCards = errors.New(\"patch updates cards that are limited\")\n\n\tErrInsufficientLicense = errors.New(\"appropriate license required\")\n\n\tErrCategoryPermissionDenied = errors.New(\"category doesn't belong to user\")\n\tErrCategoryDeleted          = errors.New(\"category is deleted\")\n\n\tErrBoardMemberIsLastAdmin = errors.New(\"cannot leave a board with no admins\")\n\n\tErrRequestEntityTooLarge = errors.New(\"request entity too large\")\n\n\tErrInvalidBoardSearchField = errors.New(\"invalid board search field\")\n)\n\n// ErrNotFound is an error type that can be returned by store APIs\n// when a query unexpectedly fetches no records.\ntype ErrNotFound struct {\n\tentity string","sourceCodeStart":1,"sourceCodeEnd":34,"githubUrl":"https://github.com/mattermost-community/focalboard/blob/a84bbb65e32edf972856b329417096ac413518e9/server/model/error.go#L1-L34","documentation":"ErrViewsLimitReached is returned when a board has hit the maximum number of allowed views, a limit enforced on free/unlicensed Mattermost Boards installations. Views are tab-like display surfaces (board/table/gallery/calendar) attached to a board. The limit is a licensing restriction, not a data-integrity error.","triggerScenarios":"Calling the create-view API (POST /api/v1/boards/{boardID}/views) when the board already contains the maximum number of views permitted by the current license state.","commonSituations":"Free-tier Mattermost installs after Mattermost changed Boards views to a paid feature; teams sharing boards with many views; upgrades that introduce the licensing check where it previously did not exist.","solutions":["Delete unused views from the board to free a slot","Upgrade to a Mattermost license that includes unlimited Boards views","Run Mattermost in a mode/edition where Boards views are not metered"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":"views, err := app.GetViewsForBoard(boardID)\nif err == nil && len(views) >= limit {\n    // prompt user to delete a view before creating another\n}","typeGuard":"func isViewsLimitErr(err error) bool {\n    return errors.Is(err, model.ErrViewsLimitReached)\n}","tryCatchPattern":"view, err := app.CreateView(boardID)\nif errors.Is(err, model.ErrViewsLimitReached) {\n    // surface upgrade prompt or delete-and-retry\n}","preventionTips":["Count views before creating new ones","Show an upgrade prompt in free-tier UIs","Monitor license state changes that enable the limit"],"tags":["go","licensing","views-limit","boards"],"backgroundTag":"license-limit-reached","analyzedSha":"a84bbb65e32edf972856b329417096ac413518e9","analyzedAt":"2026-08-30T09:22:20.720Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}