Direct crossplay without a proxy
This is the simplest self-hosted crossplay setup if you want Bedrock players on a Java server without introducing a separate proxy layer:
- 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.
One important Geyser version note: Bedrock clients update automatically and Geyser tracks the latest supported Java client version. If your Paper server is not on that current Java version yet, install ViaVersion so Bedrock players can still join older Java server versions.
What Geyser and Floodgate actually do
Geyser describes itself as a translator between Bedrock Edition clients and a Java Edition server. That is what enables crossplay.
Floodgate adds a different piece: it allows Xbox Live authenticated Bedrock players to join without needing a paid Java Edition account.
The pair is common because:
- Geyser handles protocol translation
- Floodgate handles Bedrock-friendly authentication
Step 1: Start from a Paper server
This is the cleanest base for the direct plugin setup.
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.
That is the required link between the two plugins.
Step 4: Publish the Bedrock port
Geyser documents the Bedrock listener like this:
bedrock:
address: 0.0.0.0
port: 19132
clone-remote-port: false
That port is UDP, not TCP.
Keep clone-remote-port disabled unless your host specifically requires Bedrock to reuse the Java port. Geyser's current setup docs note that enabling it overwrites the Bedrock port with the Java port.
If you run Docker, publish it explicitly:
ports:
- "25565:25565/tcp"
- "19132:19132/udp"
If players still cannot connect, fix the network path with the port troubleshooting guide, but remember that the Bedrock side uses UDP 19132 by default.
Also note one current Geyser restriction from the setup docs: other UDP-based features such as voice chat or query cannot share Geyser's UDP port.
Step 5: Validate with a Bedrock connection test
Geyser documents a built-in connection test command:
geyser connectiontest <ip> <port>
Run it from the console and then test with a real Bedrock client.
Important note for console players
Crossplay support on the server side does not automatically mean that every Bedrock console can type in any public server address directly.
That is the practical limitation many admins miss:
- Bedrock on phones, tablets, and Windows can usually add a custom server directly
- console editions often do not expose the same free-form server entry in the normal UI
That is why console players sometimes need an additional workaround even though your Geyser setup itself is correct.
The key point is the reason, not the app name:
- this is a console client limitation
- Geyser and Floodgate do not remove that limitation on their own
- the workaround happens on the player side, not on the server
Two common examples are:
- BedrockConnect, which documents DNS-based and LAN-based join methods for consoles
- BedrockTogether, a third-party helper project some players use on consoles when they need another client-side workaround path
The exact workaround can vary by console and home network, and it is not a mandatory part of your server setup.
The practical takeaway is simple: if phone and Windows Bedrock clients can join but console players still cannot, the remaining problem is often the console join path, not your Geyser or Floodgate installation.
Limits you should understand
This setup gives you practical direct crossplay, but it does not make Java and Bedrock identical. There will still be gameplay differences and plugin compatibility edge cases.
The point of this guide is to get a robust first setup, not to pretend that every Bedrock behavior perfectly matches Java.
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 | Java may work while Bedrock fails | Publish and allow UDP 19132 |
| Running this on the wrong server type | Plugin path becomes awkward or unsupported | Use Paper for the direct plugin setup |
| Treating SRV records as a Bedrock solution | Java DNS polish does not solve Bedrock ports | Keep Java and Bedrock join paths conceptually separate |
FAQ
Do I need a separate proxy for this setup?
No. This guide is deliberately scoped to the direct Paper plugin path.
Can Java and Bedrock players join the same world?
Yes. That is the point of the translation layer, as long as the server and plugins involved behave acceptably with Geyser.
Next steps
- If you still need to choose the right software stack, read Paper vs Vanilla vs Fabric vs Forge.
- If your Java side is not reachable yet, fix port 25565 first.
- If you want a cleaner Java join address, configure an SRV record.