NetherNet is now required: Bedrock 26.60 was released on 27 October 2026. According to Geyser, clients from 26.60 onward no longer connect over RakNet. Update Geyser and use
transport: nethernet; switching back to RakNet does not fix current clients.
For iPhone/iPad issues and certificates, use the HTTPS guide for iOS and iPadOS.
Direct crossplay without a proxy
This guide uses the following components on one server:
- a Paper server
- Geyser installed directly as a plugin
- Floodgate installed directly as a plugin
- no separate proxy layer
If you are not on Paper yet, start with Paper vs Vanilla vs Fabric vs Forge.
Check compatibility before updating
Use the official compatibility page to check which Bedrock versions your Geyser supports and which Java client it emulates. Your Java server must accept that client version.
Bedrock clients often update automatically. If Paper does not accept Geyser's emulated client, check the documented use of ViaVersion for your particular server version. ViaVersion does not add missing Bedrock support to Geyser.
What Geyser and Floodgate do
Geyser translates between Bedrock clients and the Java server. Floodgate lets Xbox Live authenticated Bedrock players join without an additional Java Edition account.
Step 1: Start from a Paper server
For the current Geyser-Spigot plugin path, Geyser requires at least Minecraft Java Edition server 1.20.5 and Java 21. Newer Paper releases can require a newer Java runtime; check the Java compatibility guide before changing the image or host runtime.
If your server is still in early deployment, you can begin with the Hetzner Docker setup guide and then move the server type to Paper in your Compose configuration.
Step 2: Install the plugins
- Download the current Geyser plugin build for Paper/Spigot from the official download page.
- Place the plugin jar in the server
pluginsdirectory. - Restart the server.
Then do the same for Floodgate:
- Download the current Floodgate plugin build for Paper/Spigot from the official download page.
- Place the plugin jar in the
pluginsdirectory. - Restart the server.
Geyser's Paper/Spigot setup guide documents the direct setup flow, and Floodgate's Paper/Spigot setup guide documents the required auth-type change.
Step 3: Switch Geyser authentication to Floodgate
Open /plugins/Geyser-Spigot/config.yml, find the auth-type setting, and change it to floodgate.
Then restart the server again.
Step 4: Publish the Bedrock port
Hosting on your PC or NAS? Find your public IP without renting a server explains checking from the home network and comparing the router WAN address. Do not advertise a local PC address as your public endpoint.
For current Bedrock clients, configure NetherNet. Replace YOUR_PUBLIC_IP with your reachable public IP:
bedrock:
address: 0.0.0.0
port: 19132
clone-remote-port: false
transport: nethernet
webrtc-port: 0
signaling:
mode: builtin
advertise-addresses:
- "YOUR_PUBLIC_IP:19132"
This configuration needs TCP 19132 for signaling and UDP 19132 for gameplay.
Keep clone-remote-port disabled for built-in signaling: Java already occupies its TCP port. If your host requires a shared port, use the external-signaling option in the NetherNet guide.
If you run Docker, publish it explicitly:
ports:
- "25565:25565/tcp"
- "19132:19132/tcp"
- "19132:19132/udp"
Fully restart Paper after saving the Geyser configuration; /geyser reload is not sufficient for this transport change. If you added Docker port publications, recreate the service with docker compose up -d and preserve its data volume. A plain docker compose restart does not apply changed publications. Check startup logs before continuing to Step 5.
If players still cannot connect, fix the network path with the port troubleshooting guide, and check both TCP and UDP 19132 for this setup.
Voice chat and Query need a different UDP port from Geyser.
Migrate an existing RakNet installation
Back up the generated Geyser configuration, apply the NetherNet settings above and add the TCP publication alongside UDP. Preserve Floodgate and backend settings. After Docker publication changes, use docker compose up -d, then fully restart the server/proxy. The NetherNet guide covers different port mappings, external signaling and current error reports.
Step 5: Validate with a Bedrock connection test
For NetherNet, check TCP signaling first with curl --fail --max-time 10 http://YOUR_PUBLIC_IP:19132/v1/join. Replace the placeholder with your public IP. If you receive server JSON, join with a Bedrock client from another network to check the UDP gameplay connection too. Follow the NetherNet connection tests if joining fails.
Joining on consoles
Phones, tablets and Windows usually allow custom server entries. Consoles often need an additional join method, depending on the console and home network:
- BedrockConnect documents DNS-based and LAN-based methods.
- BedrockTogether is a helper app for joining through the local network.
If mobile or Windows clients can join, check this additional console connection path first.
Gameplay and plugin compatibility
Some game mechanics and plugins behave differently for Bedrock and Java players. Test the features your server relies on with both editions.
Common mistakes
| Mistake | Result | Fix |
|---|---|---|
| Installing Geyser but not Floodgate | Bedrock players still need Java authentication | Install Floodgate and set auth-type: floodgate |
| Opening only TCP ports | Bedrock gameplay fails | RakNet: allow UDP 19132; NetherNet: allow TCP signaling and the advertised UDP gameplay port |
| Running this on the wrong server type | Plugin path becomes awkward or unsupported | Use Paper for the direct plugin setup |
| Ignoring the supported-version matrix | A Bedrock update suddenly breaks joining | Check Geyser's matrix and update Geyser or add ViaVersion as required |
| Treating SRV records as a Bedrock solution | Bedrock players still need the correct server port | Keep Java and Bedrock join paths conceptually separate |
Next steps
- If you want a cleaner Java join address, configure an SRV record.