What is the Waterfall config?
This Waterfall config creator writes both files a Waterfall proxy reads: config.yml, the BungeeCord file with your listeners, servers and IP forwarding, and waterfall.yml, the extra settings Waterfall adds on top. Use the "File" select to switch between them, download each one, and put both in the proxy folder. The rest of this page explains what Waterfall is, what each waterfall.yml setting does, how to set up config.yml for a network, and how to move to Velocity.
Waterfall is end-of-life. PaperMC stopped developing Waterfall in 2024 and recommends Velocity for every network. The existing Waterfall builds still run, but they get no new Minecraft versions, bug fixes or security fixes. If you are building a new network, use the Velocity config builder instead. This tool is for networks that still run Waterfall and need to change a setting before they migrate.
What Waterfall is
Waterfall was PaperMC's fork of BungeeCord, the proxy md_5 wrote to join several Minecraft servers into one network. Players connect to the proxy, and the proxy moves them between backend servers without a disconnect. Waterfall kept BungeeCord's plugin API and its config.yml, so BungeeCord plugins run on it unchanged, and added fixes for stability and abuse on large networks.
That shared history is why this tool has two files:
| File | Where it comes from | What it covers |
|---|---|---|
config.yml | BungeeCord | Listeners, servers, priorities, forced hosts, ip_forward, groups, permissions |
waterfall.yml | Waterfall | Tab-complete throttle, plugin channel limits, packet rewriting, DNS, logging |
Both files sit in the Waterfall folder, next to the jar. Waterfall creates them on the first start, and it fills in any key a file leaves out with its default when it starts. That rewrite also drops comments, so keep notes about your changes elsewhere.
config.yml on Waterfall
The config.yml form in this tool is the same one the BungeeCord config creator uses, and the output loads on either proxy. That page explains every key in detail. The short version for a Waterfall network:
- Listener. Set
hostto0.0.0.0:25565so players can join without typing a port, and set themotd. The MOTD generator previews&color codes before you paste them in. - Servers. Add every backend server by name with its
host:port. The names are what/serverand the priorities list use. - Priorities. List the servers new players join, in order. Every name must also be under
servers, or Waterfall stops at startup with a "not defined" error. The tool warns you when one is missing. - Forced hosts. Map a domain such as
skyblock.example.comto one server so players who connect through it skip the lobby. - ip_forward. Turn it on, and set
bungeecord: truein each backend'sspigot.ymlwithonline-mode=falsein itsserver.properties. The spigot.yml generator and server.properties generator write those files.
Because the backend servers run in offline mode and trust the proxy, their ports must not be reachable from the internet. Firewall them so only the proxy can connect, or bind them to 127.0.0.1 when everything runs on one machine.
waterfall.yml settings
waterfall.yml is short. Every key the tool writes is listed here with its default.
Tab completion
throttling:
tab_complete: 1000
disable_modern_tab_limiter: true
throttling.tab_complete is how many milliseconds a player must wait between tab-complete requests. Old clients sent a request for every keystroke, and spamming them was a cheap way to lag a proxy. 0 turns the throttle off.
disable_modern_tab_limiter: true applies that throttle only to clients older than 1.13. Newer clients send tab-complete requests as the player types a command, so throttling them makes command suggestions feel broken. Leave it on unless you only allow 1.13 and newer clients and see abuse.
Plugin channel limits
registered_plugin_channels_limit: 128
plugin_channel_name_limit: 128
Clients and mods register plugin message channels with the proxy. These two settings cap how many channels one connection can register and how long a channel name can be. They protect the proxy from clients that register thousands of channels to use up memory. Large modpacks can register more than 128 channels; if Forge or Fabric players get kicked with a message about too many channels, raise registered_plugin_channels_limit to 256 or 512.
Packet rewriting
disable_entity_metadata_rewrite: false
disable_tab_list_rewrite: true
When a player switches servers, entity IDs on the new server differ from the ones the client knows, so BungeeCord rewrites them in packets. disable_entity_metadata_rewrite: true skips that rewrite inside entity metadata packets. Some mods need it on; on a plugin network, leave it off, because turning it on can break effects that point at an entity after a server switch, such as a fishing line or a leash.
disable_tab_list_rewrite: true skips rewriting player UUIDs in tab list packets. That rewrite only changes anything when the backend servers see different UUIDs from the real ones, which happens when ip_forward is off. With ip_forward: true, keep the default.
Game version, DNS and logging
game_version: ""
use_netty_dns_resolver: true
log_initial_handler_connections: true
game_version is the version text a client sees in the server list when its version is not supported. Empty shows the range the proxy supports. Networks that only allow one version sometimes set it to that version so players know what to install.
use_netty_dns_resolver: true resolves backend server hostnames without blocking a network thread. Keep it on.
log_initial_handler_connections logs a "has connected" line for every ping and login attempt. On a public network listed on server list sites, that is one line per ping, so the Quiet Logs preset turns it off together with log_pings in config.yml.
Recommended values
| Setting | Plugin network | Modded network (Forge or Fabric) | Behind TCPShield or HAProxy |
|---|---|---|---|
ip_forward | true | true | true |
proxy_protocol | false | false | true |
connection_throttle | 4000 | 4000 | -1 |
throttling.tab_complete | 1000 | 1000 | 1000 |
registered_plugin_channels_limit | 128 | 256 or more | 128 |
disable_entity_metadata_rewrite | false | as your mods need | false |
log_initial_handler_connections | true | true | false |
Behind TCPShield or HAProxy, every player arrives from a few addresses, so the connection throttle would block real players. Set connection_throttle: -1 there and turn proxy_protocol on, as the Behind TCPShield preset does.
Moving from Waterfall to Velocity
Since Waterfall no longer gets updates, plan the move to Velocity. Most of the work is in the proxy config and the backend forwarding settings; the backend worlds and plugins stay as they are.
- Check your proxy plugins. Velocity does not run BungeeCord plugins. Most popular ones (LuckPerms, Geyser, ViaVersion, TAB, LibertyBans, spark) have Velocity builds. Replace the rest or find alternatives before you switch.
- Write velocity.toml. The Velocity config builder has the same parts as
config.yml:[servers]for your backend list,tryfor the priorities, and[forced-hosts]for domains. Copy your server names and addresses across. - Switch to modern forwarding. Set
player-info-forwarding-mode = "modern"in Velocity. On each Paper backend, setbungeecord: falseinspigot.ymland turn onproxies.velocityinpaper-global.ymlwith the secret from Velocity'sforwarding.secret. The Paper config generator writes that part. Modern forwarding signs the player data with the secret, so a backend cannot be joined directly even if a port is left open. - Keep legacy forwarding for old backends. Spigot servers, and Paper older than 1.13, cannot use modern forwarding. Velocity's
legacymode works withbungeecord: true, the same way Waterfall did. - Test before you switch the DNS. Run Velocity on another port, join through it, check skins, permissions and server switching, then swap it onto the public port.
Velocity gets support for new Minecraft versions from PaperMC. The Minecraft 1.21.5 notes for server admins cover how proxies handle a new version across backends.
Common mistakes
- Running Waterfall for a new network. It will not get new Minecraft versions or security fixes. Start on Velocity.
- Backend ports open to the internet. With
online-mode=falseon the backends, anyone who reaches a backend port can join as any player. - ip_forward set on only one side.
ip_forward: trueinconfig.ymlneedsbungeecord: truein every backend'sspigot.yml. - Editing only config.yml. The tab-complete and plugin channel limits live in
waterfall.yml. Download both files if you change settings in both. - A priority that is not a server. Waterfall will not start until every name in
prioritiesis underservers. - Turning disable_modern_tab_limiter off without a reason. Command suggestions stop updating as players type.
How to install the generated files
- Stop Waterfall with
end. - Pick
config.ymlin the "File" select, set it up, and download it. Then pickwaterfall.ymland download that too. - Replace both files in the Waterfall folder. To keep settings this tool does not cover, copy only the keys you changed into your existing files.
- Make sure each backend has
bungeecord: trueinspigot.ymlandonline-mode=falseinserver.properties. - Start Waterfall and check the console for YAML errors or "not defined" messages, then join through the proxy and run
/serverto test switching.
A Waterfall or Velocity proxy needs little memory; 512 MB to 1 GB covers most networks. How much RAM a Minecraft server needs covers the backends, and the JVM arguments generator writes start flags. For managed hosting, check out ChunkPod.
Frequently Asked Questions
Ask the AI assistant
The AI assistant under the generator reads the config you've built and answers questions about it: what a setting in waterfall.yml does, how forwarding reaches the backends, or what moving to Velocity involves. It's free, with 20 questions a day.