Vibefed kb-misskey
git clone https://github.com/reiver/vibefed
T=$(mktemp -d) && git clone --depth=1 https://github.com/reiver/vibefed "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/kb-misskey" ~/.claude/skills/reiver-vibefed-kb-misskey && rm -rf "$T"
skills/kb-misskey/SKILL.mdMisskey — Complete Reference
Overview
Misskey is a free, open-source, decentralized microblogging platform — a feature-rich Japanese-origin Fediverse platform that predates many others. Created by syuilo (Eiji Shinoda) in 2014 as a BBS-style forum, it adopted ActivityPub in 2018. The name comes from the song "Brain Diver" by the band May'n. Licensed AGPL-3.0.
Misskey is explicitly not a Mastodon fork — it is "a project completely different from Mastodon or other alike projects." Its cultural DNA reflects Japanese social media preferences: emoji reactions as the primary engagement mechanism (not simple likes), rich visual formatting (MFM), integrated file management (Drive), and playful features like
isCat mode and the mascot Ai (藍). Community members
are called "Misskists."
As of late 2024: ~918,550 registered accounts, ~25,782 active users, 1,096+ instances. The flagship instance misskey.io is reportedly the second largest instance in the entire Fediverse. MisskeyHQ exists as a company entity, funded by donations and software licensing.
1. Technology Stack
| Component | Technology |
|---|---|
| Backend | Node.js with TypeScript |
| Framework | NestJS (dependency injection) |
| Database | PostgreSQL (TypeORM) |
| Cache / Queue | Redis (ioredis) / BullMQ |
| Frontend | Vue.js 3 (Composition API, TypeScript) |
| Build tool | Vite |
| License | AGPL-3.0 |
Resource Footprint
Small instances: ~848 MB RAM with CPU bursts. A $10/month VPS suffices for small communities; $20/month for 15–50 users.
Repository
https://github.com/misskey-dev/misskey
2. ActivityPub Extensions
Misskey uses the JSON-LD namespace
https://misskey-hub.net/ns#
(prefix misskey). This is the most extensive set of custom ActivityPub
extensions in the Fediverse ecosystem.
Extension Reference
| Property | On | Description |
|---|---|---|
| Note | Deprecated. MFM source text (equivalent to property) |
| Actor | Actor summary in MFM format |
| Note | ID of quoted note. Compatible with and |
| Like | Emoji reaction type. Unicode emoji or custom emoji string |
| Question option | Vote count (equivalent to ) |
| Note | Boolean marks note as a chat message |
| Actor | Boolean — actor identifies as a cat (triggers visual effects) |
| Actor | Custom message on follow notification (since 2024.9.0-alpha.11) |
| Actor | Forbids display to non-signed-in viewers |
| Actor | Restricts past notes to followers only. Value: Unix epoch ms (negative = relative) |
| Actor | Hides past notes from all except author. Same value format |
| Emoji | License metadata. Properties: (string or null) |
Emoji Reactions Wire Format
Misskey's emoji reactions are the most significant interoperability concern. When a user reacts with an emoji, Misskey sends a
Like
activity with _misskey_reaction set to the emoji:
{ "@context": [ "https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1", { "misskey": "https://misskey-hub.net/ns#", "_misskey_reaction": "misskey:_misskey_reaction" } ], "type": "Like", "id": "https://misskey.example/likes/abc123", "actor": "https://misskey.example/users/alice", "object": "https://remote.example/notes/xyz", "_misskey_reaction": "👍", "content": "👍" }
For custom emoji reactions:
{ "type": "Like", "_misskey_reaction": ":blobcat:", "content": ":blobcat:", "tag": [ { "type": "Emoji", "id": "https://misskey.example/emojis/blobcat", "name": ":blobcat:", "icon": { "type": "Image", "url": "https://misskey.example/files/blobcat.png" } } ] }
Interoperability: Platforms that do not understand
_misskey_reaction
will treat these as standard Like activities (favourites). Custom emoji
reactions are only visible to other Misskey-family software. The content
field is also set to the reaction value as a fallback.
Quote Posts Wire Format
{ "type": "Note", "id": "https://misskey.example/notes/abc123", "content": "<p>My thoughts on this</p>", "_misskey_quote": "https://remote.example/notes/original", "quoteUrl": "https://remote.example/notes/original" }
Both
_misskey_quote and quoteUrl are set for compatibility. Also
recognized: https://fedibird.com/ns#quoteUri.
3. MFM (Misskey Flavored Markdown)
Proprietary markup language usable in notes, content warnings, usernames, and bios. General syntax:
$[name.attribute1,attribute2=value content]
Text Formatting
- Bold:
**text** - Small:
<small>text</small> - Center:
<center>text</center> - Quotes:
> text - Ruby:
$[ruby text reading] - Links:
[label](url) - Code: backticks (inline), triple backticks with language (blocks, 200+ languages via Shiki)
Visual Effects
| Syntax | Effect |
|---|---|
| Horizontal/vertical flip |
| Font change (serif, monospace, cursive, fantasy) |
| Blur until hover |
| Foreground color |
| Background color |
| Border (solid, dotted, dashed, double, groove, ridge, inset, outset) |
| Position shifting |
| Rotation |
| Scaling (also , , ) |
Animations
| Syntax | Effect |
|---|---|
| Jiggles |
| Celebration |
| Bouncing |
| Elasticity |
| Rotation (modifiers: , , , ) |
| Vibration |
| Random twitching |
| Color cycling |
| Shimmer |
All animations support
.speed=5s for timing control.
Federation note: MFM is rendered as HTML when federating via ActivityPub. The
_misskey_content (deprecated) and source properties
carry the original MFM source. Non-Misskey platforms see plain HTML with
animations and effects stripped.
4. Note System
Visibility Levels
| Level | Description |
|---|---|
| Visible to everyone, appears on all timelines |
| Visible to everyone but only appears on home timeline |
| Only visible to followers |
| Only visible to specified users (direct message) |
Features
- Content Warning (CW):
field hides content behind a togglesummary - Renote: Boost/reblog (Announce activity)
- Quote Renote: Boost with added commentary (
)_misskey_quote - Polls:
activity type withQuestion
for counts_misskey_votes - Reactions: Full emoji reactions (see Section 2)
- Mentions: @-mentions across the Fediverse
- Hashtags: Standard
tag typeHashtag
Timelines
| Timeline | Content |
|---|---|
| Home | Notes from followed users |
| Local | All public notes from the instance |
| Social (Hybrid) | Home + Local combined |
| Global | All known public notes including remote |
5. Unique Features
Drive
Cloud storage system for managing uploaded files. Files can be organized into folders and reused across multiple notes without re-uploading. Each file retains metadata (type, size, hash). Drive capacity is configurable per-user by instance administrators via role policies.
Antennas
Customizable filtered feeds that collect notes matching set conditions (keywords, users, file attachments) in real time. Essentially continuous background searches. Antennas exclude the user's own posts.
Deck UI
Multi-column layout with side-by-side views for an information-dense interface. Users can arrange timeline columns, notification panels, and other widgets freely.
Channels
Topic-based note collections within an instance. Similar to forums or discussion threads organized by subject.
Pages
Static page creation system using MFM and custom emoji, enabling users to build content beyond notes.
Other Features
- Clips — public/private categorized bookmarks
- Plugins — extend web client functionality via AiScript
- Themes — full client appearance customization
- Widgets — small interactive dashboard displays
- Webhooks — external service integration
- Word mute / Thread mute — content filtering
- Charts — server data visualization
- Online status — activity indicators on profile icons
- Share form — at
path for social sharing buttons/share - Safe mode — disables custom CSS, plugins, themes
- Embeds — embed notes and timelines on external websites
mode — users identify as cats with visual effects in supporting clientsisCat
6. API
REST API
All endpoints use HTTP POST (not GET for reads):
POST /api/notes/create POST /api/notes/show POST /api/users/show POST /api/following/create
Authentication via access tokens. SDK:
misskey-js (TypeScript).
Streaming API
WebSocket-based with channel multiplexing:
{ "type": "connect", "body": { "channel": "homeTimeline", "id": "arbitrary-unique-id" } }
Available channels:
globalTimeline, homeTimeline, hybridTimeline,
localTimeline, main.
Multiple channels can be multiplexed on a single WebSocket connection using different IDs.
7. Fork Ecosystem
Misskey has the most extensive fork tree in the Fediverse. All forks federate with each other and the broader Fediverse.
Active Forks
| Fork | Type | Key Differentiators |
|---|---|---|
| Sharkey | Soft fork (tracks upstream) | Federated note editing with history, Mastodon-compatible API + OAuth2, multi-platform import (Mastodon/Pleroma/Firefish/Twitter/Instagram/Facebook), GDPR data export, "Bubble" timeline, Argon2 hashing, multiple translation services |
| Cherrypick | Soft fork | Compatible with Misskey client ecosystem |
| Meiskey | v11 fork | Based on older Misskey v11 |
Discontinued / EOL Forks
| Fork | Status | Notes |
|---|---|---|
| Firefish (was Calckey) | Discontinued 2024 | Added recommended timeline, account migration, mobile-optimized UI. Lead developer became absent |
| Iceshrimp | Transitioning | JS version: security patches only. Iceshrimp.NET: complete C# rewrite (beta), Mastodon API support |
| FoundKey | End of Life | Hard fork of v12, goal was removing bloat |
| Catodon | Discontinued Nov 2025 | Community-driven fork of Iceshrimp, created in reaction to Firefish governance failures |
Fork Relationship
Misskey (syuilo, 2014–) ├── Sharkey (soft fork, ACTIVE) ├── Cherrypick (soft fork, ACTIVE) ├── Meiskey (v11 fork, ACTIVE) ├── FoundKey (v12 hard fork, EOL) └── Calckey (2022) → Firefish (2023, DISCONTINUED) ├── Iceshrimp → Iceshrimp.NET (C# rewrite) └── Catodon (DISCONTINUED)
Pattern: Forks emerge from (a) feature gaps upstream won't fill, (b) governance/communication issues, or (c) architectural changes (Iceshrimp.NET's language rewrite).
8. Misskey vs Mastodon
| Aspect | Misskey | Mastodon |
|---|---|---|
| Origin | Japan (2014) | Germany (2016) |
| Character limit | Configurable per instance | 500 default |
| Reactions | Full emoji reactions (custom + Unicode) | Favourites only |
| File management | Built-in Drive | No persistent storage |
| Markup | MFM (animations, colors, effects) | Limited Markdown |
| Channels | Topic-based communities | No |
| Antennas | Custom filtered feeds | No equivalent |
| Resource usage | Lighter than Mastodon | Heavier |
| Mobile apps | Limited (PWA, third-party) | Official iOS/Android + many third-party |
| Post editing | Not in core (Sharkey has it) | Supported |
| User base | ~918k (mostly Japanese) | ~7.6M total |
9. Interoperability Notes for Implementers
-
Emoji reactions arrive as
activities — check forLike
to distinguish a specific emoji reaction from a generic favourite. If absent, treat as a standard Like. The_misskey_reaction
field also contains the reaction value.content -
Custom emoji in reactions — when
contains a_misskey_reaction
string, the:name:
array includes antag
object with the image URL. Display the custom emoji image if available, fall back to treating it as a Like.Emoji -
Quote posts — Misskey sends
and_misskey_quote
on Note objects. Also check forquoteUrl
(Fedibird/Mastodon compatibility). Display as an embedded quote if your platform supports it.fedibird:quoteUri -
MFM content — notes from Misskey contain HTML in
(with MFM effects stripped) and optionally MFM source in thecontent
property. Use the HTML for display; the MFM source is only useful if you want to re-render with a MFM parser (library:source
).mfm-js -
property on actors — a boolean extension. Misskey-family clients show cat ears and modify text display for cat-mode users. Safe to ignore but do not strip when forwarding actor documents.isCat -
Chat messages — notes with
are Misskey chat messages. They federate as normal Notes to non-Misskey platforms. Display as regular posts if your platform has no chat feature._misskey_talk: true -
All API endpoints use POST — unlike Mastodon's REST conventions, Misskey uses POST for everything including reads. If implementing a Misskey-compatible API, every endpoint must accept POST.
-
Visibility level "home" — Misskey has a fourth visibility level (
) where notes are visible to everyone but excluded from the local and global timelines. This maps to ActivityPubhome
(the inverse of Mastodon's "unlisted"). Handle carefully when federating.to: followers, cc: Public -
Poll vote counts — Misskey includes
on poll options. This is equivalent to_misskey_votes
but may be more reliably present. Preferreplies.totalItems
when available._misskey_votes -
Note content restrictions — the
and_misskey_makeNotesFollowersOnlyBefore
properties on actors signal that historical content has access restrictions. Respect these when fetching older notes from Misskey actors._misskey_makeNotesHiddenBefore
10. Known Considerations
- No post editing in core Misskey — users must delete and redraft. The Sharkey fork adds federated note editing with version history.
- Cannot follow hashtags — use Antennas (keyword-filtered feeds) instead.
- No official mobile apps — third-party options include SocialHub (iOS) and Milktea (Android). The web client supports PWA.
- Antennas exclude personal posts from their results.
- Mute functionality gaps regarding mentions.
- No MRF equivalent for regex-based content filtering (unlike Pleroma/Akkoma).
- November 2025 announcement about potentially replacing ActivityPub with "Misskey's own low-overhead federation system" — details unclear, impact on interoperability unknown.
- Geographic registration restrictions on misskey.io — initially blocked Europeans (GDPR concerns), later restricted to Japanese users, Korea allowed since February 2026.
- Recent security fixes — CVE-2026-28431, CVE-2026-28432, CVE-2026-28433 patched in version 2026.3.1.