Skip to content

Let Bedrock players join your Java server: Geyser + Floodgate setup (Paper, Velocity)

Phones, consoles and Windows Bedrock make up a big part of Minecraft. With Geyser and Floodgate those players can join your Java server without buying Java Edition. This guide covers a single Paper server, a Velocity or BungeeCord network, the UDP port and the usual errors.

Updated:

What Geyser and Floodgate do

Geyser translates between the two editions. Towards your server it acts like a Java client, so redstone, farms and plugins work exactly as for Java players. Floodgate lets Bedrock players log in with their Xbox account instead of a Java account.

PluginJobWhere it runs
GeyserAccepts Bedrock connections on a UDP port and translates themPaper/Spigot server, or the proxy on a network
FloodgateLogin without a Java account, Bedrock names and skinsSame place as Geyser, optional on backend servers

Before you start: Java and versions

  • Geyser needs Java 21 or newer on the machine that runs it.
  • Your server has to accept the newest Java version, because Geyser imitates such a client. Older servers need ViaVersion.
  • Geyser-Spigot runs on Paper and Spigot from 1.20.5 upwards. Older servers need a proxy, Geyser Standalone or ViaProxy.
  • Only current Bedrock versions are supported (October 2026: Bedrock 26.30 to 26.52, Java 26.2). Keep Geyser up to date, because Bedrock updates itself.

Download Geyser and Floodgate for your platform from the official GeyserMC download page.

Setup on a single Paper or Spigot server

  1. Put Geyser-Spigot.jar and Floodgate-Spigot.jar into the plugins folder.
  2. Restart the server. Geyser creates plugins/Geyser-Spigot/config.yml, Floodgate creates plugins/floodgate/ with config.yml and a key.pem.
  3. Open the Geyser config and check the bedrock section. The port is what Bedrock players will type in.
  4. Set the authentication type to floodgate and restart again.
plugins/Geyser-Spigot/config.yml
bedrock:
  address: 0.0.0.0
  port: 19132
  clone-remote-port: false

java:
  auth-type: floodgate

Older Geyser configs call the second section remote, so the setting is remote.auth-type. Current builds switch to Floodgate on their own when it runs on the same server; setting it does no harm.

On a single server, do not copy key.pem anywhere. Geyser reads it from Floodgate, and a leftover copy in the Geyser folder causes login errors.

Open the Bedrock port for UDP

Java uses TCP, Bedrock uses UDP. Most broken setups fail here.

  • Hosting panel: add an extra port (many hosts call it an allocation) and enter it as bedrock.port. Some hosts require Bedrock to use the same port as Java or change the Java port on every start; there clone-remote-port: true makes Geyser use the Java port. The Geyser setup page has instructions for many hosts.
  • Pterodactyl: allocate the port to the server in the Network tab.
  • Own machine or VPS: open the port for UDP in the firewall and, at home, in the router. OVH and Oracle Cloud also block UDP in their own firewall.
Linux with ufw
sudo ufw allow 19132/udp
sudo ufw reload

Voice chat plugins or query cannot share the port with Geyser. Once the port is open, run geyser connectiontest <ip> <port> in the console; it checks the port and suggests fixes.

Setup on a Velocity or BungeeCord network

On a network, Bedrock players connect to the proxy just like Java players. Geyser therefore runs only on the proxy.

  1. Install Geyser and Floodgate for your proxy (Velocity or BungeeCord) and restart the proxy.
  2. Set the bedrock.port and the authentication type floodgate in Geyser's config on the proxy, and open the port for UDP as described above.
  3. Install Floodgate-Spigot on every backend. It is required for plugins using the Floodgate API and improves skins.
  4. Set up forwarding: on BungeeCord set ip_forward: true in its config.yml and bungeecord: true in each backend's spigot.yml; on Velocity set up player information forwarding as described in the Velocity docs.
  5. In Floodgate's config on the proxy, set send-floodgate-data: true.
  6. Copy key.pem from the proxy's Floodgate folder into the Floodgate folder of every backend server, then restart the backends and the proxy.
plugins/floodgate/config.yml (proxy)
send-floodgate-data: true

Keep key.pem secret: it lets accounts past Java authentication. Upload it via FTP in binary mode, or you get Tag mismatch errors.

Bedrock names: the dot prefix

Floodgate puts a prefix in front of every Bedrock name so it can never collide with a Java name. The default is a dot, so the Xbox gamertag Steve becomes .Steve on your server. Spaces in gamertags are replaced with _.

plugins/floodgate/config.yml
username-prefix: "."
replace-spaces: true
  • In commands, use the full name with the prefix. If a command does not accept it, put the name in quotes: /tp ".Steve".
  • For the whitelist use fwhitelist add Steve. The prefix is not needed there.
  • If LuckPerms has trouble with Bedrock names, set allow-invalid-usernames: true in its config.

GeyserMC advises keeping the prefix. Bedrock players also vote with this name: on BestMCServerList they enter .Steve, the name your vote reward plugin sees.

Linked accounts and skins (optional)

Global Linking is enabled by default in Floodgate. Players who own both editions join link.geysermc.org with both accounts and type /linkaccount. After that they play with their Java inventory and location from either device, so they should move their Bedrock items first. A local link database needs an extra Floodgate extension.

Floodgate converts and uploads Bedrock skins so Java players see them. This runs through a queue and can take a while.

Common errors and fixes

SymptomUsual causeFix
"Unable to connect to world"UDP port closed, wrong port or host settingOpen the port for UDP, follow your host's Geyser instructions, run geyser connectiontest
Works on Java, not on BedrockPort opened only for TCPBedrock needs UDP
"Invalid IP address!"The domain only has an SRV recordBedrock does not support SRV records. Enter the IPv4 address instead
Address already in use on startupSomething else uses the portGive Geyser its own UDP port
"Please connect through the official Geyser"Outdated plugins or different key.pem filesUpdate Geyser and Floodgate, copy the proxy key again
"Outdated server"Server too old for GeyserInstall ViaVersion or update the server

Some things cannot be translated: left and right clicks in inventories look the same, commands without Brigadier get no tab completion, chat links are not clickable. Test menus with a real Bedrock device. Plugins can show native Bedrock forms via the Floodgate API, which needs Floodgate on their server.

Show both addresses on BestMCServerList

Bedrock players connect with your address plus the Bedrock port, for example play.example.net and 19132. BestMCServerList shows the Java and Bedrock address separately on every server page, each with a copy button.

  1. Open Add your server and enter your Java address.
  2. Tick Bedrock players are supported.
  3. Enter the Bedrock port from bedrock.port. Leave the Bedrock IP empty if it is the same as the Java address.

Crossplay is a real advantage for a new server. See how to get players for a new server for the rest of the plan.

Frequently asked questions

Do Bedrock players need a Java account to join with Geyser?

Not if Floodgate is installed and Geyser uses the auth type floodgate. Bedrock players then log in with their Xbox account.

Which port do Bedrock players use?

The port from bedrock.port in the Geyser config, 19132 by default. It has to be open for UDP. They use the same address as Java players.

Where do I install Geyser on a Velocity or BungeeCord network?

Only on the proxy, together with Floodgate. Floodgate on the backend servers is optional; if you use it, set send-floodgate-data: true on the proxy and copy key.pem to every backend.

Why do Bedrock names start with a dot?

That is the Floodgate username-prefix. It keeps Bedrock and Java names apart. You can change it in the Floodgate config, but GeyserMC recommends keeping a prefix.

Can I use the same port for Java and Bedrock?

Yes, Java uses TCP and Bedrock uses UDP. With clone-remote-port: true Geyser takes the Java port. The port then has to be open for both TCP and UDP.

Sources

Checked against the official documentation: