Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NIP-62: Curated Publications #1600

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open

Conversation

limina1
Copy link

@limina1 limina1 commented Nov 22, 2024

This NIP defines a specification for organizing nostr events into collections - ordered, optionally-hierarchical structures like books, journals, or documentation.

Currently, there's no standardized way to create versioned collections of content. The closest option is to use lists, but this extends that idea beyond a strictly linear hierarchy.

Introducing two new event kinds:

kind:30040 - Collection Index

  • Acts as a table of contents
  • Contains metadata about the collection
  • Lists events in display order

kind:30041 - Collection Section

  • Contains content
  • links to other content via wikilinks

@SilberWitch

@SilberWitch
Copy link
Contributor

@vitorpamplona
Copy link
Collaborator

Looks good! I still think "Collections" is too generic of a name though.

Also, the use of e tags on 30040 means that you want specific versions of kind 30041s. Since they are replaceable and many relays delete old versions, a client might not find the version you want at the collection level.

You can use a tags to pick the latest version of each 30041 or keep it as is and require collection owners to constantly update their index after each change to one of the sections.

@SilberWitch
Copy link
Contributor

That's true. We were working on a tags, a few weeks back, but it never made it into the spec.

@SilberWitch
Copy link
Contributor

Why did you remove the kind entry @limina1 ? Thought that was correct.

@SilberWitch
Copy link
Contributor

Just saw a typo in the second example.

["wikilink", "fables"

should be

["wikilink", "fable"

@staab
Copy link
Member

staab commented Nov 22, 2024

Coracle currently supports collections as tagged NIP 32 labels. Just FYI, I don't care strongly about this one.

@SilberWitch
Copy link
Contributor

Thanks.

@SilberWitch
Copy link
Contributor

Coracle currently supports collections as tagged NIP 32 labels. Just FYI, I don't care strongly about this one.

E-Books constructed out of labels, or do you mean, that those labels are also called "collections"?

["author", "Aesop"],
["i", "isbn:9780765382030"],
["t", "fables", "classical", "literature"],
["published_on", "2003-05-03"],
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NIP-23 uses "published_at" for the timestamp the article was first published, and uses UNIX timestamp format-it might make sense to re-use that tag here, instead of defining a new one with a new format?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I originally had that, but UNIX timestamps only go back to 1970, and we are publishing old books.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right, that's true. Having to use negative timestamps for old books would be bad.

In that case, it would make sense to document the date format explicitly.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I originally specified ISO 8601.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Otherwise, European and American dates would differ.

Copy link
Contributor

@laanwj laanwj Nov 23, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Exactly. So just YYYY-MM-DD? i doubt this needs any of the extended formats, timezone suffixes, year-week format etc from ISO-8601.
(though for a book, "year of publication" is generally all the information available, also allowing like YYYY or YYYY-MM might make sense, though it complicates sorting)

@staab
Copy link
Member

staab commented Nov 22, 2024

More the latter. It's a mechanism for content curation, which is what I usually think of when I hear the word "collection". This PR seems more like an "ebook" kind of thing rather than a collection. The NIP 32 approach probably wouldn't be appropriate, but its benefit is that the contents of the collection can be dynamic based on who you accept events from. But that's all probably irrelevant to your use case here.

62.md Outdated
["title", "Aesop's Fables"],
["author", "Aesop"],
["i", "isbn:9780765382030"],
["t", "fables", "classical", "literature"],
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

["t", "fables"],
["t", "classical"],
["t", "literature"],

might be more useful, as then one could query for either of the tags. It also matches the current definition of the t tag in README.md.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, you're right, just checked and it's like that in my last Habla-generated article.

@SilberWitch
Copy link
Contributor

Looks good! I still think "Collections" is too generic of a name though.

We thought about "Library", since they're the core events for the Alexandria client, but we want to use them to publish the Bible and that literally translates to "library", so it's sort of confusing.

@SilberWitch
Copy link
Contributor

This PR seems more like an "ebook" kind of thing rather than a collection.

We've been resisting naming it "ebook" because it could be used for something like a project plan, anthology, research paper, academic journal, user manual, etc. We were calling it "modular article" and then "Nostr Knowledge Base", so we keep changing the name.

@SilberWitch
Copy link
Contributor

Maybe we should call it "Documents". If you export a 30040, together with its 30041, you get a document file, in whichever format you want: Asciidoc, ePUB, LaTeX, Markdown, PDF, etc.

@vitorpamplona
Copy link
Collaborator

Given the rest of the tags, 30040 could be called a Publication. Then this NIP's name could be simply Publications or Editorial Publications and 30041 could be called Content

idk... just ideas.

@SilberWitch
Copy link
Contributor

That's brilliant. Actually. We keep talking about how we're using this to publish stuff, but we couldn't think of what name to give the stuff, but we could just give the name of the action we're doing.

What do you think, @limina1 @buttercat1791 ?

@buttercat1791
Copy link

Publication makes me think of magazines. Not a bad implication. Perhaps something like Curated Collection or Curated Publication could also work. Curated to emphasize that it can be comprised of Content from a number of different sources.

@SilberWitch
Copy link
Contributor

Curated publication sounds pretty good. Sounds fundamentally different from NIP-51 "curation sets" lists. Makes it more clear that one document comprised of sections is the result, rather than just a list of events.

@limina1
Copy link
Author

limina1 commented Nov 23, 2024

I like it. Curated publications as a structure itself requiring publication metadata 30040 and publication content 30041.

@SilberWitch
Copy link
Contributor

Probably also have to change the corresponding entries in the ReadMe.md, under "Event Kinds" and "Tags".

@nusapuksic
Copy link

nusapuksic commented Nov 23, 2024

Do you have a way to mark the index as draft? I would like to distinguish between drafts and final versions, since it might take time, multiple people and iterations to get the end result together and then the clients can filter by status.

@SilberWitch
Copy link
Contributor

We don't have that in the client, yet, we've just been using browser cache, but that would make this more consistent with other longform. 🤔

30042 for draft, or something.

@buttercat1791
Copy link

If 30040/30041 are final versions, then 30042/30043 could be drafts.

@vitorpamplona
Copy link
Collaborator

Keep in mind there is also a private drafts proposal on #1124

In that way, people can't see the drafts being made, which to me is a constant complaint on many draft proposals that people can just integrate with their clients and see before they are ready.

@buttercat1791
Copy link

In that case we can subsume drafts for Curated Publications into the generic kind 31234 draft event.

In any case, 30040/30041 events are by nature replaceable, so even if they're not marked as "draft" they are still editable to any client that supports edits.

@vitorpamplona vitorpamplona changed the title NIP-62: Collections NIP-62: Publications Nov 23, 2024
@Darecjo
Copy link

Darecjo commented Nov 23, 2024

Does NIP-51 Curation sets serve such purpose or not ? It seems better to use those rather than keep expanding use cases. If there is no books events or journal events, whats the purpose of using such proposal?

@limina1 limina1 changed the title NIP-62: Publications NIP-62: Curated Collections Nov 23, 2024
@limina1 limina1 changed the title NIP-62: Curated Collections NIP-62: Curated Publications Nov 23, 2024
@nusapuksic
Copy link

Private drafts don't quite work for collaborative work of mutiple authors. But this could potentially be handled by pre-publishing to a private relay the authors share for such a purpose, before sharing with a wider audience.

@buttercat1791
Copy link

Does NIP-51 Curation sets serve such purpose or not ? It seems better to use those rather than keep expanding use cases. If there is no books events or journal events, whats the purpose of using such proposal?

Per NIP-51:

When new items are added to an existing list, clients SHOULD append them to the end of the list, so they are stored in chronological order.

NIP-62 does not prescribe an order to events in the list, instead letting the npub creating the Curated Publication determine the order. Additionally, NIP-62 is intended for use in aggregating several events into a single, coherent, readable presentation, such as a Twitter-style thread consisting of several Tweets or a magazine article consisting of several sections.

This is different from the curation sets described by NIP-51, which describes them as:

groups of articles picked by users as interesting and/or belonging to the same category

NIP-62 goes beyond just a collection, it allows the user creating the Curated Publication to define a structure to the publication. 30040 events can contain other 30040 events, leading naturally to an ordered, hierarchical tree structure, as opposed to a flat list or collection.

@SilberWitch
Copy link
Contributor

If there is no books events or journal events, whats the purpose of using such proposal?

I think there might be some confusion. 30040s are the books and journals. The result is a single publication, not a list of publications.
30041s are paragraphs, chapters, or pages in the publication.

I explain it a bit more, here.
https://wikistr.com/gc-alexandria*dd664d5e4016433a8cd69f005ae1480804351789b59de5af06276de65633d319

@Darecjo
Copy link

Darecjo commented Nov 23, 2024

If there is no books events or journal events, whats the purpose of using such proposal?

I think there might be some confusion. 30040s are the books and journals. The result is a single publication, not a list of publications. 30041s are paragraphs, chapters, or pages in the publication.

I explain it a bit more, here. https://wikistr.com/gc-alexandria*dd664d5e4016433a8cd69f005ae1480804351789b59de5af06276de65633d319

I still think this falls under the lists nip rather than defining a new one regardless of the used definition since there is listing/curating/organizing.

@Darecjo
Copy link

Darecjo commented Nov 23, 2024

Does NIP-51 Curation sets serve such purpose or not ? It seems better to use those rather than keep expanding use cases. If there is no books events or journal events, whats the purpose of using such proposal?

Per NIP-51:

When new items are added to an existing list, clients SHOULD append them to the end of the list, so they are stored in chronological order.

NIP-62 does not prescribe an order to events in the list, instead letting the npub creating the Curated Publication determine the order. Additionally, NIP-62 is intended for use in aggregating several events into a single, coherent, readable presentation, such as a Twitter-style thread consisting of several Tweets or a magazine article consisting of several sections.

This is different from the curation sets described by NIP-51, which describes them as:

groups of articles picked by users as interesting and/or belonging to the same category

NIP-62 goes beyond just a collection, it allows the user creating the Curated Publication to define a structure to the publication. 30040 events can contain other 30040 events, leading naturally to an ordered, hierarchical tree structure, as opposed to a flat list or collection.

As you are saying collection you are referring to a group of events of a specific or any type merging this with the lists nip would be more suitable imo, even tho i’m not sure of the exact utility.

@buttercat1791
Copy link

Kinds 30040 and 30041 specified in this NIP are not for creating lists, they are for creating structured, hierarchical publications. Different use case. I don't think there's sufficient overlap with the lists NIP to warrant merging them.

@SilberWitch
Copy link
Contributor

I still think this falls under the lists nip rather than defining a new one regardless of the used definition since there is listing/curating/organizing.

So, you want to:
change what a list is,
change how a list is built and displayed,
move the 30040 to this new NIP-51,
and then have 30041 here alone?

So, separate the book cover, publishing information and table of contents, from the pages of the book?

Or do you want to leave the content undefined?

@limina1
Copy link
Author

limina1 commented Nov 23, 2024

Lists are a general structure, where there isn't a specific kind attached to it.

If its important enough, I see a possibility in expanding the specification for lists; where lists are composable, like curated publications which require two kinds. However, NIP-66 is a specific instantiation of that structure, where a client feed is composed out of 30040s just as microblogging clients are composed out of kind1s.

It could have a reference within nip-51 as hierarchical, composable lists. Throwing out some ideas

@SilberWitch
Copy link
Contributor

Nobody reading a magazine article or book thinks of it as a list, and someone wanting to build an eReader client isn't going to go to the list NIP. I mean, you could say wiki pages are just a special kind of article and articles are just long microblogs and comments are just microblogs in reply, so everything is just a Kind 01 note and all of the NIPs should be collapsed down to one.

But the NIPs are clearly domain and use case centered, so that developers don't all have to watch the same NIP, so that every tiny change to one part of the spec results in 30 people throwing a fit. Someone wanting to build a book client, will want a NIP about books.

Done discussing it. Moving on. This NIP is mostly a formality and a chance to make slight corrections, as the event is already being handled or produced by three clients, and will soon be added to more.

Anyone have any constructive feedback?

@Darecjo
Copy link

Darecjo commented Nov 24, 2024

I have nothing to add. I just proposed referencing it within the nip-51 or expanding the specification however if you are saying it is implemented by 3 clients and already in use then you should go for it. I just strongly suggest using a unique UUID rather than a title-generated d-tags (as far as i’m seeing), because it can cause editing problems or conflicts between existed copies since relays may fail to publish an event in one try.

@SilberWitch
Copy link
Contributor

We've refrained from specifying the content for d-tags, as clients have different methods. It might need to be standardized somewhere, for each use case, but it's a longer and more-difficult conversation.

@SilberWitch
Copy link
Contributor

The same d-tag issue arises also for longform and wikis, but it's slightly out of scope.

@Darecjo
Copy link

Darecjo commented Nov 24, 2024

I think it is standardized somewhere but not sure where.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants