A micro-frontend is an architectural style extending the concepts of microservices to the front end, decomposing a web application's user interface into smaller, semi-independent feature modules. Each module is owned end-to-end by a cross-functional team, responsible for its specific business domain from the database to the user interface. This approach enables independent development, testing, and deployment cycles, allowing teams to ship updates without coordinating with the entire application's release schedule.
Glossary
Micro-Frontend

What is Micro-Frontend?
A micro-frontend is an architectural style where a web application's front end is decomposed into smaller, independently developable, testable, and deployable features owned by different teams.
The architecture is implemented through integration techniques like Module Federation, Web Components, or Edge-Side Includes (ESI) to compose these independent fragments into a cohesive user experience at runtime. A key challenge is maintaining a consistent design system and shared state across fragments while avoiding tight coupling. This pattern is particularly suited for large-scale applications managed by multiple teams, where it reduces codebase complexity and organizational bottlenecks.
Key Characteristics of Micro-Frontends
Micro-frontends extend the principles of microservices to the browser layer, decomposing monolithic user interfaces into smaller, independently deliverable units of vertical functionality.
Independent Deployability
The foundational principle of micro-frontends. Each micro-frontend is an autonomous unit that can be built, tested, and deployed to production on its own release cycle without coordinating with other teams. This is achieved by encapsulating the entire vertical slice—from UI to API calls—within a single team's ownership. A change to a shopping cart feature should never require rebuilding the product listing page. This independence is enforced through contract testing and strict API versioning between the host application and its fragments.
Technology Agnosticism
Each micro-frontend team is free to choose its own technology stack—React, Vue, Svelte, or even vanilla JavaScript—without affecting other teams. This avoids the lock-in of a single framework and allows gradual migration. The host application, often called the app shell, remains framework-agnostic by loading each micro-frontend as a black box. This is typically implemented via Module Federation in Webpack or native ES modules with import maps, ensuring that shared dependencies like React are deduplicated at runtime to avoid bundle bloat.
Resilient by Isolation
A JavaScript error in one micro-frontend must not crash the entire application. This is enforced through error boundaries and strict encapsulation. Each fragment runs in its own isolated scope, often using Shadow DOM or iframes for CSS containment, preventing style leaks. If the 'Product Reviews' micro-frontend fails to load, the rest of the page remains functional. This resilience is critical for large-scale e-commerce platforms where a single point of failure in a monolithic frontend can halt all revenue.
Vertical Team Ownership
Micro-frontends align team structure with business capabilities, not technical layers. A single team owns the end-to-end feature—from the database to the pixel. This eliminates cross-team dependencies for UI development. For example, the 'Checkout' team owns the checkout micro-frontend, its backend-for-frontend (BFF) API, and its data store. This structure, known as Conway's Law in action, reduces communication overhead and enables teams to deliver features faster without waiting for a shared UI layer team.
Composition at Runtime
Unlike build-time integration, micro-frontends are assembled in the browser at runtime. The app shell fetches each micro-frontend's manifest and renders it into a designated slot. Composition strategies include:
- Client-side composition: The shell uses JavaScript to mount fragments.
- Edge-side composition: A CDN stitches fragments together using Edge-Side Includes (ESI).
- Server-side composition: A Node.js service assembles the page from fragments before sending HTML. This runtime approach allows for dynamic A/B testing and feature flagging without redeploying the shell.
Shared Contracts, Not Code
Micro-frontends communicate through well-defined, versioned contracts, not shared global state. A shared event bus using Custom DOM Events or a lightweight pub/sub library allows decoupled communication. For cross-cutting concerns like authentication, a shared Web Component or a dedicated service provides the user session. The critical rule is to avoid a shared component library that forces all teams to upgrade simultaneously; instead, use Module Federation to share dependencies at runtime with strict version negotiation.
Frequently Asked Questions
Clear, technical answers to the most common questions about decomposing frontend monoliths into independently deliverable features.
A micro-frontend is an architectural style where a web application's front end is decomposed into smaller, independently developable, testable, and deployable features owned by different teams. It works by extending the principles of microservices to the browser layer, where each feature slice is built as a self-contained application that can be integrated into a unified user experience at runtime. Integration typically occurs through one of several composition techniques: client-side composition using Module Federation or Web Components, server-side composition via Edge-Side Includes (ESI) or View Composition, or build-time integration through packages. Each micro-frontend owns its own technology stack, release cycle, and data fetching logic, communicating with other fragments only through well-defined contracts and a shared event bus. This architecture enables multiple autonomous teams to ship features in parallel without blocking each other, dramatically reducing coordination overhead in large-scale applications.
Enabling Efficiency, Speed & Accuracy
Intelligent Analysis, Decision & Execution
We build AI systems for teams that need search across company data, workflow automation across tools, or AI features inside products and internal software.
Talk to Us
Search across company data
Give teams answers from docs, tickets, runbooks, and product data with sources and permissions.
Useful when people spend too long searching or get different answers from different systems.

Automate internal workflows
Use AI to route work, draft outputs, trigger actions, and keep approvals and logs in place.
Useful when repetitive work moves across multiple tools and teams.

Add AI to products and internal tools
Build assistants, guided actions, or decision support into the software your team or customers already use.
Useful when AI needs to be part of the product, not a separate tool.
Micro-Frontend vs. Monolithic Frontend
A technical comparison of the micro-frontend architectural style against the traditional monolithic frontend approach for large-scale web application development.
| Feature | Micro-Frontend | Monolithic Frontend |
|---|---|---|
Deployment Independence | ||
Independent Team Ownership | ||
Technology Agnosticism | ||
Initial Build Complexity | High | Low |
Runtime Performance Overhead | 2-5% JS bundle overhead | Minimal |
Cross-Team Coordination | Minimal | High |
End-to-End Testing Complexity | High | Moderate |
Shared State Management | Complex (event-driven) | Centralized (single store) |
Related Terms
Micro-frontends do not exist in isolation. They are enabled by a constellation of complementary architectural patterns, performance strategies, and integration techniques that collectively define modern distributed front-end engineering.
View Composition
A server-side or edge-side pattern where a final user interface is assembled by aggregating rendered fragments from multiple, independent microservices or templates. Unlike client-side composition, this approach resolves the distinct fragments at the CDN or server layer before the HTML reaches the browser. This is critical for performance, as it prevents client-side layout shifts and reduces the JavaScript burden on the user's device.
Code Splitting
A performance optimization technique that breaks a large JavaScript bundle into smaller chunks which can be loaded on demand or in parallel. In a micro-frontend architecture, effective code splitting is essential to prevent users from downloading the entire application codebase upfront. It ensures that the browser only fetches the specific feature bundles required for the current view, maintaining fast initial load times.
Client-Side Hydration
The process where a JavaScript framework attaches event handlers and state to server-rendered HTML in the browser, making a static page interactive. Micro-frontends must carefully manage hydration to avoid conflicts. Techniques like progressive hydration or using frameworks that support islands architecture allow individual micro-frontends to become interactive independently without blocking the main thread.

About the author
Prasad Kumkar
CEO & MD, Inference Systems
Prasad Kumkar is the CEO & MD of Inference Systems and writes about AI systems architecture, LLM infrastructure, model serving, evaluation, and production deployment. Over 5+ years, he has worked across computer vision models, L5 autonomous vehicle systems, and LLM research, with a focus on taking complex AI ideas into real-world engineering systems.
His work and writing cover AI systems, large language models, AI agents, multimodal systems, autonomous systems, inference optimization, RAG, evaluation, and production AI engineering.
Partnered with leading AI, data, and software stack.
How We Work
Custom AI workflows for your Business
One-fit-all AI don't work for modern businesses. At Inferensys, we aim to understand your business & custom requirements; which we use to define most efficient agentic workflows, the data, and the tools for your business.
01
Review the use case
We understand the task, the users, and where AI can actually help.
Read more02
Pick the right approach
We define what needs search, automation, or product integration.
Read more03
Build the first useful version
We implement the part that proves the value first.
Read more04
Improve from there
We add the checks and visibility needed to keep it useful.
Read moreThe first call is a practical review of your use case and the right next step.
Talk to Us