From dcc709070ad3a887e3abdbc956e49e87a908ee29 Mon Sep 17 00:00:00 2001 From: Timur Ismagilov Date: Sat, 4 Jul 2026 21:27:33 +0200 Subject: [PATCH] FEP-4772: Representing bookmarks (#876) Discussion thread: https://socialhub.activitypub.rocks/t/fep-4772-representing-bookmarks/8805 Reviewed-on: https://codeberg.org/fediverse/fep/pulls/876 --- fep/4772/bookmark-ui.png | Bin 0 -> 26277 bytes fep/4772/fep-4772.md | 199 +++++++++++++++++++++++++++++++++ fep/4772/quote-bookmark-ui.png | Bin 0 -> 34508 bytes 3 files changed, 199 insertions(+) create mode 100644 fep/4772/bookmark-ui.png create mode 100644 fep/4772/fep-4772.md create mode 100644 fep/4772/quote-bookmark-ui.png diff --git a/fep/4772/bookmark-ui.png b/fep/4772/bookmark-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..8ffbcb0b74fdda1922fbd15a55300d5d97e619f7 GIT binary patch literal 26277 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 literal 0 HcmV?d00001 diff --git a/fep/4772/fep-4772.md b/fep/4772/fep-4772.md new file mode 100644 index 0000000..2507591 --- /dev/null +++ b/fep/4772/fep-4772.md @@ -0,0 +1,199 @@ +--- +slug: "4772" +authors: Timur Ismagilov +status: DRAFT +dateReceived: 2026-07-04 +discussionsTo: https://socialhub.activitypub.rocks/t/fep-4772-representing-bookmarks/8805 +--- +# FEP-4772: Representing bookmarks + +## Summary +In social bookmarking networks, users publish bookmarks, which are annotated links, to the public. This FEP describes the model for such bookmarks and the practices for federating them. + +## Requirements +The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this specification are to be interpreted as described in [RFC-2119]. + +## Bookmarks +A bookmark is an object with the following data: + +* The bookmarked URL. +* The bookmark title. +* Notes or a description of the bookmarked document. +* Any number of tags, and/or folders. +* Any number of copies of the document referenced by the bookmarked URL. + +This definition of a bookmark is not to be confused with bookmarks found in microblogging software, where the word means “private likes”. + +A social bookmarking service allows users to publish such bookmarks. It is sometimes called a (social) bookmark manager. + +### Representation +A bookmark is represented with a `Note` object with the following conventions: + +* `name` is the bookmark title. +* `source` is the source text of the bookmark description. The receiving bookmark manager SHOULD render it to the best of its abilities. The text MAY represent a hypertext document of varying complexity and be in any `mediaType`. +* `content` is an HTML representation of the bookmark intended for consumption by microblogging ActivityPub software. The receiving bookmark manager MAY choose to use this field as a substition for `source` if it does not support its `mediaType`. +* `attachment` MUST contain one `Link` object with its `href` set to the bookmarked URL. +* `attachment` MAY contain any number of `DocumentCopy` objects. +* `tag` MAY contain any number of `Hashtag` objects. +* `tag` MAY contain any number of `BookmarkFolder` objects. +* `url` is the URL of a human-readable representation of the bookmark. It MUST be resolvable and MUST NOT be the bookmarked URL. + +To determine if a `Note` object is a bookmark `Note`, the following must be true: + +* `name` is not empty. +* There is exactly one `Link` in `attachment`. + +### Threadiverse compatibility +For compatibility with Lemmy, kbin, Azorius, and other similar projects, implementations MAY interpret incoming `Page` objects formatted per the aforementioned conventions as bookmarks. + +### `BookmarkFolder` +There are two main approaches to organizing bookmarks: tagging, and the hierarchical approach with folders. Tags are a well-known entity on Fediverse already, the existing conventions are reused for them. + +Some bookmark managers have both tags, and folders, distinct from each other. Folders are `BookmarkFolder` objects. It has fields `href`, and `name`. + +In case a bookmark manager has folders only, it MAY serialize them as tags instead, for wider compatibility. + +If a receiving bookmark manager has no concept of a folder and receives a bookmark in a folder, it MAY interpret it as a tag. + +### `DocumentCopy` +Given the ephemeral nature of the World Wide Web, many bookmarking services offer their users the ability to make offline copies of bookmarked documents. This is often called archiving or making snapshots. To publish such an archive, include a `DocumentCopy` object in `Note`'s `attachment`: + +* `id` +* `published` is when this copy was published. +* `summary` is a human-readable, likely human-written, description of this archive. Possibly empty. +* `original` is a `Document`, referenced or inline, possibly anonymous. The original document URL MAY be different from the bookmarked URL but it usually is equal to it. +* `copy` is a `Document`, referenced or inline, possibly anonymous. It is implied that the receiver has access to this document. + +To publish new document copies for a bookmark, issue an `Update{Note}` activity with its `attachment` appended with a new `DocumentCopy`. + +To delete a document copy, issue a `Delete{DocumentCopy}` activity. Note that there is no way to ensure proper deletion across the network. Users are advised to be cautious of document copies they publish. Bookmark managers MAY replace the document copy with a `Tombstone`. + +## Quote bookmarks +Some bookmark managers have the notion of “quote bookmarks”, sometimes called “reposts” or “remarks”. A quote bookmark is a statement on some other regular bookmark, perhaps adding some notes of value or providing additional context. It has a set of tags, folders, and document copies distinct from the quoted bookmark. A quote bookmark MUST NOT have a `Link` attachment, and MUST NOT have a `name`. + +Note that a quote bookmark of a quote bookmark is not possible. + +### Representation + +A quote post, as defined by [FEP-044f], quoting a bookmark Note as defined by this FEP SHOULD be interpreted as a quote bookmark. + +An `Announce` of a bookmark `Note` SHOULD be interpreted as a quote bookmark with an empty quote text, no tags, no folders, no document copies. It is to be interpreted as a general endorsement of the bookmark across the network. + +Implementations SHOULD send Quote Post representations of quote bookmarks and SHOULD accept both representations. + +## UI considerations +*This section is non-normative.* + +A bookmark could look like this: + +![A bookmark, resembling a microblog post but with a title and a link attached to the top.](./bookmark-ui.png) + +A quote bookmark could look like this: + +![A quote bookmark, resembling a quote post, but with a bookmark being quoted.](./quote-bookmark-ui.png) + +## Implementations +*This section is non-normative.* + +* Betula sends bookmarks with `text/mycomarkup` source text and accepts bookmarks with `text/mycomarkup`, and `text/plain` source text. Betula sends, and accepts quote bookmarks represented as `Announce{Note}` activities. +* Ties sends bookmarks with empty `text/plain` source text. +* Omnom sends bookmarks with `text/plain` source text. +* Postmarks sends bookmarks with `text/plain` source text. + +## Example +*This section is non-normative.* + +```json +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + { + "Hashtag": "https://www.w3.org/ns/activitystreams#Hashtag", + "BookmarkFolder": "https://w3id.org/fep/4772#BookmarkFolder", + "DocumentCopy": "https://w3id.org/fep/4772#DocumentCopy" + } + ], + "actor": "https://alice.example/@alice", + "id": "https://alice.example/42?create", + "object": { + "actor": "https://alice.example/@alice", + "attributedTo": "https://alice.example/@alice", + "content": "(Irrelevant for this example.)", + "id": "https://alice.example/42", + "source": { + "content": "**Best** link in the world.", + "mediaType": "text/mycomarkup" + }, + "name": "Example site", + "attachment": [ + { + "type": "Link", + "href": "https://example.org" + }, + { + "type": "DocumentCopy", + "published": "2025-02-29T19:47:02Z", + "summary": "Copy looks alright!", + "original": { + "type": "Document", + "url": "https://example.org" + }, + "copy": { + "type": "Document", + "url": "https://alice.example/docs/example-org-single-file.html" + } + }, + { + "type": "DocumentCopy", + "published": "2026-02-29T19:47:02Z", + "summary": "This one is broken somewhat.", + "original": { + "type": "Document", + "url": "https://example.org" + }, + "copy": { + "type": "Document", + "url": "https://alice.example/docs/example-org-broken.html" + } + } + ], + "published": "2024-01-31T19:47:02Z", + "tag": [ + { + "href": "https://alice.example/tag/site", + "name": "#site", + "type": "Hashtag" + }, + { + "href": "https://alice.example/tag/extravagant", + "name": "#extravagant", + "type": "Hashtag" + }, + { + "href": "https://alice.example/folder/selected_bookmarks", + "name": "selected_bookmarks", + "type": "BookmarkFolder" + } + ], + "to": [ + "https://www.w3.org/ns/activitystreams#Public", + "https://alice.example/followers" + ], + "type": "Note" + }, + "type": "Create" +} +``` + +## References + +* [ActivityPub] Christine Lemmer-Webber, Jessica Tallon, Erin Shepherd, Amy Guy, Evan Prodromou, [AcitvityPub](https://www.w3.org/TR/activitypub/) +* [RFC-2119] S. Bradner, [Key words for use in RFCs to Indicate Requirement Levels](https://tools.ietf.org/html/rfc2119.html) +* [Activity Vocabulary] James M Snell, Evan Prodromou, [Activity Vocabulary](https://www.w3.org/TR/activitystreams-vocabulary/) +* [FEP-044f] Claire, [FEP-044f: Consent-respecting quote posts](https://codeberg.org/fediverse/fep/src/branch/main/fep/044f/fep-044f.md) + +## Copyright + +CC0 1.0 Universal (CC0 1.0) Public Domain Dedication + +To the extent possible under law, the authors of this Fediverse Enhancement Proposal have waived all copyright and related or neighboring rights to this work. diff --git a/fep/4772/quote-bookmark-ui.png b/fep/4772/quote-bookmark-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..276cfb59a98634430549e8cec7871ed953c2b405 GIT binary patch literal 34508 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