# What changed in @chat-adapter/teams

> 62 changes in @chat-adapter/teams 4 from its official release notes, upgrade guides and advisories: 4 breaking, 3 security, 29 new APIs and options. Each one cited. Sources checked 2026-10-18. HTML: https://unstale.sh/npm/@chat-adapter/teams/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## @chat-adapter/teams 4

### Breaking changes

- Teams buttons with actionType set to modal render with associatedInputs set to none, so opening a dialog does not wait on or submit card inputs. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.42.0)
- Teams uses guarded downloads for anonymous attachments: private or internal addresses, plain HTTP, oversized responses, and downloads exceeding the timeout are refused; loopback emulator downloads use bot authentication. (4.39.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.39.0)
- Teams JSON-number submit values are now stringified into event.values instead of being dropped, so previously absent keys may now be present as strings. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.36.0)
- Adapters have updated fallback-render behavior. (4.16.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.16.0)

### Security

- External request targets are validated before credentials, message content, or attachment requests are sent. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.40.0)
- Webhook tenant isolation is hardened. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.40.0)
- Authenticates connector-hosted inline attachments. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.36.0)

### New APIs and options

- ActionEvent gains optional values keyed by card input ID. Teams fills them from Action.Submit, and callbackUrl POSTs carry them too; validate them as user input. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.42.0)
- PostableRaw, PostableMarkdown, PostableAst, PostableCard, StreamingPlanOptions, and StreamOptions accept optional aiGenerated; Teams shows its AI generated label when true. Edits must set the flag again to retain the label. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.42.0)
- Adds an installation lifecycle handler emitted for `installationUpdate` activities, including `add-upgrade`, with a persistable `channelId` for later proactive messages. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.41.0)
- Adds an installation lifecycle handler emitted for `installationUpdate` activities, including `remove-upgrade`, with a persistable `channelId` for later proactive messages. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.41.0)
- Adds `gridLines`, which defaults to `true`; pass `false` to keep a borderless table. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.41.0)
- Adds the `gridStyle` rendering option for Teams tables. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.41.0)
- Adds `verticalAlign` to control vertical alignment of cell content when rendering tables in Teams. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.41.0)
- Adds `widths`, an option for positive integer column weights when rendering tables in Teams. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.41.0)
- The Teams adapter supports Vercel Connect with lazy app identity resolution and custom webhook verification; custom Bot Framework and Graph token factories take precedence over client-secret environment variables. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.41.0)
- Adds an opt-in webhook option to propagate message, action, and slash command handler errors through `waitUntil`, preserving default behavior when not enabled. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.41.0)
- The adapter exposes the bot user ID for application use. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.40.0)
- Button and LinkButton support a tooltip, rendered by the Teams adapter as an Adaptive Card action tooltip. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.40.0)
- Card supports a width hint, which the Teams adapter renders as the `msteams` full-width card property. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.40.0)
- Adds DateInput as a modal child; the Teams adapter renders it as Input.Date. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.36.0)
- Adds NumberInput as a modal child; the Teams adapter renders it as Input.Number. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.36.0)
- Add support for adding and removing reactions from Microsoft Teams messages. (4.35.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.35.0)
- Normalized incoming Teams message authors expose Microsoft Graph email addresses; resolved profiles are cached in the state adapter to limit Graph calls. (4.35.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.35.0)
- Add native Microsoft Teams targeted message support via thread.postEphemeral() and channel.postEphemeral(). (4.35.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.35.0)
- Add a TeamsAdapterConfig option for a custom token factory, enabling authentication through an external mechanism without a static client secret. (4.35.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.35.0)
- Adds low-level Teams primitive subpaths for custom runtimes. (4.31.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.31.0)
- Supported Node versions are now set in engines, giving developers a declared Node runtime compatibility range. (4.29.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.29.0)
- Adapter internals are now protected rather than private, allowing consumers to subclass an adapter and override or extend its behavior, including processUpdate. (4.29.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.29.0)
- Teams Adaptive Cards now support RadioSelect with auto-submit fan-out. (4.25.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.25.0)
- Teams Adaptive Cards now support Select with auto-submit fan-out. (4.25.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.25.0)
- Buttons can use actionType: "modal" to open a Teams dialog (task module). (4.24.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.24.0)
- Adds a webhook hook for handling when a Teams dialog opens. (4.24.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.24.0)
- Adds the ability to receive reaction events. (4.24.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.24.0)
- Adds typing indicator support. (4.24.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.24.0)
- The Teams adapter adds support for certificate and federated (workload identity) authentication. (4.17.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.17.0)

### Behavior and default changes

- TextInput is now a CardChild, letting users reply directly on cards. Teams renders it as Adaptive Card Input.Text; IDs actionId, value, and msteams are rejected on cards. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.42.0)
- Teams sends, edits, deletes, reacts, and types against the service URL encoded in the thread ID; an explicit `apiUrl` still pins every call to that endpoint. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.41.0)
- Teams renders `Table` as the native Adaptive Cards 1.5 `Table` element instead of a `Container` of `ColumnSet`s, enabling grid lines, relative column sizing, and accessible header rows. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.41.0)
- Emitted Adaptive Cards now declare schema version 1.5, enabling action tooltips. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.40.0)
- The adapter emits Teams bot-join events so applications can react when the bot joins. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.40.0)
- Show explicitly configured progress as a native Teams DM status while preserving native streaming. (4.35.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.35.0)
- chat is now a full dependency rather than an optional dependency, so it is installed with the adapter. (4.21.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.21.0)
- Markdown rendering is now fully streaming, including for Slack, which has native streaming. (4.16.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.16.0)
- Markdown tables are now rendered. (4.16.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.16.0)

### Tooling

- Teams is supported by Connect scaffolding, including interactive setup. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.41.0)

### Fixes and other changes

- Teams now classifies bot senders using account role, bot account ID, and adapter identity, reporting isBot and isMe consistently across messages, reactions, card actions, and dialog events. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.42.0)
- Teams channel posts return the created thread ID, allowing follow-up text and Adaptive Card messages to reply to that thread. (4.42.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.42.0)
- The chat JSX runtime now forwards `align` on `<Table>`, matching `fromReactElement`. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.41.0)
- Edit and delete operations for targeted Teams messages use the `?isTargetedActivity=true` endpoint; targeted IDs are recorded in the Chat state adapter with a 24-hour TTL. (4.41.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.41.0)
- Outgoing @names are preserved as plain text rather than converted to mention markup without matching entities. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.40.0)
- The adapter falls back to Teams activity group metadata when the explicit conversation type is missing. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.40.0)
- Buttons with a callbackUrl retain their tooltip and other fields when the URL is replaced with a callback token. (4.40.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.40.0)
- Live Teams sender email is now hydrated without requiring Microsoft Graph permissions. (4.39.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.39.0)
- Strips tags repeatedly until the output is stable, preventing nested or malformed markup from leaving a partial tag behind in Teams message conversion. (4.37.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.37.0)
- Routes personal and group conversations using their explicit conversation type, so group chats use buffered fallback even when their IDs resemble direct messages. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.36.0)
- Parses Teams file download cards. (4.36.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.36.0)
- Fall back to Microsoft Graph's user principal name when a Teams user has no mail address. (4.35.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.35.0)
- Mention conversion no longer turns email addresses, @handles inside URLs, or mentions inside code spans into <at> mention tags. (4.33.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.33.0)
- Expanded npm keywords for adapter and state packages to improve discoverability. (4.30.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.30.0)
- Nested lists are rendered with platform-appropriate indentation and newline separation instead of being flattened during Markdown-to-platform conversion. (4.16.1) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.16.1)
- Fixes ESM directory imports for the Microsoft Graph auth provider. (4.16.0) — [release notes](https://github.com/vercel/chat/releases/tag/%40chat-adapter/teams%404.16.0)
