
What Are Micro Frontends?
July 25, 2025
Ashish Gogula

July 25, 2025
Ashish Gogula
Imagine you're building a house with your friends.
One friend paints the walls. Another installs the furniture. Someone else handles the lighting.
You’re all working in parallel, not stepping on each other's toes — and when you're done, you combine it all into one beautiful, functional home.
But hey — this isn’t just a quick-read post. We’re breaking down a big topic into 6 simple but packed chapters. So:
Grab a coffee, put your phone on silent, and stay focused —
because by the end of this, you’ll go from "what is this?" to "I got this!"
Let’s dive in 👇
Micro frontends are a way of breaking a big frontend app (like a giant React SPA) into smaller, independent pieces — each owned by a different team, developed and deployed separately, but working together in the browser.
Think of it like microservices, but for the frontend.
Instead of One monolithic React app
You now have:
All stitched together seamlessly.
Here’s the deal — as your app grows, things get messy:
Micro frontends solve this by giving teams autonomy:
It’s like breaking a big puzzle into smaller pieces — each managed separately, but snapping together into a whole.
Ever wondered how Amazon manages cart, recommendations, and account pages without breaking a sweat?
Each of those is its own micro frontend — maintained by separate teams, with their own roadmaps, release cycles, and even tech stacks.
Micro frontends = Split your big frontend into smaller, independently managed apps that come together in the browser.
Okay, now that you know what micro frontends are, let’s dig a little deeper.
Still keeping it simple — no buzzwords or complicated acronyms (yet).
Think of each part of your UI — like the navbar, cart, or user profile — as a standalone app. It can:
Each micro frontend is like a Lego block 🧱 — small, powerful, and pluggable.
So how do these “mini apps” actually combine?
You stitch them together using a technique like:
The shell or host app brings all the pieces together.
This is one of the main selling points of micro frontends.
Each team gets to:
No more “who broke the build again??” moments 😅
Yup. You could have:
And it all works together — as long as you plan the integration well (and don’t go too wild).
Since these are separate apps, sharing data gets tricky.
You might need:

We’re gonna talk about Module Federation — the secret sauce that lets multiple frontend apps work together like magic. 🪄
Imagine you built a header for your app… but instead of compiling and copying it into another app, you just say:
“Hey App B, here’s my header. You can use it at runtime.”
Boom. Now your header is shared live — no rebuilding needed.
That’s Module Federation, introduced in Webpack 5. It lets you:
It’s like importing components across different repositories — at runtime.
You’ll hear these terms a lot, so let’s break it down:
Host App (main shell)
├── loads Navbar from NavbarApp
├── loads ProductGrid from ProductApp
└── loads Cart from CartApp
Each remote app can be:
Let’s say you’re using React in both Host and Remote. Instead of bundling React twice (😩), Module Federation can share dependencies like this:
shared: {
react: { singleton: true },
"react-dom": { singleton: true },
}Meaning:
“Hey, use my React. Don’t bring your own.”
Result: Smaller bundles + fewer conflicts.
Your host app can dynamically load parts like:
const Navbar = React.lazy(() => import("navbarApp/Navbar"));And just like that — poof 💨 — the Navbar is loaded from a completely different app.
Let’s keep it real. Module Federation is cool but not magic:
But with good planning, it works beautifully.

Okay, okay — theory is nice. But let’s talk real apps, real teams, real chaos.
Imagine you’re Amazon (or just pretending to be).
You’ve got:
Do you want everyone working on one giant frontend repo?
No way. That’s a merge-conflict nightmare. 😵💫
So instead:
Micro frontends to the rescue.
Banking apps are the definition of “slow-moving monoliths.” 🐢
They have dozens of internal tools and pages — but all stitched together in one massive app.
With micro frontends:
Got a design system or component library?
Instead of publishing to npm and waiting for everyone to upgrade...
You can expose it as a live remote app.
That way, the latest version is always available, and everyone stays consistent — like good little UI citizens.
Even Microsoft used similar architecture in Office365.
Each team owns their feature, tech stack, and deployment cycle.
“You build it, you ship it, you own it.”
No more waiting for the monolith build to finish just to change a button.
One team wants React? Another wants Vue? Go for it.
Micro frontends allow this level of chaos — responsibly.
Real-world: One team at IKEA uses vanilla JS, another uses React — all in the same app.
Shipping a bug in the “Search” micro app won’t break the “Cart” micro app.
It’s like damage control… built into your architecture.
Still stuck with a legacy app? You can slowly refactor just parts of it into micro frontends.
No need for a full rewrite from scratch (aka the "rewrite and regret" trap).

Webpack configs. Shared dependencies. CI/CD pipelines.
It’s not plug-and-play… especially the first time around.
“You’ll feel like you’re building a spaceship just to render a button.”
Each micro app might load its own JS bundles, duplicated libraries, etc.
Unless you carefully manage shared dependencies — you’ll suffer.
Without a strong design system, each micro app might look or behave slightly differently.
The result? Franken-app.
“Like five chefs cooking one dish — could be a masterpiece, or a mess.”
More moving parts = more talking.
Version mismatches, deployment coordination, shared contracts… all require planning.
Here’s a brutally honest rule of thumb:
Use micro frontends if:
🟡 Maybe consider them if:
🔴 Avoid micro frontends if:
Here’s a dead-simple, beginner-friendly roadmap to go from zero to micro frontend hero 🦸
There are 3 common approaches:
<iframe>✅ Easier to start with tools like Nx
❌ No independent deployments
🛠️ Frameworks that make it easier:
Each micro app gets its own:
Example folder structure (monorepo):
/apps
/shell
/product
/cart
/checkoutTo prevent chaos:
Each micro app gets:
And just like that — BOOM 💥 — you’ve got micro frontends!
Micro frontends aren’t a silver bullet — they’re a scaling strategy.
Use them when your frontend starts acting like a backend: multiple teams, big features, and fast releases.
But if your app is small — keep it simple.
“With great power comes great... webpack configs.” 😅

If this helped you survive the chaos of micro frontends or just made you chuckle at the pain, consider buying me a coffee:
(I promise not to spend it all on Webpack plugins.)