taquiones.net is a Fediverse instance that uses the ActivityPub protocol. In other words, users at this host can communicate with people that use software like Mastodon, Pleroma, Friendica, etc. all around the world.

This server runs the snac software and there is no automatic sign-up process.

Site description
Mi instancia en el fediverso
Admin email
root@taquiones.net
Admin account
@victor@taquiones.net

Search results for tag #activitypub

dansup »
@dansup@mastodon.social

I am working on my Laravel-Activitypub package, it will replace federation support in Pixelfed once all tests are passing!

To demonstrate and test it before we use it in Pixelfed, a small and simple single user photo sharing server will be published and I'll boost the first photo here.

Jan Vlug »
@janvlug@mastodon.social

mbajur »
@mbajur@mastodon.social

A sneak peak of another project I'm working on - @pppond - a different way of social bookmarking. Coming soon!

Join the conversation here, there is a lot to discuss and figure out: matrix.to/#/#pppapp:matrix.org

Riquiñez boosted

DigitalEscapeTools »
@xabd@mastodon.social

BookWyrm is an open-source social reading platform that lets you track books, write reviews, and discover new reads without relying on Goodreads.

You can host it yourself, connect with other readers, and even interact across the Fediverse thanks to ActivityPub support.

A great choice for book lovers who value openness, ownership, and privacy.

👉 digitalescapetools.com/tools/t

BookWyrm project page showing information about the open-source social reading platform, including release details and a description of its reading, review, and social features.

Alt...BookWyrm project page showing information about the open-source social reading platform, including release details and a description of its reading, review, and social features.

BookWyrm book discovery interface displaying a grid of book covers from various genres, highlighting browsing and recommendation features for readers.

Alt...BookWyrm book discovery interface displaying a grid of book covers from various genres, highlighting browsing and recommendation features for readers.

Max »
@mxv@fediverse.tryptophonic.com

Just discovered the existence of the #snac #ActivityPub server. Looks very interesting, appealing to my #smolweb sensibilities very much, and seems even smoler than #GoToSocial, which I've been using very happily for a few years now. Could be time for me to try another flavour, as Adam Ant might say. And, I'm very very down with the acronym. Yep, Social Networks Are Crap.

@reiver ⊼ (Charles) »
@reiver@mastodon.social

Linked Data in HTTP Headers rather than in JSON (i.e., JSON-LD), etc

Many Fediverse servers will give you different content depending on the "Accept" header in the HTTP request.

If "application/activity+json" you get ActivityPub/ActivityStreams JSON-LD metadata. If something else, you get actual file/payload.

If we encoded Linked Data as HTTP headers (key-value pairs), we could include the Linked Data with the actual file/payload.

@reiver ⊼ (Charles) »
@reiver@mastodon.social

acct-URI like URI for content

We have acct-URI for referring to actors.

Ex: acct:bahmankas@example.com

We resolve this to an HTTP-URI using WebFinger.

We don't have an acct-URI like URI for referring to an actor's content.

Which would also be resolved with WebFinger.

Ex: obj:bahmankas@example.com/file.ext

I think there are many advantages to being able to refer to content separate from where it is stored.

pixelfed boosted

dansup »
@dansup@mastodon.social

You, the people, and NLnet, have funded a fully open TikTok alternative with web and mobile clients, ActivityPub federation and an opt-out For You feed algorithm that is privacy friendly.

Anyone can start their own Loops community, and we're working on an official hosting service to help fund development.

Join 🚀: joinloops.org/join-the-beta

Roadmap ✨: joinloops.org/roadmap

Donate 🙏: joinloops.org/donate

Source 🤖: github.com/joinloops

Jorge »
@jorge@social.jagedn.dev

Pues ea

He sobrevivido a la charla de #activitypub en el #commitconf

Y como he cerrado sin guardar seguramente no se haya guardado. Así que si no estuviste te lo perdiste

pixelfed boosted

dansup »
@dansup@mastodon.social

You know what's pretty cool?

@rabble, the developer of divine.video sent a pull request to Loops to improve federation between Divine and Loops.

This is the magic of the open social web.

Collaboration and connection, no matter where you are.

You love to see it ❤️

github.com/joinloops/loops-ser

Pirate Praveen 普拉文 »
@praveen@social.masto.host

I remember using a service that allows hosting and can generate .ics files. It allowed sending using mastodon. But I can't remember the domain now. Can anyone ?

Update: Thanks to @smallcircles I found it, I was looking for gath.io/

Its pretty neat tool, especially if you want to share calendar events via channels other than email, like .

These days I don't usually need it as can generate ics for time polls.

Jorge »
@jorge@social.jagedn.dev

Camino de #commitconf , segundo día y llego tarde pero voy ilusionado

Recordatorio de que silencies este jastag porque puedo ponerme pesadito, teniendo en cuenta que hoy me subo al escenario a dar mi charla sobre #activitypub

LAUTI »
@lauti@bonfire.cafe

The next step in our #activitypub implementation is ready! This brings a simple instance actor object along with #webfinger support for it and a #nodeinfo endpoint.

We highly appreciate reviews from any #fedidev 🙏

codeberg.org/Klasse-Methode/...


We are really greatfull for @nlnet@social.nlnet.nl to fund this work and for @linos@graz.social for being such a great mentor!

@reiver ⊼ (Charles) »
@reiver@mastodon.social

Merging ActivityStreams Core & Vocabulary

It looks like there is an effort to try to merge the ActivityStreams Core specification with the ActivityStreams Vocabulary specification into a single specification 🎉

github.com/w3c/activitystreams

...

(I think this merged specification should also rename "Activity Streams" (with a space) to "ActivityStreams" (without a space).)

christian 💀 »
@the_cheis@mstdn.social

@reiver ⊼ (Charles) »
@reiver@mastodon.social

Self-Hosting an ActivityPub Video Podcast Is Surprisingly Affordable

4/

When you look at the actual storage requirements, self-hosting a video podcast on the Fediverse starts to look a lot less intimidating — and a lot more realistic.

It is affordable — especially with your own HomeLab (where you buy your own hard drives rather than rent them).

@reiver ⊼ (Charles) »
@reiver@mastodon.social

Self-Hosting an ActivityPub Video Podcast Is Surprisingly Affordable

3/

A 2 TB hard drive is often available for around $50–$60, which is enough space for five years of weekly episodes.

Need more room?

4 TB, 8 TB, 12 TB, and even 16 TB drives are widely available and far more affordable than most people expect. (Ex: 8TB is about $130 to $170.)

...

@reiver ⊼ (Charles) »
@reiver@mastodon.social

Self-Hosting an ActivityPub Video Podcast Is Surprisingly Affordable

2/

A typical 1-hour podcast episode at 1080p 60 fps is around 5.4 GB.

At one episode per week, that's about 280 GB per year.

Even after 5 years, your entire podcast archive would only use about 1.4 TB of storage.

That is it.

...

@reiver ⊼ (Charles) »
@reiver@mastodon.social

Self-Hosting an ActivityPub Video Podcast Is Surprisingly Affordable

1/

Imagine this.

You want to launch your own video podcast.

A new episode every week.
Each episode is 1 hour long.
Full HD (1080p), 60 fps video.

What would it cost to host it yourself?

Before I ran the numbers, I assumed it would be expensive — maybe even impractical.

I was wrong.

The reality is surprisingly affordable.

Here is why.

...

@reiver ⊼ (Charles) »
@reiver@mastodon.social

Stable Outbox Collection Pages

5/

To me,, having the newest page of the collection be varying length one feels like a better strategy.

@reiver ⊼ (Charles) »
@reiver@mastodon.social

Stable Outbox Collection Pages

4/

BUT, if instead — if the page with 3 items contains the 3 newest items, then —

Only the newest page would have to be recached. I.e., only 1 page churns not all.

All the other collection pages stay as is, and any cached copies of them are still valid.

Etc.

@reiver ⊼ (Charles) »
@reiver@mastodon.social

Stable Outbox Collection Pages

3/

If the page with 3 items contains the 3 oldest items, then —

Every time a new items is added to the collection, then every single collection page will change. I.e., they all churn.

Which means that all cached copies of any collection pages will be invalidated.

Which means a static site generator will have to regenerate all of them again.

Etc.

BUT, if instead —

@reiver ⊼ (Charles) »
@reiver@mastodon.social

Stable Outbox Collection Pages

2/

Let's say a collection has 23 items, and each page 10 items in length.

That means you will have 2 pages with 10 items and 1 page with 3 items.

Should that page with 3 items be the 3 newest items or the 3 oldest items.

The choice affects caching and static site ease quite a bit.

Here is the answer...

@reiver ⊼ (Charles) »
@reiver@mastodon.social

Stable Outbox Collection Pages

1/

ActivityPub uses collections for a number of things:

• followers
• following
• inbox
• outbox

And, rather than dump everything in the collection into a single document, ActivityPub paginates using collection pages.

That's great.

But, how you divide up a collection into pages matters and affects things. Such as: caching.

I'll explain.

@reiver ⊼ (Charles) »
@reiver@mastodon.social

Something missing from 'followers' and 'following' collections.

2/

I think this could be addressed by using the ActivityPub 'published' field:

w3.org/TR/activitystreams-voca

Such as what is shown in the (new) attached screen-shot.

So that the date-time when person A followed person B is included.

{"@context":"https://www.w3.org/ns/activitystreams","id":"https://mastodon.social/users/reiver/following?page=20","type":"OrderedCollectionPage","totalItems":1394,"next":"https://mastodon.social/users/reiver/following?page=21","prev":"https://mastodon.social/users/reiver/following?page=19","partOf":"https://mastodon.social/users/reiver/following","orderedItems":[{"url":"https://mastodon.social/users/georgiagemo","published":"2025-08-01T12:12:12Z"},{"url":"https://spectra.video/accounts/fedicon","published":"2025-07-25T13:04:12Z"},{"url":"https://indieweb.social/users/KarenKeiller","published":"2025-07-25T02:55:18Z"},{"url":"https://toot.wales/users/jaz","published":"2025-07-25T02:55:18Z"},{"url":"https://hachyderm.io/users/cyberlyra","published":"2025-07-23T17:20:02Z"},{"url":"https://mstdn.cool/users/fedijedi","published":"2025-07-23T17:20:02Z"},{"url":"https://thecanadian.social/users/mike","published":"2025-07-21T14:02:02Z"},{"url":"https://badges.fedicon.ca/actors/badges.fedicon.ca/fedicon","published":"2025-07-14T09:03:04Z"},{"url":"https://social.linux.pizza/users/chocodum","published":"2025-07-13T13:13:13Z"},{"url":"https://mastodon.social/users/pojntfx","published":"2025-07-11T19:20:21Z"},{"url":"https://cosocial.ca/users/kgw","published":"2025-07-10T11:12:13Z"},{"url":"https://social.anoxinon.de/users/Codeberg","published":"2025-07-09T10:11:12Z"}]}

Alt...{"@context":"https://www.w3.org/ns/activitystreams","id":"https://mastodon.social/users/reiver/following?page=20","type":"OrderedCollectionPage","totalItems":1394,"next":"https://mastodon.social/users/reiver/following?page=21","prev":"https://mastodon.social/users/reiver/following?page=19","partOf":"https://mastodon.social/users/reiver/following","orderedItems":[{"url":"https://mastodon.social/users/georgiagemo","published":"2025-08-01T12:12:12Z"},{"url":"https://spectra.video/accounts/fedicon","published":"2025-07-25T13:04:12Z"},{"url":"https://indieweb.social/users/KarenKeiller","published":"2025-07-25T02:55:18Z"},{"url":"https://toot.wales/users/jaz","published":"2025-07-25T02:55:18Z"},{"url":"https://hachyderm.io/users/cyberlyra","published":"2025-07-23T17:20:02Z"},{"url":"https://mstdn.cool/users/fedijedi","published":"2025-07-23T17:20:02Z"},{"url":"https://thecanadian.social/users/mike","published":"2025-07-21T14:02:02Z"},{"url":"https://badges.fedicon.ca/actors/badges.fedicon.ca/fedicon","published":"2025-07-14T09:03:04Z"},{"url":"https://social.linux.pizza/users/chocodum","published":"2025-07-13T13:13:13Z"},{"url":"https://mastodon.social/users/pojntfx","published":"2025-07-11T19:20:21Z"},{"url":"https://cosocial.ca/users/kgw","published":"2025-07-10T11:12:13Z"},{"url":"https://social.anoxinon.de/users/Codeberg","published":"2025-07-09T10:11:12Z"}]}

@reiver ⊼ (Charles) »
@reiver@mastodon.social

Something missing from 'followers' and 'following' collections.

1/

ActivityPub 'followers' and 'following' collections tend to be missing an important piece of information —

The date-time when person A followed person B.

There are certain use-cases where this matters.

You can see an example of this information missing in what Mastodon includes in the attached screen-shot.

{
  "@context": "https://www.w3.org/ns/activitystreams",
  "id": "https://mastodon.social/users/reiver/following?page=20",
  "type": "OrderedCollectionPage",
  "totalItems": 1394,
  "next": "https://mastodon.social/users/reiver/following?page=21",
  "prev": "https://mastodon.social/users/reiver/following?page=19",
  "partOf": "https://mastodon.social/users/reiver/following",
  "orderedItems": [
    "https://mastodon.social/users/georgiagemo",
    "https://spectra.video/accounts/fedicon",
    "https://indieweb.social/users/KarenKeiller",
    "https://toot.wales/users/jaz",
    "https://hachyderm.io/users/cyberlyra",
    "https://mstdn.cool/users/fedijedi",
    "https://thecanadian.social/users/mike",
    "https://badges.fedicon.ca/actors/badges.fedicon.ca/fedicon",
    "https://social.linux.pizza/users/chocodum",
    "https://mastodon.social/users/pojntfx",
    "https://cosocial.ca/users/kgw",
    "https://social.anoxinon.de/users/Codeberg"
  ]
}

Alt...{ "@context": "https://www.w3.org/ns/activitystreams", "id": "https://mastodon.social/users/reiver/following?page=20", "type": "OrderedCollectionPage", "totalItems": 1394, "next": "https://mastodon.social/users/reiver/following?page=21", "prev": "https://mastodon.social/users/reiver/following?page=19", "partOf": "https://mastodon.social/users/reiver/following", "orderedItems": [ "https://mastodon.social/users/georgiagemo", "https://spectra.video/accounts/fedicon", "https://indieweb.social/users/KarenKeiller", "https://toot.wales/users/jaz", "https://hachyderm.io/users/cyberlyra", "https://mstdn.cool/users/fedijedi", "https://thecanadian.social/users/mike", "https://badges.fedicon.ca/actors/badges.fedicon.ca/fedicon", "https://social.linux.pizza/users/chocodum", "https://mastodon.social/users/pojntfx", "https://cosocial.ca/users/kgw", "https://social.anoxinon.de/users/Codeberg" ] }

@reiver ⊼ (Charles) »
@reiver@mastodon.social

I have seen the @Codeberg people say they don't want to be the only code-forge.

I.e., they don't want to replace GitHub. They want there to be many code-forges out there, including them.

I agree with this goal.

But — I think until we (at least) have federated pull-requests, this is less likely to happen.

And, I do know that there is an effort to add ActivityPub support to Forgejo, Gitea, and others.

forgefed.org

I think ForgeFed is important for this goal

Evan Prodromou »
@evan@cosocial.ca

A reminder to developers and advocates: applications for the NLNet Open Social Fund close on June 1st () at noon CEST. You should apply; you are doing important work and we need you to keep doing it.

nlnet.nl/opensocial/

Fireside Fedi »
@firesidefedi@btfree.social

Evan Prodromou »
@evan@cosocial.ca

@activitypub Ping ping ping

Jan boosted

Grow Your Own Services 🌱 »
@homegrown@social.growyourown.services

NodeBB is free open source forum software on the Fediverse. You can follow and interact with NodeBB forum members from Mastodon etc. More info:

🌱 nodebb.org
🌱 @nodebb

You can self-host free of charge using the installation instructions:

🌱 docs.nodebb.org

If you don't want to do techy stuff, you can create a NodeBB forum very easily through a paid hosting service:

🌱 nodebb.org/pricing

Adam »
@adamsdesk@fosstodon.org

Updated: List of Helpful Mastodon Resources

- Fix Redirect Link

Handmade list of resources for the federated social network Mastodon covering, how to use, find an instance, find people, tools and more.

adamsdesk.com/posts/list-masto

gyptazy »
@gyptazy@gyptazy.com

Meet , a lightweight server for the , built with PHP and SQLite.

Run your own decentralized social platform on shared hosting or a tiny VPS WITHOUT Redis, PostgreSQL, or complex infrastructure.

What it makes so special to me? It looks awesome, comes with a great admin web interface and does not require a VPS instance where it can also be operated on a cheap shared hosting systems. By the given requirements, it also easily runs on a and all kind of systems, including , , and more!

This all makes it perfect to everyone and even beginners to run their own instance. With relay support (e.g., fedi-relay.gyptazy.com) it even can consume and post content over non-directly connected instances in the !

Kudos to the author of Starling: @df@s.dfaria.eu

More information:
GitHub project: https://github.com/dfaria-eu/Starling
My blog post: https://gyptazy.com/blog/starling-simple-fediverse-server/


Starling as a Fediverse/ActivityPub Server

Alt...Starling as a Fediverse/ActivityPub Server

Holos Social »
@HolosSocial@mastodon.social

Multi-device support is progressing well for . The tricky part: each device runs its own server, with its own local data, signing its own activities. Keeping several servers in sync both ways, without duplicating everything, without losing actions on the way, and without two of them handling the same activity at the same time, was the main problem to solve. It also had to stay reliable when a device goes offline for hours or days.
(1/3)

Evan Prodromou »
@evan@cosocial.ca

Holos Social »
@HolosSocial@mastodon.social

isn't bringing something new to the , especially not to . It builds on what exists, without mimicking any platform.
Every social network has been given its fediverse clone. Asking people to hold a separate account on each is taking the problem backwards.
If the fediverse keeps mirroring the GAFAM, it loses. The point was never to rebuild their world, but to offer something else: one identity across every content.
HolosSocial is simply a try. But we can do it.

@reiver ⊼ (Charles) »
@reiver@mastodon.social

Here is my work-in-progress FEP for using JSON Resume with ActivityPub:

FEP-6158: ActivityPub 'Resume' Object: JSON Resume expressed as JSON-LD

codeberg.org/reiver/fep/src/br

I prefer to write for clarity, so it still needs work.

⁂ L. Rhodes »
@lrhodes@merveilles.town

I've had this idea knocking around in my head for a while, and let's face it, I'm just never going to have the chops to implement it, but it's going to keep knocking around in there if I don't put it out into the universe, so here it is. Feel free to pick it up and run with it.

I call it Disperse. DIStributed PERsonal SEarch. Basically, federated search instances that relay and compile member-curated search results. Seems like a interesting use case for .

A flow chart showing the hypothetical structure of Disperse usage. At the center is a green database symbol labeled Disperse. Above it is a flow in black showing a webpage moving through a smartphone to the Disperse symbol, with the legend: "1. Alice has an account on a Disperse instance. When she comes across a useful webpage, she uses the app to post the link to her instance, where it’s stored in the local database." Under that is a flow in yellow showing a search bar with the query going to the Disperse instance, with the legend: "2. Disperse instances display a search bar as the front page of their web interface. Beth doesn’t have an Disperse account, but sometimes searches using the instance where Alice has an account." Yellow arrows indicate the query going out to two smaller, red database symbols representing "federated Disperse instances." Below them is another database in purple marked "Blocked instance" with a large purple "X" between it and the central Disperse server. Below that is the legend: "3. When the instance receives a search query, it sends a request out to any federated instances. They respond with any hits from their own databases. The originating instance combines those responses with hits from its own database, then displays them to Beth as a results page." The last step is represented by an arrow showing an orange document flowing back out to the search page.

Alt...A flow chart showing the hypothetical structure of Disperse usage. At the center is a green database symbol labeled Disperse. Above it is a flow in black showing a webpage moving through a smartphone to the Disperse symbol, with the legend: "1. Alice has an account on a Disperse instance. When she comes across a useful webpage, she uses the app to post the link to her instance, where it’s stored in the local database." Under that is a flow in yellow showing a search bar with the query going to the Disperse instance, with the legend: "2. Disperse instances display a search bar as the front page of their web interface. Beth doesn’t have an Disperse account, but sometimes searches using the instance where Alice has an account." Yellow arrows indicate the query going out to two smaller, red database symbols representing "federated Disperse instances." Below them is another database in purple marked "Blocked instance" with a large purple "X" between it and the central Disperse server. Below that is the legend: "3. When the instance receives a search query, it sends a request out to any federated instances. They respond with any hits from their own databases. The originating instance combines those responses with hits from its own database, then displays them to Beth as a results page." The last step is represented by an arrow showing an orange document flowing back out to the search page.

@reiver ⊼ (Charles) »
@reiver@mastodon.social

I may have written a JSON-LD schema for JSON Resume.

It is defined in terms of ActivityPub.
For example:

'Resume' is a sub-type of an ActivityPub 'Object'. There are some new fields defined. Etc.

...

Now the question is — where do I put it?

Do I create a pull-request to the JSON Resume resume-schema repo?

Do I create a FEP?

Do I put it somewhere else?

dansup »
@dansup@mastodon.social

Loops Playlists will soon federate!

They will likely only be compatible with other Loops servers as we're using a new type of OrderedCollection.

Loops Playlists feature

Alt...Loops Playlists feature

@reiver ⊼ (Charles) »
@reiver@mastodon.social

My personal desire would be to create a format from scratch (because you are in control, you get something bespoke to your needs, and it is personally satisfying), but —

I think there is probably an advantage to using something (such as JSON resume) that already has wide adoption.

I guess that makes me inclined towards the latter.

...

So, if I go that way, I would have to decide: plain JSON or JSON-LD.

@reiver ⊼ (Charles) »
@reiver@mastodon.social

RE: mastodon.social/@reiver/116597

More on a resume / CV on the Fediverse on Social Web.

Another option could be to use something like "JSON resume":

jsonresume.org/

github.com/jsonresume/resume-s

It seems to be popular.

It isn't JSON-LD. Although I think it would be straightforward to translate it to JSON-LD, if that was desired.

@reiver ⊼ (Charles) »
@reiver@mastodon.social

On Tags (including Hash-Tags) in ActivityPub.

2/

A new version of ActivityPub could extend the type of "tag" from:

Object | Link

to:

Object | Link | xsd:string

And that would make the following valid ActivityPub:

"tag": ["apple", "banana", "cherry"]

Of course, it would have to be specified how to interpret this. (Ex: as "type":"Hashtag", or whatever.)

@reiver ⊼ (Charles) »
@reiver@mastodon.social

On Tags (including Hash-Tags) in ActivityPub.

1/

I think new developers coming to ActivityPub want to write something like:

"tag": ["apple", "banana", "cherry"]

It is unfortunate that that isn't valid ActivityPub. But, that it must instead be:

"tag": [
{
"type": "Hashtag",
"name": "#apple"
},
{
"type": "Hashtag",
"name": "#banana"
},
{
"type": "Hashtag",
"name": "#cherry"
}
]

...

@reiver ⊼ (Charles) »
@reiver@mastodon.social

RE: mastodon.social/@reiver/116597

There is also the other question of — would the resume / CV be JSON-LD.

On one hand, if it was in JSON-LD, it would make it machine-legible similar to ActivityPub.

On the other hand, I don't think anyone is going to write JSON-LD (especially HTML embedded in a JSON string value) by hand. But, I do think some people will want to write their resume by hand.

It feels like user-experience is fighting with JSON-LD based machine-legibility.

@reiver ⊼ (Charles) »
@reiver@mastodon.social

How could you represent a resume / CV on the Fediverse and Social Web? Where would you put it? Etc?

I think it is tempting to put the whole resume in the Actor document.

But, it is probably better for the Actor document to point (rather than include) it. And, have the resume / CV live somewhere else.

It should probably be done in a way that let's people have multiple resumes / CV. For example, for different roles / career tracks, etc.

@reiver ⊼ (Charles) »
@reiver@mastodon.social


CONGRATULATIONS!

The operation succeeded, and you are now a participant in the Social Web Incubator Community Group. A separate form lets you resign the group.

Alt...CONGRATULATIONS! The operation succeeded, and you are now a participant in the Social Web Incubator Community Group. A separate form lets you resign the group.

Evan Prodromou »
@evan@cosocial.ca

For the , we need a profile of OAuth to use for accessing the actor's data. There's a suggested flow here:

github.com/swicg/activitypub-a

There's an example client here:

swicg.github.io/activitypub-ap

It tries discovery via RFC 8414 or getting the endpoints straight from the actor.

It then provisions a client ID using CIMD, FEP d8c2, or DCR (in that order).

It then tries to do an authorization code flow.

I'm interested in seeing it tested with more ActivityPub API servers.

@reiver ⊼ (Charles) »
@reiver@mastodon.social

Remote Inbox Architecture

2/

The Remote Inbox server deals with incoming activities, objects, etc, from other users..

The front-end can get the inbox (and other feeds') data from the Remote Inbox server.

(You'd probably want to store cached data from the Fediverse elsewhere from these two servers, as I've said before. But, that is a separate thread.)

@reiver ⊼ (Charles) »
@reiver@mastodon.social

Remote Inbox Architecture

1/

This, the Remote Inbox Architecture, is an architecture for a Fediverse back-end server that I think could be useful.

Here is how it works — there are (at least) 2 servers involved: (1) the main back-end server, and (2) a remote inbox server.

The actor file on main back-end server "points" the inbox to the remote server.

It separates the user's content from the front-end related functionality

...

@reiver ⊼ (Charles) »
@reiver@mastodon.social

On moving an actor's content.

4/

Or, instead of using the ActivityPub 'Update' activity —

Couldn't we use the ActivityPub 'Move' activity.

w3.org/TR/activitystreams-voca

With the "origin" and "target" fields.

Where "origin" contains the old ID URL, and "target" contains the new ID URL.

.

        {
            "@context": "https://www.w3.org/ns/activitystreams",

            "origin":   "htps://example.com/users/joeblow/objects/150197",
            "target":   "http://host.example/~/objects/019e37",
        }

Alt... { "@context": "https://www.w3.org/ns/activitystreams", "origin": "htps://example.com/users/joeblow/objects/150197", "target": "http://host.example/~/objects/019e37", }

@reiver ⊼ (Charles) »
@reiver@mastodon.social

On moving an actor's content.

3/

There a many different conventions we could come up with to allow an ActvityPub 'Update' activity to be used to change an object's "id" field.

We (the Fediverse developer community) just need to pick one that everyone is willing to implement.

For example, perhaps the "origin", "result", or "target" field should be used:

w3.org/TR/activitystreams-voca

w3.org/TR/activitystreams-voca

w3.org/TR/activitystreams-voca

Or —

...

@reiver ⊼ (Charles) »
@reiver@mastodon.social

On moving an actor's content.

2/

Could an ActivityPub 'Update' activity be used to move objects from one server to another server?

Could an 'Update' activity be used to change an object's "id" field?

After all, the "id" is used to identity what is being changed. It is the targeting mechanism.

How can you provide the old "id" to target the (old) object you want to change the "id" of, while also providing a new "id"?

w3.org/TR/activitypub/#update-

...

7.3 Update Activity

For server to server interactions, an Update activity means that the receiving server SHOULD update its copy of the object of the same id to the copy supplied in the Update activity. Unlike the client to server handling of the Update activity, this is not a partial update but a complete replacement of the object.

The receiving server MUST take care to be sure that the Update is authorized to modify its object. At minimum, this may be done by ensuring that the Update and its object are of same origin.

Alt...7.3 Update Activity For server to server interactions, an Update activity means that the receiving server SHOULD update its copy of the object of the same id to the copy supplied in the Update activity. Unlike the client to server handling of the Update activity, this is not a partial update but a complete replacement of the object. The receiving server MUST take care to be sure that the Update is authorized to modify its object. At minimum, this may be done by ensuring that the Update and its object are of same origin.

@reiver ⊼ (Charles) »
@reiver@mastodon.social

On moving an actor's content.

1/

One of the things that comes up on the Fediverse from time to time — is the ability for people to move their accounts.

For example, someone started off at:

@joeblow@example.com

But, now wants to "move" to:

@misterx@host.example

There is a mechanism to do that.

That mechanism moves their followers, their followees, BUT —

It does NOT move their content over!

That is a problem. Could we address this‽

...

pixelfed boosted

dansup »
@dansup@mastodon.social

I've been working on improving Loops federation in preparation to reuse it and it's powerful builder/handler/validation pattern for Pixelfed!

This will solve many federation issues in Pixelfed, like missing comment threading, mentions, blocks and unblocks and much more.

Then I will abstract it into a reusable Laravel package, so any laravel project can easily add federation support in minutes

I also submitted a NLnet grant application for this 🤞

github.com/dansup/laravel-acti

@reiver ⊼ (Charles) »
@reiver@mastodon.social

ActivityPub being treated as JSON is a good thing.

5/

JSON-LD has similar complexity to RDF. They are actually related formats.

ActivityPub uses JSON-LD, and thus has the potential for the same type of developer user-experience problems as RSS 1.0.

But I think ActivityPub is its own "RSS 2.0".

Why‽ Because people can and do treat ActivityPub as JSON (rather than JSON-LD).

That is a strength. It makes ActivityPub much simpler and easier to understand than JSON-LD.

@reiver ⊼ (Charles) »
@reiver@mastodon.social

ActivityPub being treated as JSON is a good thing.

4/

RSS 2.0 won the RSS war.

I think the reason RSS 2.0 beat RSS 1.0 is because the RDF-based syntax of RSS 1.0 made it complex. It made it too complex.

While both RSS 1.0 and RSS 2.0 were XML-based, RSS 2.0 wasn't RDF-based. RSS 2.0's syntax was much simpler and easier to understand.

I think that was a big reason why RSS 2.0 won — it had a better developer user-experience.

...

@reiver ⊼ (Charles) »
@reiver@mastodon.social

ActivityPub being treated as JSON is a good thing.

3/

It would be reasonable for anyone to assume that RSS 2.0 is a newer version of RSS 1.0. And there were many who tried to promote that view.

But, really they were completely different formats.

The "RSS" in 1.0 and 2.0 didn't even stand for the same thing.

1.0 RSS = RDF Site Summary

2.0 RSS = Really Simple Syndication

...

@reiver ⊼ (Charles) »
@reiver@mastodon.social

ActivityPub being treated as JSON is a good thing.

2/

There are different versions of RSS.

Most people who know of RSS (if they even know it at all) know of RSS 2.0. But, it wasn't the only version of RSS.

(RSS isn't even the first technology of its kind.)

When the online developer community became aware of RSS, there was a fight between two version of RSS:

RSS 1.0 versus RSS 2.0

...

@reiver ⊼ (Charles) »
@reiver@mastodon.social

ActivityPub being treated as JSON is a good thing.

1/

Some of us are old enough to remember RSS and blogs.

Some of us are old enough to remember the absurd levels of hype that blogs and RSS attracted — similar to the modern AI hype and recent crypto hype. During that era, it felt like everyone any their pet cat wanted a blog with an RSS feed. During that era, there was a get-rich-quick fever around blogs and RSS.

Web-Browsers even added built-in support for RSS.

@reiver ⊼ (Charles) »
@reiver@mastodon.social

I think ActivityPub Partial Updates won't work well with attachments or tags.

Not unless there is a way to reliably just target the item in the attachments or tags array that you want to modify. AFAIK, there isn't.

You have to download the old version of the whole attachments or tags array first, update it locally, and then upload the whole (updated) thing. This creates a race-condition.

See also: mastodon.social/@reiver/116446

Maho 🦝🍻 »
@mapache@hachyderm.io

Hear me out, if we can integrate these 4, in a seamless frictionless integrated experience for both, companies and users, we could have a nice alternative to that is actually not crap.

Any interest?

A diagram titled "An ActivityPub-based LinkedIn" is presented on a light blue background. The image features four colored rectangular boxes arranged in a grid around a central horizontal bar. The top row includes a light purple box with the text "Professional Profile and Badges" and "fediprofile," alongside a dark purple box with the text "Social Graph and Updates" and "mastodon." A dark blue horizontal bar in the center contains the text "Single Login Identity." The bottom row consists of a black box with the text "Job posts and discussions" and "lemmy," and an orange box with the text "Achievements and Certifications" and "badgefed."

Alt...A diagram titled "An ActivityPub-based LinkedIn" is presented on a light blue background. The image features four colored rectangular boxes arranged in a grid around a central horizontal bar. The top row includes a light purple box with the text "Professional Profile and Badges" and "fediprofile," alongside a dark purple box with the text "Social Graph and Updates" and "mastodon." A dark blue horizontal bar in the center contains the text "Single Login Identity." The bottom row consists of a black box with the text "Job posts and discussions" and "lemmy," and an orange box with the text "Achievements and Certifications" and "badgefed."

@BjornW@mastodon.social »
@BjornW@mastodon.social

@publicspaces will have a pre-conference unconference on June 4th.

This unconference is an open invitation to discuss & forge relationships between people involved with the . From app builder & protocol architects to advocates, sysadmins, moderators, community organisers & more. Let's forge bonds across cultures, protocols & apps!

Admission free, registration required:
tickets.publicspaces.net/publi

🗳

Evan Prodromou »
@evan@cosocial.ca

For ActivityPub developers: in a Signature header, what is the key ID?

An actor ID:3
A public key object ID:11
Something else (please specify):1

@reiver ⊼ (Charles) »
@reiver@mastodon.social

In ActivityPub, these are all equivalent:

"type":"Banana"

"type":["Banana"]

"type":{"@id":"Banana"}

"type":[{"@id":"Banana"}]

"type":{"id":"Banana"}

"type":[{"id":"Banana"}]

"@type":"Banana"

"@type":["Banana"]

"@type":{"@id":"Banana"}

"@type":[{"@id":"Banana"}]

"@type":{"id":"Banana"}

"@type":[{"id":"Banana"}]

Grow Your Own Services 🌱 »
@homegrown@social.growyourown.services

There are a LOT of Fediverse projects out there!

If you're a techy person interested in self-hosting Fediverse platforms, you might like to check out the "Delightful Fediverse" list which tries to feature every Fediverse project available:

🌱 codeberg.org/fediverse/delight

(It's worth noting the meaning of the emoji next to project names, as the status of different projects varies.)

Adam »
@adamsdesk@fosstodon.org

Updated: List of Helpful Mastodon Resources

- Add Connected Places
- Add delightful fediverse clients
- Add delightful fediverse deveopment
- Add delightful fediverse experience
- Remove orphan link

Handmade list of resources for the federated social network Mastodon covering, how to use, find an instance, find people, tools and more.

adamsdesk.com/posts/list-masto

The Real Grunfink »
@grunfink@comam.es

I've just published version 2.92 of , the simple, minimalistic instance server written in C. It includes the following changes:

Changed default: for newly created instances, disable_inbox_collection is set to true (see snac(8) for more information). The reason is because it seems to be used for harrasing people.

Changed default: for newly created instances, disable_history is set to true (see snac(8) for more information). The reason is because archived history files don't reflect reality after posts are deleted or modified (they always have been an ugly kludge).

Changed default: in previous versions, posts with a scope of unlisted were shown in public pages and RSS feeds. Now, they are no longer shown. If you want to get back to previous behaviour, use a new toggle in the User Settings section (see snac(1) for more information).

New admin configuration option: if the purge_static value is set to true in server.json, each user's static directory is explored and those files there that are no longer attached to any post or referenced anywhere are deleted. See snac(8) for more information about those cases where you may not want to enable this option.

Allow serving files from subdirectories of the static/ subdirectory (contributed by la_ninpre).

Minor tweak to webfinger code to handle Hubzilla's peculiarities.

Fixed a search case where URLs to GotoSocial statuses were misidentified as accounts.

Accounts that follow you are now marked with a thumb-up emoji, because followers are adorable people.

Fixed some account export errors.

Fixed an incorrect hash in post links.

Show an account's location link in the people page, if they have one.

Mastodon API: Fixed hashtags loosing the link after editing a post, minor tweak in access token processing (contributed by trondd555).

Drop usage of PATH_MAX (contributed by sergiodj).

New Polish translation (contributed by kpm).

Updated German and Czech translations (contributed by zen and pmjv).

https://comam.es/what-is-snac

If you find useful, please consider buying grunfink a coffee or contributing via LiberaPay.


@reiver ⊼ (Charles) »
@reiver@mastodon.social

How much Fediverse software would fail if the "to" or "cc" of an activity contained:

WWW.W3.ORG/ns/activitystreams#

Rather than:

w3.org/ns/activitystreams#Publ

I.e., an upper-case Internet domain.

WWW.W3.ORG versus www.w3.org

(What about WwW.w3.OrG?)

mbajur »
@mbajur@mastodon.social

Does support a root level domain handles yet? Like, say, user having his AP-enabled single-user website under example.com having a @example.com handle instead of @something@example.com

@reiver ⊼ (Charles) »
@reiver@mastodon.social

ActivityPub specifications don't seem to provide a way to do Idempotent POSTs to your outbox.

That seems like a problem for C2S to me.

Networks are unreliable. You cannot tell the difference between an unreceived request vs an unreceived response. You'll get unwanted identical duplicate activities.

Although it isn't difficult to solve — a convention just needs to be picked.

For example, a new Idempotency field could be added to the JSON-LD payload.

Adam »
@adamsdesk@fosstodon.org

Updated: List of Helpful Mastodon Resources

- Add RSS Tooter
- Add Masto Reader

Handmade list of resources for the federated social network Mastodon covering, how to use, find an instance, find people, tools and more.

adamsdesk.com/posts/list-masto

Maho 🦝🍻 »
@mapache@hachyderm.io

I just added a new theme to @fediprofile , this time for those of your friends that want to showcase their portfolio of photos, so these are shown as a grid.

All the links would continue to be there just not as the main character.

@reiver ⊼ (Charles) »
@reiver@mastodon.social

@reiver ⊼ (Charles) »
@reiver@mastodon.social

There is a comparison that can be made between ActivityPub and Event-Sourcing.

3/

With ActivityPub, Activities are often applied to an object. That object gets assigned an ID in the form of a URL.

(And, by URL I mean URL, URI, IRI, etc.)

One doesn't have to read through all the Activities in an inbox, outbox, etc to get the final state of an object.

One can just get the JSON-LD document from the object's ID URL to get the final state.

@reiver ⊼ (Charles) »
@reiver@mastodon.social

There is a comparison that can be made between ActivityPub and Event-Sourcing.

2/

With Event-Sourcing, you can "project" the events to get another (often more peformant) view of the data in the events.

Without having to incur the cost of having to read all the events to figure out the final state.

...

@reiver ⊼ (Charles) »
@reiver@mastodon.social

There is a comparison that can be made between ActivityPub and Event-Sourcing.

1/

With Event-Sourcing, your source-of-truth is an append-only series of events.

Ex: USER_REGISTERED, EMAIL_ADDRESS_VERIFIED, PASSWORD_CHANGED, etc.

In ActivityPub, this is similar to the inbox, outbox, etc being an append-only series of Activity.

Ex: Create, Like, Undo, etc.

...

@reiver ⊼ (Charles) »
@reiver@mastodon.social

Just thinking out loud —

If we wanted to support resumable uploads in C2S API, then — we probably need some URL to upload the file chunks to.

When a user POST to their own outbox, the HTTP "201 Created" response will have a "Location" header that provides a URL.

Maybe that could be used as the upload URL.

Or, maybe the JSON-LD document at that URL might contain a URL under the "object" field that could be used as the upload URL.

Other options too

@reiver ⊼ (Charles) »
@reiver@mastodon.social

I can think of different ways to support resumable uploads with ActivityPub, but — just to see what others are doing —

PeerTube seems to have resumable uploads already.

PeerTube seems to use this protocol for it:

github.com/kukhariev/node-uplo

I like that it uses Content-Range in the protocol. I would have done the similar.

@reiver ⊼ (Charles) »
@reiver@mastodon.social

It seems as if the uploadMedia ActivityPub extension does not provide a way to resume an upload that didn't previously compete.

w3.org/wiki/SocialCG/ActivityP

If, for example, you are working with large files (such as video files) this would matter.

Because if you uploaded 1GB, and the upload stopped, you would want to resume at where it stopped, and not have to upload from the beginning again.

This would be important for ActivityPub C2S adoption.

Evan Prodromou »
@evan@cosocial.ca

Hooray movies! 🎉 🎥🍿

movies.pub/movie/Q107105860

UPDATE: I'm at the hackathon this weekend, working on mapping movies from Wikidata to ActivityPub objects. It's not for end users. If you don't like JSON, these URLs won't be for you.

I'll try to make that clear from now on.

It's nice for me to share my progress. If you don't like it or you don't care, please be as respectful to me as you would be to other people on the Fediverse sharing things they made.

william ⁂ maggos »
@wjmaggos@liberal.city

In the video in the post I just boosted, @anildash says is now boiling the frog in a slow move from email towards lock-in. And of course they work with Nazis etc.

What we need is an effort between newsletter publishers like etc and reader apps like @wallabag to build an ecosystem like podcasting. To make it smooth while remaining totally open. I'd argue for using in addition to RSS to support boosts. Then we need decentralized money.

🗳

Evan Prodromou »
@evan@cosocial.ca

Which of the top 4 Fediverse server projects will be the first to implement the ActivityPub API?

Mastodon:15
Pixelfed:4
Lemmy:1
PeerTube:3

Back to top - More...