Use when building micro-frontend architectures.
Scanned 9/10/2026
Install to Claude Code
npx -y skills add LoopyLuci/Skills --skill micro-frontends-architecture --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Micro Frontends Architecture?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/loopyluci-micro-frontends-architecture)More formats (shields.io, HTML) on the badges page.
---
name: micro-frontends-architecture
description: "Use when building micro-frontend architectures."
version: 1.0.0
author: Hermes Agent
license: MIT
metadata:
hermes:
tags: [micro-frontends, web-components, module-federation, Qwik, iframe, MFE]
related_skills: [microservices-decomposition, web-component-design, monorepo-management, frontend-bootstrap]
---
# Micro-Frontends Architecture
Building micro-frontend architectures — from integration approaches (iframe, Web Components, Module Federation) through routing, shared dependencies, and team ownership.
## When to Use
- Large frontend applications with multiple teams
- Decomposing a monolithic frontend into independent features
- Allowing teams to choose their own frontend frameworks
- Incrementally migrating from legacy frontend to modern stack
- Scaling frontend development across multiple teams
## Integration Approaches
```python
INTEGRATION_STRATEGIES = {
'web_components': 'Each MFE is a Custom Element, framework-agnostic',
'module_federation': 'Webpack 5 Module Federation — runtime code sharing',
'iframe': 'Each MFE in its own iframe — strong isolation, poor UX',
'single_spa': 'Orchestrator framework that mounts/unmounts MFEs',
'podium': 'Server-side composition of micro-frontends',
}
class MicroFrontendOrchestrator:
"""Client-side micro-frontend integration via Web Components."""
def __init__(self):
self.apps = {} # route -> { name, entry, element }
def register_app(self, route: str, name: str,
entry_url: str, element_name: str):
self.apps[route] = {
'name': name, 'entry': entry_url, 'element': element_name
}
def navigate(self, path: str):
app = self._match_route(path)
if app:
# Lazy load app if not loaded
self._load_app(app)
# Render into shell
container.innerHTML = f'<{app["element"]} route="{path}"></{app["element"]}>'
```
## Common Pitfalls
1. **Shared dependency version hell** — different MFEs using different React versions; agree on shared deps
2. **CSS conflicts** — styles from one MFE leak into another; use Shadow DOM or CSS modules
3. **Cross-MFE communication** — global event bus becomes unmanageable; use custom events with namespacing
4. **Performance overhead** — loading 20 MFEs with 20 bundles on a single page is slow; use lazy loading
5. **Integration testing across MFEs** — changes in one MFE can break integration; contract testing needed
## Verification Checklist
- [ ] Integration strategy chosen (Web Components, Module Federation, or server-side)
- [ ] Shared dependency strategy defined (peer dependencies, externals)
- [ ] Cross-MFE communication pattern (custom events, pub/sub, shared state)
- [ ] Each MFE deployable independently
- [ ] CSS isolation method (Shadow DOM, CSS modules, BEM)
- [ ] Shell application for layout, routing, and error boundaries
- [ ] Performance budget per MFE (bundle size, load time)
- [ ] Contract tests between MFEs and shell
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!