This specification documents miscellaneous terms used for ActivityPub and defined in the Activity Streams 2.0 namespace.

This is required.

Introduction

The first software packages that implemented the [[activitypub]] protocol federation protocol began to appear in 2018. Mastodon, a federated microblogging service, had previously implemented the OStatus protocol. It was ported over to using ActivityPub.

As it was, the Mastodon team included a number of terms that the software needed to implement Mastodon features not defined in basic ActivityPub. Some terms were proposed for inclusion in the ActivityPub specification, but weren't included because of time constraints.

In the absence of a clear extensions process, those terms were not given their own namespace or context document, but instead were defined in the default namespace for Activity Streams 2.0. They also were not given their own [[JSON-LD]] context document, instead defined in the @context property of each ActivityPub object.

The terms have been widely adopted by other ActivityPub implementations. Newer Mastodon-specific extensions have been defined in Mastodon's own namespace. The first few terms, though, remain undocumented in a formal specification.

The SocialCG at the W3C is responsible for managing resources like the ActivityPub and Activity Streams 2.0 errata and context document. Its proposed Process for Including Extensions in Activity Streams 2.0 gives a path for widely-used extension terms to be included in the context document.

The terms in this Report are good candidates for that process, but miss a few key criteria. They are not defined in their own namespace. They also miss the criteria of being well-documented, and having their own context document at a permanent URL.

Changing the namespace for the terms would change their meaning and would not be backwards compatible. So, the current report aims to fix the two latter problems. It describes a context document for the terms, and defines each of the terms in a similar way to the [[activitystreams-vocabulary]] specification.

Besides documenting these terms and giving them a path to inclusion in the Activity Streams 2.0 context document, this specification also serves as a test case for the SocialCG extension inclusion process.

Context

The terms in this document are defined in a context document that can be used in [[JSON-LD]] documents. The context document is available at https://purl.archive.org/miscellany.

To use these terms, documents should include this context URL in the @context property of the JSON-LD document.

For backwards compatibility, the context document does not define a separate namespace nor a prefix for these terms, instead falling back to the Activity Streams 2.0 defaults. If needed for disambiguation, the as: prefix defined in the Activity Streams 2.0 context document can be used.

Version-stamped URLs

Because this extension documents a finite set of historically-defined properties and types, it is unlikely that many changes will be made to the context document.

Nevertheless, to ease the use of this context for implementers with strict versioning requirements, additional URL aliases are provided with versions included. A semantic versioning strategy is used to convey the guarantees of the version number.

Version URL Notes
(latest) https://purl.archive.org/miscellany The latest version of the context is always available at this URL. Most implementers can use this URL.
1.0.0 https://purl.archive.org/miscellany/1.0.0 The exact version of the context document. The resource at this URL should be immutable. This URL is useful for implementers that need an exact, byte-wise replicable version of the document.
1.0.x https://purl.archive.org/miscellany/1.0 Backwards-compatible fixes are possible, but no additional types or properties are defined. This is useful for implementers that use multiple extensions and want to ensure that no conflicting terms are added.
1.x.x https://purl.archive.org/miscellany/1 Backwards-compatible fixes, additional types and properties are possible. This is useful for implementers that want to ensure that the properties and types they use are stable and will not change, but do not need to avoid term conflicts.

Using the version-stamped context URLs is similar to the unstamped URL.

No backwards-incompatible changes to this context are anticipated. However, if those changes were made, a new major version (2.x.x) would be added and the existing 1.x.x URLs would continue to be provided.

Types

This extension includes one object type, Hashtag.

Hashtag

URI: https://www.w3.org/ns/activitystreams#Hashtag
as:Hashtag
Hashtag
Notes:

A metadata tag used for casual categorization of content. Often, a hashtag is presented inline in content prefixed with a hash symbol, "#". See https://en.wikipedia.org/wiki/Hashtag. Examples are shown in the [[activitystreams-vocabulary]] specification under Mentions, Tags, and Other Common Social Microsyntaxes implementation notes, without a type for tag object. Original discussion in ActivityPub issue #235.

The name property MAY include an initial hash character "#".

Some processors treat Hashtag objects with the same name as equivalent, with or without the initial hash character. For example, an aggregator service may list all objects with tag items of type Hashtag with the same name together, even if their href values differ.

Despite the name, the Hashtag type MAY be used for metadata tags that are not implemented with inline microsyntax. See https://en.wikipedia.org/wiki/Tag_(metadata).

Extends: Link
Properties: Inherits all properties from Link.

Properties

This extension includes three properties: manuallyApprovesFollowers, movedTo, and sensitive.

manuallyApprovesFollowers

URI: https://www.w3.org/ns/activitystreams#manuallyApprovesFollowers
as:manuallyApprovesFollowers
manuallyApprovesFollowers
Notes: When *true*, conveys that for this actor, follow requests are not usually automatically approved, but instead are examined by a person who may accept or reject the request, at some time in the future. Setting of FALSE conveys no information and may be ignored. This information is typically used to affect display of accounts, such as showing an account as private or locked.
Domain: Object (an ActivityPub Actor)
Range: Boolean
Functional: true

movedTo

URI: https://www.w3.org/ns/activitystreams#movedTo
as:movedTo
movedTo
Notes: Signifies that an actor has been moved to a different ID. Used in Mastodon-style data portability with the Move activity; see ActivityPub Data Portability/Move Action for more details.
Domain: Object (an ActivityPub Actor)
Range: Object (an ActivityPub Actor)
Functional: true

sensitive

URI: https://www.w3.org/ns/activitystreams#sensitive
as:sensitive
sensitive
Notes: The sensitive property (a boolean) on an object indicates that some users may wish to apply discretion about viewing its content, whether due to nudity, violence, or any other likely aspects that viewers may be sensitive to. This is comparable to what is popularly called "NSFW" (Not Safe For Work) or "trigger warning" in some systems. Implementations may choose to hide content flagged with this property by default, exposed at user discretion. Original discussion in ActivityPub issue #231.
Domain: Object
Range: Boolean
Functional: true

This is required for specifications that contain normative material.