Skip to content
Open
Show file tree
Hide file tree
Changes from 31 commits
Commits
Show all changes
231 commits
Select commit Hold shift + click to select a range
d9c4d9c
HTML widgets accessibility starter content
nickwalkmsft May 27, 2026
e2ae369
Merge pull request #1 from nickwalkmsft/nickwalk-accessibility-guidel…
SuzanneTocco May 28, 2026
169e964
Update accessibility-guidelines.md
SuzanneTocco May 28, 2026
91c7bc1
Update accessibility-guidelines.md
SuzanneTocco May 28, 2026
85a9ecc
Update accessibility-guidelines.md
SuzanneTocco May 29, 2026
b7311d6
Update accessibility-guidelines.md
SuzanneTocco May 29, 2026
1092f24
More content
SuzanneTocco May 29, 2026
0dccf8b
Update accessibility-guidelines.md
SuzanneTocco May 29, 2026
40e1fee
Update accessibility-guidelines.md
SuzanneTocco May 29, 2026
56b1564
Update accessibility-guidelines.md
SuzanneTocco May 29, 2026
49cf096
Update accessibility guidelines for HTML widgets
SuzanneTocco May 29, 2026
58dcfc8
final edits
SuzanneTocco May 30, 2026
1408867
Added tip about Fluent V9
SuzanneTocco Jun 1, 2026
d8ea896
changed Copilot to Teams
SuzanneTocco Jun 1, 2026
a92580c
Dialog and modal content
SuzanneTocco Jun 1, 2026
c875bf9
Add files via upload
SuzanneTocco Jun 10, 2026
e3ff5e1
Delete msteams-platform/html-widgets/user-experience-guidelines.md
SuzanneTocco Jun 10, 2026
1284062
Update ux-guidelines.md
SuzanneTocco Jun 10, 2026
ce98e54
Refine UX principles for Teams widgets
SuzanneTocco Jun 10, 2026
b7470d2
Create ux-guidelines-v2.md
SuzanneTocco Jun 10, 2026
2557f3f
Add UX guidelines for HTML widgets in Teams
SuzanneTocco Jun 10, 2026
1ba0cc6
Delete msteams-platform/html-widgets/ux-guidelines-v2.md
SuzanneTocco Jun 10, 2026
bbc7d00
Revise UX guidelines for HTML widgets in Teams
SuzanneTocco Jun 10, 2026
d2bbefe
Enhance UX guidelines for HTML widgets
SuzanneTocco Jun 10, 2026
15cf5c6
Create assets
SuzanneTocco Jun 10, 2026
e5575b6
Delete msteams-platform/html-widgets/assets
SuzanneTocco Jun 10, 2026
f8f14e1
Create .gitkeep
SuzanneTocco Jun 10, 2026
b4509f7
Create .gitkeep
SuzanneTocco Jun 10, 2026
fd78601
Delete msteams-platform/html-widgets/assets/images/html-widgets/ux-gu…
SuzanneTocco Jun 10, 2026
2f0e6d8
Add files via upload
SuzanneTocco Jun 10, 2026
c1e5644
Delete msteams-platform/html-widgets/images/.gitkeep
SuzanneTocco Jun 10, 2026
db4dd9f
Revise UX guidelines for HTML widgets
SuzanneTocco Jun 12, 2026
1f4f0c7
Update ux-guidelines.md
SuzanneTocco Jun 12, 2026
48e7be4
Add files via upload
SuzanneTocco Jun 12, 2026
bc219ce
Add files via upload
SuzanneTocco Jun 12, 2026
8cc8320
Update ux-guidelines.md
SuzanneTocco Jun 12, 2026
dda0333
Add files via upload
SuzanneTocco Jun 12, 2026
1436134
Add files via upload
SuzanneTocco Jun 12, 2026
d4386a2
Revise UX guidelines for HTML widgets
SuzanneTocco Jun 12, 2026
d6ef1cb
Update table header image in ux-guidelines.md
SuzanneTocco Jun 12, 2026
839db52
Add files via upload
SuzanneTocco Jun 12, 2026
936c88e
Update ux-guidelines.md
SuzanneTocco Jun 12, 2026
7dfdd6a
Create UX guidelines for HTML widgets in Teams
SuzanneTocco Jun 12, 2026
0c1bd47
Revise UX guidelines for HTML widgets in Teams
SuzanneTocco Jun 12, 2026
e9c72e3
Delete msteams-platform/html-widgets/Playground
SuzanneTocco Jun 12, 2026
4ba402b
Create playground.md
SuzanneTocco Jun 12, 2026
d8dfd43
Update playground.md
SuzanneTocco Jun 12, 2026
f2af979
Update ux-guidelines.md
SuzanneTocco Jun 12, 2026
d7424ee
Update ux-guidelines.md
SuzanneTocco Jun 12, 2026
0a032bc
Update ux-guidelines.md
SuzanneTocco Jun 12, 2026
f5782f8
Revise UX guidelines for HTML widgets in Teams
SuzanneTocco Jun 12, 2026
1a21e54
Update ux-guidelines.md
SuzanneTocco Jun 12, 2026
4f4413f
Update ux-guidelines.md
SuzanneTocco Jun 12, 2026
5ea2360
Update ux-guidelines.md
SuzanneTocco Jun 12, 2026
717683c
Update playground.md
SuzanneTocco Jun 12, 2026
33fa975
Update UX guidelines for HTML widgets in Teams
SuzanneTocco Jun 12, 2026
739b9ad
Add files via upload
SuzanneTocco Jun 12, 2026
eec901c
Update ux-guidelines.md
SuzanneTocco Jun 13, 2026
2b3f0d6
Delete msteams-platform/html-widgets/images/cardAnatomy.png
SuzanneTocco Jun 13, 2026
5c4e3fa
Add files via upload
SuzanneTocco Jun 13, 2026
443178c
Enhance responsive scaling guidelines for widgets
SuzanneTocco Jun 15, 2026
1e5af00
Update UX guidelines with design best practices link
SuzanneTocco Jun 15, 2026
4c2a0ca
Enhance UX guidelines for loading indicators
SuzanneTocco Jun 15, 2026
e076249
Update loading indicator description in UX guidelines
SuzanneTocco Jun 15, 2026
a6c69fb
Revise UX guidelines for HTML widgets in Teams
SuzanneTocco Jun 18, 2026
43deb21
Revise Fluent 2 resource links in UX guidelines
SuzanneTocco Jun 18, 2026
fd34a52
Add files via upload
SuzanneTocco Jun 18, 2026
c7f14bb
Add files via upload
SuzanneTocco Jun 18, 2026
cd3c455
Update color link in UX guidelines
SuzanneTocco Jun 18, 2026
3091946
Update ux-guidelines.md
SuzanneTocco Jun 18, 2026
87a50c1
Add files via upload
SuzanneTocco Jun 18, 2026
7c9d99c
Add files via upload
SuzanneTocco Jun 18, 2026
3c26189
Update ux-guidelines.md
SuzanneTocco Jun 18, 2026
b5f6da7
Update image sizes and links in UX guidelines
SuzanneTocco Jun 18, 2026
79aa03e
Fix icon image filename case in UX guidelines
SuzanneTocco Jun 18, 2026
65df2a6
Revise text styles for widget UX guidelines
SuzanneTocco Jun 18, 2026
a5a0a8c
Add files via upload
SuzanneTocco Jun 18, 2026
656440e
Update ux-guidelines.md
SuzanneTocco Jun 18, 2026
79a84f8
Delete msteams-platform/html-widgets/images/icon_text.png
SuzanneTocco Jun 18, 2026
41e9d5d
Delete msteams-platform/html-widgets/images/icon_textB.png
SuzanneTocco Jun 18, 2026
f2fbe0c
Delete msteams-platform/html-widgets/images/icon_color.png
SuzanneTocco Jun 18, 2026
7434196
Revise UX guidelines for HTML widgets
SuzanneTocco Jun 18, 2026
a5f6869
Revise typography section and add examples
SuzanneTocco Jun 18, 2026
76970c1
Add files via upload
SuzanneTocco Jun 18, 2026
ff0ebd9
Update ux-guidelines.md
SuzanneTocco Jun 18, 2026
b14ae17
Update ux-guidelines.md
SuzanneTocco Jun 18, 2026
cd67094
Update ux-guidelines.md
SuzanneTocco Jun 19, 2026
a944e36
Revise UX guidelines for HTML widgets in Teams
SuzanneTocco Jun 19, 2026
85adc2d
Update icon images to include width attribute
SuzanneTocco Jun 19, 2026
f078fc3
Update UX guidelines for widget layouts
SuzanneTocco Jun 19, 2026
b6fcd62
Add files via upload
SuzanneTocco Jun 19, 2026
0204bdc
Reduce icon width from 48px to 32px in guidelines
SuzanneTocco Jun 19, 2026
eb4a7fa
Update ux-guidelines.md
SuzanneTocco Jun 19, 2026
50e8410
Add files via upload
SuzanneTocco Jun 19, 2026
be903ad
Delete msteams-platform/html-widgets/images/responsive.png
SuzanneTocco Jun 19, 2026
f67aa57
Add files via upload
SuzanneTocco Jun 19, 2026
3f7f8a6
Delete msteams-platform/html-widgets/images/cardAnatomy.png
SuzanneTocco Jun 19, 2026
af2e160
Add files via upload
SuzanneTocco Jun 19, 2026
0c868f4
Update ux-guidelines.md
SuzanneTocco Jun 19, 2026
a5370e1
Delete msteams-platform/html-widgets/images/cardAnatomy.png
SuzanneTocco Jun 19, 2026
ca5792f
Add files via upload
SuzanneTocco Jun 19, 2026
d8dcf3d
Delete msteams-platform/html-widgets/images/Typography.png
SuzanneTocco Jun 19, 2026
bdc20f4
Add files via upload
SuzanneTocco Jun 19, 2026
18a9811
Update ux-guidelines.md
SuzanneTocco Jun 19, 2026
e9f6a18
Update UX guidelines for text sizes and images
SuzanneTocco Jun 19, 2026
4a1d0b3
Delete msteams-platform/html-widgets/images/responsive.png
SuzanneTocco Jun 19, 2026
6ef8be3
Add files via upload
SuzanneTocco Jun 19, 2026
b579a73
Update ux-guidelines.md
SuzanneTocco Jun 19, 2026
ef5c796
Italicize header note in UX guidelines
SuzanneTocco Jun 19, 2026
f7113a9
Add files via upload
SuzanneTocco Jun 20, 2026
b79d477
Add files via upload
SuzanneTocco Jun 20, 2026
7d630bf
Update ux-guidelines.md
SuzanneTocco Jun 20, 2026
530dd02
Update ux-guidelines.md
SuzanneTocco Jun 22, 2026
5597d9e
Add files via upload
SuzanneTocco Jun 22, 2026
9264f83
Update ux-guidelines.md
SuzanneTocco Jun 22, 2026
b7fe5b0
Include iconography guidelines in UX documentation
SuzanneTocco Jun 22, 2026
e77f785
Delete msteams-platform/html-widgets/images/responsive.png
SuzanneTocco Jun 22, 2026
26a243c
Add files via upload
SuzanneTocco Jun 22, 2026
916ce50
Delete msteams-platform/html-widgets/images/icon_Icon.png
SuzanneTocco Jun 22, 2026
e56b9ac
Delete msteams-platform/html-widgets/images/icon_colorBrush.png
SuzanneTocco Jun 22, 2026
56d9959
Delete msteams-platform/html-widgets/images/icon_textA.png
SuzanneTocco Jun 22, 2026
72cc597
Delete msteams-platform/html-widgets/images/icon_shape.png
SuzanneTocco Jun 22, 2026
226cb2f
Add files via upload
SuzanneTocco Jun 22, 2026
8c4bbb1
Add files via upload
SuzanneTocco Jun 22, 2026
36d9783
Update ux-guidelines.md
SuzanneTocco Jun 22, 2026
ef9f856
Update icon image source in UX guidelines
SuzanneTocco Jun 22, 2026
780bc4a
Adjust image size for color tokens in guidelines
SuzanneTocco Jun 22, 2026
5241054
Add files via upload
SuzanneTocco Jun 22, 2026
1f5c03e
Update image references and typography guidelines
SuzanneTocco Jun 22, 2026
ef6b1af
Update ux-guidelines.md
SuzanneTocco Jun 22, 2026
63490ed
Fix image source and icon name in UX guidelines
SuzanneTocco Jun 22, 2026
0bf0058
Update ux-guidelines.md
SuzanneTocco Jun 23, 2026
6611aab
Update ux-guidelines.md
SuzanneTocco Jun 29, 2026
436cade
Revise UX guidelines with color token tables
SuzanneTocco Jun 29, 2026
e695270
Update ux-guidelines.md
SuzanneTocco Jun 29, 2026
b38ddc4
Update ux-guidelines.md
SuzanneTocco Jun 29, 2026
fe6359b
Update ux-guidelines.md
SuzanneTocco Jun 29, 2026
108bc6a
Update ux-guidelines.md
SuzanneTocco Jun 29, 2026
a366a60
Add files via upload
SuzanneTocco Jun 29, 2026
bdec559
Update ux-guidelines.md
SuzanneTocco Jun 29, 2026
b89e48f
Enhance UX guidelines with container color examples
SuzanneTocco Jun 29, 2026
49dfb59
Add files via upload
SuzanneTocco Jun 29, 2026
4274f1a
Update ux-guidelines.md
SuzanneTocco Jun 29, 2026
72508d3
Refactor image syntax in UX guidelines
SuzanneTocco Jun 29, 2026
b6bf189
Change emphasis color codes in UX guidelines
SuzanneTocco Jun 29, 2026
0cb6fab
Update accent color codes in UX guidelines
SuzanneTocco Jun 29, 2026
bb83f08
Delete msteams-platform/html-widgets/images/container_accent.png
SuzanneTocco Jun 29, 2026
d314526
Add files via upload
SuzanneTocco Jun 29, 2026
104b8c0
Update ux-guidelines.md
SuzanneTocco Jun 29, 2026
037aa42
Update warning color codes in UX guidelines
SuzanneTocco Jun 29, 2026
ec03638
Update UX guidelines for container color usage
SuzanneTocco Jun 30, 2026
21b9e83
Update ux-guidelines.md
SuzanneTocco Jun 30, 2026
ea598a7
Update ux-guidelines.md
SuzanneTocco Jun 30, 2026
0b474ca
Delete msteams-platform/html-widgets/images/icon-mouse.png
SuzanneTocco Jun 30, 2026
df468c0
Delete msteams-platform/html-widgets/images/icon-puzzle.png
SuzanneTocco Jun 30, 2026
2050041
Delete msteams-platform/html-widgets/images/icon-shield.png
SuzanneTocco Jun 30, 2026
f1d701e
Delete msteams-platform/html-widgets/images/icon-conversation-bubble.png
SuzanneTocco Jun 30, 2026
25941a2
Add files via upload
SuzanneTocco Jun 30, 2026
74629e7
Update ux-guidelines.md
SuzanneTocco Jun 30, 2026
b2374d2
Add files via upload
SuzanneTocco Jun 30, 2026
0a9ee2f
Update ux-guidelines.md
SuzanneTocco Jun 30, 2026
2849042
Add files via upload
SuzanneTocco Jun 30, 2026
80d2bca
Update ux-guidelines.md
SuzanneTocco Jun 30, 2026
7fd9ffd
Rename textcolor_accent.png to textColor_accent.png
SuzanneTocco Jun 30, 2026
1a6ac17
Update ux-guidelines.md
SuzanneTocco Jun 30, 2026
fa6048c
Update ux-guidelines.md
SuzanneTocco Jun 30, 2026
010a032
Add files via upload
SuzanneTocco Jun 30, 2026
51c763c
Update ux-guidelines.md
SuzanneTocco Jun 30, 2026
86aa2e1
Update ux-guidelines.md
SuzanneTocco Jun 30, 2026
784011d
Update ux-guidelines.md
SuzanneTocco Jun 30, 2026
7553a6f
Update text color codes in UX guidelines
SuzanneTocco Jun 30, 2026
79d1337
Update ux-guidelines.md
SuzanneTocco Jun 30, 2026
ee8459c
Update ux-guidelines.md
SuzanneTocco Jun 30, 2026
3fee6ac
Enhance clarity in UX guidelines for widgets
SuzanneTocco Jun 30, 2026
eb11083
Update UX guidelines for widget rendering in Teams
SuzanneTocco Jun 30, 2026
c9a6e28
Enhance UX guidelines with common widget elements
SuzanneTocco Jun 30, 2026
601f1bc
Reorder guidelines for widget content layout
SuzanneTocco Jun 30, 2026
b1c5fa1
Add files via upload
SuzanneTocco Jun 30, 2026
3d5494e
Add image for theme adaptation example
SuzanneTocco Jun 30, 2026
71812c1
Add files via upload
SuzanneTocco Jun 30, 2026
bff4948
Delete msteams-platform/html-widgets/images/ThemeModes.png
SuzanneTocco Jun 30, 2026
d4e6207
Add files via upload
SuzanneTocco Jun 30, 2026
d0d0265
Revise UX guidelines for HTML widgets
SuzanneTocco Jul 1, 2026
347d196
Update ux-guidelines.md
SuzanneTocco Jul 1, 2026
75929af
Update UX guidelines for containers and borders
SuzanneTocco Jul 1, 2026
829771b
Update ux-guidelines.md
SuzanneTocco Jul 1, 2026
50e8d13
Revise UX guidelines for iconography and widget behavior
SuzanneTocco Jul 1, 2026
7d1fd46
Add files via upload
SuzanneTocco Jul 1, 2026
d31466e
Add image example for text color in UX guidelines
SuzanneTocco Jul 1, 2026
2590f9f
Add files via upload
SuzanneTocco Jul 1, 2026
55a8db0
Update image reference for border radius styles
SuzanneTocco Jul 1, 2026
5742786
Update image reference for container style variations
SuzanneTocco Jul 1, 2026
af6957e
Update UX guidelines for container nesting and spacing
SuzanneTocco Jul 1, 2026
2831c4b
Update UX guidelines for container nesting and images
SuzanneTocco Jul 1, 2026
41c149b
Add additional image examples to UX guidelines
SuzanneTocco Jul 2, 2026
3d7cebe
Add files via upload
SuzanneTocco Jul 2, 2026
4a4cb0c
Update UX guidelines for HTML widgets
SuzanneTocco Jul 5, 2026
83fa6b4
Add files via upload
SuzanneTocco Jul 6, 2026
75438c6
Update ux-guidelines.md
SuzanneTocco Jul 6, 2026
1c3bbba
Update ux-guidelines.md
SuzanneTocco Jul 6, 2026
dbec32c
Delete msteams-platform/html-widgets/images/progressiveDisclosure.png
SuzanneTocco Jul 6, 2026
43c1811
Add files via upload
SuzanneTocco Jul 6, 2026
0a3df0d
Add files via upload
SuzanneTocco Jul 6, 2026
fec14a0
Update ux-guidelines.md
SuzanneTocco Jul 6, 2026
50a785a
Update ux-guidelines.md
SuzanneTocco Jul 6, 2026
44c90fa
Add files via upload
SuzanneTocco Jul 6, 2026
752d30f
Add image example for forms and inputs
SuzanneTocco Jul 6, 2026
979bd7c
Add files via upload
SuzanneTocco Jul 6, 2026
c9e34be
Update ux-guidelines.md
SuzanneTocco Jul 6, 2026
d514d23
Update ux-guidelines.md
SuzanneTocco Jul 6, 2026
456018c
Update ux-guidelines.md
SuzanneTocco Jul 6, 2026
c0bb40a
Clarify action labels in UX guidelines
SuzanneTocco Jul 6, 2026
8b89c7c
Include guidance for widgets in Microsoft 365 Copilot
SuzanneTocco Jul 6, 2026
122f677
Update Copilot UX guidelines link in documentation
SuzanneTocco Jul 6, 2026
5b36599
Enhance UX guidelines with best practices for widgets
SuzanneTocco Jul 6, 2026
c62fc99
Update ux-guidelines.md
SuzanneTocco Jul 6, 2026
d8a22f2
Update accessibility-guidelines.md
SuzanneTocco Jul 7, 2026
8005451
Update accessibility-guidelines.md
SuzanneTocco Jul 7, 2026
574a47c
Update accessibility-guidelines.md
SuzanneTocco Jul 7, 2026
ab765e5
Update accessibility-guidelines.md
SuzanneTocco Jul 7, 2026
f50e4c5
Update accessibility-guidelines.md
SuzanneTocco Jul 7, 2026
7db53e2
Update accessibility guidelines for HTML widgets
SuzanneTocco Jul 10, 2026
ca404c7
Restore metadata and add best practices section
SuzanneTocco Jul 10, 2026
d67a764
Update accessibility-guidelines.md
SuzanneTocco Jul 10, 2026
445e627
Update accessibility-guidelines.md
SuzanneTocco Jul 10, 2026
7a2c1de
Update accessibility-guidelines.md
SuzanneTocco Jul 10, 2026
3301f23
Update accessibility-guidelines.md
SuzanneTocco Jul 10, 2026
1fc753a
Update section title from 'Required' to 'Widget requirements'
SuzanneTocco Jul 10, 2026
c480eb9
Update ux-guidelines.md
SuzanneTocco Jul 10, 2026
23fffca
Clarify submission requirements for Teams Store
SuzanneTocco Jul 10, 2026
0f7d18e
Update ux-guidelines.md
SuzanneTocco Jul 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions msteams-platform/TOC.yml
Original file line number Diff line number Diff line change
Expand Up @@ -877,6 +877,17 @@
- name: Use dialogs from bots
href: task-modules-and-cards/task-modules/task-modules-bots.md
displayName: create dialogue box, invoke dialog, submit action
- name: Build HTML widgets
items:
- name: Overview
href: html-widgets/integrate-web-apps-overview.md

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
href: html-widgets/integrate-web-apps-overview.md
href: html-widgets/overview.md

This was a mistake in the starter content I gave you.

displayName: widgets
- name: User experience guidelines
href: html-widgets/user-experience-guidelines.md
displayName: widgets
- name: Accessibility guidelines
href: html-widgets/accessibility-guidelines.md
displayName: widgets, WCAG, MCP apps, iframe, assistive, ARIA, fluent, screen reader, contrast
- name: Integrate with Teams
items:
- name: Web app integration
Expand Down
337 changes: 337 additions & 0 deletions msteams-platform/html-widgets/accessibility-guidelines.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,337 @@
---
title: Accessibility Guidelines for HTML Widgets in Teams
author: Suzanne Tocco

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
author: Suzanne Tocco
author: SuzanneTocco

Validated by the build; must be a GitHub alias

description: TODO

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Guidance on the description field:

  • Include the primary keyword.
  • Be between 120 and 165 characters including spaces. (The low end is not a hard requirement, the upper end is).
  • Describe the specific scenario and/or benefit of the article.
  • Entice users to click through to the page.
  • Include a call-to-action to improve the click-through-rate.

ms.topic: article
ms.date: 05/27/2026
---


# Accessibility guidelines for HTML widgets in Microsoft Teams 365

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just "Teams" or "Microsoft Teams" I think? The former's probably fine, given the overall context of these docs.


HTML widgets (MCP apps) allow partners to render custom HTML and JavaScript experiences inside a sandboxed `<iframe>` within Teams chat. Because these widgets appear inline with conversational content, they must meet a consistent accessibility bar so that all users, including those who use assistive technologies, can perceive, understand, and operate them.

This article describes the minimum accessibility requirements for HTML widgets and provides recommended best practices and testing guidance.

## Scope

These guidelines apply to all partner-built HTML widgets (MCP apps) that are rendered inside an `<iframe>` in Teams chat. The requirements are in addition to general web accessibility standards such as [WCAG 2.2](https://www.w3.org/TR/WCAG22/) and the [WAI-ARIA Authoring Practices](https://www.w3.org/WAI/ARIA/apg/).

> [!TIP]
> If you are building your widget with React, we recommend using [Fluent UI React v9](https://storybooks.fluentui.dev/react/?path=/docs/concepts-introduction--docs) components and tokens. They implement accessible, Teams-compatible patterns out of the box and reduce the amount of custom accessibility work required. Fluent UI React v9 is not required — partners may use any framework or library as long as the accessibility requirements in this article are met.



## Responsibility model

Teams and partners share responsibility for accessibility. The following table clarifies what each party owns.

| Requirement &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Teams | Partner |

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just learned relatively recently that there's an accessibility-friendly way to do these with SVG images. This is fine for now, most docs do exactly this, but your article being about accessibility inspired me, so when I get a moment this week I'll tee it up. Same for the do/don't icons in the tables below.

|-------------------------------------------|:-----:|:-------:|
| Widget container label (e.g. "Scout widget") | ✅ | |
| Tab stop for widget container | ✅ | |
| Tab order of message elements | ✅ | |
| Focus into and out of the widget container | ✅ | |
| Widget-level loading and error states | ✅ | |
| Keyboard navigation inside widget | | ✅ |
| ARIA labels for interactive elements | | ✅ |
| Screen reader support for widget content | | ✅ |
| Color contrast inside widget | | ✅ |
| High contrast support inside widget | | ✅ |
| Error handling for content inside widget | | ✅ |




### Keyboard accessibility

> [!NOTE]
> Teams manages focus into and out of the widget container. The requirements below apply to keyboard navigation within the widget content only.

**Keyboard operability**: All interactive elements must be reachable and operable using standard keyboard input such as Tab, Shift+Tab, arrow keys, Enter, and Space, as appropriate for the control type.

**No focus traps**: Widgets must not trap focus. Users must be able to navigate through all interactive elements in a logical order and exit the widget without getting stuck.

**Visible focus**: All interactive elements must have a clear, visible focus indicator that meets contrast requirements and is not removed via CSS without an accessible replacement.

**Custom controls**: Custom widgets and controls must follow the keyboard interaction patterns defined in the [ARIA Authoring Practices](https://www.w3.org/WAI/ARIA/apg/) for their respective roles (for example,`button`, `menu`, `dialog`, `listbox`).

**Dialogs and modals**: Modal dialogs and overlays are possible within a widget but are not recommended. Because widgets render inside a small iframe, a modal will be constrained to that space and may feel disorienting to users. If your use case requires a modal, consider whether the expanded surface would be a better fit for that interaction.
If you do implement a modal inside your widget, if you are using Fluent UI React v9 use the [Dialog](https://storybooks.fluentui.dev/react/?path=/docs/components-dialog--docs) or [Popover](https://storybooks.fluentui.dev/react/?path=/docs/components-popover--docs) components rather than a custom implementation, as they handle focus trapping, focus restoration, and ARIA attributes correctly out of the box. For custom modal behavior, [useModalAttributes](https://storybooks.fluentui.dev/react/?path=/docs/utilities-focus-management-usemodalattributes--docs) is available.






**Focus restoration**: When an element is removed from the DOM after a user action (for example, after submitting a form or closing a panel), focus must be restored to a logical element rather than dropping to the document body. Use Fluent V9's [useRestoreFocusSource and useRestoreFocusTarget](https://storybooks.fluentui.dev/react/?path=/docs/utilities-focus-management-userestorefocussource--docs) hooks to handle this automatically.



<table>

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Replace HTML with markdown table syntax

<tr>
<th align="left">✅ Do</th>
<th align="left">❌ Don't</th>
</tr>
<tr>
<td>

- Use Fluent UI React v9 Dialog or Popover for modal experiences
- Restore focus to the triggering element after a dialog or panel closes

</td>
<td>

- Don't remove focus outlines without providing an accessible alternative
- Don't auto-advance focus between controls without a clear user action

</td>
</tr>
</table>

## Screen reader semantics

Widgets must expose meaningful structure and semantics so that screen readers and other assistive technologies can correctly interpret and announce content.

**Semantic HTML**

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using bold text as mini-headings is considered an anti-pattern; see if H3s look OK. Same in a few other spots further down. The bullet lists where each bullet starts with bold text are good to go, though.


Use native HTML elements whenever possible, such as `<button>`, `<input>`, `<label>`, `<ul>`, `<li>`, `<nav>`, and `<form>`.

**Role, name, state**

All interactive elements must have:

- A meaningful role (native or ARIA)
- An accessible name (visible text, `aria-label`, or `aria-labelledby`)
- Accurate state and property information (for example, `aria-expanded`, `aria-checked`, `aria-selected`, `aria-disabled`)

**Dynamic updates**

Use live regions to announce important changes to screen readers:

- `aria-live="polite"` for non-critical updates such as loading results
- `aria-live="assertive"` for critical updates such as errors

If you are using Fluent V9 and React, use [AriaLiveAnnouncer](https://storybooks.fluentui.dev/react/?path=/docs/utilities-aria-live-arialiveannouncer--docs) with the [useAnnounce](https://storybooks.fluentui.dev/react/?path=/docs/utilities-aria-live-useannounce--docs) hook rather than implementing raw aria-live regions. If your widget includes text inputs and needs to announce updates while the user is typing, use [useTypingAnnounce](https://storybooks.fluentui.dev/react/?path=/docs/utilities-aria-live-usetypingannounce--docs) instead.

**Images**

Images that convey meaning must include descriptive `alt` text. Decorative images should be marked with empty `alt=""` or hidden from assistive technologies.


<table>
<tr>
<th align="left">✅ Do</th>
<th align="left">❌ Don't</th>
</tr>
<tr>
<td>

- Use headings (`<h1>`–`<h3>`) to structure content and help screen reader users navigate
- Treat the widget as a self-contained web application — don't rely on Teams to provide roles or labels for content inside the iframe

</td>
<td>

- Don't use generic `<div>` or `<span>` elements as controls without roles and labels
- Don't override correct native semantics with ARIA when native elements already provide the needed behavior

</td>
</tr>
</table>




## Focus management

Because widgets are embedded in a conversational experience, focus behavior within the widget must be predictable and must not disrupt the user's workflow in chat.

**No focus stealing**

Widgets must not automatically move focus within the iframe when they load. Focus should remain where Teams has placed it until the user explicitly interacts with the widget.

**Initial focus**

When the user moves focus into the widget, focus should land on the first meaningful interactive element, not on a hidden or non-interactive element.

**Dialogs and overlays**

If the widget opens a modal dialog:

- Move focus into the dialog when it opens
- Trap focus within the dialog while it's open
- Return focus to the triggering element when the dialog closes



## Color, contrast, and high contrast mode

Widgets must remain perceivable in different contrast settings, including Windows High Contrast Mode.

**Text contrast**

Text and essential icons must meet [WCAG 2.2 AA contrast ratios](https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html):

- At least 4.5:1 for normal text
- At least 3:1 for large text (18pt or 14pt bold and above)

**High contrast mode**

Ensure that interactive elements, focus indicators, and key icons remain visible and understandable when the user enables Windows High Contrast Mode.

**Color independence**

Don't rely on color alone to convey meaning. Use text, icons, patterns, or other indicators in addition to color.

<table>
<tr>
<th align="left">✅ Do</th>
<th align="left">❌ Don't</th>
</tr>
<tr>
<td>

- Test in Windows High Contrast Mode before submission
- Pair color with a label or icon to communicate state
- Use [Fluent UI React v9 color tokens](https://storybooks.fluentui.dev/react/?path=/docs/theme-colors--docs) for backgrounds, borders, and text

</td>
<td>

- Don't use low-contrast text or icons for critical information
- Don't use placeholder text as the only label for an input
- Don't hardcode color values — use [Fluent UI React v9 color tokens](https://storybooks.fluentui.dev/react/?path=/docs/theme-colors--docs) or CSS variables so your widget adapts to Teams themes

</td>
</tr>
</table>


## Responsive layout and zoom

Widgets must adapt to the chat container and remain usable at different zoom levels and viewport sizes.

- **Zoom support:** Support at least 200% browser zoom without loss of content or functionality
- **Flexible layout:** Avoid fixed pixel heights — allow the widget to grow vertically as needed so content isn't clipped
- **No horizontal scrolling:** Layout should adapt to the narrow widths typical of chat containers



## Motion, animation, and timing

Motion and animation must not cause discomfort or interfere with usability.

- **Reduced motion:** Respect the user's `prefers-reduced-motion` setting by reducing or disabling non-essential animations
- **Safe motion:** Avoid flashing content or rapid animations that could trigger photosensitive reactions
- **Auto-advancing content:** Don't auto-advance carousels or content without user input. If auto-advance is necessary, provide controls to pause, stop, and manually navigate



## Error handling inside the widget

> [!NOTE]
> Teams handles widget-level loading and error states. Partners are responsible for accessible error handling within their own widget content.
Comment thread
SuzanneTocco marked this conversation as resolved.
Outdated


**Announcements**

Use `aria-live="assertive"` or an appropriate live region to announce critical errors to screen readers. If using Fluent UI React v9, use [useAnnounce](https://storybooks.fluentui.dev/react/?path=/docs/utilities-aria-live-useannounce--docs) with `polite: false` for error announcements.


**Clear messaging**

Error messages must:

- Describe what went wrong in clear, concise language
- Explain how the user can fix the issue or try again


**Input errors**

For invalid fields:

- Set `aria-invalid="true"` on the input
- Associate the error message with the input using `aria-describedby` or a similar mechanism


## Loading states inside the widget

> [!NOTE]
> Teams handles the widget-level loading state. The requirements below apply to any loading states that occur within your widget content after initial render.

- **Visible indicator:** Show a clear loading indicator when your widget fetches or processes data after initial render
- **Announcements:** Use `aria-live="polite"` to announce loading and completion states to screen readers. If using Fluent UI React v9, use [useAnnounce](https://storybooks.fluentui.dev/react/?path=/docs/utilities-aria-live-useannounce--docs) with `polite: true`
- **Focus behavior:** Don't trap focus during loading — users must still be able to move focus within the widget
- **Skeleton UI:** If you use skeleton screens, either hide them from assistive technologies using `aria-hidden="true"`, or provide meaningful labels that describe the loading state



## Minimum accessibility bar for submission
Comment thread
SuzanneTocco marked this conversation as resolved.
Outdated

Widgets must meet all of the following requirements to be accepted. Widgets that don't meet this bar may be rejected or require remediation before publishing.
Comment thread
SuzanneTocco marked this conversation as resolved.
Outdated

| Requirements |
|:---|
| ✅ Fully operable with a keyboard, with no focus traps inside the widget |
| ✅ Usable with screen readers, with meaningful roles, names, and states on all interactive elements |
| ✅ Meets WCAG 2.2 AA contrast ratios for text and essential UI elements |
| ✅ Remains usable in Windows High Contrast Mode |
| ✅ Provides accessible error handling and loading states for content inside the widget |
| ✅ Supports at least 200% zoom without loss of content or functionality |
| ✅ Respects `prefers-reduced-motion` and avoids harmful flashing |
| ✅ Adapts to the chat container without requiring horizontal scrolling |

> [!WARNING]

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd drop this, I think the text above is sufficient.

When I worked with the Learn content folks it was "common knowledge" (apparently based on studies that none of us ever actually saw) that these alerts are often counterproductive, users tend to skip past them.

Also - rejected or accepted by what process?

> Widgets that don't meet these requirements may be rejected or require remediation before they can be published.


## Recommended best practices
Comment thread
SuzanneTocco marked this conversation as resolved.
Outdated

The following practices aren't required but are strongly recommended to improve the overall experience.

- **Skip links:** Provide a "Skip to main content" link at the top of the widget to let keyboard and screen reader users bypass repeated navigation
- **Headings:** Use headings (`<h1>`–`<h3>`) to structure content and make navigation easier for screen reader users
- **Simple interaction models:** Prefer simple, predictable interaction patterns over highly custom or novel controls
- **Scrolling:** Avoid complex nested scroll regions. If a scrollable region is necessary, ensure it has a clear label and is keyboard accessible
- **Tooltips:** Implement accessible tooltips using `aria-describedby` and ensure they're available on focus as well as hover
- **Tooltips:** Use [Fluent UI React v9 ](https://storybooks.fluentui.dev/react/?path=/docs/concepts-introduction--docs) components wherever possible — they implement accessible patterns out of the box and reduce the amount of custom accessibility work required


## Testing guidance

Partners should validate accessibility using a combination of automated and manual testing before submission. Because widgets run inside a sandboxed iframe, some automated tools may not scan iframe content by default — open your widget content directly in a browser tab to get accurate results from automated tools.


### Automated testing tools
Comment thread
SuzanneTocco marked this conversation as resolved.
Outdated

| Tool | Type | Notes |
|---|---|---|
| [Lighthouse](https://developer.chrome.com/docs/lighthouse) | Browser (Chrome DevTools) | Built into Chrome — good starting point for catching common issues. No install required. |
| [axe DevTools](https://www.deque.com/axe/devtools/) | Browser extension | More detailed accessibility analysis than Lighthouse. Free version available. |
| [WAVE](https://wave.webaim.org/extension/) | Browser extension | Visual overlay that highlights issues directly on the page. Good for quick visual checks. |
| [Colour Contrast Analyser](https://www.tpgi.com/color-contrast-checker/) | Desktop tool | Checks contrast ratios for text and UI elements against WCAG standards. |
| [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/) | Web-based | Quick browser-based contrast ratio checker. No install required. |


### Manual testing tools

| Test type | What to verify |
|---|---|
| Keyboard-only | Navigate the entire widget using only the keyboard. Verify no focus traps and a logical tab order throughout. |
| Screen reader | Test with at least one screen reader — Narrator or NVDA on Windows, VoiceOver on Mac. Verify all elements are announced meaningfully. |
| High contrast | Enable Windows High Contrast Mode and verify that content, controls, and focus indicators remain visible. |
| Zoom | Increase browser zoom to 200% and confirm content and functionality are fully preserved. |
| Reduced motion | Enable reduced motion in OS settings and verify animations are minimized or disabled. |
| Responsive | Test in narrow viewports representative of Teams chat container widths. |


## Related content

- [HTML widgets overview for Microsoft Teams](#)
- [UX guidelines for HTML widgets in Microsoft Teams](#)
- [Teams store validation guidelines](#)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO on these links

- [Fluent UI React v9](https://storybooks.fluentui.dev/react/?path=/docs/concepts-introduction--docs)
- [Fluent UI React v9 components](https://react.fluentui.dev/)
- [WCAG 2.2 contrast requirements](https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html)
- [WAI-ARIA Authoring Practices](https://www.w3.org/WAI/ARIA/apg/)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions msteams-platform/html-widgets/overview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let me know if you actually want to ship without this and the UX guidelines doc and we can get rid of them in this pull request and rejigger the table of contents configuration as needed.

title: TODO
author: SuzanneTocco
description: TODO
ms.topic: article
ms.date: 05/27/2026
---

TODO
Loading