# First beta release of the comment components

**Version:** v0.1.0

**Published:** October 26, 2026

The first versioned release of `@sanity/collaboration`: React components for commenting on Sanity content, with threads, replies, mentions, reactions and inline comments on Portable Text. The package is in beta, so a breaking change ships in a minor version and is called out in the changelog. This release also settles the entry points and the component names used by the `0.0.0-canary` builds.

## Entry points

- `@sanity/collaboration`: the comment data types and framework-free helpers (`toPlainText`, `parseCommentAddress`, `withCommentAddress`). It has no React, Sanity UI or SDK dependency, so it also runs on a server.
- `@sanity/collaboration/ui`: the components and hooks, including `CommentsProvider`, `CommentsPanel`, `CommentThread`, `Comment`, `CommentInput`, `CommentList` and `PortableTextComments`.
- `@sanity/collaboration/sdk`: the components wired to the Sanity App SDK (`SDKCommentsProvider`, `DocumentCommentsPanel`, `InlineCommentsPlugin`, `useSDKThreadCallbacks`). They read and write comments through `@sanity/sdk-react/collaboration`.

## New features

- Translations: `CommentsProvider` and `SDKCommentsProvider` take a `labels` prop (`CommentsLabels`) that translates every default component below them. A component's own `labels` and single-string props still override it. See [Translate the UI text](https://www.sanity.io/docs/collaboration/translate-the-ui).
- Comments panel: `CommentsPanel` has Open and Resolved tabs and an optional close button (`onClose`), and each field has an "Add a new comment thread" button above its threads.
- Comment layout: the quote sits under the author header.
- Inline highlights: highlights use three shades for nested threads, and only the innermost thread under the pointer hovers or selects. See [Comment on Portable Text](https://www.sanity.io/docs/collaboration/comment-on-portable-text).
- Deselecting: clicking outside a thread or pressing Escape deselects the active comment, not only clicking the panel background.

## Breaking changes from the canary builds

- Entry points: the root entry no longer re-exports the UI. Import components and hooks from `@sanity/collaboration/ui`, and the SDK-wired components from `@sanity/collaboration/sdk`.
- `Connected*` is now `SDK*`: `ConnectedCommentsProvider` is `SDKCommentsProvider`, `useConnectedThreadCallbacks` is `useSDKThreadCallbacks`, and `ConnectedThreadAction`, `ConnectedThreadCallbacks` and `ConnectedThreadCallbacksOptions` are `SDKThreadAction`, `SDKThreadCallbacks` and `SDKThreadCallbacksOptions`.
- `CommentThreadCard` is now `CommentThread` (with its `Props`, `Labels` and `Handle` types), and `InlineCommentsLayer` is now `PortableTextComments`. The `data-ui` attribute is now `CommentThread`, so update `[data-ui='CommentThreadCard']` selectors.
- Read-only: `readOnly` is removed from the providers and from `useCommentsContext()`. Pass `capabilities={() => READ_ONLY_CAPABILITIES}` instead, and leave out `onThreadCreate` to hide the add-thread buttons. `canResolve` now defaults to `true` and covers reopening too, and the new `canCreate` capability covers retrying a failed create.
- Prop renames: `InlineCommentHighlight`'s `active` is now `selected` (the `data-active` attribute is unchanged), and `CommentTimestamp`'s `date` and `editedAt` are now `createdAt` and `lastEditedAt`.
- `showContentSnapshots` moves from `CommentsProvider` to `CommentsPanel`.
- `CommentReactions.canReact` is removed. Pass `onReactionToggle` to make the reactions interactive.
- `CommentList`'s `renderFieldFooter` is now `renderFieldAction`, and the `sort` prop on `CommentList` and `CommentsPanel` (and the `CommentListSort` type) is removed. Threads are always sorted newest activity first.

