Hi all,
I’ve been building a browser-based, self-hostable 3D virtual-world engine on top of Three.js, and wanted to share it here — this community is where I picked up most of the WebGL tricks in it. It’s a solo project, still evolving, and I’m mainly looking for people who’ll run it, poke at the code, and tell me what’s broken.
What it is
A complete 3D world you run on your own server or laptop — not on someone else’s platform. It runs entirely in the browser: open a URL and you’re inside the 3D world — no client to install, no app store, no build step to see it live. Think of it as a “world engine + management/asset backend” in one box:
-
Three.js renderer (WebGL), PC / phone / tablet / WebXR from a single codebase
-
Visual world editor (drag / rotate / scale objects, place portals, edit terrain) built with
TransformControls -
Multiplayer over raw WebSocket — position / rotation / animation sync with interpolation
-
Asset management for GLB / FBX models, with Draco compression in the loading pipeline
-
An admin backend: users, roles / permissions, operation logs, AES-encrypted storage of config & API keys
-
Optional federation: independently deployed worlds can connect, teleport players between them, and carry the player’s identity + inventory across worlds (signed handshake)
Live demo: https://miduo100.com
Source:
Why I built it (the part I think you’ll care about)
Two things bug a lot of us: (1) every time you start a 3D project you rebuild the same scaffolding — renderer, loader, multiplayer sync, an editor, a place to keep assets; (2) anything you build on a hosted platform can vanish when that platform does.
This is an attempt at a base you don’t have to rebuild. The angle I care about most: your virtual assets are yours. Models, worlds, and player data live in your PostgreSQL and filesystem, in standard GLB / GLTF — not locked inside someone else’s database. If a game or platform shuts down, your world still runs on your machine, and your assets are still portable files you can drop into another instance. That’s the whole reason it’s self-hosted rather than SaaS.
Some of the Three.js bits worth a look in the code
-
GLB / FBX loading with Draco compression; small models load first, large ones stream in with a placeholder + progress %
-
TransformControls-driven editor with instant API save -
A WebXR path so the same world runs on a headset
-
Skeletal animation retargeting across Mixamo / ReadyPlayerMe / VRoid bone naming
-
Federation handshake: each world holds its own RSA key pair; a cross-world teleport packages the player’s standardized data (position, inventory, currency), signs it, and the target world verifies before admitting — no shared secret, re-verify on every connection
None of it is exotic, but wiring it into one runnable, self-hostable package took a while, and I’d rather more eyes were on it.
Build on top of it
This is the part I most want people to take from it: it’s a base, not a finished product. Clone it, open it in the browser, and you can:
-
Drop your own game / virtual assets into the world — models, scenes, props, anything in GLB / GLTF
-
Define your own in-world rules and gameplay by extending the code
-
Manage all of it through the built-in backend while you keep developing — inject content, administer it, and build on top at the same time
The source is not encrypted. Point an AI coding agent (Cursor, Claude Code, etc.) at the repo and it can start changing behavior on the spot — add a mechanic, reshape a system, wire in your own logic. So anyone who gets the code can stand up their own web-based virtual world and fill it with exactly the assets and rules they want, instead of rebuilding the whole engine from zero.
License — being straight with you
The source is public on GitHub, but it is not an OSI open-source license. It’s a custom subscription license:
-
Free to self-host and modify for local, non-networked, personal use
-
A subscription is required if you expose it to others over a domain / IP, federate with other worlds, or sell a modified version
Full terms are in the LICENSE file in the repo — please read it before using it for anything beyond local tinkering.
What I’m looking for
-
People to run the demo and the local build and tell me what breaks
-
Thoughts on the architecture, especially the federation / sync parts
-
Honestly, stars and visibility help a solo dev a lot — if it’s useful to you, a
on the repo is appreciated
Happy to answer anything about the Three.js side, the sync approach, or the federation protocol in the replies.