Let Bedrock players join with Geyser and Floodgate

Set up Geyser and Floodgate on a Paper server on Torchlite so Bedrock players can join your Java world, using NetherNet on your server's own port.

6 min readBy Torchlite teamUpdated

Let Bedrock players join with Geyser and Floodgate
On this page

Minecraft Bedrock Edition, the version on phones, tablets, Windows and consoles, cannot join a Java server on its own. Geyser fixes that: it is a plugin that translates between the two editions, so Bedrock players can play in the same world as Java players. Floodgate is its companion plugin and lets Bedrock players join without owning a Java Edition account.

This guide sets both up as plugins on Paper. The same steps work on Purpur and Spigot. Fabric and NeoForge have their own Geyser versions, which this guide does not cover.

Two requirements before you start. The Geyser plugin needs a server on Minecraft 1.20.5 or newer. And Geyser always speaks the newest Java version, so if your server runs an older one, install the ViaVersion plugin as well.

Bedrock's new connection method: NetherNet

Bedrock is changing how it connects to servers, and it affects how you set up Geyser. The old method, RakNet, sends everything over UDP. The new one, NetherNet, works in two steps: the game first asks a signaling server over TCP how to connect, then plays over UDP. According to the Geyser team, Bedrock Edition 26.60 stops connecting over RakNet, so from then on a Geyser server has to use NetherNet.

Many older guides tell you to run Geyser on your Java port over UDP and stop there. That was a RakNet setup. Geyser still uses RakNet by default, so you have to switch it to NetherNet yourself, as shown below.

Which port Geyser uses

Your server's address is shown at the top of every server page in the panel, and the Network page lists the same IP and port, marked Primary. Java Edition uses that port over TCP. Geyser can use the same port number over UDP for Bedrock gameplay, because the two protocols do not get in each other's way.

The catch is signaling. It needs TCP, and the Java server already uses TCP on that port. So Geyser hands signaling to an external service instead, Warden by default, which is free. This has three effects:

  • Bedrock players do not connect with your Java address. When Geyser starts, it prints in the console the address and port they should use.
  • Warden serves signaling over HTTPS, so players do not get the "trust on first use" prompt they would see with Geyser's own signaling over plain HTTP.
  • The MOTD and player count in the Bedrock server list update every so often instead of live.

For most servers these are small trade-offs for a setup that needs nothing beyond your server's own port.

Install Geyser and Floodgate

  1. Download Geyser-Spigot and Floodgate-Spigot from the official page at geysermc.org/download. Both builds run on Paper and Purpur too.
  2. In the panel, open Files, go into the plugins folder and use Upload to add both jar files. Large uploads also work over SFTP.
  3. Press Restart and wait for "Done" in the console.

On this first start, Geyser creates plugins/Geyser-Spigot/config.yml and Floodgate creates a plugins/floodgate folder with its own config.yml and a key.pem file. Geyser and Floodgate on the same server find each other on their own, so you do not need to copy the key anywhere.

Configure Geyser

Open plugins/Geyser-Spigot/config.yml in Files. The Configs page does not list plugin files, so use the file editor here. The file already contains every setting with comments explaining it. Find these keys and change their values instead of adding new lines:

yaml
bedrock:
  clone-remote-port: true
  transport: nethernet
  signaling:
    mode: nxs

java:
  auth-type: floodgate

What each one does:

  • clone-remote-port: true makes Geyser use the same port number as the Java server, read again at every start. If your server's port ever changes, Geyser follows it without you editing anything.
  • transport: nethernet switches Bedrock connections to NetherNet. The other values are raknet, the old method, and both, which also accepts RakNet but needs a second UDP port.
  • mode: nxs under signaling uses the external signaling service. Geyser would fall back to it by itself when it shares the Java port, but setting it avoids a warning in the console.
  • auth-type: floodgate lets Floodgate vouch for Bedrock players, explained in the next section.

Indent with spaces, never tabs, and keep each key under its section. Press Save Content, then Restart. When Geyser has started, look in the console for the address and port it prints for Bedrock players and write them down.

Floodgate: players without a Java account

Without Floodgate, every Bedrock player has to sign in with a Microsoft account that owns Java Edition before Geyser lets them in. With Floodgate and auth-type: floodgate, they join with the Microsoft account they already use on Bedrock, and Floodgate tells the server they are genuine. online-mode in server.properties stays true, which matters for the reasons in the server.properties guide.

Bedrock players get a prefix in front of their name, a dot by default, so they cannot clash with a Java player of the same name. You can change it with username-prefix in plugins/floodgate/config.yml. To add a Bedrock player to the whitelist, use Floodgate's own command, without the prefix:

text
fwhitelist add BedrockSteve

Other commands need the full name including the prefix, for example op .BedrockSteve.

Connect from Bedrock

In Bedrock Edition, go to Play, then Servers, and choose Add Server. Give it any name, then enter the address in Server Address and the port in Port, exactly as Geyser printed them in the console.

Geyser stores its registration with the signaling service in a folder named nethernet. Leave it alone: if it is deleted, the server registers again as a new one and the address players use can change. Xbox, PlayStation and Switch cannot add custom servers directly; Geyser's documentation describes workarounds for consoles.

Common problems

"Unable to connect to world"

Check that the server is running and that Geyser loaded without errors in the console. Make sure players use the address and port Geyser printed, not your Java address, and that transport is set to nethernet. Then update Bedrock and update Geyser: Bedrock updates itself, and an older Geyser stops understanding it.

Bedrock players are asked to sign in to a Java account

Floodgate is missing, or auth-type is still online. Install Floodgate, set auth-type: floodgate and restart.

"Outdated client!" or "Outdated server!" on Bedrock

"Outdated client" means Geyser is older than the player's Bedrock version, so download the latest Geyser. "Outdated server" means the Java server is older than the version Geyser expects; install ViaVersion.

The server shows up, but nobody can get in

Geyser may be advertising the wrong address. Tell it the public address yourself under signaling in the bedrock section, using the IP and port from the panel:

yaml
bedrock:
  signaling:
    nxs:
      advertise-addresses:
        - 203.0.113.10:25567

Save, restart and try again. If your server's address changes after a long break, update this line too. If it still fails, run geyser dump in the console; the Geyser team asks for that report when you look for help on their Discord.

Stuck on a step?

Ask on the forum. Your question links back to this guide, so whoever answers knows where you are.

Ask about this guide

About the author

Torchlite team

The people who run Torchlite

We build and run the Torchlite panel and the nodes. Every guide is checked on our own servers before it goes up, and updated when the panel changes.

Found a mistake? Tell us on Discord

Related guides

All guides →