
Quick setup on a Space-Node server:
- Put Geyser and Floodgate in your
pluginsfolder (Paper, Spigot, Purpur) ormodsfolder (Fabric, NeoForge). - Give Geyser a UDP port. Either set
clone-remote-port: true, so Bedrock uses the same port number as Java, or create an extra allocation in the panel's Network tab and set that port asportunderbedrockin the Geyser config. - Set
auth-type: floodgatein the Geyser config, so Bedrock players do not need a Java account. - Restart, run
geyser connectiontest <ip> <port>in the console, then join from Bedrock with your server address and the Bedrock port.
On your own VPS: the same, but open the Bedrock port for UDP in your firewall (19132 by default).
Console players (Xbox, PlayStation, Switch): consoles have no "Add Server" button. They join through BedrockConnect, see the console section below.
This is our most complete Geyser guide. Shorter guides with a single focus are listed at the end.
Why cross-play matters
Two editions, one group of friends
Minecraft comes in two editions that cannot talk to each other. Java Edition runs on PC. Bedrock Edition runs on phones, tablets, Xbox, PlayStation, Nintendo Switch and the Minecraft for Windows app. In most friend groups at least one person is on Bedrock.
Java servers cannot accept Bedrock connections on their own. The two editions use different network protocols.
GeyserMC translates between them in real time, so Bedrock players can join a Java server.
What you can and cannot do
With Geyser, Bedrock players can:
- join a Java server from mobile, Windows, and from Xbox, PlayStation and Switch with a workaround,
- play survival, creative and most minigames,
- see Java players, chat, trade and build together.
The limits:
- Geyser only works with server-side mods. The Geyser docs are direct about it: "Mods that require a client-side install will not work!"
- Some things cannot be translated at all. The Geyser wiki's list of current limitations includes clickable links in chat, telling left and right clicks apart in inventories, and anything that relies on tab completion.
- Game rules come from the Java server. Redstone, combat and farms behave the Java way for everyone, which can surprise players used to Bedrock.
- Translating packets costs the server some extra work for every Bedrock player.
Use case: your friend only has a phone, you have a PC. With Geyser you play together on your Java server.
Want your whole friend group on one server? Java, mobile, Xbox, PlayStation and Switch players on the same world. Pick the Space-Node location closest to most of your group. The plan selector on the Minecraft page measures your ping to each location from your own browser.
Architecture: how Geyser works
The translation layer
Bedrock Player (Xbox): Java Server:
┌─────────────┐ ┌──────────────┐
│ Bedrock │ UDP │ │
│ Client ├───────────────>│ Geyser │
│ (Sends │ Bedrock port │ Plugin │
│ Bedrock │ │ (Translates)│
│ Packets) │ └──────┬───────┘
└─────────────┘ │ Java protocol
│
┌──────▼───────┐
│ Java Server │
│ (Thinks it's │
│ a Java client)│
└──────────────┘
Key points:
- Geyser listens for Bedrock players on a UDP port. The default is 19132.
- It translates Bedrock packets to Java packets and back, in real time.
- It hands them to the Java server as if a Java client connected. The Geyser FAQ says it "emulates a Minecraft: Java Edition client". The plugin and mod versions do this inside the server process, which the FAQ says gives faster loading, lower latency and accurate IP addresses.
- The Java server treats Bedrock players as normal players.
Why UDP?
- Java Edition connects over TCP.
- Bedrock Edition connects over UDP. The Geyser setup page: "Since Minecraft: Bedrock Edition uses UDP, this port must allow UDP traffic."
That does not always mean a second port number. With clone-remote-port enabled, Bedrock uses UDP on the same number as the Java port. Without it, Geyser needs its own port.
Installation: step by step
Prerequisites
| Requirement | What you need |
|---|---|
| Server software | Paper, Spigot or Purpur (plugin), Fabric or NeoForge (mod), a proxy such as Velocity, or Geyser Standalone |
| Minecraft version | Geyser follows the newest Java version, 26.2 at the time of writing. Older Paper and Spigot servers need ViaVersion. Geyser-Fabric and Geyser-NeoForge run only on 26.2 |
| Ports | The Java port (TCP) and a Bedrock port (UDP): the same number with clone-remote-port, or an extra allocation |
| RAM | Some headroom on top of what the server already uses. How much depends on how many Bedrock players are online |
Where Geyser does not run directly:
- Vanilla servers cannot load plugins. Use Geyser Standalone next to them.
- Forge is not among the platforms on the Geyser setup page (Paper and Spigot, Fabric, NeoForge, proxies, ViaProxy, Standalone). And even with Standalone, mods that need a client install do not work for Bedrock players.
- Realms cannot run plugins at all.
Method 1: Paper, Purpur or Spigot (plugin)
Step 1: Download Geyser
# Navigate to plugins folder
cd ~/minecraft-server/plugins
# Download latest Geyser-Spigot
wget https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot \
-O Geyser-Spigot.jar
On a Space-Node server you can skip the command line. Download the jars from geysermc.org and upload them through the panel's file manager or over SFTP.
Step 2: Download Floodgate
Floodgate lets Bedrock players join without owning Java Edition.
# Download Floodgate
wget https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot \
-O floodgate-spigot.jar
Step 3: Restart the server
Restart fully so both plugins create their config files. You should see Geyser start in the console. Then set the Bedrock port as described in the port section below and restart once more.
If you see errors, skip to the troubleshooting section.
Method 2: Fabric or NeoForge (mod)
The Geyser docs note that Geyser-Fabric and Geyser-NeoForge run only on a 26.2 server. Fabric also needs Fabric API.
# Navigate to mods folder
cd ~/minecraft-server/mods
# Download Geyser-Fabric (use .../downloads/neoforge for NeoForge)
wget https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/fabric \
-O Geyser-Fabric.jar
Floodgate for Fabric and NeoForge comes from its Modrinth page, as the Floodgate setup page describes. The Geyser config then sits in /config/Geyser-Fabric/config.yml or /config/Geyser-NeoForge/config.yml.
Remember the rule from above: only server-side mods work for Bedrock players. A modpack that players must install on their own PC will not work for them.
Restart the server as in Step 3 above.
Method 3: Standalone (for servers that cannot load plugins)
If you run vanilla, or cannot install plugins:
# Create Geyser directory
mkdir ~/geyser-standalone && cd ~/geyser-standalone
# Download Geyser-Standalone
wget https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/standalone \
-O Geyser-Standalone.jar
# Start Geyser
java -Xms512M -Xmx512M -jar Geyser-Standalone.jar
Edit the config to point to your Java server:
# config.yml (Standalone)
java:
address: 127.0.0.1 # Java server IP (localhost if same machine)
port: 25565 # Java server port
auth-type: online # Requires Java accounts unless using Floodgate
Older Geyser versions call this section remote instead of java. The setting names inside are the same.
Restart Geyser. Bedrock players connect to <geyser-ip>:<bedrock port>. The GeyserMC FAQ recommends the plugin versions over Standalone where you can use them.
Critical: the Bedrock UDP port
A very common reason Geyser fails
Error seen by Bedrock players:
Unable to connect to world.
Cause: the Bedrock port does not reach Geyser over UDP.
Why this is confusing: most tutorials only talk about the Java port, which is TCP. Bedrock needs UDP.
On Space-Node (and other panel hosts)
You have two options. Both are free.
Option A: clone-remote-port. In the Geyser config:
bedrock:
address: 0.0.0.0
port: 19132
clone-remote-port: true
The Geyser docs: "This option makes the Bedrock port the same as the Java port every time you start the server." The port value is then ignored. Bedrock players type your server address and the same port number Java players use. No extra allocation needed.
Option B: an extra allocation.
- In the panel, open the Network tab and click Create Allocation. Your plan includes three allocations, and we can raise that to five on request.
- Note the new port.
- Set it in the Geyser config and leave
clone-remote-portoff:
bedrock:
address: 0.0.0.0
port: 25591 # your new allocation's port
clone-remote-port: false
- Restart. Bedrock players now type your server address and this port.
Ports that cannot be shared. The Geyser setup page is explicit: "Other services/plugins that rely on ports with UDP, such as Voice Chats or Query, cannot share the port with Geyser." If you run Simple Voice Chat, it gets its own allocation. If you use Option A and have enable-query=true in server.properties, the query also wants UDP on the game port, so turn it off or move query.port to another allocation. Our Simple Voice Chat fix explains the voice side.
If Bedrock players still cannot connect after this, ask in live chat.
Linux (UFW firewall)
# Allow UDP 19132 (Bedrock)
sudo ufw allow 19132/udp
# Verify
sudo ufw status
# Should show:
# 19132/udp ALLOW Anywhere
# 25565/tcp ALLOW Anywhere
If UFW is inactive:
sudo ufw allow 25565/tcp
sudo ufw allow 19132/udp
sudo ufw enable
Allow the Java port before you enable UFW, and also allow SSH if you manage the box over SSH, or you lock yourself out.
VPS (cloud firewall: AWS, DigitalOcean, Hetzner)
Example: DigitalOcean
- Go to Networking, then Firewalls
- Edit your firewall rule
- Add an Inbound Rule:
- Type: Custom
- Protocol: UDP
- Port Range: 19132
- Sources: All IPv4 / All IPv6
Example: AWS EC2 Security Group
- Go to EC2, then Security Groups
- Select your instance's security group
- Inbound Rules, Edit
- Add rule:
- Type: Custom UDP
- Port: 19132
- Source: 0.0.0.0/0 (anywhere)
Windows Server (firewall)
# Open PowerShell as Admin
New-NetFirewallRule -DisplayName "Minecraft Bedrock (Geyser)" `
-Direction Inbound `
-Protocol UDP `
-LocalPort 19132 `
-Action Allow
Verify:
Get-NetFirewallRule -DisplayName "Minecraft Bedrock (Geyser)"
Test the port
Tools like nc -u cannot tell you whether a UDP port is open, because UDP has no handshake. Use Geyser's own test instead. In the server console:
geyser connectiontest <ip> <port>
Use your public server address and the Bedrock port players will type.
Floodgate configuration
Why Floodgate matters
Without Floodgate:
- Bedrock players must own Java Edition and sign in with that account.
With Floodgate:
- Bedrock players join with the Microsoft account they already use on Bedrock.
- No Java Edition purchase required. In the Geyser docs' words, Floodgate lets them join "without needing to log in to a paid Java Edition account".
- The server sees them with a prefix,
.by default, soSteveon Bedrock becomes.Steve.
Setup
- Install Floodgate next to Geyser (see Method 1 or 2) and restart.
- In the Geyser config, set:
java:
auth-type: floodgate
(remote: instead of java: on older Geyser versions.)
- Restart again.
Floodgate creates its own config in plugins/floodgate/config.yml. The defaults are fine for most servers. The prefix lives here:
# plugins/floodgate/config.yml
# Prefix added to Bedrock usernames to avoid name clashes with Java players
username-prefix: "."
# Should spaces be replaced with '_' in Bedrock usernames?
replace-spaces: true
Floodgate also creates key.pem. The Floodgate docs are blunt about it: "DO NOT DISTRIBUTE THIS KEY TO ANYBODY!" Anyone with that key can let Bedrock accounts bypass Java authentication on your server.
Test: join from Bedrock. Your name shows with the . prefix.
Connecting from Bedrock clients
Mobile (iOS/Android)
- Open Minecraft (Bedrock)
- Tap Play, then the Servers tab
- Scroll down, tap Add Server
- Enter:
- Server Name: Your Server
- Server Address: your server address
- Port: your Bedrock port (the Java port if you use
clone-remote-port)
- Tap Save, then tap the server to join
Example:
Server Address: play.yourserver.com
Port: 19132
Windows (Bedrock edition)
Not Java Edition. This is the Minecraft for Windows app.
- Open Minecraft for Windows
- Click Play, then Servers
- Scroll to the bottom, Add Server
- Enter the same details as on mobile
- Join
Common mistake: opening the Java Edition launcher instead of the Bedrock app.
Xbox, PlayStation and Nintendo Switch
Consoles have no "Add Server" button. The Geyser wiki says all consoles can still join third-party servers, Geyser servers included, with workarounds. The usual workaround is BedrockConnect.
Console connection: BedrockConnect DNS
What is BedrockConnect?
BedrockConnect is a small third-party Bedrock server that shows players a server list where they can type any address. It is free and open source, and not affiliated with GeyserMC.
How it works:
- You change the console's primary DNS to a BedrockConnect server.
- You open one of the featured servers in the Servers tab.
- Instead of that featured server, the BedrockConnect server list opens.
- There you enter your own server address and port.
The BedrockConnect page lists these featured servers as redirect-compatible: Mineville, Lifeboat, Enchanted, Galaxite and The Hive.
Only use DNS addresses from the official BedrockConnect GitHub page. A DNS server sees your console's lookups, so do not take addresses from random videos or comments.
Xbox and Nintendo Switch
Step 1: Have your server details ready
- Server address:
play.yourserver.com(or an IP like123.45.67.89) - Port: your Bedrock port
Step 2: Change the DNS
In the console's network settings, set DNS to manual and enter:
- Primary DNS:
104.238.130.180 - Secondary DNS:
8.8.8.8
On Switch: System Settings, Internet, Internet Settings, pick your network, Change Settings, DNS Settings, Manual.
Step 3: Join via a featured server
- Open Minecraft
- Play, then Servers
- Pick a redirect-compatible featured server, such as The Hive
- The BedrockConnect server list opens
- Enter your server address and port, and join
BedrockConnect can keep your server in its list, so next time it is one click. The Nintendo Switch needs a Nintendo Switch Online membership for online play.
PlayStation 4/5
The BedrockConnect page lists a separate DNS for PlayStation:
Primary DNS: 45.55.68.52
Secondary DNS: 8.8.8.8
Steps (PS4, the PS5 menus are similar):
- Settings, Network, Set Up Internet Connection
- Select Wi-Fi or LAN cable
- Custom
- IP Address Settings: Automatic
- DHCP Host Name: Do Not Specify
- DNS Settings: Manual
- Primary:
45.55.68.52 - Secondary:
8.8.8.8
- Primary:
- Test Connection
Join via a featured server, the same as on Xbox.
If it does not work: the Geyser wiki notes that the main BedrockConnect IP is often blocked on consoles. The BedrockConnect GitHub page lists other community-run instances, and the Geyser wiki points to the Public GeyserConnect as another option.
Phone apps (no DNS change)
For players who would rather not change DNS:
Apps such as BedrockTogether (Android, iOS 14 or later) and MCCompanion (iOS, Android, macOS, Windows), both listed on the Geyser wiki, make your server show up as a LAN game.
- Install the app on a phone
- Enter your server address and Bedrock port
- Start it
- On the console, open Minecraft, go to the Friends tab and join the LAN game
Limitation: the console and the phone must be on the same network.
Geyser configuration in more detail
config.yml
Location: plugins/Geyser-Spigot/config.yml (plugin), config/Geyser-Fabric/config.yml or config/Geyser-NeoForge/config.yml (mod).
Current Geyser versions group the settings into sections. The ones most people touch:
bedrock:
# IP Geyser listens on. Leave at 0.0.0.0 unless you want to limit it.
address: 0.0.0.0
# Port Bedrock players connect to (ignored when clone-remote-port is true)
port: 19132
# Use the Java port for Bedrock as well
clone-remote-port: false
java:
# online (Java account needed), floodgate, or offline
auth-type: floodgate
motd:
# Shown to Bedrock players when passthrough-motd is false
primary-motd: "My Java Server"
secondary-motd: "Java and Bedrock"
passthrough-motd: true
# Only visual, and only used when passthrough-motd is false
max-players: 100
gameplay:
# Show coordinates to Bedrock players
show-coordinates: true
# Block Bedrock's scaffolding-style bridging
disable-bedrock-scaffolding: false
Note on max-players: this is not a separate player limit for Bedrock. The config itself says it "is only visual". Your real limit is the Java server's max-players in server.properties.
Restart the server after changes. geyser reload exists too, but the Geyser docs warn that it kicks all players when used.
Linking Java and Bedrock accounts
Problem: you have a Java account (Steve) and a Bedrock account (.Steve through Floodgate). The server sees two different players with two inventories.
Solution: Floodgate's Global Linking, which is on by default in Floodgate 2.0.
How to link:
- Join the GeyserMC link server with both accounts:
link.geysermc.org, Java port 25565, Bedrock port 19132. - Type
/linkaccounton one of them. You get a code. - On the other account, type
/linkaccount <code>. - Both accounts are kicked with a message that the link worked.
After linking, the GeyserMC docs say you use the Java account's location, inventory and achievements from either platform. The Bedrock account's own data is not accessible until you unlink, so move your items to the Java side first.
You do not need to install anything on your server for this. Servers that prefer their own database can set up local linking with a Floodgate database extension and enable-own-linking, as described on the Floodgate linking page.
Troubleshooting
Error: "Unable to connect to world" (Bedrock)
Cause 1: the Bedrock port does not reach Geyser
Run geyser connectiontest <ip> <port> in the console. On Space-Node, check that you either enabled clone-remote-port or set port to an allocation that belongs to your server. On a VPS, check that UDP is open:
# Test from the server itself
sudo ss -ulpn | grep 19132
# Should show a UDP listener on :19132
Fix: see the port section above.
Cause 2: Geyser is not running
Check the console during startup for Geyser's startup message, and check that the jar is in the right folder:
ls ~/minecraft-server/plugins/ | grep -i geyser
Fix: reinstall Geyser (see the installation section).
Cause 3: something else holds the port
Voice chat or the query on the same port as Geyser. Give each its own port.
Bedrock players must sign in to a Java account, or are kicked on login
Cause: auth-type is online and Floodgate is not set up. Geyser then expects a Java account.
Fix: install Floodgate and set auth-type: floodgate in the Geyser config.
java:
auth-type: floodgate # Not "online"
server.properties:
# Keep this true for Java players
online-mode=true
Restart the server. Bedrock players can now join without Java accounts.
Error: Bedrock players see "Outdated Client" or "Outdated Server"
Cause: Bedrock clients update automatically, and your Geyser build does not support the newest Bedrock version yet.
Fix: update Geyser to the latest build and restart. On Paper and Spigot, also check whether ViaVersion needs an update.
Performance: Bedrock players lag more than Java players
Cause: translation work on the server, plus mobile connections that are often less stable than a wired PC.
What helps:
- Keep Geyser, Floodgate and your server software up to date.
- Check with spark where the server's time actually goes before changing anything.
- If the whole server is under load, lower
view-distanceorsimulation-distanceinserver.properties. That affects every player, Java and Bedrock. - Remember that a phone on mobile data will always feel worse than a PC on a cable.
Java players cannot see Bedrock skins
Cause: Bedrock skins come from Microsoft accounts, not from Java's skin system.
Fix: make sure Floodgate is installed. It is what normally makes Bedrock skins visible to Java players. If skins still show as Steve or Alex, our Bedrock skins fix goes through the other causes.
Security considerations
Bedrock sign-in
Floodgate trusts players because Geyser checks their Microsoft (Xbox) sign-in before passing them on. That trust rests on the key.pem shared between Geyser and Floodgate. Keep that file private, never paste it in a support chat or a public repository, and replace it if it leaks.
Result: a .Steve on your server is the Bedrock account "Steve", not someone typing that name.
Bedrock-specific mechanics
Some movement is different on Bedrock. Scaffolding-style bridging is the best-known example. If that matters on your server, set disable-bedrock-scaffolding: true in the gameplay section of the Geyser config.
If you run an anticheat, check the Geyser wiki's anticheat compatibility page before you open the server to Bedrock players. Anticheats that do not know about Geyser can flag Bedrock movement.
Performance impact
Java only versus Geyser enabled
We do not publish benchmark numbers for this. The load depends on your plugins, your world and how many Bedrock players are online at once. This is what changes:
| Area | Java only | With Geyser |
|---|---|---|
| Server work per player | Normal | Extra work for every Bedrock player, because each packet is translated |
| RAM | Normal | Somewhat higher while Bedrock players are online |
| Ports | Java port (TCP) | Plus a UDP port for Bedrock, or the same number with clone-remote-port |
| Where the cost lands | n/a | On the server that runs Geyser (or the proxy, if Geyser runs there) |
Check the cost on your own server with spark while Bedrock players are online.
For larger networks, Geyser can run on the proxy (Velocity or BungeeCord) or as Standalone, which moves the translation work off the game server:
Bedrock Players → Geyser (proxy or Standalone) → Java Server
Multi-server setup (Velocity + Geyser)
For networks with multiple backend servers:
┌─────────────┐
│ Velocity │ (Proxy)
│ + Geyser │
│ + Floodgate│
└──────┬──────┘
│
┌───────────────┼───────────────┐
│ │ │
┌────▼────┐ ┌────▼────┐ ┌────▼────┐
│ Lobby │ │ SMP │ │Minigames│
│ Server │ │ Server │ │ Server │
└─────────┘ └─────────┘ └─────────┘
The Geyser docs: "Install Geyser only on the proxy server!"
1. Install Geyser and Floodgate on the Velocity proxy
cd ~/velocity/plugins
wget https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/velocity \
-O Geyser-Velocity.jar
wget https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/velocity \
-O floodgate-velocity.jar
Set auth-type: floodgate in the Geyser config on the proxy. Give Geyser a UDP port on the proxy, the same way as above.
2. Optional: Floodgate on the backend servers
You only need this when plugins on the backends use the Floodgate API. The Floodgate setup page adds that it also displays Bedrock skins properly. Then:
- set up player information forwarding on Velocity,
- set
send-floodgate-data: truein the proxy's Floodgate config, - copy
key.pemfrom the proxy's Floodgate folder to every backend's Floodgate folder.
3. Versions
The Geyser docs: "All servers on the network must accept 26.2 Java clients, as Geyser imitates one." Use ViaVersion on older backends.
Result: Bedrock players connect to the proxy and get routed to the backend servers like everyone else.
Monitoring Bedrock players
Seeing who is on Bedrock
In game or in the console:
/geyser list
This lists all players connected through Geyser.
In the logs:
tail -f logs/latest.log | grep -i geyser
Spark profiling for Geyser overhead
/spark profiler --timeout 120
Look for org.geysermc.geyser in the results. If Geyser takes a large share of the tick while few Bedrock players are online, update Geyser first. If it grows with the number of Bedrock players, consider moving Geyser to a proxy.
Conclusion: is cross-play worth it?
Pros
- Bedrock friends can join your Java server from phones, Windows and consoles
- One community instead of a separate Bedrock server
- Free: Geyser and Floodgate are open source
- No extra cost for the port on Space-Node:
clone-remote-port, or a free extra allocation
Cons
- Extra server load for every Bedrock player
- Some things cannot be translated (see the Geyser limitations list)
- Client-side mods do not work for Bedrock players
- Consoles need a workaround (BedrockConnect or a phone app)
Recommendation
Use Geyser if:
- you have friends or community members on mobile or console,
- you run vanilla, plugins, or server-side mods only,
- you want the widest possible reach.
Skip Geyser if:
- your modpack must be installed on the client,
- you need every Java mechanic to feel identical for everyone, such as on a competitive PvP server.
For most friend groups and community servers, cross-play is worth setting up.
Run your cross-play server on Space-Node
What you get for Geyser on a Space-Node Minecraft server:
- The Bedrock port at no extra cost: use
clone-remote-port, or create an extra allocation in the Network tab. Three allocations are included, and we can raise that to five on request. - Room for voice chat too: Simple Voice Chat gets its own allocation next to Geyser.
- Full file access: file manager and SFTP, so you can install Geyser, Floodgate and ViaVersion yourself.
- Locations in Europe, North America, Asia and Australia: the plan selector measures your ping to each one before you order.
Start a Minecraft server at Space-Node
Other Geyser guides with a narrower focus:
- Connect mobile players to your Java server
- GeyserMC and Floodgate on Paper, step by step
- GeyserMC cross-play tutorial: plugin or Standalone
- What to check in a host before you run Geyser
Related guides: