2.4 KiB
NIP-63
Build Your Own Adventure
draft
optional
This NIP introduces kind:296
and kind:297
as text-based notes designed to create interactive stories. These notes include options for navigating to subsequent notes, allowing readers to continue exploring the story. Kind:296
serves as starting events for the reader, while kind:297
represents individual scenes within the narrative.
The idea is to emulate "choose your own adventure" books, where each reader's journey through the story is unique.
Scene events MAY include an optional title
tag and multiple option
tags that point to the next possible scenes.
Clients SHOULD render the options in a way that allows users to select and seamlessly navigate to the corresponding posts.
Example for kind:296 (Prologue)
Prologue events are entry points in the story.
They SHOULD contain title
, summary
and image
to help clients render a preview of the story.
{
"kind": 296,
"content": "<the beginning of the story>",
"tags": [
["title", "<short title for the prologue>"],
["summary", "<summary for preview>"],
["image", "<image url for preview>"],
["option", "<description>", "<event_id>", "<relay_hint>"],
["option", "<description>", "<event_id>", "<relay_hint>"],
// ...
]
}
Example for kind:297 (Scene)
Scenes describe a given point in a story with potential options.
{
"kind": 297,
"content": "<description of the scene>",
"tags": [
["title", "<short title for this scene>"],
["option", "<description>", "<event_id>", "<relay_hint>"],
["option", "<description>", "<event_id>", "<relay_hint>"],
// ...
]
}
The story concludes when no option
tags are present.
The .content
field SHOULD follow the same formatting rules as kind:1
.
Reading State
Kind 30296
stores the latest state of the story.
The d
tag of the replaceable event MUST match the root event's id.
The e
tag points to the latest scene the user has read.
{
"kind": 30296,
"tags": [
["d", "<root_event_id>"],
// cached to simplify preview purposes
["title", "<root_event_title>"],
["summary", "<root_event_summary>"],
["image", "<image url for preview>"],
// root with relay hint
["E", "<root_event_id>", "<relay_hint>"],
// current scene with relay hint
["e", "<event_id>", "<relay_hint>"],
// reading status
["status", "<new|reading|done>"]
]
}