Microfrontend architectures are a category of socio-technical techniques for monolithic front-end application decomposition, comprising: a decision framework for technical implementation; and governance for team structure and interactions.
There is no "right" way to build a microfrontend, indeed all Good architecture only exists relative to a specific context. This must mean that Architectural decisions must be made respecting the operating context. Because this results in different technical implementations of microfrontends being made specific to meet a business context, defining a microfrontend is best described in terms of the capabilities it provides:
Microfrontend architectures compose UI at runtime - whether at the client, edge/CDN or server level
Microfrontends enable team autonomy - as a means of scaling
Align system boundaries to business domains to identify where to decompose the microfrontends and detail how to govern any interactions between decomposed units An exercise of Domain-Driven Design to identify the Bounded Context of teams can be helpful. Furthermore, identifying the interactions between teams will influence the communication and composition mechanisms the microfrontend architecture should support.
A core quality of a microfrontend architecture is that the subsystems should not be dependent upon one another, therefore able to practice Continuous Integration with autonomy in their subdomain.
It is true that a microfrontend architecture can allow for the composition of multiple UI frameworks. However, in reality this is not as common as marketed. It can be useful for encapsulating legacy behaviour, or performing a stepwise migration. The main advantage is that microfrontends represent a form of Evolutionary Architecture in which future innovation does not have to be constained by past implementation decisions - it's entirely possible for a new team to operate within the microfrontend using bespoke technologies, while other functionality remains unaffected.
No-caching and high-caching systems will make different decisions as to where the combination of the individual micro-frontends will be performed. In a situation where content must be highly cached, the use of Edge-Side Includes (at the CDN) can be useful, even accommodating cases where a single page is composed of both less-frequently and more-frequently changing components. In a low-caching context, performing this combination interactively on the front-end can be used.