Synchronizing bookmarks and subscribtions over Gemini protocol
Revision 1 - Created on 2020-12-15
Introduction
The idea behind this proposal is to design a protocol over Gemini allowing Gemini clients to sync bookmarks and gemfeeds or atom subscriptions. It also tries to be easy to implement with a cgi or a server library, and to be usable with a Gemini client that does not support it as a fallback.
Summary
The idea is to serve a list of links in text/gemini format at a given endpoint, and to support a few paths with query strings to add/remove links.
Details
The server
- The server MUST return the link list with status 20 and mimetype text/gemini when the client request the main endpoint
- The server SHOULD accept requests at <main_endpoint>/add?<link_line> and add the link line from the query string to the file
- The server SHOULD accept requests at <main_endpoint>/del?<link_line> and delete the link line from the query string from the file
- The server MAY return a 10 status when requested at <main_endpoint>/add or <main_endpoint>/del
- The server SHOULD protect add and del endpoints and ask an authorized user certificate for those
- The server MAY do the same for the main endpoint
- The server MAY serve <main_endpoint>/edit with the link list and links to add and del endpoints, to ease using the service from a non-compatible client.
The client
- The client use the endpoints to get, add or del links
- The client MUST ignore all lines which are not link lines from the answer and consider them comments
- The client SHOULD use the link names as bookmark names when synchronizing bookmarks
- The client SHOULD let the user give an endpoint for bookmarks, and an other one for subscriptions if the client supports those
- The client MUST use a del operation followed by an add operation to replace or rename a link
- The client SHOULD inform the user about any error returned by the server
Shortcomings and notes
- Clients will have to percent-encode the link lines to fit them in the query string, and the links being already percent-encoded it may result in quite ugly requests
- This system does not allow synchronizing read status for feed entries
- No grouping or tagging is supported as-is
- The main purpose is to allow a user to sync its bookmarks across several clients/computers, but this specification could also be used to share bookmarks across several users.
- The specification does not say what the link list is. It’s up to the client to allow the user to configure an endpoint as a list of bookmarks, or feeds, or whatever. In the same way the feed list could contain atom feeds, rss feeds, gemfeeds, or all of this depending of client and user choices.