{"componentChunkName":"component---src-templates-doc-jsx","path":"/docs/performance/","result":{"data":{"mdx":{"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nconst _frontmatter = {\n  \"title\": \"Performance\"\n};\nconst layoutProps = {\n  _frontmatter\n};\nconst MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  let {\n    components\n  } = _ref,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, `Polypane can use more resources than a regular browser because each pane runs its own active Chromium instance. That's how Polypane can keep panes in sync accurately, but it also means CPU and memory usage scale with the number of panes you have open.`), mdx(\"p\", null, `The main Polypane runtime itself (excluding the instances running your website) takes about 1% CPU while idle, so most resource usage usually comes from your page multiplied across however many panes are open.`), mdx(\"p\", null, `Polypane also does extra work that a normal browser tab does not, like syncing interactions, emulating devices, gathering accessibility and structural data, and monitoring web vitals. In that sense it's closer to running browser tabs plus a layer of developer tooling, which is why it can be more resource intensive than everyday browsing. (it's more like an IDE than a text editor, if you will)`), mdx(\"p\", null, `So if Polypane feels much slower than your normal browser, the difference is almost always caused by the page you're showing and the work it triggers when repeated across multiple panes, not by the Polypane app itself.`), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, `In other words: Polypane usually uncovers issues already present in your website, rather than causing them itself.`)), mdx(\"p\", null, `Though Polypane will run fine for the vast majority of users, there are settings and strategies to make everything run smoother.`), mdx(\"h2\", {\n    \"id\": \"first-check-if-the-issue-is-limited-to-the-current-site\"\n  }, `First: check if the issue is limited to the current site`), mdx(\"p\", null, `Most performance issues in Polypane are caused by the site that's running in Polypane being resource intensive due to lots\nof GPU/CPU intensive tasks like playing video or doing lots of compositing/animation. These things take up a lot of resources, and those requirements are multiplied by the number of panes you have open.`), mdx(\"p\", null, `In some cases, performance issues are caused by websites doing things in ways Polypane doesn't expect. To figure out if that's the case, try to run Polypane with this docs page and see if the performance issues persist.`), mdx(\"p\", null, `If they get resolved, please `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/support/\"\n  }), `tell us the URL`), ` so we can figure out what that bottleneck is and either help you improve your\nwebsite or help us improve our application. We `, mdx(\"em\", {\n    parentName: \"p\"\n  }, `really`), ` appreciate this. You can also take a look at `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/docs/website-issues-you-could-encounter/\"\n  }), `Website issues you could encounter`), ` or\nuse the performance tweaking options below.`), mdx(\"p\", null, `Sometimes there is no way around a website being resource intensive. If the items below aren't helping, there are other ways to improve performance: `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"#performance-tweaking\"\n  }), `Tweak site performance`), `.`), mdx(\"h2\", {\n    \"id\": \"common-performance-issues\"\n  }, `Common performance issues`), mdx(\"h3\", {\n    \"id\": \"excessive-dom-size\"\n  }, `Excessive DOM size`), mdx(\"p\", null, `When you have over 20K DOM nodes, Polypane can get noticably slower as it tries to parse the accessibility tree. Try to reduce the number of DOM nodes by simplifying your HTML. As a reference, Lighthouse will already flag any DOM with more than 1400 nodes as excessively large, so simplifying your DOM is a general recommendation here that will also improve your site's performance.`), mdx(\"h3\", {\n    \"id\": \"css-file-size-issues\"\n  }, `CSS file size issues`), mdx(\"p\", null, `Polypane parses CSS to find the breakpoints, sync hover styles and more. The rendering and parsing engine can handle\neverything to about 10.000 selectors without issue but beyond that performance might be impacted (in both Polypane and\nChromium devtools, of course depending on your device).`), mdx(\"p\", null, `Polypane shows a warnings when it detects more than 10.000 selectors. When it detects more than 15.000 selectors, hover sync, breakpoint detection and overflow detection are disabled to prevent further performance issues.`), mdx(\"h4\", {\n    \"id\": \"tailwind-css-performance-for-v1-and-v2\"\n  }, `Tailwind CSS performance (for v1 and v2)`), mdx(\"p\", null, `While plain Tailwind CSS 1 and 2 work fine, once you add custom variants the\nTailwind CSS file can quickly balloon to 10MB or more.`), mdx(\"p\", null, `This negatively affects the browser devtools and likewise also\nnegatively affects Polypane's performance. This slowdown can be completely eliminated by using Tailwinds JIT model,\nwhich we highly recommend.`), mdx(\"p\", null, `Tailwind CSS 3 and up use the JIT by default so are not affected.`), mdx(\"h3\", {\n    \"id\": \"nextjs-performance\"\n  }, `Next.js performance`), mdx(\"p\", null, `Polypane will show a warning if it detects a Next.js app with App Directory running in development mode. If you use the app directory, the `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://github.com/vercel/next.js/issues/48748\"\n  }), `dev server is really slow`), `. This is manageable in a browser where you load each page just one time, but in Polypane where you load a page in potentially many panes, this can be a big issue as the performance issues on the server side stack up. Unfortunately Polypane can not control how fast any server serves up a page.`), mdx(\"p\", null, `When using Next.js with the App directory, limit the number of panes or switch to the `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/docs/layouts/\"\n  }), `focus or full layouts`), ` when not actively working on responsive design.`), mdx(\"h2\", {\n    \"id\": \"browsersync-performance\"\n  }, `Browsersync performance`), mdx(\"p\", null, `Both Browsersync and Polypane attempt to sync things like clicks and the scroll position. If you run both, they end up duplicating or undoing each others actions, leading to a sluggish experience. When using Polypane, we recommend you disable Browsersync completely, or turn off it's `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `ghostMode`), ` to let Polypane handle the syncing of events. You can do this by adding `, mdx(\"code\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"language-text\"\n  }), `ghostMode: false`), ` to your Browsersync config. Read more about `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/docs/browsersync-and-polypane/\"\n  }), `migrating from Browsersync to Polypane`)), mdx(\"p\", null, `Your local dev server might be using Browsersync without you knowing. In that case, Look for the warning popup that Polypane shows when it detects Browsersync. When Polypane detects Browsersync it will `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/docs/browsersync-and-polypane/#want-to-keep-browsersync\"\n  }), `turn off the built-in syncing features`), `.`), mdx(\"h2\", {\n    \"id\": \"polypane-configuration-options\"\n  }, `Polypane configuration options`), mdx(\"p\", null, `There are a couple of things you can change in Polypane to improve performance.`), mdx(\"h3\", {\n    \"id\": \"limit-the-number-of-panes\"\n  }, `Limit the number of panes`), mdx(\"p\", null, `Though we optimize the resources used by panes that are not visible, we need to keep all of them in memory. This is fine with up to about 8 panes depending on your device, but if you go might higher, like having 15 panes or more, things can rapidly slow down depending on how much resources a site needs.`), mdx(\"p\", null, `When you want to get an overview of your `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/docs/breakpoints/\"\n  }), `breakpoints`), ` and there's more than 15, we show a warning that lets you choose to show \"simplified breakpoints\" instead. This feature looks at all your breakpoints, then groups them into 6 panes that cover the range of your breakpoints, giving you a good overview.`), mdx(\"p\", null, `Alternatively, consider the `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/docs/layouts/\"\n  }), `\"Focus\" or \"Full\" layouts`), ` when not actively working on responsive design. They show just a single pane, but you still have access to all the Polypane features.`), mdx(\"h3\", {\n    \"id\": \"make-sure-hardware-acceleration-is-on\"\n  }, `Make sure hardware acceleration is on`), mdx(\"p\", null, `For macOS, Polypane has a \"Disable Hardware Acceleration\" option in the View menu. This can help fix graphical\nissues, but the downside is that Polypane is significantly slower without hardware acceleration (for obvious reasons).`), mdx(\"h3\", {\n    \"id\": \"running-the-right-architecture\"\n  }, `Running the right architecture`), mdx(\"p\", null, `Running Polypane through an emulation layer like Rosetta on macOS slows the application down considerably. Polypane's installers on macOS and Windows will install for the right architecture by default (AMD64 or ARM) so this almost never happens, but when you migrate from an Intel machine to an ARM machine (like Apple Silicon) using the migration assistant, it will copy over the AMD64 installation of Polypane. When this happens, performance on the new machine is severely impacted.`), mdx(\"p\", null, `Because Polypane always updates to the same architecture, you should `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/download/\"\n  }), `redownload and re-install Polypane`), `.`), mdx(\"h3\", {\n    \"id\": \"how-inactive-tabs-work-in-polypane\"\n  }, `How inactive tabs work in Polypane`), mdx(\"p\", null, `To preserve memory, Polypane can unload non-active tabs. Right-click a tab and check \"sleep when inactive\" and it will unload the tab when you switch to another one. This frees up memory and CPU, improving performance for the tabs that are active.`), mdx(\"p\", null, `If you find yourself wanting to switch back and forth between two tabs a lot, consider loading one in the `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/docs/browse/\"\n  }), `Browse tab in the panel`), `, which requires less resources than a regular tab.`), mdx(\"h2\", {\n    \"id\": \"external-applications-known-to-cause-issues\"\n  }, `External applications known to cause issues`), mdx(\"p\", null, `Polypane runs alongside other applications on your device and uses the network. Some applications can interfere with Polypane's performance.`), mdx(\"h3\", {\n    \"id\": \"antivirus-or-firewall-software\"\n  }, `Antivirus or Firewall software`), mdx(\"p\", null, `Polypane is built on Chromium so it contains a lot of network code. Unlike Chrome itself, it's usually not white-listed in general anti-virus or firewall software.\nThis can cause the application to start much slower and/or web pages to load very slow as these tools throttle and analyse the network data.`), mdx(\"p\", null, `We understand whitelisting Polypane is not something we should ask you to do, but please consider seeing if it makes a\ndifference. If it does, please let us know so we can reach out to these companies and hopefully improve their handling of Polypane.`), mdx(\"p\", null, `If you want additional assurance, we recommend you upload the installer or binary to `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://www.virustotal.com/\"\n  }), `VirusTotal`), `.\nVirusTotal is owned and maintained by a subsidiary of Google and checks the file with dozens of different antivirus providers.`), mdx(\"p\", null, `The following firewall/antivirus software are known to throttle Polypane:`), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, `Webroot Secure Anywhere`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, `PC Matic security`)), mdx(\"h3\", {\n    \"id\": \"docker\"\n  }, `Docker`), mdx(\"p\", null, `Sites served from Docker can be substantially slower to open in Polypane. We think this has to do with the way the Docker\nURL is resolved, but we're not sure yet.`), mdx(\"h3\", {\n    \"id\": \"other-applications\"\n  }, `Other applications`), mdx(\"p\", null, `If you're running other resource intensive apps, like Docker, full web servers or multiple resource-heavy applications,\nPolypane can get less CPU time and so will feel slower. In general, running multiple heavy applications will compete for\nyour CPU and memory so something's got to give. Consider closing the applications you don't currently need to free up\nboth memory and CPU time.`), mdx(\"h3\", {\n    \"id\": \"external-or-multiple-monitors\"\n  }, `External or multiple monitors`), mdx(\"p\", null, `With an external monitor (or multiple monitors) attached, both Windows and MacOS users may experience poor performance across Electron applications.\nThis seems to be a result of an external monitor having a very high resolution putting strain on the GPU,\nand can also be the result of using anything other than the default color profile for your monitors.`), mdx(\"p\", null, `If you experience poor performance on an external monitor, first check and see if it uses a calibrated color profile over the default one.`), mdx(\"p\", null, `On MacOS, running your external monitor in its native resolution instead of scaled can also help. If you want to run it scaled,\nClicking \"scaled\" in your monitors settings while holding Option will show additional \"(low resolution)\" options which will let the monitor\nupscale the resolution, instead of MacOS scaling. This will also improve performance.`), mdx(\"h2\", {\n    \"id\": \"performance-tweaking\"\n  }, `Performance tweaking`), mdx(\"p\", null, `Sometimes there is no way around a website being resource intensive, for example when showing videos or running different\ncompositing effects. To deal with this Polypane will let you turn off resource intensive features.`), mdx(\"p\", null, `In the top right of the UI you will find the App settings icon. By switching to the \"performance\" tab in it, you can turn\noff a number of features that have a big impact on CPU usage:`), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, `Disable Animations`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, `Disable Filters (includes backdrop-filter)`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, `Disable Hover Sync`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, `Disable Transitions`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, `Hide Canvas Elements`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, `Hide Iframe Elements`), mdx(\"li\", {\n    parentName: \"ul\"\n  }, `Hide Video Elements`)), mdx(\"img\", {\n    src: image,\n    alt: \"Performance tweaking panel\",\n    className: \"imgshadow\",\n    style: {\n      \"margin\": \"2rem auto\",\n      \"maxWidth\": \"100%\"\n    }\n  }), mdx(\"p\", null, `Disabling these CSS features and hiding HTML elements makes it easier for the rendering engine to render your page, improving performance.`), mdx(\"p\", null, `When you have performance settings active, the App settings icon will show a small gauge. You can choose to keep these features in the first pane by checking \"Keep in first pane\".`));\n}\n;\nMDXContent.isMDXComponent = true;","timeToRead":7,"excerpt":"Polypane can use more resources than a regular browser because each pane runs its own active Chromium instance. That's how Polypane can keep…","frontmatter":{"title":"Performance","cover":null,"date":null,"beta":null},"fields":{"nextTitle":"Polypane Portal","nextSlug":"/docs/portal/","prevTitle":"Sales and Procurement","prevSlug":"/docs/sales-and-procurement/","slug":"/docs/performance/","date":null,"ogFileName":"performance"}},"allMdx":{"edges":[{"node":{"fields":{"slug":"/docs/1-password-setup-instructions/"},"frontmatter":{"title":"1Password setup instructions"}}},{"node":{"fields":{"slug":"/docs/accessibility-audit-workflow/"},"frontmatter":{"title":"Accessibility audit workflow"}}},{"node":{"fields":{"slug":"/docs/accessibility-overview/"},"frontmatter":{"title":"Accessibility overview"}}},{"node":{"fields":{"slug":"/docs/accessibility-panel/"},"frontmatter":{"title":"Accessibility panel"}}},{"node":{"fields":{"slug":"/docs/application-folder/"},"frontmatter":{"title":"Application folder"}}},{"node":{"fields":{"slug":"/docs/brand-guidelines/"},"frontmatter":{"title":"Brand guidelines"}}},{"node":{"fields":{"slug":"/docs/breakpoints/"},"frontmatter":{"title":"Breakpoints"}}},{"node":{"fields":{"slug":"/docs/browse/"},"frontmatter":{"title":"Browse"}}},{"node":{"fields":{"slug":"/docs/browser-extensions/"},"frontmatter":{"title":"Browser extensions"}}},{"node":{"fields":{"slug":"/docs/browser-features/"},"frontmatter":{"title":"Browser features"}}},{"node":{"fields":{"slug":"/docs/browsersync-and-polypane/"},"frontmatter":{"title":"Browsersync and Polypane"}}},{"node":{"fields":{"slug":"/docs/color-picker/"},"frontmatter":{"title":"Color Picker"}}},{"node":{"fields":{"slug":"/docs/command-bar/"},"frontmatter":{"title":"Command Bar"}}},{"node":{"fields":{"slug":"/docs/command-line-options/"},"frontmatter":{"title":"Command line options"}}},{"node":{"fields":{"slug":"/docs/configuring-logitech-mouses/"},"frontmatter":{"title":"Configuring Logitech mouses"}}},{"node":{"fields":{"slug":"/docs/configuring-webstorm-to-work-with-polypane/"},"frontmatter":{"title":"Configuring WebStorm to work with Polypane"}}},{"node":{"fields":{"slug":"/docs/console/"},"frontmatter":{"title":"Console"}}},{"node":{"fields":{"slug":"/docs/customizing-polypane/"},"frontmatter":{"title":"Customizing Polypane"}}},{"node":{"fields":{"slug":"/docs/dark-and-light-mode/"},"frontmatter":{"title":"Dark and light mode"}}},{"node":{"fields":{"slug":"/docs/data-processing-agreement/"},"frontmatter":{"title":"Data Processing Agreement"}}},{"node":{"fields":{"slug":"/docs/debug-tools/"},"frontmatter":{"title":"Debug tools"}}},{"node":{"fields":{"slug":"/docs/detecting-polypane/"},"frontmatter":{"title":"Detecting Polypane"}}},{"node":{"fields":{"slug":"/docs/developer-tools/"},"frontmatter":{"title":"Developer tools"}}},{"node":{"fields":{"slug":"/docs/device-presets/"},"frontmatter":{"title":"Device presets"}}},{"node":{"fields":{"slug":"/docs/devtools-panel/"},"frontmatter":{"title":"Devtools Panel"}}},{"node":{"fields":{"slug":"/docs/elements-panel/"},"frontmatter":{"title":"Elements Panel"}}},{"node":{"fields":{"slug":"/docs/emulation/"},"frontmatter":{"title":"Emulation"}}},{"node":{"fields":{"slug":"/docs/experimental-chromium-features/"},"frontmatter":{"title":"Experimental Chromium features"}}},{"node":{"fields":{"slug":"/docs/find-elements/"},"frontmatter":{"title":"Find elements"}}},{"node":{"fields":{"slug":"/docs/form-autofill/"},"frontmatter":{"title":"Form autofill"}}},{"node":{"fields":{"slug":"/docs/global-zoom/"},"frontmatter":{"title":"Global zoom"}}},{"node":{"fields":{"slug":"/docs/helper-extension-for-other-browsers/"},"frontmatter":{"title":"Helper extension for other browsers"}}},{"node":{"fields":{"slug":"/docs/horizontal-overflow/"},"frontmatter":{"title":"Horizontal overflow detection"}}},{"node":{"fields":{"slug":"/docs/integrations/"},"frontmatter":{"title":"Integrations"}}},{"node":{"fields":{"slug":"/docs/intro-to-panel/"},"frontmatter":{"title":"Intro to panel"}}},{"node":{"fields":{"slug":"/docs/intro-to-panes/"},"frontmatter":{"title":"Intro to panes"}}},{"node":{"fields":{"slug":"/docs/json-and-xml-viewer/"},"frontmatter":{"title":"JSON and XML viewer"}}},{"node":{"fields":{"slug":"/docs/known-issues/"},"frontmatter":{"title":"Known issues"}}},{"node":{"fields":{"slug":"/docs/layout-debugging/"},"frontmatter":{"title":"Layout debugging"}}},{"node":{"fields":{"slug":"/docs/layouts/"},"frontmatter":{"title":"Layouts"}}},{"node":{"fields":{"slug":"/docs/link/"},"frontmatter":{"title":"Share panel"}}},{"node":{"fields":{"slug":"/docs/list-of-shortcuts/"},"frontmatter":{"title":"List of shortcuts"}}},{"node":{"fields":{"slug":"/docs/live-auto-reloading/"},"frontmatter":{"title":"Live/auto reloading"}}},{"node":{"fields":{"slug":"/docs/making-screenshots/"},"frontmatter":{"title":"Making screenshots"}}},{"node":{"fields":{"slug":"/docs/measure-text-length/"},"frontmatter":{"title":"Measure text length"}}},{"node":{"fields":{"slug":"/docs/mental-model/"},"frontmatter":{"title":"Mental model of Polypane's browser contexts"}}},{"node":{"fields":{"slug":"/docs/message-bus/"},"frontmatter":{"title":"Message Bus"}}},{"node":{"fields":{"slug":"/docs/meta-information/"},"frontmatter":{"title":"Meta information"}}},{"node":{"fields":{"slug":"/docs/network-panel/"},"frontmatter":{"title":"Network panel"}}},{"node":{"fields":{"slug":"/docs/other-tools/"},"frontmatter":{"title":"Polypane and local servers"}}},{"node":{"fields":{"slug":"/docs/outline-panel/"},"frontmatter":{"title":"Outline Panel"}}},{"node":{"fields":{"slug":"/docs/pane-management/"},"frontmatter":{"title":"Manage panes"}}},{"node":{"fields":{"slug":"/docs/pane-sizes/"},"frontmatter":{"title":"Pane sizes"}}},{"node":{"fields":{"slug":"/docs/performance/"},"frontmatter":{"title":"Performance"}}},{"node":{"fields":{"slug":"/docs/pitching-polypane/"},"frontmatter":{"title":"Pitching Polypane"}}},{"node":{"fields":{"slug":"/docs/polypane-peek/"},"frontmatter":{"title":"Polypane Peek"}}},{"node":{"fields":{"slug":"/docs/portal/"},"frontmatter":{"title":"Polypane Portal"}}},{"node":{"fields":{"slug":"/docs/projects/"},"frontmatter":{"title":"Projects"}}},{"node":{"fields":{"slug":"/docs/recording/"},"frontmatter":{"title":"Recording"}}},{"node":{"fields":{"slug":"/docs/reference-image/"},"frontmatter":{"title":"Reference image"}}},{"node":{"fields":{"slug":"/docs/reload-css/"},"frontmatter":{"title":"Reload CSS"}}},{"node":{"fields":{"slug":"/docs/responsive-debugging-workflow/"},"frontmatter":{"title":"Responsive debugging workflow"}}},{"node":{"fields":{"slug":"/docs/review-and-approval-by-it-and-security/"},"frontmatter":{"title":"Review and approval by IT and Security"}}},{"node":{"fields":{"slug":"/docs/rulers-grids-and-guides/"},"frontmatter":{"title":"Rulers, grids and guides"}}},{"node":{"fields":{"slug":"/docs/sales-and-procurement/"},"frontmatter":{"title":"Sales and Procurement"}}},{"node":{"fields":{"slug":"/docs/security-policy/"},"frontmatter":{"title":"Security Policy"}}},{"node":{"fields":{"slug":"/docs/security/"},"frontmatter":{"title":"Security"}}},{"node":{"fields":{"slug":"/docs/session-management/"},"frontmatter":{"title":"Session management"}}},{"node":{"fields":{"slug":"/docs/setup/"},"frontmatter":{"title":"Setup"}}},{"node":{"fields":{"slug":"/docs/showing-multiple-urls/"},"frontmatter":{"title":"Showing multiple URLs"}}},{"node":{"fields":{"slug":"/docs/simulators/"},"frontmatter":{"title":"Simulators"}}},{"node":{"fields":{"slug":"/docs/snippets/"},"frontmatter":{"title":"Snippets"}}},{"node":{"fields":{"slug":"/docs/social-card-and-open-graph-workflow/"},"frontmatter":{"title":"Social card and Open Graph workflow"}}},{"node":{"fields":{"slug":"/docs/source-panel/"},"frontmatter":{"title":"Source panel"}}},{"node":{"fields":{"slug":"/docs/storage-panel/"},"frontmatter":{"title":"Storage panel"}}},{"node":{"fields":{"slug":"/docs/switching-to-polypane/"},"frontmatter":{"title":"Switching to Polypane"}}},{"node":{"fields":{"slug":"/docs/synced-interactions/"},"frontmatter":{"title":"Synced interactions"}}},{"node":{"fields":{"slug":"/docs/tab-customization/"},"frontmatter":{"title":"Tab customization"}}},{"node":{"fields":{"slug":"/docs/team-workflows/"},"frontmatter":{"title":"Team workflows"}}},{"node":{"fields":{"slug":"/docs/ui-overview/"},"frontmatter":{"title":"Polypane UI overview"}}},{"node":{"fields":{"slug":"/docs/web-vitals/"},"frontmatter":{"title":"Web Vitals"}}},{"node":{"fields":{"slug":"/docs/website-issues-you-could-encounter/"},"frontmatter":{"title":"Website issues you could encounter"}}},{"node":{"fields":{"slug":"/docs/workspace-management/"},"frontmatter":{"title":"Workspace management"}}},{"node":{"fields":{"slug":"/docs/workspaces/"},"frontmatter":{"title":"Workspaces"}}}]}},"pageContext":{"slug":"/docs/performance/"}},"staticQueryHashes":["4164364741","425175329"]}