Louis Erbkamm possesses an intimate, detailed knowledge of Arnis, a picturesque town located in the northernmost reaches of Germany. He knows the precise locations of the local shops, the docking points for boats, and the intricate layout of the streets. Yet, in a testament to the digital age, Erbkamm has never actually visited the town. His expertise is not the result of tourism, but of code. Erbkamm is the creator and sole maintainer of "Arnis," an open-source project that bridges the gap between real-world geospatial data and the blocky, limitless landscape of Minecraft.
What began as a personal curiosity in 2022 has transformed into a robust software project that has seen nearly 900,000 downloads from GitHub. With a growing community of approximately 70 contributors, Arnis has become a bridge for people to experience their own surroundings—or places thousands of miles away—through the lens of a game.
Two Weeks and a Slow Prototype
Erbkamm’s journey into software development began early; he started coding at age 13, driven by a desire to merge his programming skills with his passion for Minecraft. For years, he viewed these two interests as parallel tracks until he realized they could be integrated. The Arnis project was born during a school break, conceived as a fun, experimental diversion.
In its initial form, the project was a basic Python script. It relied exclusively on OpenStreetMap data to translate geographic coordinates into Minecraft blocks. During those first two weeks of development, the generation process was remarkably slow. Erbkamm needed a reliable test subject to refine his code, and he turned to his home country of Germany to find a suitable candidate. He settled on the town of Arnis, which, despite its small size, offered a dense variety of architectural elements, including roads, waterways, and diverse building types. The town proved to be the perfect sandbox for his early experiments. Because the project lacked a formal name at the time, he simply dubbed it after the town that helped him debug his first prototype.
As the project matured, the community began to take notice. The introduction of elevation data transformed the output from flat, two-dimensional planes into complex, three-dimensional terrain, mirroring the real world’s topography. This milestone acted as a catalyst, drawing in geospatial specialists and enthusiasts from across the globe who were eager to contribute their own ideas on how to better integrate real-world data into the game engine.
The growth of the project necessitated a more collaborative approach. Before making the significant decision to port the codebase from Python to Rust—a move aimed at improving performance and safety—Erbkamm utilized the open nature of GitHub to solicit feedback. This transparent process allowed him to gather diverse perspectives and weigh the pros and cons of such a major architectural shift. Since then, the project has flourished, with community members translating the tool into roughly 20 languages and implementing significant new features that Erbkamm had not originally envisioned.
How a Trash Bin Gets into Minecraft
The development of Arnis is often dictated by the observations of everyday life. One day, while walking through his own city, Erbkamm noticed the ubiquity of public trash bins. It struck him that while his digital worlds were accurate, they lacked the mundane, granular details that make a city feel lived-in. When he realized his generated Minecraft worlds were devoid of these common fixtures, he brought the problem to his community.
Minecraft does not provide a native "trash bin" block, so the community collaborated to find an existing block that could serve the purpose effectively. The process of generating these elements is a complex, automated pipeline. When a user selects an area of the map, Arnis queries OpenStreetMap for every mapped element within those coordinates. It then cross-references the object type with its database of Minecraft blocks.
However, the software faces limitations when it encounters structures that are too detailed or unique for simple mapping. For iconic landmarks like the Statue of Liberty or Christ the Redeemer, Arnis employs a different strategy, converting complex 3D models into a format that the Minecraft engine can process and display. This constant balance between automated data scraping and manual model conversion is a core challenge that Erbkamm and his contributors continue to navigate.

One Maintainer, a Stack of Pull Requests
Despite the project’s massive reach, Erbkamm remains the sole maintainer. This creates a bottleneck; every pull request, bug report, and feature suggestion passes through his hands. Managing the project is a labor of love that occupies his evenings and weekends, often leaving a queue of contributors waiting for his review.
To manage this workload, Erbkamm has integrated GitHub Copilot into his workflow. The AI tool has become essential for triaging issues and maintaining the project’s health. He uses it to scan open issues, identify recurring bugs, determine how many users are affected by specific problems, and trace the origin of errors within the codebase.
"I could delegate those annoying and boring tasks to Copilot, while I could still have a look at those really cool topics that are related to the development of it," Erbkamm noted. By automating the more tedious aspects of maintenance, he can focus his limited time on high-level architectural decisions and creative features.
Sub-agents that Look for Regressions
The introduction of large-scale features brings the risk of performance degradation. When a massive pull request arrives, Erbkamm utilizes the GitHub Copilot app to conduct an initial performance review. He looks for subtle inefficiencies—such as a single miscalculated street light—that could cause the generation time for an entire city to balloon.
To combat this, he is experimenting with "sub-agents" within the GitHub Copilot ecosystem. These agents are tasked with monitoring specific, sensitive areas of the codebase. Whenever a change is proposed in these zones, the agents run tests to identify corner cases that might trigger a regression. This proactive approach ensures that new features do not inadvertently break existing functionality, a necessity for a project that is constantly evolving under the pressure of community contributions. Erbkamm values the integration of the terminal, code files, and chat interfaces within a single environment, as it allows him to maintain context while tackling complex bugs.
An Unexpected Classroom
Beyond the technical achievements, the project has found a surprising home in the educational sector. Teachers have begun using Arnis to bring geography and urban planning lessons to life. In some instances, educators use the tool to generate a student’s neighborhood or a local park, tasking the class with redesigning the space within the game. These collaborative projects allow students to experiment with urban improvement, comparing their digital interventions with the realities of their physical environment.
Looking forward, the project’s scope continues to expand. Recent updates have pushed the boundaries of the Earth, allowing users to generate the Moon and Mars. Erbkamm remains committed to his original vision: keeping the tool accessible and user-friendly while continuously increasing the level of detail it can produce.
For those interested in exploring the tool, the process is straightforward. By downloading the project from GitHub, users can select any location on the map, choose a spawn point, and trigger the generation process. Within minutes, a digital twin of their chosen destination appears in Minecraft. Erbkamm encourages new users to start with a location they know intimately. By comparing the generated output with their real-world experience, users often notice discrepancies—a missing bench here, a misaligned tree there. These observations are the lifeblood of the project; users can update the data on OpenStreetMap or report the issue to Erbkamm, ensuring that the world inside Minecraft becomes just a little more accurate with every passing day.

