{"id":"f5bc73a70d7e7ecda643bb147f4978b194fc4e7437bd4c64655676442ee8612b","pubkey":"c45041618951bb6012ac23f5cdf3d740465f2d640be841fd9bb1d0733370cd3c","created_at":1786424239,"kind":30817,"tags":[["d","sip-01"],["title","SIP-01 — Search Index Protocol (kind 39697)"],["alt","Nostr Implementation Possibility: SIP-01 — Search Index Protocol (kind 39697)"],["k","39697","SIP-01"],["client","NostrHub"]],"content":"# SIP-01 — Search Index Protocol (kind 39697)\n\nThis project is the **canonical documentation and exploration site** for\nSIP-01, the Search Index Protocol. The protocol itself defines one custom\nevent kind:\n\n| Schema | Kind | Type | Defined in |\n|--------|------|------|------------|\n| Web Index Observation (SIP-01) | **39697** | addressable | [`public/spec/SIP-01.md`](public/spec/SIP-01.md) |\n\n## Summary\n\nOne addressable event per `(indexer pubkey, normalized URL)` — an indexer's\nsigned statement: *\"I observed this web page at this time, and here is its\npublic metadata.\"*\n\n- `d` = `\"widx:\" + sha256(normalized_url)[0:32]` — deterministic URL identity,\n  identical across all independent indexers (group-by-`d` / count-`pubkey`\n  gives the independent-observation count).\n- `u` = canonical URL, normalized per SIP-01 §7 (www-stripping, tracking-param\n  removal, query-param sorting, trailing-slash removal).\n- `x` = `sha256(title + \"\\n\" + description)` — content-agreement hash.\n- `v` = `\"1\"` — schema version.\n- `content` = `{ title, description?, image? }` JSON.\n- Modularity: optional core tags (`t`, `l`, `published`, `source`) plus a\n  registered extension-tag registry (`type`, `platform`, `category`,\n  `network`, `country`, `mime`) with an `x-` prefix rule for experiments.\n\nAll events carry an `alt` tag with a human-readable description\n(\"Web index observation: …\").\n\n## This site\n\n- **/spec** — the full submission-ready specification (also downloadable as\n  raw markdown from `/spec/SIP-01.md`).\n- **/registry** — the core + extension tag registry and how to extend it.\n- **/query** — query reference (NIP-01 filters, NIP-50 operators, NIP-11\n  capability advertisement, NIP-77 federation).\n- **/audit** — the cross-implementation fact-check / bug-check report.\n- **/explorer** — live kind 39697 explorer with a client-side validator and a\n  URL → `d`-tag calculator implementing SIP-01 §7/§8 byte-compatibly.\n\n## Reference implementations (cross-checked by the audit)\n\n- [0xSearchstr](https://github.com/NostrDanish/0xSearchstr) — search engine + reference client impl\n- [0xPresearchstr](https://github.com/NostrDanish/0xPresearchstr) — search engine (clearnet + tor/i2p)\n- [UNCAGED-ENGINE](https://github.com/NostrDanish/UNCAGED-ENGINE) — engine template / reference impl\n- [Crwalstr](https://github.com/NostrDanish/Crwalstr) — browser crawler (pure SIP-01 publisher)\n- [UNCAGED-Index-Relay](https://github.com/NostrDanish/UNCAGED-Index-Relay) — validating index relay (NIP-50/NIP-77)\n\nThis site only **reads** kind 39697 from public relays (plus a local\nvalidator/calculator). It publishes nothing.","sig":"77e49ebb169fde7128275c1c7b46b3014dcfff7b407046e465d93f965f509459a9a2d14ad2e545f9a2c27a20aa3d32455a4de503722f1c416660a0a98fa7f04f"}