How to Enable Java + Bedrock Crossplay with Geyser
Full walkthrough for adding Bedrock crossplay to your Java Minecraft server using Geyser and Floodgate, including config, forms, and troubleshooting.
What Geyser and Floodgate Do
Geyser is a bridge that translates the Minecraft Bedrock protocol into the Java protocol, allowing Bedrock Edition players (phones, tablets, consoles, Windows 10/11) to connect to your Java Edition server. Floodgate is a companion plugin that lets Bedrock players join without needing a Java Edition account, they authenticate through their Xbox/PlayStation/Nintendo account instead. Together, these two plugins open your server to the massive Bedrock player base without requiring you to run a separate Bedrock server.
The translation is not perfect. There are differences between the two editions, combat timing, some redstone behavior, inventory management, and certain visual effects. But for survival, minigames, and most server activities, crossplay works remarkably well. Geyser is actively maintained by the GeyserMC team and receives updates within days of new Minecraft releases.
Prerequisites
Before installing Geyser, make sure your server meets these requirements:
- Server software: Paper, Spigot, Purpur, or any fork that supports plugins. For proxy setups, Geyser also works on BungeeCord and Velocity (see our proxy guide).
- Java version: Java 17 or newer. Geyser requires modern Java, if you are running Java 8, upgrade first.
- Port availability: Bedrock clients connect on UDP port 19132 by default. Make sure your hosting provider allows you to open a UDP port. Some hosts pre-configure this; on others you need to add it through the panel.
Installing Geyser as a Plugin
Geyser can run as a standalone proxy or as a plugin inside your server. The plugin method is simpler for single-server setups.
- Download Geyser-Spigot from
geysermc.org. - Place the jar in your
/pluginsfolder. - Restart the server. Geyser generates its config at
/plugins/Geyser-Spigot/config.yml.
Key config settings to check:
bedrock:
address: 0.0.0.0
port: 19132
clone-remote-port: false
remote:
address: auto
port: 25565
auth-type: floodgate
The bedrock.address of 0.0.0.0 means Geyser listens on all network interfaces. The bedrock.port should be 19132 unless your host requires a different port. The remote section tells Geyser where your Java server is, auto works when Geyser runs as a plugin on the same server. Set auth-type to floodgate if you are installing Floodgate (recommended), or online if you want Bedrock players to link a Java account.
Installing Floodgate
Floodgate removes the requirement for Bedrock players to own a Java account. Without it, Bedrock players would need to enter Java credentials, a terrible experience and a security concern.
- Download Floodgate-Spigot from
geysermc.org. - Place it in
/pluginsand restart. - Floodgate generates a
key.pemfile. If you run Geyser on a separate proxy, copy this key to the Geyser instance. For plugin installs on the same server, this happens automatically.
Bedrock Player Prefixes
By default, Floodgate prefixes Bedrock player names with a dot (.) to distinguish them from Java players and avoid name conflicts. You can change this in Floodgate's config:
username-prefix: "."
Some servers use * or + instead. Whatever you choose, make sure your permission plugins and other plugins handle the prefix correctly. In LuckPerms, Bedrock players appear with their prefixed name. If you create permission groups, use UUID-based assignments rather than name-based ones to avoid issues.
Form-Based GUIs for Bedrock
Java Edition players interact with chest-based GUIs (inventory menus). Bedrock players can see these too, but the experience is clunky, touchscreen inventory navigation is awkward. Geyser automatically converts some standard GUIs, but custom plugin GUIs may not translate well. For a better Bedrock experience:
- Use plugins that support Bedrock forms natively. Geyser provides an API that plugin developers can use to show native Bedrock forms (buttons, dropdowns, text inputs) instead of chest GUIs.
- Test every plugin's GUI on a Bedrock client. Some popular plugins like ShopGUIPlus and DeluxeMenus work reasonably well through Geyser's translation layer; others may need alternative interfaces.
- Consider using command-based alternatives for critical functions. If your shop GUI doesn't work well on Bedrock, add
/shop sellcommands as a fallback.
Testing from a Bedrock Client
After configuration, test the connection from an actual Bedrock client. On Windows 10/11, open Minecraft Bedrock, go to Play → Servers → Add Server. Enter your server's IP address and the Bedrock port (19132). On mobile devices, the process is the same under the Servers tab. You should see the server's MOTD and be able to join. If you installed Floodgate, you will log in with your Xbox/Microsoft account, no Java credentials needed.
Check the following during testing: can you open chests, use commands, see other players, and interact with NPCs? Walk through your server's entire new-player experience from a Bedrock client. Fix any pain points before announcing crossplay support.
Common Issues and Fixes
- Skins not loading: Bedrock skins display as Steve/Alex on the Java side by default. Geyser has a skin translation feature, but it is not perfect. Some custom skin plugins conflict, test and adjust.
- Inventory differences: Bedrock players have a different inventory layout (no offhand slot interaction the same way). Some items behave slightly differently. These are engine-level differences that Geyser cannot fully solve.
- Missing features: Dual wielding is limited on Bedrock, maps look different, and certain redstone behaviors don't match. Set expectations with your Bedrock players, crossplay is excellent but not 100% identical to Java.
- Connection refused: Make sure your firewall allows UDP traffic on port 19132. On Pterodactyl, add a new allocation for port 19132 with UDP protocol.
- Authentication errors: If using
auth-type: floodgate, verify that Floodgate'skey.pemis present and matches between Geyser and Floodgate installations. - Plugin compatibility: Some plugins check for Java-only features (like client brand strings or mod channels) and behave unexpectedly when a Bedrock player triggers them. If a plugin crashes or throws errors only for Bedrock players, check whether the developer has documented Geyser compatibility. Most popular plugins work, but niche or outdated ones may need alternatives.
Geyser on a Proxy Network
If you run a multi-server network with BungeeCord or Velocity, install Geyser on the proxy rather than on each backend server. This way, Bedrock players connect once through the proxy and can switch between servers seamlessly. Download the Geyser-BungeeCord or Geyser-Velocity jar and place it in the proxy's plugins folder. Install Floodgate on both the proxy and every backend server, and make sure the key.pem file is identical across all instances. The proxy handles the protocol translation, and backend servers see Bedrock players as normal Floodgate-authenticated users.
This setup also simplifies port management. You only need one Bedrock port (19132) open on the proxy, rather than a separate port on each backend server. It reduces complexity and makes firewall rules cleaner. For servers that plan to grow beyond a single instance, setting up Geyser on the proxy from day one saves a migration later.
Want to see a polished setup in action? Astroworld MC runs economy survival with custom bosses, ranks, crates and crossplay. IP: play.astroworldmc.com