CEP-24 Server Reviews
--- title: CEP-24 Server Reviews description: Standard server reviews using kind 1111 comments on kind 11316 announcements --- # Server Reviews **Status:** Draft **Author:** @contextvm-org **Type:** Standards Track ## Abstract This CEP standardizes server reviews by using NIP-22 comments (`kind:1111`) as review events attached to ContextVM server announcements (`kind:11316`). By reusing NIP-22 comment semantics, reviews become interoperable across clients and relays without requiring a ContextVM-specific review event kind. ## Motivation ContextVM needs a discovery-friendly, ecosystem-compatible way to publish and retrieve server feedback. Using NIP-22 comments enables: - shared review discovery across clients - threaded discussion and replies - compatibility with existing moderation and anti-spam patterns The target object for reviews is the server announcement identity (`a` coordinate for `kind:11316`), optionally anchored to the current announcement event (`e`) for better UX and context. ## Specification ### Review Event Kind Servers and clients MUST use NIP-22 comments (`kind:1111`) for review events. ### Top-Level Comment on a Server Top-level server reviews SHOULD include both uppercase and lowercase tags as used in NIP-22 ecosystems for broad compatibility. ```json { "kind": 1111, "content": "Great server!", "tags": [ ["A", "11316:<server-pubkey>:", "<relay-hint>"], ["K", "11316"], ["P", "<server-pubkey>", "<relay-hint>"], ["a", "11316:<server-pubkey>:", "<relay-hint>"], ["e", "<current-announcement-event-id>", "<relay-hint>", "<server-pubkey>"], ["k", "11316"], ["p", "<server-pubkey>", "<relay-hint>"] ] } ``` Tag intent: - `A` / `a`: addressable target (`11316:<server-pubkey>:`) - `K` / `k`: target kind context (`11316` for top-level server review) - `P` / `p`: target author context (server pubkey) - optional `e`: explicit anchor to the latest known announcement event for timeline context ### Reply to a Comment Replies MUST reference the parent comment event with lowercase `e`, `k` (set to `1111`), and `p` tags representing the parent comment context, while keeping the uppercase `A`, `K` (set to `11316`), and `P` tags pointed to the root server announcement. ```json { "kind": 1111, "content": "I agree!", "tags": [ ["A", "11316:<server-pubkey>:", "<relay-hint>"], ["K", "11316"], ["P", "<server-pubkey>", "<relay-hint>"], [ "e", "<parent-comment-event-id>", "<relay-hint>", "<parent-author-pubkey>" ], ["k", "1111"], ["p", "<parent-author-pubkey>", "<relay-hint>"] ] } ``` _Note: Dual-tagging of `A` and `a` is only applicable to top-level comments where the root and parent are the same. For replies, the parent is a comment event, so the reply MUST use an `e` tag for the parent reference and an `A` tag for the root announcement._ ### Discovery Filter Clients discovering reviews for a specific server SHOULD query with: ```json { "kinds": [1111], "#K": ["11316"], "#A": ["11316:<server-pubkey>:"] } ``` ## Backward Compatibility This CEP is additive: - no new ContextVM-specific review kind is introduced - clients that already support NIP-22 comments can adopt this targeting convention incrementally - servers without review support continue to operate unchanged ## Reference Implementation A reference implementation for server review UI and data fetching can be found in the [ContextVM site repository](https://github.com/ContextVM/contextvm-site). ## Dependencies - [CEP-6: Public Server Announcements](/spec/ceps/cep-6)Server Reviews
Section titled “Server Reviews”Status: Draft Author: @contextvm-org Type: Standards Track
Abstract
Section titled “Abstract”This CEP standardizes server reviews by using NIP-22 comments (kind:1111) as review events attached to ContextVM server announcements (kind:11316).
By reusing NIP-22 comment semantics, reviews become interoperable across clients and relays without requiring a ContextVM-specific review event kind.
Motivation
Section titled “Motivation”ContextVM needs a discovery-friendly, ecosystem-compatible way to publish and retrieve server feedback.
Using NIP-22 comments enables:
- shared review discovery across clients
- threaded discussion and replies
- compatibility with existing moderation and anti-spam patterns
The target object for reviews is the server announcement identity (a coordinate for kind:11316), optionally anchored to the current announcement event (e) for better UX and context.
Specification
Section titled “Specification”Review Event Kind
Section titled “Review Event Kind”Servers and clients MUST use NIP-22 comments (kind:1111) for review events.
Top-Level Comment on a Server
Section titled “Top-Level Comment on a Server”Top-level server reviews SHOULD include both uppercase and lowercase tags as used in NIP-22 ecosystems for broad compatibility.
{ "kind": 1111, "content": "Great server!", "tags": [ ["A", "11316:<server-pubkey>:", "<relay-hint>"], ["K", "11316"], ["P", "<server-pubkey>", "<relay-hint>"], ["a", "11316:<server-pubkey>:", "<relay-hint>"], ["e", "<current-announcement-event-id>", "<relay-hint>", "<server-pubkey>"], ["k", "11316"], ["p", "<server-pubkey>", "<relay-hint>"] ]}Tag intent:
A/a: addressable target (11316:<server-pubkey>:)K/k: target kind context (11316for top-level server review)P/p: target author context (server pubkey)- optional
e: explicit anchor to the latest known announcement event for timeline context
Reply to a Comment
Section titled “Reply to a Comment”Replies MUST reference the parent comment event with lowercase e, k (set to 1111), and p tags representing the parent comment context, while keeping the uppercase A, K (set to 11316), and P tags pointed to the root server announcement.
{ "kind": 1111, "content": "I agree!", "tags": [ ["A", "11316:<server-pubkey>:", "<relay-hint>"], ["K", "11316"], ["P", "<server-pubkey>", "<relay-hint>"], [ "e", "<parent-comment-event-id>", "<relay-hint>", "<parent-author-pubkey>" ], ["k", "1111"], ["p", "<parent-author-pubkey>", "<relay-hint>"] ]}Note: Dual-tagging of A and a is only applicable to top-level comments where the root and parent are the same. For replies, the parent is a comment event, so the reply MUST use an e tag for the parent reference and an A tag for the root announcement.
Discovery Filter
Section titled “Discovery Filter”Clients discovering reviews for a specific server SHOULD query with:
{ "kinds": [1111], "#K": ["11316"], "#A": ["11316:<server-pubkey>:"]}Backward Compatibility
Section titled “Backward Compatibility”This CEP is additive:
- no new ContextVM-specific review kind is introduced
- clients that already support NIP-22 comments can adopt this targeting convention incrementally
- servers without review support continue to operate unchanged
Reference Implementation
Section titled “Reference Implementation”A reference implementation for server review UI and data fetching can be found in the ContextVM site repository.