Murmurations protocol for directories and maps

I wonder if this is or could be compatible with AP?

"Rather than creating centralised data sets, The Murmurations protocol makes it easy for Organisations to host data about themselves on their own web sites.

The data is structured in a way that it can be automatically ‘crawled’ and aggregated, based on specific filterable criteria, so that directories and maps are automatically updated about an organisation from a single authoritative source. That source being the organisation itself!"
https://murmurations.network/

Apparently it can speak JSON.

now we have built a stand-alone .json file creator to enable anyone running any other type of website to create their profile and add their org / project to the index
https://www.loomio.org/d/xbZAQPDa/murmurations-protocol

White paper here:

2 Likes

Wow, this looks cool. Also a shout to @pukkamustard as this may be interesting for openEngiadina.

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

Murmurations sounds cool but where is the source code ? And where is a public specification of the murmurations protocol ?

I believe the source code is here: https://github.com/Photosynthesis/Murmurations

I don’t think there is real public specification apart from the white paper.

1 Like

Hi all – It’s great to see Murmurations under discussion among folks in a distributed data community like ActivityPub!

As @pukkamustard said, the source code is in various repos under https://github.com/Photosynthesis/. We are working on better public specifications. The whitepaper gives an overview, but it’s not very technically satisfying. For the more technically inclined, probably the best place to look for now is the schema repo, and the API spec document inside it (as a new user I can’t link to these, but they’re easy to find under the Photosynthesis account).

Our original approach was to follow the JSON-LD standard and embed Murmurations data in a site’s HTML.

But, this requires much more data transfer and parsing on the consumption end. So, we’re currently using a separate URL for the JSON data (either an API endpoint or file). That said, I think including a snippet of embedded JSON-LD with the address of the full Murmurations data is something we should look at.

If there’s a way to make Murmurations data interoperable with ActivityPub, we’re keen!

My impression has been that AP is designed for more chronological, feed-like content, while Murmurations is (for now) mostly about more static identity information about organisations. It would be great to hear your suggestions on how we can bridge the gap.

Cheers,
Adam

3 Likes

@AdamM are you aware of Communecter? Their code is available on GH and they seem to have similar goals to Murmurations. They might be keen to make their data available using the Murmurations standard and if I remember rightly, they are also interested in implementing AP.

This may be of interest to you too @pukkamustard

1 Like

Welcome @AdamM!

Indeed Communecter is a great project with nice people. @natacha has been working on bringing together various mapping-related projects, including CO for an InterMapping meeting that had to be canceled due to the current situation. Since the next one was scheduled in June in Barcelona, looks like there’s a need to figure out something online.

2 Likes

@AdamM, I uploaded a murmurations_node.json for IN COMMON and compared the current spec with IN COMMON data model. I would be happy to discuss more with you since one of the goals of the IN COMMON collective is to provide solid data foundations for interoperability.

E.g.,

  • there should be a /.well-known/ place for the file(s)
  • figure out something compatible with librehost.json
  • figure out something compatible with IN COMMON resources (especially the Entity class which is a Resource that can describe a Schema.org Organization)

Tomorrow and the 30th of June are good moments to participate in the related FSMET sessions:

This link is not public – and even unavailable when logged-in to Loomio.

Meet.coop could be an option for that. They run a Big Blue Button instance as a co-op, formed by a group of existing tech co-ops.

My bad. I thought this thread was in the OAE group, which is all public discussion, but it’s actually in the Open Coop group, which (ironically) is mostly private discussions. I’ll ask if that thread can be made public.

1 Like

Yes, I was thinking about this or @fosshost since we could use the opportunity to trial the BBB installation before the AP Conference.

2 Likes

I agree we should use https://bbb.fosshost.org for ActivityPub - this has been provisioned and is dedicated exclusively.

Awesome! Does that mean the fediverse.party crew could host a meetup on it?

The post you replied to was a reply to the comment by @how about the IN COMMON meetups (Murmurations protocol for directories and maps). Would this be in scope for bbb.fosshost.org? I only brought up meet.coop as one liberating replacement for Zoom I’m aware of, it’s great to know there are more.

3 Likes

Yes, go wild!

The more the merrier. The more we test, the better

The instance is currently sat there doing nothing and will be until AP Conf in Oct. It is a shared service provided by fosshost and it will be repurposed after AP Conf (or used for other causes, prior)