<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Srinu Web developer</title>
    <description>The latest articles on DEV Community by Srinu Web developer (@srinu_desetti).</description>
    <link>https://dev.to/srinu_desetti</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3825633%2Fb309d018-09b7-4d42-9fd1-f3fffe1c98b6.png</url>
      <title>DEV Community: Srinu Web developer</title>
      <link>https://dev.to/srinu_desetti</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/srinu_desetti"/>
    <language>en</language>
    <item>
      <title>Mixing React + Next.js Micro Frontends in One Host (Hybrid MFE Architecture)</title>
      <dc:creator>Srinu Web developer</dc:creator>
      <pubDate>Thu, 30 Apr 2026 09:32:41 +0000</pubDate>
      <link>https://dev.to/srinu_desetti/mixing-react-nextjs-micro-frontends-in-one-host-hybrid-mfe-architecture-100h</link>
      <guid>https://dev.to/srinu_desetti/mixing-react-nextjs-micro-frontends-in-one-host-hybrid-mfe-architecture-100h</guid>
      <description>



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;next build
ReferenceError: window is not defined
    at /apps/Main/.next/server/pages/login.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your Next.js host has been running fine. You add one new remote — a React MFE built with &lt;code&gt;ModuleFederationPlugin&lt;/code&gt; — and the server build dies on hydration.&lt;/p&gt;

&lt;p&gt;The fix is NOT to rewrite the React remote in Next.js. It's to know that &lt;strong&gt;a single &lt;code&gt;NextFederationPlugin&lt;/code&gt; host can load BOTH plugin types simultaneously&lt;/strong&gt;. The remote URL pattern alone tells Module Federation which plugin built each remote.&lt;/p&gt;

&lt;p&gt;The full guide covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dual-plugin host config&lt;/strong&gt; — one &lt;code&gt;next.config.js&lt;/code&gt; declaring 4 React + 2 Next.js remotes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;URL pattern table&lt;/strong&gt; — &lt;code&gt;/auth/remoteEntry.js&lt;/code&gt; (React, ONE file) vs &lt;code&gt;/products/_next/static/{ssr|chunks}/remoteEntry.js&lt;/code&gt; (Next.js, TWO files)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The &lt;code&gt;isServer&lt;/code&gt; ternary&lt;/strong&gt; — only on Next.js remotes, never on React ones (no &lt;code&gt;/ssr/&lt;/code&gt; folder exists)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;ssr: false&lt;/code&gt; mandatory&lt;/strong&gt; — even for Next.js remotes that have an SSR entry, because Redux + window&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bridge pattern&lt;/strong&gt; — &lt;code&gt;onNavigate&lt;/code&gt; prop keeps React remotes framework-agnostic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;basePath&lt;/code&gt; + &lt;code&gt;assetPrefix&lt;/code&gt;&lt;/strong&gt; — prevent &lt;code&gt;/_next/static/chunks/&lt;/code&gt; collisions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same shared singleton config&lt;/strong&gt; for both plugins — &lt;code&gt;@myapp/store&lt;/code&gt;, &lt;code&gt;react&lt;/code&gt;, &lt;code&gt;redux&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nginx reverse proxy&lt;/strong&gt; — static files for React remotes, &lt;code&gt;proxy_pass&lt;/code&gt; for Next.js Node.js processes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;8 production pitfalls&lt;/strong&gt; with WRONG/FIX side-by-side&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read the full guide with code examples → &lt;a href="https://blog.srinudesetti.in/micro-frontend/nextjs/mixing-react-nextjs-micro-frontends" rel="noopener noreferrer"&gt;https://blog.srinudesetti.in/micro-frontend/nextjs/mixing-react-nextjs-micro-frontends&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>react</category>
      <category>microfrontend</category>
      <category>srinudesetti</category>
    </item>
    <item>
      <title>Setting Up a Next.js Micro Frontend Host App: Complete Guide</title>
      <dc:creator>Srinu Web developer</dc:creator>
      <pubDate>Mon, 20 Apr 2026 10:12:44 +0000</pubDate>
      <link>https://dev.to/srinu_desetti/setting-up-a-nextjs-micro-frontend-host-app-complete-guide-4mg</link>
      <guid>https://dev.to/srinu_desetti/setting-up-a-nextjs-micro-frontend-host-app-complete-guide-4mg</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuhrxrx5f843db05930eu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuhrxrx5f843db05930eu.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;Your Next.js Module Federation setup builds fine. Remotes appear to load. Components render blank.&lt;/p&gt;

&lt;p&gt;No errors. No stack trace. Nothing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Missing from your package.json:&lt;/span&gt;
&lt;span class="s2"&gt;"dev"&lt;/span&gt;: &lt;span class="s2"&gt;"cross-env NEXT_PRIVATE_LOCAL_WEBPACK=true next dev -p 5000"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without that flag, Next.js uses its internal bundled webpack instead of the locally installed webpack 5. The Module Federation plugin needs access to webpack's container API — the bundled version doesn't expose it.&lt;/p&gt;

&lt;p&gt;Your remotes will attempt to load but the container negotiation fails silently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The full guide covers:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complete production next.config.js with NextFederationPlugin&lt;/li&gt;
&lt;li&gt;React remotes vs Next.js remotes path differences (isServer ternary)&lt;/li&gt;
&lt;li&gt;Why eager: true breaks SSR hydration in Next.js&lt;/li&gt;
&lt;li&gt;Shared Redux singleton setup across host + all remotes&lt;/li&gt;
&lt;li&gt;next/dynamic with ssr: false for remote loading&lt;/li&gt;
&lt;li&gt;PWA + Bundle Analyzer wrappers&lt;/li&gt;
&lt;li&gt;CSP headers for Module Federation&lt;/li&gt;
&lt;li&gt;18 code examples with local vs production configurations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read the full guide with code examples → &lt;a href="https://blog.srinudesetti.in/micro-frontend/nextjs/nextjs-micro-frontend-host-app-setup" rel="noopener noreferrer"&gt;https://blog.srinudesetti.in/micro-frontend/nextjs/nextjs-micro-frontend-host-app-setup&lt;/a&gt;&lt;/p&gt;

</description>
      <category>modulefederation</category>
      <category>react</category>
      <category>nextjs</category>
      <category>srinudesetti</category>
    </item>
    <item>
      <title>Module Federation Shared Dependencies - Singleton Guide</title>
      <dc:creator>Srinu Web developer</dc:creator>
      <pubDate>Thu, 16 Apr 2026 10:04:15 +0000</pubDate>
      <link>https://dev.to/srinu_desetti/module-federation-shared-dependencies-singleton-guide-3167</link>
      <guid>https://dev.to/srinu_desetti/module-federation-shared-dependencies-singleton-guide-3167</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyicoo3xmkqoxav2v8xi9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyicoo3xmkqoxav2v8xi9.png" alt=" "&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Uncaught Error: Invalid hook call.
You might have more than one copy of React in the same app.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are using Webpack Module Federation with multiple micro frontends, this error means you have duplicate React instances in memory.&lt;/p&gt;

&lt;p&gt;Every MFE bundles its own React, ReactDOM, and Router by default. With 5 remotes, that is 5 copies of React the browser loads, parses, and executes. The performance waste is bad. But the real problem is hooks breaking - two React instances means two separate hook registries that cannot talk to each other.&lt;/p&gt;

&lt;p&gt;The fix is Module Federation's &lt;code&gt;shared&lt;/code&gt; config with &lt;code&gt;singleton: true&lt;/code&gt;. But there is more to it than copy-pasting one config line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the full guide covers:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The duplicate bundle problem&lt;/strong&gt; - real KB numbers showing 57% reduction&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;singleton: true vs false&lt;/strong&gt; - step-by-step runtime behavior&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;requiredVersion strategies&lt;/strong&gt; - 4 different approaches with trade-offs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;strictVersion and eager&lt;/strong&gt; - when to use each (React vs Next.js)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Host vs Remote shared config&lt;/strong&gt; - why they are different&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What to share vs NOT share&lt;/strong&gt; - decision table with 11 libraries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime debugging&lt;/strong&gt; - inspecting &lt;code&gt;__webpack_share_scopes__&lt;/code&gt; in DevTools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All code examples from a production micro frontend monorepo.&lt;/p&gt;

&lt;p&gt;Read the full guide with code examples: &lt;a href="https://blog.srinudesetti.in/micro-frontend/react/shared-dependencies-singleton-pattern" rel="noopener noreferrer"&gt;https://blog.srinudesetti.in/micro-frontend/react/shared-dependencies-singleton-pattern&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>webpack</category>
      <category>srinudesetti</category>
    </item>
    <item>
      <title>Module Federation Host and Remote Apps — Setup Guide</title>
      <dc:creator>Srinu Web developer</dc:creator>
      <pubDate>Sun, 12 Apr 2026 11:03:42 +0000</pubDate>
      <link>https://dev.to/srinu_desetti/module-federation-host-and-remote-apps-setup-guide-2c32</link>
      <guid>https://dev.to/srinu_desetti/module-federation-host-and-remote-apps-setup-guide-2c32</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Your host loads a remote — it crashes. The ENTIRE app goes blank.&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ProductList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lazy&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Products/ProductList&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="c1"&gt;// Fix: Add .catch() to prevent cascading failures&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ProductList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lazy&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
  &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Products/ProductList&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Products&lt;/span&gt; &lt;span class="nx"&gt;module&lt;/span&gt; &lt;span class="nx"&gt;unavailable&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;,
&lt;/span&gt;  &lt;span class="p"&gt;}))&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is one of the patterns most teams miss when setting up Module Federation. The host app and remote apps have very different responsibilities, and getting the architecture wrong leads to cascading failures, permission gaps, and production deploy issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Article 13 in my Micro Frontend series covers:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Host app architecture&lt;/strong&gt; — Layout shell, routing, Redux Provider, and bootstrap pattern&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remote app structure&lt;/strong&gt; — Standalone development on isolated ports (4001-4011)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error handling&lt;/strong&gt; — Two layers: &lt;code&gt;.catch()&lt;/code&gt; for load failures + &lt;code&gt;ErrorBoundary&lt;/code&gt; for render failures&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permission-based routing&lt;/strong&gt; — Check Redux store permissions before loading remotes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bi-directional federation&lt;/strong&gt; — An app as both host AND remote&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React vs Next.js host&lt;/strong&gt; — &lt;code&gt;React.lazy()&lt;/code&gt; vs &lt;code&gt;next/dynamic&lt;/code&gt; with &lt;code&gt;ssr: false&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production deployment&lt;/strong&gt; — &lt;code&gt;publicPath&lt;/code&gt; must match the reverse proxy route&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every example comes from a real production monorepo with 11 remote MFEs.&lt;/p&gt;

&lt;p&gt;Read the full guide with code examples: &lt;a href="https://blog.srinudesetti.in/micro-frontend/react/host-and-remote-apps" rel="noopener noreferrer"&gt;https://blog.srinudesetti.in/micro-frontend/react/host-and-remote-apps&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webpack</category>
      <category>react</category>
      <category>microfrontend</category>
      <category>srinudesetti</category>
    </item>
    <item>
      <title>Webpack Module Federation — Complete Guide for Micro Frontends</title>
      <dc:creator>Srinu Web developer</dc:creator>
      <pubDate>Mon, 06 Apr 2026 11:16:01 +0000</pubDate>
      <link>https://dev.to/srinu_desetti/webpack-module-federation-complete-guide-for-micro-frontends-4eao</link>
      <guid>https://dev.to/srinu_desetti/webpack-module-federation-complete-guide-for-micro-frontends-4eao</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Error: Invalid hook call. Hooks can only be called inside
       the body of a function component.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You've seen this error. Your component works in isolation. But the moment you load it as a Module Federation remote inside the host — hooks crash.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The cause:&lt;/strong&gt; React loaded twice. Module Federation shared your component code, but not React itself. Two React instances mean two internal state trees, and hooks break immediately.&lt;/p&gt;

&lt;p&gt;The fix is one line — &lt;code&gt;singleton: true&lt;/code&gt; — but Module Federation has 5 more configuration traps that will bite you in production:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Remote URLs change completely&lt;/strong&gt; between local (&lt;code&gt;https://localhost:4002/remoteEntry.js&lt;/code&gt;) and production (&lt;code&gt;/products/remoteEntry.js&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;publicPath must match&lt;/strong&gt; the reverse proxy route — mismatch = 404 on every chunk after remoteEntry.js loads&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The bootstrap pattern is required&lt;/strong&gt; — without &lt;code&gt;import("./bootstrap")&lt;/code&gt;, shared deps fail before negotiation happens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;remoteEntry.js is NOT your bundle&lt;/strong&gt; — it's a ~5KB manifest that registers &lt;code&gt;window.Products&lt;/code&gt; for on-demand chunk loading&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;requiredVersion doesn't enforce&lt;/strong&gt; — with singleton, the first-loaded version always wins. It only warns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wrote a complete guide with real webpack configs for host and remote (both local dev and production), all exposed modules mapped, shared dependency configuration with the singleton pattern, how remoteEntry.js works step by step, and a debugging checklist for the 5 most common errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read the full guide with code examples →&lt;/strong&gt; &lt;a href="https://blog.srinudesetti.in/micro-frontend/react/webpack-module-federation-complete-guide" rel="noopener noreferrer"&gt;https://blog.srinudesetti.in/micro-frontend/react/webpack-module-federation-complete-guide&lt;/a&gt;&lt;/p&gt;

</description>
      <category>microfrontend</category>
      <category>react</category>
      <category>webpack</category>
      <category>srinudesetti</category>
    </item>
    <item>
      <title>Tailwind CSS in Micro Frontend Monorepo — Setup Guide</title>
      <dc:creator>Srinu Web developer</dc:creator>
      <pubDate>Sun, 05 Apr 2026 11:09:52 +0000</pubDate>
      <link>https://dev.to/srinu_desetti/tailwind-css-in-micro-frontend-monorepo-setup-guide-473k</link>
      <guid>https://dev.to/srinu_desetti/tailwind-css-in-micro-frontend-monorepo-setup-guide-473k</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Production build output:
// styles.css — 0 classes generated
// ERROR: @tailwind directives treated as plain text
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This happens when you set up Tailwind CSS in a micro frontend monorepo the same way you would in a standard React app. It does not work that way.&lt;/p&gt;

&lt;p&gt;Each MFE is an independent Webpack build. Tailwind is a PostCSS plugin that runs at build time inside &lt;code&gt;postcss-loader&lt;/code&gt;. A single root-level &lt;code&gt;tailwind.config.js&lt;/code&gt; will NOT be resolved by apps in &lt;code&gt;apps/products/&lt;/code&gt; — each app needs its own.&lt;/p&gt;

&lt;p&gt;The content paths also differ between host and remote MFEs. The host scans &lt;code&gt;./src/**&lt;/code&gt;, &lt;code&gt;./public/**&lt;/code&gt;, and &lt;code&gt;./index.html&lt;/code&gt;. Remotes only scan &lt;code&gt;./src/**&lt;/code&gt; and &lt;code&gt;./src/index.html&lt;/code&gt; because they are loaded into the host at runtime.&lt;/p&gt;

&lt;p&gt;What the full guide covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step-by-step installation&lt;/strong&gt; — root + per-app dependencies with npm workspaces&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-MFE tailwind.config.js&lt;/strong&gt; — host vs remote content path differences&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostCSS + Webpack wiring&lt;/strong&gt; — the 3-loader chain (MiniCssExtractPlugin -&amp;gt; css-loader -&amp;gt; postcss-loader)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why CSS is NOT shared via Module Federation&lt;/strong&gt; — build-time vs runtime&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shared Tailwind presets&lt;/strong&gt; — consistent theming without duplicating configs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS isolation with prefix&lt;/strong&gt; — when and why to use it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;5 common mistakes&lt;/strong&gt; — wrong content paths, root-level config, missing postcss-loader, and more&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read the full guide with code examples from a real production monorepo:&lt;br&gt;
&lt;a href="https://blog.srinudesetti.in/micro-frontend/react/tailwind-css-micro-frontend-monorepo" rel="noopener noreferrer"&gt;https://blog.srinudesetti.in/micro-frontend/react/tailwind-css-micro-frontend-monorepo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tailwindcss</category>
      <category>react</category>
      <category>microfrontend</category>
      <category>srinudesetti</category>
    </item>
    <item>
      <title>Webpack 5 Configuration for Micro Frontends — Complete Guide</title>
      <dc:creator>Srinu Web developer</dc:creator>
      <pubDate>Sun, 29 Mar 2026 09:37:41 +0000</pubDate>
      <link>https://dev.to/srinu_desetti/webpack-5-configuration-for-micro-frontends-complete-guide-1kb4</link>
      <guid>https://dev.to/srinu_desetti/webpack-5-configuration-for-micro-frontends-complete-guide-1kb4</guid>
      <description>&lt;p&gt;&lt;code&gt;publicPath: "https://localhost:4002/"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That one line cost me 3 hours in production. Every chunk after remoteEntry.js returned 404. The fix? Change it to &lt;code&gt;publicPath: "/products/"&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The Webpack config you use for local Micro Frontend development is &lt;strong&gt;fundamentally different&lt;/strong&gt; from what you deploy. 7 settings change between environments, and most tutorials only show one config.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this article covers
&lt;/h2&gt;

&lt;p&gt;Every section of the Webpack 5 config for Micro Frontends, shown TWICE — local development AND production — side by side:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Entry &amp;amp; Output&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Host uses &lt;code&gt;publicPath: "/"&lt;/code&gt; in both environments&lt;/li&gt;
&lt;li&gt;Remotes use &lt;code&gt;https://localhost:PORT/&lt;/code&gt; locally, &lt;code&gt;/mfe-name/&lt;/code&gt; in production&lt;/li&gt;
&lt;li&gt;Production adds &lt;code&gt;[contenthash]&lt;/code&gt; for long-term caching&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Babel Loader&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Standard: only processes &lt;code&gt;src/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Monorepo: MUST include &lt;code&gt;../../packages&lt;/code&gt; for shared package JSX&lt;/li&gt;
&lt;li&gt;Forgetting this = &lt;code&gt;SyntaxError: Unexpected token &amp;lt;&lt;/code&gt; at runtime&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Dev Server&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local: HTTPS (mkcert), CORS headers (&lt;code&gt;Access-Control-Allow-Origin: *&lt;/code&gt;), historyApiFallback&lt;/li&gt;
&lt;li&gt;Production: No devServer at all — Nginx serves static files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why HTTPS is required locally:&lt;/strong&gt;&lt;br&gt;
Module Federation loads remote code via `&lt;/p&gt;

&lt;p&gt;article link :-   &lt;a href="https://blog.srinudesetti.in/micro-frontend/react/webpack-5-configuration-micro-frontend" rel="noopener noreferrer"&gt;https://blog.srinudesetti.in/micro-frontend/react/webpack-5-configuration-micro-frontend&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>microfrontend</category>
      <category>webpack</category>
      <category>srinudesetti</category>
    </item>
    <item>
      <title>Shared Packages in Micro Frontend Monorepo — Complete Guide</title>
      <dc:creator>Srinu Web developer</dc:creator>
      <pubDate>Sat, 28 Mar 2026 11:28:23 +0000</pubDate>
      <link>https://dev.to/srinu_desetti/shared-packages-in-micro-frontend-monorepo-complete-guide-141f</link>
      <guid>https://dev.to/srinu_desetti/shared-packages-in-micro-frontend-monorepo-complete-guide-141f</guid>
      <description>&lt;p&gt;Your Micro Frontend has a silent bug and you don't know it yet.&lt;/p&gt;

&lt;p&gt;The user logs in on the Auth MFE. The auth token gets saved to the Redux store. They navigate to Products — a different MFE loaded via Module Federation. The Products page says they're not logged in.&lt;/p&gt;

&lt;p&gt;Why? Because Products MFE created its own Redux store instance. Auth MFE has a separate instance. Two stores. Two states. Completely out of sync.&lt;/p&gt;

&lt;p&gt;This is the #1 problem teams hit when they build Micro Frontends without shared packages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are shared packages?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Internal libraries inside your monorepo that ALL MFEs consume. Instead of each MFE building its own API layer, its own Redux store, and its own UI components, you build them ONCE in &lt;code&gt;packages/&lt;/code&gt; and import everywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In this article, I break down the 3 packages that hold a production MFE monorepo together:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. @myapp/api — Shared API Layer&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full axios instance with request interceptors (JWT token attachment) and response interceptors (401 handling + token refresh)&lt;/li&gt;
&lt;li&gt;Failed request queue — when a token expires, multiple API calls fail simultaneously. Without the queue, each triggers its own refresh. The queue holds them, refreshes once, then retries all.&lt;/li&gt;
&lt;li&gt;Domain-organized API folders: Inventory-Apis/, Products-Apis/, Order-Apis/, each containing real CRUD functions&lt;/li&gt;
&lt;li&gt;File upload handling with FormData + progress tracking&lt;/li&gt;
&lt;li&gt;Asset URL resolution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. @myapp/store — Shared Redux Store&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;configureStore() with auth reducer&lt;/li&gt;
&lt;li&gt;Complete authSlice: 7 reducers (setIsLoggedIn, setAuthToken, setSessionExpired, setUserInfo, setSellerProfile, setLoading, updateUser) + 9 selectors&lt;/li&gt;
&lt;li&gt;Custom hooks (useAppDispatch, useAppSelector) ready for TypeScript&lt;/li&gt;
&lt;li&gt;Barrel export pattern — one import path for everything&lt;/li&gt;
&lt;li&gt;Module Federation singleton: true ensures ONE store instance across all MFEs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. @myapp/uicomponents — Shared UI&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CustomToast with react-hot-toast configuration&lt;/li&gt;
&lt;li&gt;Button and Card components&lt;/li&gt;
&lt;li&gt;Change the design once, every MFE updates automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The critical wiring:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Webpack &lt;code&gt;resolve.alias&lt;/code&gt; maps &lt;code&gt;@myapp/store&lt;/code&gt; to &lt;code&gt;./../packages/core/store&lt;/code&gt; at BUILD time&lt;/li&gt;
&lt;li&gt;Module Federation &lt;code&gt;shared: { singleton: true }&lt;/code&gt; deduplicates the package at RUNTIME&lt;/li&gt;
&lt;li&gt;You need BOTH. Aliases alone = each MFE bundles its own copy. Singleton alone = import path not resolved.&lt;/li&gt;
&lt;li&gt;Local config uses localhost ports. Production uses Nginx paths. Both shown side by side.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every code block is from a real production monorepo with 11 independently deployable React MFEs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read the full guide with 15 code blocks:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://blog.srinudesetti.in/micro-frontend/react/shared-packages-micro-frontend-monorepo" rel="noopener noreferrer"&gt;https://blog.srinudesetti.in/micro-frontend/react/shared-packages-micro-frontend-monorepo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>redux</category>
      <category>microfrontend</category>
      <category>react</category>
      <category>srinudesetti</category>
    </item>
    <item>
      <title>React Micro Frontend Monorepo Setup with Turborepo</title>
      <dc:creator>Srinu Web developer</dc:creator>
      <pubDate>Thu, 26 Mar 2026 09:53:57 +0000</pubDate>
      <link>https://dev.to/srinu_desetti/react-micro-frontend-monorepo-setup-with-turborepo-p6c</link>
      <guid>https://dev.to/srinu_desetti/react-micro-frontend-monorepo-setup-with-turborepo-p6c</guid>
      <description>&lt;p&gt;"Just npm run dev."&lt;/p&gt;

&lt;p&gt;That one command starts 12 React applications on 12 different ports — all in parallel. No Docker. No separate terminal tabs. No manual startup scripts.&lt;/p&gt;

&lt;p&gt;How? Turborepo + npm workspaces + Webpack 5 Module Federation.&lt;/p&gt;

&lt;p&gt;I just published a step-by-step guide for setting up a React Micro Frontend monorepo from scratch. Every config comes from a production system with 11 React MFEs on ports 4000–4011.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you'll build:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ Root package.json with npm workspaces&lt;br&gt;
→ turbo.json pipeline config (build, dev, start)&lt;br&gt;
→ Host webpack.config.js — LOCAL and PRODUCTION (they're different!)&lt;br&gt;
→ Remote MFE webpack.config.js — LOCAL and PRODUCTION&lt;br&gt;
→ The async boundary pattern (import('./bootstrap')) and why it's required&lt;br&gt;
→ Shared @myapp/store (Redux singleton) and @myapp/api (axios interceptors)&lt;br&gt;
→ Host App.jsx with lazy-loaded routes for 11 MFEs&lt;br&gt;
→ PostCSS + Tailwind config per MFE&lt;br&gt;
→ Common mistakes table with 6 errors, causes, and fixes&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key insight:&lt;/strong&gt; Local dev uses &lt;a href="https://localhost:PORT/remoteEntry.js" rel="noopener noreferrer"&gt;https://localhost:PORT/remoteEntry.js&lt;/a&gt; with mkcert certificates. Production uses /products/remoteEntry.js with Nginx routing. The webpack configs are significantly different — and most tutorials only show one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read the full guide:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://blog.srinudesetti.in/micro-frontend/react/react-micro-frontend-monorepo-turborepo" rel="noopener noreferrer"&gt;https://blog.srinudesetti.in/micro-frontend/react/react-micro-frontend-monorepo-turborepo&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Article 8 of 50 in my Micro Frontend series — this is the first article in Section 2 (React MFE). We're moving from fundamentals to hands-on implementation.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webpack</category>
      <category>microfrontend</category>
      <category>react</category>
      <category>srinudesetti</category>
    </item>
    <item>
      <title>Micro Frontend vs SPA: Which Architecture Should You Choose?</title>
      <dc:creator>Srinu Web developer</dc:creator>
      <pubDate>Wed, 25 Mar 2026 09:32:59 +0000</pubDate>
      <link>https://dev.to/srinu_desetti/micro-frontend-vs-spa-which-architecture-should-you-choose-2ogh</link>
      <guid>https://dev.to/srinu_desetti/micro-frontend-vs-spa-which-architecture-should-you-choose-2ogh</guid>
      <description>&lt;p&gt;Your SPA was perfect at 3 developers. At 8 developers, it's a war zone.&lt;/p&gt;

&lt;p&gt;Merge conflicts every morning. A broken Support page blocking the Cart team's release. 5-minute builds that used to take 20 seconds. And a 2.8 MB bundle that loads chart.js, leaflet, and xlsx on the homepage — where nobody needs them.&lt;/p&gt;

&lt;p&gt;Sound familiar?&lt;/p&gt;

&lt;p&gt;I just published a deep-dive comparing SPA and Micro Frontend architectures with &lt;strong&gt;15 real code blocks&lt;/strong&gt; showing both approaches side by side:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you'll see:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;→ SPA webpack.config.js vs MFE webpack.config.js (Local AND Production — they're different)&lt;br&gt;
→ SPA routing (all routes in one file) vs MFE routing (lazy-loaded remote apps)&lt;br&gt;
→ SPA deployment (one build, one deploy, one bottleneck) vs MFE deployment (30-second independent builds)&lt;br&gt;
→ SPA bundle problem (2.8 MB all upfront) vs MFE targeted loading (150-300 KB per MFE)&lt;br&gt;
→ React Host (ModuleFederationPlugin) vs Next.js Host (NextFederationPlugin) — the config is NOT the same&lt;br&gt;
→ Turborepo pipeline for parallel MFE builds&lt;br&gt;
→ 4-step strangler migration pattern from SPA to MFE&lt;/p&gt;

&lt;p&gt;This isn't "MFE is better than SPA." I show you exactly when SPA is the RIGHT choice (small team, single domain, fast MVP) and when MFE becomes necessary.&lt;/p&gt;

&lt;p&gt;Every code block is from a production system with 7 MFEs running on independent ports.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read the full comparison:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://blog.srinudesetti.in/micro-frontend/fundamentals/micro-frontend-vs-spa" rel="noopener noreferrer"&gt;https://blog.srinudesetti.in/micro-frontend/fundamentals/micro-frontend-vs-spa&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>microfrontend</category>
      <category>srinudesetti</category>
    </item>
    <item>
      <title>Micro Frontend vs Microservices: What's the Difference?</title>
      <dc:creator>Srinu Web developer</dc:creator>
      <pubDate>Mon, 23 Mar 2026 10:28:54 +0000</pubDate>
      <link>https://dev.to/srinu_desetti/micro-frontend-vs-microservices-whats-the-difference-2076</link>
      <guid>https://dev.to/srinu_desetti/micro-frontend-vs-microservices-whats-the-difference-2076</guid>
      <description>&lt;p&gt;"Micro Frontend is just Microservices for the frontend."&lt;/p&gt;

&lt;p&gt;I hear this in every architecture discussion. And it's &lt;strong&gt;wrong&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;They share the same philosophy — decompose a monolith into independently deployable units. But the implementation? Completely different layers, different tools, different problems they solve.&lt;/p&gt;

&lt;p&gt;Here's what most articles won't show you:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The real confusion starts when you need BOTH.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your Products MFE calls the Product Service. Your Cart MFE calls the Cart Service AND the Logistics Service. Your Auth MFE and Account MFE both call the same User Service. One-to-many. Many-to-one. Through an API Gateway. With a shared axios singleton handling JWT refresh across every MFE.&lt;/p&gt;

&lt;p&gt;In this article, I break down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📐 Side-by-side comparison across 14 dimensions (layer, communication, deployment, database, scaling, gateway, team ownership...)&lt;/li&gt;
&lt;li&gt;🔗 How MFEs connect to Microservices through a shared API config pattern — real production code&lt;/li&gt;
&lt;li&gt;🏗️ What a real Express.js microservice looks like (CORS, health checks, Kubernetes probes)&lt;/li&gt;
&lt;li&gt;🐳 Docker Compose running MFEs + Microservices + Nginx + MongoDB together&lt;/li&gt;
&lt;li&gt;⚠️ 3 misconceptions that lead teams to over-engineer&lt;/li&gt;
&lt;li&gt;🧭 Decision flowchart: When to adopt MFE only, Microservices only, both, or neither&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every code block is from a real production system — not toy examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read the full guide with 10+ code blocks, architecture diagrams, and decision framework:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://blog.srinudesetti.in/micro-frontend/fundamentals/micro-frontend-vs-microservices" rel="noopener noreferrer"&gt;https://blog.srinudesetti.in/micro-frontend/fundamentals/micro-frontend-vs-microservices&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is Article 6 in my 50-article Micro Frontend series — from fundamentals through Kubernetes deployment, all based on a real 12-MFE + 8-microservice production system.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>microservices</category>
      <category>microfrontend</category>
      <category>srinudesetti</category>
    </item>
    <item>
      <title>Micro Frontend Folder Structure: Best Practices Guide</title>
      <dc:creator>Srinu Web developer</dc:creator>
      <pubDate>Sun, 22 Mar 2026 09:48:25 +0000</pubDate>
      <link>https://dev.to/srinu_desetti/micro-frontend-folder-structure-best-practices-guide-39e7</link>
      <guid>https://dev.to/srinu_desetti/micro-frontend-folder-structure-best-practices-guide-39e7</guid>
      <description>&lt;p&gt;How you organize your Micro Frontend project determines how easy it is to develop, build, deploy, and scale.&lt;/p&gt;

&lt;p&gt;In this guide, I cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monorepo vs Polyrepo comparison&lt;/li&gt;
&lt;li&gt;The recommended two-directory structure (apps/ + packages/)&lt;/li&gt;
&lt;li&gt;React Remote MFE internal structure with bootstrap.js&lt;/li&gt;
&lt;li&gt;React Host vs Next.js Host — when to use each (they are independent, not competing)&lt;/li&gt;
&lt;li&gt;Local vs Production webpack/next.config differences (with code tabs)&lt;/li&gt;
&lt;li&gt;Shared packages: Redux store, API layer, UI components&lt;/li&gt;
&lt;li&gt;Turborepo pipeline configuration&lt;/li&gt;
&lt;li&gt;Infrastructure co-location (Docker + Kubernetes)&lt;/li&gt;
&lt;li&gt;Anti-patterns to avoid&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every example is from real production projects.&lt;/p&gt;

&lt;p&gt;Read the full article: &lt;a href="https://blog.srinudesetti.in/micro-frontend/fundamentals/micro-frontend-folder-structure" rel="noopener noreferrer"&gt;https://blog.srinudesetti.in/micro-frontend/fundamentals/micro-frontend-folder-structure&lt;/a&gt;&lt;/p&gt;

</description>
      <category>microfrontend</category>
      <category>monorepo</category>
      <category>nextjs</category>
      <category>srinudesett</category>
    </item>
  </channel>
</rss>
