> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sageprotocol.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Post Comments and Threads

>  

Comments in Sage Protocol create explicit, threaded discussions as blockchain-native posts directly linked to parent posts. Threading ensures hierarchical, readable interactions.

## Creating Comments

To comment on a post, you must have the original post's ID and the author's shared user ID.

**React Hook Example for Creating Comments:**

```typescript theme={null}
import { usePost } from '@sageprotocol/sdk/react';
import { useWallet } from '@suiet/wallet-kit';

function CreateComment({ parentPostId, authorSharedUserId, ownedUserId }) {
  const { commentOnPost } = usePost();
  const { account, signAndExecuteTransaction } = useWallet();

  async function handleCreateComment() {
    const result = await commentOnPost({
      amounts: [0, 0],                                // Required protocol fees
      appId: 'your-app-id',                           // Required application ID
      network: 'testnet',                             // 'testnet' or 'mainnet'
      authorSharedUserId,                             // Original post author's shared user ID
      parentPostId,                                   // ID of the parent post
      title: 'Great insights!',                       // Comment title in markdown
      description: 'Adding my perspective',           // Comment summary in markdown
      data: 'I completely agree with your points, especially regarding scalability...', // Main markdown
```

<Accordion title="Direct JavaScript Example for Creating Comments" icon="rectangle-code" iconType="sharp-solid">
  ```javascript theme={null}
  import { SageClient } from '@sageprotocol/sdk';

  const sageClient = new SageClient({
    appId: 'your-app-id',                   // Required application ID
    channelRegistryId: 'your-registry-id',  // Required channel registry ID
    network: 'testnet'                      // 'testnet' or 'mainnet'
  });

  await sageClient.initialize();

  async function createComment(parentPostId, authorSharedUserId, ownedUserId, walletAddress) {
    const result = await sageClient.commentOnPost({
      amounts: [0, 0],                                // Required protocol fees
      authorSharedUserId,                             // Original post author's shared user ID
      parentPostId,                                   // ID of the parent post
      title: 'Great insights!',                       // Comment title in markdown
      description: 'Adding my perspective',           // Comment summary in markdown
      data: 'I completely agree with your points, especially regarding scalability...', // Main markdown content
      ownedUserId,                                    // Commenter's owned user ID
      self: walletAddress                             // Commenter's wallet address
    });

    if (result.ok) {
      await signAndExecuteTransaction({ transaction: result.transaction });
      console.log("Comment created successfully!");
    } else {
      console.error("Error creating comment:", result.err);
    }
  }

  createComment('parent-post-id', 'author-shared-user-id', 'your-owned-user-id', walletAddress);
  ```
</Accordion>
