Guidefor server owners3 min read
Letting Bedrock players join a Java server with Geyser
Geyser translates between the two editions so phone and console players can join a Java server. What it does well, what it cannot do, and how to set it up.
What Geyser actually does
Java Edition and Bedrock Edition are two different programs. They do not share a network protocol, a save format, or in several places the same rules. A Bedrock client cannot join a Java server any more than a web browser can join one.
Geyser sits in the middle and translates. It speaks Bedrock's protocol to the player and Java's protocol to the server, converting packets in both directions in real time.
For the player it is invisible. They add your address in their normal server list and connect. Nothing is installed on their device, which is the whole reason this is worth doing: it reaches phone, console and Windows players who cannot install anything even if they wanted to.
Geyser and Floodgate are two things
This trips up almost every first setup.
Geyser does the translation. On its own, it still expects each connecting player to authenticate as a Java account, so a Bedrock player would need a linked Java account to get in.
Floodgate removes that requirement. It lets Bedrock players join with their Bedrock account, no Java account involved. It is a separate plugin installed alongside Geyser.
If you want ordinary Bedrock players to join, you want both. Geyser alone is for the narrower case where every player already owns Java Edition.
Installing it
Geyser runs in several shapes. Pick one:
- As a plugin on your Paper server. Simplest, and right for a single server.
- As a plugin on your Velocity proxy. Right for a network, so Bedrock players enter at the proxy and can move between backends like anyone else.
- Standalone, as its own process. For when you cannot install plugins on the server at all.
For a plugin install:
- Put the Geyser jar and the Floodgate jar in
plugins/. - Start the server once so both generate their configuration.
- Stop it, and edit
config/geyser-*/config.yml:
bedrock:
# The port Bedrock players connect to. Bedrock uses UDP, not TCP.
port: 19132
remote:
address: auto
port: 25565
# Required by Floodgate. Without this, Bedrock players cannot authenticate.
auth-type: floodgate
- Open UDP port 19132 on your firewall. This is the single most common reason a fresh Geyser install does not work: Bedrock uses UDP and Java uses TCP, and opening the Java port does nothing for Bedrock.
On a proxy, install Geyser and Floodgate on the proxy, and Floodgate on each backend as well so the backends understand the player identities the proxy forwards.
What will feel different
Geyser translates the protocol. It cannot translate the game, and the two editions genuinely differ:
- Redstone. Bedrock redstone follows different rules. Java contraptions that depend on exact timing or quasi-connectivity will not behave the same for a Bedrock player, and some will not work at all.
- Combat. Java has the attack cooldown; Bedrock does not. On a PvP server this is a real balance difference rather than a cosmetic one.
- Inventory handling. Crafting and container interaction differ enough that some plugin-driven custom inventory menus behave oddly.
- Mob behaviour and spawning. Similar but not identical, which matters for farms.
- Custom content. A Java resource pack does not apply to a Bedrock client. Serving both a Java pack and a Bedrock pack is possible and is extra work.
None of this makes Geyser a bad idea. It means a survival or creative server works beautifully and a technical Java server built on precise redstone will disappoint Bedrock players.
Usernames
Bedrock players arrive with a prefix, a dot by default, so Steve becomes .Steve. This is
deliberate: it prevents a Bedrock player from taking a Java player's name, and it makes it
obvious which edition somebody is on.
The prefix is configurable, and the safe advice is to leave it alone. Removing it means two different accounts can present the same username to your permissions plugin, which is exactly the kind of ambiguity you do not want in the thing that decides who can do what.
Checking your setup
- Bedrock players connect to UDP 19132, Java players to TCP 25565. Both need opening.
- Geyser must support the Minecraft version your server runs. The plugin catalogue lists what declares support for what.
- Test from an actual Bedrock device, not from Java. The translation layer is the part you are testing, and only a Bedrock client exercises it.
If Java players can join and Bedrock players cannot, it is the UDP port. It is nearly always the UDP port.