That creates config/commentify-pro.php. Values under core are copied onto config('commentify') at boot so the free package keeps reading the keys it already knows.
Do not also keep a published config/commentify.php unless you installed core first and have not merged yet. If that file exists, the overlay is skipped and core has no effect until you delete it.
'core' => [ 'users_route_prefix' => 'users', 'users_route_key' => 'name', // name (/users/jane) or id (/users/1) 'user_profile_route' => null, // named route, preferred over prefix + key 'user_model' => \Usamamuneerchaudhary\Commentify\Models\User::class, // set to App\Models\User::class 'pagination_count' => 10, 'lazy' => false, // placeholder until the section enters the viewport 'tree_loader' => 'eager', // eager | cte 'max_depth' => 2, // reply levels under each top-level comment (0-50) 'css_framework' => 'tailwind', // tailwind | bootstrap 'comment_nesting' => true, 'read_only' => false, 'default_sort' => 'newest', // newest | oldest | most_liked | most_replied 'enable_sorting' => true, 'enable_reporting' => true, 'report_reasons' => ['spam', 'inappropriate', 'offensive', 'other'], 'theme' => 'auto', // light | dark | auto 'enable_emoji_picker' => true, 'enable_markdown_toolbar' => true, 'enable_markdown_preview' => true, 'enable_notifications' => false, 'notification_channels' => ['database'], // database, mail, broadcast 'require_approval' => false, 'allow_guests' => false, 'login_route' => 'login', // empty string if the app has no named login route 'guest' => [ 'require_email' => true, 'show_gravatar' => true, ], 'honeypot' => true, // Pro composer field 'schema_org' => false, // Pro JSON-LD on the thread 'mentions' => [ 'min_length' => 2, 'handle_column' => null, // null uses the name column ],],
On a free install these keys sit at the top of config/commentify.php. Pro copies the core array onto that bag at boot.lazy, tree_loader, and max_depth shipped in 4.3 and default to the previous behaviour. Behaviour of sorting, markdown, approval, lazy loading, and the CTE loader is on Threads. login_route is the named route for the composer login link. A missing route fails quietly.Mention profile links use users_route_prefix plus users_route_key (name or id). Set user_profile_route to a named route such as users.show when you want that instead. mentions.handle_column is the column MentionSearch matches. Null uses name. Pro’s mention API uses that search. min_length is how many characters the API waits for before it queries.GET /commentify/api/v1/ui exposes the flags and translated labels to the SDKs, so toggling sorting or reporting here changes Livewire, React, and Vue together.
honeypot and schema_org are read by Pro views. The free composer does not render the honeypot field, and the free thread does not emit JSON-LD. Everything from commentables downward on this page is Commentify Pro.
'api' => [ 'prefix' => 'commentify/api/v1', 'middleware' => ['web'], // must match guard: web => ['web'], sanctum => ['api'] 'guard' => 'web', 'rate_limit' => 60, // legacy fallback 'rate_limit_read' => 300, // per minute, user id or IP 'rate_limit_write' => 60, 'guest_likes' => true, 'guest_reports' => true, 'guest_comments' => true, // API posting when core.allow_guests is on 'replies_per_parent' => 3, // nested replies eager-loaded with each parent],
guest_comments => false keeps guests on Livewire but locks the JSON API. Pair guard and middleware or every browser write is an unauthenticated 401. Full detail: Authentication and API.per_page on list endpoints is capped at 50. Cursor pagination (?cursor=) is available for newest and oldest sorts.