Murmurations protocol for directories and maps

It does look cool! Thanks for the mention @aschrijver!

I very much like how they use existing data and vocabularies. One that deserves special attention is ESSGLOBAL for social solidarity economy.

From what I understand it is very compatible (or at least can be made very compatible).

Maybe a quick detour on a very similar idea that is extremely widely used: Embedding structured data on a website so Google can understand it.

Structured Data for Google

The only thing that needs to be done is add a bit of JSON (actually JSON-LD) to your website. Google has very nice documentation on how exactly: Get your event on Google or Local Business.

This is a shortened example of an Event embedded on a website:

<html>
  <head>
    <title>My super cool event</title>
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "Event",
      "name": "My super cool event",
      "startDate": "2025-07-21T19:00-05:00",
      "endDate": "2025-07-21T23:00-05:00",
      "location": {
        "@type": "Place",
        "name": "Snickerpark Stadium",
        "address": {
          "@type": "PostalAddress",
          "streetAddress": "100 West Snickerpark Dr",
          "addressLocality": "Snickertown",
          "postalCode": "19019",
          "addressRegion": "PA",
          "addressCountry": "US"
        }
      }
    }
    </script>
  </head>
  <body>
  </body>
</html>

Google bot parses this and understands that this JSON describes an Event.

This is somewhat a similar approach to what Murmurations is doing (as far as I understand). Unlike Google they don’t only use the schema.org vocabulary but also ESSGLOBAL which allows description of social solidarity economy initiative.

The way Google requires JSON to be embedded is a specified standard. From what I understand Murmuration does not use this embedding (I would recommend them to do so).

The interesting thing is that tons of websites do this for Google (If you search for JSON-LD the top hits will be about SEO), but nobody except Google uses this data. Time to change this!

Using embedded structured data on the Fediverse

Usually in ActivityPub one creates a Note or an Article. This is then shared and commented on with more Notes and Announced. But really any kind of structured content can be created or commented on with ActivityPub.

For example the website above with embedded event might be hosted at http://example.com/my-super-cool-event/. This URL happens to be the ID of the described event.

The event can then be Announced via ActivityPub:

{
  "@context": "https://www.w3.org/ns/activitystreams".
  "type": "Announce",
  "object": "http://example.com/my-super-cool-event/"
}

This is exactly how an existing Note would be announced. A client (or server) receiving this Announce activity would fetch “http://example.com/my-super-cool-event/”, parse it and display the event in the UI.

Unfortunately not many ActivityPub clients/servers (as far as I know) can fetch arbitrary content -it requires a whole range of parsers.

openEngiadina is trying to build a server and client that can handle such data and fetch it with a wide range of parsers. We have an initial demo: GeoPub - initial demo that can do exactly what I describe here.

Back to Murmurations

I think it is super cool and important that structured content is published not only about things that Google cares about but also about things communities care about.

Murmurations shows us very nicely that you don’t need an ActivityPub Server or any complicated thing, just embed some structured content on your website. With a couple of tweakst this content can be used with ActivityPub and shared on the Fediverse.

6 Likes