Experimental Open-source server software

A Minecraft server,
built the Go way.

Java and Bedrock players join the same world through one shared Go simulation. No translation proxy. Extend it with native Go plugins or an optional Java plugin runtime.

Early software for testing and contributing. GoCraft is not production-ready yet.

The GoCraft gopher holding a grass block in a hand-drawn block world
Java Edition 1.21.4 Protocol 769 / TCP
Bedrock Edition 1.26.45 Protocol 2169 / RakNet · Beta
Runtime Go 1.26.0 Native core · optional JVM plugins

How it works

One game, two native front doors.

GoCraft is the server. It does not forward Bedrock players to a Java backend. Each edition has its own network adapter and both meet in the same edition-neutral core.

J
Java adapterTCP / protocol 769
B
Bedrock adapterRakNet / protocol 2169
GoCraft coreOne canonical game state
Shared live world Players, blocks, mobs, chat, commands and time
Native sessions

Each client receives packets, inventories, entities, UI and resource packs in its own edition's format.

Shared simulation

Movement, survival, combat and world changes are resolved once, then broadcast to both editions.

Optional runtimes

The server core runs without a JVM. Go plugins run as child processes; Java plugins use a separate JVM runtime. Neither edition needs Geyser.

Project status

Playable, ambitious, and still early.

Core multiplayer and survival systems are running on both editions. Bedrock support is in beta and some vanilla behavior still differs. Expect bugs and breaking changes while the server matures.

Checked 10 September 2026. v5.1.0 is a pre-release; development branches include additional work that is not in that build.

See open issues →
Active target Java 1.21.4

Handshake, login, world, multiplayer, inventory and gameplay.

Beta Bedrock 1.26.45

Native RakNet networking, Xbox authentication and shared gameplay, with remaining parity gaps.

Developer preview Go + Java plugins

Both runtimes, packaging and custom events are in main. Expanded native gameplay events are available for review on feat/go-events-api.

What works today

More than a protocol demo.

GoCraft owns the game loop. These systems exist in the shared core, with edition-specific adapters and ongoing work toward vanilla parity.

Java + Bedrock

Native cross-play

Both editions connect directly to GoCraft and take part in the same session.

  • Shared players, movement, equipment and combat
  • Chat, commands, ranks and Bedrock Social roster
  • Edition-aware packets, UI and resource packs
Survival

The survival foundations

  • Health, hunger, armor, durability and damage
  • Air bubbles, drowning and underwater recovery
  • Vanilla-style death, respawn and reconnect state
  • Potion effects, beds, sleeping and spawn points
Experience

Vanilla-style XP and drops

  • Visible experience orbs with pickup movement and sound
  • Mining, mob, furnace, bottle and death experience
  • Block and entity drops spawn in the world for pickup
Blocks + items

Building and crafting

  • Breaking, placement, tools, physics and farming
  • Inventory, containers, crafting and item use
  • Furnaces, vanilla recipes, fuels and smelting XP
World

A world that stays put

  • Anvil storage for Overworld, Nether and End
  • Terrain, biomes, features, villages and structures
  • Chunk cache, pre-generation, autosaves and atomic writes
  • Time, weather, seeds and memory-only world mode
Entities

Mobs and animals

  • Natural spawning, navigation, attacks and drops
  • Hostile, passive, ambient and aquatic categories
  • Breeding, taming, riding and animal interactions
  • Villagers, professions, routines and iron golems
Custom content

Define an item once

  • YAML item definitions with stable persistent IDs
  • Generated Java resource packs and Bedrock add-ons
  • Textures, handheld poses and MiniMessage names
  • Java and Bedrock packs delivered during login
Server tools

Operations included

  • Group permissions and a browser-based editor
  • Commands, operators, whitelist and online auth
  • ClearLag, profiling and structured debug logs
  • Readable YAML with environment variable overrides
Plugins · experimental

Go and Java, connected

  • Out-of-process runtimes with lifecycle and recovery
  • One command tree for Java and Bedrock clients
  • Custom events with generated cross-language types
  • Shared bundle format, CLI and Java Gradle tooling
Explore the plugin API →

World & gameplay development

A shared world, still growing.

Persistent dimensions and core survival are already in main. The latest parity work lives on missing-items and is also included in the native-event development branch.

In main

Persistent dimensions

Seeded Overworld, Nether and End terrain, biomes and structures, backed by Anvil region storage.

  • Chunk caching, pre-generation and atomic saves
  • Time, weather, crop growth and redstone systems
  • Shared entities, inventories and player state
Development branch

More interactive blocks

  • Lectern books, page state, persistence and comparator output
  • Jukeboxes, chiseled bookshelves and note-block behavior
  • Brewing, potion effects and workstation improvements
  • Bamboo, kelp, vines and expanded plant growth
Development branch

Vehicles and villagers

  • Java boat boarding, dismounting and chest access fixes
  • Chest-boat storage, inventory transactions and drops
  • Villager door navigation and bed-occupancy fixes
  • Cached terrain checks to reduce navigation stalls

Implementation is not full vanilla parity. Vehicle controls, specialised item interactions and edition-specific behavior still need testing and refinement.

Documentation

The details are in the repo.

Setup notes and technical limits live beside the code, where they can change with the implementation.

Try it locally

Build it with Go.

GoCraft currently targets contributors and testers. Clone the source, run the test suite and build the server locally.

  1. 01
    Build

    Install Go 1.26.0 or newer, then compile the server. Java plugins additionally use a Java 25 runtime.

  2. 02
    Start

    The first run creates a readable server.yml and the world folders.

  3. 03
    Connect

    Java uses TCP 25565. Enable Bedrock and expose UDP 19106 for cross-play.

Quick start
git clone https://github.com/GoCraft-MC/GoCraft.git
cd GoCraft
go mod download
go test ./...
go build -o gocraft .
./gocraft
On Windows, build gocraft.exe and run .\gocraft.exe.

Straight answers

Before you try it.

Is GoCraft ready for a public server?+

Not yet. It is early experimental software built for local testing and development. Expect missing parity, bugs and breaking changes.

Which clients are supported?+

Java Edition 1.21.4 (protocol 769) is the active target. Bedrock Edition 1.26.45 (protocol 2169) is supported in beta. Other versions are not automatically compatible.

Does it need Geyser or a Java backend?+

No. GoCraft owns both native listeners and the shared game state. It is a game server, not a translator or proxy.

Can both editions use the same port number?+

Yes. Java uses TCP and Bedrock uses UDP, so the listeners can share a number when both protocols are exposed by the firewall.

Does it support custom items?+

Yes. Define items and textures once; GoCraft generates and delivers the Java resource pack and Bedrock add-on. Some advanced model and recipe features are still planned.

Can I write a Go or Java plugin?+

Yes. GoCraft has a Go SDK, a Java API and Gradle plugin, a packaging CLI, and paired examples. Both runtimes share the event and command contracts. The expanded native-event API is still under review; use the matching branches documented in the plugin guide. Bukkit/Paper plugins are not drop-in compatible.

Built in public

Come look under the hood.

Read the code, try a local world, report the rough edges, or help shape the next part.