[!NOTE] Documentation & Guides: slayhorizon.github.io/godot-tiny-mmo/
Latest research note: Byte-Level Networking Protocol for MMO Scalability
Godot Tiny MMO
Experimental open-source MMORPG framework built with Godot 4.
Inspired by proven MMO systems, this project pushes the boundaries of what can be achieved with Godot in large-scale multiplayer.
It explores scalable multiplayer architecture and efficient byte-packed networking, while remaining clear and approachable as a learning project.
- Cross-platform: browser + desktop + mobile
- Unified codebase: Client & multiple servers in one repo
- Faster iteration, develop in one place, test in one click
- Separate export presets for clean client/server builds
- "Custom netcode" but stay simple
- No reliance on Godot’s
MultiplayerSynchronizer/Spawner - ID-based, byte-packed protocol (PackedByteArray instead of string-based messages) for efficient replication
- Built to support interpolation, multi-map instances, and seamless transitions
- No reliance on Godot’s
- True MMO-style architecture
- Gateway server: authentication & routing
- Master server: orchestrator, account management & bridge between gateways and world servers
- World server: host multiple concurrent maps and instances; the place where gameplay actually happens
See more screenshots:
Features
See current and planned features:
-
[X] Client-Server connection through
WebSocketMultiplayerPeer -
[x] Playable on web browser and desktop
-
[x] Network architecture (see diagram below)
-
[X] Authentication system through gateway server with Login UI
-
[x] Account Creation for permanent player accounts
-
[x] Server Selection UI to let the player choose between different servers
-
[x] SQLite persistence (players, guilds, chat)
-
[x] Guest Login option for quick access
-
[x] Game version check to ensure client compatibility
-
[x] Character Creation
-
[x] Basic RPG class system with three initial classes: Knight, Rogue, Wizard
-
[x] Weapons at least one usable weapon per class
-
[x] Basic combat system
-
[x] Friend list
-
[x] Guild
-
[X] Entity synchronization for players within the same instance
-
[ ] Entity interpolation to handle rubber banding
-
[x] Instance-based chat for localized communication
-
[X] Instance-based maps with traveling between different map instances
- [x] Three different maps: Overworld, Dungeon Entrance, Dungeon
- [ ] Private instances for solo players or small groups
-
[ ] Server-side anti-cheat (basic validation for speed hacks, teleport hacks, etc.)
-
[x] Server-side NPCs (AI logic processed on the server)
-
[x] Interest management (AOI filtering using grid on large maps)
-
[x] Web-based admin dashboard (monitor servers, instances, and connections)
Getting Started
To run the project, follow these steps:
- Open the project in Godot 4.6.
- Go to Debug tab, select "Customizable Run Instance...".
- Enable Multiple Instances and set the count to 4 or more.
- Under Feature Tags, ensure you have:
- Exactly one "gateway-server" tag.
- Exactly one "master-server" tag.
- Exactly one "world-server" tag.
- At least one or more "client" tags.
- (Optional) Under Launch Arguments:
- For servers, add --headless to prevent empty windows.
- For any, add --config=config_file_path.cfg to use non-default config path.
- Run the project (Press F5).
Setup example (More details in the wiki How to use "Customize Run Instances...":
Contributing
Feel free to fork the repository and submit a pull request if you have ideas or improvements!
You can also open an Issue to discuss bugs or feature requests.
Credits
Thanks to everyone who made this project possible:
- Maps designed by @higaslk
- Valuable help and feedback: @Jackiefrost, @d-Cadrius and multiple anonymous contributors
- Also @Anokolisa for allowing us to use its assets for this open source project!
License
Source code under the MIT License.