RMMZ-OS — an authoritative multiplayer server for RPG Maker MZ (work in progress)
Hi everyone,
I wanted to share a project I’ve been building: RMMZ-OS, a from-scratch client-server infrastructure that turns an RPG Maker MZ project into an online multiplayer game, without rewriting your game logic in a different engine.
The core idea
RPG Maker MZ stays exactly what it’s good at: maps, events, database, sprites, the whole editor workflow. RMMZ-OS adds a networking and server-authority layer on top of the existing MZ runtime, so multiple players can share the same live world. Conceptually it’s inspired by the old Netplay 1.7 for RPG Maker XP, but it’s a full rebuild with a modern client-server architecture — not a port.
The most important design decision: the server is authoritative, from day one. The client never decides what’s true about the shared world — it sends intent (e.g. “I want to move left”), and the server validates and confirms it. This is the same model real multiplayer games use, and it’s what makes anti-cheat and reconnect-without-desync possible later instead of being bolted on afterward.
What’s working right now
- Accounts & characters — register/login over a real backend (Postgres), with a session-token flow. A character belongs to an account, and you pick one before joining the world (this ships with in-game
Scene_Login/Scene_CharacterSelectUI, built as plugin overlays — no external launcher needed). - Shared world & movement sync — players see each other move on the same map in real time, with the server as the source of truth for position/direction.
- Persistence — your character’s position is saved and restored across sessions/reconnects.
- Chat and parties — basic chat messaging and party (group) support over the same protocol.
- Server-authoritative events — RPG Maker events on the map can be marked as shared/authoritative, so their state (self-switches, outcomes) is resolved by the server instead of running independently on every client.
- MMO-style nameplates — every player’s character name now floats above their sprite, driven by the same server-known character name used at login (no client-only guessing).
Everything ships as plain RPG Maker MZ plugins (no build step required to play the game) that hook into the public engine API — nothing in the MZ core runtime is modified or forked.
Architecture, briefly
RPG Maker MZ runtime <--> RMMZ-OS client plugin (WebSocket) <--> Game Server (authoritative) <--> Postgres
The wire protocol is a versioned JSON envelope over WebSocket. On the server side it’s a TypeScript monorepo with clearly separated packages (world/entity simulation, protocol, auth, server-core) glued together by small “composition root” files — so the simulation logic itself doesn’t know anything about WebSockets or the database, and vice versa.
What’s explicitly not done yet
Being upfront about scope — this is early:
- No combat/PvP.
- No inventory/quest/guild systems.
- No sharding/multiple game servers (single game server per world right now).
- No mobile/console — desktop/browser only, same targets MZ itself supports.
This is a foundation-first project: every phase has to produce something actually running and testable, not just scaffolding.
Why I’m posting
Mostly to share progress and get feedback from people who actually make RPG Maker games — what would you want out of an “MMO layer” for MZ that isn’t already covered above? Movement/desync feel, account flow, event authority model, anything.
Happy to answer questions about the architecture or the current feature set.


