Skip to main content
Each alias in commentables is discussion until you say otherwise. String entries stay valid. Use the array form when a model should behave as reviews or Q&A.
Optional flags override the mode defaults:

What each mode does

Replies stay type = comment. Ratings apply only to top-level posts on a reviews thread. A second rating from the same author (or guest email) is rejected. List responses include a thread object so Livewire, React, and Vue can show stars, averages, and accept controls without guessing:
duplicate_detection is an AI flag, not a mode. See Bring-your-own-key AI.

Ratings

On a reviews thread, the composer shows five stars. Send rating (1-5) with POST {type}/{id}/comments. Livewire uses newCommentState.rating. List responses expose thread.average_rating and thread.rating_count. Livewire shows the same via the thread-stats partial.

Accepted answers

On a Q&A thread, the page author (badges.author_key, default user_id) or a moderator can accept a reply. The accepted reply floats to the top of that question. Unaccept clears it.
Parents cannot be accepted (cannot_accept_parent). Accepting on a non-Q&A thread returns accepted_answers_disabled. Livewire, React, and Vue show Accept answer when comment.can.accept is true.

Schema

Pro migrations add type, rating, accepted_at, and metadata on comments, plus commentify_embeddings. The MIT package does not know about those columns. Pro owns the schema and the Livewire UI for modes. The rest of the 1.1 tables are on Upgrade to Commentify Pro.
Guest commenting is still a core feature. Modes do not turn guests on or off.
Last modified on November 1, 2026