A curated list of major achievements by the Web Chat team. This document celebrates impactful changes, forward-looking designs, and key architectural wins.
Goal: Ship first-class <script type="module"> bundles for modern browsers.
By: @compulim in PR #5592, #5593, #5595, #5600, #5602
- Delivered browser-ready ES module builds with vendor chunking for optimal caching.
- Introduced new export entries and reworked external API.
- Added documentation for all available Web Chat inclusion options.
Goal: Organize multi-part reasoning flows into collapsible groups within the transcript. By: @OEvgeny in PR #5553, #5585, #5590, #5608
- Added logical grouping and context so activities can self-organize via
Messageentity metadata. - Introduced a way to render grouped activities and group-aware focus management to keep grouped conversations accessible.
- Reworked fluent-theme approach to decorating activities.
- Extended activity ordering to honor entity
positionfields when rendering grouped messages.
Goal: Replace markdown-it with a modern and extensible markdown parser.
By: @compulim in PR #5330
- Switched to
micromark, enabling MathML support and consistent parsing. - Foundation for better Markdown extensibility and performance.
Goal: Move HTML sanitization into a dedicated middleware layer. By: @compulim in PR #5338
- Clean separation of concerns for Markdown rendering and sanitation.
- Easier customization and more secure rendering.
Goal: Modernize monorepo tooling for better dependency and package management. By: @compulim in PR #5301
- Dropped Lerna in favor of native npm workspaces.
- Improves build performance and developer experience.
Goal: Enable developers to customize Web Chat and Fluent theme icons without JavaScript overrides. By: @OEvgeny in PR #5413, #5502
- Introduced CSS variable-based icon customization system for Web Chat and Fluent theme.
- Reworked existing icons and fully enabled across Web Chat components.
Goal: Improve multi-file upload UX by introducing persistent attachment previews. By: @compulim, @OEvgeny in PR #5464, #5491, #5492
- Added
SendBoxAttachmentBarto allow users to preview and remove attachments before sending. - Previews switch between thumbnails and list mode based on count and accessibility settings.
- Enhances multi-folder upload workflows and aligns with modern messaging UX.
Goal: Unify and polish code block rendering across Markdown and UI components. By: @OEvgeny, @compulim in PR #5334, #5335, #5336, #5389
- Introduced syntax highlighting for markdown blocks using Shiki.
- Added copy buttons to all rendered code blocks and dialogs.
- Unified presentation of fenced blocks with accessibility and clipboard improvements.
Goal: Expand and refine Fluent UI styling across all components. By: @OEvgeny in PR #5258 and others
- Introduced "Copilot" variant and transcript-wide theming.
- Improved accessibility, visual consistency, and component modularity.
Goal: Enable pluggable, dynamic visual enhancements per activity. By: @OEvgeny in PR #5205, #5312
- Introduced
WebChatDecoratorandActivityDecorator. - Supports animated borders and style options with minimal code changes.
Goal: Enhance onboarding by offering users suggested starter prompts before interaction. By: @compulim, @OEvgeny
- Experimental pre-chat messages added in PR #5255 and #5263
- Fluent blueprint implementation in #5270, #5276, #5279, #5284
Goal: Improve real-world usability of voice input. By: @compulim, @RushikeshGavali in PR #5400, #5426
- Support for initial silence timeout and continuous barge-in mode.
- Makes Azure Speech more responsive and accessible.
Goal: Improve screen reader support via centralized ARIA updates. By: @OEvgeny in PR #5251
- Added
usePushToLiveRegionhook. - Enables consistent and predictable accessibility behavior.
Goal: Enable safe embedding of Web Chat in custom element trees. By: @OEvgeny in PR #5196
- Added
stylesRoot,ThemeProvider.styles, and nonce support. - Ensures style encapsulation and isolation in Web Component environments.
Goal: Support use cases requiring math rendering. By: @compulim, @OEvgeny in PR #5332, #5381
- Integrated
katexviamicromark-extension-math. - Supports
\\[ \\],\\( \\), and$$ $$syntax.
Goal: Enable composable, reusable, and unified way for managing middleware. By: @compulim in PR #5515, #5566
- Allows multiple middleware to be composed and applied from a single place.
- Simplifies extension, testing, and maintenance of middleware logic.
- Lays groundwork for Web Chat becoming a UI orchestration layer.
Goal: Reduce rerenders and memory footprint. By: @OEvgeny, @compulim across #5163, #5183, #5190
- Rewrote key hooks (
useActivityWithRenderer,useMemoized) for efficiency. - Prevents excessive renders in large conversations.
Goal: Improve activity grouping logic and performance. By: @compulim in PR #5471
- Added
styleOptions.groupActivitiesByanduseGroupActivitiesByNamehook. - Keeps existing
sender+statusbehavior as default. - New hook preferred for performance.
- Middleware can optionally compute groupings by name.
Goal: Modernize runtime prop validation for performance and clarity. By: @compulim in PR #5476
- Introduced
valibotto improve schema-based prop safety. - Reduces runtime errors and simplifies validation logic.
Goal: Modernize WebDriver test infrastructure to prioritize debuggability and reproducibility. By: @compulim in PR #5311, along with migrations PR #5541, PR #5543, PR #5544, PR #5545, PR #5546, PR #5547, PR #5548, PR #5549, PR #5550, PR #5576, PR #5577, PR #5649, PR #5651, PR #5652, PR #5653
- Eliminate
.jsentry file. - Put screenshots side-by-side with test to improve debuggability.
- Improves debuggability by running tests directly in browser.