# orderedItems[].object.content
@Edent nice article!

I notice you didn't mention as:Place in #ActivityStreams vocab. In your previous article you mentioned "there is good news and bad news" around as:Place, and I deduced the bad news was that Mastodon didn't support it.

Regarding the #SWICG #GeoSocial task force proposal, you wrote:

> The primary thing missing from the proposal is any form of understanding what users want to do with a geotagged post.

In both the observation on Mastodon support and mention of a geotagged *post* there's an implicit assumption on the application domains this pertains to: (micro)blogging social media.

I gather that the range of business/app domains that may have geosocial capabilities is much broader than that. And while a list of generic use cases can be brainstormed for support, things will be quite solution-specific. And the TF perhaps better provide good guidance and building blocks for that.

Broader question is whether fedi is already tied shut in a microblogging straitjacket.

# orderedItems[].object.content
@alineblankertz @malteengeler

Regarding the why: When coding Mastodon, Eugen used those parts of the #ActivityPub and #ActivityStreams standards he found useful. For functionality that was not (yet) covered by those standards, he came up with his own solutions and made them part of the Mastodon API which can be considered a quasi-standard now.

When Mastodon was a one person shop, this was a pragmatic way to make progress fast. Standardization bodies are famous for moving slowly, and maybe Eugen was also put off by some of the more eccentric personalities in the ActivityPub community. Now that Mastodon (the organisation) has grown, they should assume a more active role in standards bodies. Perhaps they have – I have not followed these processes closely in recent years.

At any rate, I think it is fair to say that the Mastodon makers and the Fediverse standards community have had a difficult relationship. This is my impression from visiting FediCamp and FediDay events (where Mastodon makers were absent), and some reading in the ActivityPub community forum, e.g.:
https://socialhub.activitypub.rocks/t/mastodon-monoculture-problem/3189/11
https://socialhub.activitypub.rocks/t/discussion-mastodon-and-the-fediverse/1967

# orderedItems[].object.ephemeral.metadata[].description
This is a great article.  I personally like mastodon alot, but lots of good points in here.

# orderedItems[].object.ephemeral.metadata[].ogDescription
I’m not quite sure that’s the answer. I see this forum pushing standardization, but the AP has already been standardized and used by the big players. If anyone or group wants to start adding more standardization beyond AP, they’d need to get buy-in from the “big players” (Mastodon, Pleroma, PeerTube, Hubzilla, Friendica, etc) because that’s who has all the fedi users. If these big players don’t agree with any standardization or FEP, it’s all just going to be ignored.

# orderedItems[].object.ephemeral.metadata[].twitterDescription
I’m not quite sure that’s the answer. I see this forum pushing standardization, but the AP has already been standardized and used by the big players. If anyone or group wants to start adding more standardization beyond AP, they’d need to get buy-in from the “big players” (Mastodon, Pleroma, PeerTube, Hubzilla, Friendica, etc) because that’s who has all the fedi users. If these big players don’t agree with any standardization or FEP, it’s all just going to be ignored.

# orderedItems[].object.ephemeral.metadata[].description
Via this Lemmy post I just bumped into this: An Open Letter Calling for the Resignation of Eugen Rochko (Gargron) from Mastodon Development 
Posting here because the broader discussion on the topic is very relevant to th…

# orderedItems[].object.ephemeral.metadata[].ogDescription
Via this Lemmy post I just bumped into this: An Open Letter Calling for the Resignation of Eugen Rochko (Gargron) from Mastodon Development  Posting here because the broader discussion on the topic is very relevant to this community, and in hopes we can - in a very constructive way - find ways to improve on some of the pain points that are brought up, and possible others that are as yet unnamed. Note that I do not endorse the open letter, but I’ll keep my opinion and thoughts for later (might wr...

# orderedItems[].object.ephemeral.metadata[].twitterDescription
Via this Lemmy post I just bumped into this: An Open Letter Calling for the Resignation of Eugen Rochko (Gargron) from Mastodon Development  Posting here because the broader discussion on the topic is very relevant to this community, and in hopes we can - in a very constructive way - find ways to improve on some of the pain points that are brought up, and possible others that are as yet unnamed. Note that I do not endorse the open letter, but I’ll keep my opinion and thoughts for later (might wr...

# orderedItems[].object.content
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.

#ActivityPub #ActivityStreams #FediDev #LinkedData #JSONLD

# orderedItems[].object.content
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.

#acctURI #ActivityPub #ActivityStreams #FediDev #objURI

# orderedItems[].object.content
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 🎉

https://github.com/w3c/activitystreams/issues/707

...

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

#ActivityPub #ActivityStreams #FediDev

# orderedItems[].object.ephemeral.metadata[].twitterTitle
Combine Activity Streams 2.0 Core and Activity Vocabulary into one document · Issue #707 · w3c/activitystreams

# orderedItems[].object.ephemeral.metadata[].description
The division between AS2 Core and the Activity Vocabulary goes back to Activity Streams 1.0 and the AS1 base schema. Does this division still serve a purpose for us in 2026? Would there be a benefit in combining the two documents?

# orderedItems[].object.ephemeral.metadata[].ogDescription
The division between AS2 Core and the Activity Vocabulary goes back to Activity Streams 1.0 and the AS1 base schema. Does this division still serve a purpose for us in 2026? Would there be a benefi...

# orderedItems[].object.ephemeral.metadata[].ogTitle
Combine Activity Streams 2.0 Core and Activity Vocabulary into one document · Issue #707 · w3c/activitystreams

# orderedItems[].object.ephemeral.metadata[].twitterDescription
The division between AS2 Core and the Activity Vocabulary goes back to Activity Streams 1.0 and the AS1 base schema. Does this division still serve a purpose for us in 2026? Would there be a benefi...

# orderedItems[].object.content
Apparently there is another social-networking protocol (that is not ActivityPub) that uses ActivityStreams, named:

Distributed Social Networking Protocol (DSNP)

...

https://en.wikipedia.org/wiki/Distribu ted_Social_Networking_Protocol

https://dsnp.org/

https://web.archive.org/web/2013091010 1658/http://www.complang.org/pipermail/dsnp-interest/

#ActivityStreams #DistributedSocialNetworkingProtocol #DSNP

# orderedItems[].object.ephemeral.metadata[].ogTitle
Distributed Social Networking Protocol - Wikipedia

# orderedItems[].object.ephemeral.metadata[].twitterTitle
DSNP - Decentralized Social Networking Protocol

# orderedItems[].object.ephemeral.metadata[].description
DSNP establishes a shared social layer no longer dependent on a specific app or centralized platform.

# orderedItems[].object.ephemeral.metadata[].twitterDescription
DSNP establishes a shared social layer no longer dependent on a specific app or centralized platform.

# orderedItems[].object.content
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.

#ActivityPub #ActivityStreams #FediDev

# orderedItems[].object.content
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.

#ActivityPub #ActivityStreams #FediDev

# orderedItems[].object.content
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.)

#ActivityPub #ActivityStreams #FediDev #RemoteInbox

# orderedItems[].object.content
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

...

#ActivityPub #ActivityStreams #FediDev #RemoteInbox

# orderedItems[].object.content
Here is my work-in-progress FEP for using JSON Resume with ActivityPub:

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

https://codeberg.org/reiver/fep/src/br anch/fep-6158/fep/6158/fep-6158.md

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

#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONResume #fep6158 #fep_6158

# orderedItems[].object.content
RE: https://mastodon.social/@reiver/116597 879302607072

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

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

https://jsonresume.org/

https://github.com/jsonresume/resume-s chema/blob/master/job-schema.json

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.

#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD #JSONresume

# orderedItems[].object.ephemeral.metadata[].description
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.

#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD

# orderedItems[].object.ephemeral.metadata[].ogDescription
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.

#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD

# orderedItems[].object.ephemeral.metadata[].description
JSON-Schema is used here to define and validate our proposed resume json - resume-schema/job-schema.json at master · jsonresume/resume-schema

# orderedItems[].object.ephemeral.metadata[].ogDescription
JSON-Schema is used here to define and validate our proposed resume json - jsonresume/resume-schema

# orderedItems[].object.ephemeral.metadata[].twitterDescription
JSON-Schema is used here to define and validate our proposed resume json - jsonresume/resume-schema

# orderedItems[].object.content
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"
}
]

...

#ActivityPub #ActivityStreams #FediDev #HashTag #HashTags #Tag #Tags

# orderedItems[].object.content
RE: https://mastodon.social/@reiver/116597 841178183282

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.

#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD

# orderedItems[].object.ephemeral.metadata[].description
How could you represent a resume / CV on the Fediverse and Social Web? Where would you put it? Etc?

I think it is temping 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.

#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD

# orderedItems[].object.ephemeral.metadata[].ogDescription
How could you represent a resume / CV on the Fediverse and Social Web? Where would you put it? Etc?

I think it is temping 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.

#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD

# orderedItems[].object.content
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.

#ActivityPub #ActivityStreams #FediDev #ProToGo #JSONLD

# orderedItems[].object.content
#ActivityPub #ActivityStreams #FediDev #SocialWeb #SocialWebIncubatorCommunityGroup
#swicg #w3c

# orderedItems[].object.attachment[].name
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.

# orderedItems[].object.content
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‽

...

#ActivityPub #ActivityStreams #FediDev

# orderedItems[].object.content
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: https://mastodon.social/@reiver/116446 675376417979

#ActivityPub #ActivityStreams #FediDev

# orderedItems[].object.ephemeral.metadata[].description
I wish ActivityPub extensions would stop putting stuff in "attachment".

When new developers come to ActivityPub they expect dot-notation to work when working with JSON. Ex:

actor.publicKey.publicKeyPem

Some of them later discover that JSON-LD is not JSON (despite having "JSON" in its name). And, while dot-notation sometimes works, arrays can appear in unexpected places, etc.

Putting stuff in "attachment" makes it so dot-notation never works. It is worse than the JSON-LD problem.

#FediDev

# orderedItems[].object.ephemeral.metadata[].ogDescription
I wish ActivityPub extensions would stop putting stuff in "attachment".

When new developers come to ActivityPub they expect dot-notation to work when working with JSON. Ex:

actor.publicKey.publicKeyPem

Some of them later discover that JSON-LD is not JSON (despite having "JSON" in its name). And, while dot-notation sometimes works, arrays can appear in unexpected places, etc.

Putting stuff in "attachment" makes it so dot-notation never works. It is worse than the JSON-LD problem.

#FediDev

# orderedItems[].object.content
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"}]

#ActivityPub #ActivityStreams #FediDev #JSONLD

# orderedItems[].object.content
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.

#ActivityPub #ActivityStreams #FediDev