Best practices for keeping your Forest layouts clean, fast, and up to date over time.
A Forest project evolves along with your product. New fields get added, old workflows get replaced, and teams change. Without periodic maintenance, layouts accumulate unused components, obsolete segments, and hidden fields that slow things down.This page covers practical habits for keeping your back-office healthy.
If a detail view shows HasMany relationships, each panel loads additional records. Limit the number of visible relationship panels to what operators actually use.
Segments with complex filters can slow down collection loading. Ensure that fields used in segment filters have appropriate database indexes. Work with your technical team to add indexes if needed.
Layouts interact with permissions. A field visible in the layout but restricted by permissions creates confusion (“why can’t I see this?”). Periodically review:
Fields visible in layouts but restricted for most roles
Actions shown in the UI but denied at the permission level
Segments visible to teams who shouldn’t filter by those criteria
See Roles & Permissions for how to align layout visibility with access control.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Forest Documentation","colors":{"primary":"#3F5B1E","light":"#DDF327","dark":"#3F5B1E"},"logo":{"light":"https://mintcdn.com/forest/ZO8t9buUjTuKyt-F/images/Standard.svg?fit=max\u0026auto=format\u0026n=ZO8t9buUjTuKyt-F\u0026q=85\u0026s=d4e172941c964df57009cfa8be809b96","dark":"https://mintcdn.com/forest/ZO8t9buUjTuKyt-F/images/LIME.svg?fit=max\u0026auto=format\u0026n=ZO8t9buUjTuKyt-F\u0026q=85\u0026s=91e95470256b93527860cba6c206cbc4"},"favicon":{"light":"https://mintcdn.com/forest/ZO8t9buUjTuKyt-F/images/Standard.svg?fit=max\u0026auto=format\u0026n=ZO8t9buUjTuKyt-F\u0026q=85\u0026s=d4e172941c964df57009cfa8be809b96","dark":"https://mintcdn.com/forest/ZO8t9buUjTuKyt-F/images/LIME.svg?fit=max\u0026auto=format\u0026n=ZO8t9buUjTuKyt-F\u0026q=85\u0026s=91e95470256b93527860cba6c206cbc4"},"navbar":{"links":[{"href":"mailto:support@forestadmin.com","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.forestadmin.com"}},"footer":{"socials":{"twitter":"https://twitter.com/forest_admin","github":"https://github.com/ForestAdmin","linkedin":"https://linkedin.com/company/forestadmin"}},"contextual":{"options":["copy","view","claude","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"forest","hasAudioNarration":false,"actualSubdomain":"forest","customDomains":["docs.forest.app"],"gitSource":{"type":"github","owner":"forestadmin","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adb428a343e8b4158140116","collectionId":"5365b6a4-fce8-4b58-90bc-27e15a3e4242","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adb428a343e8b4158140116"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"DISABLED"},"CONTEXTUAL_FEEDBACK":{"status":"DISABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"DISABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6adb428a343e8b4158140116","clientVersion":"0.0.3966","searchFilterCounts":[{"language":"default","tag":"Legacy","count":289},{"language":"default","tag":"JavaScript Agents","count":141},{"language":"default","tag":"Ruby Agent","count":140},{"language":"default","tag":"Product","count":113},{"language":"default","tag":"Integrations","count":64},{"language":"default","tag":"Actions","count":48},{"language":"default","tag":"Smart Action Examples","count":34},{"language":"default","tag":"Process","count":32},{"language":"default","tag":"Upgrade","count":31},{"language":"default","tag":"Connect","count":30}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"support@forestadmin.com"}},"hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"guides/best-practices/layout-maintenance","slug":"/guides/best-practices/layout-maintenance","pageMetadata":{"title":"Layout maintenance","description":"Best practices for keeping your Forest layouts clean, fast, and up to date over time.","href":"/guides/best-practices/layout-maintenance"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Best practices for keeping your Forest layouts clean, fast, and up to date over time.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Table,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`A Forest project evolves along with your product. New fields get added, old workflows get replaced, and teams change. Without periodic maintenance, layouts accumulate unused components, obsolete segments, and hidden fields that slow things down.`}),`\n`,_jsx(_components.p,{children:`This page covers practical habits for keeping your back-office healthy.`}),`\n`,_jsx(Heading,{level:`2`,id:`identifying-layout-issues`,children:`Identifying layout issues`}),`\n`,_jsx(_components.p,{children:`Before cleaning up, audit what exists. Common issues to look for:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Hidden fields that haven’t been used in months`}),`: they still load but no one sees them`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Duplicate segments`}),`: multiple segments with the same or overlapping filters`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Orphaned Smart Actions`}),`: actions whose backend logic was removed but the button still appears`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Outdated collection names`}),`: labels that no longer reflect what the data represents`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Unused relationships`}),`: related collections shown in detail views that operators never scroll to`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`To audit your layout, enter Layout Editor mode and review each collection systematically.`}),`\n`,_jsx(Heading,{level:`2`,id:`cleanup-tasks`,children:`Cleanup tasks`}),`\n`,_jsx(Heading,{level:`3`,id:`removing-unused-fields`,children:`Removing unused fields`}),`\n`,_jsx(_components.p,{children:`Fields hidden in the Layout Editor still exist in the schema and are returned by queries in some cases. If a field is no longer relevant:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Hide it in the Layout Editor (for operator-facing cleanup)`}),`\n`,_jsx(_components.li,{children:`If it’s a computed/smart field defined in code, remove it from your agent configuration`}),`\n`,_jsx(_components.li,{children:`Deploy your changes`}),`\n`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Don’t remove fields that are still referenced in segments, Smart Actions, or custom views, even if hidden from the main layout.`})}),`\n`,_jsx(Heading,{level:`3`,id:`cleaning-up-segments`,children:`Cleaning up segments`}),`\n`,_jsx(_components.p,{children:`Too many segments make navigation confusing. Review your segments periodically:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Archive segments that are no longer used by any team`}),`\n`,_jsx(_components.li,{children:`Merge overlapping segments into a single one with multiple filter options`}),`\n`,_jsx(_components.li,{children:`Rename segments to reflect current workflows (e.g. “New signups” → “Onboarding queue”)`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`archiving-old-actions`,children:`Archiving old actions`}),`\n`,_jsx(_components.p,{children:`Smart Actions that were useful in the past may no longer apply. To clean up:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Identify actions with zero recent usage (check the `,_jsx(_components.a,{href:`/get-started/control/audit`,children:`Activity log`}),`)`]}),`\n`,_jsx(_components.li,{children:`Hide them from the collection’s action menu in collection settings`}),`\n`,_jsx(_components.li,{children:`Remove the underlying code from your agent if the feature is truly deprecated`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`collection-organization`,children:`Collection organization`}),`\n`,_jsx(_components.p,{children:`As your project grows, the sidebar navigation can become cluttered:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Reorder collections`}),` in the sidebar by dragging them in Layout Editor mode`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Hide collections`}),` that are only relevant for technical debugging`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Group related collections`}),` using Workspaces so operators access them in context`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`performance-optimization`,children:`Performance optimization`}),`\n`,_jsx(_components.p,{children:`Layout issues can cause slow page loads even when the database is fast.`}),`\n`,_jsx(Heading,{level:`3`,id:`widget-optimization`,children:`Widget optimization`}),`\n`,_jsx(_components.p,{children:`Some widget types are more expensive than others. For table views on large collections:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Prefer lightweight display widgets (plain text, badge, date) over complex ones (file viewer, rich text renderer)`}),`\n`,_jsx(_components.li,{children:`Avoid showing relationship fields in table view columns, as they trigger additional queries per row`}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`relationship-panel-limits`,children:`Relationship panel limits`}),`\n`,_jsx(_components.p,{children:`If a detail view shows HasMany relationships, each panel loads additional records. Limit the number of visible relationship panels to what operators actually use.`}),`\n`,_jsx(Heading,{level:`3`,id:`segment-query-performance`,children:`Segment query performance`}),`\n`,_jsx(_components.p,{children:`Segments with complex filters can slow down collection loading. Ensure that fields used in segment filters have appropriate database indexes. Work with your technical team to add indexes if needed.`}),`\n`,_jsx(Heading,{level:`2`,id:`regular-maintenance-schedule`,children:`Regular maintenance schedule`}),`\n`,_jsx(_components.p,{children:`A lightweight recurring review prevents layout debt from accumulating:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Frequency`}),_jsx(_components.th,{children:`Task`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Monthly`})}),_jsx(_components.td,{children:`Review new fields added since last deployment; configure widgets and visibility`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Quarterly`})}),_jsx(_components.td,{children:`Audit segments and remove unused ones`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Per release`})}),_jsx(_components.td,{children:`Check if any removed features left orphaned actions or smart fields`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Annually`})}),_jsx(_components.td,{children:`Full layout audit across all collections and teams`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`handling-deprecations-and-breaking-changes`,children:`Handling deprecations and breaking changes`}),`\n`,_jsx(_components.p,{children:`When Forest releases updates that affect layout behavior:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Check the `,_jsx(_components.a,{href:`https://www.forestadmin.com/changelog`,children:`changelog`}),` for deprecated features`]}),`\n`,_jsx(_components.li,{children:`Test layout compatibility in a development branch before deploying`}),`\n`,_jsx(_components.li,{children:`Update any Smart Actions or custom views that rely on deprecated APIs`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`permission-audits`,children:`Permission audits`}),`\n`,_jsx(_components.p,{children:`Layouts interact with permissions. A field visible in the layout but restricted by permissions creates confusion (“why can’t I see this?”). Periodically review:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Fields visible in layouts but restricted for most roles`}),`\n`,_jsx(_components.li,{children:`Actions shown in the UI but denied at the permission level`}),`\n`,_jsx(_components.li,{children:`Segments visible to teams who shouldn’t filter by those criteria`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/get-started/control/roles-permissions`,children:`Roles \u0026 Permissions`}),` for how to align layout visibility with access control.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Layout maintenance","description":"Best practices for keeping your Forest layouts clean, fast, and up to date over time.","href":"/guides/best-practices/layout-maintenance"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Identifying layout issues","slug":"identifying-layout-issues","depth":2,"children":[]},{"title":"Cleanup tasks","slug":"cleanup-tasks","depth":2,"children":[{"title":"Removing unused fields","slug":"removing-unused-fields","depth":3,"children":[]},{"title":"Cleaning up segments","slug":"cleaning-up-segments","depth":3,"children":[]},{"title":"Archiving old actions","slug":"archiving-old-actions","depth":3,"children":[]},{"title":"Collection organization","slug":"collection-organization","depth":3,"children":[]}]},{"title":"Performance optimization","slug":"performance-optimization","depth":2,"children":[{"title":"Widget optimization","slug":"widget-optimization","depth":3,"children":[]},{"title":"Relationship panel limits","slug":"relationship-panel-limits","depth":3,"children":[]},{"title":"Segment query performance","slug":"segment-query-performance","depth":3,"children":[]}]},{"title":"Regular maintenance schedule","slug":"regular-maintenance-schedule","depth":2,"children":[]},{"title":"Handling deprecations and breaking changes","slug":"handling-deprecations-and-breaking-changes","depth":2,"children":[]},{"title":"Permission audits","slug":"permission-audits","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"forest","siteName":"Forest Documentation","title":"Layout maintenance - Forest Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-12T11:28:57.836Z","originalFileLocation":"guides/best-practices/layout-maintenance.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Best practices for keeping your Forest layouts clean, fast, and up to date over time.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Forest Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/forest/9euPPsOQWnB89Kt3/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/forest/9euPPsOQWnB89Kt3/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/forest/9euPPsOQWnB89Kt3/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/forest/9euPPsOQWnB89Kt3/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/forest/9euPPsOQWnB89Kt3/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/forest/9euPPsOQWnB89Kt3/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/forest/9euPPsOQWnB89Kt3/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/forest/9euPPsOQWnB89Kt3/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/forest/9euPPsOQWnB89Kt3/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Layout maintenance - Forest Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Best practices for keeping your Forest layouts clean, fast, and up to date over time.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Forest Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.forest.app/guides/best-practices/layout-maintenance\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://forest.mintlify.app/_mintlify/api/og/v2?division=Best+Practices\u0026amp;title=Layout+maintenance\u0026amp;description=Best+practices+for+keeping+your+Forest+layouts+clean%2C+fast%2C+and+up+to+date+over+time.\u0026amp;theme=7cc620c0b37a08e7a7deb699\u0026amp;signature=7282350438f88840eda1df4eb0bf48294970a02f78c7563da772779df94e61aa\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Layout maintenance - Forest Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Best practices for keeping your Forest layouts clean, fast, and up to date over time.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://forest.mintlify.app/_mintlify/api/og/v2?division=Best+Practices\u0026amp;title=Layout+maintenance\u0026amp;description=Best+practices+for+keeping+your+Forest+layouts+clean%2C+fast%2C+and+up+to+date+over+time.\u0026amp;theme=7cc620c0b37a08e7a7deb699\u0026amp;signature=7282350438f88840eda1df4eb0bf48294970a02f78c7563da772779df94e61aa\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/forest/9euPPsOQWnB89Kt3/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Forest Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3F5B1E\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.forest.app/guides/best-practices/layout-maintenance\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides/best-practices/layout-maintenance.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.forest.app/#organization\",\"name\":\"Forest Documentation\",\"url\":\"https://docs.forest.app\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/forest/ZO8t9buUjTuKyt-F/images/Standard.svg?fit=max\u0026auto=format\u0026n=ZO8t9buUjTuKyt-F\u0026q=85\u0026s=d4e172941c964df57009cfa8be809b96\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.forest.app#website\",\"name\":\"Forest Documentation\",\"url\":\"https://docs.forest.app\",\"publisher\":{\"@id\":\"https://docs.forest.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.forest.app/guides/best-practices/layout-maintenance#webpage\",\"url\":\"https://docs.forest.app/guides/best-practices/layout-maintenance\",\"name\":\"Layout maintenance\",\"description\":\"Best practices for keeping your Forest layouts clean, fast, and up to date over time.\",\"dateModified\":\"2026-06-12T11:28:57.836Z\",\"isPartOf\":{\"@id\":\"https://docs.forest.app#website\"},\"breadcrumb\":{\"@id\":\"https://docs.forest.app/guides/best-practices/layout-maintenance#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.forest.app/guides/best-practices/layout-maintenance#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Best Practices\",\"item\":\"https://docs.forest.app/guides/best-practices/performance\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Layout maintenance\",\"item\":\"https://docs.forest.app/guides/best-practices/layout-maintenance\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.forest.app/guides/best-practices/layout-maintenance#article\",\"headline\":\"Layout maintenance\",\"name\":\"Layout maintenance\",\"description\":\"Best practices for keeping your Forest layouts clean, fast, and up to date over time.\",\"url\":\"https://docs.forest.app/guides/best-practices/layout-maintenance\",\"mainEntityOfPage\":{\"@id\":\"https://docs.forest.app/guides/best-practices/layout-maintenance#webpage\"},\"dateModified\":\"2026-06-12T11:28:57.836Z\",\"publisher\":{\"@id\":\"https://docs.forest.app/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.forest.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Forest Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Forest Documentation","nav":{"global":null,"tabs":[{"tab":"Home","pages":[{"title":"Home","href":""}]},{"tab":"Get Started","pages":[{"title":"Get Started","href":"/get-started/intro-to-forest-admin"}]},{"tab":"Product","pages":[{"title":"Product","href":"/product/overview"}]},{"tab":"Reference","groups":[{"group":"Overview","pages":[{"title":"Reference","href":"/reference/overview"}]},{"group":"Agent API","pages":[{"title":"Agent SDK overview","href":"/reference/agent-api/overview"},{"title":"Agent API Reference","href":"/reference/agent-api/nodejs"},{"title":"Ruby Agent API Reference","href":"/reference/agent-api/ruby"}]},{"group":"Public API","pages":[{"title":"Public API","href":"/reference/api/introduction"},{"title":"API Authentication","href":"/reference/api/authentication"},{"title":"API Rate Limits","href":"/reference/api/rate-limits"},{"group":"Endpoints","pages":[{"title":"Activity Logs","href":"/reference/api/endpoints/activity-logs"},{"title":"Admin Logs","href":"/reference/api/endpoints/admin-logs"},{"title":"Notes","href":"/reference/api/endpoints/notes"},{"title":"Trigger a workflow via webhook","href":"/reference/api/endpoints/trigger-workflow-webhook"}]}]},{"group":"CLI","pages":[{"title":"Forest CLI","href":"/reference/cli/overview"},{"title":"forest init","href":"/reference/cli/init"},{"title":"forest login","href":"/reference/cli/login"},{"title":"forest branch","href":"/reference/cli/branch"},{"title":"forest push","href":"/reference/cli/push"},{"title":"forest deploy","href":"/reference/cli/deploy"},{"title":"forest switch","href":"/reference/cli/switch"}]},{"group":"Schema","pages":[{"title":".forestadmin-schema.json","href":"/reference/schema/forestadmin-schema"}]},{"group":"Best Practices","pages":[{"title":"Performance","href":"/guides/best-practices/performance"},{"title":"Monitoring","href":"/guides/best-practices/monitoring"},{"title":"Troubleshooting","description":"Common issues and how to fix them","href":"/guides/best-practices/troubleshooting"},{"title":"Layout maintenance","href":"/guides/best-practices/layout-maintenance"}]}]},{"tab":"Legacy","pages":[{"title":"Legacy","href":"/legacy/agents-overview"}]}]},"title":"Layout maintenance - Forest Documentation","buildId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","deploymentId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","dynamics":[],"chunks":[]}