Unadorned Gemtext instead of syndication formats

Recently on the mailing list and in #gemini we've been talking about
syndication, as in RSS / Atom. I want to begin by summarizing some of
our thoughts.

# Existing formats

RSS and Atom are well-supported formats. They are XML, but you can
probably import a parser / generator rather than having to write one
yourself.

JSON Feed is a well-supported format, and is regarded as simpler than
RSS / Atom. Even if you had to write your own parser, you would be able
to build off a JSON parser because those are available for basically
every language. They are also often simpler to build on than an XML
parser.

RSS, Atom, and JSON Feed publish not just Gemini, but other protocols.
They are commonly served over not just Gemini, but other protocols. And
existing feed readers generally expect feeds to be in one of these
formats. So if you want your site to be syndicated in the existing
internet feed reader ecosystem, using one of these formats is the price
of entry.

CAPCOM expects Atom, therefore Atom became a common way to publish
Gemini blogs. This works, and does not need to change unless an
alternative would be markedly better.

# Making syndication easier

However, some of us are concerned with the complexity of creating a feed
alongside creating Gemini content. If one of our goals is to make Gemini
content easy to publish, making it easy to syndicate is an attractive
goal too. And it is jarring to go from writing Gemtext, which is
remarkably simple and straightforward, to writing Atom XML, or to
finding a static site generator tool that will do it for you. This feels
like a cost. It might remind us of the bloat on the web we are trying to
do without. Or it might be a barrier to entry for users who would be
confident publishing Gemtext, but not confident publishing Atom, or for
that matter, a web page.

To address the fact that creating a feed is a few steps more difficult
than creating a Gemtext page, one idea is to make a new feed format
which is written in Gemtext and conforms to a pattern. While it's true
this would be easy to write, there is no existing parser ecosystem for
it, so it would be effectively Gemini-only. If you wanted to syndicate
to the broader internet, you would still need to publish something like
Atom. Furthermore, although parsing Gemtext is not as difficult as Atom
or JSON Feed if you had to start from plain text and work your way up,
existing formats have off-the-shelf parsers in many languages, so you
are not starting from the bottom. But with a brand new format based on
Gemtext, you would have to.

So we are not all sold on the idea of a Gemtext-based feed format.
However, one positive characteristic such a format is that it would be
browsable as a regular Gemtext page. And that got us thinking: 

If regular Gemtext pages are easy to parse, can we just treat any
Gemtext page as a feed? In fact, yes we can. You can poll plain Gemtext
pages, not feed format files, and detect the links on the page that are
new. And we don't need a Gemtext feed format pattern, because the
pattern of link lines beginning with "=>" is enough.

# Subscribing to any Gemtext page

To get a feel for that, I did a proof of concept that you can try out:

=> https://github.com/kconner/gemini-subscription-cli Proof of Concept

This repository contains a Makefile and a shell script. The script takes
a list of Gemini URLs to fetch, which are expected to be Gemtext pages.
It filters them down to just the link lines. It compares the set of link
lines with a previously-fetched set of link lines, and it identifies and
emits those that are new. It saves the new total set as the next run's
previous set for comparison.

If you want, you can clone the repo and then try it out.

Subscribe to some pages:

$ echo 'gemini://gemini.circumlunar.space:1965/servers/' >> subscribed-urls
$ echo 'gemini://tilde.team/~easeout/glog/' >> subscribed-urls

Fetch all the links, since we don't have a prior set to compare to:

$ make
fetched: gemini://gemini.circumlunar.space:1965/servers/                   

fetched: gemini://tilde.team/~easeout/glog/                                

wrote: new-links.gmi                                                       

=> gemini://gus.guru/known-hosts Gemini hosts known to GUS                 

=> gemini://gemini.conman.org                                              

=> gemini://zaibatsu.circumlunar.space                                     

=> gemini://carcosa.net                                                    

?

Later, update again and identify what's new. (To test right away, you
can delete a few lines from cached-links.gmi.)

$ make
fetched: gemini://gemini.circumlunar.space:1965/servers/
fetched: gemini://tilde.team/~easeout/glog/
wrote: new-links.gmi
=> gemini://breadpunk.club
=> 2020-09-07-re-a-wordpress-confession.gmi 7 September 2020: Re: A Wordpress Confession

# Where does this functionality belong?

This proof of concept demonstrates that any Gemini page can already be
treated like a feed. This means that, if you don't mind not
participating in the broader internet feed reader ecosystem, and you
don't mind the occasional page redesign creating noise in subscription
results, you don't have to make a feed file at all. Syndication is
zero-cost.

In hindsight, why does RSS exist? What is "Really Simple" about it?
Well, it's simpler than HTML. If HTML was easy enough to parse, you
could just subscribe to web pages and not need feed files. But Gemtext
is already easy to parse. We don't our experience on the web to mislead
us into thinking a page, like your blog index page, is not already a
subscribable list of links.

It's been pointed out this is not very different from Spacewalk, which
(I think?) works by just polling Gemini pages and updating when they
change, as opposed to when their links change. Both of these are useful
and easy ways to subscribe to any Gemtext page.

# Closing

Gemtext authors could feel like they are not burdened with creating a
feed file if browsers, feed readers, and aggregators allowed subscribing
to Gemtext pages directly. When as an author you understand that a feed
file is unnecessary, the pressure to create a feed file is lifted. But
for that to happen, you have to see direct Gemtext subscription working
in the wild. One way that could work is for a browser to have a way to
treat a bookmark like a feed subscription. I also think if CAPCOM would
accept Gemtext pages as a feed URL option, that would go a long way.

---

Next in thread (2 of 8): 🗣️ Meff (meff (a) meff.me)

View entire thread.