The top composer posts a root comment. Toolbar actions wrap the selection with Markdown markers (bold **…**, italic *…*). The core formatter soft-normalizes common spacing typos (for example **bold **) so emphasis still renders; fenced/code spans are left unchanged.
Click Reply on a comment to open an inline composer under that comment (primary UX). The reply is posted with the correct parent_id / root_id. Nested threads indent recursively for deep conversations.
Blade — Usage
Comment box by
page_idAlias:
Comment box on an Eloquent model
Whitelist the class in
config/vgcomment.php:Then:
Minimal page
How it works
CommentService.nestReplies()so the thread followsparent_id(not a flat list under the root only).apiBase, CSRF, guest flags, context, reaction suggestions, …).comments.jstalks to/{prefix}/apifor create/update/react/upload.You do not need Livewire, Alpine, or Echo for the Blade UI.
Composer & Markdown
The top composer posts a root comment. Toolbar actions wrap the selection with Markdown markers (bold
**…**, italic*…*). The core formatter soft-normalizes common spacing typos (for example**bold **) so emphasis still renders; fenced/code spans are left unchanged.Uploads (two paths)
is inserted into the content.Images already embedded in Markdown are not duplicated as attachment chips in the rendered comment.
Replies
Click Reply on a comment to open an inline composer under that comment (primary UX). The reply is posted with the correct
parent_id/root_id. Nested threads indent recursively for deep conversations.Emoji & reactions
reaction_typesin config is a UI suggestion list only — see Configuration.Multiple boxes
Use different
pageId(or models) per instance:Admin
Same core admin as Livewire apps: Admin panel.