Letting Bedrock players join
Why Bedrock cannot just connect
Minecraft comes in two editions that are not the same game underneath. Java Edition (the one your server runs) speaks its own protocol over TCP. Bedrock Edition, which is what phones, tablets, consoles and the Microsoft Store version run, speaks a different protocol over UDP and cannot read a Java server at all.
Bridging them takes a translator called Geyser, which speaks Bedrock to the player and Java to your server. A second piece, Floodgate, lets those players in without owning a Java account.
| Piece | Does | Needed? |
|---|---|---|
| Geyser | Translates the protocol | Always |
| Floodgate | Lets Bedrock players join without a Java account | Almost always |
| ViaVersion | Lets different Java versions connect | Unrelated: different problem |
Geyser alone will translate the connection, but your server still asks Mojang to verify a Java account that a Bedrock player does not have. Floodgate is what makes it work for players who only own Bedrock, which is the entire point for most servers.
Decide where Geyser goes
This is the decision that matters, and getting it wrong is the most common reason a setup half works. Geyser can run as a plugin on your server, or as its own standalone process.
| Setup | Put Geyser | Why |
|---|---|---|
| One Paper server | As a plugin on it | Simplest, nothing else to run |
| Several servers behind a proxy | As a plugin on the proxy | One entry point, players keep their session across servers |
| Several unrelated servers | Standalone, once | One translator serves them all |
If you run a proxy, Geyser belongs on the proxy and nowhere else. Installed on a backend as well, it fights the proxy over the player's session and produces disconnects on every server switch that look like network faults and are not. One Geyser per network.
Floodgate follows the same rule, with one addition: if Geyser is on your proxy, Floodgate goes on the proxy and on every backend server, so each one recognises the Bedrock player it is handed.
Install it
Download Geyser-Spigot.jar and floodgate-spigot.jar for a single Paper server, or
the Velocity or BungeeCord builds if you are putting them on a proxy. Upload both to
/plugins and restart fully. See
Installing your first plugins if the upload is new
to you.
Geyser and Floodgate both ship per-platform builds. A Spigot Floodgate on a Velocity proxy will not load, and the error only says the plugin failed to enable. Download both from the same place at the same time so their versions line up.
After the restart, plugins/Geyser-Spigot/config.yml exists. The lines that matter:
bedrock: # The port Bedrock players connect to. Must be a port # your plan actually has allocated. port: 19132 remote: # Leave as auto on a single server - Geyser finds it itself. address: auto port: auto auth-type: floodgate
auth-type: floodgate is the setting that makes Bedrock-only players work. If you
leave it at online, every Bedrock player is asked for a Java account and bounces.
Give it a UDP port
Bedrock uses UDP, not TCP, and on its own port. This is the second place setups go wrong: the plugin loads cleanly, the console looks healthy, and nobody can connect, because the port it is listening on was never allocated.
Open the Network tab and check your allocations. You need a port assigned
to your server for Geyser, and bedrock.port in the config must be that exact number.
Then restart and confirm Geyser says it started:
[Geyser-Spigot] Started Geyser on 0.0.0.0:19132 [Geyser-Spigot] Done (2.145s)! Run /geyser help for help!
Bedrock clients assume 19132 when no port is typed, which is why it is worth having if it is free. It often is not, because it is one port shared across a node. Any allocated port works . Players just have to type it, the same as any non-default Java port.
Tell players how to join
Bedrock cannot read SRV records, so the tidy play.example.net address with no port
that works in Java will not work here. Bedrock players need the address and the port as two
separate fields.
| Edition | What they enter |
|---|---|
| Java | play.example.net |
| Bedrock: Server Address | play.example.net |
| Bedrock: Port | 19132 (or whatever you allocated) |
On consoles, adding a server by address is restricted and players normally need a DNS app or a featured-server workaround. That is a limitation of the platform, not of your setup, and there is nothing to fix server-side.
Put the address and port on your store page, Discord and MOTD. Most “Bedrock is broken” reports are a player who typed the address alone and got a timeout, because Java players never have to think about the port.
What changes once Bedrock players are on
Two practical differences worth knowing before you advertise it.
Names carry a prefix
Floodgate prefixes Bedrock usernames, by default a dot, so .Steve. This keeps
them from colliding with Java names, and it matters for anything that takes a name as input:
whitelist add .Steve ban .Steve
You can change the prefix in Floodgate's config, but do not remove it entirely. Without it a Bedrock player can take a Java player's name.
Not everything translates
Geyser does a lot, but Bedrock has no equivalent for some Java features. Custom resource packs, complex inventory GUIs and anything built on Java-only mechanics may look wrong or not appear. Keep your core gameplay out of fancy custom inventories if Bedrock players are a real part of your audience.
When Mojang ships a Bedrock update, clients get it automatically and your Geyser does not. Players then see “Outdated server” or “Outdated Geyser proxy”, often within hours and with no change on your side. The fix is always the same: update the Geyser jar and restart. Expect this a few times a year.
Troubleshooting
The server does not appear in the Bedrock list at all
Almost always the port. Check the console says Started Geyser on 0.0.0.0:<port>,
then check that same port is allocated in the Network tab, then
check players are entering it in the Port field rather than appending it to the address.
If Geyser never logged a start line, it failed to load. Look further up for the
reason.
“Outdated server” or “Outdated Geyser proxy”
Bedrock updated and Geyser has not. Replace the Geyser jar with the current build and restart. This is also the one case where it is worth updating straight away rather than waiting. Until you do, no Bedrock player can join.
Bedrock players are kicked asking them to log in
auth-type is not set to floodgate, or Floodgate is missing or
failed to load. On a proxy network, check Floodgate is on the proxy and on each
backend. A missing backend copy kicks the player on the first server switch rather
than at the door, which makes it look like a different fault.
They join but get disconnected moving between servers
Geyser is installed in more than one place. Remove it from the backend servers and keep it only on the proxy. See also Linking servers with Velocity.
Whitelist or bans will not match a Bedrock player
Include the Floodgate prefix: .Steve, not Steve. If you
are typing it from chat, copy it rather than retyping, since the prefix is easy to miss.