NIP-C6: Capability-URL References#2327
Conversation
Tag schema and rendering convention for Nostr events that reference capability-encrypted artifacts hosted off-Nostr — where the read key lives in the URL fragment, the host is read-blind, and the event author is referencing or sharing the artifact rather than embedding its body. Scheme-agnostic: any artifact protocol whose URLs follow the `<canonical>#<read_key>` shape can plug in via an opaque scheme-id. No central registry; first-claim by precedent. Distinguishes "reference" (k tag absent — citing the artifact) from "share" (k tag present — handing out bearer access) on the same schema. Public-feed (kind:1) primary form; NIP-17 gift-wrap secondary. Inline TypeScript reference implementation. Backward-compatible: non-aware clients render as ordinary text notes; aware clients enhance with metadata-aware UI.
|
I feel like this is asking too much from the sender, to have to add all these tags. If the URL already identifies itself as a capability-URL why not just rely on just that? I don't see the need for extra tags. |
|
You were right — withdrawing. Empirical test: pasted a capability URL into Nostr, got no preview, dug into why. The actual coordination layer is OpenGraph metadata on the artifact path itself — works on every platform that does link-card rendering, no per-event tag schema needed. So the host now serves a content-free OG card (the host can't decrypt anyway — fragment never travels HTTP per RFC 3986 §3.5), and Nostr clients render the link the same way they render any other URL with OG. Reference-vs-share is already encoded in the URL: fragment present = share (you handed out the read key), fragment absent = reference (you're citing without granting access). No The whole tag schema was solving a coordination problem that OpenGraph already solves. Thanks for the push. |
PR nostr-protocol/nips#2327 was withdrawn 2026-04-28 after fiatjaf review pushback ("URL self-identifies, no need for tags") and the realization that standard OpenGraph metadata on the artifact path is the universal substrate that gives capability URLs first-class rendering on every platform — Nostr included — without any per-event tag schema. - §5.4 rewritten as informational "Sharing on Nostr" — paste the URL into kind:1 content; aware clients render via standard OpenGraph unfurl. The single normative rule retained is fragment-hygiene: the read key MUST NOT appear in any indexable transport-layer tag - §9.6 (NIP-C6 bridge conformance) removed — superseded by §5.4 - §11.4 (tag schemes for capability URLs) removed — no longer relevant - §10.1 reference updated to "indexable transport-layer tags (e.g., Nostr event tags)" instead of NIP-C6-specific - MANIFESTO.md "federation seam" sentence reframed: the capability URL itself is the federation seam (its shape is a contract between hosts and clients), not a Nostr-specific NIP CHANGELOG bumped to 0.1.1. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PR nostr-protocol/nips#2327 withdrawn 2026-04-28 after fiatjaf review ("URL self-identifies, no need for tags") and the empirical realization that OpenGraph metadata on /w/{handle} is the universal substrate for capability-URL rendering. Reference-vs-share is encoded in URL shape itself (fragment present = share, absent = reference), making the tag schema redundant. Whole NIP was solving a coordination problem OG already solves. - about page: NIP-C6 paragraph removed (it overclaimed even before withdrawal — "rich inline rendering" was aspirational; OG cards are the actual mechanism) - STATE.md: NIP-C6 row updated to reflect withdrawal; "next steps" swap-link line replaced with the OG-card shipped fact - ADR-025: motivation language generalized (formal artifact remains reusable for any capability-URL standardization successor) - in-repo NIP spec (what/docs/spec/nip_capability_url_v1.md): banner marked withdrawn, kept as historical record - scripts/submit_nip_c6.sh: deleted (was tied to the specific PR; reusable submission process lives in how/skills/skill_nip_submission.md) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Follow-up on the withdrawal — opened a successor at #2329 (NIP-G6). Both of your objections from this thread are baked in:
The question NIP-C6 was answering — how do clients know an event references a capability URL? — dissolves once you accept the URL self-identifies. The remaining question is: given a Nostr client encounters one of these URLs, what's the best rendering it can do? G6 specs that: fetch the envelope, decrypt client-side with the URL fragment, render plaintext inline in feed in lieu of the standard OG card. Happy to take feedback at #2329 (or here, if it's about the C6 → G6 transition specifically). |
NIP-C6: Capability-URL References
Adds a tag schema and rendering convention for Nostr events that reference capability-encrypted artifacts hosted off-Nostr — where the read key lives in the URL fragment, the host is read-blind, and the event author is referencing or sharing the artifact rather than embedding its body.
Why
Capability URLs (e.g.
https://example.com/cap/{id}#{read_key}) are a real privacy primitive used by several systems. Pasted naked into a Nostr event, they render as plain text. NIP-aware clients can render them as first-class objects: encryption badge, expiry hint, and — most importantly — distinguish citation (ctag, nok) from access-grant (c+k).The schema is scheme-agnostic. Any artifact protocol whose URLs follow the
<canonical>#<read_key>shape can plug in via an opaquescheme-id. No central registry; first-claim by precedent.Backward compatibility
Uses
kind:1text notes with additive tags. Non-aware clients render exactly as they do today (the URL appears as a clickable link incontent). Aware clients see thectag, dispatch byscheme-id, and apply enhanced rendering. Aware clients MUST NOT hide events whosescheme-idthey don't recognize.Reference vs. share
Two semantics on the same schema:
ctag,kabsent): "I'm talking about this artifact." Doesn't broadcast bearer access.ctag +ktag): "I'm handing out read access."ktag carries the read key; treat as bearer capability.The distinction matters because pasting a URL+fragment into a public Nostr event leaks the read key to anyone who reads the post. The
c-only form gives authors a way to cite an artifact without granting access.NIP-17 DM context
The same schema serves as the inner sealed event of a NIP-17 gift-wrap.
ktag MAY be present in DM context since the transport is end-to-end encrypted to the recipient.Reference implementation
Inline TypeScript template builder in the spec; produces an unsigned event template ready for any Nostr signer (NIP-07, raw nsec, etc.).
Number choice
Picked
C6after checking that no PR (open, closed, or merged) currently claims it. Decimal alternatives in the 90s and 100s are heavily contested (3+ open PRs each). Happy to renumber per editor preference.Open questions
kind:1with additive tags (current proposal) or a new dedicated kind. Argument forkind:1: backward compat + max reach + this is fundamentally a social-graph artifact. Argument for new kind: cleaner semantics. Open to discussion.scheme-idregistration mechanism (probably not — open-ended is fine, IANA-shaped registries are heavy).