Skip to main content
<CommentThread /> is the batteries-included path (same Tailwind classes as Blade). When you want the data and none of the opinions, drop it and use the hook. That store is deliberately independent of the built-in components’ internal context.

React

Wrap the app in CommentifyProvider once so every thread shares one client. comment.html is already markdown + mention links, sanitized the same way Blade renders. Do not run a second markdown pipeline on body unless you are building an editor.

Vue

The hook returns state as a single ref:
Share a client with createCommentify({ client }) on createApp(), or provideCommentifyClient() in a parent.

Guest posts from a custom form

The bundled composer already sends guest fields when GET ui says features.guests is true.

Comment shape

Each comment includes id, body, html, parent_id, is_approved, user (id, name, avatar), likes_count, liked, reported, replies_count, nested replies, can, is_author, is_moderator, is_guest, pinned, pinned_at, created_at, relative_created_at, updated_at. Guests have user.id === null and the guest display name.
Last modified on September 12, 2026