From 59556d88866b62fa7091e022869a5b5cb50fa7ef Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 20:22:41 +0000 Subject: [PATCH] deploy: d8cbffa8c03afe7676e6f1d4e1cb3b0b798232c8 --- 404.html | 2 +- assets/js/8ad4811d.241ae99a.js | 1 + assets/js/8ad4811d.cf78ded4.js | 1 - assets/js/b2f554cd.688862fe.js | 1 - assets/js/b2f554cd.d3168130.js | 1 + assets/js/fc03b22f.12f50ff3.js | 1 + assets/js/fc03b22f.1f91bdd5.js | 1 - .../{runtime~main.a89dcf8a.js => runtime~main.a280dc7d.js} | 2 +- blog/2016/02/26/a-case-for-soa-in-the-browser/index.html | 2 +- .../12/16/a-step-by-step-guide-to-single-spa/index.html | 2 +- blog/2018/06/19/single-spa-parcels-explained/index.html | 2 +- blog/2019/02/20/single-spa-inspector/index.html | 2 +- blog/2020/02/24/single-spa-5/index.html | 2 +- blog/2023/08/22/single-spa-core-is-expanding/index.html | 2 +- .../introducing-single-spa-new-core-team-members/index.html | 2 +- blog/2023/11/07/core-team-meeting-notes/index.html | 2 +- blog/2023/11/27/single-spa-6/index.html | 2 +- blog/2023/12/12/core-team-meeting-notes/index.html | 2 +- blog/2024/01/03/core-team-meeting-notes/index.html | 2 +- blog/2024/02/14/core-team-meeting-notes/index.html | 2 +- blog/2024/03/12/core-team-meeting-notes/index.html | 2 +- .../03/18/top-5-microfrontend-hosting-solutions/index.html | 6 +++--- blog/archive/index.html | 2 +- blog/atom.xml | 4 ---- blog/index.html | 4 ++-- blog/page/2/index.html | 2 +- contributors/index.html | 2 +- docs/4.x/api/index.html | 2 +- docs/4.x/building-applications/index.html | 2 +- docs/4.x/code-of-conduct/index.html | 2 +- docs/4.x/configuration/index.html | 2 +- docs/4.x/contributing-overview/index.html | 2 +- docs/4.x/ecosystem-angular/index.html | 2 +- docs/4.x/ecosystem-angularjs/index.html | 2 +- docs/4.x/ecosystem-backbone/index.html | 2 +- docs/4.x/ecosystem-cycle/index.html | 2 +- docs/4.x/ecosystem-ember/index.html | 2 +- docs/4.x/ecosystem-html-web-components/index.html | 2 +- docs/4.x/ecosystem-inferno/index.html | 2 +- docs/4.x/ecosystem-leaked-globals/index.html | 2 +- docs/4.x/ecosystem-preact/index.html | 2 +- docs/4.x/ecosystem-react/index.html | 2 +- docs/4.x/ecosystem-riot/index.html | 2 +- docs/4.x/ecosystem-svelte/index.html | 2 +- docs/4.x/ecosystem-vue/index.html | 2 +- docs/4.x/ecosystem/index.html | 2 +- docs/4.x/examples/index.html | 2 +- docs/4.x/faq/index.html | 2 +- docs/4.x/getting-started-overview/index.html | 2 +- docs/4.x/glossary/index.html | 2 +- docs/4.x/migrating-angularJS-tutorial/index.html | 2 +- docs/4.x/migrating-existing-spas/index.html | 2 +- docs/4.x/migrating-react-tutorial/index.html | 2 +- docs/4.x/parcels-api/index.html | 2 +- docs/4.x/parcels-overview/index.html | 2 +- docs/4.x/separating-applications/index.html | 2 +- docs/4.x/starting-from-scratch/index.html | 2 +- docs/5.x/api/index.html | 2 +- docs/5.x/building-applications/index.html | 2 +- docs/5.x/code-of-conduct/index.html | 2 +- docs/5.x/configuration/index.html | 2 +- docs/5.x/contributing-overview/index.html | 2 +- docs/5.x/create-single-spa/index.html | 2 +- docs/5.x/devtools/index.html | 2 +- docs/5.x/ecosystem-alpinejs/index.html | 2 +- docs/5.x/ecosystem-angular/index.html | 2 +- docs/5.x/ecosystem-angularjs/index.html | 2 +- docs/5.x/ecosystem-backbone/index.html | 2 +- docs/5.x/ecosystem-css/index.html | 2 +- docs/5.x/ecosystem-cycle/index.html | 2 +- docs/5.x/ecosystem-dojo/index.html | 2 +- docs/5.x/ecosystem-ember/index.html | 2 +- docs/5.x/ecosystem-html-web-components/index.html | 2 +- docs/5.x/ecosystem-inferno/index.html | 2 +- docs/5.x/ecosystem-leaked-globals/index.html | 2 +- docs/5.x/ecosystem-preact/index.html | 2 +- docs/5.x/ecosystem-react/index.html | 2 +- docs/5.x/ecosystem-riot/index.html | 2 +- docs/5.x/ecosystem-snowpack/index.html | 2 +- docs/5.x/ecosystem-svelte/index.html | 2 +- docs/5.x/ecosystem-vite/index.html | 2 +- docs/5.x/ecosystem-vue/index.html | 2 +- docs/5.x/ecosystem/index.html | 2 +- docs/5.x/examples/index.html | 2 +- docs/5.x/faq/index.html | 2 +- docs/5.x/getting-started-overview/index.html | 2 +- docs/5.x/glossary/index.html | 2 +- docs/5.x/layout-api/index.html | 2 +- docs/5.x/layout-definition/index.html | 2 +- docs/5.x/layout-overview/index.html | 2 +- docs/5.x/microfrontends-concept/index.html | 2 +- docs/5.x/migrating-existing-spas/index.html | 2 +- docs/5.x/module-types/index.html | 2 +- docs/5.x/parcels-api/index.html | 2 +- docs/5.x/parcels-overview/index.html | 2 +- docs/5.x/recommended-setup/index.html | 2 +- docs/5.x/separating-applications/index.html | 2 +- docs/5.x/shared-webpack-configs/index.html | 2 +- docs/5.x/single-spa-playground/index.html | 2 +- docs/5.x/ssr-overview/index.html | 2 +- docs/5.x/testing/e2e/index.html | 2 +- docs/5.x/testing/units/index.html | 2 +- docs/5.x/videos/index.html | 2 +- docs/api/index.html | 2 +- docs/building-applications/index.html | 2 +- docs/code-of-conduct/index.html | 2 +- docs/configuration/index.html | 2 +- docs/contributing-overview/index.html | 2 +- docs/create-single-spa/index.html | 2 +- docs/devtools/index.html | 2 +- docs/ecosystem-alpinejs/index.html | 2 +- docs/ecosystem-angular/index.html | 2 +- docs/ecosystem-angularjs/index.html | 2 +- docs/ecosystem-backbone/index.html | 2 +- docs/ecosystem-css/index.html | 2 +- docs/ecosystem-cycle/index.html | 2 +- docs/ecosystem-dojo/index.html | 2 +- docs/ecosystem-ember/index.html | 2 +- docs/ecosystem-html-web-components/index.html | 2 +- docs/ecosystem-inferno/index.html | 2 +- docs/ecosystem-leaked-globals/index.html | 2 +- docs/ecosystem-preact/index.html | 2 +- docs/ecosystem-react/index.html | 2 +- docs/ecosystem-riot/index.html | 2 +- docs/ecosystem-snowpack/index.html | 2 +- docs/ecosystem-svelte/index.html | 2 +- docs/ecosystem-vite/index.html | 2 +- docs/ecosystem-vue/index.html | 2 +- docs/ecosystem/index.html | 2 +- docs/examples/index.html | 2 +- docs/faq/index.html | 2 +- docs/getting-started-overview/index.html | 2 +- docs/glossary/index.html | 2 +- docs/index.html | 2 +- docs/layout-api/index.html | 2 +- docs/layout-definition/index.html | 2 +- docs/layout-overview/index.html | 2 +- docs/microfrontends-concept/index.html | 2 +- docs/migrating-existing-spas/index.html | 2 +- docs/module-types/index.html | 2 +- docs/next/index.html | 2 +- docs/parcels-api/index.html | 2 +- docs/parcels-overview/index.html | 2 +- docs/recommended-setup/index.html | 2 +- docs/separating-applications/index.html | 2 +- docs/shared-webpack-configs/index.html | 2 +- docs/single-spa-playground/index.html | 2 +- docs/ssr-overview/index.html | 2 +- docs/testing/e2e/index.html | 2 +- docs/testing/units/index.html | 2 +- docs/videos/index.html | 2 +- error/index.html | 2 +- help/index.html | 2 +- index.html | 2 +- languages/index.html | 2 +- privacy/single-spa-inspector-privacy-policy/index.html | 2 +- search/index.html | 2 +- sponsors/index.html | 2 +- users/index.html | 2 +- versions/index.html | 2 +- 160 files changed, 159 insertions(+), 163 deletions(-) create mode 100644 assets/js/8ad4811d.241ae99a.js delete mode 100644 assets/js/8ad4811d.cf78ded4.js delete mode 100644 assets/js/b2f554cd.688862fe.js create mode 100644 assets/js/b2f554cd.d3168130.js create mode 100644 assets/js/fc03b22f.12f50ff3.js delete mode 100644 assets/js/fc03b22f.1f91bdd5.js rename assets/js/{runtime~main.a89dcf8a.js => runtime~main.a280dc7d.js} (98%) diff --git a/404.html b/404.html index 2478d7557..bf4e5a643 100644 --- a/404.html +++ b/404.html @@ -14,7 +14,7 @@ - + diff --git a/assets/js/8ad4811d.241ae99a.js b/assets/js/8ad4811d.241ae99a.js new file mode 100644 index 000000000..5b7d54028 --- /dev/null +++ b/assets/js/8ad4811d.241ae99a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3904],{7203:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>a});var i=s(4848),t=s(8453);const r={title:"Top 5 Microfrontend Hosting Solutions"},o="Top 5 Microfrontend Hosting Solutions",l={permalink:"/blog/2024/03/18/top-5-microfrontend-hosting-solutions",source:"@site/blog/2024-03-18-top-5-microfrontend-hosting-solutions.md",title:"Top 5 Microfrontend Hosting Solutions",description:"With rapid growth in recent years, microfrontends have become a popular solution with many companies, from large software organizations to small independent dev teams. Microfrontend hosting can get complicated quickly but it is a crucial aspect of scaling software organizations' development cycle. Whether companies are using single-spa, module federation, or any other microfrontends tools, the management of CI/CD pipelines, deployments, CDNs, and service discovery is something all companies will have to solve.",date:"2024-03-18T00:00:00.000Z",formattedDate:"March 18, 2024",tags:[],readingTime:7.18,hasTruncateMarker:!1,authors:[],frontMatter:{title:"Top 5 Microfrontend Hosting Solutions"},unlisted:!1,nextItem:{title:"March 2024 Core Team Meeting",permalink:"/blog/2024/03/12/core-team-meeting-notes"}},d={authorsImageUrls:[]},a=[{value:"Server-side versus client-side rendering",id:"server-side-versus-client-side-rendering",level:2},{value:"Low-level vs high-level hosting solutions",id:"low-level-vs-high-level-hosting-solutions",level:2},{value:"Solution comparison",id:"solution-comparison",level:2},{value:"1. Baseplate Cloud",id:"1-baseplate-cloud",level:2},{value:"2. Zephyr Cloud",id:"2-zephyr-cloud",level:2},{value:"3. AWS S3 + Cloudfront",id:"3-aws-s3--cloudfront",level:2},{value:"4. GCP Storage + Cloud CDN",id:"4-gcp-storage--cloud-cdn",level:2},{value:"5. Azure Storage + CDN",id:"5-azure-storage--cdn",level:2}];function c(e){const n={a:"a",code:"code",em:"em",h2:"h2",li:"li",ol:"ol",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"With rapid growth in recent years, microfrontends have become a popular solution with many companies, from large software organizations to small independent dev teams. Microfrontend hosting can get complicated quickly but it is a crucial aspect of scaling software organizations' development cycle. Whether companies are using single-spa, module federation, or any other microfrontends tools, the management of CI/CD pipelines, deployments, CDNs, and service discovery is something all companies will have to solve."}),"\n",(0,i.jsx)(n.p,{children:"So what\u2019s the most effective solution? Because microfrontend hosting is a relatively new space, most companies have a hard time knowing where to start. Fortunately, there are very good options out there, and unless you have a good reason to, you don\u2019t have to build it out yourself. Here you\u2019ll find a list of the best hosting solutions and the important factors you\u2019ll need to consider to make the decision."}),"\n",(0,i.jsx)(n.h2,{id:"server-side-versus-client-side-rendering",children:"Server-side versus client-side rendering"}),"\n",(0,i.jsxs)(n.p,{children:["This article focuses on hosting solutions for client-side rendered microfrontends, since the majority of microfrontend implementations rely solely on ",(0,i.jsx)(n.a,{href:"https://ferie.medium.com/what-is-the-client-side-rendering-and-how-it-works-c90210e2cd14",children:"client-side rendering"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://www.heavy.ai/technical-glossary/server-side-rendering",children:"Server-side rendering"})," of microfrontends often involves one or more docker containers that run ",(0,i.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Node.js",children:"NodeJS"})," to render ",(0,i.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/React_(software)",children:"React"}),", ",(0,i.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Angular_(web_framework)",children:"Angular"}),", or ",(0,i.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Vue.js",children:"Vue"})," applications. For optimal performance, ",(0,i.jsx)(n.a,{href:"/docs/ssr-overview",children:"single-spa server rendering"})," also supports a single NodeJS runtime (rather than network requests between docker containers)."]}),"\n",(0,i.jsx)(n.p,{children:"If your organization uses server-side rendering, the following rankings will still apply but may require some additional consideration that isn\u2019t covered here."}),"\n",(0,i.jsx)(n.h2,{id:"low-level-vs-high-level-hosting-solutions",children:"Low-level vs high-level hosting solutions"}),"\n",(0,i.jsx)(n.p,{children:"Hosting microfrontends can be accomplished with lower-level cloud services (AWS, GCP, Azure, etc) or via microfrontend-specific cloud hosting solutions such as Baseplate Cloud and Zephyr Cloud. Lower-level services may be more affordable but require much more initial setup and ongoing maintenance. Higher-level microfrontend hosting solutions provide targeted features to streamline the hosting and development process."}),"\n",(0,i.jsx)(n.p,{children:"Companies who wish for sensible defaults and a straightforward implementation path may choose higher-level hosting solutions to save on DevOps and system admin costs. The additional built-in features of higher-level hosting solutions often reduce implementation time for companies migrating to or starting with microfrontends."}),"\n",(0,i.jsx)(n.h2,{id:"solution-comparison",children:"Solution comparison"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{}),(0,i.jsx)(n.th,{children:(0,i.jsx)(n.a,{href:"https://baseplate.cloud",children:"Baseplate Cloud"})}),(0,i.jsx)(n.th,{children:(0,i.jsx)(n.a,{href:"https://zephyr-cloud.io/",children:"Zephyr Cloud"})}),(0,i.jsx)(n.th,{children:(0,i.jsx)(n.a,{href:"https://aws.amazon.com/blogs/networking-and-content-delivery/amazon-s3-amazon-cloudfront-a-match-made-in-the-cloud/",children:"S3 + Cloudfront"})}),(0,i.jsx)(n.th,{children:(0,i.jsx)(n.a,{href:"https://cloud.google.com/cdn/docs/overview",children:"GCP Storage + Cloud CDN"})}),(0,i.jsx)(n.th,{children:(0,i.jsx)(n.a,{href:"https://learn.microsoft.com/en-us/azure/cdn/cdn-create-a-storage-account-with-cdn",children:"Azure Storage + CDN"})})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Global availability"}),(0,i.jsx)(n.td,{children:"\u2713 (via Cloudflare)"}),(0,i.jsx)(n.td,{children:"\u2713 (Cloudflare / Netlify)"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:["Web app hosting ",(0,i.jsx)("sup",{children:"1"})]}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:["Environments support ",(0,i.jsx)("sup",{children:"2"})]}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"(manual)"}),(0,i.jsx)(n.td,{children:"(manual)"}),(0,i.jsx)(n.td,{children:"(manual)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:["Autogenerated CI pipelines ",(0,i.jsx)("sup",{children:"3"})]}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"(planned)"}),(0,i.jsx)(n.td,{children:"\u2717"}),(0,i.jsx)(n.td,{children:"\u2717"}),(0,i.jsx)(n.td,{children:"\u2717"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Automated microfrontend creation"}),(0,i.jsx)(n.td,{children:"\u2713 (via API and CLI)"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"(manual)"}),(0,i.jsx)(n.td,{children:"(manual)"}),(0,i.jsx)(n.td,{children:"(manual)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Custom domains"}),(0,i.jsx)(n.td,{children:"\u2713 (via DNS records)"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:["Route / layout management ",(0,i.jsx)("sup",{children:"4"})]}),(0,i.jsxs)(n.td,{children:["\u2713 (",(0,i.jsx)(n.a,{href:"/docs/layout-definition",children:"single-spa-layout template"}),")"]}),(0,i.jsx)(n.td,{children:"(manual)"}),(0,i.jsx)(n.td,{children:"(manual)"}),(0,i.jsx)(n.td,{children:"(manual)"}),(0,i.jsx)(n.td,{children:"(manual)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:["Self-owned assets storage ",(0,i.jsx)("sup",{children:"5"})]}),(0,i.jsx)(n.td,{children:"\u2713 (optional bring-your-own-s3-bucket)"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:["Edge-side HTML rendering optimizations ",(0,i.jsx)("sup",{children:"6"})]}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"(planned)"}),(0,i.jsx)(n.td,{children:"\u2717"}),(0,i.jsx)(n.td,{children:"\u2717"}),(0,i.jsx)(n.td,{children:"\u2717"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:["Service discovery ",(0,i.jsx)("sup",{children:"7"})]}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"(manual)"}),(0,i.jsx)(n.td,{children:"(manual)"}),(0,i.jsx)(n.td,{children:"(manual)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"CORS / CSP / Cache Control"}),(0,i.jsx)(n.td,{children:"\u2713 (sensible defaults, fully customizable)"}),(0,i.jsx)(n.td,{children:"(planned)"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Usage metrics"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"(planned)"}),(0,i.jsx)(n.td,{children:"(manual)"}),(0,i.jsx)(n.td,{children:"(manual)"}),(0,i.jsx)(n.td,{children:"(manual)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:["Full audit trail ",(0,i.jsx)("sup",{children:"8"})]}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"(manual)"}),(0,i.jsx)(n.td,{children:"(manual)"}),(0,i.jsx)(n.td,{children:"(manual)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Permissions management"}),(0,i.jsx)(n.td,{children:"\u2713 (comprehensive, including microfrontend ownership)"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"\u2713"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:["Shared dependency management ",(0,i.jsx)("sup",{children:"9"})]}),(0,i.jsx)(n.td,{children:"(planned)"}),(0,i.jsx)(n.td,{children:"\u2713"}),(0,i.jsx)(n.td,{children:"(manual)"}),(0,i.jsx)(n.td,{children:"(manual)"}),(0,i.jsx)(n.td,{children:"(manual)"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Server rendering support"}),(0,i.jsx)(n.td,{children:"(planned)"}),(0,i.jsx)(n.td,{children:"(planned)"}),(0,i.jsx)(n.td,{children:"\u2717"}),(0,i.jsx)(n.td,{children:"\u2717"}),(0,i.jsx)(n.td,{children:"\u2717"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:["Microfrontend marketplace ",(0,i.jsx)("sup",{children:"10"})]}),(0,i.jsx)(n.td,{children:"(planned)"}),(0,i.jsx)(n.td,{children:"(planned)"}),(0,i.jsx)(n.td,{children:"\u2717"}),(0,i.jsx)(n.td,{children:"\u2717"}),(0,i.jsx)(n.td,{children:"\u2717"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsxs)(n.td,{children:["Rolling deployments ",(0,i.jsx)("sup",{children:"11"})]}),(0,i.jsx)(n.td,{children:"(planned)"}),(0,i.jsx)(n.td,{children:"(planned)"}),(0,i.jsx)(n.td,{children:"\u2717"}),(0,i.jsx)(n.td,{children:"\u2717"}),(0,i.jsx)(n.td,{children:"\u2717"})]})]})]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.em,{children:"Web apps hosting"})," refers to hosting the parent/root HTML file that initializes the microfrontends necessary for client-side rendering."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.em,{children:"Environment support"})," refers to hosting each microfrontend and web app on both internal test environments and live production environments. CI/CD Pipelines are configured to deploy to environments sequentially."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.em,{children:"Auto-generated CI pipelines"})," refers to generating configuration files for ",(0,i.jsx)(n.a,{href:"https://docs.github.com/en/actions/using-workflows",children:"Github workflow"}),", ",(0,i.jsx)(n.a,{href:"https://azure.microsoft.com/en-us/products/devops/pipelines",children:"Azure Pipelines"}),", ",(0,i.jsx)(n.a,{href:"https://docs.gitlab.com/ee/ci/",children:"Gitlab CI"})," and other CI/CD tools."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.em,{children:"Route / layout management"})," refers to managing the in-browser URL routes and DOM layout for microfrontends."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.em,{children:"Self-owned assets storage"})," refers to JS, CSS, HTML, font, and image files being stored within a bucket owned by the company implementing microfrontends, rather than by cloud hosting service."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.em,{children:"Edge-side HTML rendering optimizations"})," refers to dynamically changing the HTML file for a web app via code that runs in ",(0,i.jsx)(n.a,{href:"https://www.macrometa.com/articles/what-is-edge-side-rendering",children:"edge locations"}),". Since edge locations are physically closer to most users than an origin server, this provides maximum performance beneifts. Performance benefits include inlining import maps, ",(0,i.jsx)(n.code,{children:""}),", and ",(0,i.jsx)(n.code,{children:" - + diff --git a/blog/2016/12/16/a-step-by-step-guide-to-single-spa/index.html b/blog/2016/12/16/a-step-by-step-guide-to-single-spa/index.html index c82846b0a..4343b7ca8 100644 --- a/blog/2016/12/16/a-step-by-step-guide-to-single-spa/index.html +++ b/blog/2016/12/16/a-step-by-step-guide-to-single-spa/index.html @@ -14,7 +14,7 @@ - + diff --git a/blog/2018/06/19/single-spa-parcels-explained/index.html b/blog/2018/06/19/single-spa-parcels-explained/index.html index e2c98ab2b..353bd7b9b 100644 --- a/blog/2018/06/19/single-spa-parcels-explained/index.html +++ b/blog/2018/06/19/single-spa-parcels-explained/index.html @@ -14,7 +14,7 @@ - + diff --git a/blog/2019/02/20/single-spa-inspector/index.html b/blog/2019/02/20/single-spa-inspector/index.html index b1efe5261..9fb562e57 100644 --- a/blog/2019/02/20/single-spa-inspector/index.html +++ b/blog/2019/02/20/single-spa-inspector/index.html @@ -14,7 +14,7 @@ - + diff --git a/blog/2020/02/24/single-spa-5/index.html b/blog/2020/02/24/single-spa-5/index.html index 50e581246..dc16ec494 100644 --- a/blog/2020/02/24/single-spa-5/index.html +++ b/blog/2020/02/24/single-spa-5/index.html @@ -14,7 +14,7 @@ - + diff --git a/blog/2023/08/22/single-spa-core-is-expanding/index.html b/blog/2023/08/22/single-spa-core-is-expanding/index.html index 1ce09df1c..612084100 100644 --- a/blog/2023/08/22/single-spa-core-is-expanding/index.html +++ b/blog/2023/08/22/single-spa-core-is-expanding/index.html @@ -14,7 +14,7 @@ - + diff --git a/blog/2023/10/11/introducing-single-spa-new-core-team-members/index.html b/blog/2023/10/11/introducing-single-spa-new-core-team-members/index.html index 4168425ca..2c63dffdf 100644 --- a/blog/2023/10/11/introducing-single-spa-new-core-team-members/index.html +++ b/blog/2023/10/11/introducing-single-spa-new-core-team-members/index.html @@ -14,7 +14,7 @@ - + diff --git a/blog/2023/11/07/core-team-meeting-notes/index.html b/blog/2023/11/07/core-team-meeting-notes/index.html index d18274241..b3f902c01 100644 --- a/blog/2023/11/07/core-team-meeting-notes/index.html +++ b/blog/2023/11/07/core-team-meeting-notes/index.html @@ -14,7 +14,7 @@ - + diff --git a/blog/2023/11/27/single-spa-6/index.html b/blog/2023/11/27/single-spa-6/index.html index 4f92f7636..587a5104e 100644 --- a/blog/2023/11/27/single-spa-6/index.html +++ b/blog/2023/11/27/single-spa-6/index.html @@ -14,7 +14,7 @@ - + diff --git a/blog/2023/12/12/core-team-meeting-notes/index.html b/blog/2023/12/12/core-team-meeting-notes/index.html index 4d3f4d00c..f86c6e0c5 100644 --- a/blog/2023/12/12/core-team-meeting-notes/index.html +++ b/blog/2023/12/12/core-team-meeting-notes/index.html @@ -14,7 +14,7 @@ - + diff --git a/blog/2024/01/03/core-team-meeting-notes/index.html b/blog/2024/01/03/core-team-meeting-notes/index.html index fa2f24b72..441fa7e34 100644 --- a/blog/2024/01/03/core-team-meeting-notes/index.html +++ b/blog/2024/01/03/core-team-meeting-notes/index.html @@ -14,7 +14,7 @@ - + diff --git a/blog/2024/02/14/core-team-meeting-notes/index.html b/blog/2024/02/14/core-team-meeting-notes/index.html index 35c9d4bd8..d746a91e3 100644 --- a/blog/2024/02/14/core-team-meeting-notes/index.html +++ b/blog/2024/02/14/core-team-meeting-notes/index.html @@ -14,7 +14,7 @@ - + diff --git a/blog/2024/03/12/core-team-meeting-notes/index.html b/blog/2024/03/12/core-team-meeting-notes/index.html index fb59b751f..9dc6ac1cf 100644 --- a/blog/2024/03/12/core-team-meeting-notes/index.html +++ b/blog/2024/03/12/core-team-meeting-notes/index.html @@ -14,7 +14,7 @@ - + diff --git a/blog/2024/03/18/top-5-microfrontend-hosting-solutions/index.html b/blog/2024/03/18/top-5-microfrontend-hosting-solutions/index.html index cf5cc4e5e..2dcf841c6 100644 --- a/blog/2024/03/18/top-5-microfrontend-hosting-solutions/index.html +++ b/blog/2024/03/18/top-5-microfrontend-hosting-solutions/index.html @@ -3,7 +3,7 @@ -Top 5 Microfrontend Hosting Solutions | single-spa +Top 5 Microfrontend Hosting Solutions | single-spa @@ -14,11 +14,11 @@ - + -
Skip to main content

Top 5 Microfrontend Hosting Solutions

· 8 min read

With rapid growth in recent years, microfrontends have become a popular solution with many companies, from large software organizations to small independent dev teams. Microfrontend hosting can get complicated quickly but it is a crucial aspect of scaling software organizations' development cycle. Whether companies are using single-spa, module federation, or any other microfrontends tools, the management of CI/CD pipelines, deployments, CDNs, and service discovery is something all companies will have to solve.

+

Top 5 Microfrontend Hosting Solutions

· 8 min read

With rapid growth in recent years, microfrontends have become a popular solution with many companies, from large software organizations to small independent dev teams. Microfrontend hosting can get complicated quickly but it is a crucial aspect of scaling software organizations' development cycle. Whether companies are using single-spa, module federation, or any other microfrontends tools, the management of CI/CD pipelines, deployments, CDNs, and service discovery is something all companies will have to solve.

So what’s the most effective solution? Because microfrontend hosting is a relatively new space, most companies have a hard time knowing where to start. Fortunately, there are very good options out there, and unless you have a good reason to, you don’t have to build it out yourself. Here you’ll find a list of the best hosting solutions and the important factors you’ll need to consider to make the decision.

Server-side versus client-side rendering​

This article focuses on hosting solutions for client-side rendered microfrontends, since the majority of microfrontend implementations rely solely on client-side rendering.

diff --git a/blog/archive/index.html b/blog/archive/index.html index e2ed53c72..e2cfb5bd3 100644 --- a/blog/archive/index.html +++ b/blog/archive/index.html @@ -14,7 +14,7 @@ - + diff --git a/blog/atom.xml b/blog/atom.xml index fcd5b755e..4a3366f62 100644 --- a/blog/atom.xml +++ b/blog/atom.xml @@ -63,10 +63,6 @@

Google Cloud Platform provides equivalent low-level cloud services to AWS. The same technical details that apply to AWS S3 + Cloudfront also apply to GCP Cloud Storage and GCP Cloud CDN.

5. Azure Storage + CDN​

Azure Storage provides equivalent low-level cloud services to AWS. The same technical details that apply to AWS S3 + Cloudfront also apply to Azure Storage and GCP Cloud CDN.

]]> - - Joel Denning - https://x.com/joelbdenning - <![CDATA[March 2024 Core Team Meeting]]> diff --git a/blog/index.html b/blog/index.html index 30ece0956..e2634ca67 100644 --- a/blog/index.html +++ b/blog/index.html @@ -14,11 +14,11 @@ - + -

· 8 min read

With rapid growth in recent years, microfrontends have become a popular solution with many companies, from large software organizations to small independent dev teams. Microfrontend hosting can get complicated quickly but it is a crucial aspect of scaling software organizations' development cycle. Whether companies are using single-spa, module federation, or any other microfrontends tools, the management of CI/CD pipelines, deployments, CDNs, and service discovery is something all companies will have to solve.

+

· 8 min read

With rapid growth in recent years, microfrontends have become a popular solution with many companies, from large software organizations to small independent dev teams. Microfrontend hosting can get complicated quickly but it is a crucial aspect of scaling software organizations' development cycle. Whether companies are using single-spa, module federation, or any other microfrontends tools, the management of CI/CD pipelines, deployments, CDNs, and service discovery is something all companies will have to solve.

So what’s the most effective solution? Because microfrontend hosting is a relatively new space, most companies have a hard time knowing where to start. Fortunately, there are very good options out there, and unless you have a good reason to, you don’t have to build it out yourself. Here you’ll find a list of the best hosting solutions and the important factors you’ll need to consider to make the decision.

Server-side versus client-side rendering​

This article focuses on hosting solutions for client-side rendered microfrontends, since the majority of microfrontend implementations rely solely on client-side rendering.

diff --git a/blog/page/2/index.html b/blog/page/2/index.html index 897b5a752..a91483fcb 100644 --- a/blog/page/2/index.html +++ b/blog/page/2/index.html @@ -14,7 +14,7 @@ - + diff --git a/contributors/index.html b/contributors/index.html index d58051724..3411a5b42 100644 --- a/contributors/index.html +++ b/contributors/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/api/index.html b/docs/4.x/api/index.html index 3ae0cf068..2965732da 100644 --- a/docs/4.x/api/index.html +++ b/docs/4.x/api/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/building-applications/index.html b/docs/4.x/building-applications/index.html index c87a8e486..4cc7cef6e 100644 --- a/docs/4.x/building-applications/index.html +++ b/docs/4.x/building-applications/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/code-of-conduct/index.html b/docs/4.x/code-of-conduct/index.html index 9986d97a6..67e6e0cd5 100644 --- a/docs/4.x/code-of-conduct/index.html +++ b/docs/4.x/code-of-conduct/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/configuration/index.html b/docs/4.x/configuration/index.html index af90d6e98..bb146fa5b 100644 --- a/docs/4.x/configuration/index.html +++ b/docs/4.x/configuration/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/contributing-overview/index.html b/docs/4.x/contributing-overview/index.html index 3dc4c2a99..6b8665ddb 100644 --- a/docs/4.x/contributing-overview/index.html +++ b/docs/4.x/contributing-overview/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/ecosystem-angular/index.html b/docs/4.x/ecosystem-angular/index.html index 86e4148ed..c2cb382f1 100644 --- a/docs/4.x/ecosystem-angular/index.html +++ b/docs/4.x/ecosystem-angular/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/ecosystem-angularjs/index.html b/docs/4.x/ecosystem-angularjs/index.html index 3a9c9a2c9..94effdd02 100644 --- a/docs/4.x/ecosystem-angularjs/index.html +++ b/docs/4.x/ecosystem-angularjs/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/ecosystem-backbone/index.html b/docs/4.x/ecosystem-backbone/index.html index 22886e3fb..32c6ecd43 100644 --- a/docs/4.x/ecosystem-backbone/index.html +++ b/docs/4.x/ecosystem-backbone/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/ecosystem-cycle/index.html b/docs/4.x/ecosystem-cycle/index.html index 79c39ca18..a84b0c40d 100644 --- a/docs/4.x/ecosystem-cycle/index.html +++ b/docs/4.x/ecosystem-cycle/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/ecosystem-ember/index.html b/docs/4.x/ecosystem-ember/index.html index 2ff346ef3..8c753a69e 100644 --- a/docs/4.x/ecosystem-ember/index.html +++ b/docs/4.x/ecosystem-ember/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/ecosystem-html-web-components/index.html b/docs/4.x/ecosystem-html-web-components/index.html index 0f95b2829..1eba2ef86 100644 --- a/docs/4.x/ecosystem-html-web-components/index.html +++ b/docs/4.x/ecosystem-html-web-components/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/ecosystem-inferno/index.html b/docs/4.x/ecosystem-inferno/index.html index 6f8c7005c..9543203ac 100644 --- a/docs/4.x/ecosystem-inferno/index.html +++ b/docs/4.x/ecosystem-inferno/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/ecosystem-leaked-globals/index.html b/docs/4.x/ecosystem-leaked-globals/index.html index 4e429825d..5f6ed1343 100644 --- a/docs/4.x/ecosystem-leaked-globals/index.html +++ b/docs/4.x/ecosystem-leaked-globals/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/ecosystem-preact/index.html b/docs/4.x/ecosystem-preact/index.html index 8393f99c0..dc9663db5 100644 --- a/docs/4.x/ecosystem-preact/index.html +++ b/docs/4.x/ecosystem-preact/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/ecosystem-react/index.html b/docs/4.x/ecosystem-react/index.html index e1bb6b273..8de659016 100644 --- a/docs/4.x/ecosystem-react/index.html +++ b/docs/4.x/ecosystem-react/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/ecosystem-riot/index.html b/docs/4.x/ecosystem-riot/index.html index 867a91102..498aa0db2 100644 --- a/docs/4.x/ecosystem-riot/index.html +++ b/docs/4.x/ecosystem-riot/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/ecosystem-svelte/index.html b/docs/4.x/ecosystem-svelte/index.html index 2e790f625..98d64b1e2 100644 --- a/docs/4.x/ecosystem-svelte/index.html +++ b/docs/4.x/ecosystem-svelte/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/ecosystem-vue/index.html b/docs/4.x/ecosystem-vue/index.html index 0334f02fb..54af71f0e 100644 --- a/docs/4.x/ecosystem-vue/index.html +++ b/docs/4.x/ecosystem-vue/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/ecosystem/index.html b/docs/4.x/ecosystem/index.html index 35c8e73db..4f3d505d3 100644 --- a/docs/4.x/ecosystem/index.html +++ b/docs/4.x/ecosystem/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/examples/index.html b/docs/4.x/examples/index.html index b4f5e42d7..501876c21 100644 --- a/docs/4.x/examples/index.html +++ b/docs/4.x/examples/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/faq/index.html b/docs/4.x/faq/index.html index 71314f8a0..9679fef95 100644 --- a/docs/4.x/faq/index.html +++ b/docs/4.x/faq/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/getting-started-overview/index.html b/docs/4.x/getting-started-overview/index.html index ef3ff9d0e..4dae36438 100644 --- a/docs/4.x/getting-started-overview/index.html +++ b/docs/4.x/getting-started-overview/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/glossary/index.html b/docs/4.x/glossary/index.html index ef9482e91..970569146 100644 --- a/docs/4.x/glossary/index.html +++ b/docs/4.x/glossary/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/migrating-angularJS-tutorial/index.html b/docs/4.x/migrating-angularJS-tutorial/index.html index 393edaa25..38211107c 100644 --- a/docs/4.x/migrating-angularJS-tutorial/index.html +++ b/docs/4.x/migrating-angularJS-tutorial/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/migrating-existing-spas/index.html b/docs/4.x/migrating-existing-spas/index.html index 758e6758f..9781bed38 100644 --- a/docs/4.x/migrating-existing-spas/index.html +++ b/docs/4.x/migrating-existing-spas/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/migrating-react-tutorial/index.html b/docs/4.x/migrating-react-tutorial/index.html index c139d24eb..7d166294d 100644 --- a/docs/4.x/migrating-react-tutorial/index.html +++ b/docs/4.x/migrating-react-tutorial/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/parcels-api/index.html b/docs/4.x/parcels-api/index.html index c47988140..d7dfb489e 100644 --- a/docs/4.x/parcels-api/index.html +++ b/docs/4.x/parcels-api/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/parcels-overview/index.html b/docs/4.x/parcels-overview/index.html index fd0cdfd67..d83525ccc 100644 --- a/docs/4.x/parcels-overview/index.html +++ b/docs/4.x/parcels-overview/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/separating-applications/index.html b/docs/4.x/separating-applications/index.html index fdbc5385c..537b4d5e9 100644 --- a/docs/4.x/separating-applications/index.html +++ b/docs/4.x/separating-applications/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/4.x/starting-from-scratch/index.html b/docs/4.x/starting-from-scratch/index.html index 752cbbc91..f61c3849f 100644 --- a/docs/4.x/starting-from-scratch/index.html +++ b/docs/4.x/starting-from-scratch/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/api/index.html b/docs/5.x/api/index.html index f1c7e5257..f77b091ae 100644 --- a/docs/5.x/api/index.html +++ b/docs/5.x/api/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/building-applications/index.html b/docs/5.x/building-applications/index.html index 81c85948f..eafe33cb2 100644 --- a/docs/5.x/building-applications/index.html +++ b/docs/5.x/building-applications/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/code-of-conduct/index.html b/docs/5.x/code-of-conduct/index.html index f881abb7a..c015ea219 100644 --- a/docs/5.x/code-of-conduct/index.html +++ b/docs/5.x/code-of-conduct/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/configuration/index.html b/docs/5.x/configuration/index.html index 9e0406d1a..2490f6040 100644 --- a/docs/5.x/configuration/index.html +++ b/docs/5.x/configuration/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/contributing-overview/index.html b/docs/5.x/contributing-overview/index.html index ed19e4dee..ee7467c8f 100644 --- a/docs/5.x/contributing-overview/index.html +++ b/docs/5.x/contributing-overview/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/create-single-spa/index.html b/docs/5.x/create-single-spa/index.html index 4e1204fa1..7a2cf6e1b 100644 --- a/docs/5.x/create-single-spa/index.html +++ b/docs/5.x/create-single-spa/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/devtools/index.html b/docs/5.x/devtools/index.html index bd932e7b6..76d8aeab8 100644 --- a/docs/5.x/devtools/index.html +++ b/docs/5.x/devtools/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ecosystem-alpinejs/index.html b/docs/5.x/ecosystem-alpinejs/index.html index 7fd7f8fc0..601a8cfdb 100644 --- a/docs/5.x/ecosystem-alpinejs/index.html +++ b/docs/5.x/ecosystem-alpinejs/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ecosystem-angular/index.html b/docs/5.x/ecosystem-angular/index.html index f1186c7b0..c1c9571f0 100644 --- a/docs/5.x/ecosystem-angular/index.html +++ b/docs/5.x/ecosystem-angular/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ecosystem-angularjs/index.html b/docs/5.x/ecosystem-angularjs/index.html index 28813a2bd..177688544 100644 --- a/docs/5.x/ecosystem-angularjs/index.html +++ b/docs/5.x/ecosystem-angularjs/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ecosystem-backbone/index.html b/docs/5.x/ecosystem-backbone/index.html index cd0458996..e4a93d22f 100644 --- a/docs/5.x/ecosystem-backbone/index.html +++ b/docs/5.x/ecosystem-backbone/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ecosystem-css/index.html b/docs/5.x/ecosystem-css/index.html index 01c19b315..aedd8bc13 100644 --- a/docs/5.x/ecosystem-css/index.html +++ b/docs/5.x/ecosystem-css/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ecosystem-cycle/index.html b/docs/5.x/ecosystem-cycle/index.html index 0f0668a8a..eaa6f8bf1 100644 --- a/docs/5.x/ecosystem-cycle/index.html +++ b/docs/5.x/ecosystem-cycle/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ecosystem-dojo/index.html b/docs/5.x/ecosystem-dojo/index.html index 83ed68799..c7a2c91bb 100644 --- a/docs/5.x/ecosystem-dojo/index.html +++ b/docs/5.x/ecosystem-dojo/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ecosystem-ember/index.html b/docs/5.x/ecosystem-ember/index.html index a7d649662..11705e021 100644 --- a/docs/5.x/ecosystem-ember/index.html +++ b/docs/5.x/ecosystem-ember/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ecosystem-html-web-components/index.html b/docs/5.x/ecosystem-html-web-components/index.html index 93d2849b4..79d1ac976 100644 --- a/docs/5.x/ecosystem-html-web-components/index.html +++ b/docs/5.x/ecosystem-html-web-components/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ecosystem-inferno/index.html b/docs/5.x/ecosystem-inferno/index.html index 11be997e7..b447d0291 100644 --- a/docs/5.x/ecosystem-inferno/index.html +++ b/docs/5.x/ecosystem-inferno/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ecosystem-leaked-globals/index.html b/docs/5.x/ecosystem-leaked-globals/index.html index 0d75ee965..c5c8150e8 100644 --- a/docs/5.x/ecosystem-leaked-globals/index.html +++ b/docs/5.x/ecosystem-leaked-globals/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ecosystem-preact/index.html b/docs/5.x/ecosystem-preact/index.html index 8d2ecaa01..d68119f7f 100644 --- a/docs/5.x/ecosystem-preact/index.html +++ b/docs/5.x/ecosystem-preact/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ecosystem-react/index.html b/docs/5.x/ecosystem-react/index.html index da3836956..3c2638bfe 100644 --- a/docs/5.x/ecosystem-react/index.html +++ b/docs/5.x/ecosystem-react/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ecosystem-riot/index.html b/docs/5.x/ecosystem-riot/index.html index e63fa0ce6..cc883f75c 100644 --- a/docs/5.x/ecosystem-riot/index.html +++ b/docs/5.x/ecosystem-riot/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ecosystem-snowpack/index.html b/docs/5.x/ecosystem-snowpack/index.html index c90148295..5d46011d6 100644 --- a/docs/5.x/ecosystem-snowpack/index.html +++ b/docs/5.x/ecosystem-snowpack/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ecosystem-svelte/index.html b/docs/5.x/ecosystem-svelte/index.html index 19cc8118f..a5330a888 100644 --- a/docs/5.x/ecosystem-svelte/index.html +++ b/docs/5.x/ecosystem-svelte/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ecosystem-vite/index.html b/docs/5.x/ecosystem-vite/index.html index fc4dfcaaf..b587599ad 100644 --- a/docs/5.x/ecosystem-vite/index.html +++ b/docs/5.x/ecosystem-vite/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ecosystem-vue/index.html b/docs/5.x/ecosystem-vue/index.html index 157e5a5e3..d27965ba1 100644 --- a/docs/5.x/ecosystem-vue/index.html +++ b/docs/5.x/ecosystem-vue/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ecosystem/index.html b/docs/5.x/ecosystem/index.html index 85d6a5030..cc1d19ae8 100644 --- a/docs/5.x/ecosystem/index.html +++ b/docs/5.x/ecosystem/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/examples/index.html b/docs/5.x/examples/index.html index 89098b84f..93d6a8166 100644 --- a/docs/5.x/examples/index.html +++ b/docs/5.x/examples/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/faq/index.html b/docs/5.x/faq/index.html index 7f868871e..e40fc3f80 100644 --- a/docs/5.x/faq/index.html +++ b/docs/5.x/faq/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/getting-started-overview/index.html b/docs/5.x/getting-started-overview/index.html index 04396d745..a8c89298e 100644 --- a/docs/5.x/getting-started-overview/index.html +++ b/docs/5.x/getting-started-overview/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/glossary/index.html b/docs/5.x/glossary/index.html index ce6b6f6f5..bd6872c48 100644 --- a/docs/5.x/glossary/index.html +++ b/docs/5.x/glossary/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/layout-api/index.html b/docs/5.x/layout-api/index.html index 7b335e3a1..128bd9ab2 100644 --- a/docs/5.x/layout-api/index.html +++ b/docs/5.x/layout-api/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/layout-definition/index.html b/docs/5.x/layout-definition/index.html index f04f9ea00..8b5b41e68 100644 --- a/docs/5.x/layout-definition/index.html +++ b/docs/5.x/layout-definition/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/layout-overview/index.html b/docs/5.x/layout-overview/index.html index a039a7cab..a064b313f 100644 --- a/docs/5.x/layout-overview/index.html +++ b/docs/5.x/layout-overview/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/microfrontends-concept/index.html b/docs/5.x/microfrontends-concept/index.html index 1cd363174..bfc4d19e8 100644 --- a/docs/5.x/microfrontends-concept/index.html +++ b/docs/5.x/microfrontends-concept/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/migrating-existing-spas/index.html b/docs/5.x/migrating-existing-spas/index.html index 53cf028b4..361c0111c 100644 --- a/docs/5.x/migrating-existing-spas/index.html +++ b/docs/5.x/migrating-existing-spas/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/module-types/index.html b/docs/5.x/module-types/index.html index 782ff447c..a4d54401e 100644 --- a/docs/5.x/module-types/index.html +++ b/docs/5.x/module-types/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/parcels-api/index.html b/docs/5.x/parcels-api/index.html index e0d4eb620..61471b208 100644 --- a/docs/5.x/parcels-api/index.html +++ b/docs/5.x/parcels-api/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/parcels-overview/index.html b/docs/5.x/parcels-overview/index.html index cff974f75..069d37277 100644 --- a/docs/5.x/parcels-overview/index.html +++ b/docs/5.x/parcels-overview/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/recommended-setup/index.html b/docs/5.x/recommended-setup/index.html index 11725ef36..463e69449 100644 --- a/docs/5.x/recommended-setup/index.html +++ b/docs/5.x/recommended-setup/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/separating-applications/index.html b/docs/5.x/separating-applications/index.html index c32046d71..a77a41282 100644 --- a/docs/5.x/separating-applications/index.html +++ b/docs/5.x/separating-applications/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/shared-webpack-configs/index.html b/docs/5.x/shared-webpack-configs/index.html index 22fc03226..d48446cb7 100644 --- a/docs/5.x/shared-webpack-configs/index.html +++ b/docs/5.x/shared-webpack-configs/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/single-spa-playground/index.html b/docs/5.x/single-spa-playground/index.html index 741fc0c82..ac9974320 100644 --- a/docs/5.x/single-spa-playground/index.html +++ b/docs/5.x/single-spa-playground/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/ssr-overview/index.html b/docs/5.x/ssr-overview/index.html index f093a6275..6b9e835e7 100644 --- a/docs/5.x/ssr-overview/index.html +++ b/docs/5.x/ssr-overview/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/testing/e2e/index.html b/docs/5.x/testing/e2e/index.html index cb94646e2..1f0180d5d 100644 --- a/docs/5.x/testing/e2e/index.html +++ b/docs/5.x/testing/e2e/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/testing/units/index.html b/docs/5.x/testing/units/index.html index 25cb22da2..2a33c3f60 100644 --- a/docs/5.x/testing/units/index.html +++ b/docs/5.x/testing/units/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/5.x/videos/index.html b/docs/5.x/videos/index.html index 963cc0e15..25964c7c7 100644 --- a/docs/5.x/videos/index.html +++ b/docs/5.x/videos/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/api/index.html b/docs/api/index.html index a42970348..785440a89 100644 --- a/docs/api/index.html +++ b/docs/api/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/building-applications/index.html b/docs/building-applications/index.html index cbbd3d992..bc0de8552 100644 --- a/docs/building-applications/index.html +++ b/docs/building-applications/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/code-of-conduct/index.html b/docs/code-of-conduct/index.html index d37cb341f..040eff0aa 100644 --- a/docs/code-of-conduct/index.html +++ b/docs/code-of-conduct/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/configuration/index.html b/docs/configuration/index.html index 5d7dde533..afe7de236 100644 --- a/docs/configuration/index.html +++ b/docs/configuration/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/contributing-overview/index.html b/docs/contributing-overview/index.html index 6c45c8d70..4847ae388 100644 --- a/docs/contributing-overview/index.html +++ b/docs/contributing-overview/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/create-single-spa/index.html b/docs/create-single-spa/index.html index 76be0ae4c..8591f805b 100644 --- a/docs/create-single-spa/index.html +++ b/docs/create-single-spa/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/devtools/index.html b/docs/devtools/index.html index 520fedda1..bb9f81851 100644 --- a/docs/devtools/index.html +++ b/docs/devtools/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ecosystem-alpinejs/index.html b/docs/ecosystem-alpinejs/index.html index 69bdbef44..9b9491990 100644 --- a/docs/ecosystem-alpinejs/index.html +++ b/docs/ecosystem-alpinejs/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ecosystem-angular/index.html b/docs/ecosystem-angular/index.html index 17bb577f8..d3c3e0dbb 100644 --- a/docs/ecosystem-angular/index.html +++ b/docs/ecosystem-angular/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ecosystem-angularjs/index.html b/docs/ecosystem-angularjs/index.html index 686740fb2..7e227cd5e 100644 --- a/docs/ecosystem-angularjs/index.html +++ b/docs/ecosystem-angularjs/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ecosystem-backbone/index.html b/docs/ecosystem-backbone/index.html index 311734feb..8b6f04854 100644 --- a/docs/ecosystem-backbone/index.html +++ b/docs/ecosystem-backbone/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ecosystem-css/index.html b/docs/ecosystem-css/index.html index 966f7eb47..81c3f657c 100644 --- a/docs/ecosystem-css/index.html +++ b/docs/ecosystem-css/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ecosystem-cycle/index.html b/docs/ecosystem-cycle/index.html index dc53e7a22..40121c3e4 100644 --- a/docs/ecosystem-cycle/index.html +++ b/docs/ecosystem-cycle/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ecosystem-dojo/index.html b/docs/ecosystem-dojo/index.html index d67e61ed0..15f0f3c56 100644 --- a/docs/ecosystem-dojo/index.html +++ b/docs/ecosystem-dojo/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ecosystem-ember/index.html b/docs/ecosystem-ember/index.html index 01869a9b7..dc68a2f39 100644 --- a/docs/ecosystem-ember/index.html +++ b/docs/ecosystem-ember/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ecosystem-html-web-components/index.html b/docs/ecosystem-html-web-components/index.html index bbe3679d4..4455e0da0 100644 --- a/docs/ecosystem-html-web-components/index.html +++ b/docs/ecosystem-html-web-components/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ecosystem-inferno/index.html b/docs/ecosystem-inferno/index.html index 2959a2e4b..bb605379a 100644 --- a/docs/ecosystem-inferno/index.html +++ b/docs/ecosystem-inferno/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ecosystem-leaked-globals/index.html b/docs/ecosystem-leaked-globals/index.html index 35e1e1b45..0f79a5904 100644 --- a/docs/ecosystem-leaked-globals/index.html +++ b/docs/ecosystem-leaked-globals/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ecosystem-preact/index.html b/docs/ecosystem-preact/index.html index 15e65fa04..62da6146d 100644 --- a/docs/ecosystem-preact/index.html +++ b/docs/ecosystem-preact/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ecosystem-react/index.html b/docs/ecosystem-react/index.html index 612358623..7668898d5 100644 --- a/docs/ecosystem-react/index.html +++ b/docs/ecosystem-react/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ecosystem-riot/index.html b/docs/ecosystem-riot/index.html index 1dcb087a6..b292fe0a7 100644 --- a/docs/ecosystem-riot/index.html +++ b/docs/ecosystem-riot/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ecosystem-snowpack/index.html b/docs/ecosystem-snowpack/index.html index 42f8fc23b..d34773231 100644 --- a/docs/ecosystem-snowpack/index.html +++ b/docs/ecosystem-snowpack/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ecosystem-svelte/index.html b/docs/ecosystem-svelte/index.html index 8d2bc34d0..1634e2772 100644 --- a/docs/ecosystem-svelte/index.html +++ b/docs/ecosystem-svelte/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ecosystem-vite/index.html b/docs/ecosystem-vite/index.html index 1ceb0c1ee..abef5f967 100644 --- a/docs/ecosystem-vite/index.html +++ b/docs/ecosystem-vite/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ecosystem-vue/index.html b/docs/ecosystem-vue/index.html index dc713d893..002fb5802 100644 --- a/docs/ecosystem-vue/index.html +++ b/docs/ecosystem-vue/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ecosystem/index.html b/docs/ecosystem/index.html index 772181772..b06fa1cc6 100644 --- a/docs/ecosystem/index.html +++ b/docs/ecosystem/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/examples/index.html b/docs/examples/index.html index e2e128d82..3fb2303c2 100644 --- a/docs/examples/index.html +++ b/docs/examples/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/faq/index.html b/docs/faq/index.html index b94d9c2e2..43c456dc1 100644 --- a/docs/faq/index.html +++ b/docs/faq/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/getting-started-overview/index.html b/docs/getting-started-overview/index.html index 1bc91d029..d60915bc7 100644 --- a/docs/getting-started-overview/index.html +++ b/docs/getting-started-overview/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/glossary/index.html b/docs/glossary/index.html index 94036b157..c5aae8767 100644 --- a/docs/glossary/index.html +++ b/docs/glossary/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/index.html b/docs/index.html index 5c3fc15f2..8f02c57dc 100644 --- a/docs/index.html +++ b/docs/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/layout-api/index.html b/docs/layout-api/index.html index 5952e0976..bf985cae0 100644 --- a/docs/layout-api/index.html +++ b/docs/layout-api/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/layout-definition/index.html b/docs/layout-definition/index.html index 729182a9e..bf8a59a54 100644 --- a/docs/layout-definition/index.html +++ b/docs/layout-definition/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/layout-overview/index.html b/docs/layout-overview/index.html index 351beac01..c21366fc3 100644 --- a/docs/layout-overview/index.html +++ b/docs/layout-overview/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/microfrontends-concept/index.html b/docs/microfrontends-concept/index.html index a877c9d53..450baadb8 100644 --- a/docs/microfrontends-concept/index.html +++ b/docs/microfrontends-concept/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/migrating-existing-spas/index.html b/docs/migrating-existing-spas/index.html index f8adc6c16..5ae2a1240 100644 --- a/docs/migrating-existing-spas/index.html +++ b/docs/migrating-existing-spas/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/module-types/index.html b/docs/module-types/index.html index 8eb3c0da6..cc1d6dccf 100644 --- a/docs/module-types/index.html +++ b/docs/module-types/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/next/index.html b/docs/next/index.html index bc21fda9f..b3b0b7017 100644 --- a/docs/next/index.html +++ b/docs/next/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/parcels-api/index.html b/docs/parcels-api/index.html index d63ef1131..94dbd7308 100644 --- a/docs/parcels-api/index.html +++ b/docs/parcels-api/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/parcels-overview/index.html b/docs/parcels-overview/index.html index 730ba6681..4d1e1f88b 100644 --- a/docs/parcels-overview/index.html +++ b/docs/parcels-overview/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/recommended-setup/index.html b/docs/recommended-setup/index.html index 3aead1489..c2cd21d7e 100644 --- a/docs/recommended-setup/index.html +++ b/docs/recommended-setup/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/separating-applications/index.html b/docs/separating-applications/index.html index f44f4e99b..7cd0ab40c 100644 --- a/docs/separating-applications/index.html +++ b/docs/separating-applications/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/shared-webpack-configs/index.html b/docs/shared-webpack-configs/index.html index 2fca719e4..5cf57bee2 100644 --- a/docs/shared-webpack-configs/index.html +++ b/docs/shared-webpack-configs/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/single-spa-playground/index.html b/docs/single-spa-playground/index.html index 0afb1a259..5e89119b9 100644 --- a/docs/single-spa-playground/index.html +++ b/docs/single-spa-playground/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/ssr-overview/index.html b/docs/ssr-overview/index.html index 655fecc19..d9960b84f 100644 --- a/docs/ssr-overview/index.html +++ b/docs/ssr-overview/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/testing/e2e/index.html b/docs/testing/e2e/index.html index bbd45849e..90a5f1e85 100644 --- a/docs/testing/e2e/index.html +++ b/docs/testing/e2e/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/testing/units/index.html b/docs/testing/units/index.html index a5b74fd71..1fe2ff0de 100644 --- a/docs/testing/units/index.html +++ b/docs/testing/units/index.html @@ -14,7 +14,7 @@ - + diff --git a/docs/videos/index.html b/docs/videos/index.html index 015f646d8..37bbd6b51 100644 --- a/docs/videos/index.html +++ b/docs/videos/index.html @@ -14,7 +14,7 @@ - + diff --git a/error/index.html b/error/index.html index a69d5939d..249277705 100644 --- a/error/index.html +++ b/error/index.html @@ -14,7 +14,7 @@ - + diff --git a/help/index.html b/help/index.html index 3769bb50b..fa00e69ea 100644 --- a/help/index.html +++ b/help/index.html @@ -14,7 +14,7 @@ - + diff --git a/index.html b/index.html index ca28b91d2..0f8b7e3b3 100644 --- a/index.html +++ b/index.html @@ -14,7 +14,7 @@ - + diff --git a/languages/index.html b/languages/index.html index 847d86984..536a2d7a5 100644 --- a/languages/index.html +++ b/languages/index.html @@ -14,7 +14,7 @@ - + diff --git a/privacy/single-spa-inspector-privacy-policy/index.html b/privacy/single-spa-inspector-privacy-policy/index.html index bb47cfff0..afd09510c 100644 --- a/privacy/single-spa-inspector-privacy-policy/index.html +++ b/privacy/single-spa-inspector-privacy-policy/index.html @@ -14,7 +14,7 @@ - + diff --git a/search/index.html b/search/index.html index 409eac963..068340c83 100644 --- a/search/index.html +++ b/search/index.html @@ -14,7 +14,7 @@ - + diff --git a/sponsors/index.html b/sponsors/index.html index fa3360b41..878904629 100644 --- a/sponsors/index.html +++ b/sponsors/index.html @@ -14,7 +14,7 @@ - + diff --git a/users/index.html b/users/index.html index 78a971fe0..8afd2fc83 100644 --- a/users/index.html +++ b/users/index.html @@ -14,7 +14,7 @@ - + diff --git a/versions/index.html b/versions/index.html index f56bf5906..a34c4c8c6 100644 --- a/versions/index.html +++ b/versions/index.html @@ -14,7 +14,7 @@ - +