Files
boris/public/md/NIP-85.md
Gigi c0638851c6 docs: simplify NIP-85 to match NIP-84 style and length
- Remove verbose rationale section
- Remove excessive querying examples
- Remove privacy considerations (obvious)
- Remove implementation notes fluff
- Remove references section
- Keep only essential: format, tags, content, examples
- Match NIP-84's concise, to-the-point style

From 190 lines down to ~75 lines - much more readable
2025-10-19 10:54:31 +02:00

2.3 KiB

NIP-85

Reading Progress

draft optional

This NIP defines kind 39802, a parameterized replaceable event for tracking reading progress across articles and web content.

Table of Contents

Format

Reading progress events use NIP-33 parameterized replaceable semantics. The d tag serves as the unique identifier per author and target content.

Tags

Events SHOULD tag the source of the reading progress, whether nostr-native or not. a tags should be used for nostr events and r tags for URLs.

When tagging a URL, clients generating these events SHOULD do a best effort of cleaning the URL from trackers or obvious non-useful information from the query string.

  • d (required): Unique identifier for the target content
    • For Nostr articles: 30023:<pubkey>:<identifier> (matching the article's coordinate)
    • For external URLs: url:<base64url-encoded-url>
  • a (optional but recommended for Nostr articles): Article coordinate 30023:<pubkey>:<identifier>
  • r (optional but recommended for URLs): Raw URL of the external content

Content

The content is a JSON object with the following fields:

  • progress (required): Number between 0 and 1 representing reading progress (0 = not started, 1 = completed)
  • loc (optional): Number representing a location marker (e.g., pixel scroll position, page number, etc.)
  • ts (optional): Unix timestamp (seconds) when the progress was recorded
  • ver (optional): Schema version string

The latest event by created_at per (pubkey, d) pair is authoritative (NIP-33 semantics).

Clients SHOULD implement rate limiting to avoid excessive relay traffic (debounce writes, only save significant changes).

Examples

Nostr Article

{
  "kind": 39802,
  "pubkey": "<user-pubkey>",
  "created_at": 1734635012,
  "content": "{\"progress\":0.66,\"loc\":1432,\"ts\":1734635012,\"ver\":\"1\"}",
  "tags": [
    ["d", "30023:<author-pubkey>:<article-identifier>"],
    ["a", "30023:<author-pubkey>:<article-identifier>"]
  ]
}

External URL

{
  "kind": 39802,
  "pubkey": "<user-pubkey>",
  "created_at": 1734635999,
  "content": "{\"progress\":1,\"ts\":1734635999,\"ver\":\"1\"}",
  "tags": [
    ["d", "url:aHR0cHM6Ly9leGFtcGxlLmNvbS9wb3N0"],
    ["r", "https://example.com/post"]
  ]
}