Skip to main content

Verified against Pleroma docs (docs.pleroma.social), live JSON from a Pleroma 2.10.2 server (actor, outbox, litepub-0.1.jsonld), Akkoma and Rebased forge APIs, FediDB on 2026-10-15.

Pleroma

Pleroma is a lightweight microblogging server written in Elixir, with a Mastodon-compatible client API.

Overview​

PropertyValue
LanguageElixir
DatabasePostgreSQL
LicenseAGPL-3.0
Repositorygit.pleroma.social/pleroma/pleroma
Documentationdocs.pleroma.social
Latest release2.10.2, a security release (announcements)
Accounts (FediDB, Oct 2026)~54K

Forks​

ForkDescription
AkkomaThe most active fork (v3.20.1, September 2026; ~24K accounts on FediDB). It has disabled the ActivityPub C2S write endpoints.
RebasedBackend fork maintained by Soapbox, "the recommended backend for Soapbox"

ActivityPub Implementation​

The examples below are trimmed from a live Pleroma 2.10.2 server.

Actor​

{
"@context": [
"https://www.w3.org/ns/activitystreams",
"https://pleroma.example/schemas/litepub-0.1.jsonld",
{ "@language": "und" }
],
"type": "Person",
"id": "https://pleroma.example/users/alice",
"preferredUsername": "alice",
"webfinger": "acct:alice@pleroma.example",
"inbox": "https://pleroma.example/users/alice/inbox",
"outbox": "https://pleroma.example/users/alice/outbox",
"featured": "https://pleroma.example/users/alice/collections/featured",
"discoverable": true,
"capabilities": { "acceptsChatMessages": true },
"endpoints": {
"sharedInbox": "https://pleroma.example/inbox",
"oauthRegistrationEndpoint": "https://pleroma.example/api/v1/apps",
"oauthAuthorizationEndpoint": "https://pleroma.example/oauth/authorize",
"oauthTokenEndpoint": "https://pleroma.example/oauth/token"
}
}

Pleroma serves its own JSON-LD context at /schemas/litepub-0.1.jsonld. It defines, among others, ChatMessage, EmojiReact, directMessage, listMessage, capabilities, oauthRegistrationEndpoint, and both quoteUrl and quoteUri (the latter from Fedibird's namespace).

Note​

{
"type": "Note",
"id": "https://pleroma.example/objects/22dffc91-c7df-4bc7-9e25-ed08b796b2fe",
"actor": "https://pleroma.example/users/alice",
"attributedTo": "https://pleroma.example/users/alice",
"content": "<p>Hello from Pleroma!</p>",
"source": { "content": "Hello from Pleroma!", "mediaType": "text/plain" },
"to": ["https://www.w3.org/ns/activitystreams#Public"],
"cc": ["https://pleroma.example/users/alice/followers"],
"context": "https://pleroma.example/contexts/68dcec58-05a0-4012-88b7-49e2a94f12e4",
"conversation": "https://pleroma.example/contexts/68dcec58-05a0-4012-88b7-49e2a94f12e4"
}

context and conversation carry the same thread URL. source.mediaType reflects the format the author wrote in: Pleroma's NodeInfo lists text/plain, text/html, text/markdown and text/bbcode.

Supported Extensions​

FeatureHow it federates
Emoji reactionsEmojiReact activity; advertised as pleroma_emoji_reactions in NodeInfo (docs)
ChatsChatMessage objects in a Create, addressed to exactly one actor and always private (docs); actors that accept them advertise capabilities.acceptsChatMessages
Quote postsquoteUrl / quoteUri (defined in the LitePub context)
Local-only postslocal visibility; such posts are not federated (docs)
Media uploaduploadMedia actor endpoint, a C2S extension (docs)

Chat Message​

From Pleroma's AP extensions docs:

{
"type": "Create",
"actor": "http://2hu.gensokyo/users/raymoo",
"id": "http://2hu.gensokyo/objects/1",
"object": {
"type": "ChatMessage",
"id": "http://2hu.gensokyo/objects/2",
"attributedTo": "http://2hu.gensokyo/users/raymoo",
"content": "You expected a cute girl? Too bad.",
"published": "2020-02-12T14:08:20Z",
"to": ["http://2hu.gensokyo/users/marisa"]
},
"to": ["http://2hu.gensokyo/users/marisa"]
}

Client-to-Server (C2S)​

Pleroma has partial ActivityPub C2S support: its actors advertise OAuth endpoints and uploadMedia, and its client list names AndStatus as an ActivityPub C2S client. Most Pleroma clients use the Mastodon-compatible API instead. The Akkoma fork has disabled the C2S write endpoints.

API Endpoints​

GET /.well-known/webfinger
GET /.well-known/nodeinfo
GET /users/{nickname}
GET /objects/{uuid}
GET /contexts/{uuid}
POST /inbox # shared inbox
POST /users/{nickname}/inbox

Compatibility With Mastodon​

  • Mastodon has no emoji reactions, so EmojiReact is not shown there (Mastodon 4.7.3 handlers)
  • ChatMessage is not understood by Mastodon; check capabilities.acceptsChatMessages before sending one
  • Mastodon's quote posts use the consent-based FEP-044f flow, not quoteUrl

See Also​