On this page
- How Geyser and Floodgate fit together
- Check versions before you install
- Install Geyser and Floodgate on Paper
- Open the right port (UDP, not TCP)
- Usernames: the prefix, spaces and commands
- Plugins that need care with Bedrock players
- Permissions
- Login and authentication plugins
- Mods and resource packs
- Offhand and menus
- Account linking and shared progress
- Quick fixes when Bedrock players cannot join
Key takeaways
5- Geyser translates Bedrock to Java; add Floodgate so Bedrock players need only a Microsoft account.
- Open Geyser's port (default 19132) for UDP, not just the Java TCP port.
- Set auth-type to floodgate in Geyser's config after installing Floodgate.
- Bedrock names get a prefix (default .), so use it in commands and set allow-invalid-usernames in LuckPerms.
- Never share Floodgate's key.pem; on proxy setups, install Floodgate on the proxy and each backend and copy the key to every backend.
This guide is for server owners who run a Java server and want Bedrock players (phone, tablet, Windows Bedrock, some consoles) to join without buying a second copy of the game. By the end you will have Geyser and Floodgate running, the right port open, and a short checklist for when a plugin acts strangely with Bedrock players.
How Geyser and Floodgate fit together
Geyser is a bridge. It translates network packets between Bedrock Edition and Java Edition, so a Bedrock client can join a Java server. It runs as a plugin or mod on Paper, Spigot, Velocity, BungeeCord, Fabric and NeoForge, and its Modrinth page lists it as free and open source (MIT).
Floodgate is the companion. Without it, every Bedrock player would need a Java account to pass online-mode checks. With it, Bedrock players sign in with their Microsoft account only. Floodgate also lets Java players see Bedrock skins, and plugins can use its API to send Bedrock forms.
You can run Geyser alone, but if your server is in online mode and you want Bedrock players without Java accounts, you need both.
Check versions before you install
Geyser emulates one Java client version. On its wiki, Geyser supports Bedrock 26.30 to 26.52 and Java 26.2 (as of 3 October 2026). Bedrock updates itself on every platform, so Geyser does not support old Bedrock versions.
- Server older than 26.2: add ViaVersion to the backend server (or use a proxy setup with it), so the 26.2 client Geyser emulates can connect.
- Paper or Spigot on 1.20.5 or newer: needs Java 21 or later.
- Standalone Geyser: also needs Java 21 or later.
Install Geyser and Floodgate on Paper
The plugin route is the simplest. Get the Geyser and Floodgate plugin jars for your platform from the project pages listed above (Modrinth for Geyser, Hangar for Floodgate), or follow the links on the official Geyser wikiSource site, and put both in your plugins folder. Pick the steps for how you run your server.
- Stop the server, then upload the Geyser and Floodgate jars into the
pluginsfolder (SFTP, orwgetwith the file link from the project page). - Check
java -versionreports 21 or newer. - Start the server once so both plugins create their config folders.
- Edit Geyser's
config.ymland setauth-type: floodgate, then restart.
- Open the Console and stop the server.
- In the File Manager, open
pluginsand upload both jars (or use SFTP). - Check the Java version in the Startup tab. The Docker image sets it, and if you need Java 21 and the list lacks it, ask your host.
- Start the server, let both plugins generate their configs, then edit Geyser's
config.ymlin the File Manager, setauth-type: floodgate, and restart.
- Stop the server from the panel, then open the Files / FTP page and upload both jars into
plugins. - Start the server once so the configs appear, edit Geyser's
config.ymltoauth-type: floodgate, and restart. Ask your host if you cannot choose a Java 21 setup.
On a proxy (Velocity or BungeeCord), install Geyser on the proxy, and install Floodgate on the proxy plus each backend server that needs it. Then enable player information forwarding on Velocity (or ip_forward on BungeeCord), set bungeecord to true in spigot.yml on the backends, turn on send-floodgate-data in Floodgate's proxy config, and copy key.pem from the proxy to the Floodgate folder on every backend server.
Open the right port (UDP, not TCP)
Bedrock connects over UDP. Geyser's default is port: 19132 in the bedrock section of its config, with address: 0.0.0.0. Your Java port (usually 25565) is TCP and does not help here.
- Open the Geyser port for UDP in your firewall and, if you host at home, your router.
- Voice chat or query plugins that use UDP cannot share the same port as Geyser.
- If your host only gives you one port, set
clone-remote-port: trueso Geyser uses the Java port number. The config default isfalse. - Some hosts do not open UDP ports at all. Ask them, or look at a UDP-capable tunnel such as playit.gg (Ngrok is TCP only and does not work).
On a Pterodactyl or Multicraft host, the ports you can use are set by your host, so ask for an extra UDP port if the panel only shows the Java one.
Test it with geyser connectiontest <ip> <port> in the console. Bedrock players then add a server with your IP and the Geyser port. Some consoles do not show custom servers in the server list, so check the Geyser wiki for the current options for those.
Usernames: the prefix, spaces and commands
Floodgate gives Bedrock players a prefix on their name so they cannot clash with Java names. Two config keys matter: username-prefix (default .) and replace-spaces (default true, which turns spaces in Bedrock gamertags into underscores).
- Include the prefix in commands:
/tp .SomeGamertag. - If you choose a prefix like
*, wrap the name in quotes in commands:/tp "*SomeGamertag". - If a prefix change does not show up for returning players on certain Paper builds, delete
usercache.jsonfrom the server root and restart.
If Paper rejects Bedrock logins with "Failed to verify username!", the Floodgate docs suggest turning off perform-username-validation in config/paper-global.yml (under unsupported settings), or running Floodgate on the backend servers.
Plugins that need care with Bedrock players
Permissions
The Floodgate docs say prefixed usernames conflict with LuckPerms, and the fix is to set allow-invalid-usernames to true in LuckPerms' config. See our LuckPerms ranks guide for building the groups themselves.
Login and authentication plugins
Plugins that handle logins or premium checks can interfere with Floodgate. The Geyser FAQ keeps a list of authentication plugins that conflict, so check it before adding one. Floodgate also cannot run on Forge or Fabric hybrid servers such as Magma or Mohist, so use a proxy there.
Mods and resource packs
If a vanilla Java client can join, Geyser can too. Servers that need client-side mods will not work, because Geyser cannot translate modded blocks and items. Java resource packs are not converted automatically.
Offhand and menus
Players can use /geyser offhand to put an item in their offhand. If chat commands freeze for some Bedrock players, try turning off command-suggestions in Geyser's config.
Account linking and shared progress
By default, Bedrock players get their own player data under their prefixed name. Floodgate's linking connects a Bedrock account to a Java account. It offers global linking (a central service, on by default) and local linking (SQLite or MySQL on your server). Players run /linkaccount on one platform and /linkaccount <code> on the other.
Quick fixes when Bedrock players cannot join
| Symptom | Check this |
|---|---|
| Stuck on "Locating server" | Update Java. On poor networks, lower advanced.bedrock.mtu in 100 steps. |
| "Unable to connect to world" | Make sure advanced.java.use-haproxy-protocol is false unless you use a reverse proxy. |
| "Address already in use" | Another program (often a second Geyser) holds that port. |
| Domain does not resolve | Bedrock does not support SRV records. Use an IPv4 address and the port. |
| Encryption packet errors | Check Floodgate config and key.pem, and that Geyser and the server share the same online or offline mode. |
| Class file version 65.0 error | Update to Java 21. |
After any change to Geyser's config, geyser reload works but kicks every connected player, so schedule it. If you need help, geyser dump creates the debug report the Geyser team asks for.
The official docs live on the Geyser wikiSource site, and they are the place to check when versions move on.
Frequently asked questions
Do Bedrock players need a Java account to join my server?
Not if you run Floodgate alongside Geyser and set Geyser's auth-type to floodgate. Bedrock players then sign in with their Microsoft account only. Without Floodgate, your server's online mode would require a Java account.
What port does Geyser use?
Geyser's default is port 19132, and it must be open for UDP. Your Java port is TCP, so opening only that one will not let Bedrock players in. If your host gives you a single port, the config option clone-remote-port makes Geyser use the Java port number.
Why do Bedrock players have a dot before their name?
That is Floodgate's username-prefix, which defaults to a dot. It keeps Bedrock names from clashing with Java names. Include it in commands, or change the prefix in Floodgate's config.
Can Bedrock players use Java mods or resource packs?
Geyser can only serve what a vanilla Java client can join, so servers that need client-side mods will not work. Java resource packs are not converted automatically, so you would convert them yourself.
Does Geyser work if my server is on an older Minecraft version?
Geyser emulates a single Java client version (26.2 at the time of writing), so older servers need ViaVersion so that client can connect. Check Geyser's supported versions page after each Minecraft update.