Fusion App Development
When to use
Use this skill when developing features, components, hooks, services, or types for a Fusion Framework React application.
Typical triggers:
- "Add a component / hook / service / page for ..."
- "Wire up the API"
- "Configure a Fusion module"
- "Which Fusion Framework hook / package should this app use?"
- "Persist this preference as an app setting"
- "Add bookmark / analytics / feature flag support"
- "Add a chart / people picker / person column to AG Grid"
- "How do I write a custom Fusion Framework module?"
- "Should this be a Fusion module or a React context?"
Implicit triggers:
- Building in
src/
- References Fusion Framework modules, EDS,
@equinor/fusion-react-*, or styled-components
- References app settings, bookmarks, analytics,
app.config.ts
- Adding route, page, or data-fetching layer
- References charting:
@equinor/fusion-framework-react-ag-charts, chart.js, react-chartjs-2
When not to use
Do not use this skill for:
- Issue authoring/triage →
fusion-issue-authoring
- Skill authoring →
fusion-skill-authoring
- Backend/service changes (separate repo)
- CI/CD or deployment config
- Architecture docs (use ADR template)
For Fusion Framework package ownership, hook behavior, or example discovery → use fusion-research first.
Required inputs
Mandatory
- What to build: feature, component, hook, or service description
- Where it fits: layer (component, hook, service, type) and parent/sibling context
For ambiguous requests, consult assets/follow-up-questions.md before implementing.
Conditional
- API endpoint details when the feature involves data fetching
- Design/layout specifics when building visual components
- Fusion module name when extending module configuration
- Whether state should persist per-user, be shareable via bookmark, or stay runtime-only
Instructions
Step 1 — Discover project conventions
Inspect target repo before writing code:
- Read
package.json — package manager (bun/pnpm/npm), scripts, dependencies.
- Read
tsconfig.json — TypeScript settings, path aliases.
- Scan
src/ — directory layout, layer structure.
- Check
docs/adr/ or contribute/ for project-specific code standards.
- Check formatter/linter config (
biome.json, .eslintrc, prettier).
- Read
app.config.ts and app.manifest.ts — endpoints, environment setup.
- Delegate uncertain Fusion Framework behavior, package ownership, or cookbook examples to
fusion-research before writing code.
Adapt to discovered conventions. references/ patterns are defaults — defer to project-specific rules when they differ.
Step 2 — Plan the implementation
New app from scratch → use assets/new-app-checklist.md.
- Break into discrete files/changes.
- Map to correct directory. Typical Fusion app:
src/components/ — React components (presentation layer)
src/hooks/ — Custom React hooks (state and side-effect logic)
src/api/ — API clients, data transforms, business logic
src/types/ — TypeScript interfaces, type aliases, enums
src/routes.ts — Route definitions (when using Fusion Router)
src/config.ts — Fusion module configuration
src/App.tsx — Root component, layout shell
- Identify shared types early — define before referencing.
- Project uses routing → follow
references/using-router.md for DSL + page patterns.
- Different structure → follow it.
Step 3 — Implement following code conventions
Follow project code standards from Step 1. For naming, TSDoc, inline comments, type patterns, code style, error handling → defer to fusion-code-conventions.
For convention questions during implementation, invoke fusion-code-conventions directly.
Step 4 — Style with styled-components, EDS, and Fusion React components
Follow references/styled-components.md, references/styling-with-eds.md, references/using-fusion-react-components.md:
- Use
styled-components for custom styling (Fusion convention).
- No CSS Modules, global CSS, Tailwind, or alternative CSS-in-JS unless project uses them.
- Use
Styled object pattern for co-located styled components.
- Prefer EDS (
@equinor/eds-core-react) for standard UI.
- Use EDS design tokens (
@equinor/eds-tokens) for colors, spacing, typography.
- Extend EDS with
styled() for customization.
- Use
@equinor/fusion-react-* for domain needs not in EDS (person display/selection, side sheets, progress).
- Inline
style props: one-off tweaks only.
- For page/view structure (shell composition, layout zones, empty/loading states), invoke
agents/design.md. For component-level EDS styling, invoke agents/styling.md.
Step 5 — Wire up data fetching (when applicable)
Follow references/configure-services.md, references/using-react-query.md, references/configure-mocking.md:
- Register HTTP clients via
configureHttpClient in config.ts or app.config.ts.
- Access clients with
useHttpClient(name) from @equinor/fusion-framework-react-app/http.
- Prefer
@equinor/fusion-framework-react-app/* hooks over direct module access. Reserve framework.modules.* for non-React contexts.
- React Query: wrap
useQuery in thin custom hooks.
- Query keys: derived from API path + parameters.
- Keep client UI state in React state/context, not server-state libs.
Step 6 — Configure Fusion modules (when applicable)
Identify which module the user needs, then read only the matching reference:
| Need |
Reference |
| HTTP clients / API integration |
references/configure-services.md |
| Context module |
references/using-context.md |
| Router and pages |
references/using-router.md |
| AG Grid |
references/using-ag-grid.md |
| AG Charts (standalone) |
references/using-ag-charts.md |
| AG Grid integrated charts |
references/using-ag-grid-charts.md |
| EDS + Fusion React components |
references/using-fusion-react-components.md |
| People service (search, display, pick) |
references/using-people-service.md |
| Settings |
references/using-settings.md |
| Bookmarks |
references/using-bookmarks.md |
| Analytics |
references/using-analytics.md |
| Runtime config / environment |
references/using-assets-and-environment.md |
| Feature flags |
references/using-feature-flags.md |
| General framework modules |
references/using-framework-modules.md |
| Custom module authoring |
references/using-custom-modules.md |
- Module setup in
config.ts via AppModuleInitiator callback.
- Access modules via hooks:
useAppModule, useHttpClient, useCurrentContext.
- Register HTTP endpoints in
app.config.ts for new API integrations.
- Enable navigation with
enableNavigation in config.ts when app uses routing.
- Define routes via Fusion Router DSL (
layout, index, route, prefix) for auto code splitting.
- Unclear framework API → use
fusion-research before choosing implementation pattern.
Step 7 — Validate
Use assets/review-checklist.md as post-generation checklist.
- Run typecheck (
bun run typecheck or pnpm typecheck) — zero errors.
- Run lint/format check — zero violations.
- Every new exported symbol has TSDoc.
- Styling follows project conventions.
- No new dependencies unless justified/approved.
Expected output
- New/modified
src/ files following project layer structure.
- All files pass typecheck + lint.
- Every exported function, component, hook, and type has TSDoc.
- Styling follows project conventions.
- Brief summary of what changed and why.
Helper agents
Optional helpers in agents/. Use for focused review or mid-implementation guidance. Runtimes without skill-local agents apply criteria inline.
Companion skill: fusion-research for source-backed Fusion ecosystem research when implementation is blocked by uncertainty.
agents/framework.md — Fusion Framework integration: modules, HTTP clients, bootstrap, runtime config, settings, bookmarks, analytics. Prefers mcp_fusion_search_framework; falls back to mcp_fusion_search_docs. Consult when wiring config.ts, app.config.ts, or framework module access.
agents/styling.md — EDS component selection, styled-components, design tokens, accessibility. Prefers mcp_fusion_search_eds. Consult when building/modifying visual components.
agents/design.md — page/view structure: Fusion Portal shell composition, layout zones, side panel usage, empty/loading state patterns. References equinor-design-system for layout ground truth. Delegates component-level checks to agents/styling.md. Consult when scaffolding new pages or layout wrappers.
agents/data-display.md — AG Grid vs AG Charts, module setup, column defs, chart options, integrated charting. Prefers mcp_fusion_search_framework. Consult for grids, charts, dashboards. Use assets/charts-decision-matrix.md for library selection.
agents/person-components.md — @equinor/fusion-react-person: PersonAvatar, PersonCard, PersonListItem, PersonPicker, PeoplePicker, PeopleViewer, PersonCell (AG Grid). DOM event pattern, valueGetter setup, pitfalls. Consult for any person display, search, or selection UI.
agents/code-quality.md — delegates convention checks (naming, TSDoc, TS strictness, intent comments) to fusion-code-conventions, aggregates findings. Run on every new/modified file before finalizing.
Safety & constraints
- No new dependencies without explicit approval.
- No direct DOM manipulation — use React patterns.
- No
any types — TypeScript strict mode standard.
- No secrets or credentials in source files.
- Conventional commits (
feat:, fix:, refactor:, etc.).
- No infrastructure files (docker-compose, CI config) unless explicitly asked.
1---2name: fusion-developer-app3description: Guides feature development in Fusion Framework React apps, including app-scoped framework research needed to choose the right hooks, modules, packages, and integration patterns before implementation. USE FOR: building new features, adding components or pages, creating hooks and services, wiring up API endpoints, extending Fusion module configuration, and answering app implementation questions about which Fusion Framework surface to use. DO NOT USE FOR: issue authoring, skill authoring, CI/CD configuration, backend service changes, or general Fusion documentation that is not tied to app implementation.4license: MIT5---67# Fusion App Development89## When to use1011Use this skill when developing features, components, hooks, services, or types for a Fusion Framework React application.1213Typical triggers:14- "Add a component / hook / service / page for ..."15- "Wire up the API"16- "Configure a Fusion module"17- "Which Fusion Framework hook / package should this app use?"18- "Persist this preference as an app setting"19- "Add bookmark / analytics / feature flag support"20- "Add a chart / people picker / person column to AG Grid"21- "How do I write a custom Fusion Framework module?"22- "Should this be a Fusion module or a React context?"2324Implicit triggers:25- Building in `src/`26- References Fusion Framework modules, EDS, `@equinor/fusion-react-*`, or styled-components27- References app settings, bookmarks, analytics, `app.config.ts`28- Adding route, page, or data-fetching layer29- References charting: `@equinor/fusion-framework-react-ag-charts`, `chart.js`, `react-chartjs-2`3031## When not to use3233Do not use this skill for:34- Issue authoring/triage → `fusion-issue-authoring`35- Skill authoring → `fusion-skill-authoring`36- Backend/service changes (separate repo)37- CI/CD or deployment config38- Architecture docs (use ADR template)3940For Fusion Framework package ownership, hook behavior, or example discovery → use `fusion-research` first.4142## Required inputs4344### Mandatory4546- What to build: feature, component, hook, or service description47- Where it fits: layer (component, hook, service, type) and parent/sibling context4849For ambiguous requests, consult `assets/follow-up-questions.md` before implementing.5051### Conditional5253- API endpoint details when the feature involves data fetching54- Design/layout specifics when building visual components55- Fusion module name when extending module configuration56- Whether state should persist per-user, be shareable via bookmark, or stay runtime-only5758## Instructions5960### Step 1 — Discover project conventions6162Inspect target repo before writing code:63641. Read `package.json` — package manager (bun/pnpm/npm), scripts, dependencies.652. Read `tsconfig.json` — TypeScript settings, path aliases.663. Scan `src/` — directory layout, layer structure.674. Check `docs/adr/` or `contribute/` for project-specific code standards.685. Check formatter/linter config (`biome.json`, `.eslintrc`, `prettier`).696. Read `app.config.ts` and `app.manifest.ts` — endpoints, environment setup.707. Delegate uncertain Fusion Framework behavior, package ownership, or cookbook examples to `fusion-research` before writing code.7172Adapt to discovered conventions. `references/` patterns are defaults — defer to project-specific rules when they differ.7374### Step 2 — Plan the implementation7576New app from scratch → use `assets/new-app-checklist.md`.77781. Break into discrete files/changes.792. Map to correct directory. Typical Fusion app:80 - `src/components/` — React components (presentation layer)81 - `src/hooks/` — Custom React hooks (state and side-effect logic)82 - `src/api/` — API clients, data transforms, business logic83 - `src/types/` — TypeScript interfaces, type aliases, enums84 - `src/routes.ts` — Route definitions (when using Fusion Router)85 - `src/config.ts` — Fusion module configuration86 - `src/App.tsx` — Root component, layout shell873. Identify shared types early — define before referencing.884. Project uses routing → follow `references/using-router.md` for DSL + page patterns.895. Different structure → follow it.9091### Step 3 — Implement following code conventions9293Follow project code standards from Step 1. For naming, TSDoc, inline comments, type patterns, code style, error handling → defer to `fusion-code-conventions`.9495For convention questions during implementation, invoke `fusion-code-conventions` directly.9697### Step 4 — Style with styled-components, EDS, and Fusion React components9899Follow `references/styled-components.md`, `references/styling-with-eds.md`, `references/using-fusion-react-components.md`:100101- Use `styled-components` for custom styling (Fusion convention).102- No CSS Modules, global CSS, Tailwind, or alternative CSS-in-JS unless project uses them.103- Use `Styled` object pattern for co-located styled components.104- Prefer EDS (`@equinor/eds-core-react`) for standard UI.105- Use EDS design tokens (`@equinor/eds-tokens`) for colors, spacing, typography.106- Extend EDS with `styled()` for customization.107- Use `@equinor/fusion-react-*` for domain needs not in EDS (person display/selection, side sheets, progress).108- Inline `style` props: one-off tweaks only.109- For page/view structure (shell composition, layout zones, empty/loading states), invoke `agents/design.md`. For component-level EDS styling, invoke `agents/styling.md`.110111### Step 5 — Wire up data fetching (when applicable)112113Follow `references/configure-services.md`, `references/using-react-query.md`, `references/configure-mocking.md`:114115- Register HTTP clients via `configureHttpClient` in `config.ts` or `app.config.ts`.116- Access clients with `useHttpClient(name)` from `@equinor/fusion-framework-react-app/http`.117- **Prefer `@equinor/fusion-framework-react-app/*` hooks** over direct module access. Reserve `framework.modules.*` for non-React contexts.118- React Query: wrap `useQuery` in thin custom hooks.119- Query keys: derived from API path + parameters.120- Keep client UI state in React state/context, not server-state libs.121122### Step 6 — Configure Fusion modules (when applicable)123124Identify which module the user needs, then read only the matching reference:125126| Need | Reference |127|---|---|128| HTTP clients / API integration | `references/configure-services.md` |129| Context module | `references/using-context.md` |130| Router and pages | `references/using-router.md` |131| AG Grid | `references/using-ag-grid.md` |132| AG Charts (standalone) | `references/using-ag-charts.md` |133| AG Grid integrated charts | `references/using-ag-grid-charts.md` |134| EDS + Fusion React components | `references/using-fusion-react-components.md` |135| People service (search, display, pick) | `references/using-people-service.md` |136| Settings | `references/using-settings.md` |137| Bookmarks | `references/using-bookmarks.md` |138| Analytics | `references/using-analytics.md` |139| Runtime config / environment | `references/using-assets-and-environment.md` |140| Feature flags | `references/using-feature-flags.md` |141| General framework modules | `references/using-framework-modules.md` |142| Custom module authoring | `references/using-custom-modules.md` |143144- Module setup in `config.ts` via `AppModuleInitiator` callback.145- Access modules via hooks: `useAppModule`, `useHttpClient`, `useCurrentContext`.146- Register HTTP endpoints in `app.config.ts` for new API integrations.147- Enable navigation with `enableNavigation` in `config.ts` when app uses routing.148- Define routes via Fusion Router DSL (`layout`, `index`, `route`, `prefix`) for auto code splitting.149- Unclear framework API → use `fusion-research` before choosing implementation pattern.150151### Step 7 — Validate152153Use `assets/review-checklist.md` as post-generation checklist.1541551. Run typecheck (`bun run typecheck` or `pnpm typecheck`) — zero errors.1562. Run lint/format check — zero violations.1573. Every new exported symbol has TSDoc.1584. Styling follows project conventions.1595. No new dependencies unless justified/approved.160161## Expected output162163- New/modified `src/` files following project layer structure.164- All files pass typecheck + lint.165- Every exported function, component, hook, and type has TSDoc.166- Styling follows project conventions.167- Brief summary of what changed and why.168169## Helper agents170171Optional helpers in `agents/`. Use for focused review or mid-implementation guidance. Runtimes without skill-local agents apply criteria inline.172173Companion skill: `fusion-research` for source-backed Fusion ecosystem research when implementation is blocked by uncertainty.174175- **`agents/framework.md`** — Fusion Framework integration: modules, HTTP clients, bootstrap, runtime config, settings, bookmarks, analytics. **Prefers `mcp_fusion_search_framework`**; falls back to `mcp_fusion_search_docs`. Consult when wiring `config.ts`, `app.config.ts`, or framework module access.176- **`agents/styling.md`** — EDS component selection, styled-components, design tokens, accessibility. **Prefers `mcp_fusion_search_eds`**. Consult when building/modifying visual components.177- **`agents/design.md`** — page/view structure: Fusion Portal shell composition, layout zones, side panel usage, empty/loading state patterns. References `equinor-design-system` for layout ground truth. Delegates component-level checks to `agents/styling.md`. Consult when scaffolding new pages or layout wrappers.178- **`agents/data-display.md`** — AG Grid vs AG Charts, module setup, column defs, chart options, integrated charting. **Prefers `mcp_fusion_search_framework`**. Consult for grids, charts, dashboards. Use `assets/charts-decision-matrix.md` for library selection.179- **`agents/person-components.md`** — `@equinor/fusion-react-person`: `PersonAvatar`, `PersonCard`, `PersonListItem`, `PersonPicker`, `PeoplePicker`, `PeopleViewer`, `PersonCell` (AG Grid). DOM event pattern, valueGetter setup, pitfalls. Consult for any person display, search, or selection UI.180- **`agents/code-quality.md`** — delegates convention checks (naming, TSDoc, TS strictness, intent comments) to `fusion-code-conventions`, aggregates findings. Run on every new/modified file before finalizing.181182## Safety & constraints183184- No new dependencies without explicit approval.185- No direct DOM manipulation — use React patterns.186- No `any` types — TypeScript strict mode standard.187- No secrets or credentials in source files.188- Conventional commits (`feat:`, `fix:`, `refactor:`, etc.).189- No infrastructure files (docker-compose, CI config) unless explicitly asked.