You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is the big one. The one where React 17 gets a tasteful retirement party, React 19 moves in, and routing in Fusion finally has one opinionated story instead of three competing ones. Also: your auth flow got smarter, the CLI grew some muscle, and lodash got shown the door.
The entire framework now targets React 19 with a minimum floor of React 18. React 17 is officially unsupported β if you're still there, it's time to move. No clever workaround, sorry π.
What this means in practice:
All @equinor/fusion-framework-react-* packages require react ^18.0.0 || ^19.0.0
Internal rendering uses createRoot β the old ReactDOM.render path is gone
renderApp / renderComponent are no longer deprecated; they now use createRoot under the hood, so you can delete some boilerplate and pretend it was always this clean β¨
EDS packages and fusion-react-styles are updated to React 19-compatible releases (Material-UI v4 dependencies removed)
Vitest upgraded to v4 across the board
Migration: Bump to React 18+ (or ideally 19), update all @equinor/fusion-framework-* dependencies, and test. Existing React 18 code should Just Workβ’.
Fusion React Router β a real routing story (#3765, part of #3820)
New package: @equinor/fusion-framework-react-router
Fusion finally has a first-class, Fusion-aware routing DSL built on React Router v7 β instead of the previous "three ways to maybe do routing" situation. The DSL is small, composable, and typed:
Fusion context injection β fusion.modules and fusion.context are automatically available in loaders, actions, and components. No more prop-threading your HTTP client through seven layers of React context.
Route schemas β toRouteSchema generates manifest-compatible route metadata from your route definitions. Single source of truth from code to docs to app manifest.
Backward compatible β plain RouteObject[] arrays still work. Migrate incrementally.
Vite plugin β optional static analysis and optimized route tree generation via @react-router/dev.
NavigationProvider.createRouter() is deprecated β it still works but emits telemetry warnings. New work should use the DSL.
Navigation module refactored: navigator β history, new events (NavigateEvent, NavigatedEvent).
Migration: New apps should start with the DSL from day one. Existing apps can keep using RouteObject[] and migrate incrementally. Updated cookbooks (app-react-charts, app-react-people, app-react-bookmark-advanced) show the recommended patterns.
π Auth / MSAL
MSAL got a handful of genuinely useful improvements beyond the v4 upgrade that shipped in #3727:
Backend-issued auth code exchange (#4000) β eliminates the double-login problem for SPAs. If your backend hands out an auth code, the MSAL module can now consume it directly.
Configurable login hint (#4049) β set a default login hint on the configurator for silent SSO, no per-call boilerplate needed.
Reset authCode (#4141) β MsalConfigurator now lets you clear a previously set auth code.
BatchLogProcessor replaces SimpleLogProcessor (#4103) β less noise, better batching.
trackFeature now accepts optional data (#3849) β pass additional key-value context with analytics events.
appKey on context-change events (#4119) β οΈbreaking β ContextSelectedCollector now correlates context changes with the active app.
ConsoleAnalyticsAdapter (#3900) β enable fusionLogAnalytics feature flag in dev-portal to see analytics events in your browser console. Handy for debugging.
Zod schema compliance (#4149) β extractContextMetadata now plays nicely with the Zod context schema.
πΎ CLI
The CLI had a genuinely productive few months:
Snapshot versions (#3953) β app pack --snapshot and app publish --snapshot generate timestamped preview versions without touching source. Great for PR previews.
Artifact-based validation (#3974) β app publish can now validate from built bundles, no source code required. Build once, deploy many.
--config for publish (#3990) β point to a specific config file when publishing.
app serve command β serve built apps with the dev-portal locally.
Custom tags (#3978, #3923) β tag apps/portals with arbitrary strings in build schema and manifests.
Raw imports β ?raw imports for markdown files work out of the box in CLI builds.
AG Grid v35 + AG Charts v13 (#4062) β AG Charts extracted into standalone @equinor/fusion-framework-react-ag-charts. Theme shim added for mixed v34/v35 scenarios (#4087).
AI Module (#3757) β POC for Azure OpenAI integration with embeddings and a plugin-based CLI architecture. Still early, but it's in the box.
Service discovery overrides (#3961, #3995, #4105) β override endpoint keys per environment, with session-based overrides for non-browser contexts.
People module β updated PersonController with new suggest/resolve methods (#4095).
Lodash removed (#3963) β lodash.mergewith and lodash.clonedeep replaced with native alternatives. One fewer supply-chain worry.
All 18 cookbook READMEs were rewritten with real code examples and inline explanations. Several cookbooks migrated to the new router DSL as reference implementations. New styling cookbook demonstrates React 19-compatible fusion-react-styles without Material-UI. VuePress docs gained a dedicated React Router module page.
π€ Beep Bopp β Release notes assembled by Fusion Assistant. Chuck Norris could have upgraded to React 19 without a build step, but he chose to let us mortals do it properly.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Fusion Framework β The React 19 Release π
This is the big one. The one where React 17 gets a tasteful retirement party, React 19 moves in, and routing in Fusion finally has one opinionated story instead of three competing ones. Also: your auth flow got smarter, the CLI grew some muscle, and lodash got shown the door.
Let's break it down.
π― The Headlines
React 19 is here (#3820)
The entire framework now targets React 19 with a minimum floor of React 18. React 17 is officially unsupported β if you're still there, it's time to move. No clever workaround, sorry π.
What this means in practice:
@equinor/fusion-framework-react-*packages requirereact ^18.0.0 || ^19.0.0createRootβ the oldReactDOM.renderpath is gonerenderApp/renderComponentare no longer deprecated; they now usecreateRootunder the hood, so you can delete some boilerplate and pretend it was always this clean β¨fusion-react-stylesare updated to React 19-compatible releases (Material-UI v4 dependencies removed)Migration: Bump to React 18+ (or ideally 19), update all
@equinor/fusion-framework-*dependencies, and test. Existing React 18 code should Just Workβ’.Fusion React Router β a real routing story (#3765, part of #3820)
New package:
@equinor/fusion-framework-react-routerFusion finally has a first-class, Fusion-aware routing DSL built on React Router v7 β instead of the previous "three ways to maybe do routing" situation. The DSL is small, composable, and typed:
Key bits:
fusion.modulesandfusion.contextare automatically available in loaders, actions, and components. No more prop-threading your HTTP client through seven layers of React context.toRouteSchemagenerates manifest-compatible route metadata from your route definitions. Single source of truth from code to docs to app manifest.RouteObject[]arrays still work. Migrate incrementally.@react-router/dev.NavigationProvider.createRouter()is deprecated β it still works but emits telemetry warnings. New work should use the DSL.navigatorβhistory, new events (NavigateEvent,NavigatedEvent).Migration: New apps should start with the DSL from day one. Existing apps can keep using
RouteObject[]and migrate incrementally. Updated cookbooks (app-react-charts,app-react-people,app-react-bookmark-advanced) show the recommended patterns.π Auth / MSAL
MSAL got a handful of genuinely useful improvements beyond the v4 upgrade that shipped in #3727:
MsalConfiguratornow lets you clear a previously set auth code.π Analytics
SimpleLogProcessor(#4103) β less noise, better batching.trackFeaturenow accepts optional data (#3849) β pass additional key-value context with analytics events.appKeyon context-change events (#4119)ContextSelectedCollectornow correlates context changes with the active app.fusionLogAnalyticsfeature flag in dev-portal to see analytics events in your browser console. Handy for debugging.extractContextMetadatanow plays nicely with the Zod context schema.πΎ CLI
The CLI had a genuinely productive few months:
app pack --snapshotandapp publish --snapshotgenerate timestamped preview versions without touching source. Great for PR previews.app publishcan now validate from built bundles, no source code required. Build once, deploy many.--configfor publish (#3990) β point to a specific config file when publishing.app servecommand β serve built apps with the dev-portal locally.?rawimports for markdown files work out of the box in CLI builds.π¦ Other Notable Stuff
@equinor/fusion-framework-react-ag-charts. Theme shim added for mixed v34/v35 scenarios (#4087).PersonControllerwith new suggest/resolve methods (#4095).lodash.mergewithandlodash.clonedeepreplaced with native alternatives. One fewer supply-chain worry.react-router-domv5 patterns removed@equinor/fusion-framework-react-routerorreact-routerv7navigation.navigatordeprecatednavigation.history.historyNavigationProvider.createRouter()deprecated<Router>from@equinor/fusion-framework-react-routeroriginalDetail/updateDetails/allowEventDetailsMutationusageContextSelectedCollector(#4119)appKeyappProviderargumentπ Docs & Cookbooks
All 18 cookbook READMEs were rewritten with real code examples and inline explanations. Several cookbooks migrated to the new router DSL as reference implementations. New styling cookbook demonstrates React 19-compatible
fusion-react-styleswithout Material-UI. VuePress docs gained a dedicated React Router module page.π Key Links
π€ Beep Bopp β Release notes assembled by Fusion Assistant. Chuck Norris could have upgraded to React 19 without a build step, but he chose to let us mortals do it properly.
All reactions