{"componentChunkName":"component---src-pages-docs-faq-jsx","path":"/docs/faq/","result":{"data":{"faqs":{"edges":[{"node":{"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\": \"Who processes Polypane's orders?\",\n  \"category\": \"subscription\"\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, `Our order process is conducted securely by our online reseller `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://paddle.com\"\n  }), `Paddle`), `. Paddle is the Merchant of Record for\nall our orders and they will invoice and charge you.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/who-processes-polypanes-orders/"},"frontmatter":{"title":"Who processes Polypane's orders?","category":"subscription"}}},{"node":{"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\": \"Which rendering engine does Polypane use?\",\n  \"category\": \"usage\"\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 uses the Chromium rendering engine, the same one that powers Google Chrome, Microsoft Edge and many other browsers. This means\nPolypane always shows a good representation of what the majority of your users will see.`), mdx(\"p\", null, `The rendering engine version Polypane uses is frequently updated, around the same time Chrome and Edge update to\nthe new version of Chromium.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/which-rendering-engine-does-polypane-use/"},"frontmatter":{"title":"Which rendering engine does Polypane use?","category":"usage"}}},{"node":{"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\": \"Which operating systems does Polypane run on?\",\n  \"category\": \"usage\"\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 runs on macOS Catalina and up, Windows 10 and 11, Ubuntu and most other Linux environments including Chromebooks with Linux support turned on. We advice having at least 4GB of ram available regardless of operating system.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/which-operating-systems-does-polypane-run-on/"},"frontmatter":{"title":"Which operating systems does Polypane run on?","category":"usage"}}},{"node":{"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\": \"Where can I find sales and procurement information?\",\n  \"category\": \"subscription\"\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, `We have a dedicated page with all the information your sales and procurement department or organisation could need. You can find it at `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/docs/sales-and-procurement/\"\n  }), `Sales and Procurement`), `. Additionally we have resources specifically for IT and Security onboarding at `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/docs/review-and-approval-by-it-and-security/\"\n  }), `Review and Approval by IT and Security`), `.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/where-can-i-find-sales-and-procurement-information/"},"frontmatter":{"title":"Where can I find sales and procurement information?","category":"subscription"}}},{"node":{"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\": \"When I get a subscription, does it start after my trial?\",\n  \"category\": \"subscription\"\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, `If you get a subscription during your trial, it starts immediately.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/when-i-get-a-subscription-does-it-start-after-my-trial/"},"frontmatter":{"title":"When I get a subscription, does it start after my trial?","category":"subscription"}}},{"node":{"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\": \"When does Polypane update?\",\n  \"category\": \"usage\"\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 updates roughly every month with new features and bugfixes. Every three months a new major version will be released that also includes a new version of the Chromium rendering engine. Updates will be automatically downloaded in the background when using the application. Check our `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/docs/changelog/\"\n  }), `Changelog`), ` for the overview of updates.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/when-does-polypane-update/"},"frontmatter":{"title":"When does Polypane update?","category":"usage"}}},{"node":{"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\": \"What is your refund policy?\",\n  \"category\": \"subscription\"\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, `We send reminder emails for each renewal date. You can cancel your subscription at any time and will not be billed for the subsequent period. Monthly plans are not refundable. If you are on a yearly plan and forgot to cancel your subscription, reach out to us within 7 days after the renewal date to discuss a refund.  We can not refund the Paddle fee charged to us. `), mdx(\"p\", null, `In addition, you are eligible for a refund within 14 days of the original purchase date. If you are not satisfied with your purchase, please contact us.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/what-is-your-refund-policy/"},"frontmatter":{"title":"What is your refund policy?","category":"subscription"}}},{"node":{"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\": \"I have an Individual account, can I upgrade to a Business account?\",\n  \"category\": \"subscription\"\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, `Yes, you can upgrade your account from Individual to Business on the `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://dashboard.polypane.app\"\n  }), `dashboard`), `. You will be\nupgraded to a Business license with the equivalent billing period (monthly or yearly). Please `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/support/\"\n  }), `reach out`), ` for any other questions.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/i-have-an-individual-account-can-i-upgrade-to-a-business-account/"},"frontmatter":{"title":"I have an Individual account, can I upgrade to a Business account?","category":"subscription"}}},{"node":{"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\": \"I didn't receive an e-mail with my license key\",\n  \"category\": \"usage\"\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, `Our license keys are sent via email automatically seconds after requesting them, but might take up to 15 minutes to arrive\ndepending on your email provider. If you did not receive an email with your license key (and it's not in your spam folder), please send us a message via the `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/support/\"\n  }), `support page`), `\nand we'll help you out.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/i-didnt-receive-an-e-mail-with-my-license-key/"},"frontmatter":{"title":"I didn't receive an e-mail with my license key","category":"usage"}}},{"node":{"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\": \"How does the trial work?\",\n  \"category\": \"subscription\"\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, `When you start a trial you get immediate access to the full version for 14 days. At the end of your trial you can decide whether you want to continue using Polypane by subscribing. We don't ask for payment details up front, so you will never be charged without you choosing a plan first.`), mdx(\"p\", null, `We will send you an email three days before the trial ends to remind you of your trial.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/how-does-the-trial-work/"},"frontmatter":{"title":"How does the trial work?","category":"subscription"}}},{"node":{"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\": \"How does the business subscription work?\",\n  \"category\": \"subscription\"\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, `With a business subscription, the account holder is the admin user with access to the `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://dashboard.polypane.app\"\n  }), `management dashboard`), `. They can manage the subscription and assign seats to team members. The account holder doesn't have to occupy a seat, so they can manage the subscription without taking up a license.`), mdx(\"p\", null, `Access can be given to team members by assigning them a license, which lets them activate Polypane on their machine using their e-mail address. Access is revokable and can be transferred for the duration of the subscription. Team members do not have access to the management dashboard and do not have their own login credentials.`), mdx(\"p\", null, `If you need more than 10 seats, please `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/support/\"\n  }), `contact us`), ` for a purchase link. Pricing for additional seats are a multiple of the base price (so 11 seats is 1.1 times the base price, 20 seats is 2 times the base price, etc). To create a purchase link, we need to know the number of seats you need, the e-mail address of the account holder and, if different, the billing e-mail adress where invoices are sent to.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/how-does-the-business-subscription-work/"},"frontmatter":{"title":"How does the business subscription work?","category":"subscription"}}},{"node":{"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\": \"How does pausing my subscription work?\",\n  \"category\": \"subscription\"\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, `When you pause a subscription, you will keep access to Polypane until the end of the current period. At the end of the period, Polypane will not automatically renew your subscription, and you will lose access to Polypane, until you continue it. `), mdx(\"p\", null, `You can continue your subscription at any time by going to the `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://dashboard.polypane.app\"\n  }), `dashboard`), ` and clicking the \"Continue subscription\" button.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/how-does-pausing-my-subscription-work/"},"frontmatter":{"title":"How does pausing my subscription work?","category":"subscription"}}},{"node":{"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\": \"How do I suggest features for Polypane?\",\n  \"category\": \"usage\"\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, `We welcome all feature requests, please send them via the `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/support/\"\n  }), `support page`), ` or through `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://bsky.app/profile/polypane.app\"\n  }), `Bluesky`), `.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/how-do-i-suggest-features-for-polypane/"},"frontmatter":{"title":"How do I suggest features for Polypane?","category":"usage"}}},{"node":{"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\": \"How do I delete my account?\",\n  \"category\": \"subscription\"\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, `To delete your account, log into the `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://dashboard.polypane.app\"\n  }), `dashboard`), ` and go to the subscription page. If you\nhave an active subscription this will be canceled too. If you do not have your own subscription, ask your business team owner.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/how-do-i-delete-my-account/"},"frontmatter":{"title":"How do I delete my account?","category":"subscription"}}},{"node":{"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\": \"How do I change my Polypane email address?\",\n  \"category\": \"subscription\"\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, `We can change your email address for you. `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/support/\"\n  }), `Contact us`), ` us with your current email address and the email address you want to change it to and we will migrate your account for you.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/how-do-i-change-my-polypane-email-address/"},"frontmatter":{"title":"How do I change my Polypane email address?","category":"subscription"}}},{"node":{"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\": \"How do I cancel my subscription?\",\n  \"category\": \"subscription\"\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, `To cancel your subscription, log into the `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://dashboard.polypane.app\"\n  }), `dashboard`), ` and go to the subscription page.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/how-do-i-cancel-my-subscription/"},"frontmatter":{"title":"How do I cancel my subscription?","category":"subscription"}}},{"node":{"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\": \"Do you send renewal notifications?\",\n  \"category\": \"subscription\"\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, `Yes, we send reminder emails before each renewal date (on both the yearly and monthly plans) since we want to make sure you are aware of the upcoming charge and to give you the opportunity to cancel your subscription.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/do-you-send-renewal-notifications/"},"frontmatter":{"title":"Do you send renewal notifications?","category":"subscription"}}},{"node":{"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\": \"Do you generate invoices?\",\n  \"category\": \"subscription\"\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, `Yes. When you get a subscription you'll get an invoice for every payment emailed to you, which includes (if you filled them in during checkout) your company details and, where relevant, VAT information. IF you did not fill in your company details during checkout, you can add them later directly on the invoice page sent to you.`), mdx(\"p\", null, `We email these invoices to you for each renewal and you can also download all invoices from the Subscription page on the `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://dashboard.polypane.app\"\n  }), `management dashboard`), `.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/do-you-generate-invoices/"},"frontmatter":{"title":"Do you generate invoices?","category":"subscription"}}},{"node":{"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\": \"Do I qualify for a discount?\",\n  \"category\": \"other\"\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 is available for free for students through the `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://education.github.com/pack\"\n  }), `GitHub Student Developer Pack`), `.`), mdx(\"p\", null, `Additionally different groups can get Polypane for free or at a discounted rate. For a full overview and information on how to request this, see our `, mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"/special-offers/\"\n  }), `Special offers page`), `.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/do-i-qualify-for-a-discount/"},"frontmatter":{"title":"Do I qualify for a discount?","category":"other"}}},{"node":{"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\": \"Can I use Polypane on more than one machine?\",\n  \"category\": \"usage\"\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, `You can activate Polypane on up to three devices. Access will automatically\nroll over to the most recently activated device.`));\n}\n;\nMDXContent.isMDXComponent = true;","fields":{"slug":"/can-i-use-polypane-on-more-than-one-machine/"},"frontmatter":{"title":"Can I use Polypane on more than one machine?","category":"usage"}}}]},"docs":{"edges":[{"node":{"fields":{"slug":"/docs/1-password-setup-instructions/","date":null},"excerpt":"The 1Password desktop app on Linux and Macos can be configured to connect to the 1Password browser extension in Polypane, but it requires…","timeToRead":1,"frontmatter":{"title":"1Password setup instructions"}}},{"node":{"fields":{"slug":"/docs/accessibility-audit-workflow/","date":null},"excerpt":"Polypane has a wide range of built-in accessibility tools. This walkthrough shows how to combine them for a thorough accessibility audit in…","timeToRead":2,"frontmatter":{"title":"Accessibility audit workflow"}}},{"node":{"fields":{"slug":"/docs/accessibility-overview/","date":null},"excerpt":"Polypane has deep, built-in support for accessibility testing. From automated WCAG audits and contrast checking to focus order visualization…","timeToRead":1,"frontmatter":{"title":"Accessibility overview"}}},{"node":{"fields":{"slug":"/docs/accessibility-panel/","date":null},"excerpt":"The \"Accessibility\" tab in the  panel  runs a comprehensive WCAG audit of your page and shows issues grouped by severity. For a full…","timeToRead":1,"frontmatter":{"title":"Accessibility panel"}}},{"node":{"fields":{"slug":"/docs/application-folder/","date":null},"excerpt":"Polypane stores all of its settings in the Application folder. This includes settings, cache, logs and more. Settings are stored as plain…","timeToRead":1,"frontmatter":{"title":"Application folder"}}},{"node":{"fields":{"slug":"/docs/brand-guidelines/","date":null},"excerpt":"The following guidelines will help you use our brand and assets, including our logo, content and trademarks. Contact us for any questions…","timeToRead":2,"frontmatter":{"title":"Brand guidelines"}}},{"node":{"fields":{"slug":"/docs/breakpoints/","date":null},"excerpt":"Polypane automatically detects width-based CSS media query breakpoints defined in your CSS. The number of unique breakpoints is shown in the…","timeToRead":1,"frontmatter":{"title":"Breakpoints"}}},{"node":{"fields":{"slug":"/docs/browse/","date":null},"excerpt":"The Browse tab in the  panel  contains a fully featured web browser that you can use to search, look at reference material or use handoff…","timeToRead":4,"frontmatter":{"title":"Browse"}}},{"node":{"fields":{"slug":"/docs/browser-extensions/","date":null},"excerpt":"Polypane has support for Chromium developer tools extensions as well as limited support for regular Chromium browser extensions. In the…","timeToRead":3,"frontmatter":{"title":"Browser extensions"}}},{"node":{"fields":{"slug":"/docs/browser-features/","date":null},"excerpt":"Polypane is meant as a tool to help you develop your own web pages, but it also includes many of the \"regular\" browser features for…","timeToRead":11,"frontmatter":{"title":"Browser features"}}},{"node":{"fields":{"slug":"/docs/browsersync-and-polypane/","date":null},"excerpt":"Browsersync is a development tool that lets you keep multiple browsers showing your URL in sync. Polypane offers that functionality natively…","timeToRead":2,"frontmatter":{"title":"Browsersync and Polypane"}}},{"node":{"fields":{"slug":"/docs/color-picker/","date":null},"excerpt":"The color picker eye dropper lets you pick colors from anywhere on the screen, and it's available right from the address bar by\nclicking the…","timeToRead":3,"frontmatter":{"title":"Color Picker"}}},{"node":{"fields":{"slug":"/docs/command-bar/","date":null},"excerpt":"The Command bar in Polypane lets you control all parts of the application through a keyboard interface. Bring it up\nwith   then start typing…","timeToRead":1,"frontmatter":{"title":"Command Bar"}}},{"node":{"fields":{"slug":"/docs/command-line-options/","date":null},"excerpt":"Polypane has a few command line options. On Linux polypane will be available in your path after installation, so just  polypane  will work…","timeToRead":1,"frontmatter":{"title":"Command line options"}}},{"node":{"fields":{"slug":"/docs/configuring-logitech-mouses/","date":null},"excerpt":"Logitech mouses like the MX master series have dedicated buttons for forward and back. On Linux these buttons are automatically recognized…","timeToRead":1,"frontmatter":{"title":"Configuring Logitech mouses"}}},{"node":{"fields":{"slug":"/docs/configuring-webstorm-to-work-with-polypane/","date":null},"excerpt":"You can configure WebStorm to open Polypane when starting a debug session or as a live reload target. This allows you to debug your code in…","timeToRead":1,"frontmatter":{"title":"Configuring WebStorm to work with Polypane"}}},{"node":{"fields":{"slug":"/docs/console/","date":null},"excerpt":"The Polypane console, available in the  panel  and by pressing   or   (on macOS) is a single console for all visible panes. With it you can…","timeToRead":3,"frontmatter":{"title":"Console"}}},{"node":{"fields":{"slug":"/docs/customizing-polypane/","date":null},"excerpt":"Though Polypane doesn't have a traditional settings panel, there are still plenty of ways to make Polypane your own and configure it in a…","timeToRead":6,"frontmatter":{"title":"Customizing Polypane"}}},{"node":{"fields":{"slug":"/docs/dark-and-light-mode/","date":null},"excerpt":"Polypane has a dark and light interface. You can toggle between them using  , or by selecting \"Toggle Dark mode\" in the View menu. On macOS…","timeToRead":1,"frontmatter":{"title":"Dark and light mode"}}},{"node":{"fields":{"slug":"/docs/data-processing-agreement/","date":null},"excerpt":"This Data Protection Addendum (\"Addendum\") is entered into between Firstversionist B.V. (trading as Polypane), registered in the Netherlands…","timeToRead":3,"frontmatter":{"title":"Data Processing Agreement"}}},{"node":{"fields":{"slug":"/docs/debug-tools/","date":null},"excerpt":"Debug tools give you instant, per-pane insight into your page's quality, layout, and user experience. They're built-in, so there are no…","timeToRead":8,"frontmatter":{"title":"Debug tools"}}},{"node":{"fields":{"slug":"/docs/detecting-polypane/","date":null},"excerpt":"You might have various reasons for wanting to detect that you're running in Polypane. Because Polypane emulates other devices and browsers…","timeToRead":1,"frontmatter":{"title":"Detecting Polypane"}}},{"node":{"fields":{"slug":"/docs/developer-tools/","date":null},"excerpt":"Polypane comes with two sets of developers tools: the native Polypane developer tools and the Chromium developer tools. Polypane developer…","timeToRead":1,"frontmatter":{"title":"Developer tools"}}},{"node":{"fields":{"slug":"/docs/device-presets/","date":null},"excerpt":"Polypane comes with a list of pane presets in four different categories: Mobile, Tablet, Desktop and Other. These contain a wide range of…","timeToRead":2,"frontmatter":{"title":"Device presets"}}},{"node":{"fields":{"slug":"/docs/devtools-panel/","date":null},"excerpt":"The Chromium Devtools tab in the  panel  let you select a pane to open the Chromium devtools for. You can also open the Chromium devtools…","timeToRead":1,"frontmatter":{"title":"Devtools Panel"}}},{"node":{"fields":{"slug":"/docs/elements-panel/","date":null},"excerpt":"The \"Elements\" tab in the  panel  lets you inspect and edit elements in all panes at once. That means you know exactly how your changes will…","timeToRead":15,"frontmatter":{"title":"Elements Panel"}}},{"node":{"fields":{"slug":"/docs/emulation/","date":null},"excerpt":"Polypane lets you emulate different user preference media queries, device properties like pixel ratio and user agent, and network conditions…","timeToRead":7,"frontmatter":{"title":"Emulation"}}},{"node":{"fields":{"slug":"/docs/experimental-chromium-features/","date":null},"excerpt":"Polypane is a browser for developers, so it comes with some experimental Chromium features turned on by default. This means you can use…","timeToRead":1,"frontmatter":{"title":"Experimental Chromium features"}}},{"node":{"fields":{"slug":"/docs/find-elements/","date":null},"excerpt":"Along with  Find text in page  across all panes, you can also search for elements using CSS Selectors. Open the Find element popup with…","timeToRead":1,"frontmatter":{"title":"Find elements"}}},{"node":{"fields":{"slug":"/docs/form-autofill/","date":null},"excerpt":"When working with forms, filling them in every time can take a lot of time even when the content is  synced across panes . To help with this…","timeToRead":2,"frontmatter":{"title":"Form autofill"}}},{"node":{"fields":{"slug":"/docs/global-zoom/","date":null},"excerpt":"In the top right of the Polypane window is a slider that lets you zoom out all panes simultaneously. This way you can make all your panes…","timeToRead":1,"frontmatter":{"title":"Global zoom"}}},{"node":{"fields":{"slug":"/docs/helper-extension-for-other-browsers/","date":null},"excerpt":"The Polypane helper extension makes it easy to open your current page or links in Polypane without having to copy and paste the URLs. It…","timeToRead":2,"frontmatter":{"title":"Helper extension for other browsers"}}},{"node":{"fields":{"slug":"/docs/horizontal-overflow/","date":null},"excerpt":"Polypane will automatically check panes for horizontal overflow issues and show an icon below a pane when it finds either\na horizontal…","timeToRead":1,"frontmatter":{"title":"Horizontal overflow detection"}}},{"node":{"fields":{"slug":"/docs/integrations/","date":null},"excerpt":"Polypane integrates with several applications and tools. For a quick overview, check out the  integrations overview . This page covers in…","timeToRead":2,"frontmatter":{"title":"Integrations"}}},{"node":{"fields":{"slug":"/docs/intro-to-panel/","date":null},"excerpt":"The Polypane panel is where you can find a ton of information on your page as well as ways to inspect and edit the page. You can open it…","timeToRead":2,"frontmatter":{"title":"Intro to panel"}}},{"node":{"fields":{"slug":"/docs/intro-to-panes/","date":null},"excerpt":"In Polypane, each viewport is called a \"pane\". All panes show the same page simultaneously, with your interactions synced across all of them…","timeToRead":2,"frontmatter":{"title":"Intro to panes"}}},{"node":{"fields":{"slug":"/docs/json-and-xml-viewer/","date":null},"excerpt":"When you open a JSON or XML file in Polypane (either from a URL, or as a .json/.xml file on disk) it is shown in a viewer that shows the…","timeToRead":2,"frontmatter":{"title":"JSON and XML viewer"}}},{"node":{"fields":{"slug":"/docs/known-issues/","date":null},"excerpt":"These are the known issues in terms of support for various browser capabilities. In future versions some of these might\nbe resolved. While…","timeToRead":1,"frontmatter":{"title":"Known issues"}}},{"node":{"fields":{"slug":"/docs/layout-debugging/","date":null},"excerpt":"With the shortcut   you can quickly toggle layout debugging in your panes. This adds outlines to all the HTML elements on the pages letting…","timeToRead":1,"frontmatter":{"title":"Layout debugging"}}},{"node":{"fields":{"slug":"/docs/layouts/","date":null},"excerpt":"There are five different layouts in Polypane: Horizontal Vertical Focus Split Full You can switch between layouts by clicking the Layout…","timeToRead":3,"frontmatter":{"title":"Layouts"}}},{"node":{"fields":{"slug":"/docs/link/","date":null},"excerpt":"When you hover over the address bar in Polypane a QR code icon will appear to the right. Click this to open Polypane's\nShare panel. Here you…","timeToRead":1,"frontmatter":{"title":"Share panel"}}},{"node":{"fields":{"slug":"/docs/list-of-shortcuts/","date":null},"excerpt":"Press   or   while using Polypane to quickly show a dropdown with all the shortcuts for easy reference. This page shows shortcuts for the…","timeToRead":1,"frontmatter":{"title":"List of shortcuts"}}},{"node":{"fields":{"slug":"/docs/live-auto-reloading/","date":null},"excerpt":"Polypane includes both live and autoreloading functionality. Live reloading will automatically refresh your CSS, images or the page whenever…","timeToRead":3,"frontmatter":{"title":"Live/auto reloading"}}},{"node":{"fields":{"slug":"/docs/making-screenshots/","date":null},"excerpt":"Polypane lets you make screenshots of all your panes together, the visible viewport of a single pane, the full height of a single pane or of…","timeToRead":4,"frontmatter":{"title":"Making screenshots"}}},{"node":{"fields":{"slug":"/docs/measure-text-length/","date":null},"excerpt":"Select any text in Polypane and right-click it to open the context menu. There you can quickly see the length of the selected text. For…","timeToRead":1,"frontmatter":{"title":"Measure text length"}}},{"node":{"fields":{"slug":"/docs/mental-model/","date":null},"excerpt":"Polypane shows your web page in multiple panes simultaneously. This is powerful, but it means your site can behave differently compared to a…","timeToRead":2,"frontmatter":{"title":"Mental model of Polypane's browser contexts"}}},{"node":{"fields":{"slug":"/docs/message-bus/","date":null},"excerpt":"While Polypane syncs all interaction events, there are some events we can't accurately sync: Closed root web components, since they don't…","timeToRead":1,"frontmatter":{"title":"Message Bus"}}},{"node":{"fields":{"slug":"/docs/meta-information/","date":null},"excerpt":"The \"Meta\" tab in the  panel  shows the metadata of a page as well as social card previews. Get a quick overview of the way your site is…","timeToRead":4,"frontmatter":{"title":"Meta information"}}},{"node":{"fields":{"slug":"/docs/network-panel/","date":null},"excerpt":"The \"Network\" tab in the  panel  gives you insight into all the resources that are loaded for the current page, including their status, size…","timeToRead":3,"frontmatter":{"title":"Network panel"}}},{"node":{"fields":{"slug":"/docs/other-tools/","date":null},"excerpt":"This page covers using Polypane alongside local dev server tools: automatic reloading utilities, the Browsersync proxy, and local hosting…","timeToRead":1,"frontmatter":{"title":"Polypane and local servers"}}},{"node":{"fields":{"slug":"/docs/outline-panel/","date":null},"excerpt":"The \"Outline\" tab in the  panel  shows you the page structure in various ways: by headings, landmarks, links, images, forms, focus order or…","timeToRead":8,"frontmatter":{"title":"Outline Panel"}}},{"node":{"fields":{"slug":"/docs/pane-management/","date":null},"excerpt":"In horizontal and vertical  layouts  you can have as many of them as you need. In focus mode, you get a single pane in the center of your…","timeToRead":1,"frontmatter":{"title":"Manage panes"}}},{"node":{"fields":{"slug":"/docs/pane-sizes/","date":null},"excerpt":"There are a number of different ways to set the size of panes and you are free to use whichever method works best for you: dragging to…","timeToRead":3,"frontmatter":{"title":"Pane sizes"}}},{"node":{"fields":{"slug":"/docs/performance/","date":null},"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…","timeToRead":7,"frontmatter":{"title":"Performance"}}},{"node":{"fields":{"slug":"/docs/pitching-polypane/","date":null},"excerpt":"Getting buy-in for a new dev tool like Polypane usually means getting your team or employer on board, and they might have practical…","timeToRead":6,"frontmatter":{"title":"Pitching Polypane"}}},{"node":{"fields":{"slug":"/docs/polypane-peek/","date":null},"excerpt":"The fastest way to get the info for any element is by using Peek. Using Polypane Peek Press and hold  alt  (on Linux and Windows) or  option…","timeToRead":2,"frontmatter":{"title":"Polypane Peek"}}},{"node":{"fields":{"slug":"/docs/portal/","date":null},"excerpt":"Polypane portal lets you share your  local development environment  with other devices and browsers in your network or through a public URL…","timeToRead":4,"frontmatter":{"title":"Polypane Portal"}}},{"node":{"fields":{"slug":"/docs/projects/","date":null},"excerpt":"Polypane supports a project based workflow that lets you switch between different sets of tabs, settings and bookmarks quickly, making it…","timeToRead":5,"frontmatter":{"title":"Projects"}}},{"node":{"fields":{"slug":"/docs/recording/","date":null},"excerpt":"The  pane screenshot menu  also contains the option to record a pane. This will let you record a video of the pane including all…","timeToRead":1,"frontmatter":{"title":"Recording"}}},{"node":{"fields":{"slug":"/docs/reference-image/","date":null},"excerpt":"The reference image feature lets you overlay an image on top of a pane, or show it and your site side-by-side. With this you can quickly…","timeToRead":2,"frontmatter":{"title":"Reference image"}}},{"node":{"fields":{"slug":"/docs/reload-css/","date":null},"excerpt":"With the shortcut   you can quickly reload all the CSS in a page without refreshing the entire page. You will also find this option by right…","timeToRead":1,"frontmatter":{"title":"Reload CSS"}}},{"node":{"fields":{"slug":"/docs/responsive-debugging-workflow/","date":null},"excerpt":"Responsive bugs are hard to track down when you can only look at one viewport at a time. Polypane shows all your breakpoints side by side…","timeToRead":3,"frontmatter":{"title":"Responsive debugging workflow"}}},{"node":{"fields":{"slug":"/docs/review-and-approval-by-it-and-security/","date":null},"excerpt":"This guide gives answers to the most common questions you may be asked by your IT or Security teams in order to get approval for Polypane…","timeToRead":4,"frontmatter":{"title":"Review and approval by IT and Security"}}},{"node":{"fields":{"slug":"/docs/rulers-grids-and-guides/","date":null},"excerpt":"With Polypane's rulers feature you can easily measure and check alignment and overlay grids, columns and rows on a pane.\nYou can configure…","timeToRead":4,"frontmatter":{"title":"Rulers, grids and guides"}}},{"node":{"fields":{"slug":"/docs/sales-and-procurement/","date":null},"excerpt":"This guide gives answers to the most common questions you may be asked by your sales and procurement teams in order to get approval for…","timeToRead":3,"frontmatter":{"title":"Sales and Procurement"}}},{"node":{"fields":{"slug":"/docs/security-policy/","date":null},"excerpt":"This document describes the security practices in place at Firstversionist B.V. (trading as Polypane). Given that Polypane is a single…","timeToRead":2,"frontmatter":{"title":"Security Policy"}}},{"node":{"fields":{"slug":"/docs/security/","date":null},"excerpt":"Because Polypane is a browser for developers, it has slightly different security settings compared to other browsers, and will allow you to…","timeToRead":1,"frontmatter":{"title":"Security"}}},{"node":{"fields":{"slug":"/docs/session-management/","date":null},"excerpt":"With different sessions you can test your web application in various states: logged in, logged out, with different user roles, with…","timeToRead":2,"frontmatter":{"title":"Session management"}}},{"node":{"fields":{"slug":"/docs/setup/","date":null},"excerpt":"To install and activate Polypane, follow these steps. Step 0: Make sure you have access To use Polypane you need to create an account, or be…","timeToRead":1,"frontmatter":{"title":"Setup"}}},{"node":{"fields":{"slug":"/docs/showing-multiple-urls/","date":null},"excerpt":"With Polypane, you can show multiple different URLs side by side. Whether it's to compare your local development site with the live…","timeToRead":2,"frontmatter":{"title":"Showing multiple URLs"}}},{"node":{"fields":{"slug":"/docs/simulators/","date":null},"excerpt":"The Simulators available for panes contain a wide range of different simulations to experience how different impairments affect the way you…","timeToRead":3,"frontmatter":{"title":"Simulators"}}},{"node":{"fields":{"slug":"/docs/snippets/","date":null},"excerpt":"The Snippets panel lets you add and manage JS and CSS snippets that can be applied to all or some of the panes as well as connected browsers…","timeToRead":5,"frontmatter":{"title":"Snippets"}}},{"node":{"fields":{"slug":"/docs/social-card-and-open-graph-workflow/","date":null},"excerpt":"Getting social cards right involves more than writing the correct meta tags. The image dimensions, text truncation, domain display, and…","timeToRead":2,"frontmatter":{"title":"Social card and Open Graph workflow"}}},{"node":{"fields":{"slug":"/docs/source-panel/","date":null},"excerpt":"The \"Source\" tab in the  panel  shows the (generated) HTML source of the current page. The HTML is syntax highlighted and sections are…","timeToRead":1,"frontmatter":{"title":"Source panel"}}},{"node":{"fields":{"slug":"/docs/storage-panel/","date":null},"excerpt":"The \"Storage\" tab in the  panel  shows the localStorage, sessionStorage and cookies of the current tab and the sessions in it. When you use…","timeToRead":2,"frontmatter":{"title":"Storage panel"}}},{"node":{"fields":{"slug":"/docs/switching-to-polypane/","date":null},"excerpt":"Switching to Polypane is an investment that quickly pays off. Like adopting a new IDE or design tool, there's a short adjustment period but…","timeToRead":4,"frontmatter":{"title":"Switching to Polypane"}}},{"node":{"fields":{"slug":"/docs/synced-interactions/","date":null},"excerpt":"Polypane syncs interactions across all panes simultaneously so when you scroll, click, type, or hover in one pane, every other pane follows…","timeToRead":3,"frontmatter":{"title":"Synced interactions"}}},{"node":{"fields":{"slug":"/docs/tab-customization/","date":null},"excerpt":"Tabs in Polypane can be renamed and given a custom highlight color (also visible in the address bar). These can be configured for a specific…","timeToRead":1,"frontmatter":{"title":"Tab customization"}}},{"node":{"fields":{"slug":"/docs/team-workflows/","date":null},"excerpt":"Polypane fits into team development processes in several ways: sharing local work for review, keeping viewport setups consistent across the…","timeToRead":2,"frontmatter":{"title":"Team workflows"}}},{"node":{"fields":{"slug":"/docs/ui-overview/","date":null},"excerpt":"Parts of Polypane will be still familiar if you come from a different browser: There's an address bar,\nforward and backward buttons and a…","timeToRead":4,"frontmatter":{"title":"Polypane UI overview"}}},{"node":{"fields":{"slug":"/docs/web-vitals/","date":null},"excerpt":"Polypane automatically measures Core Web Vitals for every pane as you browse, giving you real-time performance feedback without leaving your…","timeToRead":1,"frontmatter":{"title":"Web Vitals"}}},{"node":{"fields":{"slug":"/docs/website-issues-you-could-encounter/","date":null},"excerpt":"Polypane is really good at surfacing issues with websites. For example with our  debug tools ,  outline panel  and  accessibility panel . A…","timeToRead":8,"frontmatter":{"title":"Website issues you could encounter"}}},{"node":{"fields":{"slug":"/docs/workspace-management/","date":null},"excerpt":"The \"Workspaces\" tab in the  panel  gives you a visual overview of your  workspaces , split into the default built-in workspaces and your…","timeToRead":1,"frontmatter":{"title":"Workspace management"}}},{"node":{"fields":{"slug":"/docs/workspaces/","date":null},"excerpt":"Workspaces allow you to save your favorite sets of panes and switch quickly between them. For example, you can have your device lab saved in…","timeToRead":2,"frontmatter":{"title":"Workspaces"}}}]}},"pageContext":{}},"staticQueryHashes":["4164364741","425175329"]}