About

Why Lorehallow exists

A hobby project with three goals, built in public from the first commit.

Three goals

  1. A small online world that's fun to be in, even with only a few people around. The world stays small and handcrafted: a town, the woods around it, some ruins on the hills.
  2. An excellent MMO server. The Go backend and its networking are the project's main achievement: fast, scalable, reliable, secure and easy to work on. Players see a small, beautiful world; the infrastructure behind it is the showcase. The goal is hundreds to thousands of simultaneous players, and that stays a goal until a load test says otherwise.
  3. Learning by building it. Every system is a chance to understand something properly: connection lifecycles, tick loops, interest management, persistence, deploys. Each phase ends with a walkthrough that explains the idea behind it.

Built in the open

Everything is public on GitHub and mirrored on Codeberg: the code, the art, the plan, the decisions and the performance measurements. The progress page is built from the plan itself, so it can't drift from what's actually done.

Lorehallow will never have a cash shop, pay-to-win items or monetization of any kind.

How it's made

The project has one owner, who sets the direction, makes the design calls, plays the builds and approves anything that goes public. AI agents write the code, working from a written plan and a strict set of rules: tests with every change, one command that checks everything, and every significant decision written down.

The agents also draw the pixel art by hand. Every sprite, tile, icon and landmark is a text file in the repository, one character per pixel and one locked palette of 33 colors, which a build step turns into images and checks. Hand placement gives exact sizes, exact colors and seamless tiles, which image generators can't.

A few large painted images, like the parallax hills at the top of the home page and the devlog's writing desk, started in an image generator. They went through a processing pipeline that finds their hidden pixel grid, snaps every block to the palette and removes the background, and in two of them the painted figures were replaced with hand-drawn characters.

The stack

  • Server: Go. One process with many zones, each zone run by a single goroutine at 20 ticks a second. WebSockets over TLS, Protocol Buffers on the wire.
  • Client: Godot 4 with GDScript, rendering 640×360 pixel art scaled by whole numbers.
  • Data: PostgreSQL, from Phase 4.
  • This website: a small Go program that turns BUILD.md, Markdown and the art into static pages. It ships no JavaScript and makes no third-party requests. Its heading font is hand-drawn too; the body text is set in the Go fonts by Bigelow & Holmes.
  • Hosting: self-hosted on the owner's own server behind Caddy. Each deploy is a new release directory and an atomic switch, so a bad one rolls back with one command.