Every row here comes straight from the canonical capability matrix,
the single source of truth for what Citadel ships. A capability is not marked
shipped here until its documentation is updated, so this page and the code stay in
lockstep.
Legend: β
Shipped Β· π‘ Partial Β· β¬ Planned Β· β Not applicable
What each engine and browser client SDK can do today. This is the first thing to
check when picking an engine.
| Capability |
Unity |
Unreal |
Godot |
Web / JS |
Rust |
| Connect and authenticated realtime handshake |
β
|
β
|
β
|
β
|
β
|
| Guest realtime handshake |
β
|
β
|
β
|
β
|
β
|
| Email/password authentication |
β
|
β
|
β
|
β
|
β
|
| Player profile, exact lookup, session refresh, and logout |
β
|
β
|
β
|
β
|
β
|
| Correlated generic RPC |
β
|
β
|
β
|
β
|
β
|
| Relayed position/message traffic |
β
|
β
|
β
|
β
|
β
|
| Durable notification inbox and local live stream |
β
|
β
|
β
|
β
|
β
|
| Durable chat live events |
β
|
β
|
β
|
β
|
β
|
| Friends, groups, leaderboards, chat, wallet RPC |
β
|
β
|
β
|
β
|
β
|
| Purchases, subscriptions, and external store validation |
β¬ |
β¬ |
β¬ |
β¬ |
β¬ |
Row-by-row notes & caveats
- Connect and authenticated realtime handshake β All SDKs ship connect plus dedicated guest and token realtime handshake helpers; native engines use QUIC/C ABI, and the Web SDK uses WebSocket (handshakeGuest / handshakeToken).
- Guest realtime handshake β All clients can connect as a guest where server policy permits.
- Email/password authentication β First-class HTTP registration/sign-in uses POST /v1/auth/email and returns caller-owned session tokens; durable hashed multi-key admission limits protect the public boundary. Email verification, recovery/change-password, and linking remain pending.
- Player profile, exact lookup, session refresh, and logout β First-class HTTP lifecycle APIs preserve the sanitized backend error contract; the completion manifest checks their bindings and web anchors across all released SDKs. Refreshed token pairs stay caller-owned for atomic secure storage.
- Correlated generic RPC β The common route for domain, party, and matchmaker operations.
- Relayed position/message traffic β All SDKs expose the base framed protocol; helpers vary by SDK.
- Durable notification inbox and local live stream β Read/ack by RPC and consume KIND_NOTIFICATION with client-side deduplication.
- Durable chat live events β All released SDKs provide typed closed-schema KIND_CHAT_EVENT lifecycle, deduplication, reconnect/revocation fencing, transactional history application, and private correlated acknowledgement. Durable delivery uses a local-first transactional cluster outbox and remains at-least-once with history reconciliation.
- Friends, groups, leaderboards, chat, wallet RPC β Authenticated generic RPC works across all current client targets.
- Purchases, subscriptions, and external store validation β No player-facing purchase surface yet.
| Capability |
Unity |
Unreal |
Godot |
Web / JS |
Rust |
| Named room component and map-ready event |
β
|
β
|
β
|
β
|
π‘ |
| Local ticket matchmaker RPC workflow |
π‘ |
β
|
π‘ |
π‘ |
π‘ |
| Local party management and party tickets |
π‘ |
π‘ |
π‘ |
π‘ |
π‘ |
| Transform sync snapshots and interpolation |
β
|
β
|
β
|
π‘ |
π‘ |
| Owner prediction, reconciliation, and rewind |
π‘ |
β
|
π‘ |
β¬ |
π‘ |
| NetworkPeer property replication authoring |
π‘ |
π‘ |
π‘ |
π‘ |
β
|
| Networked-actor presence/spawn integration |
π‘ |
β
|
π‘ |
β¬ |
π‘ |
| Authoritative server physics replication |
π‘ |
β
|
π‘ |
β¬ |
π‘ |
Row-by-row notes & caveats
- Named room component and map-ready event β Unity, Unreal, Godot, and JS/Web expose named-room join/create, leave, map-ready, and joined/left lifecycle events; Unity/Godot editor smoke remains manual.
- Local ticket matchmaker RPC workflow β All can use generic RPC; dedicated matchmaker event ergonomics differ.
- Local party management and party tickets β All use generic RPC; feature itself remains local-node only.
- Transform sync snapshots and interpolation β Unity (via the shared C ABI) and Unreal (a faithful C++ port) run the full interpolation runtime with Hermite/slerp and an adaptive buffer; Godotβs GDExtension also binds and runs the transform runtime (its 7 transform methods are headless-smoke verified in Godot 4.7); a full in-editor gameplay pass stays a manual pre-release check. The browser SDK ships v2 snapshot decode primitives and an epoch fence over WebTransport unreliable datagrams (WebSocket stays reliable-only), without the interpolation runtime.
- Owner prediction, reconciliation, and rewind β Unreal is the fully documented owner integration; other surfaces are bounded.
- NetworkPeer property replication authoring β Rust ships canonical typed authoring. C ABI v3 encodes and iterates decoded typed keyed-collection operations; Unity has a managed v3 wrapper, while Unreal/Godot bindings are source-level only. Engine runtime verification is deferred because those engines are unavailable.
- Networked-actor presence/spawn integration β Unreal is end-to-end; Unity/Godot have transform layers but not full spawn integration.
- Authoritative server physics replication β Replicates through transform/actor layers; no WebSocket binary gameplay helper.
| Capability |
Unity |
Unreal |
Godot |
Web / JS |
Rust |
| Unity CMAP map exporter |
β
|
β |
β |
β |
β |
| Godot CMAP map exporter |
β |
β |
β
|
β |
β |
| Distributable Godot WebAssembly SDK package |
β |
β |
β
|
β |
β |
| Unreal CMAP map exporter |
β |
π‘ |
β |
β |
β |
| Browser-native binary netcode helpers |
β |
β |
β |
π‘ |
β |
| Published npm package |
β |
β |
β |
π‘ |
β |
Row-by-row notes & caveats
- Unity CMAP map exporter β Static MeshCollider and built-in Terrain extraction with deterministic fixture coverage.
- Godot CMAP map exporter β Static-body mesh extraction plus explicit terrain-provider interface.
- Distributable Godot WebAssembly SDK package β The ZIP installs the public addons/citadel WebSocketPeer client with no GDExtension and includes a matched Godot Web .html/.js/.pck/.wasm verification export; CI opens that real WebAssembly app in Chromium against a running Citadel listener and validates guest auth, relay, receive/poll, close and payload integrity.
- Unreal CMAP map exporter β Static mesh and Landscape source ship; UE 5.8 editor compile/terrain smoke is pending.
- Browser-native binary netcode helpers β Browser JS ships schema-bound reliable NetworkPeer DeltaBunch author/decode/ack helpers over WebSocket/WebTransport with deterministic structural fixture/binding validation. Browser and native engine two-client gameplay runs remain deferred external-environment verification.
- Published npm package β Source package exists; registry publication is still tracked work.
Which prebuilt download exists per operating system. Where a native package is not
yet published, the SDK still builds from source.
| Capability |
Windows |
macOS |
Linux |
| Standalone server package |
β
|
π‘ |
β
|
| Unity SDK package |
β
|
π‘ |
β¬ |
| Unreal plugin package |
β
|
π‘ |
β¬ |
| Godot SDK package |
β
|
π‘ |
β¬ |
| Web / JavaScript SDK |
β
|
β
|
β
|
| Rust client crate and C ABI source |
β
|
π‘ |
π‘ |
Row-by-row notes & caveats
- Standalone server package β Windows, Linux x86_64 musl, and Linux ARM64 musl release archives are published and CI-validated. Native Apple Silicon and Intel macOS packages exist only as a local Makefile target (package-macos) and are not built in CI: the macOS release matrix is intentionally disabled pending Apple Developer ID and notarization credentials, and no macOS package is published yet.
- Unity SDK package β Windows native FFI package is released. Native Apple Silicon and Intel macOS .dylib packages exist only as a local Makefile target (package-client-unity-macos) and are not built in CI: the macOS matrix is disabled pending Apple Developer ID and notarization credentials, and none is published yet.
- Unreal plugin package β Windows drop-in package is released. Native macOS staticlib packages exist only as a local Makefile target (package-client-unreal-macos) and are not built in CI: the macOS matrix is disabled pending Apple Developer ID and notarization credentials; an Unreal Editor macOS smoke and the first signed public release remain manual gates, and none is published yet.
- Godot SDK package β Windows GDExtension package is released; the portable Godot Web ZIP ships the reliable WebSocketPeer addon plus a verified .html/.js/.pck/.wasm export without native artifacts. Linux CI loads it in Chromium against a real Citadel WebSocket server for guest auth, relay, receive/poll and close; deployed-browser TLS/origin smoke remains manual. Native macOS .dylib packages exist only as a local Makefile target (package-client-godot-macos) and are not built in CI: the macOS matrix is disabled pending Apple Developer ID and notarization credentials; a Godot Editor macOS smoke and the first signed public release remain manual gates, and none is published yet.
- Web / JavaScript SDK β WebSocket client runs in supported browsers; this is not a native engine package.
- Rust client crate and C ABI source β Source integration is portable; the Windows C ABI FFI archives ship bundled inside the engine client packages, while native macOS FFI archives exist only as local Makefile targets (package-client-*-macos) and are not built in CI: the macOS matrix is disabled pending Apple Developer ID and notarization credentials, and none is published yet.
Server-side features. Common means the capability is available server-wide; the
language columns show which embedded game-logic runtimes expose it.
| Capability |
Common |
Lua |
Python |
JavaScript |
TypeScript |
Rust |
| Server bootstrap, CLI, TOML config, and first-run setup |
β
|
β |
β |
β |
β |
β |
| Portable server releases and Linux deployment |
β
|
β |
β |
β |
β |
β |
| Dockerfile and editable Docker workflow |
π‘ |
β
|
β¬ |
β¬ |
β¬ |
β |
| Health, live status, observability, audit logs |
β
|
β |
β |
β |
β |
β |
| Device authentication |
β
|
β |
β |
β |
β |
β |
| Custom-id authentication |
β
|
β |
β |
β |
β |
β |
| Email/password authentication |
β
|
β |
β |
β |
β |
β |
| Apple sign-in |
β¬ |
β |
β |
β |
β |
β |
| Facebook and Facebook Instant sign-in |
β¬ |
β |
β |
β |
β |
β |
| Game Center sign-in |
β¬ |
β |
β |
β |
β |
β |
| Google sign-in |
β¬ |
β |
β |
β |
β |
β |
| Steam sign-in |
β¬ |
β |
β |
β |
β |
β |
| Account linking and unlinking |
β¬ |
β |
β |
β |
β |
β |
| Player account profile and user discovery |
β
|
β |
β |
β |
β |
β |
| Session tokens, realtime handshake, revocation |
β
|
β |
β |
β |
β |
β |
| Public session refresh and logout API |
β
|
β |
β |
β |
β |
β |
Row-by-row notes & caveats
- Server bootstrap, CLI, TOML config, and first-run setup β Run a standalone node with generated config, game directory, and SQLite defaults.
- Portable server releases and Linux deployment β Versioned Windows, Linux x86_64 musl, and Linux ARM64 musl archives ship with SHA-256 checksums, CI package validation, and a systemd deployment template.
- Dockerfile and editable Docker workflow β Dockerfile and Compose development assets remain available, but release CI/CD no longer builds, tests, attests, or publishes OCI images. Historical GHCR images are not updated by releases.
- Health, live status, observability, audit logs β Health/status endpoints, structured logs, redacted local incident journaling, optional Sentry telemetry (including Bugsink), tracing seams, and operator audit records.
- Device authentication β Creates or authenticates a device identity and issues a session.
- Custom-id authentication β Application-owned identifiers map to accounts and sessions.
- Email/password authentication β Transactional email/password registration and sign-in at /v1/auth/email; Argon2id PHC verifiers, durable hashed multi-key admission limits, and existing session tokens ship. Email verification, recovery/change-password, and linking remain pending.
- Apple sign-in β Provider adapter planned.
- Facebook and Facebook Instant sign-in β Provider adapters planned.
- Game Center sign-in β Provider adapter planned.
- Google sign-in β Provider adapter planned.
- Steam sign-in β Provider adapter planned.
- Account linking and unlinking β Identity seams allow future providers but no link/unlink API ships.
- Player account profile and user discovery β All released client SDKs expose typed profile read/update and exact known-user lookup; the completion manifest mechanically verifies those bindings and their web reference anchors. There is intentionally no directory, fuzzy search, presence, or recommendations.
- Session tokens, realtime handshake, revocation β Opaque bearer tokens, ownership, realtime auth, guest admission, expiry/revocation validation, and durable session seams.
- Public session refresh and logout API β All released client SDKs rotate caller-owned opaque token pairs and idempotently revoke one session; the completion manifest mechanically verifies every released-SDK binding and reference anchor.
| Capability |
Common |
Lua |
Python |
JavaScript |
TypeScript |
Rust |
| Versioned JSON storage read/write/delete/list |
β
|
β
|
β
|
β
|
β¬ |
β¬ |
| Storage indexes and query filters |
β
|
β
|
β
|
β
|
β¬ |
β¬ |
| Atomic multi-resource account/storage/wallet updates |
β¬ |
β¬ |
β¬ |
β¬ |
β¬ |
β¬ |
| SQLite backend |
β
|
β |
β |
β |
β |
β |
| PostgreSQL backend |
β
|
β |
β |
β |
β |
β |
| CockroachDB backend |
β
|
β |
β |
β |
β |
β |
| MongoDB backend |
β
|
β |
β |
β |
β |
β |
| Read-only console database explorer |
β
|
β |
β |
β |
β |
β |
| Wallet balances and ledger |
β
|
β
|
β
|
β
|
β¬ |
β¬ |
| Purchase record persistence and replay rejection |
β
|
β |
β |
β |
β |
β |
| Production store receipt validation |
β¬ |
β¬ |
β¬ |
β¬ |
β¬ |
β¬ |
| Subscriptions and provider lifecycle |
π‘ |
β¬ |
β¬ |
β¬ |
β¬ |
β¬ |
| Event and telemetry ingestion |
β¬ |
β¬ |
β¬ |
β¬ |
β¬ |
β¬ |
Row-by-row notes & caveats
- Versioned JSON storage read/write/delete/list β Permissions, cursors, create-only, compare-and-swap, and runtime access ship.
- Storage indexes and query filters β Operator-declared SQLite/PostgreSQL/CockroachDB/MongoDB indexes provide bounded equality filters plus durable include/exclude callbacks in Lua/Python/JS; index search is trusted game-logic work, not a generic client endpoint.
- Atomic multi-resource account/storage/wallet updates β Repository boundaries exist but no public multi-update unit-of-work API.
- SQLite backend β Single-file durable default for self-hosted nodes.
- PostgreSQL backend β Durable production backend with migrations.
- CockroachDB backend β Postgres-wire backend with the shipped domain tables.
- MongoDB backend β Durable backend for transaction-capable replica sets or sharded clusters; standalone MongoDB is rejected. Single-object storage mutations are transactional; portable atomic multi-object storage batches are explicitly unsupported pending replayable multi-key retry support. CI validates an authenticated disposable rs0 plus backup/restore integrity.
- Read-only console database explorer β Viewer/admin dashboard browsing for the configured SQLite, PostgreSQL, CockroachDB, or MongoDB database: allowlisted metadata, structured bound filters, opaque keyset/row handles, server-side redaction, audit records, deadlines and per-operator node limits. No SQL text, MongoDB commands, mutation, export, or system schemas.
- Wallet balances and ledger β Clients read balances/ledger; trusted logic adjusts under invariants.
- Purchase record persistence and replay rejection β Durable receipts are hashed; transaction ids cannot be replayed.
- Production store receipt validation β Only a deterministic development validator ships; provider integrations are pending.
- Subscriptions and provider lifecycle β Admin view derives active/expired state; provider renewal/refund events are pending.
- Event and telemetry ingestion β No player event ingestion or telemetry pipeline. Runtime-local best-effort callbacks are available separately to trusted Lua, Python, and JavaScript.
| Capability |
Common |
Lua |
Python |
JavaScript |
TypeScript |
Rust |
| Friends: invite, accept, block, remove, list |
β
|
β
|
β
|
β
|
β¬ |
β¬ |
| Social-provider friend import and friends-of-friends |
β¬ |
β¬ |
β¬ |
β¬ |
β¬ |
β¬ |
| Groups/clans: CRUD, role-safe membership, and admission workflows |
β
|
β
|
β
|
β
|
β¬ |
β¬ |
| Group invitations and join requests |
β
|
β
|
β
|
β
|
β¬ |
β¬ |
| Authorized durable direct, group, and room chat history |
π‘ |
β
|
β
|
β
|
β¬ |
β¬ |
| Chat presence, typing, and live fan-out |
π‘ |
β¬ |
β¬ |
β¬ |
β¬ |
β¬ |
| Chat moderation and history administration |
β
|
β |
β |
β |
β |
β |
| Durable player notification inbox |
β
|
β
|
β
|
β
|
β¬ |
β¬ |
| Local live notification delivery |
β
|
β
|
β
|
β
|
β¬ |
β¬ |
| Cross-node notifications, campaigns, retention, push |
β¬ |
β¬ |
β¬ |
β¬ |
β¬ |
β¬ |
| Status follow/unfollow and online presence graph |
β¬ |
β¬ |
β¬ |
β¬ |
β¬ |
β¬ |
Row-by-row notes & caveats
- Friends: invite, accept, block, remove, list β Durable social graph with game-client RPC and parity host API.
- Social-provider friend import and friends-of-friends β Requires provider identity integrations and graph traversal.
- Groups/clans: CRUD, role-safe membership, and admission workflows β Open self-join, closed-group requests, invitations, approval/accept/cancel flows, and superadmin ownership transfer are durable and exposed to trusted game logic through the groups.call host API; client RPC covers CRUD and role-safe membership.
- Group invitations and join requests β Persisted request and invitation state supports idempotent cancellation, role-safe approval, and invitation acceptance.
- Authorized durable direct, group, and room chat history β Send, history, author edit/delete, group-admin moderation, revisions, tombstones, redacted audit records, and multi-key durable limits derive targets server-side and fence friendship, membership, and room access; live delivery is available after chat.join on current authenticated cluster leases.
- Chat presence, typing, and live fan-out β Chat.join/leave, authorized ephemeral typing with receiver-side expiry, presence, committed reliable KIND_CHAT_EVENT fan-out, bounded resync, revocation cleanup, and typed mTLS cross-node durable delivery with leased fenced advertisements ship. Typing is local-node only.
- Chat moderation and history administration β Operator console can inspect and tombstone durable history with an atomic redacted audit record and independent retention.
- Durable player notification inbox β List/read APIs, idempotent producers, and persisted inbox records.
- Local live notification delivery β Committed notifications attempt reliable KIND_NOTIFICATION delivery on the local node.
- Cross-node notifications, campaigns, retention, push β No distributed forwarding, external push, or campaign scheduler.
- Status follow/unfollow and online presence graph β Presence is scoped to rooms, not a social follow graph.
| Capability |
Common |
Lua |
Python |
JavaScript |
TypeScript |
Rust |
| QUIC, WebTransport, and WebSocket |
β
|
β |
β |
β |
β |
β |
| Authenticated realtime connection and generic RPC |
β
|
β
|
β
|
β
|
β¬ |
β¬ |
| Relayed realtime messages |
β
|
β
|
β
|
β
|
β¬ |
β¬ |
| Named rooms, membership, labels, and map-ready |
β
|
β
|
β
|
β
|
β¬ |
β¬ |
| Player match listing and query filters |
β¬ |
β¬ |
β¬ |
β¬ |
β¬ |
β¬ |
| Single-node authoritative matches and presence |
β
|
β
|
β
|
β
|
β¬ |
β¬ |
| Multi-node match ownership, migration, and failover |
β¬ |
β¬ |
β¬ |
β¬ |
β¬ |
β¬ |
| Local ticket matchmaker and reconnect handoff |
β
|
β |
β |
β |
β |
β |
| Cross-node matchmaker routing and durable leases |
β
|
β |
β |
β |
β |
β |
| Local realtime parties |
π‘ |
β |
β |
β |
β |
β |
| Distributed party ownership, presence, and failover |
π‘ |
β |
β |
β |
β |
β |
| Transform sync, prediction, reconciliation, rewind |
β
|
β |
β |
β |
β |
β |
| NetworkPeer property replication |
π‘ |
β |
β |
β |
β |
β |
| CMAP static collision, server navmesh, and map queries |
β
|
β
|
β
|
β
|
β¬ |
β¬ |
| Server-simulated kinematic physics |
β
|
β
|
β
|
β
|
β¬ |
β¬ |
Row-by-row notes & caveats
- QUIC, WebTransport, and WebSocket β Native low-latency transport, browser datagram path, and reliable browser/fallback path. QUIC/WebTransport accept production PEM TLS; native clients verify public CA certificates and hostnames, while WebSocket uses WSS through a reverse proxy. Hand-rolled RUDP is deliberately not shipped.
- Authenticated realtime connection and generic RPC β Account/guest handshake and correlated request-response messages.
- Relayed realtime messages β Game logic can validate, broadcast, or unicast relay messages.
- Named rooms, membership, labels, and map-ready β All shipped runtimes expose room creation/admission hooks; the common room boundary scopes membership.
- Player match listing and query filters β Operators can inspect matches; no player match-list API.
- Single-node authoritative matches and presence β Server rooms, lifecycle, tick, presence, and scoped relay are usable on one node.
- Multi-node match ownership, migration, and failover β No end-to-end distributed match runtime.
- Local ticket matchmaker and reconnect handoff β Typed mutual queries, TTL, cancellation, atomic cohorts, and account-bound join tokens.
- Cross-node matchmaker routing and durable leases β mTLS node-control transport forwards tickets, handoffs, cancellation/status, and admission; durable fenced leases/claims protect PostgreSQL and CockroachDB. Clustered SQLite and MongoDB are rejected at startup.
- Local realtime parties β Invite/accept/leader/remove and atomic party tickets ship; all clients use generic RPC and client-specific convenience ergonomics remain partial.
- Distributed party ownership, presence, and failover β PostgreSQL/CockroachDB clusters provide durably fenced owner routing, restart-safe membership snapshots, privacy-scoped presence, one recovery resync per owner generation, and atomic whole-party tickets. Party data messages and dedicated client SDK ergonomics remain unshipped; SQLite/MongoDB clusters are rejected.
- Transform sync, prediction, reconciliation, rewind β Authoritative snapshots and owner modes; browser WebSocket cannot use the unreliable hot path.
- NetworkPeer property replication β Opt-in gateway authority, trusted schema/object lifecycle seam, shared-grid relevance, ABI v3 typed scalar/vector/quaternion and keyed-collection authoring, C ABI decoded keyed-collection iteration, and Rust authoring ship. Unreal receive/apply/ACK/full-recovery and match/room AOI remain separate.
- CMAP static collision, server navmesh, and map queries β Static cooked collision feeds navmesh, map_info, raycasts, overlap, and ground queries.
- Server-simulated kinematic physics β Deterministic static-map collision, gravity, impulse, movement intent, and state; no dynamic rigid bodies.
| Capability |
Common |
Lua |
Python |
JavaScript |
TypeScript |
Rust |
| Embedded Lua game logic |
β |
β
|
β |
β |
β |
β |
| Embedded Python game logic |
β |
β |
β
|
β |
β |
β |
| Embedded JavaScript game logic |
β |
β |
β |
β
|
β¬ |
β |
| Read-only static JSON/CSV gameplay data |
β |
β
|
β
|
β
|
β¬ |
β¬ |
| Rust game logic as a crate |
β |
β |
β |
β |
β |
β¬ |
| Hardened WASM game logic |
β |
β |
β |
β |
β |
β¬ |
| Message/lifecycle/tick/RPC/room hooks |
β |
β
|
β
|
β
|
β¬ |
β¬ |
| Broadcast/send, actors, maps, physics, storage, log |
β |
β
|
β
|
β
|
β¬ |
β¬ |
| Friends, groups, leaderboards, chat, wallet, notifications host APIs |
β |
β
|
β
|
β
|
β¬ |
β¬ |
| Before/after API and realtime interception hooks |
β
|
β
|
β
|
β
|
β¬ |
β¬ |
| Matchmaker callbacks, leaderboard/tournament reset callbacks |
π‘ |
π‘ |
π‘ |
π‘ |
β¬ |
β¬ |
| Runtime outbound HTTP, custom HTTP endpoints, events, shared cache |
β
|
β
|
β
|
β
|
β¬ |
β¬ |
| Dashboard and authenticated operator API |
β
|
β |
β |
β |
β |
β |
| Console MFA, user lifecycle, password reset, ACL templates |
β¬ |
β |
β |
β |
β |
β |
| Cluster discovery, load balancing, generalized node routing |
β¬ |
β |
β |
β |
β |
β |
Row-by-row notes & caveats
- Embedded Lua game logic β Default runtime with module loading and failure-safe hot reload.
- Embedded Python game logic β Feature-gated trusted runtime with parity checks and starter game.
- Embedded JavaScript game logic β Feature-gated QuickJS adapter with scoped local ESM modules and dependency-aware hot reload; no Node APIs, npm, workers, native modules, or TypeScript transpilation.
- Read-only static JSON/CSV gameplay data β Lua, Python, and JavaScript load bounded, parsed gameplay constants from an operator-owned root at initialization, cache them in memory, and atomically replace them with a successful hot reload.
- Rust game logic as a crate β Designed builder/scaffold path; native dynamic plugins remain rejected.
- Hardened WASM game logic β Capability-gated multi-tenant runtime is designed, not shipped.
- Message/lifecycle/tick/RPC/room hooks β Manifest-enforced parity for on_message, join/leave, tick, RPC, and room hooks.
- Broadcast/send, actors, maps, physics, storage, log β Current language-neutral host surface is mechanically checked.
- Friends, groups, leaderboards, chat, wallet, notifications host APIs β Friends/notifications have direct functions; remaining domain calls use validated bridges.
- Before/after API and realtime interception hooks β Post-handshake before hooks can veto eligible envelopes; after hooks observe the synchronous local delivery outcome without mutation or side effects.
- Matchmaker callbacks, leaderboard/tournament reset callbacks β A durable, supervised leaderboard-reset scheduler delivers on_leaderboard_reset to Lua, Python, and JavaScript under fenced backend leases; matchmaker matched callbacks and tournament-reset callbacks are not shipped.
- Runtime outbound HTTP, custom HTTP endpoints, events, shared cache β Trusted Lua, Python, and JavaScript expose Rust-owned asynchronous http.start/poll/cancel with explicit egress policy, DNS rebinding defenses, and shared rate/concurrency limits. They can also register bounded endpoints under /ext when enabled, use opt-in best-effort events, and share an opt-in non-durable cache with fenced cluster fan-out.
- Dashboard and authenticated operator API β Accounts, storage, groups, chat, notifications, leaderboards, matches, runtime, config, purchases, audit, and the error journal.
- Console MFA, user lifecycle, password reset, ACL templates β Operator authentication roles ship; these advanced controls do not.
- Cluster discovery, load balancing, generalized node routing β Ownership and fencing groundwork is not a deployable cluster product.