How to Set Up Geyser on a Minecraft Server (Bedrock + Java Cross-Play)
Step-by-step Geyser and Floodgate setup so Bedrock players can join your Java Minecraft server: install, ports, config, proxies, version compatibility and connection fixes.

Geyser lets players on Minecraft Bedrock Edition (phones, tablets, consoles, Windows 10/11) join a Minecraft Java Edition server. You install it as a plugin or mod on the Java server, open one UDP port for Bedrock traffic, and optionally add Floodgate so Bedrock players can join without owning Java Edition. A basic setup takes about fifteen minutes; most problems afterwards are port or version issues.
This guide covers what Geyser and Floodgate do, how the two editions connect, the setup flow on Paper, Purpur, Fabric and NeoForge servers, proxy networks, the configuration options that matter, version compatibility, security and how to test the connection.
What Geyser does
Java and Bedrock speak different network protocols. Geyser is a translation layer: it accepts a Bedrock connection, converts every packet to the Java protocol and passes it to the Java server, then translates the responses back. The Java server sees an ordinary Java player. Bedrock players see a normal Bedrock server in their server list.
Because the translation is one-way into a Java server, everything on the server stays Java: plugins, worlds, commands, permissions. Bedrock-only features (behavior packs, Bedrock add-ons) do not apply, and a few Java mechanics look slightly different on Bedrock (some block interactions, inventory layouts, resource packs). For most survival and SMP servers the differences are minor.
Geyser vs Floodgate
| Geyser | Floodgate | |
|---|---|---|
| Purpose | Translates the Bedrock protocol so Bedrock clients can connect | Lets Bedrock players join without a Java (Microsoft/Mojang Java) account |
| Required? | Yes, for any Bedrock player | No, but without it every Bedrock player must log in with a Java account they own |
| Authentication | Bedrock players still sign in with their Xbox Live account on their device | Verifies the Xbox Live identity and creates a Java-side profile with a prefix (. by default) |
| Where it runs | Server or proxy | Same place as Geyser, plus every backend server behind a proxy |
Nearly every public server installs both. Geyser alone is enough only if all of your Bedrock players also own Java Edition and are willing to log in with it.
Java + Bedrock architecture
- Java players connect over TCP to the Java port (25565 by default, or whatever your host assigned).
- Bedrock players connect over UDP to the Geyser port (19132 by default, the Bedrock standard).
- Geyser listens on the UDP port and forwards to the Java server, either internally (plugin or mod on the same server) or over the network (standalone or proxy install).
Two things follow from this. First, you need a UDP port that reaches the server; a Java TCP port does not carry Bedrock traffic. Second, if your server sits behind a proxy (Velocity or BungeeCord), Geyser belongs on the proxy so Bedrock players can switch between backend servers like everyone else.
Which Geyser build to install
| Your server | Install |
|---|---|
| Paper, Purpur, Spigot | Geyser-Spigot (plugins/ folder) and Floodgate-Spigot |
| Fabric | Geyser-Fabric and Floodgate-Fabric (mods/ folder), plus Fabric API |
| NeoForge | Geyser-NeoForge and Floodgate-NeoForge |
| Velocity or BungeeCord network | Geyser and Floodgate on the proxy; Floodgate also on every backend |
| Vanilla or anything else | Geyser Standalone, run as a separate process that connects to the Java server |
Download the build that matches your platform from the GeyserMC site. Always take the latest build; Bedrock updates often, and Geyser follows within days.
Basic setup on Paper or Purpur
- Back up the server.
- Upload
Geyser-Spigot.jarandfloodgate-spigot.jarto theplugins/folder. - Restart the server once so both generate their configuration files:
plugins/Geyser-Spigot/config.ymlandplugins/floodgate/config.yml. - Set the Bedrock port. In Geyser's
config.yml, underbedrock:, setportto the UDP port players will use. On a dedicated machine with full port control, keep19132and open it in the firewall for UDP. On a hosting panel, you usually get an extra port allocation or permission to reuse your Java port number over UDP; in that second case setclone-remote-port: trueso Geyser listens on the same number as the Java server. - Set authentication. Under
remote:, setauth-type: floodgateif Floodgate is installed, oronlineif Bedrock players will log in with Java accounts. - Restart again. The console should show Geyser starting on the UDP port and Floodgate loading its key.
- Join from a Bedrock device: Play → Servers → Add Server, with your server address and the Bedrock port.
If you run a whitelist, add Bedrock players with the Floodgate prefix, for example .PlayerName, because that is the name the Java server sees.
Ports in detail
- Java Edition uses TCP. Bedrock Edition uses UDP. They are different protocols even on the same port number, which is why "the server is online but Bedrock cannot connect" is almost always a UDP port problem.
- The Bedrock default is UDP 19132. You can use any port, but players must type it when they add the server unless you use 19132.
clone-remote-port: truetells Geyser to listen on the same number as the Java port, over UDP. This is the easiest option on shared hosting where each server owns one port number across both protocols.- A domain name does not replace the port for Bedrock. Bedrock does not read SRV records, so players still enter the port unless it is 19132. (Java players can use a domain without a port; see the Minecraft SRV record generator.)
Configuration options worth knowing
In plugins/Geyser-Spigot/config.yml:
bedrock.address— leave0.0.0.0unless your host tells you otherwise.bedrock.portandbedrock.clone-remote-port— covered above.bedrock.motd1,bedrock.motd2,bedrock.server-name— what Bedrock players see in their server list;passthrough-motd: truereuses the Java MOTD instead.remote.auth-type—floodgate,onlineoroffline. Neverofflineon a public server.passthrough-player-counts— show the real player count in the Bedrock list.max-players— a display value for the Bedrock list, not an enforced limit.
In plugins/floodgate/config.yml:
username-prefix— the character prepended to Bedrock names (.by default). Keep it short and make sure plugins that validate names accept it.replace-spaces— Bedrock gamertags can contain spaces; this swaps them for underscores.player-link— lets a player link a Bedrock and a Java account so they share one profile.
Avoid editing values you do not need. Geyser's defaults are tuned for the common case.
Proxy networks (Velocity and BungeeCord)
On a network, install Geyser and Floodgate on the proxy, and Floodgate on every backend server as well. Floodgate authenticates on the proxy and passes the Bedrock identity to backends, which must trust it:
- Install Geyser and Floodgate on the proxy and start it once to generate
key.peminside the proxy's Floodgate folder. - Copy that same
key.peminto the Floodgate folder on each backend server. The key must be identical everywhere. - On the proxy, set
send-floodgate-data: truein Floodgate's config so backends receive the Bedrock data. - Keep the backends on
online-mode=falsewith the proxy enforcing authentication, exactly as a normal Velocity or BungeeCord network does, and make sure the backends are not reachable from the internet directly. - Point Geyser's
remotesection at the proxy (the defaultautohandles this for the plugin install).
Bedrock players then connect to the proxy's UDP port and can use /server or portals like Java players.
Version compatibility
- Bedrock side: Geyser supports the current Bedrock release and usually a few recent ones. After a Bedrock update, players on the new version cannot join until you update Geyser, which typically lands within days. Check the Geyser changelog when a Bedrock update ships.
- Java side: Geyser targets the current Java version. If your Java server runs an older version, Geyser still works through ViaVersion, which you install on the Java server; Geyser connects as the newest Java client and ViaVersion translates down.
- Paper/Purpur/Fabric builds: keep Geyser updated along with your server software. Most "worked yesterday" reports are a Bedrock client update that Geyser has already patched.
Security and basic configuration
- Use
auth-type: floodgateoronline.offlinelets anyone impersonate anyone and should only exist on a private LAN test server. - Floodgate's
key.pemis a secret. Do not share it outside your own proxy and backends. - If you run a proxy, firewall the backend Java ports so players can only enter through the proxy; otherwise someone can bypass authentication entirely.
- Keep your whitelist and permission plugins aware of the Floodgate prefix; a permission group that matches on name patterns may need the
.included. - Geyser adds players and therefore load. A busy cross-play server behaves like a busy Java server with a few more entities to track; the Minecraft server lag guide applies unchanged.
Testing the connection
- From the server console, confirm Geyser reports it started on the UDP port and Floodgate loaded without key errors.
- On a Bedrock device on a different network (mobile data is a fine test), add the server with the address and the Bedrock port and join.
- Check the Java console for the join message; the name should carry the Floodgate prefix.
- Run
/listfrom a Java client to see both kinds of players. - The Minecraft server status checker pings Java and Bedrock servers; use it to confirm the Bedrock port answers from outside your network.
Common connection issues
| Symptom | Usual cause | Fix |
|---|---|---|
| "Unable to connect to world" from Bedrock | UDP port closed, wrong port, or Geyser not running | Check the console for Geyser's startup line; confirm the port is a UDP allocation; try clone-remote-port on shared hosting |
| Server shows in the list but join fails | Firewall allows the ping but not the session, or version mismatch | Open UDP fully; update Geyser after a Bedrock update |
| "Outdated server" or "Outdated client" | Bedrock client newer than Geyser, or Geyser newer than the Bedrock client | Update Geyser or the Bedrock app |
| Java-side kick: "You are not whitelisted" | Whitelist entry missing the prefix | Add the player as .Name (or your configured prefix) |
| Bedrock players authenticate but get kicked on a network | key.pem differs between proxy and backend, or send-floodgate-data is off |
Copy the proxy's key to every backend; enable the setting; restart everything |
| Bedrock players asked for a Java login | auth-type is online and Floodgate is missing or not loaded |
Install Floodgate and set auth-type: floodgate |
| Console players cannot add the server | Consoles have no "add server" button for custom servers | Players use a DNS-based server list such as BedrockConnect, or join through a friend on another platform |
Running cross-play on a hosted server
Any Java plan can run Geyser; what you need from the host is a UDP port for Bedrock traffic and enough headroom for the extra players. On LuxuryNodes Minecraft hosting Paper and Purpur are selectable from the panel, Geyser and Floodgate install like any other plugin, and the panel shows the port assignments you need for the config. If most of your players are on Bedrock and you do not need Java plugins at all, a native Minecraft Bedrock server is the simpler option; if you want Java plugins and Bedrock players together, Geyser on Paper or Purpur hosting is the usual setup.
How to Host a Discord Bot 24/7 (Node.js, Python & Java)
Minecraft View Distance vs Simulation Distance: What Each Setting Does
Ready to host your own server?
Experience blazing-fast performance with LuxuryNodes. Built for gamers, loved by developers.
View Hosting Plans