Guides development of Fusion portal shells — scaffolding, module configuration, app loading, routing, header/context integration, analytics, and deployment using the Fusion Framework CLI portal commands. USE FOR: create portal, scaffold portal, configure portal modules, portal app loading, portal routing, portal header, context selector, portal analytics, portal telemetry, portal manifest, ffc portal dev, portal deployment, embed apps in portal. DO NOT USE FOR: app-level feature development (use fusion-app-react-dev), backend service changes, Fusion Help Center integration, skill authoring.
license
MIT
compatibility
Requires @equinor/fusion-framework-cli for portal scaffolding and dev server. Requires @equinor/fusion-framework and @equinor/fusion-framework-react for portal runtime.
When Fusion MCP is available, prefer mcp_fusion_search_framework with queries like "portal manifest definePortalManifest ffc portal" or "createFrameworkProvider PortalModuleInitiator portal configure" for latest API surface. Label guidance not confirmed by MCP as fallback.
Key difference from app configuration: the portal configures FrameworkConfigurator and its modules are hoisted to all child apps. MSAL/auth is configured at portal level and inherited by apps.
Warning: Apploader is an experimental POC. Embedded apps may have routing and context issues. Best for simple apps like PowerBI or PowerApps views.
Custom app loader — for full control over loading states, error handling, and mounting. Use useFramework<[AppModule]>(), observe fusion.modules.app.current$, and call app.initialize(). See references/portal-architecture.md for the annotated custom AppLoader pattern.
Portal routing typically uses react-router-dom via the navigation module:
# Build the portal template
ffc portal build
# Upload to the Fusion portal service (authenticate via `az login` or FUSION_TOKEN env var)
ffc portal upload --portal-id <id>
# Tag a specific version
ffc portal tag --portal-id <id> --tag latest --version <version>
Never paste tokens directly into commands. Use az login for interactive auth or set FUSION_TOKEN env var for CI pipelines.
Step 8 — Validate
ffc portal dev starts without errors
Apps load at /apps/:appKey
Context selector and header render properly
TypeScript compiles with no errors
Analytics events fire on app load/select (if enabled)
Expected output
Working portal shell with app loading, routing, and chrome
Portal-level module configuration with correct FrameworkConfigurator usage
Loading and error states handled for app initialization
Brief summary of what was created or changed
Helper agents
Same companion infrastructure as fusion-app-react-dev:
fusion-research — source-backed Fusion ecosystem research when portal behavior is uncertain
fusion-code-conventions — naming, TSDoc, and code style checks
When Fusion MCP is available, prefer mcp_fusion_search_framework for portal-specific lookups.
Safety & constraints
MSAL is portal-level — never configure auth in apps; it is hoisted from the portal
Don't invent portal APIs — only reference APIs confirmed by MCP or documented in references
Apploader is experimental — always mention routing/context limitations when advising on app embedding
No secrets in source — MSAL client IDs must come from environment variables, not hardcoded
Don't modify the production Fusion portal — this skill covers custom portal development only