Skip to content

[4.19.0] - 2025-05-25

Latest

Choose a tag to compare

@compulim compulim released this 26 May 19:55
1d3afbf

[4.19.0] - 2026-05-25

Breaking changes in this release:

  • 💥 styleOptions.bubbleImageHeight is being deprecated in favor of styleOptions.bubbleImageMaxHeight and styleOptions.bubbleImageMinHeight. The option will be removed on or after 2026-07-05
  • 💥 styleOptions.bubbleMaxWidth/bubbleMinWidth is being deprecated in favor of styleOptions.bubbleAttachmentMaxWidth/bubbleAttachmentMinWidth and styleOptions.bubbleMessageMaxWidth/bubbleMessageMinWidth. The option will be removed on or after 2026-10-08
  • 💥 Moved to micromark for rendering Markdown, instead of markdown-it
    • Please refer to PR #5330 for details
  • 💥 HTML sanitizer is moved from renderMarkdown to HTML content transformer middleware, please refer to PR #5338
    • If you customized renderMarkdown with a custom HTML sanitizer, please move the HTML sanitizer to the new HTML content transformer middleware
  • 💥 useGroupActivities hook is being deprecated in favor of the useGroupActivitiesByName hook. The hook will be removed on or after 2027-05-04
  • 💥 useSuggestedActions() hook is being deprecated in favor of the useSuggestedActionsHooks().useSuggestedActions() hook. The hook will be removed on or after 2027-05-30
  • 💥 The following middleware should be created using their respective factory function:
    • activityBorderDecoratorMiddleware, related to PR #5504, #5510
    • activityGroupingDecoratorMiddleware, related to PR #5504
    • sendBoxMiddleware, related to PR #5504
    • sendBoxToolbarMiddleware, related to PR #5504
  • 💥 styleOptions.hideUploadButton is being deprecated in favor of styleOptions.disableFileUpload. The option will be removed on or after 2027-07-14
  • 💥 botframework-directlinespeech-sdk no longer ponyfill AbortController, it is supported by modern browsers, in PR #5530
  • 💥 activityMiddleware is being deprecated in favor of polymiddleware. It will be removed on or after 2027-08-16, related to PR #5515
  • 💥 Root-level (unconnected) Claim entity is being deprecated, in PR #5564, by @compulim. It will be removed on or after 2027-08-29
    • Use entities[@id=""][@type="Message"].citation[@type="Claim"] instead
  • 💥 activityStatusMiddleware.nextVisibleActivity and activityStatusMiddleware.sameTimestampGroup is removed after deprecation, in PR #5565, by @compulim
  • 💥 avatarMiddleware is being deprecated in favor of polymiddleware. It will be removed on or after 2028-03-16, related to PR #5779

Added

  • (Experimental) Added pre-chat message with starter prompts in Fluent UI, in PR #5255 and #5263, by @compulim
  • (Experimental) Added isPrimary props to Fluent UI send box. When set, will wire up with useSendBoxValue and works with starter prompts in pre-chat message, in PR #5257, by @compulim
  • (Experimental) Expand Fluent theme support to activities and transcript, in PR #5258, by @OEvgeny
  • Added new Fluent UI theme variant "copilot" with updated styling and components, in PR #5258, by @OEvgeny
  • Introduced ActivityDecorator component for enhanced message styling and layout, in PR #5258, by @OEvgeny
  • Added CopilotMessageHeader component for displaying bot information in the "copilot" variant, in PR #5258, by @OEvgeny
  • Updated Fluent theme styling to improve accessibility and visual consistency, in PR #5258, by @OEvgeny
  • Fixed header font in copilot variant, in PR #5261, by @OEvgeny
  • Added "Copy" button to bot messages in Fluent UI if it contains keyword AllowCopy, in PR #5259, #5262, and #5285, by @compulim
  • Resolves #4876 and #4939. Added support of informative message in livestreaming, by @compulim, in PR #5265
  • Introduced centralized announcements approach via the new usePushToLiveRegion hook, in PR #5251, by @OEvgeny
  • Added keyboard shortcut for the "New Messages" button, in PR #5251, by @OEvgeny
  • Added decorators for loading and completion states to the Fluent theme, in PR #5269, by @OEvgeny
  • Added blueprint of starter prompts in the Fluent theme, in PR #5270, #5276, #5279, and #5284, by @OEvgeny and @compulim
  • Added support for liner message activities in the Fluent theme, in PR #5272, by @OEvgeny
  • Added new uiState props and useUIState hook, in PR #5276, by @compulim
  • (Experimental) Added support for using Web Chat inside a shadow DOM, in PR #5196, by @OEvgeny
    • Added styleOptions.stylesRoot property allowing users to specify the root node where Web Chat styles should be placed, in PR #5196, by @OEvgeny
    • Added the ThemeProvider.styles property, allowing theme packages to place styles into the same root node as Web Chat, in PR #5196, by @OEvgeny
    • Added nonce for Fluent and react-scroll-to-bottom injected styles, in PR #5196, by @OEvgeny
    • Updated react-scroll-to-bottom to version 4.2.1-main.53844f5, in PR #5196, by @OEvgeny
    • Updated react-film to version 3.1.1-main.f623bf6, in PR #5196, by @OEvgeny
  • (Experimental) Added CSS decorator support into Web Chat white-label experience, in PR #5312, by @OEvgeny
    • Introduced WebChatDecorator component for adding animated borders to activities, in PR #5312
    • Added new style options borderAnimationColor1, borderAnimationColor2, and borderAnimationColor3 for customizing decorator colors, in PR #5312
  • Added styleOptions.bubbleAttachmentMaxWidth/bubbleAttachmentMinWidth and styleOptions.bubbleMessageMaxWidth/bubbleMessageMinWidth, in PR #5321, by @compulim
  • (Experimental) Added more CSS variables support, in PR #5321, by @compulim
  • Added MathML/TeX block support in Markdown via micromark-extension-math and katex, in PR #5332, by @compulim
  • Added code viewer dialog with syntax highlighting, in PR #5335, by @OEvgeny
  • Added copy button to code blocks, in PR #5334, by @compulim
  • Added copy button to view code dialog, in PR #5336, by @compulim
  • Added HTML content transformer middleware, in PR #5338 and #5347, by @compulim
    • HTML content transformer is used by useRenderMarkdown to transform the result from renderMarkdown
    • HTML sanitizer is moved from renderMarkdown into HTML content transformer for better coverage
    • Copy button is added to fenced code blocks (<pre><code>)
    • Configure HTML sanitizer via request.allowedTags
  • Added support for math blocks using $$ delimiter alongside existing \[...\] and \(...\) notations, in PR #5381, by @OEvgeny
  • Added support for speech recognition initial silence timeout when using Azure Speech, in PR #5400, by @compulim
  • Introduced syntax highlighting for markdown code blocks, in PR #5389, by @OEvgeny
  • (Experimental) Added feedbackActionsPlacement style option to control feedback button placement, in PR #5407, by @OEvgeny
    • New style option supports two values: 'activity-actions' and 'activity-status' (default)
    • When set to 'activity-actions', feedback buttons are displayed in the activity actions toolbar
    • When set to 'activity-status', feedback buttons appear in the activity status area (default behavior)
  • Added support for including activity ID and key into form data indicated by data-webchat-include-activity-id and data-webchat-include-activity-key attributes, in PR #5418, by @OEvgeny
  • Added dedicated loading animation for messages in preparing state for Fluent theme, in PR #5423, by @OEvgeny
  • Resolved #2661 and #5352. Added speech recognition continuous mode with barge-in support, in PR #5426, by @RushikeshGavali and @compulim
    • Set styleOptions.speechRecognitionContinuous to true with a Web Speech API provider with continuous mode support
  • Added support of contentless activity in livestream, in PR #5430, by @compulim
  • Added sliding dots typing indicator in Fluent theme, in PR #5447 and PR #5448, by @compulim
  • (Experimental) Add an ability to pass completion prop into Fluent send box and expose the component, in PR #5466, by @OEvgeny
  • Added feedback form for like/dislike button when feedbackActionsPlacement is "activity-actions", in PR #5460, PR #5469, PR 5470, PR #5501 by @lexi-taylor, and @OEvgeny
  • Added multi-dimensional grouping, styleOptions.groupActivitiesBy, and useGroupActivitiesByName hook, in PR #5471, by @compulim
    • Existing behavior will be kept and activities will be grouped by sender followed by status
    • useGroupActivitiesByName is favored over the existing useGroupActivities hook for performance reason
    • Middleware which support the new grouping name init argument should only compute the grouping if they match the grouping name, or the grouping name is not specified, otherwise, should do nothing and call the downstream middleware
  • Resolved #5463. Added attachment preview for sendAttachmentOn: "send", in PR #5464, by @compulim, in PR #5492, by @OEvgeny
    • Attaching files will no longer remove previously attached files
    • Updated Fluent theme to use the new attachment preview feature
  • Added collapsible activity and activity with abstract handling, in PR #5506, in PR #5513, in PR #5771, by @OEvgeny
    • Added styleOptions.partGroupDefaultOpen to configure whether part groups are open by default, defaults to true
    • Added styleOptions.referenceListDefaultOpen to configure whether references are open by default, defaults to true
    • In the Fluent theme "copilot" variant, part groups and references now default to closed
  • Added disableFileUpload flag to completelly disable file upload feature, in PR #5508, by @JamesNewbyAtMicrosoft
    • Deprecated hideUploadButton in favor of disableFileUpload.
    • Updated BasicSendBoxToolbar to rely solely on disableFileUpload.
  • Added support for livestreaming via entities[type="streaminfo"] in PR #5517 by @kylerohn and @compulim
  • Added polymiddleware, a new universal middleware for every UIs, by @compulim in PR #5515 and #5566
    • Legacy middleware is prioritized over polymiddleware
    • Added polymiddleware to <ThemeProvider>
    • Currently supports activity middleware and the new error box middleware
    • Supports avatar middleware, by @compulim in PR #5779
  • New internal packages, by @compulim in PR #5515
    • @msinternal/botframework-webchat-api-middleware for middleware branch of API package
    • @msinternal/botframework-webchat-debug-theme package for enabling debugging scenarios
    • @msinternal/botframework-webchat-react-hooks for helpers for React hooks
  • Added link sanitization and ESLint rules, in PR #5564, by @compulim
  • Added blob URL sanitization and ESLint rules, in PR #5568, by @compulim
  • Added visual message grouping following the isPartOf property of the Message entity, in PR #5553, in PR #5585, in PR #5590, in PR #5608, in PR #5773, by @OEvgeny
    • The mode is suitable for providing chain-of-thought reasoning
    • Added visual indication of creativeWorkStatus property in Message entity:
      • undefined - no indicator is shown
      • 'Incomplete' - show loader aside from the message
      • 'Published' - show checkmark aside from the message
    • Added a position property support for the Message entity
      • The position property takes precedence over existing sequence ID
    • Added support for explicit group status via isPartOf.creativeWorkStatus and isPartOf.abstract on the HowTo entity
      • When the HowTo entity carries an explicit creativeWorkStatus, it takes precedence over status derived from individual messages
      • When the HowTo entity carries an abstract, it is used as the group header title
  • Unified build info and injection of <meta> tag, in PR #5571, by @compulim
  • Added documentation for isPartOf property, in PR #5573, by @compulim
  • fluent-theme: Changed dependencies to import solely from the "bundle" package, in PR #5584, by @compulim
  • Improved bundling, in PR #5588, by @compulim
    • New named exports
      • api: botframework-webchat-api/hook
      • bundle: botframework-webchat/component, botframework-webchat/decorator (internal-use), botframework-webchat/hook
      • component: botframework-webchat-component/component, botframework-webchat-component/hook
  • (Experimental) Added support for importing via <script type="module">, by @compulim in PR #5592
    • Added support for botframework-webchat-fluent-theme package, by @compulim in PR #5593
    • Bundling vendor chunks, by @compulim in PR #5595
    • Added deprecation notes for legacy imports, by @compulim in PR #5600
      • import { hooks } from 'botframework-webchat' should be replaced by import * as hooks from 'botframework-webchat/hook.js'
    • Added target to Chrome 100 and re-enable Lightning CSS for ESM builds, by @compulim in PR #5602
  • Relaxed role prop to allow any string instead of ARIA landmark roles, in PR #5561, by @compulim
  • Cleaned up <ThemeProvider> and various CSS related code, in PR #5611, by @compulim
  • (Experimental) Reworked the copilot variant to align with the modern Copilot UX, in PR #5630, by @OEvgeny, in PR #5634, by @OEvgeny, in PR #5656, by @OEvgeny
    • Added loading animation for copilot, and fluent variants
  • New JSON-LD graph backend, by @compulim in PR #5622
  • New debug API, by @compulim in PR #5663 and PR #5664, see DEBUGGING.md for more
    • Debug into element: open F12, select the subject in Element pane, type $0.webChat.debugger
    • Breakpoint: open F12, select the subject in Element pane, type $0.webChat.breakpoint.incomingActivity
  • The botframework-webchat package now uses CSS modules for styling purposes, in PR #5666, in PR #5677 by @OEvgeny
  • 👷🏻 Added npm run build-browser script for building test harness package only, in PR #5667, by @compulim
  • Added pull-based capabilities system for dynamically discovering adapter capabilities at runtime, in PR #5679, by @pranavjoshi001
  • Added Speech-to-Speech (S2S) support for real-time voice conversations, in PR #5654, by @pranavjoshi
  • Added core mute/unmute functionality for speech-to-speech via useRecorder hook (silent chunks keep server connection alive), in PR #5688, by @pranavjoshi
  • 🧪 Added incremental streaming Markdown renderer for livestreaming, in PR #5799, by @OEvgeny
    • Fixed streaming Markdown renderer to preserve link reference definitions during incremental rendering and recover on error, in PR #5808, by @OEvgeny
  • Added clipboard paste and drag-and-drop file support to both basic and fluent themes, in PR #5829, by @OEvgeny

Changed

Deprecated

  • 🏫 Sample 01.getting-started/l.sharepoint-web-part, 01.getting-started/k.direct-line-token, and samples under 07.advanced-web-chat-apps is being archived and will no longer receive updates, in PR #5533, #5536, and #5537, by @compulim

Removed

  • Removed copilot-deprecated variant from Fluent theme, in PR #5644, by @OEvgeny
  • Deprecating disabled props and useDisabled hook in favor of new uiState props and useUIState hook, in PR #5276, by @compulim
  • useSuggestedActions() hook is being deprecated in favor of the useSuggestedActionsHooks().useSuggestedActions() hook, in PR #5489, by @compulim
  • activityMiddleware is being deprecated in favor of polymiddleware. It will be removed on or after 2027-08-16, related to PR #5515
  • Root-level (unconnected) Claim entity is being deprecated, in PR #5564, by @compulim. It will be removed on or after 2027-08-29
    • Use entities[@id=""][@type="Message"].citation[@type="Claim"] instead
  • activityStatusMiddleware.nextVisibleActivity and activityStatusMiddleware.sameTimestampGroup is being deprecated and will be removed on or after 2022-07-22, in PR #4362, by @compulim
  • Removed legacy test harness, in PR #5655, by @compulim
    • All tests are now either using html2 test harness or simple unit tests
    • Legacy and html (html1) test harness are all migrated to html2
  • avatarMiddleware is being deprecated in favor of polymiddleware. It will be removed on or after 2028-03-16, related to PR #5779

Fixed

  • Fixed #5256. styleOptions.maxMessageLength should support any JavaScript number value including Infinity, by @compulim, in PR #5255
  • Fixes #4965. Removed keyboard helper screen in #5234, by @amirmursal and @OEvgeny
  • Fixes #5268. Concluded livestream is sealed and activities received afterwards are ignored, and streamSequence is not required in final activity, in PR #5273, by @compulim
  • Fixes #5288. Fixed citation and sensitivity label bleeding when using Fluent skin pack, in PR #5287, by @compulim
  • Fixes #5294. Fixed copy button animation reset to "Copied" after hiding and showing Web Chat, in PR #5295, by @compulim
  • Fixes #5147. Added punycode to our dependencies as markdown-it requires it but did not have it in their package.json, in PR #5301, by @compulim
  • Fixes #5306. Title and subtitle in pre-chat message activity should wrap, in PR #5307, by @compulim
  • Fixes #5319. Some Markdown text are not rendered after HTML tags, in PR #5320, by @compulim
  • Fixes #5323. Removed unused CSS class from carousel component, eliminating unintended styling, in PR #5325, by @OEvgeny
  • Resolved CSS class name conflicts between component and fluent packages to prevent styling issues, in PR #5326, in PR #5327, by @OEvgeny
  • Fixed #5350. Bundled shiki in component package, in PR #5349, by @compulim
  • Fixed modal dialog rendering to prevent visual flicker and improve UX when opening code views, in PR #5374, by @OEvgeny
  • Fixed math parsing that could cause Web Chat to hang when processing certain LaTeX expressions, in PR #5377, by @OEvgeny
  • Fixed long math formula should be scrollable, in PR #5380, by @compulim
  • Fixed #4948. Microphone should stop after initial silence, in PR #5385
  • Fixed #5390. Fixed drop zone remaining visible when file is dropped outside of the zone, in PR #5394, in PR #5415, by @OEvgeny
  • Improved accessibility across multiple components, in PR #5428, by @OEvgeny
    • Fixed copy button screen reader announcement
    • Added proper ARIA attributes to link definitions component
    • Improved focus management for scroll to end button
  • Fixed #5439. Fixed batched livestream activities are not recognized in the same session, in PR #5440, by @compulim
  • Fixed #5452. With Fluent/Copilot theme, the typing indicator padding should not be squashed and bottom margin should not grow, in PR #5453, by @compulim and in PR #5495, by @OEvgeny
  • Fixed #5461. On macOS and Fluent skinpack applied, using Japanese IME to input some Japanese text should not send them immediately, in PR #5462, by @compulim
  • Fixed #5472, ensure proper inheritance from the outside of Web Chat for visibility CSS property when hidden, in PR #5473, by @OEvgeny
  • Fixed #5474. Disable AMD glue code in bundle, in PR #5478, by @compulim
    • Downstreamers who use our CommonJS and ES Modules output with esbuild will need to disable AMD themselves to prevent conflict with RequireJS
  • Fixed #5479. Fixed feedback form buttons should not squash other buttons, in PR #5480, by @compulim
    • Migrated to radio button for like/dislike where form submission is required
  • Fixed long citation identifiers break activity layout, in PR #5507, by @OEvgeny
  • Fixed botframework-webchat-core/internal import in legacy CommonJS environments, in #5509, by @OEvgeny
  • Updated file-based import with .js extension and removed the file extension from build config, by @compulim, in PR #5516
  • Fixed #5518. Minimal bundled build should work properly, in PR #5507, by @compulim
  • Fixed #5520. Version information should be injected when installed via npm, in PR #5521, by @compulim
  • Fixed aria-label only announcing placeholder in feedback form, in PR #5567
  • Fixed placing focus on the code block content, so it is possible to scroll code via keyboard, in PR #5575, by @OEvgeny
  • Fixed #5581. Activities should be displayed after upgrading via npm install, in PR #5582, by @compulim
  • Fixed Composer props types not resolving correctly in React 16 in PR #5580,
    by @lexi-taylor
  • Fixed npm start may fail subsequently as builds are not fully flushed to /dist/, in PR #5599, by @compulim
  • Fixed published package types containing internal package references, in PR #5610, by @OEvgeny
  • Fixed citation links are not properly matched against markdown links, in PR #5614, by @OEvgeny
  • Fixed botframework-webchat/decorator import in legacy CommonJS environments, in #5616, by @OEvgeny
  • Fixed npm start for efficiency and reliability, in PR #5621 and #5629, by @compulim
  • Fixed activity sorting introduced in PR #5622, part grouping, and livestreaming, by @compulim in PR #5635
  • Fixed Content Security Policy documentation and sample in PR, by @compulim in PR #5648
    • Added img-src data:, required for icons
  • Downgraded graph upsert conflict checks, by @compulim in PR #5674
  • Fixed virtual keyboard should show up on tap after being suppressed, in iOS 26.2, by @compulim in PR #5678
  • Fixed compatibility with create-react-app by adding file extension to core-js imports, by @compulim in PR #5680
  • Fixed virtual keyboard should be collapsed after being suppressed, in iOS 26.3, by @compulim in PR #5757
  • Fixed Fluent/Copilot typing indicator animation background color, in PR #5770, by @OEvgeny
  • Fixed <AddFullBundle> should not re-render when attachment[ForScreenReader]Middleware is updated without noticeable different (iterateEquals), by @compulim, in PR #5779
  • Fixed send box should narrate aria-label prop, by @compulim, in PR #5805
  • Fixed polymiddleware error should not propagate to React runtime if <DebugProvider> is not mounted, by @compulim, in PR #5833