Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The Status of Micro Frontends
Search
Manfred Steyer
PRO
March 23, 2022
Programming
510
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The Status of Micro Frontends
Manfred Steyer
PRO
March 23, 2022
More Decks by Manfred Steyer
See All by Manfred Steyer
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
180
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
110
Nostalgia Meets Technology: Super Mario with TypeScript
manfredsteyer
PRO
0
180
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
230
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
160
Agentic UI
manfredsteyer
PRO
0
230
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
290
Agentic UI beyond Chats Architecture Patterns & Open Standards @ngMunich 05/2026
manfredsteyer
PRO
0
240
Agentic AI in the Frontend: Architectures with Open Standards @iJS London 2026
manfredsteyer
PRO
0
170
Other Decks in Programming
See All in Programming
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
6k
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
170
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
150
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
8
4.2k
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
170
Creating Composable Callables in Contemporary C++
rollbear
0
210
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
170
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
1
2.5k
1年で人数1.5倍、PR数5.5倍増。 品質とアウトカムはどうなったか、 何が効いたか
ike002jp
0
130
Claude Team Plan導入・ガイド
tk3fftk
0
190
フィードバックで育てるAI開発
kotaminato
1
120
継続モナドとリアクティブプログラミング
yukikurage
3
590
Featured
See All Featured
Ethics towards AI in product and experience design
skipperchong
2
330
Navigating Weather and Climate Data
rabernat
0
350
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
2
330
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
360
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
610
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Building the Perfect Custom Keyboard
takai
2
810
How STYLIGHT went responsive
nonsquared
100
6.2k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
340
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
240
Transcript
@ManfredSteyer ManfredSteyer The Status of Micro Frontends Manfred Steyer, ANGULARarchitects.io
@ManfredSteyer Booking App Booking App Check-in App Check-in App Boarding
App Boarding App Luggage App Luggage App
@ManfredSteyer
@ManfredSteyer
@ManfredSteyer
@ManfredSteyer ✓Hyperlinks ✓Server-Side Includes ✓Server-Side orchestration
@ManfredSteyer The Final Frontier
@ManfredSteyer ▪ Loading into Browser ▪ Bundle Size ▪ Version
Conflicts
@ManfredSteyer #1 Analysis #2 Implementation
@ManfredSteyer Manfred Steyer
@ManfredSteyer
@ManfredSteyer Which one is the best?
@ManfredSteyer It’s all about consequences in your very situation!
@ManfredSteyer
@ManfredSteyer
@ManfredSteyer • Autarkic teams, so that … • it's possible
to do changes w/o coordinating with other teams • own architectural decisions • Migrating step by step to new tech stacks : • Fully consistent design • Bundle size
@ManfredSteyer Booking Booking Check-in Check-in Boarding Boarding Luggage Luggage
@ManfredSteyer Should mirror a real-world business domain Large enough: Most
use cases don't overlap domains Small enough: One team can handle it
@ManfredSteyer
@ManfredSteyer
@ManfredSteyer Monorepo Structure
@ManfredSteyer https://nrwl.io/nx
@ManfredSteyer Visualize Module Structure
@ManfredSteyer
@ManfredSteyer
@ManfredSteyer
@ManfredSteyer
@ManfredSteyer
@ManfredSteyer µFrontend µFrontend µFrontend
@ManfredSteyer
@ManfredSteyer
@ManfredSteyer
@ManfredSteyer µService Providing a (SPA based) Shell µApp µApp µApp
Shell
@ManfredSteyer • iframes (very present) • Web Components (a bit)
@ManfredSteyer const Component = await import('other-app/cmp');
@ManfredSteyer Shell (Host) Microfrontend (Remote) // Maps Urls in //
webpack config remotes: { mfe1: "http://..." } // Expose files in // webpack config exposes: { './Cmp': './my.cmp.ts' } import('mfe1/Cmp')
@ManfredSteyer How to Get the Microfrontend's URL? Shell (Host) Microfrontend
(Remote) RemoteEntry.js <script src="…"></script>
@ManfredSteyer Shell (Host) Microfrontend (Remote) shared: [ "@angular/core", "…" ]
shared: [ "@angular/core", "…" ]
@ManfredSteyer Selecting the highest compatible version 10.0 10.1
@ManfredSteyer Compiled app code is not officially backwards compatible
@ManfredSteyer Conflict: No highest compatible version 11.0 10.1
@ManfredSteyer
@ManfredSteyer Booking Booking Boarding Boarding Shared Shared Feature Feature Feature
Feature Feature Feature Feature Feature Feature Feature … … … … … … … … … … … … … … … … … … Booking App Booking App Boarding App Boarding App Publish shared libs seperately via npm Repository n Repository 2 Repository 1 Version Mismatches? Strict Borders
@ManfredSteyer Booking Booking Boarding Boarding Shared Shared Feature Feature Feature
Feature Feature Feature Feature Feature Feature Feature … … … … … … … … … … … … … … … … … … Booking App Booking App Boarding App Boarding App
@ManfredSteyer Decoupling: Access Restrictions/ Linting (Nx) Separate Deployment* No Version
Conflicts (just one version!)
@ManfredSteyer
@ManfredSteyer Hyperlinks µFrontend µFrontend µFrontend
@ManfredSteyer <iframe></iframe>
@ManfredSteyer
@ManfredSteyer Abstracting away differences b/w frameworks Shadow DOM Properties/ Events
@ManfredSteyer
@ManfredSteyer const Component = await import('other-app/cmp');
@ManfredSteyer const main = await import('other-app/main'); main.bootstrap();
@ManfredSteyer const main = await import('other-app/main'); main.bootstrap(); const rootElm =
document.createElement('app-root') document.body.appendChild(rootElm);
@ManfredSteyer await import('other-app/main'); // Self-Bootstrapping const rootElm = document.createElement('app-root') document.body.appendChild(rootElm);
@ManfredSteyer await import('other-app/main'); const rootElm = document.createElement('app-root') document.body.appendChild(rootElm); WrapperComponent
@ManfredSteyer
@ManfredSteyer https://red-ocean-0fe4c4610.azurestaticapps.net
@ManfredSteyer Free eBook ANGULARarchitects.io/book Updated for Module Federation and Alternatives
@ManfredSteyer Conclusion Know your architecture goals + Evaluate! Know your
architecture goals + Evaluate! Moduliths vs. Micro Frontends Moduliths vs. Micro Frontends Monorepo vs. multiple repos Monorepo vs. multiple repos Module Federation: Tempting Module Federation: Tempting
@ManfredSteyer d Slides & Examples Remote Company Workshops and Consulting
http://angulararchitects.io