NIP-18

Reposts

final social

NIP-18 defines how to repost content on Nostr, similar to retweets on Twitter. It supports both simple reposts and quote posts with added commentary.

Author
jb55
Last Updated
31 January 2026
Official Spec
View on GitHub →

NIP-18: Reposts

Status: Final Author: jb55 Category: Social


Overview

NIP-18 defines how to repost content on Nostr - equivalent to retweeting on Twitter or boosting on Mastodon.

Two types of reposts:

  1. Simple repost - Share someone’s post as-is
  2. Quote post - Share with your own commentary

Reposts help content spread across the network and give credit to original authors.


Why Reposts Matter

For Content Distribution

  • Amplify good content to your followers
  • Credit original authors with proper attribution
  • Enable discovery across different relay sets

For Social Dynamics

  • Endorsement - Reposting implies you value the content
  • Commentary - Quote posts add your perspective
  • Metrics - Repost counts indicate content reach

Simple Repost (Kind 6)

A simple repost shares content without additional commentary.

Event Structure

{
  "kind": 6,
  "pubkey": "your_pubkey",
  "created_at": 1234567890,
  "tags": [
    ["e", "original_event_id", "relay_url"],
    ["p", "original_author_pubkey"]
  ],
  "content": "",
  "sig": "..."
}

Tag Requirements

TagPurpose
eReference to original event (required)
pOriginal author’s pubkey (required)

Content Field

For simple reposts, the content field should be empty or contain the stringified JSON of the original event (for relay redundancy).


Quote Post (Kind 1)

A quote post is a regular text note (kind 1) that references another post.

Event Structure

{
  "kind": 1,
  "pubkey": "your_pubkey",
  "created_at": 1234567890,
  "tags": [
    ["q", "quoted_event_id", "relay_url"],
    ["p", "quoted_author_pubkey"]
  ],
  "content": "Great point! I'd add that...\n\nnostr:nevent1...",
  "sig": "..."
}

Quote Tag (q)

The q tag specifically indicates a quoted event:

["q", "event_id", "relay_url"]

Content with Reference

Include the quoted event reference in the content:

My commentary here...

nostr:nevent1...

Clients render this with an embedded preview of the quoted post.


Implementation

Creating a Repost

// Simple repost
const repost = {
  kind: 6,
  created_at: Math.floor(Date.now() / 1000),
  tags: [
    ["e", originalEvent.id, "wss://relay.example.com"],
    ["p", originalEvent.pubkey]
  ],
  content: JSON.stringify(originalEvent) // optional
};

// Sign and publish
signedEvent = await signEvent(repost);
publish(signedEvent);

Creating a Quote Post

import { nip19 } from 'nostr-tools';

// Encode event reference
const nevent = nip19.neventEncode({
  id: originalEvent.id,
  relays: ["wss://relay.example.com"]
});

// Quote post
const quotePost = {
  kind: 1,
  created_at: Math.floor(Date.now() / 1000),
  tags: [
    ["q", originalEvent.id, "wss://relay.example.com"],
    ["p", originalEvent.pubkey]
  ],
  content: `I love this take!\n\nnostr:${nevent}`
};

Client Display

Simple Repost

Clients typically show:

🔄 @username reposted

[Original post content]

Quote Post

Clients show:

@username

My commentary here...

╭──────────────────╮
│ 🔗 @original_author     │
│ Original post content... │
╰──────────────────╯

Counting Reposts

To count reposts of an event:

// Query for kind 6 events referencing your event
const filter = {
  kinds: [6],
  "#e": [yourEventId]
};

// Subscribe and count
const reposts = await queryRelays(filter);
console.log(`Repost count: ${reposts.length}`);

Best Practices

For Users

  • Repost quality content you genuinely endorse
  • Use quote posts when adding meaningful commentary
  • Credit the original author appropriately
  • Consider context - reposts reach your audience

For Developers

  • Display attribution clearly
  • Handle missing originals gracefully
  • Deduplicate reposts in feeds
  • Support both types (kind 6 and quoted kind 1)

Generic Repost (Kind 16)

NIP-18 also defines kind 16 for reposting any event type (not just kind 1):

{
  "kind": 16,
  "tags": [
    ["e", "original_event_id", "relay"],
    ["k", "original_event_kind"]
  ],
  "content": ""
}

The k tag specifies the kind of the original event.


Client Support

All major clients support reposts:

ClientSimple RepostQuote Post
DamusYesYes
PrimalYesYes
AmethystYesYes
SnortYesYes
CoracleYesYes
noStrudelYesYes

Relation to Other NIPs

  • NIP-01 - Base event structure
  • NIP-10 - Reply threading (different from quoting)
  • NIP-25 - Reactions (likes, not reposts)

Common Questions

Repost vs Reply?

  • Repost shares content to your followers
  • Reply responds in the conversation thread

Can I un-repost?

Yes, publish a deletion request (NIP-09) for your kind 6 event. However, some relays may not honor deletions.

Are reposts counted in metrics?

Yes, most clients display repost counts alongside reactions and replies.

What about reposting DMs?

DMs (kind 4) shouldn’t be reposted as they’re encrypted. Clients should prevent reposting private content.


Summary

NIP-18 enables content sharing on Nostr:

  • Kind 6 for simple reposts (boosting)
  • Kind 1 with q tag for quote posts
  • Kind 16 for generic reposts

Reposts help good content spread while properly attributing original creators.


Last updated: January 2026 Official specification: GitHub

Client Support

This NIP is supported by the following clients:

damus primal amethyst snort coracle nostrudel iris nos
View all clients →

Related NIPs

NIP-01 NIP-10 NIP-25
← Browse All NIPs