Minecraft server software, rewritten in Go

One world.
Every player.
No proxy tax.

GoCraft speaks Java and Bedrock natively from one lean server process. One shared world, one player list, one source of truth—and no Geyser layer in the middle.

  • Single Go binary
  • No JVM required
  • No Geyser required
TCP / 769JAVA 1.21.4
GoCraft blue gopher mascot inside a Minecraft Java and Bedrock world
UDP / RAKNETBEDROCK
≤200MB

typical RAM target

20TPS

focused game loop

2EDITIONS

native listeners

1WORLD

shared live state

01 / Architecture

Not two servers
duct-taped together.

Java and Bedrock enter through edition-aware network paths, then meet inside the same GoCraft game core. Gameplay state is shared directly instead of being translated through a separate proxy process.

J
JAVA CLIENTSProtocol 769 / TCP
GO CORE

Canonical game state

B
BEDROCK CLIENTSRakNet / UDP
ONE LIVE WORLD Players · Mobs · Blocks · Commands
01

Edition-native sessions

Each client connects through the network stack made for its edition—Java over TCP and Bedrock over RakNet/UDP.

02

Shared game engine

Movement, combat, inventory, mobs, commands, and world changes converge in one authoritative server core.

03

No proxy stack

No second server to babysit, no Geyser deployment, and no duplicated configuration between multiple processes.

02 / Small by design

More world.
Less runtime.

GoCraft ships as a native Go executable. That means quick startup, simple deployment, predictable concurrency, and none of the JVM tuning ceremony normally wrapped around a Minecraft server.

MEMORY PROFILE< 200 MB TARGET
200 MB
Typical operation target. Actual usage varies with players, view distance, generated chunks, and world activity.
gocraft@server LIVE
$ ./gocraft --config server.yml

INFO GoCraft starting
INFO java listener   TCP :19106
INFO bedrock listener UDP :19106
INFO world opened     Anvil
INFO game loop        20 TPS

ONE PROCESSONE CONFIGONE WORLD

03 / Built to play

Vanilla where it matters.
Configurable where it counts.

GoCraft is not just a packet gateway. It owns the game loop—from survival and entities to cross-edition commands and server operations.

01

Real cross-play

Java and Bedrock players meet in the same world, see each other, fight, build, and use shared commands.

  • Cross-edition player lookup
  • Shared entities and world state
  • Edition-aware packet output
02

Combat your way

Run modern survival rules or switch to instant attacks and classic 1.7-style knockback for fast PvP.

Attack cooldownOFF
03

A world that persists

Anvil world storage, chunk caching, seed control, pre-generation, autosaves, and block physics live inside the core.

04

Survival has consequences

Health, armor, durability, hunger, fall damage, mob damage, death, respawn, drops, potion effects, and beds.

05

Mobs with a life

Creature health, hostile attacks, villager routines, bed ownership, sleeping, breeding, death animation, and drops.

06

Operations included

Permission-aware commands, configurable ClearLag, profiling, structured logs, and a readable server.yml.

07

Tools feel like tools

Attributes, visible durability, damage wear, farming interactions, hoes, pickaxes, swords, armor, and item mechanics.

08

Configuration without archaeology

Human-readable settings for ports, gameplay, combat, caching, tooltips, cleanup, and both editions.

04 / The difference

One clean stack.

GoCraft removes infrastructure instead of adding another compatibility service beside your server.

DeploymentGoCraftProxy cross-playTraditional JVM
Server processesOneTwo or moreOne + plugins
Bedrock pathNative listenerTranslation proxyExternal layer
RuntimeNative Go binaryProxy + JVM serverJVM
World stateShared directlyBridged to JavaJava-first
ConfigurationOne server.ymlMultiple configsProperties + plugins
Geyser requiredNoUsuallyFor cross-play

05 / Deploy

From binary
to block world.

No installer maze. Put the binary on your machine, tune one YAML file, expose TCP and UDP, and start the server.

  1. 01
    Download

    Grab the Linux AMD64 build or compile it directly with Go.

  2. 02
    Configure

    Choose your world, gameplay settings, and Java/Bedrock addresses.

  3. 03
    Run

    Launch one process and let both editions connect.

server.yml
java_enabled: true
host: 0.0.0.0
port: 19106
version_name: 1.21.4
protocol_version: 769

bedrock:
  enabled: true
  address: 0.0.0.0:19106
  online_mode: true

view_distance: 8
difficulty: normal
world_storage: disk
TCP Java and UDP Bedrock can use the same port number. Open both protocols in your firewall.

06 / Straight answers

Before you spin it up.

Does GoCraft need Geyser or a Java backend?+

No. GoCraft owns both listeners and the shared game state itself. It is the game server, not a proxy that forwards Bedrock players into a separate Java server.

Can Java and Bedrock use the same port?+

Yes. Java uses TCP and Bedrock uses UDP, so both listeners may use the same numeric port when your host and firewall expose both protocols.

Is 200 MB a hard memory ceiling?+

It is GoCraft's lightweight operating target, not a universal hard cap. Real memory use depends on players, view distance, cached chunks, entities, and world activity.

Which Java protocol does it target?+

The current server targets Minecraft Java 1.21.4, protocol 769, alongside its native Bedrock listener.

Build once. Welcome everyone.

Stop translating.
Start crafting.

A lean Minecraft server for communities that should not have to choose an edition.