Decision guide · Compare responsibilities

Choose a TypeScript RPG framework by the layer you need to own.

A renderer, RPG systems library, full game framework, and managed multiplayer backend are not interchangeable. Start with the missing responsibility in your stack, then evaluate tools inside that category.

Compare like with like before comparing feature lists.

LayerPrimary responsibilityExamples
Renderer3D scene graph, cameras, materials, and framesReact Three Fiber, Three.js
RPG systems layerQuests, dialogue, inventory, AI, events, saves, and UI stateOverworld Engine
R3F game frameworkWorld generation and integrated game architecture around R3FStrata
RPG frameworkIntegrated browser RPG/MMORPG development workflowRPGJS
2D TypeScript engineRendering, scenes, input, physics, and engine loopExcalibur
Multiplayer backendRooms, authority, server runtime, or managed servicesColyseus, Nakama

This table describes public product boundaries, not a winner. Projects can compose layers—for example React Three Fiber for rendering, Overworld for portable RPG rules, and a Colyseus room for authoritative session ownership.

You already own rendering and want portable RPG systems.

Overworld is a fit when React Three Fiber or Three.js already matches your visual stack, but quests, dialogue, inventory, AI, saves, multiplayer primitives, and UI state are accumulating inside scene components. Its packages are independently adoptable and its headless systems can run without WebGL.

  • You need the same game rules in R3F, tests, native webview shells, and Node.
  • You want serializable content and explicit condition/effect registries.
  • You prefer an application-owned composition root over a framework-owned singleton.
  • You are comfortable selecting rendering, backend hosting, and production infrastructure separately.

Overworld is not a renderer, asset pipeline, hosted backend, matchmaking service, or complete editor-driven engine. Those boundaries are deliberate and should be part of the adoption decision.

You want the framework to make more decisions for you.

Evaluate an integrated RPG or game framework when you want conventions for the render loop, world format, server workflow, editor, or genre-specific project structure. Evaluate a full engine when 2D/3D rendering, physics, asset import, and deployment should come from one toolchain.

RPGJS

Consider it for a browser RPG/MMORPG workflow with a more integrated framework model.

Strata

Consider it when an R3F-centered framework and procedural world systems match the game.

Excalibur

Consider it when a TypeScript-first 2D engine should own rendering and the game loop.

Native or WASM engines

Consider them when native runtime targets and engine-owned rendering outweigh direct web integration.

Treat networking primitives and backend operations as separate decisions.

Overworld provides transport-neutral presence, rooms in a reference relay, input/state messages, prediction, and reconciliation helpers. It does not replace managed infrastructure, databases, fleet orchestration, or a product-specific authoritative simulation.

Choose Colyseus when its room and server-state model matches your TypeScript backend. Evaluate Nakama when you need its broader server and social feature set. You can still keep portable domain rules separate from either backend so tests and clients share schemas without trusting client-owned state.

Design an authoritative TypeScript loop →

Prototype the riskiest boundary, not the prettiest demo.

  1. Write down which tool owns rendering, game rules, content, persistence, authority, and deployment.
  2. Build one complete interaction → quest → reward → UI flow with real save data.
  3. Run the rule layer without a renderer and verify deterministic tests.
  4. Test the actual target device, lifecycle, input method, and network conditions.
  5. Measure bundle size, update cadence, migration cost, license, and operational ownership.

Try the architecture before choosing it

The repository starter turns the evaluation checklist into a runnable R3F vertical slice.

Run the React Three Fiber RPG starter →