Golem is a from-scratch implementation of a high-performance Minecraft server written entirely in Go. Inspired by the feature-rich and highly configurable Purpur server, Golem aims to leverage the power of Go's concurrency and simplicity to create a modern, maintainable, and extremely fast server platform for Minecraft.
A core feature of Golem is its first-class support for plugins written in JavaScript via the goja engine, providing a safe, isolated, and easy-to-use API for server customization.
The Golem project is guided by a few key principles:
- Performance through Concurrency: Leverage Go's native goroutines and channels to handle player connections, world processing, and other tasks concurrently, aiming for superior performance and scalability.
- Simplicity and Maintainability: By building from the ground up in Go, we avoid the complexities of a heavily patched Java codebase. The goal is a server that is easier to understand, maintain, and contribute to.
- Extreme Configurability: Like its inspiration, Purpur, Golem will offer deep and granular control over gameplay mechanics, mob behavior, and server settings through a simple YAML configuration.
- Modern Extensibility: Provide a powerful and safe plugin API using JavaScript. This lowers the barrier to entry for developers and allows for rapid development of server customizations without needing to compile Go code.
Golem is in the very early stages of development. The project is currently focused on building the core infrastructure. It is not yet playable.
Progress Checklist:
- TCP Server & Connection Handling
- Server List Ping (Status & Ping Protocol)
- (In Progress) Login Protocol & Initial World Entry
- World State Management (Chunks, Blocks, Entities)
- Main Game Loop & Entity Ticking
- Player Movement & Basic Physics
- World Persistence (Anvil Format I/O)
- Purpur Feature Implementation
- Goja Plugin System API
- Go-Native Engine: A completely fresh implementation with no Java dependencies, designed for performance.
- Purpur-Inspired Gameplay:
- Hundreds of configuration options to tailor the exact Minecraft experience you want.
- Unique gameplay mechanics like ridable mobs, advanced enchantments, and custom block behaviors.
- JavaScript Plugin API (via Goja):
- Isolated Runtimes: Each plugin runs in its own JS environment, preventing one plugin from crashing the entire server.
- Clean and Safe API: A well-defined Go API exposed to JavaScript, providing powerful tools without exposing raw server internals.
- Event-Driven Architecture: Register JS callbacks for game events like player joins, block breaks, and more.
- Simple Command System: Easily register custom server commands directly from JavaScript.
To get the project running, you'll need Go installed on your system (version 1.21 or newer is recommended).
# 1. Clone the repository
git clone https://github.com/Advik-B/Golem.git
cd Golem
# 2. Tidy dependencies
go mod tidy
# 3. Run the server
go run ./cmd/golemThe server will start listening on 0.0.0.0:25565. You can now ping the server from your Minecraft client.
We are actively seeking contributors! Whether you're a Go expert, have experience with the Minecraft protocol, or just want to help with documentation, there's a place for you here.
- Find Something to Work On: Check out our ROADMAP.md and the open issues on our GitHub Issues page.
- Discuss: It's always a good idea to comment on an issue or start a discussion before you begin a major implementation.
- Code: Follow standard Go idioms and best practices. Ensure your code is formatted with
gofmt. - Pull Request: Submit a PR with a clear description of the changes you've made and why.
Golem is licensed under the Apache-2.0 license. See the LICENSE.txt file for more details.