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?"
- "Write tests for this Fusion component / hook / route"
- "Mock auth, context, feature flags, or HTTP in this test"
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
- Adding or updating
*.test.ts / *.test.tsx, vitest.config.ts, or Fusion test fixtures
- 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
- Expected test layer: pure logic, hook, component, route, complete app, or module graph
- External boundaries tests must seed: auth, context, services, feature flags, bookmarks, or HTTP
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 — Add or update tests
Follow references/testing.md. Use agents/testing.md for focused test creation, maintenance, and
execution. It routes framework setup/rendering to fusion-framework-testing and module/HTTP state
to fusion-framework-mocking.
Step 8 — 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.
- Tests cover changed behavior using
fusion-framework-testing; test-time Fusion state uses
fusion-framework-mocking where needed.
- 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 skills:
fusion-research for source-backed Fusion ecosystem research when implementation is blocked by uncertainty.
fusion-framework-testing for Fusion Framework React test setup, fixtures, rendering, and troubleshooting.
fusion-framework-mocking for deterministic module state and HTTP/OpenAPI boundaries in tests.
agents/testing.md — creates, maintains, and executes app tests; routes to testing/mocking companion skills. Use for changed behavior, test files, fixtures, config, or failures.
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-app-23description: Guides feature development in Fusion Framework React apps, including app-scoped framework research, test authoring, and test-time mocking needed to choose and verify the right integration patterns. USE FOR: building features, components, pages, hooks, services, API integrations, module configuration, and their tests. DO NOT USE FOR: issue authoring, skill authoring, CI/CD configuration, backend service changes, or general Fusion documentation unrelated 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?"23- "Write tests for this Fusion component / hook / route"24- "Mock auth, context, feature flags, or HTTP in this test"2526Implicit triggers:27- Building in `src/`28- References Fusion Framework modules, EDS, `@equinor/fusion-react-*`, or styled-components29- References app settings, bookmarks, analytics, `app.config.ts`30- Adding route, page, or data-fetching layer31- Adding or updating `*.test.ts` / `*.test.tsx`, `vitest.config.ts`, or Fusion test fixtures32- References charting: `@equinor/fusion-framework-react-ag-charts`, `chart.js`, `react-chartjs-2`3334## When not to use3536Do not use this skill for:37- Issue authoring/triage → `fusion-issue-authoring`38- Skill authoring → `fusion-skill-authoring`39- Backend/service changes (separate repo)40- CI/CD or deployment config41- Architecture docs (use ADR template)4243For Fusion Framework package ownership, hook behavior, or example discovery → use `fusion-research` first.4445## Required inputs4647### Mandatory4849- What to build: feature, component, hook, or service description50- Where it fits: layer (component, hook, service, type) and parent/sibling context5152For ambiguous requests, consult `assets/follow-up-questions.md` before implementing.5354### Conditional5556- API endpoint details when the feature involves data fetching57- Design/layout specifics when building visual components58- Fusion module name when extending module configuration59- Whether state should persist per-user, be shareable via bookmark, or stay runtime-only60- Expected test layer: pure logic, hook, component, route, complete app, or module graph61- External boundaries tests must seed: auth, context, services, feature flags, bookmarks, or HTTP6263## Instructions6465### Step 1 — Discover project conventions6667Inspect target repo before writing code:68691. Read `package.json` — package manager (bun/pnpm/npm), scripts, dependencies.702. Read `tsconfig.json` — TypeScript settings, path aliases.713. Scan `src/` — directory layout, layer structure.724. Check `docs/adr/` or `contribute/` for project-specific code standards.735. Check formatter/linter config (`biome.json`, `.eslintrc`, `prettier`).746. Read `app.config.ts` and `app.manifest.ts` — endpoints, environment setup.757. Delegate uncertain Fusion Framework behavior, package ownership, or cookbook examples to `fusion-research` before writing code.7677Adapt to discovered conventions. `references/` patterns are defaults — defer to project-specific rules when they differ.7879### Step 2 — Plan the implementation8081New app from scratch → use `assets/new-app-checklist.md`.82831. Break into discrete files/changes.842. Map to correct directory. Typical Fusion app:85 - `src/components/` — React components (presentation layer)86 - `src/hooks/` — Custom React hooks (state and side-effect logic)87 - `src/api/` — API clients, data transforms, business logic88 - `src/types/` — TypeScript interfaces, type aliases, enums89 - `src/routes.ts` — Route definitions (when using Fusion Router)90 - `src/config.ts` — Fusion module configuration91 - `src/App.tsx` — Root component, layout shell923. Identify shared types early — define before referencing.934. Project uses routing → follow `references/using-router.md` for DSL + page patterns.945. Different structure → follow it.9596### Step 3 — Implement following code conventions9798Follow project code standards from Step 1. For naming, TSDoc, inline comments, type patterns, code style, error handling → defer to `fusion-code-conventions`.99100For convention questions during implementation, invoke `fusion-code-conventions` directly.101102### Step 4 — Style with styled-components, EDS, and Fusion React components103104Follow `references/styled-components.md`, `references/styling-with-eds.md`, `references/using-fusion-react-components.md`:105106- Use `styled-components` for custom styling (Fusion convention).107- No CSS Modules, global CSS, Tailwind, or alternative CSS-in-JS unless project uses them.108- Use `Styled` object pattern for co-located styled components.109- Prefer EDS (`@equinor/eds-core-react`) for standard UI.110- Use EDS design tokens (`@equinor/eds-tokens`) for colors, spacing, typography.111- Extend EDS with `styled()` for customization.112- Use `@equinor/fusion-react-*` for domain needs not in EDS (person display/selection, side sheets, progress).113- Inline `style` props: one-off tweaks only.114- For page/view structure (shell composition, layout zones, empty/loading states), invoke `agents/design.md`. For component-level EDS styling, invoke `agents/styling.md`.115116### Step 5 — Wire up data fetching (when applicable)117118Follow `references/configure-services.md`, `references/using-react-query.md`, `references/configure-mocking.md`:119120- Register HTTP clients via `configureHttpClient` in `config.ts` or `app.config.ts`.121- Access clients with `useHttpClient(name)` from `@equinor/fusion-framework-react-app/http`.122- **Prefer `@equinor/fusion-framework-react-app/*` hooks** over direct module access. Reserve `framework.modules.*` for non-React contexts.123- React Query: wrap `useQuery` in thin custom hooks.124- Query keys: derived from API path + parameters.125- Keep client UI state in React state/context, not server-state libs.126127### Step 6 — Configure Fusion modules (when applicable)128129Identify which module the user needs, then read only the matching reference:130131| Need | Reference |132|---|---|133| HTTP clients / API integration | `references/configure-services.md` |134| Context module | `references/using-context.md` |135| Router and pages | `references/using-router.md` |136| AG Grid | `references/using-ag-grid.md` |137| AG Charts (standalone) | `references/using-ag-charts.md` |138| AG Grid integrated charts | `references/using-ag-grid-charts.md` |139| EDS + Fusion React components | `references/using-fusion-react-components.md` |140| People service (search, display, pick) | `references/using-people-service.md` |141| Settings | `references/using-settings.md` |142| Bookmarks | `references/using-bookmarks.md` |143| Analytics | `references/using-analytics.md` |144| Runtime config / environment | `references/using-assets-and-environment.md` |145| Feature flags | `references/using-feature-flags.md` |146| General framework modules | `references/using-framework-modules.md` |147| Custom module authoring | `references/using-custom-modules.md` |148149- Module setup in `config.ts` via `AppModuleInitiator` callback.150- Access modules via hooks: `useAppModule`, `useHttpClient`, `useCurrentContext`.151- Register HTTP endpoints in `app.config.ts` for new API integrations.152- Enable navigation with `enableNavigation` in `config.ts` when app uses routing.153- Define routes via Fusion Router DSL (`layout`, `index`, `route`, `prefix`) for auto code splitting.154- Unclear framework API → use `fusion-research` before choosing implementation pattern.155156### Step 7 — Add or update tests157158Follow `references/testing.md`. Use `agents/testing.md` for focused test creation, maintenance, and159execution. It routes framework setup/rendering to `fusion-framework-testing` and module/HTTP state160to `fusion-framework-mocking`.161162### Step 8 — Validate163164Use `assets/review-checklist.md` as post-generation checklist.1651661. Run typecheck (`bun run typecheck` or `pnpm typecheck`) — zero errors.1672. Run lint/format check — zero violations.1683. Every new exported symbol has TSDoc.1694. Styling follows project conventions.1705. No new dependencies unless justified/approved.171172## Expected output173174- New/modified `src/` files following project layer structure.175- All files pass typecheck + lint.176- Every exported function, component, hook, and type has TSDoc.177- Styling follows project conventions.178- Tests cover changed behavior using `fusion-framework-testing`; test-time Fusion state uses179 `fusion-framework-mocking` where needed.180- Brief summary of what changed and why.181182## Helper agents183184Optional helpers in `agents/`. Use for focused review or mid-implementation guidance. Runtimes without skill-local agents apply criteria inline.185186Companion skills:187188- `fusion-research` for source-backed Fusion ecosystem research when implementation is blocked by uncertainty.189- `fusion-framework-testing` for Fusion Framework React test setup, fixtures, rendering, and troubleshooting.190- `fusion-framework-mocking` for deterministic module state and HTTP/OpenAPI boundaries in tests.191192- **`agents/testing.md`** — creates, maintains, and executes app tests; routes to testing/mocking companion skills. Use for changed behavior, test files, fixtures, config, or failures.193- **`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.194- **`agents/styling.md`** — EDS component selection, styled-components, design tokens, accessibility. **Prefers `mcp_fusion_search_eds`**. Consult when building/modifying visual components.195- **`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.196- **`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.197- **`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.198- **`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.199200## Safety & constraints201202- No new dependencies without explicit approval.203- No direct DOM manipulation — use React patterns.204- No `any` types — TypeScript strict mode standard.205- No secrets or credentials in source files.206- Conventional commits (`feat:`, `fix:`, `refactor:`, etc.).207- No infrastructure files (docker-compose, CI config) unless explicitly asked.