
Moongate
Moongate is a personal project for revisiting Ultima Online, exploring ideas and enjoying the work of building a server. After 25 years of programming, there is still plenty to learn—and plenty worth writing by hand.
The foundation is C# and .NET 10, with Lua scripting, PostgreSQL persistence and Redis-backed realm handoff. Its libraries can also be used on their own.
If you enjoy the project, you can support it:
A work in progress. Characters enter the world, walk, see each other, move items and meet the NPCs a game master spawns; NPCs and items run Lua scripts, but gameplay systems are still evolving. See what works today before setting up a server.
Find your starting point
Section titled “Find your starting point”Looking for a reference? Browse data files, server configuration, Docker, or migrating from UOX3.
Multi-shard by design
Section titled “Multi-shard by design”One Moongate installation can run any number of shards. A login server authenticates the players and lists the shards that are online; each shard is a separate game server process with its own world database, and the players choose where to play from the client’s server list.
- Add a shard by starting a game server. It announces itself through Redis and appears in the list within seconds; stop it and it drops out. Up to 128 shards can share one login.
- One account for every shard. Accounts live in their own database, reached only by the login server; a game server never sees account credentials.
- Worlds stay apart. Each shard keeps its characters, items and NPCs in its own PostgreSQL database, so a test shard can run next to a live one.
- Per-shard access. A shard can be reserved for game masters or administrators.
- Or keep it small.
standalonemode runs the login and one shard in a single process.
Run a login server with two shards with Docker Compose, or read how login and game are separated.
Download
Section titled “Download”Release v0.20.1. These archives include the .NET runtime.
Release notes and SHA-256 checksums ·First-start guide
Install on Linux
Section titled “Install on Linux”curl -fsSL https://moongate.sh/install.sh | shThe installer downloads the latest release for Linux x64 or ARM64 into
/opt/moongate. Keep your server root outside that directory, because upgrades
replace the installation. Follow First start to prepare
the client files, databases and configuration before running the server.
Read the installation guide for the script, installation options, upgrades and removal.
Built to learn
Section titled “Built to learn”The process matters as much as the result. How I use AI explains where it helps with migration, tests and design, and why writing code by hand remains part of the project.
To take part, start with the contribution guide. Code, tests, examples and documentation are all ways to contribute.
Releases
Section titled “Releases”The site header identifies the documented version. A publication made by hand between releases keeps the label of the latest release, so a page may describe work that is not in it yet. Read the changelog for features, fixes, and breaking changes.
Made with ❤️ by Tom
