Skip to content

Compatibility policy and main constraints ​

Principle ​

The test is whether something is observable by ordinary users or third-party clients. What is observable stays compatible with upstream Misskey. What is not (admin features, infrastructure-specific features) may be optimized or changed to fit Cloudflare.

AreaPolicy
User-facing API and streamingStrictly compatible with upstream. Behavior in third-party clients (Miria and others) is guaranteed
Web clientUpstream's, used as-is (below)
ActivityPubFederates in the same format as upstream
DatabaseThe same PostgreSQL schema as upstream
Admin API and admin UIWhere third-party clients do not use them, optimization, changes, and removal are allowed
Infrastructure-specific featuresFeatures tied to upstream's infrastructure (S3 settings, SMTP server settings, job queue operations) may be changed or removed
New featuresNot added, as a rule

Web client ​

The web client is upstream Misskey's, running almost exactly as it does upstream.

ItemDescription
SourceThe pinned upstream commit is built without modification and served as static files
HTMLThe Worker generates the same structure as upstream's server (initial data, OGP, per-page rendering for users, notes, and so on)
BehaviorThe client talks to the same API and streaming as upstream, so screens and interactions are the same
Visible differencesOnly those caused by server-side constraints (see "Main constraints" below and API compatibility)

Data compatibility ​

ItemDescription
SchemaThe same as upstream. Upstream's migrations are authoritative; Workers never change the schema
MigrationsUpstream's migrations are converted to SQL and bundled. They are recorded the same way as upstream, so a database migrated by upstream can be carried over in either direction
Existing dataAn existing Misskey PostgreSQL database can be connected and used as-is
IDsGenerated the same way as upstream (aidx). The scheme is never changed on an existing database

Main constraints ​

The main differences from upstream. The per-endpoint list is in API compatibility, and the reasons are in Workers-specific constraints.

ItemUpstreammisskey-cf
DatabasePostgreSQLPostgreSQL only. Cloudflare D1 cannot be used (the schema depends on PostgreSQL-specific types)
Full-text searchMeilisearch and others (optional)SQL substring match only
ChartsRecorded in dedicated tablesComputed from the source data on request. Decrements and event-based series (federation, request counts) are 0
Rankings (featured notes, trends)Aggregated in RedisApproximated by aggregating the same window in PostgreSQL
TimelinesKept in RedisPostgreSQL returns the same results. The length cap is not reproduced
Settings changesImmediateReach other execution environments up to 30 seconds later
Upload limit250 MB (default)100 MB (default)
Automatic sensitive-media detectionAvailable (optional)Not available
MailSMTPCloudflare Email Service. SMTP settings are not used
Reaction bufferingAvailable (optional)Not available (always applied immediately)
Job queue admin UIShows and operates on every jobFailed and delayed jobs only
Server infoMachine CPU, memory, and so onFixed values
Initial setupSetup password is optionalSetup password is required