Microsoft Fluent 2 Design System — Core Knowledge Base
Overview
Fluent 2 is Microsoft's open-source design system powering Microsoft 365, Teams, Copilot, Windows,
and the broader Microsoft ecosystem. It provides a unified design language with design tokens,
a React component library (@fluentui/react-components), and platform-specific implementations
for Web, iOS, and Android.
Key packages:
@fluentui/react-components — Main component library (Fluent UI React v9)
@fluentui/react-icons — Fluent icon system (filled + regular variants)
@fluentui/tokens — Design token definitions
@fluentui/react-theme — Theme definitions and brand ramp utilities
Design resources:
Core Design Principles
1. Content-First
The design serves the content. Chrome, ornamentation, and UI framework recede so content takes center stage.
2. Inclusive by Default
Every component must be accessible. WCAG 2.1 AA compliance is the floor, not the ceiling.
3. Coherent, Not Uniform
Products share tokens, components, and patterns — but each adapts them to its unique context.
4. Calm Computing
Interfaces should reduce cognitive load. Motion is purposeful. Color draws focus, not distraction.
5. Universal Design Language
Fluent 2 works across web, mobile, and desktop. Design tokens abstract platform differences.
External resources:
Design Tokens
Design tokens are the atomic values of the design system — named constants for colors, spacing,
typography, shadows, border radii, and motion.
Token Architecture
Fluent 2 uses a three-tier token architecture:
- Global tokens — Raw palette values (e.g.,
grey10, brandPrimary). Never used directly in components.
- Alias tokens — Semantic references (e.g.,
colorNeutralBackground1). Theme-aware.
- Component tokens — Component-specific overrides (rare).
Spacing Tokens (Global Spacing Ramp)
Base unit: 4px. All spacing derives from this unit.
| Token |
Value |
spacingHorizontalNone / spacingVerticalNone |
0px |
spacingHorizontalXXS / spacingVerticalXXS |
2px |
spacingHorizontalXS / spacingVerticalXS |
4px |
spacingHorizontalSNudge / spacingVerticalSNudge |
6px |
spacingHorizontalS / spacingVerticalS |
8px |
spacingHorizontalMNudge / spacingVerticalMNudge |
10px |
spacingHorizontalM / spacingVerticalM |
12px |
spacingHorizontalL / spacingVerticalL |
16px |
spacingHorizontalXL / spacingVerticalXL |
20px |
spacingHorizontalXXL / spacingVerticalXXL |
24px |
spacingHorizontalXXXL / spacingVerticalXXXL |
32px |
Border Radius Tokens
| Token |
Value |
borderRadiusNone |
0px |
borderRadiusSmall |
2px |
borderRadiusMedium |
4px |
borderRadiusLarge |
6px |
borderRadiusXLarge |
8px |
borderRadiusCircular |
10000px |
Shadow / Elevation Tokens
| Token |
Usage |
shadow2 |
Subtle lift (cards at rest) |
shadow4 |
Light elevation (dropdowns) |
shadow8 |
Medium elevation (popovers) |
shadow16 |
High elevation (dialogs) |
shadow28 |
Highest elevation (teaching callouts) |
shadow64 |
Maximum elevation |
Typography Tokens
Font family: 'Segoe UI Variable', 'Segoe UI', system-ui, sans-serif
| Token |
Size |
Line Height |
fontSizeBase100 |
10px |
14px |
fontSizeBase200 |
12px |
16px |
fontSizeBase300 |
14px |
20px |
fontSizeBase400 |
16px |
22px |
fontSizeBase500 |
20px |
28px |
fontSizeBase600 |
24px |
32px |
fontSizeHero700 |
28px |
36px |
fontSizeHero800 |
32px |
40px |
fontSizeHero900 |
40px |
52px |
fontSizeHero1000 |
68px |
92px |
Font weights: fontWeightRegular (400), fontWeightMedium (500), fontWeightSemibold (600), fontWeightBold (700)
Motion Tokens
| Token |
Value |
durationUltraFast |
50ms |
durationFaster |
100ms |
durationFast |
150ms |
durationNormal |
200ms |
durationGentle |
250ms |
durationSlow |
300ms |
durationSlower |
400ms |
durationUltraSlow |
500ms |
External resources:
Color System
Neutral Colors
Backgrounds:
colorNeutralBackground1 — Primary surface
colorNeutralBackground2 — Secondary surface
colorNeutralBackground3 through 6 — Tertiary+
colorSubtleBackground — Transparent at rest, visible on hover
colorTransparentBackground — Fully transparent
Foregrounds:
colorNeutralForeground1 — Primary text (high contrast)
colorNeutralForeground2 — Secondary text
colorNeutralForeground3 — Tertiary text
colorNeutralForegroundDisabled — Disabled text
Strokes:
colorNeutralStroke1 — Primary border
colorNeutralStrokeAccessible — AA-contrast border
colorNeutralStrokeDisabled — Disabled border
Brand Colors
Brand tokens use a 16-shade ramp (shade10 through shade160) generated from a primary color:
import { createLightTheme, createDarkTheme, BrandVariants } from '@fluentui/react-components';
const myBrand: BrandVariants = {
10: '#020305', 20: '#111723', 30: '#16212F', 40: '#1B2C3D',
50: '#1F374B', 60: '#24425A', 70: '#284D69', 80: '#2D5979',
90: '#366B8E', 100: '#437DA3', 110: '#548FB7', 120: '#6BA1C9',
130: '#85B3D7', 140: '#A1C5E3', 150: '#BFD7ED', 160: '#DDE9F6',
};
const lightTheme = createLightTheme(myBrand);
const darkTheme = createDarkTheme(myBrand);
Status Colors
| Token |
Usage |
colorStatusSuccessBackground1 / Foreground1 |
Success states |
colorStatusWarningBackground1 / Foreground1 |
Warning states |
colorStatusDangerBackground1 / Foreground1 |
Error/danger states |
Layout System
Breakpoints / Size Classes
| Size Class |
Range |
Typical Use |
small |
320–479px |
Phone portrait |
medium |
480–639px |
Phone landscape / small tablet |
large |
640–1023px |
Tablet |
x-large |
1024–1365px |
Small desktop / laptop |
xx-large |
1366–1919px |
Desktop |
xxx-large |
1920px+ |
Large desktop / ultrawide |
Responsive Techniques
- Reposition — Move elements from vertical to horizontal layout
- Resize — Adjust element dimensions and margins
- Reflow — Single-column to multi-column
- Show/Hide — Display or hide elements based on viewport
- Re-architect — Restructure layout entirely
Touch Targets
- iOS and Web: minimum 44×44px
- Android: minimum 48×48px
External resources:
Component Library
The @fluentui/react-components package provides the full Fluent UI React v9 component library.
| Category |
Components |
| Actions |
Button, CompoundButton, SplitButton, ToggleButton, MenuButton, Link |
| Inputs |
Input, Textarea, Select, Combobox, Dropdown, SearchBox, SpinButton, Slider, Switch, Checkbox, RadioGroup, DatePicker, TimePicker, ColorPicker, Rating |
| Layout |
Card, CardHeader/Footer/Preview, Divider, Drawer, Dialog, Accordion, TabList/Tab, Toolbar, Breadcrumb |
| Data Display |
Avatar, AvatarGroup, Badge, CounterBadge, PresenceBadge, Tag/TagGroup, DataGrid, Table, Tree, Persona, Text, Label, InfoLabel |
| Feedback |
Toast/Toaster, MessageBar, ProgressBar, Spinner, Skeleton, Alert |
| Navigation |
Menu/MenuItem/MenuList, Nav/NavItem, Overflow/OverflowItem |
| Overlays |
Popover, Tooltip, TeachingPopover, InfoButton |
| Media |
Image |
Theming
FluentProvider
All Fluent components must be wrapped in a FluentProvider:
import { FluentProvider, webLightTheme } from '@fluentui/react-components';
<FluentProvider theme={webLightTheme}>
<App />
</FluentProvider>
Built-in themes: webLightTheme, webDarkTheme, teamsLightTheme, teamsDarkTheme, teamsHighContrastTheme
Nested Themes
<FluentProvider theme={webLightTheme}>
<MainContent />
<FluentProvider theme={webDarkTheme}>
<Sidebar />
</FluentProvider>
</FluentProvider>
Accessibility
- Color contrast: 4.5:1 for normal text, 3:1 for large text, 3:1 for non-text UI
- Focus indicators: Visible 2px focus ring on all interactive elements
- Keyboard navigation: All interactive components reachable via keyboard
- Screen readers: Proper ARIA attributes on all components
- Reduced motion:
prefers-reduced-motion support
- High contrast: Full Windows High Contrast Mode support
Focus utilities:
import { useArrowNavigationGroup, useFocusableGroup } from '@fluentui/react-components';
Iconography
Package: @fluentui/react-icons — 20,000+ icons in Regular (outline) and Filled styles.
Sizes: 16px, 20px, 24px, 28px, 32px, 48px. Default export = 20px.
import { CalendarRegular, CalendarFilled, bundleIcon } from '@fluentui/react-icons';
const CalendarIcon = bundleIcon(CalendarFilled, CalendarRegular);
Cross-Reference: Specialized Skills
For detailed coverage of specific topics, see these dedicated skills:
| Skill |
Topics |
| fluent-nextjs |
Next.js App Router + Pages Router setup, SSR, use client boundaries, Griffel AOT with Next.js |
| fluent-griffel |
makeStyles deep dive, AOT compilation, shorthands, selectors, RTL, DevTools |
| fluent-extensibility |
Slots (4 levels), custom variants, customStyleHooks, headless patterns, v8→v9 migration |
| fluent-web-components |
Web Components (@fluentui/web-components), framework-agnostic usage |
| fluent-charting |
@fluentui/react-charting — chart types, theming, accessibility |
| fluent-cross-platform |
iOS (Swift/UIKit) and Android (Kotlin) Fluent implementations |
| fluent-forms |
Form orchestration with Formik/Yup, React Hook Form/Zod, Field validation |
| fluent-integration |
B2C UI customization, Office Add-ins, SharePoint integration |
Reference Files
${CLAUDE_PLUGIN_ROOT}/skills/fluent-design-system/references/design-tokens-reference.md — Complete token catalog
${CLAUDE_PLUGIN_ROOT}/skills/fluent-design-system/references/component-catalog.md — All components with props
${CLAUDE_PLUGIN_ROOT}/skills/fluent-design-system/references/teams-integration.md — Teams multi-surface architecture
${CLAUDE_PLUGIN_ROOT}/skills/fluent-design-system/references/advanced-patterns.md — Advanced UI patterns
${CLAUDE_PLUGIN_ROOT}/skills/fluent-design-system/references/motion-framer-reference.md — Motion system deep dive
${CLAUDE_PLUGIN_ROOT}/skills/fluent-design-system/examples/theme-examples.md — Theme creation walkthroughs
${CLAUDE_PLUGIN_ROOT}/skills/fluent-design-system/examples/layout-patterns.md — Responsive layout examples
1---2name: fluent-2-design-system3description: Core skill for Microsoft Fluent 2 design system — design tokens, color system, typography, layout, component library overview, theming with FluentProvider, accessibility patterns, and iconography. This is the foundational skill; specialized topics are covered by dedicated skills (fluent-nextjs, fluent-griffel, fluent-extensibility, fluent-web-components, fluent-charting, fluent-cross-platform, fluent-forms, fluent-integration).4---56# Microsoft Fluent 2 Design System — Core Knowledge Base78## Overview910Fluent 2 is Microsoft's open-source design system powering Microsoft 365, Teams, Copilot, Windows,11and the broader Microsoft ecosystem. It provides a unified design language with design tokens,12a React component library (`@fluentui/react-components`), and platform-specific implementations13for Web, iOS, and Android.1415**Key packages:**16- `@fluentui/react-components` — Main component library (Fluent UI React v9)17- `@fluentui/react-icons` — Fluent icon system (filled + regular variants)18- `@fluentui/tokens` — Design token definitions19- `@fluentui/react-theme` — Theme definitions and brand ramp utilities2021**Design resources:**22- Fluent 2 site: https://fluent2.microsoft.design/23- Storybook: https://react.fluentui.dev/24- GitHub: https://github.com/microsoft/fluentui25- Developer portal: https://developer.microsoft.com/en-us/fluentui2627---2829## Core Design Principles3031### 1. Content-First32The design serves the content. Chrome, ornamentation, and UI framework recede so content takes center stage.3334### 2. Inclusive by Default35Every component must be accessible. WCAG 2.1 AA compliance is the floor, not the ceiling.3637### 3. Coherent, Not Uniform38Products share tokens, components, and patterns — but each adapts them to its unique context.3940### 4. Calm Computing41Interfaces should reduce cognitive load. Motion is purposeful. Color draws focus, not distraction.4243### 5. Universal Design Language44Fluent 2 works across web, mobile, and desktop. Design tokens abstract platform differences.4546**External resources:**47- Design principles: https://fluent2.microsoft.design/design-principles48- Get started with design: https://fluent2.microsoft.design/get-started/design4950---5152## Design Tokens5354Design tokens are the atomic values of the design system — named constants for colors, spacing,55typography, shadows, border radii, and motion.5657### Token Architecture5859Fluent 2 uses a **three-tier token architecture:**60611. **Global tokens** — Raw palette values (e.g., `grey10`, `brandPrimary`). Never used directly in components.622. **Alias tokens** — Semantic references (e.g., `colorNeutralBackground1`). Theme-aware.633. **Component tokens** — Component-specific overrides (rare).6465### Spacing Tokens (Global Spacing Ramp)6667Base unit: **4px**. All spacing derives from this unit.6869| Token | Value |70|---|---|71| `spacingHorizontalNone` / `spacingVerticalNone` | 0px |72| `spacingHorizontalXXS` / `spacingVerticalXXS` | 2px |73| `spacingHorizontalXS` / `spacingVerticalXS` | 4px |74| `spacingHorizontalSNudge` / `spacingVerticalSNudge` | 6px |75| `spacingHorizontalS` / `spacingVerticalS` | 8px |76| `spacingHorizontalMNudge` / `spacingVerticalMNudge` | 10px |77| `spacingHorizontalM` / `spacingVerticalM` | 12px |78| `spacingHorizontalL` / `spacingVerticalL` | 16px |79| `spacingHorizontalXL` / `spacingVerticalXL` | 20px |80| `spacingHorizontalXXL` / `spacingVerticalXXL` | 24px |81| `spacingHorizontalXXXL` / `spacingVerticalXXXL` | 32px |8283### Border Radius Tokens8485| Token | Value |86|---|---|87| `borderRadiusNone` | 0px |88| `borderRadiusSmall` | 2px |89| `borderRadiusMedium` | 4px |90| `borderRadiusLarge` | 6px |91| `borderRadiusXLarge` | 8px |92| `borderRadiusCircular` | 10000px |9394### Shadow / Elevation Tokens9596| Token | Usage |97|---|---|98| `shadow2` | Subtle lift (cards at rest) |99| `shadow4` | Light elevation (dropdowns) |100| `shadow8` | Medium elevation (popovers) |101| `shadow16` | High elevation (dialogs) |102| `shadow28` | Highest elevation (teaching callouts) |103| `shadow64` | Maximum elevation |104105### Typography Tokens106107Font family: `'Segoe UI Variable', 'Segoe UI', system-ui, sans-serif`108109| Token | Size | Line Height |110|---|---|---|111| `fontSizeBase100` | 10px | 14px |112| `fontSizeBase200` | 12px | 16px |113| `fontSizeBase300` | 14px | 20px |114| `fontSizeBase400` | 16px | 22px |115| `fontSizeBase500` | 20px | 28px |116| `fontSizeBase600` | 24px | 32px |117| `fontSizeHero700` | 28px | 36px |118| `fontSizeHero800` | 32px | 40px |119| `fontSizeHero900` | 40px | 52px |120| `fontSizeHero1000` | 68px | 92px |121122Font weights: `fontWeightRegular` (400), `fontWeightMedium` (500), `fontWeightSemibold` (600), `fontWeightBold` (700)123124### Motion Tokens125126| Token | Value |127|---|---|128| `durationUltraFast` | 50ms |129| `durationFaster` | 100ms |130| `durationFast` | 150ms |131| `durationNormal` | 200ms |132| `durationGentle` | 250ms |133| `durationSlow` | 300ms |134| `durationSlower` | 400ms |135| `durationUltraSlow` | 500ms |136137**External resources:**138- Design tokens overview: https://fluent2.microsoft.design/design-tokens139- Color tokens: https://fluent2.microsoft.design/design-tokens/color-tokens140- Elevation: https://fluent2.microsoft.design/design-tokens/elevation141- Motion: https://fluent2.microsoft.design/design-tokens/motion142143---144145## Color System146147### Neutral Colors148149**Backgrounds:**150- `colorNeutralBackground1` — Primary surface151- `colorNeutralBackground2` — Secondary surface152- `colorNeutralBackground3` through `6` — Tertiary+153- `colorSubtleBackground` — Transparent at rest, visible on hover154- `colorTransparentBackground` — Fully transparent155156**Foregrounds:**157- `colorNeutralForeground1` — Primary text (high contrast)158- `colorNeutralForeground2` — Secondary text159- `colorNeutralForeground3` — Tertiary text160- `colorNeutralForegroundDisabled` — Disabled text161162**Strokes:**163- `colorNeutralStroke1` — Primary border164- `colorNeutralStrokeAccessible` — AA-contrast border165- `colorNeutralStrokeDisabled` — Disabled border166167### Brand Colors168169Brand tokens use a **16-shade ramp** (shade10 through shade160) generated from a primary color:170171```typescript172import { createLightTheme, createDarkTheme, BrandVariants } from '@fluentui/react-components';173174const myBrand: BrandVariants = {175 10: '#020305', 20: '#111723', 30: '#16212F', 40: '#1B2C3D',176 50: '#1F374B', 60: '#24425A', 70: '#284D69', 80: '#2D5979',177 90: '#366B8E', 100: '#437DA3', 110: '#548FB7', 120: '#6BA1C9',178 130: '#85B3D7', 140: '#A1C5E3', 150: '#BFD7ED', 160: '#DDE9F6',179};180181const lightTheme = createLightTheme(myBrand);182const darkTheme = createDarkTheme(myBrand);183```184185### Status Colors186187| Token | Usage |188|---|---|189| `colorStatusSuccessBackground1` / `Foreground1` | Success states |190| `colorStatusWarningBackground1` / `Foreground1` | Warning states |191| `colorStatusDangerBackground1` / `Foreground1` | Error/danger states |192193---194195## Layout System196197### Breakpoints / Size Classes198199| Size Class | Range | Typical Use |200|---|---|---|201| `small` | 320–479px | Phone portrait |202| `medium` | 480–639px | Phone landscape / small tablet |203| `large` | 640–1023px | Tablet |204| `x-large` | 1024–1365px | Small desktop / laptop |205| `xx-large` | 1366–1919px | Desktop |206| `xxx-large` | 1920px+ | Large desktop / ultrawide |207208### Responsive Techniques2092101. **Reposition** — Move elements from vertical to horizontal layout2112. **Resize** — Adjust element dimensions and margins2123. **Reflow** — Single-column to multi-column2134. **Show/Hide** — Display or hide elements based on viewport2145. **Re-architect** — Restructure layout entirely215216### Touch Targets217218- iOS and Web: minimum 44×44px219- Android: minimum 48×48px220221**External resources:**222- Layout system: https://fluent2.microsoft.design/layout223- Accessibility: https://fluent2.microsoft.design/accessibility224225---226227## Component Library228229The `@fluentui/react-components` package provides the full Fluent UI React v9 component library.230231| Category | Components |232|---|---|233| **Actions** | Button, CompoundButton, SplitButton, ToggleButton, MenuButton, Link |234| **Inputs** | Input, Textarea, Select, Combobox, Dropdown, SearchBox, SpinButton, Slider, Switch, Checkbox, RadioGroup, DatePicker, TimePicker, ColorPicker, Rating |235| **Layout** | Card, CardHeader/Footer/Preview, Divider, Drawer, Dialog, Accordion, TabList/Tab, Toolbar, Breadcrumb |236| **Data Display** | Avatar, AvatarGroup, Badge, CounterBadge, PresenceBadge, Tag/TagGroup, DataGrid, Table, Tree, Persona, Text, Label, InfoLabel |237| **Feedback** | Toast/Toaster, MessageBar, ProgressBar, Spinner, Skeleton, Alert |238| **Navigation** | Menu/MenuItem/MenuList, Nav/NavItem, Overflow/OverflowItem |239| **Overlays** | Popover, Tooltip, TeachingPopover, InfoButton |240| **Media** | Image |241242---243244## Theming245246### FluentProvider247248All Fluent components must be wrapped in a `FluentProvider`:249250```tsx251import { FluentProvider, webLightTheme } from '@fluentui/react-components';252253<FluentProvider theme={webLightTheme}>254 <App />255</FluentProvider>256```257258Built-in themes: `webLightTheme`, `webDarkTheme`, `teamsLightTheme`, `teamsDarkTheme`, `teamsHighContrastTheme`259260### Nested Themes261262```tsx263<FluentProvider theme={webLightTheme}>264 <MainContent />265 <FluentProvider theme={webDarkTheme}>266 <Sidebar />267 </FluentProvider>268</FluentProvider>269```270271---272273## Accessibility274275- **Color contrast**: 4.5:1 for normal text, 3:1 for large text, 3:1 for non-text UI276- **Focus indicators**: Visible 2px focus ring on all interactive elements277- **Keyboard navigation**: All interactive components reachable via keyboard278- **Screen readers**: Proper ARIA attributes on all components279- **Reduced motion**: `prefers-reduced-motion` support280- **High contrast**: Full Windows High Contrast Mode support281282Focus utilities:283```tsx284import { useArrowNavigationGroup, useFocusableGroup } from '@fluentui/react-components';285```286287---288289## Iconography290291Package: `@fluentui/react-icons` — 20,000+ icons in Regular (outline) and Filled styles.292293Sizes: 16px, 20px, 24px, 28px, 32px, 48px. Default export = 20px.294295```tsx296import { CalendarRegular, CalendarFilled, bundleIcon } from '@fluentui/react-icons';297const CalendarIcon = bundleIcon(CalendarFilled, CalendarRegular);298```299300---301302## Cross-Reference: Specialized Skills303304For detailed coverage of specific topics, see these dedicated skills:305306| Skill | Topics |307|---|---|308| **fluent-nextjs** | Next.js App Router + Pages Router setup, SSR, `use client` boundaries, Griffel AOT with Next.js |309| **fluent-griffel** | makeStyles deep dive, AOT compilation, shorthands, selectors, RTL, DevTools |310| **fluent-extensibility** | Slots (4 levels), custom variants, customStyleHooks, headless patterns, v8→v9 migration |311| **fluent-web-components** | Web Components (`@fluentui/web-components`), framework-agnostic usage |312| **fluent-charting** | `@fluentui/react-charting` — chart types, theming, accessibility |313| **fluent-cross-platform** | iOS (Swift/UIKit) and Android (Kotlin) Fluent implementations |314| **fluent-forms** | Form orchestration with Formik/Yup, React Hook Form/Zod, Field validation |315| **fluent-integration** | B2C UI customization, Office Add-ins, SharePoint integration |316317## Reference Files318319- `${CLAUDE_PLUGIN_ROOT}/skills/fluent-design-system/references/design-tokens-reference.md` — Complete token catalog320- `${CLAUDE_PLUGIN_ROOT}/skills/fluent-design-system/references/component-catalog.md` — All components with props321- `${CLAUDE_PLUGIN_ROOT}/skills/fluent-design-system/references/teams-integration.md` — Teams multi-surface architecture322- `${CLAUDE_PLUGIN_ROOT}/skills/fluent-design-system/references/advanced-patterns.md` — Advanced UI patterns323- `${CLAUDE_PLUGIN_ROOT}/skills/fluent-design-system/references/motion-framer-reference.md` — Motion system deep dive324- `${CLAUDE_PLUGIN_ROOT}/skills/fluent-design-system/examples/theme-examples.md` — Theme creation walkthroughs325- `${CLAUDE_PLUGIN_ROOT}/skills/fluent-design-system/examples/layout-patterns.md` — Responsive layout examples