Skip to main content

Verified against Lemmy 0.19.20 source and federation fixtures (crates/apub), 1.0.0-beta.2 release, join-lemmy.org on 2026-10-15.

Lemmy

Lemmy is a link aggregator for the Fediverse, similar to Reddit.

Overview​

PropertyValue
LanguageRust (backend), TypeScript (frontend)
DatabasePostgreSQL
LicenseAGPL-3.0
Repositorygithub.com/LemmyNet/lemmy
Latest stable0.19.20 (2026-07-21); 1.0.0-beta.2 (2026-09-11)
Documentationjoin-lemmy.org/docs

ActivityPub Implementation​

The examples below are trimmed from Lemmy's own federation test fixtures (crates/apub/assets/lemmy, 0.19.20). For full interop details see the Lemmy compatibility guide.

Actor Types​

Person (User) at /u/{name}, and Group (Community) at /c/{name} (group.json):

{
"id": "https://enterprise.lemmy.ml/c/tenforward",
"type": "Group",
"preferredUsername": "tenforward",
"name": "Ten Forward",
"inbox": "https://enterprise.lemmy.ml/c/tenforward/inbox",
"followers": "https://enterprise.lemmy.ml/c/tenforward/followers",
"attributedTo": "https://enterprise.lemmy.ml/c/tenforward/moderators",
"featured": "https://enterprise.lemmy.ml/c/tenforward//featured",
"postingRestrictedToMods": false,
"endpoints": { "sharedInbox": "https://enterprise.lemmy.ml/inbox" }
}

name is the display title and preferredUsername the slug. Moderators are listed in the collection attributedTo points to; pinned posts are in featured.

Content Types​

Page (Post) (page.json) — the link of a link post is an attachment of type Link, not url:

{
"id": "https://enterprise.lemmy.ml/post/55143",
"type": "Page",
"attributedTo": "https://enterprise.lemmy.ml/u/picard",
"to": [
"https://enterprise.lemmy.ml/c/tenforward",
"https://www.w3.org/ns/activitystreams#Public"
],
"audience": "https://enterprise.lemmy.ml/c/tenforward",
"name": "Post title",
"content": "<p>This is a post in the /c/tenforward community</p>\n",
"mediaType": "text/html",
"source": { "content": "This is a post in the /c/tenforward community", "mediaType": "text/markdown" },
"attachment": [{ "type": "Link", "href": "https://enterprise.lemmy.ml/pictrs/image/eOtYb9iEiB.png" }],
"sensitive": false,
"language": { "identifier": "fr", "name": "Français" }
}

Note (Comment) — a Note whose inReplyTo is the post or the parent comment.

Supported Activities​

ActivityUsed for
Create / UpdatePosts (Page) and comments (Note)
Delete / Undo(Delete)Deleting and restoring content
Like / Dislike, UndoUp- and downvotes (votes carry audience)
Follow / Accept, Undo(Follow)Subscribing to a community
AnnounceThe community re-broadcasts every activity in it to its followers
Lock / Undo(Lock)Locking a post
Block / Undo(Block)Moderator bans (with target)
Add / RemoveModerators and featured (pinned) posts
FlagReports

Sources: activities/ fixtures, e.g. announce_create_page.json, lock_page.json, like_note.json.

Community Federation​

A remote user follows the Group; the community then wraps every activity posted to it in an Announce and sends it to its followers:

┌──────────────────┐ Follow ┌──────────────┐
│ lemmy.ml │◀──────────────────│ lemmy.world │
│ /c/programming │ │ (subscriber) │
└──────────────────┘ └──────────────┘
│ ▲
│ Announce(Create(Page)) │
└─────────────────────────────────────┘

Custom Extensions​

PropertyOnDescription
audiencePage, Note, activitiesThe community the content belongs to
postingRestrictedToModsGroupOnly moderators can post
featuredGroupPinned posts collection
languagePage, Note, Group{identifier, name} objects
sourcePage, Note, GroupOriginal Markdown (text/markdown)

Lemmy 0.19.20's Page type does not read commentsEnabled or stickied (older fixtures still show them); locking uses Lock and pinning uses the featured collection.

Release Status​

As of October 2026 the latest stable release is the 0.19.x series; Lemmy 1.0 is in beta (1.0.0-beta.2, September 2026) with no release date announced. 1.0 introduces API v4 (with a v3 compatibility layer for existing clients) and renames the actor_id database column to ap_id. No major federation behaviour changes have been announced; check the releases page before relying on 1.0 behaviour.

API Endpoints​

Actor Endpoints​

GET /u/{username} # Person
GET /c/{community} # Group
GET /post/{id} # Page
GET /comment/{id} # Note

Collections​

GET /c/{community}/followers
GET /c/{community}/outbox
GET /c/{community}/moderators
GET /c/{community}/featured

Voting System​

Lemmy supports both upvotes (Like) and downvotes (Dislike), each with the community as audience (like_note.json):

{
"type": "Like",
"id": "http://ds9.lemmy.ml/activities/like/fd61d070-7382-46a9-b2b7-6bb253732877",
"actor": "http://ds9.lemmy.ml/u/lemmy_alpha",
"object": "http://ds9.lemmy.ml/comment/1",
"audience": "https://enterprise.lemmy.ml/c/tenforward"
}

Mastodon only understands Like, so downvotes are invisible there.

See Also​