FEP-de8d: Emoji Catalogs

This FEP introduces Emoji Catalog, which provide a way for both clients and servers to publish and discover custom emoji.

ActivityPub implementations, including Mastodon, commonly support custom emoji. FEP-9098 defines how an Emoji is embedded in an Activity Streams object, but it does not define how a client discovers the emoji available for use when composing new content.

This leads to ActivityPub clients relying on implementation-specific APIs such as the Mastodon custom emoji endpoint.

A standardized emoji catalog allows a C2S client to:

  • Populate an emoji picker.
  • Determine which emoji the authenticated actor may use.
  • Retrieve emoji categories and static previews.
  • Update its local cache when the catalog changes.

Additionally, a standardized emoji catalog allows servers to publish custom emoji that other ActivityPub implementations can discover reliably.

Read full FEP at https://codeberg.org/fediverse/fep/pulls/888

Summary card of an issue titled "Add FEP-de8d: Emoji Catalogs" in repository fediverse/fepCodeberg.orgAdd FEP-de8d: Emoji CatalogsThis FEP introduces Emoji Catalog, which provide a way for both clients and servers to publish and discover custom emoji. ActivityPub implementations, including Mastodon, commonly support custom emoji. FEP-9098 defines how an Emoji is embedded in an Activity Streams object, but it does not def...

Replying to @⁨reesericci@socialhub.activitypub.rocks⁩

A standardized emoji catalog allows a C2S client to ...

But the proposal doesn't fully explain how to do that. In particular:

- How catalogs are created? (I wrote a FEP that provides some recommendations, FEP-9f9f: Collections)
- What activities are used to update a catalog?

Summary card of repository fediverse/fep, described as: Fediverse Enhancement ProposalsCodeberg.orgfep/fep/9f9f/fep-9f9f.md at mainfep - Fediverse Enhancement Proposals

Replying to @⁨reesericci@socialhub.activitypub.rocks⁩

The collections would be created by the server with no user/external input, it should just exist - the way outboxes "exist"

I suggest adding this requirement to the FEP. Some server implementations don't contain application-specific logic, and only support explicit creation of collections.

Using standard AP C2S?

Not necessarily. Any kind of C2S that results in activities being added to outbox.

Create for new emojis, Add to append, Remove to remove, Delete to delete an emoji entirely.
This is already specified in the AP spec.

I think this could also be clarified in the FEP. For example, an alternative to this is Update(Collection) activity.

Create for new emojis, Add to append, Remove to remove, Delete to delete an emoji entirely.

What should a client put in their to and cc fields?

Replying to an earlier post

I'm really not sold here on adding this to the FEP when all of this is specified in the ActivityPub specification - people just don't use it when it comes to C2S. Managing collections is a core part of the spec.

I guess I see an argument for specifying that emoji catalogs should be a "well known" collection provided by the server, but isn't that the standard for collections? User-created collections aren't specified in the ActivityPub spec.

Replying to @⁨reesericci@socialhub.activitypub.rocks⁩

ActivityPub doesn't explain how collections are created or updated (it only mentions side effects of certain activities that affect collections). You can skip all of that and state that emoji catalog is server-managed. However, in that case the sentence "A standardized emoji catalog allows a C2S client to" wouldn't make sense.

Edited ⁨⁨Jul⁩ ⁨26⁩, ⁨2026⁩, ⁨16:51⁩⁩

Replying to @⁨reesericci@socialhub.activitypub.rocks⁩

There are at least 3 ways to update a collection:

- Add, Remove and Move activities.
- Update activity.
- Side effect of another activity (for example, AddEmoji).

Similarly, there are many ways to create a collection. Creating a collection during the registration of an actor is a valid option, but it is not the only one.

Other important details: addressing, authorization.

Replying to @⁨reesericci@socialhub.activitypub.rocks⁩

If you prefer catalogs to be created by a server, then I would add this sentence to section "Catalog":

The emoji catalog MUST be represented as an Activity Streams Collection, which contains FEP-9098 Emoji objects. The server creates this collection when an actor is registered.

These sentences could be added to the "Updates" section:

Adding an emoji to an actor-specific catalog means that the emoji is available for use by that actor in newly created content. Emojis are added using Add activities where the target is an emoji catalog.

Removing an emoji from an actor-specific catalog means that the emoji is no longer available for use by that actor in newly created content. Emojis are removed using Remove activities where the target is an emoji catalog.

Examples of Add and Remove activities could be added as well.

-----

@boiert I prefer specific activities (AddEmoji), rather than generic operations (Add), but that's a discussion for another thread.