{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Upsun Developer","description":"Upsun Developer — documentation, guides, and more.","colors":{"primary":"#6046ff","light":"#F7F8F8","dark":"#646F75"},"logo":{"light":"https://mintcdn.com/upsun-c9761871/WSCgazBk0GWUPP4l/logo/Upsun-dev-center-light.svg?fit=max\u0026auto=format\u0026n=WSCgazBk0GWUPP4l\u0026q=85\u0026s=c35e42815c3d17de292fb0a86d41aa5f","dark":"https://mintcdn.com/upsun-c9761871/WSCgazBk0GWUPP4l/logo/Upsun-dev-center-dark.svg?fit=max\u0026auto=format\u0026n=WSCgazBk0GWUPP4l\u0026q=85\u0026s=6bdea7a02f9b19da987e3502457d1ce8","href":"https://developer.upsun.com/"},"favicon":"https://mintcdn.com/upsun-c9761871/zc3aDujkEk92gVGr/favicon.png?fit=max\u0026auto=format\u0026n=zc3aDujkEk92gVGr\u0026q=85\u0026s=3b2ecb4deccafac0ea68acf519ab577b","api":{"examples":{"prefill":true}},"appearance":{"default":"system"},"background":{"color":{"light":"#F7F8F8","dark":"#0E1113"}},"navbar":{"links":[{"href":"https://auth.upsun.com/","label":"Console"},{"href":"https://upsun.com/demo/","label":"Watch a demo"}],"primary":{"type":"button","label":"Free trial","href":"https://auth.upsun.com/register"}},"footer":{"socials":{"github":"https://github.com/upsun","youtube":"https://www.youtube.com/@upsundotcom","x":"https://x.com/upsundotcom","linkedin":"https://www.linkedin.com/company/upsundotcom"},"links":[{"header":"Docs","items":[{"label":"Documentation","href":"/docs/get-started"},{"label":"Tutorials","href":"/tutorials"},{"label":"API Reference","href":"/api"},{"label":"CLI Reference","href":"/cli"}]},{"header":"Resources","items":[{"label":"Changelog","href":"/changelog"},{"label":"Upsun Blog","href":"https://upsun.com/blog"},{"label":"Community","href":"https://community.upsun.com"},{"label":"Support","href":"/docs/get-started/here/support"}]},{"header":"Company","items":[{"label":"About","href":"https://upsun.com/about-us"},{"label":"Pricing","href":"https://upsun.com/pricing"},{"label":"Careers","href":"https://upsun.com/jobs"}]}]},"seo":{"metatags":{"robots":"index, follow","description":"Upsun User Documentation, Dev Center, news, and more."},"indexing":"all"},"fonts":{"heading":{"family":"Instrument Sans","weight":700},"body":{"family":"Instrument Sans","weight":400}},"icons":{"library":"lucide"},"styling":{"latex":true},"integrations":{"gtm":{"tagId":"GTM-KJ4F382K"},"telemetry":{"enabled":true}},"errors":{"404":{"redirect":false,"title":"This page took an unexpected detour","description":"It might have moved, or maybe it never existed. Either way, let's get you back on track. Try searching above or head to one of these:\n\n\u003cdiv style={{textAlign: 'left'}}>\n\n\u003cColumns cols={2}>\n \u003cCard title=\"Get Started\" icon=\"rocket\" href=\"/docs/get-started\">\n Deploy your first app on Upsun\n \u003c/Card>\n \u003cCard title=\"Documentation\" icon=\"book-open\" href=\"/docs/core-concepts\">\n Explore the full documentation\n \u003c/Card>\n \u003cCard title=\"Tutorials\" icon=\"play\" href=\"/tutorials\">\n Follow step-by-step guides\n \u003c/Card>\n \u003cCard title=\"API Reference\" icon=\"code\" href=\"/api\">\n REST API and SDK reference\n \u003c/Card>\n\u003c/Columns>\n\n\u003c/div>"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"metadata":{"timestamp":true},"variables":{"config_platformsh":"Platform.sh","config_config_dir":".upsun/","config_config_files_app":".upsun/config.yaml","config_config_files_services":".upsun/config.yaml","config_config_files_routes":".upsun/config.yaml","config_config_files_env":".environment","config_glossary_mb":"MB","config_product_blackfire":"Upsun Blackfire","config_product_cloud":"Upsun Cloud","config_product_dispatch":"Upsun Dispatch","config_vendor_name":"Upsun","config_vendor_cli":"upsun","config_vendor_alt":"upsun","config_vendor_prefix":"UPSUN","config_vendor_community_url":"https://community.upsun.com/","config_vendor_hostname":"platformsh.site","config_vendor_host":"upsun.com","config_vendor_docs":"https://developer.upsun.com","config_vendor_api":"https://api.upsun.com","config_vendor_console":"https://console.upsun.com","config_vendor_sales":"https://upsun.com/contact-us/","config_vendor_support_url":"https://support.upsun.com","config_vendor_support_ticket":"https://support.upsun.com/hc/en-us/requests/new?ticket_form_id=35294051960082","config_vendor_support_feature":"https://support.upsun.com/hc/en-us/requests/new?ticket_form_id=37982573191442","config_vendor_support_requests":"https://support.upsun.com/hc/en-us/requests","config_vendor_register":"https://auth.upsun.com/register/","meta_version_solr":"10.0","meta_version_composable":"26.05","meta_version_nodejs":"26","meta_version_python":"3.14","meta_version_php_latest":"8.5"},"navigation":{"global":{"anchors":[]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"upsun-c9761871","hasAudioNarration":false,"actualSubdomain":"upsun-c9761871","customDomains":["developer.upsun.com"],"gitSource":{"type":"github","owner":"upsun","repo":"devcenter-mintlify","deployBranch":"main","contentDirectory":"contents","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af62a7ae2831ad30e64419f","clientVersion":"0.0.4117","searchFilterCounts":[{"language":"default","tag":"Cloud","count":552},{"language":"default","tag":"API","count":280},{"language":"default","tag":"OpenAPI Reference","count":272},{"language":"default","tag":"Docs","count":256},{"language":"default","tag":"Configure Apps \u0026 Services","count":79},{"language":"default","tag":"Get Started","count":42},{"language":"default","tag":"Manage Projects","count":36},{"language":"default","tag":"Configure apps","count":30},{"language":"default","tag":"Pick a Stack","count":27},{"language":"default","tag":"PHP","count":26}],"searchSettings":{"maxResults":16}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":true,"enableContextualStarterQuestions":true,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"type":"email","email":"advocacy@upsun.com"}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"styles.css","href":"/_mintlify/custom/upsun-c9761871/73d0de61d492770e/styles.css"}],"page":{"pagePath":"posts/authors/ralt","slug":"/posts/authors/ralt","pageMetadata":{"title":"Florian Margaine","sidebarTitle":"Florian Margaine","description":"Articles written by Florian Margaine.","mode":"wide","type":"post","sidebar":{"exclude":true},"href":"/posts/authors/ralt"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Articles written by Florian Margaine.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const ShowMore=({children,className=``,id=`posts`,btnClassName=``})=>{const _components={a:`a`,..._provideComponents()};const hash=`show-all-`+id;const[expanded,setExpanded]=useState(false);useEffect(()=>{const check=()=>{if(window.location.hash===`#`+hash){setExpanded(true)}};check();window.addEventListener(`hashchange`,check);return()=>window.removeEventListener(`hashchange`,check)},[hash]);const wrapClass=expanded?className:className+` blog-paginated`;return _jsxs(`div`,{children:[_jsx(`div`,{className:wrapClass,children}),!expanded\u0026\u0026_jsx(`div`,{className:btnClassName,style:{marginTop:`2rem`,textAlign:`center`},children:_jsx(_components.a,{href:`#`+hash,style:{display:`inline-flex`,alignItems:`center`,gap:`0.5rem`,padding:`0.75rem 1.5rem`,borderRadius:`9999px`,border:`1px solid #e5e7eb`,fontSize:`0.875rem`,fontWeight:500,color:`#374151`,textDecoration:`none`},children:`Show all posts ▾`})})]})};function _createMdxContent(props){const _components={a:`a`,..._provideComponents(),...props.components},{Heading,OptimizedImage,_MdxComponentBoundary}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-4 mint-mb-8 not-prose`,children:[_jsx(OptimizedImage,{src:`https://github.com/ralt.png?size=128`,alt:`Florian Margaine`,className:`mint-w-16 mint-h-16 mint-rounded-full`}),_jsxs(`div`,{className:`mint-flex mint-flex-wrap mint-gap-3`,children:[_jsx(`a`,{href:`https://github.com/ralt`,target:`_blank`,rel:`noopener noreferrer`,className:`mint-inline-flex mint-items-center mint-gap-1.5 mint-px-3 mint-py-1.5 mint-rounded-full mint-border mint-border-gray-200 dark:mint-border-white/10 mint-text-sm mint-text-gray-700 dark:mint-text-gray-300 hover:border-primary dark:hover:border-primary-light mint-transition-colors`,children:`GitHub`}),_jsx(`a`,{href:`https://www.linkedin.com/in/florian-margaine-43971136`,target:`_blank`,rel:`noopener noreferrer`,className:`mint-inline-flex mint-items-center mint-gap-1.5 mint-px-3 mint-py-1.5 mint-rounded-full mint-border mint-border-gray-200 dark:mint-border-white/10 mint-text-sm mint-text-gray-700 dark:mint-text-gray-300 hover:border-primary dark:hover:border-primary-light mint-transition-colors`,children:`LinkedIn`})]})]}),`\n`,_jsx(_MdxComponentBoundary,{name:`ShowMore`,children:_jsxs(ShowMore,{id:`author-ralt-articles`,className:`blog-card-grid`,children:[_jsxs(_components.a,{href:`/posts/how-tos/give-your-bi-tool-read-only-database-access-on-upsun`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`Give your BI tool read-only database access on Upsun`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-tos`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-tos`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, November 10th 2026`})]}),_jsx(Heading,{level:`3`,id:`give-your-bi-tool-read-only-database-access-on-upsun`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Give your BI tool read-only database access on Upsun`}),_jsx(`p`,{className:`blog-card-desc`,children:`Give your BI tool read-only database access through a small SSH app on Upsun. Combine Viewer permissions, API tokens, and database endpoints. Follow the setup.`})]})]}),_jsxs(_components.a,{href:`/posts/insights/upsun-has-just-unlocked-the-next-level-of-scaling-with-autoscaling-databases`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`Upsun has just unlocked the next level of scaling with autoscaling databases`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`insights`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`insights`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Thursday, November 5th 2026`})]}),_jsx(Heading,{level:`3`,id:`upsun-has-just-unlocked-the-next-level-of-scaling-with-autoscaling-databases`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Upsun has just unlocked the next level of scaling with autoscaling databases`}),_jsx(`p`,{className:`blog-card-desc`,children:`Upsun adds native autoscaling for MariaDB and PostgreSQL read replicas. Scale read-heavy workloads while keeping your data in familiar open source databases.`})]})]}),_jsxs(_components.a,{href:`/posts/insights/so-what-to-scale-next`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`So, what to scale next?`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`insights`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`insights`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, October 6th 2026`})]}),_jsx(Heading,{level:`3`,id:`so%2C-what-to-scale-next%3F`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`So, what to scale next?`}),_jsx(`p`,{className:`blog-card-desc`,children:`Your web application is slow. Use these decision charts to connect CPU, memory, and disk pressure to your next scaling move, from replicas to fewer workers.`})]})]}),_jsxs(_components.a,{href:`/posts/insights/session-storage-gets-complicated-faster-than-you-think`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`Session storage gets complicated faster than you think`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`insights`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`insights`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Wednesday, September 30th 2026`})]}),_jsx(Heading,{level:`3`,id:`session-storage-gets-complicated-faster-than-you-think`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Session storage gets complicated faster than you think`}),_jsx(`p`,{className:`blog-card-desc`,children:`Explore session storage tradeoffs across files, PostgreSQL, Redis, and Valkey, from expiration and cleanup to memory limits. Test your options on Upsun Cloud.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/airflow-on-a-locked-down-platform`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`Airflow on a locked-down platform`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, September 22nd 2026`})]}),_jsx(Heading,{level:`3`,id:`airflow-on-a-locked-down-platform`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Airflow on a locked-down platform`}),_jsx(`p`,{className:`blog-card-desc`,children:`Running Apache Airflow on Upsun’s hardened containers takes 30 lines of C and a decision about how much task isolation you actually want back.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/how-to-host-a-website-that-isnt-publicly-reachable`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`How to host a website that isn't publicly reachable`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Thursday, September 3rd 2026`})]}),_jsx(Heading,{level:`3`,id:`how-to-host-a-website-that-isn%E2%80%99t-publicly-reachable`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`How to host a website that isn’t publicly reachable`}),_jsx(`p`,{className:`blog-card-desc`,children:`Some applications should never answer a request from the open internet. Here are the ways to make one unreachable on Upsun, and how to pick between them.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/why-lets-encrypt-certificate-renewals-fail`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`Why Let's Encrypt certificate renewals fail`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, August 25th 2026`})]}),_jsx(Heading,{level:`3`,id:`why-let%E2%80%99s-encrypt-certificate-renewals-fail`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Why Let’s Encrypt certificate renewals fail`}),_jsx(`p`,{className:`blog-card-desc`,children:`Certificate renewals fail for a handful of recurring reasons. Here’s how the HTTP-01 challenge works and what breaks it, from IPv6 records to CDN rules.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/how-ssh-authentication-works-on-upsun`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`How SSH authentication works on Upsun Cloud`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, August 18th 2026`})]}),_jsx(Heading,{level:`3`,id:`how-ssh-authentication-works-on-upsun-cloud`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`How SSH authentication works on Upsun Cloud`}),_jsx(`p`,{className:`blog-card-desc`,children:`Decode the SSH certificate the Upsun CLI provisions for you, then follow it through the SSH proxy: CA trust, revocation, access documents, and MFA.`})]})]}),_jsxs(_components.a,{href:`/posts/insights/which-stack-would-you-pick-for-an-interactive-ai-app-today`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`Which stack would you pick for an interactive AI app today?`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`insights`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`insights`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Friday, July 31st 2026`})]}),_jsx(Heading,{level:`3`,id:`which-stack-would-you-pick-for-an-interactive-ai-app-today%3F`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Which stack would you pick for an interactive AI app today?`}),_jsx(`p`,{className:`blog-card-desc`,children:`Coding agents changed how new teams pick a tech stack. A tour of 8 ecosystems for interactive AI apps, and why “can we run it” beats “can we write it”.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/backup-consistency-why-it-matters-and-how-upsun-handles-it`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`Backup consistency: why it matters and how Upsun handles it`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, July 21st 2026`})]}),_jsx(Heading,{level:`3`,id:`backup-consistency%3A-why-it-matters-and-how-upsun-handles-it`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Backup consistency: why it matters and how Upsun handles it`}),_jsx(`p`,{className:`blog-card-desc`,children:`Learn what backup consistency means at the filesystem and service levels, and how Upsun balances consistent backups with zero-disruption live backups.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/can-you-trust-the-x-client-ip-header`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`Can you trust the X-Client-IP header?`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, July 14th 2026`})]}),_jsx(Heading,{level:`3`,id:`can-you-trust-the-x-client-ip-header%3F`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Can you trust the X-Client-IP header?`}),_jsx(`p`,{className:`blog-card-desc`,children:`Why the X-Client-IP header on Upsun holds the real visitor IP behind Fastly, Cloudflare, and CloudFront, and how to log real client IPs behind any other CDN.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/write-a-git-server-with-per-branch-permissions-in-five-minutes`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`Write a Git server with per-branch permissions in five minutes`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, July 7th 2026`})]}),_jsx(Heading,{level:`3`,id:`write-a-git-server-with-per-branch-permissions-in-five-minutes`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Write a Git server with per-branch permissions in five minutes`}),_jsx(`p`,{className:`blog-card-desc`,children:`Upsun’s most basic API is a Git server. Build one in Python with Dulwich and Paramiko, and add per-branch read permissions in a single method.`})]})]}),_jsxs(_components.a,{href:`/posts/insights/why-emacs-is-still-my-interface-to-my-computer`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`Why Emacs is still my interface to my computer`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`insights`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`insights`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, June 30th 2026`})]}),_jsx(Heading,{level:`3`,id:`why-emacs-is-still-my-interface-to-my-computer`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Why Emacs is still my interface to my computer`}),_jsx(`p`,{className:`blog-card-desc`,children:`Why I still use Emacs every day: one consistent interface for editing, Git with Magit, terminals, a Claude Code agent per project, and the rest of my computer.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/cloning-a-terabyte-in-a-minute-and-the-limit-hiding-behind-it`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`Cloning a terabyte in a minute, and the limit hiding behind it`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, June 23rd 2026`})]}),_jsx(Heading,{level:`3`,id:`cloning-a-terabyte-in-a-minute%2C-and-the-limit-hiding-behind-it`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Cloning a terabyte in a minute, and the limit hiding behind it`}),_jsx(`p`,{className:`blog-card-desc`,children:`Upsun clones a terabyte production environment in under a minute using Ceph copy-on-write. Here is the 16-level clone-depth limit behind it, why flattening is the price you pay, and what it says about engineering trade-offs.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/how-redundancy-and-failover-work-on-upsun`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`How redundancy and failover work on Upsun`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, June 16th 2026`})]}),_jsx(Heading,{level:`3`,id:`how-redundancy-and-failover-work-on-upsun`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`How redundancy and failover work on Upsun`}),_jsx(`p`,{className:`blog-card-desc`,children:`Upsun handles redundancy and failover inside your region, at the compute, storage, and network layers. Here’s where it happens, how fast it is, and the trade-offs behind it.`})]})]}),_jsxs(_components.a,{href:`/posts/insights/code-matters-less-than-ever-and-more-than-ever`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`Code matters less than ever, and more than ever`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`insights`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`insights`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, June 9th 2026`})]}),_jsx(Heading,{level:`3`,id:`code-matters-less-than-ever%2C-and-more-than-ever`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Code matters less than ever, and more than ever`}),_jsx(`p`,{className:`blog-card-desc`,children:`AI made code cheap to write and cheap to throw away, so it matters less than ever. It also matters more, because debugging, reviews, and velocity all depend on it.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/upsun-deployment-hooks-and-commands-which-one-to-use-and-when`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`Upsun deployment hooks and commands: which one to use, and when`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Thursday, June 4th 2026`})]}),_jsx(Heading,{level:`3`,id:`upsun-deployment-hooks-and-commands%3A-which-one-to-use%2C-and-when`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Upsun deployment hooks and commands: which one to use, and when`}),_jsx(`p`,{className:`blog-card-desc`,children:`Build hooks, deploy hooks, pre_start, start, and post_start all shape how Upsun deploys your app. Learn what each one does and when to reach for it.`})]})]}),_jsxs(_components.a,{href:`/posts/insights/ddev-is-in-good-hands`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`DDEV is in good hands`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`insights`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`insights`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Thursday, May 21st 2026`})]}),_jsx(Heading,{level:`3`,id:`ddev-is-in-good-hands`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`DDEV is in good hands`}),_jsx(`p`,{className:`blog-card-desc`,children:`DDEV is alive, actively maintained, and back with its foundation. A look at our chapter in the project, why we got involved, and why we are happy to step out of the way.`})]})]}),_jsxs(_components.a,{href:`/posts/insights/the-not-so-hidden-cost-of-ai-scrapers`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`The (not so) hidden cost of AI scrapers`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`insights`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`insights`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, May 5th 2026`})]}),_jsx(Heading,{level:`3`,id:`the-not-so-hidden-cost-of-ai-scrapers`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`The (not so) hidden cost of AI scrapers`}),_jsx(`p`,{className:`blog-card-desc`,children:`AI scrapers drive up your hosting cost while real users wait. Use robots.txt, cache normalization, and sane application limits to take the pressure off.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/how-upsun-provisions-tls-certificates-at-scale`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/how-it-works/how-upsun-provisions-tls-certificates-at-scale/how-upsun-provisions-tls-certificates-at-scale.png`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/how-it-works/how-upsun-provisions-tls-certificates-at-scale/how-upsun-provisions-tls-certificates-at-scale.png`,alt:`How Upsun provisions TLS certificates at scale`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Thursday, April 9th 2026`})]}),_jsx(Heading,{level:`3`,id:`how-upsun-provisions-tls-certificates-at-scale`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`How Upsun provisions TLS certificates at scale`}),_jsx(`p`,{className:`blog-card-desc`,children:`Every Upsun environment gets HTTPS automatically. Here’s how the certificate system works, from wildcards to Let’s Encrypt automation.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/why-upsun-moved-from-lvm-to-ceph`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/how-it-works/why-upsun-moved-from-lvm-to-ceph/why-upsun-moved-from-lvm-to-ceph.png`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/how-it-works/why-upsun-moved-from-lvm-to-ceph/why-upsun-moved-from-lvm-to-ceph.png`,alt:`Why we moved from LVM to Ceph for container storage`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Thursday, April 2nd 2026`})]}),_jsx(Heading,{level:`3`,id:`why-we-moved-from-lvm-to-ceph-for-container-storage`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Why we moved from LVM to Ceph for container storage`}),_jsx(`p`,{className:`blog-card-desc`,children:`Upsun migrated from LVM to Ceph for container storage to separate compute from storage, enable instant volume migration, and make VMs disposable again.`})]})]}),_jsxs(_components.a,{href:`/posts/discussions/governance-is-a-contract-chain-and-youre-in-it`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/discussions/governance-is-a-contract-chain-and-youre-in-it/governance-is-a-contract-chain.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/discussions/governance-is-a-contract-chain-and-youre-in-it/governance-is-a-contract-chain.webp`,alt:`Governance is a contract chain, and you're in it`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`discussions`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`discussions`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, March 24th 2026`})]}),_jsx(Heading,{level:`3`,id:`governance-is-a-contract-chain%2C-and-you%E2%80%99re-in-it`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Governance is a contract chain, and you’re in it`}),_jsx(`p`,{className:`blog-card-desc`,children:`Governance is a chain of contracts from certification bodies to you. AI didn’t change the chain, but it produces code faster than humans can review it.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/rpm-repo-s3`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/how-it-works/rpm-repo-s3/rpm-logo.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/how-it-works/rpm-repo-s3/rpm-logo.webp`,alt:`How we host an RPM repository on AWS S3`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, March 17th 2026`})]}),_jsx(Heading,{level:`3`,id:`how-we-host-an-rpm-repository-on-aws-s3`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`How we host an RPM repository on AWS S3`}),_jsx(`p`,{className:`blog-card-desc`,children:`Learn how to host an RPM repository entirely on AWS S3 with no active components, minimal cost, and authenticated access using IAM.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/natural-scaling-for-multi-country-ecommerce`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/how-it-works/natural-scaling-for-multi-country-ecommerce/natural-scaling-for-multi-country-ecommerce.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/how-it-works/natural-scaling-for-multi-country-ecommerce/natural-scaling-for-multi-country-ecommerce.webp`,alt:`Natural scaling for multi-country ecommerce`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Thursday, March 12th 2026`})]}),_jsx(Heading,{level:`3`,id:`natural-scaling-for-multi-country-ecommerce`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Natural scaling for multi-country ecommerce`}),_jsx(`p`,{className:`blog-card-desc`,children:`Multi-country ecommerce is a textbook case for natural scaling. Instead of cramming every country into one store, give each its own. Here’s why.`})]})]}),_jsxs(_components.a,{href:`/posts/how-tos/replicate-your-production-outage-on-staging`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/how-tos/replicate-your-production-outage-on-staging/replicate-your-production-outage-on-staging.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/how-tos/replicate-your-production-outage-on-staging/replicate-your-production-outage-on-staging.webp`,alt:`Replicate your production outage on staging`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-tos`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-tos`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, March 10th 2026`})]}),_jsx(Heading,{level:`3`,id:`replicate-your-production-outage-on-staging`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Replicate your production outage on staging`}),_jsx(`p`,{className:`blog-card-desc`,children:`After fixing a production outage, you need to prove the fix works under the same traffic. Here’s how to replicate real production traffic on an Upsun staging environment using the observability API and k6.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/your-waf-is-buffering-ours-is-streaming`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/how-it-works/your-waf-is-buffering-ours-is-streaming/your-waf-is-buffering-ours-is-streaming.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/how-it-works/your-waf-is-buffering-ours-is-streaming/your-waf-is-buffering-ours-is-streaming.webp`,alt:`Your WAF is buffering. Ours is streaming.`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Wednesday, February 18th 2026`})]}),_jsx(Heading,{level:`3`,id:`your-waf-is-buffering-ours-is-streaming`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Your WAF is buffering. Ours is streaming.`}),_jsx(`p`,{className:`blog-card-desc`,children:`Most WAFs buffer your entire request before validating it. That’s slow. Upsun’s technical WAF validates requests while streaming them to your backend, so you don’t pay a latency tax for security.`})]})]}),_jsxs(_components.a,{href:`/posts/hands-on/scriberr-on-upsun`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/hands-on/scriberr-on-upsun/scriberr-on-upsun.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/hands-on/scriberr-on-upsun/scriberr-on-upsun.webp`,alt:`Scriberr on Upsun`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`hands-on`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`hands-on`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, February 10th 2026`})]}),_jsx(Heading,{level:`3`,id:`scriberr-on-upsun`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Scriberr on Upsun`}),_jsx(`p`,{className:`blog-card-desc`,children:`Learn how to deploy Scriberr, an AI-powered transcription tool, on Upsun for self-hosted audio and video transcription.`})]})]}),_jsxs(_components.a,{href:`/posts/insights/the-only-correct-way-to-git-pull-and-merge`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/insights/the-only-correct-way-to-git-pull-and-merge/the-only-correct-way-to-git-pull-and-merge.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/insights/the-only-correct-way-to-git-pull-and-merge/the-only-correct-way-to-git-pull-and-merge.webp`,alt:`The only correct way to git pull and merge`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`insights`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`insights`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, February 3rd 2026`})]}),_jsx(Heading,{level:`3`,id:`the-only-correct-way-to-git-pull-and-merge`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`The only correct way to git pull and merge`}),_jsx(`p`,{className:`blog-card-desc`,children:`A strongly opinionated guide to git pull and merge strategies that will make your commit history actually useful. Learn when to rebase, when to merge, and why the defaults are lying to you.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/spf-dkim-dmarc-what-are-those-for-anyway`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/how-it-works/spf-dkim-dmarc-what-are-those-for-anyway/spf-dkim-dmarc-what-are-those-for-anyway.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/how-it-works/spf-dkim-dmarc-what-are-those-for-anyway/spf-dkim-dmarc-what-are-those-for-anyway.webp`,alt:`SPF, DKIM, DMARC, what are those for anyway?`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Thursday, January 29th 2026`})]}),_jsx(Heading,{level:`3`,id:`spf%2C-dkim%2C-dmarc%2C-what-are-those-for-anyway%3F`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`SPF, DKIM, DMARC, what are those for anyway?`}),_jsx(`p`,{className:`blog-card-desc`,children:`Finally understand what SPF, DKIM, and DMARC actually do, why email needs them, and how to set them up without wanting to flip a table.`})]})]}),_jsxs(_components.a,{href:`/posts/insights/the-third-way-to-scale-that-nobody-talks-about`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/insights/the-third-way-to-scale-that-nobody-talks-about/the-third-way-to-scale-that-nobody-talks-about.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/insights/the-third-way-to-scale-that-nobody-talks-about/the-third-way-to-scale-that-nobody-talks-about.webp`,alt:`The third way to scale that nobody talks about`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`insights`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`insights`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, January 20th 2026`})]}),_jsx(Heading,{level:`3`,id:`the-third-way-to-scale-that-nobody-talks-about`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`The third way to scale that nobody talks about`}),_jsx(`p`,{className:`blog-card-desc`,children:`Beyond vertical and horizontal scaling lies a third approach that most scaling discussions ignore. Learn about natural scaling, where you sidestep the problem entirely.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/how-weve-been-hardening-containers-since-before-docker-made-it-cool`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/how-it-works/how-weve-been-hardening-containers-since-before-docker-made-it-cool/how-weve-been-hardening-containers-since-before-docker-made-it-cool.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/how-it-works/how-weve-been-hardening-containers-since-before-docker-made-it-cool/how-weve-been-hardening-containers-since-before-docker-made-it-cool.webp`,alt:`How we've been hardening containers since before Docker made it cool`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, January 13th 2026`})]}),_jsx(Heading,{level:`3`,id:`how-we%E2%80%99ve-been-hardening-containers-since-before-docker-made-it-cool`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`How we’ve been hardening containers since before Docker made it cool`}),_jsx(`p`,{className:`blog-card-desc`,children:`Docker’s hardened images are great, but we’ve been doing this for years. Here’s the automated pipeline that’s been securing hundreds of container images behind the scenes at Upsun.`})]})]}),_jsxs(_components.a,{href:`/posts/hands-on/stop-testing-jcr-apps-in-production`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/hands-on/stop-testing-jcr-apps-in-production/stop-testing-jcr-apps-in-production.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/hands-on/stop-testing-jcr-apps-in-production/stop-testing-jcr-apps-in-production.webp`,alt:`Stop testing JCR apps in production`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`hands-on`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`hands-on`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, January 6th 2026`})]}),_jsx(Heading,{level:`3`,id:`stop-testing-jcr-apps-in-production`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Stop testing JCR apps in production`}),_jsx(`p`,{className:`blog-card-desc`,children:`Learn why JCR-based applications benefit from fast, production-grade environment cloning. Discover how Upsun removes one of JCR’s biggest operational challenges through instant repository duplication.`})]})]}),_jsxs(_components.a,{href:`/posts/hands-on/migration-day-executing-your-upsun-cutover`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/hands-on/migration-day-executing-your-upsun-cutover/migration-day-executing-your-upsun-cutover.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/hands-on/migration-day-executing-your-upsun-cutover/migration-day-executing-your-upsun-cutover.webp`,alt:`Migration day: executing your Upsun cutover`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`hands-on`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`hands-on`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, December 16th 2025`})]}),_jsx(Heading,{level:`3`,id:`migration-day%3A-executing-your-upsun-cutover`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Migration day: executing your Upsun cutover`}),_jsx(`p`,{className:`blog-card-desc`,children:`A step-by-step guide to migration day: maintenance windows, cutover sequences, verification, and post-migration monitoring strategies.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/keeping-the-peace-how-zookeeper-stops-database-nodes-from-fighting`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/how-it-works/keeping-the-peace-how-zookeeper-stops-database-nodes-from-fighting/keeping-the-peace-how-zookeeper-stops-database-nodes-from-fighting.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/how-it-works/keeping-the-peace-how-zookeeper-stops-database-nodes-from-fighting/keeping-the-peace-how-zookeeper-stops-database-nodes-from-fighting.webp`,alt:`Keeping the peace: how ZooKeeper stops database nodes from fighting`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, December 9th 2025`})]}),_jsx(Heading,{level:`3`,id:`keeping-the-peace%3A-how-zookeeper-stops-database-nodes-from-fighting`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Keeping the peace: how ZooKeeper stops database nodes from fighting`}),_jsx(`p`,{className:`blog-card-desc`,children:`Learn how Upsun uses Zookeeper’s sequences, watchers, and ephemeral nodes to coordinate MariaDB clusters and workers across distributed systems without breaking your application.`})]})]}),_jsxs(_components.a,{href:`/posts/how-tos/planning-your-upsun-migration-the-6-9-week-roadmap`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/how-tos/planning-your-upsun-migration-the-6-9-week-roadmap/planning-your-upsun-migration-the-6-9-week-roadmap.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/how-tos/planning-your-upsun-migration-the-6-9-week-roadmap/planning-your-upsun-migration-the-6-9-week-roadmap.webp`,alt:`Planning your Upsun migration: the 6-9 week roadmap`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-tos`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-tos`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, December 2nd 2025`})]}),_jsx(Heading,{level:`3`,id:`planning-your-upsun-migration%3A-the-6-9-week-roadmap`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Planning your Upsun migration: the 6-9 week roadmap`}),_jsx(`p`,{className:`blog-card-desc`,children:`Learn why 6-9 weeks is the ideal timeline for Upsun migrations, with expert insights on planning, testing, and avoiding common pitfalls.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/we-switched-from-lvm-to-sparse-files`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/how-it-works/we-switched-from-lvm-to-sparse-files/we-switched-from-lvm-to-sparse-files.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/how-it-works/we-switched-from-lvm-to-sparse-files/we-switched-from-lvm-to-sparse-files.webp`,alt:`We switched from LVM to... sparse files?!`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Friday, November 14th 2025`})]}),_jsx(Heading,{level:`3`,id:`we-switched-from-lvm-to%E2%80%A6-sparse-files%3F`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`We switched from LVM to… sparse files?!`}),_jsx(`p`,{className:`blog-card-desc`,children:`How we eliminated 90% of VM evacuation time by replacing LVM with sparse files for temporary storage. A tale of inertia, performance bottlenecks, and surprisingly effective solutions.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/we-made-our-infrastructure-read-only-and-never-looked-back`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/how-it-works/we-made-our-infrastructure-read-only-and-never-looked-back/we-made-our-infrastructure-read-only-and-never-looked-back.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/how-it-works/we-made-our-infrastructure-read-only-and-never-looked-back/we-made-our-infrastructure-read-only-and-never-looked-back.webp`,alt:`We made our infrastructure read-only and never looked back`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Monday, November 3rd 2025`})]}),_jsx(Heading,{level:`3`,id:`we-made-our-infrastructure-read-only-and-never-looked-back`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`We made our infrastructure read-only and never looked back`}),_jsx(`p`,{className:`blog-card-desc`,children:`Learn why read-only infrastructure eliminates entire classes of security attacks, improves reproducibility, and simplifies compliance while enabling predictable deployments.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/fake-ip-till-you-make-ip`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/how-it-works/fake-ip-till-you-make-ip/fake-ip-till-you-make-ip.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/how-it-works/fake-ip-till-you-make-ip/fake-ip-till-you-make-ip.webp`,alt:`Fake IP till you make IP`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, October 14th 2025`})]}),_jsx(Heading,{level:`3`,id:`fake-ip-till-you-make-ip`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Fake IP till you make IP`}),_jsx(`p`,{className:`blog-card-desc`,children:`How Upsun uses virtual IPs and NAT to keep your database connections stable even when containers move between VMs. A look at the networking tricks behind relationship stability.`})]})]}),_jsxs(_components.a,{href:`/posts/insights/build-time-environment-variables-considered-harmful`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/insights/build-time-environment-variables-considered-harmful/build-time-environment-variables-considered-harmful.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/insights/build-time-environment-variables-considered-harmful/build-time-environment-variables-considered-harmful.webp`,alt:`Build-time environment variables considered harmful`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`insights`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`insights`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Monday, October 6th 2025`})]}),_jsx(Heading,{level:`3`,id:`build-time-environment-variables-considered-harmful`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Build-time environment variables considered harmful`}),_jsx(`p`,{className:`blog-card-desc`,children:`Build-time environment variables break deployment caching, compromise security, and force unnecessary rebuilds. Learn why runtime configuration is the better alternative.`})]})]}),_jsxs(_components.a,{href:`/posts/insights/why-you-should-replace-postgresql-with-git-for-your-next-project`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/insights/why-you-should-replace-postgresql-with-git-for-your-next-project/why-you-should-replace-postgresql-with-git-for-your-next-project.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/insights/why-you-should-replace-postgresql-with-git-for-your-next-project/why-you-should-replace-postgresql-with-git-for-your-next-project.webp`,alt:`Why you should replace PostgreSQL with Git for your next project`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`insights`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`insights`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Friday, September 19th 2025`})]}),_jsx(Heading,{level:`3`,id:`why-you-should-replace-postgresql-with-git-for-your-next-project`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Why you should replace PostgreSQL with Git for your next project`}),_jsx(`p`,{className:`blog-card-desc`,children:`Explore how Git’s internal architecture makes it a surprisingly capable database alternative. Learn Git’s data structures through a practical todo app implementation that might make you reconsider your database choices.`})]})]}),_jsxs(_components.a,{href:`/posts/hands-on/run-tailscale-on-upsun-secure-vpn-connections`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/hands-on/run-tailscale-on-upsun-secure-vpn-connections/run-tailscale-on-upsun-secure-vpn-connections.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/hands-on/run-tailscale-on-upsun-secure-vpn-connections/run-tailscale-on-upsun-secure-vpn-connections.webp`,alt:`Run Tailscale on Upsun: Create secure VPN connections for your applications`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`hands-on`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`hands-on`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, September 16th 2025`})]}),_jsx(Heading,{level:`3`,id:`run-tailscale-on-upsun%3A-create-secure-vpn-connections-for-your-applications`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`Run Tailscale on Upsun: Create secure VPN connections for your applications`}),_jsx(`p`,{className:`blog-card-desc`,children:`Learn how to integrate Tailscale VPN with your Upsun applications to create secure, private network connections between your containers and infrastructure.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/cut-aws-bandwidth-costs-95-with-dm-cache`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/how-it-works/cut-aws-bandwidth-costs-95-with-dm-cache/cut-aws-bandwidth-costs-95-with-dm-cache.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/how-it-works/cut-aws-bandwidth-costs-95-with-dm-cache/cut-aws-bandwidth-costs-95-with-dm-cache.webp`,alt:`How we cut AWS bandwidth costs 95% with dm-cache: fast local SSD caching for network storage`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Tuesday, September 9th 2025`})]}),_jsx(Heading,{level:`3`,id:`how-we-cut-aws-bandwidth-costs-95%25-with-dm-cache%3A-fast-local-ssd-caching-for-network-storage`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`How we cut AWS bandwidth costs 95% with dm-cache: fast local SSD caching for network storage`}),_jsx(`p`,{className:`blog-card-desc`,children:`Learn how Upsun solved costly inter-AZ bandwidth billing by implementing dm-cache with local SSDs, achieving 95% read traffic reduction and 30x performance improvement.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/how-do-we-do-incremental-but-really-full-backups-on-top-of-ceph`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/how-it-works/how-do-we-do-incremental-but-really-full-backups-on-top-of-ceph/ceph-backup-blob-storage.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/how-it-works/how-do-we-do-incremental-but-really-full-backups-on-top-of-ceph/ceph-backup-blob-storage.webp`,alt:`High-performance backups: How Ceph snapshots enable incremental full backups`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Monday, August 25th 2025`})]}),_jsx(Heading,{level:`3`,id:`high-performance-backups%3A-how-ceph-snapshots-enable-incremental-full-backups`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`High-performance backups: How Ceph snapshots enable incremental full backups`}),_jsx(`p`,{className:`blog-card-desc`,children:`Learn how Upsun leverages Ceph’s RBD export-diff feature to implement high-performance incremental backups that maintain full restore capabilities for large-scale container storage.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/how-upsun-built-stateless-mesh-networking-for-high-density-containers`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/how-it-works/how-upsun-built-stateless-mesh-networking-for-high-density-containers/mesh-network.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/how-it-works/how-upsun-built-stateless-mesh-networking-for-high-density-containers/mesh-network.webp`,alt:`How Upsun built stateless mesh networking for high-density containers`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Wednesday, August 6th 2025`})]}),_jsx(Heading,{level:`3`,id:`how-upsun-built-stateless-mesh-networking-for-high-density-containers`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`How Upsun built stateless mesh networking for high-density containers`}),_jsx(`p`,{className:`blog-card-desc`,children:`Discover how Upsun’s innovative stateless mesh networking architecture handles thousands of containers without databases or bottlenecks.`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/debian-repo-s3`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/how-it-works/debian-repo-s3/debian-logo.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/how-it-works/debian-repo-s3/debian-logo.webp`,alt:`How we host a Debian repository on AWS S3`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Wednesday, January 29th 2025`})]}),_jsx(Heading,{level:`3`,id:`how-we-host-a-debian-repository-on-aws-s3`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`How we host a Debian repository on AWS S3`}),_jsx(`p`,{className:`blog-card-desc`,children:`Pretty cool fact about our internal Debian repositories: they’re hosted entirely on AWS S3. Why is that cool? For 2`})]})]}),_jsxs(_components.a,{href:`/posts/how-it-works/how-do-you-manage-ssh-keys-in-your-organization`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/how-it-works/how-do-you-manage-ssh-keys-in-your-organization/how-do-you-manage-ssh-keys-in-your-organization.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/how-it-works/how-do-you-manage-ssh-keys-in-your-organization/how-do-you-manage-ssh-keys-in-your-organization.webp`,alt:`SSH certificates with Platform.sh`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`how-it-works`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`how-it-works`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Wednesday, October 21st 2020`})]}),_jsx(Heading,{level:`3`,id:`ssh-certificates-with-platform-sh`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`SSH certificates with Platform.sh`}),_jsx(`p`,{className:`blog-card-desc`,children:`Learn how Platform.sh simplifies provisioning SSH certificates for secure and keyless SSH authentication, enhancing security and making compliance easier.`})]})]}),_jsxs(_components.a,{href:`/posts/unknown/gitflow-is-now-supported`,className:`blog-card group mint-rounded-xl bg-card border-theme card-hover mint-shadow-sm hover:mint-shadow-md mint-transition-all mint-overflow-hidden mint-flex mint-flex-col`,children:[`/images/posts/devcenter.webp`!==``\u0026\u0026_jsx(`div`,{className:`blog-card-img-wrap`,children:_jsx(`img`,{src:`/images/posts/devcenter.webp`,alt:`GitFlow is now supported on Platform.sh!`,className:`blog-card-img`})}),_jsxs(`div`,{className:`blog-card-body`,children:[_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-2`,children:[`platformsh-blog`!==``\u0026\u0026_jsx(`span`,{className:`text-xs font-semibold uppercase tracking-wider px-2 py-0.5 rounded-md bg-accent-badge border border-accent-soft text-accent`,children:`platformsh-blog`}),_jsx(`span`,{className:`mint-text-xs text-subtle`,children:`Wednesday, August 24th 2016`})]}),_jsx(Heading,{level:`3`,id:`gitflow-is-now-supported-on-platform-sh`,className:`blog-card-title group-hover:text-accent mint-transition-colors`,children:`GitFlow is now supported on Platform.sh!`}),_jsx(`p`,{className:`blog-card-desc`,children:`Learn about our recent infrastructure update with bug fixes and GitFlow branch name support. Enjoy the new features on Platform.sh!`})]})]})]})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{ShowMore,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Florian Margaine","sidebarTitle":"Florian Margaine","description":"Articles written by Florian Margaine.","mode":"wide","type":"post","sidebar":{"exclude":true},"href":"/posts/authors/ralt"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[144,1051,")=>null;function _cr"],[2695,2696,""],[2973,3199,""],[3253,3254,""],[3322,3509,""],[3599,3600,""],[4038,4060,"}),_jsx(_components."],[4349,4599,""],[4653,4654,""],[4722,4911,""],[5001,5002,""],[5486,5508,"}),_jsx(_components."],[5742,5939,""],[5993,5994,""],[6062,6251,""],[6339,6340,""],[6721,6743,"}),_jsx(_components."],[7010,7238,""],[7292,7293,""],[7361,7550,""],[7643,7644,""],[8085,8107,"}),_jsx(_components."],[8357,8564,""],[8618,8619,""],[8687,8884,""],[8975,8976,""],[9359,9381,"}),_jsx(_components."],[9648,9873,""],[9927,9928,""],[9996,10193,""],[10284,10285,""],[10723,10745,"}),_jsx(_components."],[11004,11221,""],[11275,11276,""],[11344,11541,""],[11629,11630,""],[12051,12073,"}),_jsx(_components."],[12327,12544,""],[12598,12599,""],[12667,12864,""],[12952,12953,""],[13361,13383,"}),_jsx(_components."],[13654,13887,""],[13941,13942,""],[14010,14199,""],[14284,14285,""],[14731,14753,"}),_jsx(_components."],[15028,15261,""],[15315,15316,""],[15384,15581,""],[15667,15668,""],[16113,16135,"}),_jsx(_components."],[16388,16599,""],[16653,16654,""],[16722,16919,""],[17005,17006,""],[17414,17436,"}),_jsx(_components."],[17715,17951,""],[18005,18006,""],[18074,18271,""],[18356,18357,""],[18798,18820,"}),_jsx(_components."],[19079,19299,""],[19353,19354,""],[19422,19611,""],[19697,19698,""],[20124,20146,"}),_jsx(_components."],[20424,20660,""],[20714,20715,""],[20783,20980,""],[21066,21067,""],[21592,21614,"}),_jsx(_components."],[21872,22087,""],[22141,22142,""],[22210,22407,""],[22493,22494,""],[22924,22946,"}),_jsx(_components."],[23205,23426,""],[23480,23481,""],[23549,23738,""],[23823,23824,""],[24258,24280,"}),_jsx(_components."],[24558,24795,""],[24849,24850,""],[24918,25115,""],[25201,25202,""],[25655,25677,"}),_jsx(_components."],[25911,26106,""],[26160,26161,""],[26229,26418,""],[26504,26505,""],[26891,26913,"}),_jsx(_components."],[27163,27376,""],[27430,27431,""],[27499,27688,""],[27772,27773,""],[28176,28198,"}),_jsx(_components."],[28461,28873,""],[28927,28928,""],[28996,29193,""],[29280,29281,""],[29682,29704,"}),_jsx(_components."],[29953,30314,""],[30368,30369,""],[30437,30634,""],[30721,30722,""],[31150,31172,"}),_jsx(_components."],[31434,31816,""],[31870,31871,""],[31939,32134,""],[32221,32222,""],[32654,32676,"}),_jsx(_components."],[32904,33165,""],[33219,33220,""],[33288,33485,""],[33572,33573,""],[33957,33979,"}),_jsx(_components."],[34239,34638,""],[34692,34693,""],[34761,34958,""],[35046,35047,""],[35452,35474,"}),_jsx(_components."],[35729,36118,""],[36172,36173,""],[36241,36428,""],[36515,36516,""],[36982,37004,"}),_jsx(_components."],[37260,37641,""],[37695,37696,""],[37764,37961,""],[38053,38054,""],[38504,38526,"}),_jsx(_components."],[38756,39017,""],[39071,39072,""],[39140,39329,""],[39419,39420,""],[39748,39770,"}),_jsx(_components."],[40025,40411,""],[40465,40466,""],[40534,40723,""],[40812,40813,""],[41261,41283,"}),_jsx(_components."],[41540,41928,""],[41982,41983,""],[42051,42248,""],[42338,42339,""],[42745,42767,"}),_jsx(_components."],[43026,43432,""],[43486,43487,""],[43555,43744,""],[43833,43834,""],[44269,44291,"}),_jsx(_components."],[44575,45095,""],[45149,45150,""],[45218,45415,""],[45504,45505,""],[46004,46026,"}),_jsx(_components."],[46274,46625,""],[46679,46680,""],[46748,46937,""],[47025,47026,""],[47471,47493,"}),_jsx(_components."],[47748,48135,""],[48189,48190,""],[48258,48447,""],[48537,48538,""],[48935,48957,"}),_jsx(_components."],[49240,49755,""],[49809,49810,""],[49878,50075,""],[50164,50165,""],[50654,50676,"}),_jsx(_components."],[50938,51363,""],[51417,51418,""],[51486,51673,""],[51762,51763,""],[52178,52200,"}),_jsx(_components."],[52453,52822,""],[52876,52877,""],[52945,53142,""],[53231,53232,""],[53677,53699,"}),_jsx(_components."],[53974,54448,""],[54502,54503,""],[54571,54768,""],[54856,54857,""],[55321,55343,"}),_jsx(_components."],[55584,55888,""],[55942,55943,""],[56011,56208,""],[56297,56298,""],[56698,56720,"}),_jsx(_components."],[56984,57415,""],[57469,57470,""],[57538,57727,""],[57814,57815,""],[58262,58284,"}),_jsx(_components."],[58561,59057,""],[59111,59112,""],[59180,59369,""],[59459,59460,""],[59982,60004,"}),_jsx(_components."],[60262,60693,""],[60747,60748,""],[60816,61005,""],[61096,61097,""],[61579,61601,"}),_jsx(_components."],[61858,62294,""],[62348,62349,""],[62417,62614,""],[62704,62705,""],[63236,63258,"}),_jsx(_components."],[63538,63972,""],[64026,64027,""],[64095,64292,""],[64379,64380,""],[64890,64912,"}),_jsx(_components."],[65198,65613,""],[65667,65668,""],[65736,65933,""],[66022,66023,""],[66472,66494,"}),_jsx(_components."],[66725,67000,""],[67054,67055,""],[67123,67320,""],[67411,67412,""],[67784,67806,"}),_jsx(_components."],[68070,68475,""],[68529,68530,""],[68598,68795,""],[68886,68887,""],[69282,69304,"}),_jsx(_components."],[69540,69754,""],[69808,69809,""],[69877,70080,""],[70170,70171,""],[70556,70557,""]]},"mdxExtracts":{"tableOfContents":[{"title":"Give your BI tool read-only database access on Upsun","slug":"give-your-bi-tool-read-only-database-access-on-upsun","depth":3,"children":[]},{"title":"Upsun has just unlocked the next level of scaling with autoscaling databases","slug":"upsun-has-just-unlocked-the-next-level-of-scaling-with-autoscaling-databases","depth":3,"children":[]},{"title":"So, what to scale next?","slug":"so%2C-what-to-scale-next%3F","depth":3,"children":[]},{"title":"Session storage gets complicated faster than you think","slug":"session-storage-gets-complicated-faster-than-you-think","depth":3,"children":[]},{"title":"Airflow on a locked-down platform","slug":"airflow-on-a-locked-down-platform","depth":3,"children":[]},{"title":"How to host a website that isn’t publicly reachable","slug":"how-to-host-a-website-that-isn%E2%80%99t-publicly-reachable","depth":3,"children":[]},{"title":"Why Let’s Encrypt certificate renewals fail","slug":"why-let%E2%80%99s-encrypt-certificate-renewals-fail","depth":3,"children":[]},{"title":"How SSH authentication works on Upsun Cloud","slug":"how-ssh-authentication-works-on-upsun-cloud","depth":3,"children":[]},{"title":"Which stack would you pick for an interactive AI app today?","slug":"which-stack-would-you-pick-for-an-interactive-ai-app-today%3F","depth":3,"children":[]},{"title":"Backup consistency: why it matters and how Upsun handles it","slug":"backup-consistency%3A-why-it-matters-and-how-upsun-handles-it","depth":3,"children":[]},{"title":"Can you trust the X-Client-IP header?","slug":"can-you-trust-the-x-client-ip-header%3F","depth":3,"children":[]},{"title":"Write a Git server with per-branch permissions in five minutes","slug":"write-a-git-server-with-per-branch-permissions-in-five-minutes","depth":3,"children":[]},{"title":"Why Emacs is still my interface to my computer","slug":"why-emacs-is-still-my-interface-to-my-computer","depth":3,"children":[]},{"title":"Cloning a terabyte in a minute, and the limit hiding behind it","slug":"cloning-a-terabyte-in-a-minute%2C-and-the-limit-hiding-behind-it","depth":3,"children":[]},{"title":"How redundancy and failover work on Upsun","slug":"how-redundancy-and-failover-work-on-upsun","depth":3,"children":[]},{"title":"Code matters less than ever, and more than ever","slug":"code-matters-less-than-ever%2C-and-more-than-ever","depth":3,"children":[]},{"title":"Upsun deployment hooks and commands: which one to use, and when","slug":"upsun-deployment-hooks-and-commands%3A-which-one-to-use%2C-and-when","depth":3,"children":[]},{"title":"DDEV is in good hands","slug":"ddev-is-in-good-hands","depth":3,"children":[]},{"title":"The (not so) hidden cost of AI scrapers","slug":"the-not-so-hidden-cost-of-ai-scrapers","depth":3,"children":[]},{"title":"How Upsun provisions TLS certificates at scale","slug":"how-upsun-provisions-tls-certificates-at-scale","depth":3,"children":[]},{"title":"Why we moved from LVM to Ceph for container storage","slug":"why-we-moved-from-lvm-to-ceph-for-container-storage","depth":3,"children":[]},{"title":"Governance is a contract chain, and you’re in it","slug":"governance-is-a-contract-chain%2C-and-you%E2%80%99re-in-it","depth":3,"children":[]},{"title":"How we host an RPM repository on AWS S3","slug":"how-we-host-an-rpm-repository-on-aws-s3","depth":3,"children":[]},{"title":"Natural scaling for multi-country ecommerce","slug":"natural-scaling-for-multi-country-ecommerce","depth":3,"children":[]},{"title":"Replicate your production outage on staging","slug":"replicate-your-production-outage-on-staging","depth":3,"children":[]},{"title":"Your WAF is buffering. Ours is streaming.","slug":"your-waf-is-buffering-ours-is-streaming","depth":3,"children":[]},{"title":"Scriberr on Upsun","slug":"scriberr-on-upsun","depth":3,"children":[]},{"title":"The only correct way to git pull and merge","slug":"the-only-correct-way-to-git-pull-and-merge","depth":3,"children":[]},{"title":"SPF, DKIM, DMARC, what are those for anyway?","slug":"spf%2C-dkim%2C-dmarc%2C-what-are-those-for-anyway%3F","depth":3,"children":[]},{"title":"The third way to scale that nobody talks about","slug":"the-third-way-to-scale-that-nobody-talks-about","depth":3,"children":[]},{"title":"How we’ve been hardening containers since before Docker made it cool","slug":"how-we%E2%80%99ve-been-hardening-containers-since-before-docker-made-it-cool","depth":3,"children":[]},{"title":"Stop testing JCR apps in production","slug":"stop-testing-jcr-apps-in-production","depth":3,"children":[]},{"title":"Migration day: executing your Upsun cutover","slug":"migration-day%3A-executing-your-upsun-cutover","depth":3,"children":[]},{"title":"Keeping the peace: how ZooKeeper stops database nodes from fighting","slug":"keeping-the-peace%3A-how-zookeeper-stops-database-nodes-from-fighting","depth":3,"children":[]},{"title":"Planning your Upsun migration: the 6-9 week roadmap","slug":"planning-your-upsun-migration%3A-the-6-9-week-roadmap","depth":3,"children":[]},{"title":"We switched from LVM to… sparse files?!","slug":"we-switched-from-lvm-to%E2%80%A6-sparse-files%3F","depth":3,"children":[]},{"title":"We made our infrastructure read-only and never looked back","slug":"we-made-our-infrastructure-read-only-and-never-looked-back","depth":3,"children":[]},{"title":"Fake IP till you make IP","slug":"fake-ip-till-you-make-ip","depth":3,"children":[]},{"title":"Build-time environment variables considered harmful","slug":"build-time-environment-variables-considered-harmful","depth":3,"children":[]},{"title":"Why you should replace PostgreSQL with Git for your next project","slug":"why-you-should-replace-postgresql-with-git-for-your-next-project","depth":3,"children":[]},{"title":"Run Tailscale on Upsun: Create secure VPN connections for your applications","slug":"run-tailscale-on-upsun%3A-create-secure-vpn-connections-for-your-applications","depth":3,"children":[]},{"title":"How we cut AWS bandwidth costs 95% with dm-cache: fast local SSD caching for network storage","slug":"how-we-cut-aws-bandwidth-costs-95%25-with-dm-cache%3A-fast-local-ssd-caching-for-network-storage","depth":3,"children":[]},{"title":"High-performance backups: How Ceph snapshots enable incremental full backups","slug":"high-performance-backups%3A-how-ceph-snapshots-enable-incremental-full-backups","depth":3,"children":[]},{"title":"How Upsun built stateless mesh networking for high-density containers","slug":"how-upsun-built-stateless-mesh-networking-for-high-density-containers","depth":3,"children":[]},{"title":"How we host a Debian repository on AWS S3","slug":"how-we-host-a-debian-repository-on-aws-s3","depth":3,"children":[]},{"title":"SSH certificates with Platform.sh","slug":"ssh-certificates-with-platform-sh","depth":3,"children":[]},{"title":"GitFlow is now supported on Platform.sh!","slug":"gitflow-is-now-supported-on-platform-sh","depth":3,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/upsun-c9761871/426c6190a2163560/sidebar-fix.js","/_mintlify/custom/upsun-c9761871/af4757650ec2f1cc/search-override.js"],"dynamicCss":".mint-mb-8 {\n margin-bottom: 2rem\n}\n.mint-flex {\n display: flex\n}\n.mint-inline-flex {\n display: inline-flex\n}\n.mint-h-16 {\n height: 4rem\n}\n.mint-w-16 {\n width: 4rem\n}\n.mint-flex-col {\n flex-direction: column\n}\n.mint-flex-wrap {\n flex-wrap: wrap\n}\n.mint-items-center {\n align-items: center\n}\n.mint-gap-1\\.5 {\n gap: 0.375rem\n}\n.mint-gap-2 {\n gap: 0.5rem\n}\n.mint-gap-3 {\n gap: 0.75rem\n}\n.mint-gap-4 {\n gap: 1rem\n}\n.mint-overflow-hidden {\n overflow: hidden\n}\n.mint-rounded-full {\n border-radius: 9999px\n}\n.mint-rounded-xl {\n border-radius: 0.75rem\n}\n.mint-border {\n border-width: 1px\n}\n.mint-border-gray-200 {\n --tw-border-opacity: 1;\n border-color: rgb(229 231 235 / var(--tw-border-opacity, 1))\n}\n.mint-px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem\n}\n.mint-py-1\\.5 {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem\n}\n.mint-text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem\n}\n.mint-text-xs {\n font-size: 0.75rem;\n line-height: 1rem\n}\n.mint-text-gray-700 {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity, 1))\n}\n.mint-shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)\n}\n.mint-transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms\n}\n.mint-transition-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms\n}\n.hover\\:mint-shadow-md:hover {\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)\n}\n.dark\\:mint-border-white\\/10:is(.dark *) {\n border-color: rgb(255 255 255 / 0.1)\n}\n.dark\\:mint-text-gray-300:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(209 213 219 / var(--tw-text-opacity, 1))\n}","subdomain":"upsun-c9761871","siteName":"Upsun Developer","title":"Florian Margaine - Upsun Developer","contextualStarterQuestions":[{"_id":"6af2e83be9b01f4076958c40","deploymentId":"696781be74d50424a2a74647","questionText":"What articles has he written?","status":"active","generatedBy":"contextual","path":"posts/authors/ralt","createdAt":"2026-11-10T09:47:39.871Z","updatedAt":"2026-11-10T09:47:39.871Z","__v":0},{"_id":"6af2e83be9b01f4076958c3e","deploymentId":"696781be74d50424a2a74647","questionText":"Who is Florian Margaine?","status":"active","generatedBy":"contextual","path":"posts/authors/ralt","createdAt":"2026-11-10T09:47:39.871Z","updatedAt":"2026-11-10T09:47:39.871Z","__v":0},{"_id":"6af2e83be9b01f4076958c3f","deploymentId":"696781be74d50424a2a74647","questionText":"Where can I find his GitHub?","status":"active","generatedBy":"contextual","path":"posts/authors/ralt","createdAt":"2026-11-10T09:47:39.871Z","updatedAt":"2026-11-10T09:47:39.871Z","__v":0}],"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-10T09:47:20.505Z","gitLastModified":"2026-09-10T09:56:00.000Z","originalFileLocation":"posts/authors/ralt.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Articles written by Florian Margaine.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Upsun Developer\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"index, follow\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Florian Margaine - Upsun Developer\">\u003cmeta data-mint-head property=\"og:description\" content=\"Articles written by Florian Margaine.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Upsun Developer\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developer.upsun.com/posts/authors/ralt\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://upsun-c9761871.mintlify.site/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Florian+Margaine\u0026amp;description=Articles+written+by+Florian+Margaine.\u0026amp;theme=ad7d5daceb907f9230bb2c76\u0026amp;signature=b559ef33d2a8c995d7d89ada1457fe25a99d755d4dcb7863e11e9df4a2ee41de\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Florian Margaine - Upsun Developer\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Articles written by Florian Margaine.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://upsun-c9761871.mintlify.site/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Florian+Margaine\u0026amp;description=Articles+written+by+Florian+Margaine.\u0026amp;theme=ad7d5daceb907f9230bb2c76\u0026amp;signature=b559ef33d2a8c995d7d89ada1457fe25a99d755d4dcb7863e11e9df4a2ee41de\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/upsun-c9761871/rMHAq1HO1s16sbdD/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Upsun Developer\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#6046ff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developer.upsun.com/posts/authors/ralt\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/posts/authors/ralt.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developer.upsun.com/#organization\",\"name\":\"Upsun Developer\",\"url\":\"https://developer.upsun.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/upsun-c9761871/WSCgazBk0GWUPP4l/logo/Upsun-dev-center-light.svg?fit=max\u0026auto=format\u0026n=WSCgazBk0GWUPP4l\u0026q=85\u0026s=c35e42815c3d17de292fb0a86d41aa5f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developer.upsun.com#website\",\"name\":\"Upsun Developer\",\"url\":\"https://developer.upsun.com\",\"publisher\":{\"@id\":\"https://developer.upsun.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developer.upsun.com/posts/authors/ralt#webpage\",\"url\":\"https://developer.upsun.com/posts/authors/ralt\",\"name\":\"Florian Margaine\",\"description\":\"Articles written by Florian Margaine.\",\"dateModified\":\"2026-09-10T09:56:00.000Z\",\"isPartOf\":{\"@id\":\"https://developer.upsun.com#website\"}},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://developer.upsun.com/posts/authors/ralt#article\",\"headline\":\"Florian Margaine\",\"name\":\"Florian Margaine\",\"description\":\"Articles written by Florian Margaine.\",\"url\":\"https://developer.upsun.com/posts/authors/ralt\",\"mainEntityOfPage\":{\"@id\":\"https://developer.upsun.com/posts/authors/ralt#webpage\"},\"dateModified\":\"2026-09-10T09:56:00.000Z\",\"publisher\":{\"@id\":\"https://developer.upsun.com/#organization\"},\"isPartOf\":{\"@id\":\"https://developer.upsun.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Upsun Developer\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Upsun Developer\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/posts/authors/ralt.md","siteName":"Upsun Developer","nav":{"global":{"anchors":[]},"tabs":[{"tab":"Home","icon":"house","pages":[{"mode":"custom","title":"Upsun Developer Center","href":""}]},{"tab":"Dispatch","icon":"https://mintlify.s3.us-west-1.amazonaws.com/upsun-c9761871/images/icons/dispatch.svg","anchors":[{"anchor":"Docs","icon":"book","pages":[{"mode":"custom","title":"Upsun Dispatch","href":"/dispatch"},{"group":"Get Started","icon":"rocket","expanded":false,"pages":[{"title":"Get Started with Upsun Dispatch","sidebarTitle":"Get Started","href":"/dispatch/docs/get-started/index"},{"title":"Quickstart","href":"/dispatch/docs/get-started/quickstart"},{"title":"Free and paid usage","href":"/dispatch/docs/get-started/free-and-paid-usage"},{"title":"Get support","href":"/dispatch/docs/get-started/support"}]},{"group":"Integrations","icon":"link","expanded":false,"pages":[{"title":"Integration overview","sidebarTitle":"Integration overview","href":"/dispatch/docs/integrations/index"},{"group":"VCS integrations","expanded":true,"pages":[{"title":"Set up GitHub","sidebarTitle":"GitHub","href":"/dispatch/docs/integrations/github"},{"title":"Set up GitLab","sidebarTitle":"GitLab","href":"/dispatch/docs/integrations/gitlab"}]},{"group":"Ticketing integrations","expanded":true,"pages":[{"title":"Set up Jira","sidebarTitle":"Jira","href":"/dispatch/docs/integrations/jira"},{"title":"Set up Linear","sidebarTitle":"Linear","href":"/dispatch/docs/integrations/linear"}]},{"group":"Notification integrations","expanded":true,"pages":[{"title":"Set up Slack","sidebarTitle":"Slack","href":"/dispatch/docs/integrations/slack"}]}]},{"group":"Workflows","icon":"workflow","expanded":false,"pages":[{"title":"Workflows in Upsun Dispatch","sidebarTitle":"Concept","href":"/dispatch/docs/workflows/index"},{"group":"Built-in workflows","root":{"title":"Built-in workflows","sidebarTitle":"Built-in workflows","href":"/dispatch/docs/workflows/builtin"},"expanded":true,"pages":[{"title":"Code review","sidebarTitle":"Code review","href":"/dispatch/docs/workflows/code-review"},{"title":"Issue to code","sidebarTitle":"Issue to code","href":"/dispatch/docs/workflows/issue-to-code"},{"title":"CVE scan","sidebarTitle":"CVE scan","href":"/dispatch/docs/workflows/cve-scan"}]}]},{"group":"Manage","icon":"layout-grid","expanded":false,"pages":[{"title":"Use the Upsun Dispatch console","href":"/dispatch/docs/dashboard/index"}]}]}]},{"tab":"Cloud","icon":"https://mintlify.s3.us-west-1.amazonaws.com/upsun-c9761871/images/icons/cloud.svg","anchors":[{"anchor":"Docs","icon":"book","pages":[{"mode":"custom","title":"Upsun Cloud","href":"/cloud"},{"group":"Get Started","icon":"rocket","expanded":false,"pages":[{"title":"Get Started with Upsun Cloud","sidebarTitle":"Quickstart","href":"/docs/get-started/index"},{"group":"Setup Guide","root":{"title":"Getting started with Upsun Cloud","sidebarTitle":"Introduction","href":"/docs/get-started/here/index"},"pages":[{"title":"Setup","href":"/docs/get-started/here/setup"},{"title":"Create a project","href":"/docs/get-started/here/create-project"},{"group":"Configure your project","root":{"title":"Configure your project","href":"/docs/get-started/here/configure/index"},"pages":[{"title":"JavaScript/Node.js","href":"/docs/get-started/here/configure/nodejs"},{"title":"PHP","href":"/docs/get-started/here/configure/php"},{"title":"Python","href":"/docs/get-started/here/configure/python"}]},{"title":"Set resources","href":"/docs/get-started/here/set-resources"},{"title":"Make changes to your project","sidebarTitle":"Revisions","href":"/docs/get-started/here/make-changes"},{"group":"Local development","root":{"title":"Local development","href":"/docs/get-started/here/local/index"},"pages":[{"title":"Tethered","href":"/docs/get-started/here/local/tethered"}]},{"title":"Third party integrations","href":"/docs/get-started/here/third-party"},{"title":"Get support","href":"/docs/get-started/here/support"}]},{"group":"Pick a Stack","root":{"title":"How to deploy","sidebarTitle":"Overview","href":"/docs/get-started/stacks/index"},"pages":[{"group":"PHP","root":{"title":"Deploy PHP apps on Upsun Cloud","sidebarTitle":"Overview","href":"/docs/get-started/stacks/php"},"pages":[{"group":"Laravel","root":{"title":"Deploy Laravel on Upsun Cloud","sidebarTitle":"Laravel","href":"/docs/get-started/stacks/laravel/index"},"pages":[{"title":"Get started","sidebarTitle":"Get started","href":"/docs/get-started/stacks/laravel/get-started"},{"title":"Configure environment variables","sidebarTitle":"Environment variables","href":"/docs/get-started/stacks/laravel/environment-variables"},{"title":"Set up cron jobs","sidebarTitle":"Cron jobs","href":"/docs/get-started/stacks/laravel/crons"},{"title":"Set up Redis","sidebarTitle":"Set up Redis","href":"/docs/get-started/stacks/laravel/setup-redis"},{"title":"Manage continuous observability with Upsun Blackfire","sidebarTitle":"Upsun Blackfire","href":"/docs/get-started/stacks/laravel/blackfire"},{"title":"Handle queues with Horizon","sidebarTitle":"Handle queues with Horizon","href":"/docs/get-started/stacks/laravel/laravel-horizon"},{"title":"Debug with Laravel Telescope","sidebarTitle":"Debug with Laravel Telescope","href":"/docs/get-started/stacks/laravel/laravel-telescope"},{"title":"FAQ","sidebarTitle":"FAQ","href":"/docs/get-started/stacks/laravel/faq"}]},{"group":"Symfony","root":{"title":"Deploy Symfony on Upsun Cloud","sidebarTitle":"Symfony","href":"/docs/get-started/stacks/symfony/index"},"pages":[{"title":"Get started","sidebarTitle":"Get started","href":"/docs/get-started/stacks/symfony/get-started"},{"title":"Configure environment variables","href":"/docs/get-started/stacks/symfony/environment-variables"},{"title":"Set up cron jobs","sidebarTitle":"Cron jobs","href":"/docs/get-started/stacks/symfony/crons"},{"title":"Configure workers","sidebarTitle":"Workers","href":"/docs/get-started/stacks/symfony/workers"},{"title":"Manage continuous observability with Upsun Blackfire","sidebarTitle":"Upsun Blackfire","href":"/docs/get-started/stacks/symfony/blackfire"},{"title":"Symfony integration","sidebarTitle":"Symfony integration","href":"/docs/get-started/stacks/symfony/integration"},{"title":"Local development","sidebarTitle":"Local development","href":"/docs/get-started/stacks/symfony/local"},{"title":"Symfony CLI Tips","sidebarTitle":"Symfony CLI Tips","href":"/docs/get-started/stacks/symfony/symfony-cli-tips"},{"title":"FAQ","sidebarTitle":"FAQ","href":"/docs/get-started/stacks/symfony/faq"}]}]},{"group":"JavaScript","root":{"title":"Deploy JavaScript apps on Upsun Cloud","sidebarTitle":"Overview","href":"/docs/get-started/stacks/javascript"},"pages":[{"title":"Deploy Next.js on Upsun Cloud","sidebarTitle":"Next.js","href":"/docs/get-started/stacks/nextjs"},{"group":"Express","root":{"title":"Deploy Express on Upsun Cloud","sidebarTitle":"Express","href":"/docs/get-started/stacks/express/index"},"pages":[{"title":"Add a database to Express","href":"/docs/get-started/stacks/express/add-database"}]},{"group":"Strapi","root":{"title":"Deploy Strapi on Upsun Cloud","sidebarTitle":"Strapi","href":"/docs/get-started/stacks/strapi/index"},"pages":[{"title":"Add a database to Strapi","sidebarTitle":"Add a database to Strapi","href":"/docs/get-started/stacks/strapi/add-database"}]}]},{"group":"Python","root":{"title":"Deploy Python apps on Upsun Cloud","sidebarTitle":"Overview","href":"/docs/get-started/stacks/python"},"pages":[{"title":"Deploy Django on Upsun Cloud","sidebarTitle":"Django","href":"/docs/get-started/stacks/django"},{"title":"Deploy Flask on Upsun Cloud","sidebarTitle":"Flask","href":"/docs/get-started/stacks/flask"}]},{"group":"AI","root":{"title":"How to deploy AI","href":"/docs/get-started/ai/index"},"pages":[{"title":"Host AI Agents","sidebarTitle":"AI Agents","href":"/docs/get-started/ai/aiagent"},{"title":"Hosting Model Context Protocol (MCP) Servers","sidebarTitle":"Deploy MCP","href":"/docs/get-started/ai/deploy-mcp"},{"title":"The Upsun MCP Server","href":"/docs/get-started/ai/using-the-mcp"},{"title":"Upsun Cloud performance agent","href":"/docs/get-started/ai/upsun-cloud-performance-agent"},{"title":"Upsun Cloud log-analyzer agent","href":"/docs/get-started/ai/upsun-cloud-log-analyzer-agent"}]}]}]},{"group":"Core Concepts","icon":"layers","expanded":false,"pages":[{"group":"How Upsun Cloud Works","root":{"title":"What is Upsun Cloud?","sidebarTitle":"What is Upsun Cloud?","href":"/docs/core-concepts/index"},"pages":[{"title":"Philosophy","href":"/docs/core-concepts/philosophy"}]},{"group":"Workflow Overview","root":{"title":"Workflow Overview","href":"/docs/core-concepts/workflow"},"pages":[{"group":"YAML","root":{"title":"YAML","href":"/docs/core-concepts/yaml/index"},"pages":[{"title":"What YAML is","href":"/docs/core-concepts/yaml/what-is-yaml"},{"title":"Upsun Cloud YAML structure","href":"/docs/core-concepts/yaml/yaml-structure"},{"title":"Upsun Cloud YAML tags","href":"/docs/core-concepts/yaml/platform-yaml-tags"}]},{"title":"Structure","href":"/docs/core-concepts/structure"},{"title":"Get support","href":"/docs/core-concepts/get-support"}]},{"group":"Using Upsun Cloud Effectively","root":{"title":"Using Upsun Cloud Effectively","sidebarTitle":"Best practices","href":"/docs/core-concepts/best-practices/index"},"pages":[{"title":"HTTP caching","href":"/docs/core-concepts/best-practices/http-caching"},{"title":"From monoliths through headless to microservices","sidebarTitle":"Monolith, headless or microservices?","href":"/docs/core-concepts/best-practices/oneormany"},{"title":"Keep your Git repository clean","sidebarTitle":"Clean repository","href":"/docs/core-concepts/best-practices/clean-repository"}]},{"group":"Common Tasks","root":{"title":"Common Tasks","sidebarTitle":"Common Tasks","href":"/docs/core-concepts/common-tasks/index"},"pages":[{"title":"Automate your code updates","sidebarTitle":"Automate your code updates","href":"/docs/core-concepts/common-tasks/dependency-updates"},{"title":"Restrict access to a service","sidebarTitle":"Restrict service access","href":"/docs/core-concepts/common-tasks/restrict-service-access"},{"title":"Exporting data","sidebarTitle":"Exporting data","href":"/docs/core-concepts/common-tasks/exporting"},{"title":"Upgrade to a maintained version of a runtime or service","sidebarTitle":"Upgrade runtimes and services","href":"/docs/core-concepts/upgrade-runtimes-services"}]}]},{"group":"Configure Apps \u0026 Services","icon":"settings","expanded":false,"pages":[{"group":"Configure apps","root":{"title":"Configure apps","sidebarTitle":"Overview","href":"/docs/configure-apps/index"},"pages":[{"group":"Image types","root":{"title":"Choose an image type","href":"/docs/configure-apps/app-reference/index"},"pages":[{"title":"Single-runtime image","href":"/docs/configure-apps/app-reference/single-runtime-image"},{"title":"Composable image","href":"/docs/configure-apps/app-reference/composable-image"}]},{"group":"Image properties","root":{"title":"Image properties","sidebarTitle":"Overview","href":"/docs/configure-apps/image-properties/index"},"pages":[{"title":"Access","href":"/docs/configure-apps/image-properties/access"},{"title":"Additional hosts","href":"/docs/configure-apps/image-properties/additional_hosts"},{"title":"Workload authorizations","sidebarTitle":"Authorizations","href":"/docs/configure-apps/image-properties/authorizations"},{"title":"Container profile","href":"/docs/configure-apps/image-properties/container_profile"},{"title":"Crons","href":"/docs/configure-apps/image-properties/crons"},{"title":"Hooks","href":"/docs/configure-apps/image-properties/hooks"},{"title":"Mounts","href":"/docs/configure-apps/image-properties/mounts"},{"title":"Relationships","href":"/docs/configure-apps/image-properties/relationships"},{"title":"Source","href":"/docs/configure-apps/image-properties/source"},{"title":"Variables","href":"/docs/configure-apps/image-properties/variables"},{"title":"Web","href":"/docs/configure-apps/image-properties/web"},{"title":"Workers","href":"/docs/configure-apps/image-properties/workers"}]},{"group":"Advanced","pages":[{"title":"Source operations","href":"/docs/configure-apps/source-operations"},{"title":"Runtime operations","href":"/docs/configure-apps/runtime-operations"},{"group":"Configure what's served","root":{"title":"Configure what's served","sidebarTitle":"Overview","href":"/docs/configure-apps/web/index"},"pages":[{"title":"Create a basic PHP app with a front controller","sidebarTitle":"PHP with front controller","href":"/docs/configure-apps/web/php-basic"},{"title":"Rewrite requests without redirects","sidebarTitle":"Rewrite requests","href":"/docs/configure-apps/web/rewrite-requests"},{"title":"Serve directories at different paths","sidebarTitle":"Serve different paths","href":"/docs/configure-apps/web/serve-different-directories"},{"title":"Serve static sites","sidebarTitle":"Static sites","href":"/docs/configure-apps/web/static"},{"title":"Set custom headers on static content","sidebarTitle":"Custom headers","href":"/docs/configure-apps/web/custom-headers"}]},{"group":"Multiple apps","root":{"title":"Set up multiple apps in a single project","sidebarTitle":"Overview","href":"/docs/configure-apps/multi-app/index"},"pages":[{"title":"Choose a project structure","href":"/docs/configure-apps/multi-app/project-structure"},{"title":"Define routes for your multiple apps","sidebarTitle":"Define routes","href":"/docs/configure-apps/multi-app/routes"},{"title":"Define relationships between your multiple apps","sidebarTitle":"Define relationships","href":"/docs/configure-apps/multi-app/relationships"}]},{"title":"Timezones","sidebarTitle":"Timezones","href":"/docs/configure-apps/timezone"},{"group":"Use build and deploy hooks","root":{"title":"Use build and deploy hooks","sidebarTitle":"Overview","href":"/docs/configure-apps/hooks/index"},"pages":[{"title":"Change hooks in different environments","href":"/docs/configure-apps/hooks/vary-hooks-by-environment"},{"title":"Comparison of hooks","href":"/docs/configure-apps/hooks/hooks-comparison"},{"title":"Use hooks with dependencies","href":"/docs/configure-apps/hooks/hooks-and-dependencies"}]},{"title":"Work with workers","sidebarTitle":"Work with workers","href":"/docs/configure-apps/workers"},{"title":"Configure tasks to run on-demand workloads and AI agents","sidebarTitle":"Task containers","href":"/docs/configure-apps/tasks"}]}]},{"group":"Languages","root":{"title":"Languages","sidebarTitle":"Overview","href":"/docs/languages/index"},"pages":[{"title":"C#/.NET Core","href":"/docs/languages/dotnet"},{"title":"Elixir","href":"/docs/languages/elixir"},{"title":"Go","href":"/docs/languages/go"},{"group":"Java","root":{"title":"Java","sidebarTitle":"Overview","href":"/docs/languages/java/index"},"pages":[{"title":"Moving a Java application to Upsun Cloud","sidebarTitle":"Moving to Upsun Cloud","href":"/docs/languages/java/migration"},{"title":"Performance tuning Java","sidebarTitle":"Tuning","href":"/docs/languages/java/tuning"}]},{"group":"JavaScript/Node.js","root":{"title":"JavaScript/Node.js","sidebarTitle":"Overview","href":"/docs/languages/nodejs/index"},"pages":[{"title":"Debugging","href":"/docs/languages/nodejs/debug"},{"title":"Manage Node.js versions","href":"/docs/languages/nodejs/node-version"}]},{"group":"PHP","root":{"title":"PHP","sidebarTitle":"Overview","href":"/docs/languages/php/index"},"pages":[{"title":"Extensions","href":"/docs/languages/php/extensions"},{"title":"PHP performance tuning","href":"/docs/languages/php/tuning"},{"title":"PHP-FPM sizing","href":"/docs/languages/php/fpm"},{"title":"FrankenPHP","sidebarTitle":"FrankenPHP","href":"/docs/languages/php/frankenphp"},{"title":"Using Xdebug","sidebarTitle":"Xdebug","href":"/docs/languages/php/xdebug"},{"title":"Custom Redis versions","sidebarTitle":"Custom Redis","href":"/docs/languages/php/redis"},{"title":"Swoole","sidebarTitle":"Swoole","href":"/docs/languages/php/swoole"},{"title":"Authenticated Composer repositories","sidebarTitle":"Authenticated Composer","href":"/docs/languages/php/composer-auth"},{"title":"Troubleshoot PHP","sidebarTitle":"Troubleshoot","href":"/docs/languages/php/troubleshoot"}]},{"group":"Python","root":{"title":"Python","sidebarTitle":"Overview","href":"/docs/languages/python/index"},"pages":[{"title":"Manage Python dependencies","sidebarTitle":"Manage dependencies","href":"/docs/languages/python/dependencies"},{"title":"Web servers","href":"/docs/languages/python/server"},{"title":"Manage Python versions in non-Python containers","sidebarTitle":"Python in non-Python containers","href":"/docs/languages/python/python-version"}]},{"title":"Ruby","href":"/docs/languages/ruby"},{"title":"Rust","href":"/docs/languages/rust"}]},{"group":"Services","root":{"title":"Add services","href":"/docs/add-services/index"},"pages":[{"title":"ClickHouse","href":"/docs/add-services/clickhouse"},{"title":"Elasticsearch and Enterprise Search (search service)","sidebarTitle":"Elasticsearch and Enterprise Search","href":"/docs/add-services/elasticsearch"},{"title":"Gotenberg","href":"/docs/add-services/gotenberg"},{"title":"Headless Chrome","href":"/docs/add-services/headless-chrome"},{"title":"InfluxDB (Database service)","sidebarTitle":"InfluxDB","href":"/docs/add-services/influxdb"},{"title":"Kafka (Message queue service)","sidebarTitle":"Kafka","href":"/docs/add-services/kafka"},{"title":"Memcached (Object cache)","sidebarTitle":"Memcached","href":"/docs/add-services/memcached"},{"title":"Mercure","sidebarTitle":"Mercure","href":"/docs/add-services/mercure"},{"title":"MongoDB (Database service)","sidebarTitle":"MongoDB","href":"/docs/add-services/mongodb"},{"group":"MariaDB/MySQL","root":{"title":"MariaDB/MySQL (database service)","sidebarTitle":"Overview","href":"/docs/add-services/mysql/index"},"pages":[{"title":"MariaDB read-only replication","sidebarTitle":"MariaDB read-only replication","href":"/docs/add-services/mysql/mysql-readonly-replication"},{"title":"MariaDB/MySQL external replication","sidebarTitle":"External replication","href":"/docs/add-services/mysql/mysql-replication"},{"title":"Troubleshoot MySQL","sidebarTitle":"Troubleshoot","href":"/docs/add-services/mysql/troubleshoot"}]},{"title":"Network Storage","href":"/docs/add-services/network-storage"},{"title":"OpenSearch (search service)","sidebarTitle":"OpenSearch","href":"/docs/add-services/opensearch"},{"group":"PostgreSQL","root":{"title":"PostgreSQL (Database service)","sidebarTitle":"Overview","href":"/docs/add-services/postgresql/index"},"pages":[{"title":"PostgreSQL read-only replication","sidebarTitle":"Read-only replication","href":"/docs/add-services/postgresql/postgresql-readonly-replication"}]},{"title":"RabbitMQ (message queue service)","sidebarTitle":"RabbitMQ","href":"/docs/add-services/rabbitmq"},{"title":"Redis (Object cache)","sidebarTitle":"Redis","href":"/docs/add-services/redis"},{"title":"Solr (Search service)","sidebarTitle":"Solr","href":"/docs/add-services/solr"},{"title":"Valkey","sidebarTitle":"Valkey","href":"/docs/add-services/valkey"},{"title":"Varnish","href":"/docs/add-services/varnish"},{"title":"Vault key management service","sidebarTitle":"Vault KMS","href":"/docs/add-services/vault"},{"group":"Self-hosted services","root":{"title":"Self-hosted services","sidebarTitle":"Self-hosted services","href":"/docs/add-services/self-hosted"},"pages":[{"group":"Public Docker images","root":{"title":"Self-hosted services from public Docker images","sidebarTitle":"Public Docker images","href":"/docs/add-services/docker-images/index"},"pages":[{"title":"Meilisearch","sidebarTitle":"Meilisearch","href":"/docs/add-services/docker-images/docker-meilisearch"},{"title":"n8n","sidebarTitle":"n8n","href":"/docs/add-services/docker-images/docker-n8n"}]}]}]},{"group":"Routes","root":{"title":"Define routes","sidebarTitle":"Overview","href":"/docs/routes/index"},"pages":[{"title":"Server Side Includes (SSI)","href":"/docs/routes/ssi"},{"title":"HTTP cache","href":"/docs/routes/cache"},{"title":"HTTPS","sidebarTitle":"HTTPS","href":"/docs/routes/https"},{"title":"Proxy routes","href":"/docs/routes/proxy"},{"title":"Redirects","href":"/docs/routes/redirects"}]}]},{"group":"Build, Deploy \u0026 Run","icon":"server","expanded":false,"pages":[{"title":"Build and deploy","href":"/docs/core-concepts/build-deploy"},{"group":"Local development","root":{"title":"Set up your local development environment","sidebarTitle":"Overview","href":"/docs/development/local/index"},"pages":[{"group":"Integrated environments","pages":[{"title":"Use DDEV for local development","sidebarTitle":"DDEV","href":"/docs/development/local/ddev"}]},{"group":"Supported environments","pages":[{"title":"Tethered local development","sidebarTitle":"Tethered","href":"/docs/development/local/tethered"},{"title":"Untethered local development","sidebarTitle":"Untethered","href":"/docs/development/local/untethered"}]}]},{"group":"Variables","root":{"title":"Variables overview","sidebarTitle":"Overview","href":"/docs/development/variables/index"},"pages":[{"title":"Set variables","href":"/docs/development/variables/set-variables"},{"title":"Use variables","href":"/docs/development/variables/use-variables"}]},{"group":"Development tools","root":{"title":"Development tools","href":"/docs/development/tools"},"pages":[{"title":"Access your site","href":"/docs/development/access-site"},{"title":"Transfer files to and from your app","sidebarTitle":"Transfer files","href":"/docs/development/file-transfer"},{"title":"HTTP Headers","sidebarTitle":"Headers","href":"/docs/development/headers"},{"title":"Send email from your Upsun Cloud environment using an SMTP proxy","sidebarTitle":"Email","href":"/docs/development/email"},{"title":"Pull code from a private Git repository","sidebarTitle":"Private repositories","href":"/docs/development/private-repository"},{"title":"Use Git submodules","sidebarTitle":"Git submodules","href":"/docs/development/submodules"},{"title":"Regions","href":"/docs/development/regions"},{"title":"Use Drush with Upsun Cloud","sidebarTitle":"Drush","href":"/docs/development/drush"}]},{"group":"SSH","root":{"title":"Connect securely with SSH","sidebarTitle":"Overview","href":"/docs/development/ssh/index"},"pages":[{"title":"Authenticate with SSH keys","sidebarTitle":"SSH keys","href":"/docs/development/ssh/ssh-keys"},{"title":"Troubleshoot SSH","href":"/docs/development/ssh/troubleshoot-ssh"}]},{"group":"Database management","root":{"title":"Sanitize databases","sidebarTitle":"Overview","href":"/docs/development/sanitize-db/index"},"pages":[{"title":"Sanitizing databases: MariaDB and Drupal","sidebarTitle":"MariaDB and Drupal","href":"/docs/development/sanitize-db/mariadb"},{"title":"Sanitizing databases: PostgreSQL and Django","sidebarTitle":"PostgreSQL and Django","href":"/docs/development/sanitize-db/postgresql"},{"title":"Sanitizing databases: PostgreSQL and Symfony","sidebarTitle":"PostgreSQL and Symfony","href":"/docs/development/sanitize-db/postgresql-symfony"}]}]},{"group":"Manage Projects","icon":"layout-grid","expanded":false,"pages":[{"title":"Manage projects","sidebarTitle":"Overview","href":"/docs/projects/index"},{"group":"Project settings","root":{"title":"Project settings","href":"/docs/projects/settings"},"pages":[{"title":"Change a project's region","sidebarTitle":"Change regions","href":"/docs/projects/region-migration"},{"title":"Change the project timezone","href":"/docs/projects/change-project-timezone"},{"title":"Delete a project","sidebarTitle":"Delete a project","href":"/docs/projects/delete-project"}]},{"group":"Custom domains","root":{"title":"Custom domains","sidebarTitle":"Overview","href":"/docs/domains/index"},"pages":[{"group":"Set up a custom domain","root":{"title":"Set up a custom domain","sidebarTitle":"Set up a custom domain","href":"/docs/domains/steps/index"},"pages":[{"title":"DNS management and apex domains","sidebarTitle":"DNS and apex domains","href":"/docs/domains/steps/dns"},{"title":"Configure a third-party TLS certificate","sidebarTitle":"Custom TLS certificates","href":"/docs/domains/steps/tls"},{"title":"Share subdomains across different projects","sidebarTitle":"Subdomains across projects","href":"/docs/domains/steps/subdomains"},{"title":"DNS challenge for domain ownership","sidebarTitle":"DNS challenge","href":"/docs/domains/steps/dns-challenge"},{"title":"Set up a custom domain on a preview environment","sidebarTitle":"Preview environment domains","href":"/docs/domains/steps/custom-domains-preview-environments"},{"title":"Troubleshoot domain issues","sidebarTitle":"Troubleshoot","href":"/docs/domains/troubleshoot"}]},{"group":"CDN","root":{"title":"Content delivery networks (CDNs)","sidebarTitle":"Overview","href":"/docs/domains/cdn/index"},"pages":[{"title":"Set up your Fastly CDN","sidebarTitle":"Fastly setup","href":"/docs/domains/cdn/fastly"},{"title":"Managed Fastly CDN","sidebarTitle":"Managed Fastly CDN","href":"/docs/domains/cdn/managed-fastly"},{"title":"Set up your Cloudflare CDN","sidebarTitle":"Cloudflare setup","href":"/docs/domains/cdn/cloudflare"}]}]},{"group":"Administration","root":{"title":"Administration","href":"/docs/administration/index"},"pages":[{"group":"Console","root":{"title":"Console","sidebarTitle":"Overview","href":"/docs/administration/web/index"},"pages":[{"title":"Configure a project","href":"/docs/administration/web/configure-project"},{"title":"Configure environments","sidebarTitle":"Configure environments","href":"/docs/administration/web/configure-environment"}]},{"title":"Organizations","href":"/docs/administration/organizations"},{"title":"Administer teams","sidebarTitle":"Teams","href":"/docs/administration/teams"},{"title":"Administer users","sidebarTitle":"Users","href":"/docs/administration/users"},{"title":"Pricing","href":"/docs/administration/pricing"},{"group":"Billing","root":{"title":"Billing","href":"/docs/administration/billing/index"},"pages":[{"title":"Set up a billing account and billing profile","href":"/docs/administration/billing/bp-setup"},{"title":"Add and manage payment methods","href":"/docs/administration/billing/bp-payment-method"},{"title":"View invoices","href":"/docs/administration/billing/bp-invoices"},{"title":"Monitor spending and usage","href":"/docs/administration/billing/bp-monitor-billing"},{"title":"Manage billing members on a billing profile","href":"/docs/administration/billing/bp-users"},{"title":"Edit a billing profile","href":"/docs/administration/billing/bp-edit-billing-profile"},{"title":"View discounts and commitments","href":"/docs/administration/billing/bp-discounts"},{"title":"View vouchers","href":"/docs/administration/billing/bp-vouchers"},{"title":"Transfer an organization to a different billing profile","href":"/docs/administration/billing/bp-transfers"},{"title":"Billing FAQ","href":"/docs/administration/billing/bp-faq"}]},{"title":"Server upgrades","href":"/docs/administration/servers"},{"group":"Security","root":{"title":"Security","sidebarTitle":"Overview","href":"/docs/administration/security/index"},"pages":[{"title":"Multifactor Authentication (MFA)","sidebarTitle":"Multifactor Authentication (MFA)","href":"/docs/administration/security/mfa"},{"title":"Single Sign-On (SSO)","sidebarTitle":"Single Sign-On (SSO)","href":"/docs/administration/security/sso"}]}]},{"group":"Security \u0026 compliance","root":{"title":"Security and compliance","sidebarTitle":"Overview","href":"/docs/security/index"},"pages":[{"title":"Fastly WAF","href":"/docs/security/fastly-waf"},{"title":"Upsun WAF","sidebarTitle":"Upsun WAF","href":"/docs/security/waf"},{"title":"Data retention","href":"/docs/security/data-retention"},{"title":"Project isolation","href":"/docs/security/project-isolation"}]}]},{"group":"Manage Environments","icon":"git-branch","expanded":false,"pages":[{"title":"Manage Upsun Cloud environments","sidebarTitle":"Overview","href":"/docs/environments/index"},{"group":"Backup \u0026 restore","root":{"title":"Backup \u0026 restore","href":"/docs/environments/backup-restore"},"pages":[{"title":"Back up an environment","sidebarTitle":"Back up an environment","href":"/docs/environments/backup"},{"title":"Restore an environment from a backup","sidebarTitle":"Restore an environment","href":"/docs/environments/restore"}]},{"group":"Environment settings","root":{"title":"Environment settings","href":"/docs/environments/settings"},"pages":[{"title":"Change an environment's parent","sidebarTitle":"Change parent","href":"/docs/environments/change-parent"},{"title":"Rename the default environment","sidebarTitle":"Rename the default environment","href":"/docs/environments/default-environment"},{"title":"Configure HTTP access control","sidebarTitle":"Configure HTTP access control","href":"/docs/environments/http-access-control"},{"title":"Manage search indexing for an environment","sidebarTitle":"Manage search indexing","href":"/docs/environments/search-engine-visibility"}]},{"group":"Environment actions","root":{"title":"Environment actions","href":"/docs/environments/actions"},"pages":[{"title":"Cancel an activity","href":"/docs/environments/cancel-activity"},{"title":"Deactivate an environment","sidebarTitle":"Deactivate an environment","href":"/docs/environments/deactivate-environment"}]}]},{"group":"Manage Resources","icon":"gauge","expanded":false,"pages":[{"title":"Manage resources","sidebarTitle":"Overview","href":"/docs/manage-resources/index"},{"title":"How resources work on Upsun Cloud","sidebarTitle":"How resources work","href":"/docs/manage-resources/how-resources-work"},{"group":"Configure resources","root":{"title":"Configure resources","href":"/docs/manage-resources/configure"},"pages":[{"title":"Resource initialization","sidebarTitle":"Resource initialization","href":"/docs/manage-resources/resource-init"},{"title":"Resource configuration","sidebarTitle":"Resource configuration","href":"/docs/manage-resources/adjust-resources"},{"title":"Project build resources","sidebarTitle":"Project build resources","href":"/docs/manage-resources/build-resources"}]},{"group":"Scaling","root":{"title":"Scaling","href":"/docs/manage-resources/scaling"},"pages":[{"title":"Autoscaling","sidebarTitle":"Autoscaling","href":"/docs/manage-resources/autoscaling"},{"title":"Guaranteed resources","sidebarTitle":"Guaranteed resources","href":"/docs/manage-resources/guaranteed-resources"}]},{"title":"Object storage","sidebarTitle":"Object storage","href":"/docs/manage-resources/object-storage"}]},{"group":"Observability \u0026 Metrics","icon":"activity","expanded":false,"pages":[{"title":"Increase observability","sidebarTitle":"Overview","href":"/docs/observability/index"},{"group":"Infrastructure metrics","root":{"title":"Infrastructure metrics","sidebarTitle":"Overview","href":"/docs/observability/metrics/index"},"pages":[{"title":"HTTP metrics","sidebarTitle":"HTTP metrics","href":"/docs/observability/metrics/http-metrics"},{"title":"Understand metrics","sidebarTitle":"Understand metrics","href":"/docs/observability/metrics/understand-metrics"}]},{"group":"Application metrics","root":{"title":"Application metrics","sidebarTitle":"Overview","href":"/docs/observability/application-metrics/index"},"pages":[{"title":"Monitor Cron job executions","sidebarTitle":"Monitor Cron job executions","href":"/docs/observability/application-metrics/cron-metrics"},{"title":"Understanding application observability","sidebarTitle":"Understanding application observability","href":"/docs/observability/application-metrics/understanding"},{"title":"Upsun Blackfire for PHP and Python","sidebarTitle":"Upsun Blackfire for PHP and Python","href":"/docs/observability/application-metrics/blackfire"},{"group":"Continuous profiling","pages":[{"title":"Continuous Profiling dashboard","sidebarTitle":"Dashboard","href":"/docs/observability/application-metrics/cont-prof"},{"title":"Comparing Continuous Profiling Timeframes","sidebarTitle":"Comparing Timeframes","href":"/docs/observability/application-metrics/cont-prof-comparison"},{"title":"Continuous profiling for Go","sidebarTitle":"Go continuous profiler","href":"/docs/observability/application-metrics/go"},{"title":"Continuous profiling for Java","sidebarTitle":"Java continuous profiler","href":"/docs/observability/application-metrics/java"},{"title":"Continuous profiling for Node.js","sidebarTitle":"Node.js continuous profiler","href":"/docs/observability/application-metrics/nodejs"},{"title":"Continuous profiling for PHP","sidebarTitle":"PHP continuous profiler","href":"/docs/observability/application-metrics/php"},{"title":"Continuous profiling for Python","sidebarTitle":"Python continuous profiler","href":"/docs/observability/application-metrics/python"},{"title":"Continuous profiling for Ruby","sidebarTitle":"Ruby continuous profiler","href":"/docs/observability/application-metrics/ruby"},{"title":"Continuous profiling for Rust","sidebarTitle":"Rust continuous profiler","href":"/docs/observability/application-metrics/rust"}]}]},{"group":"Logs","root":{"title":"Consume logs","sidebarTitle":"Overview","href":"/docs/observability/logs/index"},"pages":[{"title":"Log Explorer","sidebarTitle":"Log Explorer","href":"/docs/observability/logs/log-explorer"},{"title":"Access your logs","sidebarTitle":"Access logs","href":"/docs/observability/logs/access-logs"},{"title":"Forward Upsun Cloud and Upsun Blackfire logs","sidebarTitle":"Forward Upsun Cloud and Upsun Blackfire logs","href":"/docs/observability/logs/forward-logs"}]}]},{"group":"Integrations","icon":"link","expanded":false,"pages":[{"sidebarTitle":"Overview","title":"External Integrations","href":"/docs/integrations/overview"},{"group":"Source integrations","root":{"title":"Source integrations","sidebarTitle":"Overview","href":"/docs/integrations/source/index"},"pages":[{"title":"Integrate with Bitbucket","sidebarTitle":"Bitbucket","href":"/docs/integrations/source/bitbucket"},{"title":"Integrate with GitHub","sidebarTitle":"GitHub","href":"/docs/integrations/source/github"},{"title":"Integrate with GitLab","sidebarTitle":"GitLab","href":"/docs/integrations/source/gitlab"},{"title":"Resolve access issues with source integrations","sidebarTitle":"Resolve access issues with source integrations","href":"/docs/integrations/source/troubleshoot"}]},{"group":"Activity scripts","root":{"title":"Activity scripts","sidebarTitle":"Overview","href":"/docs/integrations/activity/index"},"pages":[{"title":"Activity reference","sidebarTitle":"Activity reference","href":"/docs/integrations/activity/reference"},{"title":"Utility routines","sidebarTitle":"Utility routines","href":"/docs/integrations/activity/utility"},{"title":"Webhooks","href":"/docs/integrations/activity/webhooks"},{"group":"Examples","pages":[{"title":"Example: Discord","href":"/docs/integrations/activity/discord"},{"title":"Example: Slack","sidebarTitle":"Example: Slack","href":"/docs/integrations/activity/slack"}]}]},{"title":"Fastly CDN","href":"/docs/integrations/fastly-cdn"},{"title":"Health notifications","href":"/docs/integrations/notifications"}]},{"group":"Troubleshooting","icon":"circle-alert","expanded":false,"pages":[{"title":"502 error resolution guide","sidebarTitle":"502 error resolutions","href":"/docs/troubleshooting/502-errors"},{"title":"Troubleshoot development","sidebarTitle":"Development","href":"/docs/troubleshooting/general"},{"title":"Troubleshoot disks","sidebarTitle":"Disks","href":"/docs/troubleshooting/disks"},{"title":"Troubleshoot mounts","sidebarTitle":"Mounts","href":"/docs/troubleshooting/mounts"}]},{"group":"Resources","icon":"code","expanded":false,"pages":[{"title":"Glossary","sidebarTitle":"Glossary","href":"/docs/glossary/index"},{"title":"Data Register","sidebarTitle":"Data Register","href":"/docs/registry/index"},{"title":"Request features","sidebarTitle":"Request features","href":"/docs/request-features/index"}]}]},{"anchor":"Tutorials","icon":"graduation-cap","pages":[{"title":"Tutorials","sidebarTitle":"Overview","icon":"graduation-cap","href":"/tutorials/index"},{"group":"AI use cases","icon":"brain","pages":[{"title":"AI use cases","sidebarTitle":"Overview","href":"/tutorials/ai/index"},{"title":"Building a LangChain chatbot on Upsun Cloud","sidebarTitle":"LangChain chatbot","tag":"New","href":"/tutorials/ai/langchain-chatbot"},{"title":"Building a RAG pipeline with Qdrant on Upsun Cloud","sidebarTitle":"RAG pipeline","tag":"New","href":"/tutorials/ai/rag-pipeline"},{"title":"Deploying a coding agent with opencode on Upsun Cloud","sidebarTitle":"Coding agent","tag":"New","href":"/tutorials/ai/coding-agent"},{"title":"Building a news digest with workers on Upsun Cloud","sidebarTitle":"News digest","tag":"New","href":"/tutorials/ai/news-digest"},{"title":"Building an AI support ticket classifier on Upsun Cloud","sidebarTitle":"Form processing","tag":"New","href":"/tutorials/ai/form-processing"},{"title":"Building an AI-powered BI tool on Upsun Cloud","sidebarTitle":"eCommerce insights","tag":"New","href":"/tutorials/ai/ecommerce-insights"}]},{"group":"Self-hosted services","icon":"server","pages":[{"title":"Self-hosted services","sidebarTitle":"Overview","href":"/tutorials/self-hosted/index"},{"title":"Qdrant","sidebarTitle":"Qdrant","href":"/tutorials/self-hosted/qdrant"},{"title":"Chroma","sidebarTitle":"Chroma","href":"/tutorials/self-hosted/chroma"}]},{"group":"CMS guides","icon":"newspaper","pages":[{"title":"CMS guides","sidebarTitle":"Overview","href":"/tutorials/cms/index"},{"group":"WordPress","root":{"title":"Deploy WordPress on Upsun Cloud","sidebarTitle":"WordPress","href":"/tutorials/wordpress/index"},"pages":[{"title":"Deploy Vanilla WordPress on Upsun Cloud","sidebarTitle":"Vanilla WordPress","href":"/tutorials/wordpress/vanilla"},{"title":"Deploy Composer-based WordPress on Upsun Cloud","sidebarTitle":"Composer WordPress","href":"/tutorials/wordpress/composer"},{"title":"Deploy Bedrock-based WordPress on Upsun Cloud","sidebarTitle":"Bedrock WordPress","href":"/tutorials/wordpress/bedrock"},{"title":"Deploy WordPress Multisite on Upsun Cloud","sidebarTitle":"WordPress Multisite","href":"/tutorials/wordpress/multisite"}]},{"title":"Deploy Drupal on Upsun Cloud","sidebarTitle":"Drupal","href":"/tutorials/drupal"},{"title":"Deploy Magento on Upsun Cloud","sidebarTitle":"Magento","href":"/tutorials/magento"},{"title":"Deploy Shopware on Upsun Cloud","sidebarTitle":"Shopware","href":"/tutorials/shopware"},{"title":"Deploy Pimcore on Upsun Cloud","sidebarTitle":"Pimcore","href":"/tutorials/pimcore"},{"title":"Deploy Liferay on Upsun Cloud","sidebarTitle":"Liferay","href":"/tutorials/liferay"}]},{"group":"Migration guides","icon":"move-right","pages":[{"title":"Migration guides","sidebarTitle":"Overview","href":"/tutorials/migration/index"},{"title":"Migrating from another provider to Upsun Cloud","sidebarTitle":"From another provider","href":"/tutorials/migration/from-other-provider"},{"title":"Converting from Upsun Fixed (formerly Platform.sh)","sidebarTitle":"Converting from Upsun Fixed (formerly Platform.sh)","href":"/tutorials/migration/from-fixed"}]}]},{"anchor":"API","icon":"code","pages":[{"title":"Upsun Cloud API","sidebarTitle":"API Home","icon":"code","href":"/api/index"},{"group":"SDK","pages":[{"title":"Overview","icon":"book-open","sidebarTitle":"Overview","href":"/api/sdk/overview"},{"title":"Upsun Cloud SDK for PHP","sidebarTitle":"PHP","icon":"php","tag":"Beta","href":"/api/sdk/php"},{"title":"Upsun Cloud SDK for NodeJs","sidebarTitle":"NodeJs","icon":"js","tag":"Beta","href":"/api/sdk/js"}]},{"group":"REST API","pages":[{"title":"Overview","icon":"book-open","sidebarTitle":"Overview","href":"/api/rest/overview"},{"title":"Authentication","icon":"lock","sidebarTitle":"Authentication","href":"/api/rest/authentication"},{"title":"Errors","icon":"circle-x","sidebarTitle":"Errors","href":"/api/rest/errors"},{"title":"Endpoints","icon":"route","sidebarTitle":"Endpoints","href":"/api/rest/endpoints"}]},{"group":"OpenAPI Reference","pages":[{"group":"API Reference","pages":[{"title":"Query project carbon emissions metrics for an entire organization","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/metrics/carbon","href":"/api-reference/query-project-carbon-emissions-metrics-for-an-entire-organization"},{"title":"List support tickets","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /tickets","href":"/api-reference/list-support-tickets"}]},{"group":"Activity","pages":[{"title":"Get projects environments tasks activities","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/tasks/{taskDefinitionId}/activities","href":"/api-reference/activity/get-projects-environments-tasks-activities"},{"title":"Get projects environments tasks activities 1","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/tasks/{taskDefinitionId}/activities/{activityId}","href":"/api-reference/activity/get-projects-environments-tasks-activities-1"},{"title":"Post projects environments tasks activities cancel","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/tasks/{taskDefinitionId}/activities/{activityId}/cancel","href":"/api-reference/activity/post-projects-environments-tasks-activities-cancel"}]},{"group":"Add-ons","pages":[{"title":"Get add-ons","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/addons","href":"/api-reference/add-ons/get-add-ons"}]},{"group":"Alerts","pages":[{"title":"Get usage alerts for a subscription","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /alerts/subscriptions/{subscriptionId}/usage","href":"/api-reference/alerts/get-usage-alerts-for-a-subscription"},{"title":"Update usage alerts.","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /alerts/subscriptions/{subscriptionId}/usage","href":"/api-reference/alerts/update-usage-alerts"}]},{"group":"API Tokens","pages":[{"title":"List a user's API tokens","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/api-tokens","href":"/api-reference/api-tokens/list-a-users-api-tokens"},{"title":"Create an API token","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /users/{user_id}/api-tokens","href":"/api-reference/api-tokens/create-an-api-token"},{"title":"Get an API token","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/api-tokens/{token_id}","href":"/api-reference/api-tokens/get-an-api-token"},{"title":"Delete an API token","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /users/{user_id}/api-tokens/{token_id}","href":"/api-reference/api-tokens/delete-an-api-token"}]},{"group":"Autoscaling","pages":[{"title":"Retrieves Autoscaler settings","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/autoscaling/settings","href":"/api-reference/autoscaling/retrieves-autoscaler-settings"},{"title":"Updates Autoscaler settings","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/autoscaling/settings","href":"/api-reference/autoscaling/updates-autoscaler-settings"},{"title":"Modifies Autoscaler settings","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/environments/{environmentId}/autoscaling/settings","href":"/api-reference/autoscaling/modifies-autoscaler-settings"}]},{"group":"Blackfire Monitoring","pages":[{"title":"Get server cache metrics","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/server/caches","href":"/api-reference/blackfire-monitoring/get-server-cache-metrics"},{"title":"Get server monitoring overview","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/server","href":"/api-reference/blackfire-monitoring/get-server-monitoring-overview"},{"title":"Get server transaction breakdown","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/server/transactions-break-down","href":"/api-reference/blackfire-monitoring/get-server-transaction-breakdown"},{"title":"Get top spans","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/server/top-spans","href":"/api-reference/blackfire-monitoring/get-top-spans"}]},{"group":"Blackfire Profiling","pages":[{"title":"Get profile timeline data","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/profiles/{uuid}/timeline","href":"/api-reference/blackfire-profiling/get-profile-timeline-data"},{"title":"Get profile subprofiles","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/profiles/{uuid}/subprofiles","href":"/api-reference/blackfire-profiling/get-profile-subprofiles"},{"title":"Get profile details","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/profiles/{uuid}/profile","href":"/api-reference/blackfire-profiling/get-profile-details"},{"title":"Get profile call graph","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/profiles/{uuid}/graph","href":"/api-reference/blackfire-profiling/get-profile-call-graph"},{"title":"Get recommendation statistics","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/profiles/recommendations","href":"/api-reference/blackfire-profiling/get-recommendation-statistics"},{"title":"List profiling results","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/profiles","href":"/api-reference/blackfire-profiling/list-profiling-results"}]},{"group":"Cert Management","pages":[{"title":"Get list of SSL certificates","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/certificates","href":"/api-reference/cert-management/get-list-of-ssl-certificates"},{"title":"Add an SSL certificate","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/certificates","href":"/api-reference/cert-management/add-an-ssl-certificate"},{"title":"Get an SSL certificate","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/certificates/{certificateId}","href":"/api-reference/cert-management/get-an-ssl-certificate"},{"title":"Delete an SSL certificate","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/certificates/{certificateId}","href":"/api-reference/cert-management/delete-an-ssl-certificate"},{"title":"Update an SSL certificate","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/certificates/{certificateId}","href":"/api-reference/cert-management/update-an-ssl-certificate"},{"title":"Get projects provisioners","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/provisioners","href":"/api-reference/cert-management/get-projects-provisioners"},{"title":"Get projects provisioners 1","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/provisioners/{certificateProvisionerDocumentId}","href":"/api-reference/cert-management/get-projects-provisioners-1"},{"title":"Patch projects provisioners","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/provisioners/{certificateProvisionerDocumentId}","href":"/api-reference/cert-management/patch-projects-provisioners"}]},{"group":"Connections","pages":[{"title":"List federated login connections","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/connections","href":"/api-reference/connections/list-federated-login-connections"},{"title":"Get a federated login connection","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/connections/{provider}","href":"/api-reference/connections/get-a-federated-login-connection"},{"title":"Delete a federated login connection","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /users/{user_id}/connections/{provider}","href":"/api-reference/connections/delete-a-federated-login-connection"}]},{"group":"Continuous Profiling","pages":[{"title":"List profiled applications","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{envId}/continuous-profiling","href":"/api-reference/continuous-profiling/list-profiled-applications"},{"title":"Get application timeline","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{envId}/continuous-profiling/app/{app}","href":"/api-reference/continuous-profiling/get-application-timeline"},{"title":"Get merged profile","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{envId}/continuous-profiling/app/{app}/merge","href":"/api-reference/continuous-profiling/get-merged-profile"},{"title":"Get application filter values","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{envId}/continuous-profiling/app/{app}/filter","href":"/api-reference/continuous-profiling/get-application-filter-values"}]},{"group":"Deployment","pages":[{"title":"Get an environment's deployment information","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/deployments","href":"/api-reference/deployment/get-an-environments-deployment-information"},{"title":"Get a single environment deployment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/deployments/{deploymentId}","href":"/api-reference/deployment/get-a-single-environment-deployment"}]},{"group":"Deployment Target","pages":[{"title":"Get project deployment target info","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/deployments","href":"/api-reference/deployment-target/get-project-deployment-target-info"},{"title":"Create a project deployment target","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/deployments","href":"/api-reference/deployment-target/create-a-project-deployment-target"},{"title":"Get a single project deployment target","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/deployments/{deploymentTargetConfigurationId}","href":"/api-reference/deployment-target/get-a-single-project-deployment-target"},{"title":"Delete a single project deployment target","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/deployments/{deploymentTargetConfigurationId}","href":"/api-reference/deployment-target/delete-a-single-project-deployment-target"},{"title":"Update a project deployment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/deployments/{deploymentTargetConfigurationId}","href":"/api-reference/deployment-target/update-a-project-deployment"}]},{"group":"Diff","pages":[{"title":"Get projects gitdiffs ","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/git/diffs/{diffBaseId}/{diffTargetId}","href":"/api-reference/diff/get-projects-gitdiffs-"}]},{"group":"Discounts","pages":[{"title":"Get an organization discount","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /discounts/{id}","href":"/api-reference/discounts/get-an-organization-discount"},{"title":"Get the value of the First Project Incentive discount","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /discounts/types/allowance","href":"/api-reference/discounts/get-the-value-of-the-first-project-incentive-discount"},{"title":"List organization discounts","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/discounts","href":"/api-reference/discounts/list-organization-discounts"}]},{"group":"Domain Claim","pages":[{"title":"Get projects domain claims","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/domain-claims","href":"/api-reference/domain-claim/get-projects-domain-claims"},{"title":"Post projects domain claims","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/domain-claims","href":"/api-reference/domain-claim/post-projects-domain-claims"},{"title":"Get projects domain claims 1","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/domain-claims/{domainClaimId}","href":"/api-reference/domain-claim/get-projects-domain-claims-1"},{"title":"Delete projects domain claims","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/domain-claims/{domainClaimId}","href":"/api-reference/domain-claim/delete-projects-domain-claims"},{"title":"Patch projects domain claims","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/domain-claims/{domainClaimId}","href":"/api-reference/domain-claim/patch-projects-domain-claims"}]},{"group":"Domain Management","pages":[{"title":"Get list of project domains","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/domains","href":"/api-reference/domain-management/get-list-of-project-domains"},{"title":"Add a project domain","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/domains","href":"/api-reference/domain-management/add-a-project-domain"},{"title":"Get a project domain","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/domains/{domainId}","href":"/api-reference/domain-management/get-a-project-domain"},{"title":"Delete a project domain","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/domains/{domainId}","href":"/api-reference/domain-management/delete-a-project-domain"},{"title":"Update a project domain","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/domains/{domainId}","href":"/api-reference/domain-management/update-a-project-domain"},{"title":"Get a list of environment domains","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/domains","href":"/api-reference/domain-management/get-a-list-of-environment-domains"},{"title":"Add an environment domain","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/domains","href":"/api-reference/domain-management/add-an-environment-domain"},{"title":"Get an environment domain","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/domains/{domainId}","href":"/api-reference/domain-management/get-an-environment-domain"},{"title":"Delete an environment domain","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/environments/{environmentId}/domains/{domainId}","href":"/api-reference/domain-management/delete-an-environment-domain"},{"title":"Update an environment domain","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/environments/{environmentId}/domains/{domainId}","href":"/api-reference/domain-management/update-an-environment-domain"}]},{"group":"Entrypoint","pages":[{"title":"Get observability entrypoint","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability","href":"/api-reference/entrypoint/get-observability-entrypoint"}]},{"group":"Environment","pages":[{"title":"Get list of project environments","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments","href":"/api-reference/environment/get-list-of-project-environments"},{"title":"Get an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}","href":"/api-reference/environment/get-an-environment"},{"title":"Delete an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/environments/{environmentId}","href":"/api-reference/environment/delete-an-environment"},{"title":"Update an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/environments/{environmentId}","href":"/api-reference/environment/update-an-environment"},{"title":"Activate an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/activate","href":"/api-reference/environment/activate-an-environment"},{"title":"Branch an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/branch","href":"/api-reference/environment/branch-an-environment"},{"title":"Deactivate an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/deactivate","href":"/api-reference/environment/deactivate-an-environment"},{"title":"Deploy an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/deploy","href":"/api-reference/environment/deploy-an-environment"},{"title":"Initialize a new environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/initialize","href":"/api-reference/environment/initialize-a-new-environment"},{"title":"Post projects environments maintenance redeploy","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/maintenance-redeploy","href":"/api-reference/environment/post-projects-environments-maintenance-redeploy"},{"title":"Merge an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/merge","href":"/api-reference/environment/merge-an-environment"},{"title":"Pause an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/pause","href":"/api-reference/environment/pause-an-environment"},{"title":"Redeploy an environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/redeploy","href":"/api-reference/environment/redeploy-an-environment"},{"title":"Resume a paused environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/resume","href":"/api-reference/environment/resume-a-paused-environment"},{"title":"Synchronize a child environment with its parent","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/synchronize","href":"/api-reference/environment/synchronize-a-child-environment-with-its-parent"}]},{"group":"Environment Activity","pages":[{"title":"Get environment activity log","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/activities","href":"/api-reference/environment-activity/get-environment-activity-log"},{"title":"Get an environment activity log entry","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/activities/{activityId}","href":"/api-reference/environment-activity/get-an-environment-activity-log-entry"},{"title":"Cancel an environment activity","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/activities/{activityId}/cancel","href":"/api-reference/environment-activity/cancel-an-environment-activity"},{"title":"Cancel an integration activity","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/integrations/{integrationId}/activities/{activityId}/cancel","href":"/api-reference/environment-activity/cancel-an-integration-activity"}]},{"group":"Environment Backups","pages":[{"title":"Create backup of environment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/backup","href":"/api-reference/environment-backups/create-backup-of-environment"},{"title":"Get an environment's backup list","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/backups","href":"/api-reference/environment-backups/get-an-environments-backup-list"},{"title":"Get an environment backup's info","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/backups/{backupId}","href":"/api-reference/environment-backups/get-an-environment-backups-info"},{"title":"Delete an environment backup","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/environments/{environmentId}/backups/{backupId}","href":"/api-reference/environment-backups/delete-an-environment-backup"},{"title":"Restore an environment snapshot","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/backups/{backupId}/restore","href":"/api-reference/environment-backups/restore-an-environment-snapshot"}]},{"group":"Environment Type","pages":[{"title":"Get environment types","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environment-types","href":"/api-reference/environment-type/get-environment-types"},{"title":"Get environment type links","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environment-types/{environmentTypeId}","href":"/api-reference/environment-type/get-environment-type-links"}]},{"group":"Environment Variables","pages":[{"title":"Get list of environment variables","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/variables","href":"/api-reference/environment-variables/get-list-of-environment-variables"},{"title":"Add an environment variable","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/variables","href":"/api-reference/environment-variables/add-an-environment-variable"},{"title":"Get an environment variable","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/variables/{variableId}","href":"/api-reference/environment-variables/get-an-environment-variable"},{"title":"Delete an environment variable","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/environments/{environmentId}/variables/{variableId}","href":"/api-reference/environment-variables/delete-an-environment-variable"},{"title":"Update an environment variable","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/environments/{environmentId}/variables/{variableId}","href":"/api-reference/environment-variables/update-an-environment-variable"}]},{"group":"Grants","pages":[{"title":"List extended access of a user","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/extended-access","href":"/api-reference/grants/list-extended-access-of-a-user"},{"title":"Get access document by access ID","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /access/{access_id}","href":"/api-reference/grants/get-access-document-by-access-id"}]},{"group":"Http Traffic","pages":[{"title":"Get HTTP traffic timeline by URL","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/http/breakdown/urls","href":"/api-reference/http-traffic/get-http-traffic-timeline-by-url"},{"title":"Get HTTP traffic timeline by IP","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/http/breakdown/ips","href":"/api-reference/http-traffic/get-http-traffic-timeline-by-ip"},{"title":"Get HTTP traffic timeline by user agent","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/http/breakdown/user-agents","href":"/api-reference/http-traffic/get-http-traffic-timeline-by-user-agent"}]},{"group":"Invoices","pages":[{"title":"List invoices","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/invoices","href":"/api-reference/invoices/list-invoices"},{"title":"Get invoice","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/invoices/{invoice_id}","href":"/api-reference/invoices/get-invoice"}]},{"group":"Logs","pages":[{"title":"Get logs overview","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/logs/overview","href":"/api-reference/logs/get-logs-overview"},{"title":"Query log entries","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/logs/query","href":"/api-reference/logs/query-log-entries"}]},{"group":"MFA","pages":[{"title":"Get information about TOTP enrollment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/totp","href":"/api-reference/mfa/get-information-about-totp-enrollment"},{"title":"Confirm TOTP enrollment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /users/{user_id}/totp","href":"/api-reference/mfa/confirm-totp-enrollment"},{"title":"Withdraw TOTP enrollment","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /users/{user_id}/totp","href":"/api-reference/mfa/withdraw-totp-enrollment"},{"title":"Re-create recovery codes","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /users/{user_id}/codes","href":"/api-reference/mfa/re-create-recovery-codes"},{"title":"Get organization MFA settings","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/mfa-enforcement","href":"/api-reference/mfa/get-organization-mfa-settings"},{"title":"Enable organization MFA enforcement","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations/{organization_id}/mfa-enforcement/enable","href":"/api-reference/mfa/enable-organization-mfa-enforcement"},{"title":"Disable organization MFA enforcement","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations/{organization_id}/mfa-enforcement/disable","href":"/api-reference/mfa/disable-organization-mfa-enforcement"},{"title":"Send MFA reminders to organization members","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations/{organization_id}/mfa/remind","href":"/api-reference/mfa/send-mfa-reminders-to-organization-members"}]},{"group":"Orders","pages":[{"title":"Download an invoice.","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /orders/download","href":"/api-reference/orders/download-an-invoice"},{"title":"List orders","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/orders","href":"/api-reference/orders/list-orders"},{"title":"Get order","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/orders/{order_id}","href":"/api-reference/orders/get-order"},{"title":"Create confirmation credentials for for 3D-Secure","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations/{organization_id}/orders/{order_id}/authorize","href":"/api-reference/orders/create-confirmation-credentials-for-for-3d-secure"}]},{"group":"Organization Invitations","pages":[{"title":"List invitations to an organization","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/invitations","href":"/api-reference/organization-invitations/list-invitations-to-an-organization"},{"title":"Invite user to an organization by email","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations/{organization_id}/invitations","href":"/api-reference/organization-invitations/invite-user-to-an-organization-by-email"},{"title":"Cancel a pending invitation to an organization","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /organizations/{organization_id}/invitations/{invitation_id}","href":"/api-reference/organization-invitations/cancel-a-pending-invitation-to-an-organization"}]},{"group":"Organization Management","pages":[{"title":"Estimate total spend","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/estimate","href":"/api-reference/organization-management/estimate-total-spend"},{"title":"Get billing alert configuration","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/alerts/billing","href":"/api-reference/organization-management/get-billing-alert-configuration"},{"title":"Update billing alert configuration","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /organizations/{organization_id}/alerts/billing","href":"/api-reference/organization-management/update-billing-alert-configuration"},{"title":"Get organization prepayment information","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/prepayment","href":"/api-reference/organization-management/get-organization-prepayment-information"},{"title":"List organization prepayment transactions","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/prepayment/transactions","href":"/api-reference/organization-management/list-organization-prepayment-transactions"}]},{"group":"Organization Members","pages":[{"title":"List organization members","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/members","href":"/api-reference/organization-members/list-organization-members"},{"title":"Create organization member","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations/{organization_id}/members","href":"/api-reference/organization-members/create-organization-member"},{"title":"Get organization member","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/members/{user_id}","href":"/api-reference/organization-members/get-organization-member"},{"title":"Delete organization member","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /organizations/{organization_id}/members/{user_id}","href":"/api-reference/organization-members/delete-organization-member"},{"title":"Update organization member","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /organizations/{organization_id}/members/{user_id}","href":"/api-reference/organization-members/update-organization-member"}]},{"group":"Organization Projects","pages":[{"title":"List projects","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/projects","href":"/api-reference/organization-projects/list-projects"},{"title":"Create project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations/{organization_id}/projects","href":"/api-reference/organization-projects/create-project"},{"title":"Stream provisioning progress","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/projects/provisioning","href":"/api-reference/organization-projects/stream-provisioning-progress"},{"title":"Get project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/projects/{project_id}","href":"/api-reference/organization-projects/get-project"},{"title":"Delete project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /organizations/{organization_id}/projects/{project_id}","href":"/api-reference/organization-projects/delete-project"},{"title":"Update project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /organizations/{organization_id}/projects/{project_id}","href":"/api-reference/organization-projects/update-project"},{"title":"Query project carbon emissions metrics","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/projects/{project_id}/metrics/carbon","href":"/api-reference/organization-projects/query-project-carbon-emissions-metrics"}]},{"group":"Organizations","pages":[{"title":"User organizations","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/organizations","href":"/api-reference/organizations/user-organizations"},{"title":"List organizations","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations","href":"/api-reference/organizations/list-organizations"},{"title":"Create organization","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations","href":"/api-reference/organizations/create-organization"},{"title":"Get organization","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}","href":"/api-reference/organizations/get-organization"},{"title":"Delete organization","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /organizations/{organization_id}","href":"/api-reference/organizations/delete-organization"},{"title":"Update organization","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /organizations/{organization_id}","href":"/api-reference/organizations/update-organization"}]},{"group":"PhoneNumber","pages":[{"title":"Verify phone number","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /users/{user_id}/phonenumber","href":"/api-reference/phonenumber/verify-phone-number"},{"title":"Confirm phone number","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /users/{user_id}/phonenumber/{sid}","href":"/api-reference/phonenumber/confirm-phone-number"}]},{"group":"Profiles","pages":[{"title":"Get address","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/address","href":"/api-reference/profiles/get-address"},{"title":"Update address","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /organizations/{organization_id}/address","href":"/api-reference/profiles/update-address"},{"title":"Get profile","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/profile","href":"/api-reference/profiles/get-profile"},{"title":"Update profile","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /organizations/{organization_id}/profile","href":"/api-reference/profiles/update-profile"}]},{"group":"Project","pages":[{"title":"Get a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}","href":"/api-reference/project/get-a-project"},{"title":"Get a project's capabilities","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/capabilities","href":"/api-reference/project/get-a-projects-capabilities"},{"title":"Clear project build cache","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/clear_build_cache","href":"/api-reference/project/clear-project-build-cache"},{"title":"Post projects maintenance redeploy","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/maintenance-redeploy","href":"/api-reference/project/post-projects-maintenance-redeploy"}]},{"group":"Project Activity","pages":[{"title":"Get project activity log","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/activities","href":"/api-reference/project-activity/get-project-activity-log"},{"title":"Get a project activity log entry","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/activities/{activityId}","href":"/api-reference/project-activity/get-a-project-activity-log-entry"},{"title":"Cancel a project activity","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/activities/{activityId}/cancel","href":"/api-reference/project-activity/cancel-a-project-activity"}]},{"group":"Project Invitations","pages":[{"title":"List invitations to a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{project_id}/invitations","href":"/api-reference/project-invitations/list-invitations-to-a-project"},{"title":"Invite user to a project by email","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{project_id}/invitations","href":"/api-reference/project-invitations/invite-user-to-a-project-by-email"},{"title":"Cancel a pending invitation to a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{project_id}/invitations/{invitation_id}","href":"/api-reference/project-invitations/cancel-a-pending-invitation-to-a-project"}]},{"group":"Project Settings","pages":[{"title":"Get list of project settings","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/settings","href":"/api-reference/project-settings/get-list-of-project-settings"},{"title":"Update a project setting","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/settings","href":"/api-reference/project-settings/update-a-project-setting"}]},{"group":"Project Variables","pages":[{"title":"Get list of project variables","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/variables","href":"/api-reference/project-variables/get-list-of-project-variables"},{"title":"Add a project variable","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/variables","href":"/api-reference/project-variables/add-a-project-variable"},{"title":"Get a project variable","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/variables/{projectVariableId}","href":"/api-reference/project-variables/get-a-project-variable"},{"title":"Delete a project variable","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/variables/{projectVariableId}","href":"/api-reference/project-variables/delete-a-project-variable"},{"title":"Update a project variable","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/variables/{projectVariableId}","href":"/api-reference/project-variables/update-a-project-variable"}]},{"group":"Projects","pages":[{"title":"List a project's resource usage history","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/projects/{project_id}/usage-history","href":"/api-reference/projects/list-a-projects-resource-usage-history"},{"title":"List project history","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/projects/{project_id}/history","href":"/api-reference/projects/list-project-history"},{"title":"List a project's plan and addon change history","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/projects/{project_id}/plan-history","href":"/api-reference/projects/list-a-projects-plan-and-addon-change-history"}]},{"group":"Records","pages":[{"title":"List plan records","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/records/plan","href":"/api-reference/records/list-plan-records"},{"title":"List usage records","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/records/usage","href":"/api-reference/records/list-usage-records"}]},{"group":"References","pages":[{"title":"List referenced users","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /ref/users","href":"/api-reference/references/list-referenced-users"},{"title":"List referenced teams","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /ref/teams","href":"/api-reference/references/list-referenced-teams"},{"title":"List referenced organizations","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /ref/organizations","href":"/api-reference/references/list-referenced-organizations"},{"title":"List referenced projects","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /ref/projects","href":"/api-reference/references/list-referenced-projects"},{"title":"List referenced regions","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /ref/regions","href":"/api-reference/references/list-referenced-regions"}]},{"group":"Regions","pages":[{"title":"List regions","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /regions","href":"/api-reference/regions/list-regions"},{"title":"Get region","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /regions/{region_id}","href":"/api-reference/regions/get-region"}]},{"group":"Repository","pages":[{"title":"Get a blob object","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/git/blobs/{repositoryBlobId}","href":"/api-reference/repository/get-a-blob-object"},{"title":"Get a commit object","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/git/commits/{repositoryCommitId}","href":"/api-reference/repository/get-a-commit-object"},{"title":"Get list of repository refs","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/git/refs","href":"/api-reference/repository/get-list-of-repository-refs"},{"title":"Get a ref object","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/git/refs/{repositoryRefId}","href":"/api-reference/repository/get-a-ref-object"},{"title":"Get a tree object","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/git/trees/{repositoryTreeId}","href":"/api-reference/repository/get-a-tree-object"}]},{"group":"Resources","pages":[{"title":"Get resource metrics overview","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/resources/overview","href":"/api-reference/resources/get-resource-metrics-overview"},{"title":"Get resource metrics summary","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/resources/summary","href":"/api-reference/resources/get-resource-metrics-summary"},{"title":"Get resource metrics by service","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/observability/resources/service/{service}","href":"/api-reference/resources/get-resource-metrics-by-service"}]},{"group":"Routing","pages":[{"title":"Get list of routes","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/routes","href":"/api-reference/routing/get-list-of-routes"},{"title":"Get a route's info","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/routes/{routeId}","href":"/api-reference/routing/get-a-routes-info"}]},{"group":"Runtime Operations","pages":[{"title":"Execute a runtime operation","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/deployments/{deploymentId}/operations","href":"/api-reference/runtime-operations/execute-a-runtime-operation"}]},{"group":"Source Operations","pages":[{"title":"Trigger a source operation","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/source-operation","href":"/api-reference/source-operations/trigger-a-source-operation"},{"title":"List source operations","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/source-operations","href":"/api-reference/source-operations/list-source-operations"}]},{"group":"SSH","pages":[{"title":"List a user's SSH keys","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/ssh-keys","href":"/api-reference/ssh/list-a-users-ssh-keys"},{"title":"Add an SSH key","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /users/{user_id}/ssh-keys","href":"/api-reference/ssh/add-an-ssh-key"},{"title":"Get an SSH key","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/ssh-keys/{key_id}","href":"/api-reference/ssh/get-an-ssh-key"},{"title":"Delete an SSH key","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /users/{user_id}/ssh-keys/{key_id}","href":"/api-reference/ssh/delete-an-ssh-key"}]},{"group":"Subscriptions","pages":[{"title":"Checks if the user is able to update a project.","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /subscriptions/{subscriptionId}/can-update","href":"/api-reference/subscriptions/checks-if-the-user-is-able-to-update-a-project"},{"title":"Checks if the user can afford the requested resources.","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /subscriptions/{subscriptionId}/can-afford","href":"/api-reference/subscriptions/checks-if-the-user-can-afford-the-requested-resources"},{"title":"Estimate the price of a new subscription","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/subscriptions/estimate","href":"/api-reference/subscriptions/estimate-the-price-of-a-new-subscription"},{"title":"Checks if the user is able to create a new project.","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/subscriptions/can-create","href":"/api-reference/subscriptions/checks-if-the-user-is-able-to-create-a-new-project"},{"title":"Estimate the price of a subscription","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/subscriptions/{subscription_id}/estimate","href":"/api-reference/subscriptions/estimate-the-price-of-a-subscription"},{"title":"Get current usage for a subscription","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/subscriptions/{subscription_id}/current_usage","href":"/api-reference/subscriptions/get-current-usage-for-a-subscription"},{"title":"List addons for a subscription","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/subscriptions/{subscription_id}/addons","href":"/api-reference/subscriptions/list-addons-for-a-subscription"},{"title":"Get usage alerts","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/alerts/subscriptions/{subscription_id}/usage","href":"/api-reference/subscriptions/get-usage-alerts"},{"title":"Update usage alerts.","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /organizations/{organization_id}/alerts/subscriptions/{subscription_id}/usage","href":"/api-reference/subscriptions/update-usage-alerts"},{"title":"List subscriptions","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/subscriptions","href":"/api-reference/subscriptions/list-subscriptions"},{"title":"Create subscription","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations/{organization_id}/subscriptions","href":"/api-reference/subscriptions/create-subscription"},{"title":"Get subscription","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/subscriptions/{subscription_id}","href":"/api-reference/subscriptions/get-subscription"},{"title":"Delete subscription","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /organizations/{organization_id}/subscriptions/{subscription_id}","href":"/api-reference/subscriptions/delete-subscription"},{"title":"Update subscription","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /organizations/{organization_id}/subscriptions/{subscription_id}","href":"/api-reference/subscriptions/update-subscription"}]},{"group":"Support","pages":[{"title":"Create a new support ticket","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /tickets","href":"/api-reference/support/create-a-new-support-ticket"},{"title":"Update a ticket","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /tickets/{ticket_id}","href":"/api-reference/support/update-a-ticket"},{"title":"List support ticket priorities","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /tickets/priority","href":"/api-reference/support/list-support-ticket-priorities"},{"title":"List support ticket categories","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /tickets/category","href":"/api-reference/support/list-support-ticket-categories"}]},{"group":"System Information","pages":[{"title":"Get information about the Git server.","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/system","href":"/api-reference/system-information/get-information-about-the-git-server"},{"title":"Restart the Git server","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/system/restart","href":"/api-reference/system-information/restart-the-git-server"}]},{"group":"Task","pages":[{"title":"Get projects environments tasks","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/tasks","href":"/api-reference/task/get-projects-environments-tasks"},{"title":"Get projects environments tasks 1","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/environments/{environmentId}/tasks/{taskDefinitionId}","href":"/api-reference/task/get-projects-environments-tasks-1"},{"title":"Post projects environments tasks run","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/environments/{environmentId}/tasks/{taskDefinitionId}/run","href":"/api-reference/task/post-projects-environments-tasks-run"}]},{"group":"Team Access","pages":[{"title":"List team access for a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{project_id}/team-access","href":"/api-reference/team-access/list-team-access-for-a-project"},{"title":"Grant team access to a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{project_id}/team-access","href":"/api-reference/team-access/grant-team-access-to-a-project"},{"title":"Get team access for a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{project_id}/team-access/{team_id}","href":"/api-reference/team-access/get-team-access-for-a-project"},{"title":"Remove team access for a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{project_id}/team-access/{team_id}","href":"/api-reference/team-access/remove-team-access-for-a-project"},{"title":"List project access for a team","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /teams/{team_id}/project-access","href":"/api-reference/team-access/list-project-access-for-a-team"},{"title":"Grant project access to a team","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /teams/{team_id}/project-access","href":"/api-reference/team-access/grant-project-access-to-a-team"},{"title":"Get project access for a team","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /teams/{team_id}/project-access/{project_id}","href":"/api-reference/team-access/get-project-access-for-a-team"},{"title":"Remove project access for a team","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /teams/{team_id}/project-access/{project_id}","href":"/api-reference/team-access/remove-project-access-for-a-team"}]},{"group":"Teams","pages":[{"title":"List teams","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /teams","href":"/api-reference/teams/list-teams"},{"title":"Create team","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /teams","href":"/api-reference/teams/create-team"},{"title":"Get team","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /teams/{team_id}","href":"/api-reference/teams/get-team"},{"title":"Delete team","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /teams/{team_id}","href":"/api-reference/teams/delete-team"},{"title":"Update team","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /teams/{team_id}","href":"/api-reference/teams/update-team"},{"title":"List team members","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /teams/{team_id}/members","href":"/api-reference/teams/list-team-members"},{"title":"Create team member","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /teams/{team_id}/members","href":"/api-reference/teams/create-team-member"},{"title":"Get team member","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /teams/{team_id}/members/{user_id}","href":"/api-reference/teams/get-team-member"},{"title":"Delete team member","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /teams/{team_id}/members/{user_id}","href":"/api-reference/teams/delete-team-member"},{"title":"User teams","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/teams","href":"/api-reference/teams/user-teams"}]},{"group":"Third-Party Integrations","pages":[{"title":"Get list of existing integrations for a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/integrations","href":"/api-reference/third-party-integrations/get-list-of-existing-integrations-for-a-project"},{"title":"Integrate project with a third-party service","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{projectId}/integrations","href":"/api-reference/third-party-integrations/integrate-project-with-a-third-party-service"},{"title":"Get information about an existing third-party integration","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{projectId}/integrations/{integrationId}","href":"/api-reference/third-party-integrations/get-information-about-an-existing-third-party-integration"},{"title":"Delete an existing third-party integration","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{projectId}/integrations/{integrationId}","href":"/api-reference/third-party-integrations/delete-an-existing-third-party-integration"},{"title":"Update an existing third-party integration","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{projectId}/integrations/{integrationId}","href":"/api-reference/third-party-integrations/update-an-existing-third-party-integration"}]},{"group":"User Access","pages":[{"title":"List user access for a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{project_id}/user-access","href":"/api-reference/user-access/list-user-access-for-a-project"},{"title":"Grant user access to a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /projects/{project_id}/user-access","href":"/api-reference/user-access/grant-user-access-to-a-project"},{"title":"Get user access for a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /projects/{project_id}/user-access/{user_id}","href":"/api-reference/user-access/get-user-access-for-a-project"},{"title":"Remove user access for a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /projects/{project_id}/user-access/{user_id}","href":"/api-reference/user-access/remove-user-access-for-a-project"},{"title":"Update user access for a project","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /projects/{project_id}/user-access/{user_id}","href":"/api-reference/user-access/update-user-access-for-a-project"},{"title":"List project access for a user","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/project-access","href":"/api-reference/user-access/list-project-access-for-a-user"},{"title":"Grant project access to a user","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /users/{user_id}/project-access","href":"/api-reference/user-access/grant-project-access-to-a-user"},{"title":"Get project access for a user","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}/project-access/{project_id}","href":"/api-reference/user-access/get-project-access-for-a-user"},{"title":"Remove project access for a user","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /users/{user_id}/project-access/{project_id}","href":"/api-reference/user-access/remove-project-access-for-a-user"},{"title":"Update project access for a user","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /users/{user_id}/project-access/{project_id}","href":"/api-reference/user-access/update-project-access-for-a-user"}]},{"group":"User Profiles","pages":[{"title":"List user profiles","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /profiles","href":"/api-reference/user-profiles/list-user-profiles"},{"title":"Get a single user profile","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /profiles/{userId}","href":"/api-reference/user-profiles/get-a-single-user-profile"},{"title":"Update a user profile","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /profiles/{userId}","href":"/api-reference/user-profiles/update-a-user-profile"},{"title":"Get a user address","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /profiles/{userId}/address","href":"/api-reference/user-profiles/get-a-user-address"},{"title":"Update a user address","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /profiles/{userId}/address","href":"/api-reference/user-profiles/update-a-user-address"},{"title":"Create a user profile picture","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /profile/{uuid}/picture","href":"/api-reference/user-profiles/create-a-user-profile-picture"},{"title":"Delete a user profile picture","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec delete /profile/{uuid}/picture","href":"/api-reference/user-profiles/delete-a-user-profile-picture"}]},{"group":"Users","pages":[{"title":"Get current logged-in user info","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /me","href":"/api-reference/users/get-current-logged-in-user-info"},{"title":"Check if phone verification is required","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /me/phone","href":"/api-reference/users/check-if-phone-verification-is-required"},{"title":"Check if verification is required","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /me/verification","href":"/api-reference/users/check-if-verification-is-required"},{"title":"Get the current user","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/me","href":"/api-reference/users/get-the-current-user"},{"title":"Get a user by email","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/email={email}","href":"/api-reference/users/get-a-user-by-email"},{"title":"Get a user by username","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/username={username}","href":"/api-reference/users/get-a-user-by-username"},{"title":"Get a user","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /users/{user_id}","href":"/api-reference/users/get-a-user"},{"title":"Update a user","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec patch /users/{user_id}","href":"/api-reference/users/update-a-user"},{"title":"Reset email address","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /users/{user_id}/emailaddress","href":"/api-reference/users/reset-email-address"},{"title":"Reset user password","deprecated":null,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /users/{user_id}/resetpassword","href":"/api-reference/users/reset-user-password"}]},{"group":"Vouchers","pages":[{"title":"List vouchers","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec get /organizations/{organization_id}/vouchers","href":"/api-reference/vouchers/list-vouchers"},{"title":"Apply voucher","deprecated":true,"version":null,"openapi":"https://meta.upsun.com/openapi-spec post /organizations/{organization_id}/vouchers/apply","href":"/api-reference/vouchers/apply-voucher"}]}]}]},{"anchor":"CLI","icon":"terminal","pages":[{"title":"Upsun Cloud CLI","sidebarTitle":"CLI Home","icon":"terminal","mode":"custom","href":"/cli/index"},{"group":"Getting started","icon":"rocket","pages":[{"title":"Install the Upsun Cloud CLI","sidebarTitle":"Install","href":"/cli/install"},{"title":"Use the Upsun Cloud CLI","sidebarTitle":"Use","href":"/cli/use"},{"title":"Authenticate the Upsun Cloud CLI using an API token","sidebarTitle":"API tokens","href":"/cli/api-tokens"},{"title":"Initialize a project","href":"/cli/init"}]},{"group":"Reference","icon":"book-open","pages":[{"title":"CLI Command reference","sidebarTitle":"Command reference","href":"/cli/reference"},{"title":"AI coding agents","sidebarTitle":"AI coding agents","href":"/cli/ai-coding-agents"}]}]},{"anchor":"Changelog","icon":"scroll-text","pages":[{"title":"Changelog","href":"/changelog"}]}]},{"tab":"Blog","icon":"newspaper","pages":[{"title":"Blog","sidebarTitle":"Blog overview","icon":"newspaper","mode":"custom","href":"/posts"},{"group":"Articles","icon":"newspaper","pages":[{"title":"All Articles","sidebarTitle":"All","mode":"wide","href":"/posts/articles/index"},{"title":"Artificial Intelligence","sidebarTitle":"AI","mode":"wide","href":"/posts/articles/ai"},{"title":"How It Works","sidebarTitle":"How It Works","mode":"wide","href":"/posts/articles/how-it-works"},{"title":"How-Tos","sidebarTitle":"How-Tos","mode":"wide","href":"/posts/articles/how-tos"},{"title":"Insights","sidebarTitle":"Insights","mode":"wide","href":"/posts/articles/insights"},{"title":"Releases","sidebarTitle":"Releases","mode":"wide","href":"/posts/articles/releases"},{"title":"Hands-On","sidebarTitle":"Hands-On","mode":"wide","href":"/posts/articles/hands-on"}]}]},{"tab":"AI","icon":"sparkles","pages":[{"mode":"custom","title":"AI on Upsun","href":"/ai"},{"group":"MCP","root":{"title":"Overview","icon":"book-open","sidebarTitle":"Overview","tag":"New","href":"/ai/mcp/overview"},"pages":[{"title":"Upsun MCP on Cursor","sidebarTitle":"Cursor","href":"/ai/mcp/integrations/cursor"},{"title":"Upsun MCP on VSCode","sidebarTitle":"VSCode","href":"/ai/mcp/integrations/vscode"},{"title":"Upsun MCP on your Agent","sidebarTitle":"Other","href":"/ai/mcp/integrations/all"}]},{"group":"Onboarding","root":{"title":"Overview","icon":"book-open","sidebarTitle":"Overview","tag":"New","href":"/ai/onboarding/overview"},"pages":[{"title":"Setup","sidebarTitle":"Setup","href":"/ai/onboarding/setup"},{"title":"Best Practices","sidebarTitle":"Best Practices","href":"/ai/onboarding/best-practices"}]}]}]},"basePath":"","title":"Florian Margaine - Upsun Developer","buildId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","deploymentId":"dpl_41S5Z2jG9QnfDRwN1KZrLdBwj7DM","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-CMHgNu49.js","lightbox-handle-r17bVUz3.js"]}