top of page
Technology
Technical posts about Unity, multiplayer, servers, self-hosting, open source, builds, and development tools.
Our GitHub Speaks Now: The Automatic Developer Podcast 🎙️
The development of Blocks Beyond The Stars happens completely in the open on GitHub — every commit, every pull request, every release is there to read. But let's be honest: who scrolls through a commit list in the evening? From now on there's a more comfortable option: you can simply have the project news read out to you. Our GitHub now has its own podcast. What is Podlog? Podlog is a service that watches a GitHub repository and automatically turns it into an audio podcast. Y
Marcel Dütscher
2 days ago2 min read
Free Code Signing for Open Source: Our SignPath Application 🔏
Anyone who installs our game on Windows may know the moment: "Windows protected your PC" — SmartScreen warns about an "unknown publisher," and you have to click "More info → Run anyway" first. That's not a virus; it's simply because our installers aren't signed yet. We want that warning gone — without having to buy an expensive certificate. The problem with code-signing certificates. A Windows publisher certificate (OV or EV) costs money every year, often tied to company veri
Marcel Dütscher
2 days ago2 min read
From Git Tag to Live Server: Our Release Pipeline
A release of Blocks Beyond The Stars today consists of a single command: pushing a git tag. Everything after that is done by the machine. In this article I'll show our CI/CD pipeline — and why the effort pays off even for a hobby project. The release workflow. As soon as a tag like v0.7.4 is pushed, GitHub Actions builds the complete package: Windows installers (setup, portable, MSI), a Linux build, a WebGL build for the browser, and a Docker image for the server — six artifa
Marcel Dütscher
Jul 72 min read
Server Maintenance Without Kicking Players Out
What actually happens to the players when we need to update the server? The simple answer would be: pull the plug. We built the better answer — and it's one of my favorite features, even though ideally you barely notice it. The announcement. The server can send a maintenance message to every running world. In the game, a banner with a countdown then appears: "Server restart in 10 minutes." The message has to be actively dismissed — but only after a few seconds, so nobody acci
Marcel Dütscher
Jul 61 min read
Passwords, Rate Limits, and Accounts Without Email
Blocks Beyond The Stars is also played by children. That shapes not only the game design, but also the security engineering behind it. Three examples. Accounts without email — on purpose. A player account with us doesn't require an email address. That's not a missing feature, it's a decision: we want as little personal data as possible, especially from young players. What we don't store can't get lost. (The honest flip side: there is no "forgot password" via email as a result
Marcel Dütscher
Jul 61 min read
A Small VPS as a Game Server Fleet
All our online worlds — the portal, the official worlds, the worlds created by players — run on a single rented Linux server (VPS). No data center, no five-figure cloud bill. In this article I'll show how the server is set up and what we learned along the way. Hardening first. Before the game was allowed onto the server, the basic security came first: a firewall (ufw) that only opens the necessary ports, fail2ban against automated login attempts, and SSH with keys only. Caddy
Marcel Dütscher
Jul 52 min read
How Our Hosted Worlds Work
Your own world on the internet that friends can join at any time — without anyone having to set up a server. That's the idea behind our Hosted Worlds, and in this article I'll show you what really happens behind the "Play" button in the portal. The heart of it all is the WorldHost: a small service on our server that manages worlds. Each world runs in its own Docker container — fully isolated, with its own save file, its own memory limit and its own CPU cap. When nobody is pla
Marcel Dütscher
Jul 52 min read
Behind the Scenes: How We Made 28 YouTube Videos in 30 Minutes 🎬
How a dad, a kid, and an AI turned a pile of raw gameplay footage into two full playlists — without a single hour in a video editor. We finally have a YouTube presence for Blocks Beyond the Stars — 22 Shorts and 6 longer Let's Play / tutorial videos. And honestly? The way they got made is a story worth telling, because the actual "editing" took about half an hour. Here's the full pipeline. Step 1: Justus hits record 🎮 Every good gaming video starts with someone actually play
Marcel Dütscher
Jul 23 min read
Over 1000 Tests for a Hobby Game — a Waste?
Our project now has well over a thousand automated tests: around 990 on the server side, about 120 in the Unity client. For a family project, that sounds like overkill. It's the opposite — and here's why. Tests are our second developer. As a solo project, there's nobody who says in code review: "Wait, that breaks the crafting." The tests are that colleague. Every game mechanic — recipes, oxygen, hunger, creature behavior, world passwords — has tests that run with every change
Marcel Dütscher
Jul 21 min read
A Voxel Game in the Browser
Blocks Beyond The Stars doesn't just run as a Windows and Linux program, but also directly in the browser — no installation, one click in the portal is enough. The road there was more instructive than expected. Unity WebGL is a world of its own. Unity has been able to export to the web for a long time, but the devil is in the details. Our biggest stumbling block: in the browser there are no real background threads like in the native build. Our terrain system normally builds t
Marcel Dütscher
Jun 301 min read
The Day Our Shaders Went Missing From the Build
In the Unity editor, everything looked perfect. In the finished build: pink surfaces and missing effects. Welcome to one of the nastiest Unity traps — and a few of its relatives. Shader stripping. When building, Unity throws out everything that apparently isn't needed — including shaders. The problem: if you load shaders at runtime via Shader.Find() (like we do with our more than 20 custom shaders for water, atmosphere, holograms, and more), Unity sees no reference to them in
Marcel Dütscher
Jun 271 min read
Light in a Voxel World: Real Lights or Flood Fill?
A player places a glow lamp in their base. What happens technically? This innocent question triggered a fundamental decision for us — and the answer is a nice example of how the "more modern" solution isn't always the better one. Option A: real Unity lights. Every glowing block becomes a point light source, the engine computes everything. Looks great — but doesn't scale. A voxel world can have hundreds of glowing blocks in view; real-time point lights in that quantity make an
Marcel Dütscher
Jun 271 min read
100% AI-generated: Our workflow with Unity 6, .NET 8 and Python
One of the most frequent questions we receive is: How exactly do you build a complex multiplayer voxel game entirely with AI? The short answer: With very strict guidelines. The AI is fantastic at writing code, but it quickly loses sight of the architectural perspective. That's why I enforced a strict client/server architecture from day one. Our tech stack at a glance: Client: Unity 6 for rendering, input, and voxel meshing. Server: .NET 8 Dedicated Server for chunk generation
Marcel Dütscher
Jun 261 min read
The Graphics Overhaul: More Look Without Switching Engines
At some point the honest diagnosis was on the table: the game played well but looked like a prototype. Instead of eyeing a different render pipeline or even a different engine, we asked ourselves one question: how much look is still hiding in Unity's URP if you really push it to its limits? The answer: astonishingly much. Anti-aliasing (SMAA). Block worlds are made of edges — and flickering edges ruin every screenshot. SMAA smooths them without making the image mushy. Ambient
Marcel Dütscher
Jun 261 min read
From MIT to AGPL: Why We Changed the License
Blocks Beyond The Stars is open source — it has been from the start. But under which license, that's something we fundamentally changed along the way: from the permissive MIT license to AGPL-3.0. Here's the why. What MIT would have meant: With MIT, anyone may take our code, modify it, and resell it as a closed product — without giving anything back. For libraries that's often exactly right. For a complete game with servers, it felt wrong: someone could have taken our work, bu
Marcel Dütscher
Jun 251 min read
AI Textures and AI Sounds in the Asset Pipeline
Blocks Beyond The Stars has no graphic artist and no sound designer. Still, every new block gets its own texture and every new feature its sound. Our tool for that: generative AI — with a clear workflow around it. Textures. New block tiles are created with OpenAI image models. The prompt describes material, style, and the game's voxel aesthetic; the result is brought down to tile size and sorted into our block atlas — one big texture in which every block type has its fixed ti
Marcel Dütscher
Jun 231 min read
Every Block Is Solid — Except When It Isn't
Our client mesher has an iron rule: every block that isn't air gets rendered and has collision. Period. This simplification makes the meshing fast and the code simple — until a feature comes along that wants to break exactly this rule. The energy gate. For our energy fences we wanted a gate: a shimmering membrane that players and friendly NPCs can simply walk through, but wild animals can't. A block, in other words, that is visible but doesn't act as a wall for some. Exactly
Marcel Dütscher
Jun 221 min read
Netcode Traps: Messages That Silently Disappear
Multiplayer bugs are a genus of their own: nothing crashes, nothing logs an error — simply nothing happens. Two of our favorite traps from our own networking code, as a warning and for entertainment. Trap 1: the unregistered message. Our network protocol knows message classes — "block changed", "player moved", "chat". Every new message type has to be registered with the codec so it gets an ID and can be serialized. Forget that, and the worst possible thing happens: the send c
Marcel Dütscher
Jun 211 min read
bottom of page