From 7dad42c1cffc0a32fa4eeb43631e12f6bc0091a4 Mon Sep 17 00:00:00 2001
From: Christian Chiarulli <chris.machine@pm.me>
Date: Sat, 29 Mar 2025 15:29:33 -0400
Subject: [PATCH] NIP-C0: Code snippets (#1852)

---
 95.md | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)
 create mode 100644 95.md

diff --git a/95.md b/95.md
new file mode 100644
index 00000000..3dd7f26a
--- /dev/null
+++ b/95.md
@@ -0,0 +1,65 @@
+# NIP-95: Code Snippets
+
+`draft` `optional`
+
+## Abstract
+
+This NIP defines a new event kind for sharing and storing code snippets. Unlike regular text notes (`kind:1`), code snippets have specialized metadata like language, extension, and other code-specific attributes that enhance discoverability, syntax highlighting, and improved user experience.
+
+## Event Kind
+
+This NIP defines `kind:1337` as a code snippet event.
+
+The `.content` field contains the actual code snippet text.
+
+## Optional Tags
+
+- `l` - Programming language name (lowercase). Examples: "javascript", "python", "rust"
+- `name` - Name of the code snippet, commonly a filename. Examples: "hello-world.js", "quick-sort.py"
+- `extension` - File extension (without the dot). Examples: "js", "py", "rs"
+- `description` - Brief description of what the code does
+- `runtime` - Runtime or environment specification (e.g., "node v18.15.0", "python 3.11")
+- `license` - License under which the code is shared (e.g., "MIT", "GPL-3.0", "Apache-2.0")
+- `dep` - Dependency required for the code to run (can be repeated)
+- `repo` - Reference to a repository where this code originates
+
+## Format
+
+```json
+{
+  "id": "<32-bytes lowercase hex-encoded SHA-256 of the the serialized event data>",
+  "pubkey": "<32-bytes lowercase hex-encoded public key of the event creator>",
+  "created_at": <Unix timestamp in seconds>,
+  "kind": 1337,
+  "content": "function helloWorld() {\n  console.log('Hello, Nostr!');\n}\n\nhelloWorld();",
+  "tags": [
+    ["l", "javascript"],
+    ["extension", "js"],
+    ["name", "hello-world.js"],
+    ["description", "A basic JavaScript function that prints 'Hello, Nostr!' to the console"],
+    ["runtime", "node v18.15.0"],
+    ["license", "MIT"],
+    ["repo", "https://github.com/nostr-protocol/nostr"]
+  ],
+  "sig": "<64-bytes signature of the id>"
+}
+```
+
+## Client Behavior
+
+Clients that support this NIP SHOULD:
+
+1. Display code snippets with proper syntax highlighting based on the language.
+2. Allow copying the full code snippet with a single action.
+3. Render the code with appropriate formatting, preserving whitespace and indentation.
+4. Display the language and extension prominently.
+5. Provide "run" functionality for supported languages when possible.
+6. Display the description (if available) as part of the snippet presentation.
+
+Clients MAY provide additional functionality such as:
+
+1. Code editing capabilities
+2. Forking/modifying snippets
+3. Creating executable environments based on the runtime/dependencies
+4. Downloading the snippet as a file using the provided extension
+5. Sharing the snippet with attribution