# orderedItems[].object.content
5/

So, not just Decentralized Social (DeSo), but instead —

Decentralized Social (DeSo), Federated Social (FeSo), Localized Social (LoSo)

The goal is 'social' that is simultaneously — 'Decentralized', 'Federated', and 'Localized', all at the same time.

RE: https://mastodon.social/@reiver/114551 725757671167

#ActivityPub #ActivityStreams #Decentralization #DeSo #Federation #FeSo #Fediverse #governance #Localization #LoSo

# orderedItems[].object.ephemeral.metadata[].description
Decentralized Social (DeSo), Federated Social (FeSo), Localized Social (LoSo)


RE: https://mastodon.social/@reiver/114406141298522537

# orderedItems[].object.ephemeral.metadata[].ogDescription
Decentralized Social (DeSo), Federated Social (FeSo), Localized Social (LoSo)


RE: https://mastodon.social/@reiver/114406141298522537

# orderedItems[].object.content
4/

Federation is the word we use to describe that act of bringing together and connecting these separate Decentralized, Localized communities.

This is where protocols such as ActivityPub, ActivityStreams, etc come into play.

Federation is a voluntary choice.
But, so too is Defederation, if desired.

#ActivityPub #ActivityStreams #Decentralization #DeSo #Federation #FeSo #Fediverse #governance #Localization #LoSo

# orderedItems[].object.summary
From its conception, #Enigmatick has leaned heavily on the `inbox` and `outbox` endpoints for client operations. [...]

# orderedItems[].object.content
From its conception, #Enigmatick has leaned heavily on the /inbox and /outbox endpoints for client operations. There are some /api endpoints, but I avoid that were I can shoehorn operations into the #ActivityPub specification and #ActivityStreams vocabulary.

While typical operational activities are fairly well accounted for, administration is a weak point. For example: I haven't identified a clear way to use the currently described mechanisms for an administrative user to pull up and manage instances or actors on a server.

I've relied on CLI tools (e.g., ./enigmatick --help) to manage some of that. And in some cases, I know how to manipulate data in my database, so I haven't worried too much about building tooling. But I'd like to ship something that other folks can use to share in my efforts, so I've been thinking about how to model those activities in an ActivityPub-esque way to use in the Svelte UI.

ActivityPub Messages

To that end, I'm now using Block and Delete activities sent from the client to the server outbox to manage the blocking of instances and purging of data.

{
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    {
      "ek": "https://enigmatick.social/ns#",
      "Instance": "ek:Instance"
    }
  ],
  "id": "https://enigmatick.social/activities/550e8400-e29b-41d4-a716-446655440000",
  "type": "Block",
  "actor": "https://enigmatick.social/user/system",
  "object": {
    "type": "Instance",
    "id": "https://spammy-instance.example"
  }
}

In practice, my client does not generate the id, but that attribute is generated by the server and the Activity is stored alongside other typically federated activities. These local Block activities are not federated out to other servers; they are intended solely for local server management.

The Block activity is sent as a message signed at the client by a user with administrative privileges on the server. Enigmatick's user authentication is unique (i.e., I use a separate set of encryption keys for client-signing executed by a wasm module in the browser). That can be a topic for a future article.

That the actor is defined as the system Application user is important. That's used by the server to establish the scope of this action as system-wide, not just for a single user. The system actor is discoverable in the nodeinfo metadata.

I'm using a typed object rather than just an id reference. This is so that I can use this same flow for blocking and purging Actor objects (i.e., the type would be Person, Service, or Application).

The purge action is similar, using the Delete activity.

{
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    {
      "ek": "https://enigmatick.social/ns#",
      "Instance": "ek:Instance"
    }
  ],
  "id": "https://enigmatick.social/activities/550e8400-e29b-41d4-a716-446655440000",
  "type": "Delete",
  "actor": "https://enigmatick.social/user/system",
  "object": {
    "type": "Instance",
    "id": "https://spammy-instance.example"
  }
}

The term, "delete" is a bit of a misnomer in this case as it applies to the instance specifically. The instance will remain, but the objects, activities, and actors associated with that instance will be fully deleted (i.e., not set to Tombstone).

Collection Endpoints

To facilitate the UI operations, I've created two new collection endpoints on my server: /instances and /actors. These endpoints provide typical ActivityPub Collection objects.

{
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    {
      "Instance": "ek:Instance",
      "activitiesCount": "ek:activitiesCount",
      "actorsCount": "ek:actorsCount",
      "blocked": "ek:blocked",
      "ek": "https://enigmatick.social/ns#",
      "lastMessageAt": "ek:lastMessageAt",
      "objectsCount": "ek:objectsCount"
    }
  ],
  "type": "OrderedCollection",
  "id": "https://enigmatick.social/instances",
  "totalItems": 7702,
  "orderedItems": [
    {
      "type": "Instance",
      "id": "https://example-instance.name",
      "blocked": false,
      "created": "2025-12-16T16:56:33Z",
      "lastMessageAt": "2025-12-16T16:56:33Z",
      "actorsCount": 0,
      "objectsCount": 1,
      "activitiesCount": 0
    }
  ],
  "first": "https://enigmatick.social/instances?max=9223372036854775807",
  "last": "https://enigmatick.social/instances?min=0",
  "next": "https://enigmatick.social/instances?max=1765657395402834"
}

I've added some extensions in the @context to account for a few non-standard attributes.

That collection is used by the UI.

Collection Discovery

nodeinfo is a common protocol used for discovering information about ActivityPub-speaking servers. I've extended my use of that to facilitate client-discovery of these new endpoints using the metadata object contained in the nodeinfo JSON.

"metadata": {
  "actor": "https://enigmatick.social/user/system",
  "adminActors": "https://enigmatick.social/actors",
  "adminInstances": "https://enigmatick.social/instances",
  "domain": "enigmatick.social",
  "url": "https://enigmatick.social"
}

Final Thoughts

As I'm reading through this, I see some opportunities for refinement. I should probably be using OrderedCollectionPage instead of OrderedCollection for my collection endpoints. I'm sure there are other tweaks to be made.

# orderedItems[].object.source.content
From its conception, #Enigmatick has leaned heavily on the `/inbox` and `/outbox` endpoints for client operations. There are some `/api` endpoints, but I avoid that were I can shoehorn operations into the #ActivityPub specification and #ActivityStreams vocabulary.

While typical operational activities are fairly well accounted for, administration is a weak point. For example: I haven't identified a clear way to use the currently described mechanisms for an administrative user to pull up and manage instances or actors on a server.

I've relied on CLI tools (e.g., `./enigmatick --help`) to manage some of that. And in some cases, I know how to manipulate data in my database, so I haven't worried too much about building tooling. But I'd like to _ship_ something that other folks can use to share in my efforts, so I've been thinking about how to model those activities in an ActivityPub-esque way to use in the Svelte UI.

## ActivityPub Messages

To that end, I'm now using `Block` and `Delete` activities sent from the client to the server `outbox` to manage the blocking of instances and purging of data.

```json
{
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    {
      "ek": "https://enigmatick.social/ns#",
      "Instance": "ek:Instance"
    }
  ],
  "id": "https://enigmatick.social/activities/550e8400-e29b-41d4-a716-446655440000",
  "type": "Block",
  "actor": "https://enigmatick.social/user/system",
  "object": {
    "type": "Instance",
    "id": "https://spammy-instance.example"
  }
}
```

In practice, my client does not generate the `id`, but that attribute is generated by the server and the `Activity` is stored alongside other typically federated activities. These local `Block` activities are not federated out to other servers; they are intended solely for local server management.

The `Block` activity is sent as a message signed at the client by a user with administrative privileges on the server. Enigmatick's user authentication is unique (i.e., I use a separate set of encryption keys for client-signing executed by a `wasm` module in the browser). That can be a topic for a future article.

That the `actor` is defined as the system `Application` user is important. That's used by the server to establish the scope of this action as system-wide, not just for a single user. The system actor is discoverable in the `nodeinfo` metadata.

I'm using a typed object rather than just an `id` reference. This is so that I can use this same flow for blocking and purging `Actor` objects (i.e., the `type` would be `Person`, `Service`, or `Application`).

The purge action is similar, using the `Delete` activity.

```json
{
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    {
      "ek": "https://enigmatick.social/ns#",
      "Instance": "ek:Instance"
    }
  ],
  "id": "https://enigmatick.social/activities/550e8400-e29b-41d4-a716-446655440000",
  "type": "Delete",
  "actor": "https://enigmatick.social/user/system",
  "object": {
    "type": "Instance",
    "id": "https://spammy-instance.example"
  }
}
```
The term, "delete" is a bit of a misnomer in this case as it applies to the instance specifically. The instance will remain, but the `objects`, `activities`, and `actors` associated with that instance will be fully deleted (i.e., not set to `Tombstone`).

## Collection Endpoints

To facilitate the UI operations, I've created two new collection endpoints on my server: `/instances` and `/actors`. These endpoints provide typical ActivityPub `Collection` objects.

```json
{
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    {
      "Instance": "ek:Instance",
      "activitiesCount": "ek:activitiesCount",
      "actorsCount": "ek:actorsCount",
      "blocked": "ek:blocked",
      "ek": "https://enigmatick.social/ns#",
      "lastMessageAt": "ek:lastMessageAt",
      "objectsCount": "ek:objectsCount"
    }
  ],
  "type": "OrderedCollection",
  "id": "https://enigmatick.social/instances",
  "totalItems": 7702,
  "orderedItems": [
    {
      "type": "Instance",
      "id": "https://example-instance.name",
      "blocked": false,
      "created": "2025-12-16T16:56:33Z",
      "lastMessageAt": "2025-12-16T16:56:33Z",
      "actorsCount": 0,
      "objectsCount": 1,
      "activitiesCount": 0
    }
  ],
  "first": "https://enigmatick.social/instances?max=9223372036854775807",
  "last": "https://enigmatick.social/instances?min=0",
  "next": "https://enigmatick.social/instances?max=1765657395402834"
}
```
I've added some extensions in the `@context` to account for a few non-standard attributes.

That collection is used by the UI.

![The Enigmatick instances UI showing the most recently discovered instances from the enigmatick.social server](https://enigmatick.social/media/uploads/3c327280-2358-468a-bea9-b77d9f016ebb.png)

## Collection Discovery

`nodeinfo` is a common protocol used for discovering information about ActivityPub-speaking servers. I've extended my use of that to facilitate client-discovery of these new endpoints using the `metadata` object contained in the `nodeinfo` JSON.

```json
"metadata": {
  "actor": "https://enigmatick.social/user/system",
  "adminActors": "https://enigmatick.social/actors",
  "adminInstances": "https://enigmatick.social/instances",
  "domain": "enigmatick.social",
  "url": "https://enigmatick.social"
}
```
## Final Thoughts

As I'm reading through this, I see some opportunities for refinement. I should probably be using `OrderedCollectionPage` instead of `OrderedCollection` for my collection endpoints. I'm sure there are other tweaks to be made.

# orderedItems[].object.attachment[].name
The Enigmatick instances UI showing the most recently discovered instances from the enigmatick.social server

# orderedItems[].object.content
1/

[Fediverse BackUp]

Could an ActivityPub / ActivityStreams file be a "good" format for backing up a post?

(I.e., what I call an "Activity File". I.e., the file that has a media-type of "application/activity+json".)

...

#ActivityPub #ActivityStreams #BackUp #BackUps #FediBackUp #FediDev #FediDevs #Fediverse

# orderedItems[].object.content
If you're trying to dereference all RDF namespaces found in the #ActivityStreams JSON-LD document you must first download the internet.

Now downloading google.com...

#ActivityPub #ActivityPubDev

# orderedItems[].object.content
I wish there was a facility (native or in any app, ideally as part of the #ActivityStreams objects) where I could make #notes on #toots, like we can make notes about particular accounts.

I have a bunch of stuff #bookmarked; I have a tool that exports and sorts my bookmarks.. but by the time I get around to curating them, half the time I can't remember why I bookmarked something.

# orderedItems[].object.content
"＠context": [
"https://www. w3.org/ns/activitystreams",
{
"Quotation": "as:Quotation",
"citation": "as:citation",
"quotation": "as:quotation"
},
],

#ActivityPub #ActivityStreams #FediDev #Fediverse #JSONLD #ObjectTypeQuotation #retejo

# orderedItems[].object.ephemeral.metadata[].description
This document lists the terms used for the ActivityStreams 2.0 protocol and its stable extensions, and provides a namespace so each term has an HTTP IRI.

# orderedItems[].object.content
4/

Apparently, Bookwyrm stores quotations with:

type="Quotation"

And if one Bookwyrm server talks to another Bookwyrm server, then — the ActivityPub / ActivityStreams representation of the quotation will have:

type="Quotation"

...

BUT — if a non-Bookwyrm server talks to a Bookwyrm server, then — the ActivityPub / ActivityStreams representation of the quotation will have:

type="Note"

#ActivityPub #ActivityStreams #FediDev #Fediverse #ObjectTypeNote #ObjectTypeQuotation #retejo

# orderedItems[].object.content
3/

Apparently the Bookwyrm developer had the exact same idea!

(Which isn't too surprising.)

Here is how it works —

...

#ActivityPub #ActivityStreams #FediDev #Fediverse #ObjectTypeNote #ObjectTypeQuotation #retejo

# orderedItems[].object.content
2/

How could you represent a quotation in ActivityPub‽

...

I suppose there are 2 major approaches.

Either use an existing Object Type. Maybe:

type="Note"

Or create a new Object Type:

type="Quotation"

...

Here is the interesting thing though —

#ActivityPub #ActivityStreams #FediDev #Fediverse #ObjectTypeNote #ObjectTypeQuotation #retejo

# orderedItems[].object.content
Quotations & the Fediverse / ActivityPub

1/

One thing I used to do a lot on social-media is — post quotations.

Sometimes I was reading a book. And, I would quote things from the book and post it on social-media.

Or I was reading a scholarly paper, or reading a blog post, or watching a video, or listening to a podcast, etc.

...

I was thinking — how could you represent a quotation in ActivityPub‽

#ActivityPub #ActivityStreams #FediDev #Fediverse #ObjectTypeNote #ObjectTypeQuotation #retejo

# orderedItems[].object.content
1/

I have spending time thinking of ways you could automatically create ActivityPub / ActivityStreams data from HTML and Markdown

Most people will probably write in plain UTF-8 text, or Markdown, or HTML

How to do you take that and get it onto the Fediverse and Social Web‽

This isn't just a question of how to technically do it — but also a question of user-experience (UX)

I.e., what are "good" ways of doing it‽

...

#ActivityPub #ActivityStreams #FediDev #Fediverse #Markdown #retejo #RDFa

# orderedItems[].object.content
1/

If you are curious about where the "Retejo" name comes from —

The way the name "retejo" was chosen was inspired by how the name "forgejo" chosen.

...

RE: https://mastodon.social/@reiver/115203 527761462559

#ActivityPub #ActivityStreams #codeberg #forgejo #GeminiProtocol #gitea #markdown #retejo #SmallNet #SmallWeb #StaticSite #StaticWeb #StaticWebSite

# orderedItems[].object.ephemeral.metadata[].description
1/

Probably the biggest thing that motivated me to create Retejo now (as I've had the idea for this for a number of year) is —

...

RE: https://mastodon.social/@reiver/115203482817088160

#ActivityPub #ActivityStreams #codeberg #forgejo #GeminiProtocol #gitea #markdown #retejo #SmallNet #SmallWeb #StaticSite #StaticWeb #StaticWebSite

# orderedItems[].object.ephemeral.metadata[].ogDescription
1/

Probably the biggest thing that motivated me to create Retejo now (as I've had the idea for this for a number of year) is —

...

RE: https://mastodon.social/@reiver/115203482817088160

#ActivityPub #ActivityStreams #codeberg #forgejo #GeminiProtocol #gitea #markdown #retejo #SmallNet #SmallWeb #StaticSite #StaticWeb #StaticWebSite

# orderedItems[].object.content
1/

Probably the biggest thing that motivated me to create Retejo now (as I've had the idea for this for a number of year) is —

...

RE: https://mastodon.social/@reiver/115203 482817088160

#ActivityPub #ActivityStreams #codeberg #forgejo #GeminiProtocol #gitea #markdown #retejo #SmallNet #SmallWeb #StaticSite #StaticWeb #StaticWebSite

# orderedItems[].object.ephemeral.metadata[].description
1/

Another motivation for creating Retejo is this:

https://mastodon.social/@reiver/114076598430655105

I want to be able to write long-form articles using whatever text-editor I choose to use, editing a file, and using git.

Not everyone will want to create long-form content this way — but I want to create long-form content this way.

...

RE: https://mastodon.social/@reiver/115203416378004810

#ActivityPub #ActivityStreams #codeberg #forgejo #GeminiProtocol #gitea #markdown #retejo #SmallNet #SmallWeb #StaticSite #StaticWeb #StaticWebSite

# orderedItems[].object.ephemeral.metadata[].ogDescription
1/

Another motivation for creating Retejo is this:

https://mastodon.social/@reiver/114076598430655105

I want to be able to write long-form articles using whatever text-editor I choose to use, editing a file, and using git.

Not everyone will want to create long-form content this way — but I want to create long-form content this way.

...

RE: https://mastodon.social/@reiver/115203416378004810

#ActivityPub #ActivityStreams #codeberg #forgejo #GeminiProtocol #gitea #markdown #retejo #SmallNet #SmallWeb #StaticSite #StaticWeb #StaticWebSite

# orderedItems[].object.content
1/

Another motivation for creating Retejo is this:

https://mastodon.social/@reiver/114076 598430655105

I want to be able to write long-form articles using whatever text-editor I choose to use, editing a file, and using git.

Not everyone will want to create long-form content this way — but I want to create long-form content this way.

...

RE: https://mastodon.social/@reiver/115203 416378004810

#ActivityPub #ActivityStreams #codeberg #forgejo #GeminiProtocol #gitea #markdown #retejo #SmallNet #SmallWeb #StaticSite #StaticWeb #StaticWebSite

# orderedItems[].object.ephemeral.metadata[].description
I want to be able to write long-form articles using whatever text-editor I choose to use, editing a file, and using git

Not everyone will want to create long-form content this way — but I want to create long-form content this way

Also I don't just want to put the long-form content on some web-site, and post the URL from my Mastodon account

I want the long-form content to be a first-class ActivityStreams / ActivityPub object. An "Article" or a "Note" if I have to

#DeSo #Fediverse #FediverseUX

# orderedItems[].object.ephemeral.metadata[].ogDescription
I want to be able to write long-form articles using whatever text-editor I choose to use, editing a file, and using git

Not everyone will want to create long-form content this way — but I want to create long-form content this way

Also I don't just want to put the long-form content on some web-site, and post the URL from my Mastodon account

I want the long-form content to be a first-class ActivityStreams / ActivityPub object. An "Article" or a "Note" if I have to

#DeSo #Fediverse #FediverseUX

# orderedItems[].object.ephemeral.metadata[].description
1/

One of my other passions, in addition to the Fediverse and Social Web, is — small-net.

One of the popular protocols in small-net is — the Gemini-Protocol.

https://geminiprotocol.net/

...

RE: https://mastodon.social/@reiver/115203390761929242

#ActivityPub #ActivityStreams #codeberg #forgejo #GeminiProtocol #gitea #markdown #retejo #SmallNet #SmallWeb #StaticSite #StaticWeb #StaticWebSite

# orderedItems[].object.ephemeral.metadata[].ogDescription
1/

One of my other passions, in addition to the Fediverse and Social Web, is — small-net.

One of the popular protocols in small-net is — the Gemini-Protocol.

https://geminiprotocol.net/

...

RE: https://mastodon.social/@reiver/115203390761929242

#ActivityPub #ActivityStreams #codeberg #forgejo #GeminiProtocol #gitea #markdown #retejo #SmallNet #SmallWeb #StaticSite #StaticWeb #StaticWebSite

# orderedItems[].object.content
1/

One of my other passions, in addition to the Fediverse and Social Web, is — small-net.

One of the popular protocols in small-net is — the Gemini-Protocol.

https://geminiprotocol.net/

...

RE: https://mastodon.social/@reiver/115203 390761929242

#ActivityPub #ActivityStreams #codeberg #forgejo #GeminiProtocol #gitea #markdown #retejo #SmallNet #SmallWeb #StaticSite #StaticWeb #StaticWebSite

# orderedItems[].object.ephemeral.metadata[].description
Retejo

I have been working on a new type of web-server for serving static web-sites.

I started working on it recently — on August 23rd. But, have had the idea for it for a number of years.

...

What is different about this web-server for static web-sites‽

Well, of course, it supports HTML.

But, it also supports Markdown, and ActivityPub natively!

https://codeberg.org/reiver/retejo

#ActivityPub #ActivityStreams #codeberg #forgejo #gitea #markdown #retejo #StaticSite #StaticWeb #StaticWebSite

# orderedItems[].object.ephemeral.metadata[].ogDescription
Retejo

I have been working on a new type of web-server for serving static web-sites.

I started working on it recently — on August 23rd. But, have had the idea for it for a number of years.

...

What is different about this web-server for static web-sites‽

Well, of course, it supports HTML.

But, it also supports Markdown, and ActivityPub natively!

https://codeberg.org/reiver/retejo

#ActivityPub #ActivityStreams #codeberg #forgejo #gitea #markdown #retejo #StaticSite #StaticWeb #StaticWebSite

# orderedItems[].object.content
Retejo

I have been working on a new type of web-server for serving static web-sites.

I started working on it recently — on August 23rd. But, have had the idea for it for a number of years.

...

What is different about this web-server for static web-sites‽

Well, of course, it supports HTML.

But, it also supports Markdown, and ActivityPub natively!

https://codeberg.org/reiver/retejo

#ActivityPub #ActivityStreams #codeberg #forgejo #gitea #markdown #retejo #StaticSite #StaticWeb #StaticWebSite

# orderedItems[].object.ephemeral.metadata[].description
retejo - retejo provides an HTTP web-site for one forgejo users. A popular forgejo instance server is codeberg. Thus, retejo works with codeberg.You can think of this as an alternative to Codeberg Pages and GitHub Pages.

# orderedItems[].object.ephemeral.metadata[].ogDescription
retejo provides an HTTP web-site for one forgejo users. A popular forgejo instance server is codeberg. Thus, retejo works with codeberg.You can think of this as an alternative to Codeberg Pages and GitHub Pages.

# orderedItems[].object.content
Today I discovered an interesting inconsistency in Activity Streams specs while investigating a Fedify issue.

The question: How should we interpret URLs like "icon": "https://example.com/avatar.png"?

JSON-LD context (https://www.w3.org/ns/activitystreams): @type: "@id" → “This is an IRI reference, dereference it to fetch an ActivityStreams object.”

Activity Streams Primer: “assume that a bare string is the href of a Link object, not an id” (no dereferencing)

Result: JSON-LD processor-based implementations try to parse PNG files as JSON and fail.

Turns out w3c/activitystreams#595 already discusses the same issue for href properties. I added a note that icon, image, etc. have the same problem.

Once again reminded of how tricky spec work can be…

#ActivityPub #Fedify #ActivityStreams #fedidev #specifications

# orderedItems[].object.ephemeral.metadata[].twitterTitle
Fedify fails to handle URL strings for `icon` property · Issue #420 · fedify-dev/fedify

# orderedItems[].object.ephemeral.metadata[].description
Summary Fedify throws a JSON parsing error when processing ActivityPub objects where the icon property is a URL string instead of an Image object. This is valid according to ActivityStreams 2.0 specification but causes getIcon() to fail....

# orderedItems[].object.ephemeral.metadata[].ogDescription
Summary Fedify throws a JSON parsing error when processing ActivityPub objects where the icon property is a URL string instead of an Image object. This is valid according to ActivityStreams 2.0 spe...

# orderedItems[].object.ephemeral.metadata[].ogTitle
Fedify fails to handle URL strings for `icon` property · Issue #420 · fedify-dev/fedify

# orderedItems[].object.ephemeral.metadata[].twitterDescription
Summary Fedify throws a JSON parsing error when processing ActivityPub objects where the icon property is a URL string instead of an Image object. This is valid according to ActivityStreams 2.0 spe...

# orderedItems[].object.ephemeral.metadata[].description
This document lists the terms used for the ActivityStreams 2.0 protocol and its stable extensions, and provides a namespace so each term has an HTTP IRI.

# orderedItems[].object.ephemeral.metadata[].twitterTitle
`href` should be `@type: xsd:anyURI` in the context document · Issue #595 · w3c/activitystreams

# orderedItems[].object.ephemeral.metadata[].description
w3c/activitypub#375 (comment) In the AS2-Vocab normative recommendation, href is defined to always be xsd:anyURI In the AS2 context document, it is not defined as such Conclusion: Make the context document consistent with the normative spec

# orderedItems[].object.ephemeral.metadata[].ogDescription
w3c/activitypub#375 (comment) In the AS2-Vocab normative recommendation, href is defined to always be xsd:anyURI In the AS2 context document, it is not defined as such Conclusion: Make the context ...

# orderedItems[].object.ephemeral.metadata[].ogTitle
`href` should be `@type: xsd:anyURI` in the context document · Issue #595 · w3c/activitystreams

# orderedItems[].object.ephemeral.metadata[].twitterDescription
w3c/activitypub#375 (comment) In the AS2-Vocab normative recommendation, href is defined to always be xsd:anyURI In the AS2 context document, it is not defined as such Conclusion: Make the context ...

# orderedItems[].object.ephemeral.metadata[].twitterTitle
`href` should be `@type: xsd:anyURI` in the context document · Issue #595 · w3c/activitystreams

# orderedItems[].object.ephemeral.metadata[].description
w3c/activitypub#375 (comment) In the AS2-Vocab normative recommendation, href is defined to always be xsd:anyURI In the AS2 context document, it is not defined as such Conclusion: Make the context document consistent with the normative spec

# orderedItems[].object.ephemeral.metadata[].ogDescription
w3c/activitypub#375 (comment) In the AS2-Vocab normative recommendation, href is defined to always be xsd:anyURI In the AS2 context document, it is not defined as such Conclusion: Make the context ...

# orderedItems[].object.ephemeral.metadata[].ogTitle
`href` should be `@type: xsd:anyURI` in the context document · Issue #595 · w3c/activitystreams

# orderedItems[].object.ephemeral.metadata[].twitterDescription
w3c/activitypub#375 (comment) In the AS2-Vocab normative recommendation, href is defined to always be xsd:anyURI In the AS2 context document, it is not defined as such Conclusion: Make the context ...

# orderedItems[].object.content
A reasonable ActivityPub / ActivityStreams API to schedule something to be posted in the future might be — to HTTP POST something to an account's outbox with the `published` field set to a date-time in the future.

#ActivityPub #ActivityStreams #DeSo #FediDev #FediDevs #Fediverse

# orderedItems[].object.content
Currently, the way I am determining if content is valid ActivityPub / ActivityStreams content is —

№1:

Determining if it is valid JSON.

№2:

Checking if it has a "type" field.

And that is it.

#ActivityPub #ActivityStreams #DeSo #FediDev #FediDevs #Fediverse #JSONLD