Vibefed kb-kbin

install
source · Clone the upstream repo
git clone https://github.com/reiver/vibefed
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/reiver/vibefed "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/kb-kbin" ~/.claude/skills/reiver-vibefed-kb-kbin && rm -rf "$T"
manifest: skills/kb-kbin/SKILL.md
source content

Kbin / Mbin — Complete Reference

Overview

Kbin (stylized /kbin) was a decentralized content aggregator and microblogging platform for the Fediverse — a Reddit + Mastodon hybrid. Created by Ernest Wiśniewski (Polish developer) with development becoming serious in early 2023, the flagship instance kbin.social launched in April 2023. The project received NLnet funding (NGI0 Entrust Fund, December 2022).

Kbin is now discontinued. Its active community fork Mbin (founded October 2023 by Melroy van den Berg) continues development with significant improvements to federation, performance, and governance. When this document says "Kbin/Mbin," the information applies to both; Mbin-specific features are noted.

Kbin's key differentiator from Lemmy: it combines two content models in one platform — Reddit-style link aggregation (threads organized into magazines) and Mastodon-style microblogging (short-form posts). This dual nature enables stronger integration with microblogging platforms like Mastodon.

Licensed AGPL-3.0. Built with PHP/Symfony/PostgreSQL.


1. Technology Stack

ComponentTechnology
BackendPHP 8.2+
FrameworkSymfony
DatabasePostgreSQL
Message queueRabbitMQ
CacheRedis / KeyDB / Valkey
Real-timeMercure (optional)
FrontendTwig templates, SCSS, JavaScript
Image processingGD or ImageMagick
Web serverNginx, Apache, or Caddy
DeploymentDocker / Docker Compose
LicenseAGPL-3.0

Language Breakdown

  • PHP: 86.3%
  • Twig: 9.4%
  • SCSS: 2.5%
  • JavaScript: 1.6%

Development Tools

  • PHPUnit (testing), PHPStan (static analysis), Psalm (security scanning), Composer (dependencies), API Platform (API generation)

2. Content Model

Magazines

The primary organizational unit — equivalent to subreddits (Reddit), communities (Lemmy), or topics (PieFed). Any registered user can create a magazine and automatically becomes its owner with administrative tools including moderator appointment.

Content Types

TypeDescriptionAP Object
Thread (link)External links and articles with titles
Page
Thread (text)Self-text discussion posts with titles
Page
MicroblogShort-form posts (like Mastodon)
Note
CommentReplies to threads or microblogs
Note
(with
inReplyTo
)
Private messageDirect messages between users
ChatMessage
(custom)

The dual content model is what distinguishes Kbin/Mbin from Lemmy. Threads work like Reddit posts (link or self-text with a title, displayed in a list). Microblogs work like Mastodon posts (short-form, displayed in a stream). Both coexist within each magazine.

Voting

  • Upvote — positive engagement, federated as
    Like
    activity
  • Downvote ("Reduce") — negative engagement, local only — does NOT federate
  • Boost — reshare/reblog, federated as
    Announce
    activity

The non-federation of downvotes is a critical interoperability detail. Lemmy federates downvotes via

Dislike
; Kbin/Mbin does not send them. Downvotes from Kbin/Mbin users are only visible on the local instance.

Reputation

Users accumulate reputation points from boosts and favourites on their content. Reputation is cosmetic only — visible on profile pages but has no functional effect (does not gate features or permissions).

Content Organization

  • Follow magazines, users, or entire domains
  • Block users, magazines, or domains
  • Content categorized by tags and labels
  • RSS feeds for threads, microblogs, or combined

3. ActivityPub Implementation

Actor Types

ActorTypePathPurpose
Instance
Application
/i/actor
Server-level actor, signs requests, inbox/outbox
User
Person
/u/username
Individual accounts with followers/following
Magazine
Group
/m/name
Community container, announces user activities

JSON-LD Context

The

@context
resolves to ActivityStreams, W3C security vocabulary, and custom namespaces including ostatus, schema.org, Mastodon extensions (
toot:
), PeerTube extensions, and Lemmy extensions.

Magazine (Group) Federation

Magazines use the same Group actor Announce relay pattern as Lemmy communities. When a user creates a thread in a magazine, the magazine's Group actor wraps the activity in an

Announce
and distributes it to all followers:

User creates thread → Create{Page} sent to Magazine
Magazine wraps → Announce{Create{Page}} sent to all followers
Remote instances receive Announce → display thread in magazine

This means subscribing to a magazine is a

Follow
sent to the Group actor. The Group actor then relays all content via
Announce
.

Activities Reference

ActivityPurpose
Follow
Subscribe to user or magazine
Accept
/
Reject
Follow request responses
Create
Create threads, microblogs, comments
Update
Edit content
Delete
Remove content
Like
Upvote (no
Dislike
— downvotes are local only)
Announce
Boost/reshare; also magazine relay wrapping
Undo
Reverse Like, Follow, or Announce
Block
Ban user (optional expiration timestamp, magazine-level or instance-level)
Flag
Report content (sent to magazine moderators' instances only)
Add
/
Remove
Moderator assignment, thread pinning
Lock
Lock threads/microblogs to prevent responses (Mbin)

Content Object Wire Format

Thread (Page):

{
  "type": "Page",
  "id": "https://instance.example/m/magazine/t/12345",
  "attributedTo": "https://instance.example/u/alice",
  "to": ["https://www.w3.org/ns/activitystreams#Public"],
  "cc": ["https://instance.example/m/magazine/followers"],
  "name": "Thread title",
  "content": "<p>HTML body</p>",
  "mediaType": "text/html",
  "source": {
    "content": "Markdown body",
    "mediaType": "text/markdown"
  },
  "inReplyTo": null,
  "sensitive": false,
  "stickied": false,
  "commentsEnabled": true
}

Microblog (Note):

{
  "type": "Note",
  "id": "https://instance.example/m/magazine/p/67890",
  "attributedTo": "https://instance.example/u/alice",
  "to": ["https://www.w3.org/ns/activitystreams#Public"],
  "content": "<p>Short-form post content</p>",
  "source": {
    "content": "Short-form post content",
    "mediaType": "text/markdown"
  },
  "tag": [
    {"type": "Hashtag", "name": "#fediverse"}
  ]
}

Comment (Note with inReplyTo):

{
  "type": "Note",
  "id": "https://instance.example/m/magazine/t/12345/-/comment/99",
  "attributedTo": "https://instance.example/u/bob",
  "inReplyTo": "https://instance.example/m/magazine/t/12345",
  "content": "<p>Reply text</p>",
  "source": {
    "content": "Reply text",
    "mediaType": "text/markdown"
  }
}

Key Federation Details

  • Downvotes do NOT federate — only
    Like
    (upvote) and
    Announce
    (boost) are sent. No
    Dislike
    activity.
  • Reports (
    Flag
    )
    are sent exclusively to instances housing the magazine's moderators.
  • Bans (
    Block
    )
    include optional expiration timestamps and specify scope (magazine-level vs instance-level).
  • Content includes focal point metadata and blurhash via Mastodon extensions.
  • Supports all ActivityPub Actor Types including
    Service
    for bot/robot accounts.
  • Accepts
    application/json
    headers across all ActivityPub endpoints (not just
    application/activity+json
    ).
  • All content preserves markdown source alongside HTML rendering.
  • Multi-language content mapping supported.

4. API

REST API with Swagger/OpenAPI documentation at

/api/docs
on each instance.

Authentication

OAuth2-based:

  1. Register client:
    POST /api/client
    → returns identifier and secret
  2. Request token → returns Bearer token, expiration, refresh token
  3. Include
    Authorization: Bearer <token>
    on requests

Scopes

ScopeAccess
read
Retrieve threads, view favorites
write
All modification operations

5. Kbin vs Lemmy

AspectKbin/MbinLemmy
LanguagePHP (Symfony)Rust (Actix-web)
Content typesThreads + MicroblogsThreads only
Communities"Magazines""Communities"
AP object (posts)
Page
(threads) +
Note
(microblogs)
Page
only
Mastodon integrationStrong — microblog section shows Mastodon contentLimited
Downvote federationNo (local only)Yes (
Dislike
activity)
Mention federationBetter (Mbin)Weaker
PeerTube integrationDirect channel following (Mbin v1.7+)Limited
Third-party appsVery limitedMany (Jerboa, Thunder, Voyager)
GovernanceCommunity-driven (Mbin)Lemmy team (2 primary devs)
MaturityNewer (2023)Older (2019)

Interoperability

Both use

Group
actors for communities/magazines and
Page
objects for threads. They federate with each other: Lemmy communities appear as magazines in Kbin/Mbin and vice versa. Comments federate as
Note
objects with
inReplyTo
.

Key friction points:

  • Lemmy sends
    Dislike
    for downvotes; Kbin/Mbin ignores them (or had historical display issues)
  • Kbin/Mbin microblog
    Note
    posts appear as comments in Lemmy (since Lemmy only understands
    Page
    for top-level posts)
  • Mention federation works better from Mbin than from Lemmy

6. History and the Mbin Fork

Kbin Timeline

DateEvent
Dec 2022NLnet grant funding begins
Early 2023Project moves to Codeberg, development accelerates
Apr 2023kbin.social launches with a few hundred users
Jun 2023Reddit API crisis — kbin.social grows from 300 to 30,000+ users in one week
Jun 2023Emergency infrastructure: Fastly caching, Cloudflare, server upgrades
Late 2023Ernest begins pattern of weeks-to-months-long absences
Oct 2023Mbin fork created on GitHub
2024kbin.social increasingly unstable, Ernest cites medical issues
Jun 2024Ernest promises instance handover, then goes silent again
Sep 2024kbin.social effectively ceases operation
PresentKbin discontinued; Mbin is the active continuation

Mbin

Founded: October 12, 2023, by Melroy van den Berg.

Governance: Uses the Collective Code Construction Contract (C4) — no single-maintainer bottleneck. Multiple contributors have owner rights. Pull requests merged by any maintainer with community consensus on Matrix.

Key improvements over Kbin:

  1. Federation compatibility — major fixes to interoperability issues
  2. Performance and scaling — database optimizations, reduced background request overhead
  3. Security — up-to-date dependencies, security-first patching
  4. Documentation — hosted at docs.joinmbin.org
  5. Thread/microblog locking
  6. Discoverability and indexability settings
  7. PeerTube channel following (since v1.7)
  8. All ActivityPub Actor Types including
    Service
    for bots
  9. Combined thread creation form (unified link/text/photo)

Current version: v1.9.1 (February 2026). 35 releases, 4,477 commits, 35+ contributors.

Around 8–10 months after forking, Mbin stopped porting Kbin code and focused on purely original development.


7. The Threadiverse Ecosystem

The "Threadiverse" is the link-aggregation / threaded-discussion portion of the Fediverse. All platforms interoperate via ActivityPub using

Group
actors for communities and
Page
/
Note
objects for content.

SoftwareLanguageStatusDifferentiator
LemmyRustActiveMost mature (2019), most users
MbinPHPActiveThreads + microblogs combined
PieFedPythonActivePrivacy-focused voting, rapid development
SublinksJavaIn devLemmy-compatible alternative backend
LotideRustLimitedMinimal, lightweight

8. Instances

Kbin Instances

8 tracked, mostly inactive or migrated to Mbin. kbin.social (flagship) is defunct.

Mbin Instances

23 tracked, almost all with >98% recent uptime:

  • fedia.io — one of the largest, migrated from Kbin
  • kbin.run — created due to kbin.social instability
  • kbin.melroy.org — run by Mbin founder

9. Interoperability Notes for Implementers

  1. Threads arrive as

    Page
    objects — same as Lemmy. If your software handles Lemmy's
    Page
    posts, Kbin/Mbin threads will work the same way. Title is in
    name
    , body in
    content
    /
    source
    .

  2. Microblogs arrive as

    Note
    objects — these are short-form posts without titles, identical in structure to Mastodon posts. They originate from a magazine but look like standard microblog posts. Lemmy displays these as comments since it only understands
    Page
    for top-level content.

  3. No

    Dislike
    activity — Kbin/Mbin never sends downvotes over federation. If you receive a
    Like
    from a Kbin/Mbin instance, it's an upvote. You will never receive a
    Dislike
    . If your platform sends
    Dislike
    to a Kbin/Mbin instance, it may be ignored or cause display issues.

  4. Magazines are

    Group
    actors — follow a magazine by sending
    Follow
    to the Group actor at
    /m/name
    . The magazine relays all content via
    Announce
    , identical to Lemmy communities.

  5. ChatMessage
    for DMs — Kbin/Mbin uses a custom
    ChatMessage
    type for private messages, not standard
    Note
    with direct addressing. Other platforms may not understand this type.

  6. Accepts

    application/json
    — Kbin/Mbin accepts both
    application/activity+json
    and plain
    application/json
    on all ActivityPub endpoints. No need to worry about content-type strictness.

  7. Report routing

    Flag
    activities are sent only to instances that host the magazine's moderators, not broadcast widely.

  8. Ban expiration

    Block
    activities can include expiration timestamps and scope (magazine-level vs instance-level). Handle the expiration field if present.

  9. Reputation is cosmetic — Kbin/Mbin exposes reputation scores on user profiles, but these have no functional effect and should not be used for trust decisions.

  10. Mastodon content in magazines — Kbin/Mbin's microblog section displays Mastodon posts matching magazine hashtags. This means Mastodon

    Note
    objects may appear alongside native Kbin/Mbin content in magazine feeds.