What about JSON-LD makes it so they have to include the “this is public” declaration in the to
field instead of having an as:public
property on the object? (I don’t know a whole lot about JSON-LD or RDF more broadly)
What about JSON-LD makes it so they have to include the “this is public” declaration in the to
field instead of having an as:public
property on the object? (I don’t know a whole lot about JSON-LD or RDF more broadly)
Mastodon doesn’t have Group
support (fep-1b12), so when they reply to a post, they don’t send it to the community’s inbox (only to the inbox of the Person
they’re replying to), thus breaking Lemmy’s model of federation.
I assume that if someone from a new instance (D) subscribes to foo, then D will need to request all the old posts from foo, since they weren’t pushed to D?
Lemmy is pretty bad about backfilling content. Communities do have outboxs, but these only list the last 50 posts and you can’t get the vote or comments on any of them. See GitHub issues #5283, #3448 and #2004.
I actually don’t know, you’d need to ask someone privy to design decisions made with ActivityPub, like Prodromou or Lemmer-Webber. It’s definitely not to avoid making it part of the protocol, because it already is (see the link in the last comment).
No, the https://www.w3.org/ns/activitystreams#Public
is just there to indicate that it’s ok for receiving instances to display this publicly, nothing actually gets sent to it. See the spec for more details.
alice from A makes a post “Hello, world” to B
Alice can’t make a post to B, but I assume you mean a community on B, let’s call it foo. When Alice makes a post it first goes through A’s local API and creates the local (and canonical) version of Alice’s post. Once A has finished processing Alice’s post, it will create an ActivityPub representation of Alice’s post to send to B.
ActivityPub is basically a bunch of assumptions laid on top of JSON. An ActivityPub ‘file’ can be divided into broadly 3 types, Object
, Activity
and actors.[1] These types then have subtypes; for example, both Alice and foo are actors but Alice is a Person
while foo is a Group
.
A second important assumption of ActivityPub is the concept of inboxs and outboxs, but, for Lemmy, only inboxs matter. An inbox is just a URL where Lemmy can send activities and it’s something all actors have.
So when instance A is finished processing Alice’s post, it will turn it into a Page
object, wrap that in a Create
activity and send it foo’s inbox.
{
"@context": [
"https://join-lemmy.org/context.json",
"https://www.w3.org/ns/activitystreams"
],
"actor": "https://a/u/alice",
"type": "Create",
"to": ["https://www.w3.org/ns/activitystreams#Public"],
"cc": ["https://b/c/foo"],
"id": "https://a/activities/create/19199919009100",
"object": {
"type": "Page",
"id": "https://a/post/1",
"attributedTo": "https://a/u/alice",
"to": [
"https://b/c/foo",
"https://www.w3.org/ns/activitystreams#Public"
],
"audience": "https://b/c/main",
"name": "Hello world",
"attachment": [],
"sensitive": false,
"language": {
"identifier": "en",
"name": "English"
},
"published": "2024-12-29T15:10:51.557399Z"
}
}
.
Now instance B will then receive this and do the same kind of processing A did when Alice created the post via the API. Once it has finished, it will turn the post back into a Page
but this time wrap it in an Announce
activity. B will then look at all the actors that follow the foo (i.e. are subscribed to it) and send this Announce to all of their inboxs. Assuming a user on instance C follows foo, it will receive this Announce
and process it like A and B before it, creating the local version of Alice’s post.
Edit: I made a small mistake, I said that foo wrapped the Page
in an Announce
, when it actually wraps the Create
in an Announce
.
Technically, Activity
and actors are themselves objects, but they’re treated differently. There’s also Collection
’s which are their own type, but Lemmy doesn’t really utilise them. ↩︎
They do, at least, acknowledge this:
We recognise that this Annual Report for 2023 is arriving later than we had intended. Going forward, we plan to release our Annual Report for 2024 in Q1 of 2025, where we will establish clear and ambitious goals for 2025 and beyond. This adjusted timeline allows us to provide more timely insights and better align our reporting with our ongoing growth and development.
They don’t strip out the markdown on the bluesky side, so posts are just full of junk. Weird choice given the focus on ‘seamless’ integrated between the two.
It’s because YouTube puts a bunch of JavaScript at the start of the file (1MiB) before the opengraph tags and Lemmy only fetches the first 512 KiB (a fix was merged a couple days ago).
Girl on the left confess to the one on the right. Girl on the right then gets hit with the girder and dies (and becomes a cupid).
It was added in 0.19.6, so older instances won’t have it. Edit: read the rest of the thread and you already pointed this out, d’oh.