Velocity is a high-performance, scalable proxy server for Minecraft, designed to manage multiple backend servers (e.g., lobby, survival, minigames) under a single IP. It offers seamless server switching, advanced security features, and support for both premium and cracked clients. This guide provides a comprehensive, step-by-step process to configure Velocity, ensuring optimal performance for your Minecraft network.
Velocity stands out among other proxy solutions like BungeeCord and Waterfall due to its modern design and performance optimizations. Here’s how it compares and why it might be the best choice for your Minecraft network:
Download the latest Velocity JAR file from PaperMC. Ensure you have Java 11 or later installed, as Velocity requires it for optimal performance.
java -jar velocity.jar
Run the server once to generate essential configuration files, including velocity.toml and forwarding.secret, in the server directory.
velocity.tomlThe velocity.toml file, located in the Velocity root directory, controls the proxy’s core settings. Below are the key configurations to set up your proxy.
bind = "0.0.0.0:27090"
Set the IP and port for Velocity to listen on. Use 0.0.0.0 to bind to all network interfaces, and replace 27090 with your preferred port (default Minecraft port is 25565).
online-mode = false
- true: Restricts connections to premium Minecraft accounts, verifying them with Mojang’s servers.
- false: Allows both premium and cracked (non-premium) clients to connect, ideal for inclusive servers.
false only if you have additional authentication plugins (e.g., AuthMe) on backend servers.player-info-forwarding = "modern"
Configures how player data (UUIDs, skins, etc.) is forwarded to backend servers:
- "modern": Uses Velocity’s secure forwarding for Minecraft 1.13+.
- "legacy": Required for Minecraft 1.7.2–1.12.2.
- "none": Disables forwarding (not recommended).
"modern" unless supporting older Minecraft versions.[servers] lobby = "127.0.0.1:25565" survival = "127.0.0.1:25566" minigames = "127.0.0.1:25567" try = ["lobby", "survival", "minigames"]
Define your backend servers with their numerical IPs and ports. The try list specifies the order in which Velocity attempts to connect players to servers on join. Use DNS Lookup to find numerical IPs for remote servers.
127.0.0.1 for local servers; replace with actual IPs for remote servers. Avoid using domain names directly.motd = "&6Welcome to Your Minecraft Network!&r\nJoin our &bcommunity&r today!"
Customize the server’s Message of the Day displayed in the Minecraft server list. Use & for color codes and \n for line breaks.
show-max-players = 1000 compression-level = 4 compression-threshold = 256
- show-max-players: Sets the maximum player count displayed in the server list.
- compression-level: Controls packet compression (1–9, higher values reduce bandwidth but increase CPU usage).
- compression-threshold: Minimum packet size (in bytes) to compress (default: 256).
compression-level based on your server’s CPU and network capacity. Higher values improve bandwidth efficiency but may impact performance.[forced-hosts] "lobby.yourdomain.com" = ["lobby"] "survival.yourdomain.com" = ["survival"]
Routes players connecting via specific domains to designated servers. Leave empty if not using subdomains.
ping or a DNS lookup tool.forwarding.secretCreate a secure key for player data forwarding to ensure encrypted communication between Velocity and backend servers. Use a random string/password generator like BitWarden to create a strong password.
xL9E!aaW#7Ef29pQ
Replace the contents of forwarding.secret with your generated key. Save this key securely, as it’s required for backend server configuration.
Each backend server (e.g., running PaperMC, Spigot, or Fabric) must be configured to work with Velocity. This guide uses PaperMC as an example, but the principles apply to other server software.
server.propertiesonline-mode=false
Disable online mode to allow Velocity to handle authentication. This is mandatory for proxy setups.
paper-global.ymlLocation:
- Older Paper versions: Root folder (paper.yml)
- Newer Paper versions: config/paper-global.yml
proxies:
velocity:
enabled: true
online-mode: false
secret: "xL9E!aaW#7Ef29pQ"
Configure the Velocity proxy settings:
- enabled: true: Enables Velocity forwarding.
- online-mode: false: Matches Velocity’s online-mode setting.
- secret: Must match the key in forwarding.secret.
enabled is set to true.online-mode aligns with Velocity’s configuration.secret is identical to forwarding.secret.
For Spigot or Fabric servers:
- Spigot: Edit spigot.yml and set bungeecord: true for legacy forwarding or configure Velocity forwarding similarly to Paper.
- Fabric: Install a mod like FabricProxy Lite and configure it with the same secret.
- Purpur: Edit purpur.yml and set velocity: true for modern forwarding or configure it similarly to Paper.
- Waterfall: Use waterfall.yml to set online-mode: false and secret to match Velocity’s configuration.
- BungeeCord: Edit bungee.yml and set online-mode: false and secret to match Velocity’s configuration.
- NeoForge: Install a mod like NeoVelocity and configure it with the same secret.
Apply the backend configuration steps to each server in your network (e.g., lobby, survival, minigames). Ensure each server has:
- A unique port and IP in velocity.toml.
- Consistent online-mode and secret settings.
- Compatible server software (Paper, Spigot, or Fabric with appropriate mods).
To ensure a smooth network launch:
1. Start all backend servers (e.g., lobby, survival, minigames).
2. Start the Velocity proxy server.
Velocity allows players to seamlessly switch between backend servers (often referred to as "worlds" in Minecraft) without disconnecting from the proxy. This is achieved using commands or plugins that facilitate server switching. Below, we outline the methods to enable and manage server switching in your Velocity network.
Velocity provides a native command to switch players between servers defined in velocity.toml. The primary command is:
/server <server-name>
For example, to switch to the "lobby" server:
/server lobby
Players can view available servers using:
/glist
This command lists all servers and the number of players connected to each.
velocity.command.server to use the /server command. This is granted by default but can be restricted using a permissions plugin.For a more user-friendly experience, you can install plugins on your Velocity proxy to enhance server switching. Popular options include:
To install a plugin, place the plugin’s JAR file in the plugins folder of your Velocity proxy directory and restart the proxy.
Using a plugin like ServerSelectorX, you can create a custom GUI for server switching. Below is an example configuration for ServerSelectorX (config.yml):
menus:
main:
title: "&6Choose a Server"
size: 27
items:
lobby:
material: GRASS_BLOCK
name: "&bLobby"
slot: 10
command: "server lobby"
survival:
material: DIAMOND_PICKAXE
name: "&2Survival"
slot: 12
command: "server survival"
minigames:
material: GOLDEN_SWORD
name: "&eMinigames"
slot: 14
command: "server minigames"
This configuration creates a menu with clickable items that run the /server command to switch to the specified server. Players can open the menu using:
/ssx open main
material, name, and slot to match your server’s theme and layout. Ensure the command matches the server names defined in velocity.toml.Use a permissions plugin like LuckPerms to control access to server switching. Example LuckPerms commands to grant access to specific servers:
/lpv user <player> permission set velocity.command.server.lobby true
/lpv user <player> permission set velocity.command.server.survival true
These commands allow the specified player to switch to the "lobby" and "survival" servers. To restrict access to certain servers, omit the corresponding permission.
You can automate server switching based on specific conditions using plugins or custom scripts. For example:
velocity.toml:try = ["lobby", "survival", "minigames"]
The first server in the try list acts as the fallback.
velocity.toml, and check for permission issues with LuckPerms.velocity.toml.forwarding.secret in a secure location and avoid reusing keys across servers.compression-level based on your server’s hardware and network bandwidth.velocity.toml are correct and servers are running.forwarding.secret matches the secret in paper-global.yml and that online-mode settings are consistent.compression-level if CPU usage is high.This chart illustrates the estimated effort required for each step in setting up a Velocity proxy for Minecraft, highlighting the critical tasks involved in configuring the proxy and backend servers for optimal performance.
This chart illustrates the proportional contribution of each configuration and code type used in this Velocity proxy setup guide, highlighting the technologies and formats critical to configuring and presenting the proxy setup.