ViaVersion: Let Players Join on Different Minecraft Versions
ViaVersion is a plugin for Paper and Purpur servers that lets players on a newer Minecraft client connect to a server running an older version. Its companion ViaBackwards does exactly the opposite: it lets clients on older versions onto a newer server. Together they keep your server reachable for everyone, and that matters more in 2026 than ever: Minecraft Java moved to year-based version numbers, with 26.1 "Tiny Takeover" in March 2026 and 26.2 "Chaos Cubed" in June 2026, while 1.21 "Tricky Trials" is still the most played version on Dutch servers.
How does protocol translation actually work?
A Minecraft client and a Minecraft server talk to each other over a fixed protocol: numbered packets that say things like "player moves to these coordinates", "place this block" or "show this screen". Every Minecraft version has its own protocol number and its own layout for those packets.
When connecting, your client sends that number first of all. If it does not match what the server expects, you get the familiar message that your client is outdated or too new, and the connection closes immediately. No attempt is made to meet in the middle.
ViaVersion inserts itself at precisely that point between client and server. The plugin recognises the protocol number of the incoming player and rewrites every packet on the fly into the shape the server understands, and everything coming back into the shape the client understands. To the server it looks like a client on its own version has connected; to the player it looks like the server is running their version. So there is no server that speaks "all versions" — there is a translator sitting in between.
What is the difference between ViaVersion, ViaBackwards and ViaRewind?
The three plugins come from the same family and perform the same trick in different directions. You install them alongside each other and they build on one another.
| Plugin | Direction | When you need it |
|---|---|---|
| ViaVersion | Newer client to older server | Your server deliberately stays on an older version, but players who have already updated still need to get in. This is the foundation; the other two do not work without it. |
| ViaBackwards | Older client to newer server | Your server runs the latest version and you do not want to shut out players who have not moved across yet. |
| ViaRewind | Add-on for ViaBackwards | You also want to admit the really old clients from before the big combat overhaul, the kind of version still alive on classic PvP servers. |
Most public servers run ViaVersion and ViaBackwards together, creating a window of versions within which anyone can connect. Only add ViaRewind if your audience asks for it: the further back you translate, the more falls apart along the way.
How do you install ViaVersion on a Paper server?
- Check your server software. Paper is the default choice for most servers and Purpur works just as well, since it is a fork of Paper with the same plugin compatibility. On Folia, the experimental multithreaded Paper, most existing plugins break.
- Download the ViaVersion and ViaBackwards jars that match your server version, both from the same release series. So no brand-new ViaBackwards next to an old ViaVersion.
- Drop the files into the
pluginsfolder. In the Pterodactyl panel you do that through the file manager; drag and drop is enough. - Restart the server fully. Do not use
/reload: Via hooks deep into the network layer and has to be loaded at startup. - Read through the console. It will show you which protocol versions have been loaded. A warning about missing mappings means the jars do not match each other or do not match your server version.
- Test with at least two client versions: walk around the map and check that placing blocks, opening chests and chat all work.
- If you want to keep certain versions out, set a lower or upper limit in
plugins/ViaVersion/config.yml.
What translates and what does not?
The core of the game translates well. Movement, placing and breaking blocks, combat, chat, inventory, chests, trading with villagers: mechanics that have worked much the same way for years and convert cleanly. For a survival or SMP server that covers the vast majority of the experience.
Where it falls down is anything that exists in one version and not in the other. That is a hard limit, not a matter of translating better. A block that was only added in a newer version simply is not in an older client's files: it cannot draw it, because it does not know what it looks like. Via then substitutes an existing block that vaguely resembles it, or else air. So a player on an old client sees something other than what is really there, or sees nothing and walks into a wall that is invisible to them. The server decides where the blocks are, after all, not the client.
The same applies to new mobs, items, sounds and particle effects. New screens, such as the interfaces that arrived with the Trial Chambers and Vaults in 1.21, show up incomplete or not at all. Resource packs are tied to a specific version too, and are often rejected by mismatched clients. Watch out as well for plugins that rely on exact packet ordering, such as anti-cheat: those can behave strangely once a translation layer sits in between. Test that separately first.
Why is this useful for a public server?
Because nobody has to switch. That sounds like a small thing, but it is the entire point. With 26.1 in March, 26.2 in June and 26.3 already in snapshots including the new "dappled forest" biome, your audience will never all be on the same version. Some stay on 1.21 because their mods, shaders or performance settings depend on it, others update the day it lands. Pick a version without Via and you automatically shut out one of those groups.
For a server you share with friends or promote through Discord, that saves a lot of hassle: you share one IP address and everyone gets in, with no explanation of launcher profiles and no compulsory update halfway through the season. If you want to admit Bedrock players as well, Geyser with Floodgate is the equivalent on that side. Via and Geyser do not clash and often run side by side, together with the essentials from our overview of the most important Minecraft plugins.
Why you should not do this on a modded server
With mods the idea falls apart. Plugins run purely server-side on otherwise vanilla mechanics; mods are loaded by a modloader and add genuinely new blocks, items, mobs and dimensions, which have to be identical on server and client. All the Mods 10 runs on NeoForge with Minecraft 1.21.1 and 400 to 500 mods, RLCraft on Forge with 1.12.2. There is nothing to translate there: the content does not exist on the other side at all.
On top of that, Via is a Bukkit plugin. A pure Forge or NeoForge server does not load plugins, so you cannot even get it in. Hybrid server software that combines mods and plugins does exist, but it is fragile and lags behind on versions. For a modpack the right approach is simply that everyone installs the same pack in the same version. Our guide on installing modpacks explains how that works.
What does it cost in performance?
Translating is work, and it happens per player and per packet. At startup, Via also loads mapping tables for every supported version into memory. On a server with a handful of players you will barely notice. With large player counts spread across many protocol versions it does become measurable in your TPS (ticks per second, the server's update rate). Measure that with the spark plugin before you start guessing where your lag comes from; our article on optimising your Minecraft server explains how to read such a profile.
If you run a network of several servers behind a proxy, you can put Via there instead of on every backend server separately. At MC-Node such a proxy starts at EUR 0.50 for 512 MB of BungeeCord, while ordinary servers on the budget line sit at a flat EUR 1.10 per GB of RAM per month, so 4 GB works out at EUR 4.40; you can see what else is included at Minecraft hosting from MC-Node.
Finally, expect slightly more support work. The wider your version window, the more often a bug report turns out to be a translation problem. Drawing a line around the versions you genuinely want to serve is calmer than admitting everything.
Frequently asked questions
Do players have to install anything for ViaVersion? No. ViaVersion runs entirely server-side, just like EssentialsX or LuckPerms. Players simply connect to the IP address and notice nothing of the translation layer. That is the difference with a modpack such as All the Mods 10, where everyone has to install the same NeoForge mod list on Minecraft 1.21.1.
Does ViaVersion work on a Forge or NeoForge server? No. Via is a plugin for Bukkit-style software such as Paper and Purpur, and a pure Forge or NeoForge server does not load plugins. It would not help anyway: mods add real blocks and items that do not exist in another version and therefore cannot be translated.
Can I run 26.2 and still let players on 1.21 in? Yes, and for that you install ViaVersion and ViaBackwards together. ViaBackwards translates the newer server data back into something the older client understands. Content that was only added in 26.1 or 26.2 will show up for those players as a substitute block or item, or not at all.
Does it work alongside Geyser for Bedrock players? Yes. Geyser with Floodgate translates the Bedrock protocol to Java, while ViaVersion and ViaBackwards translate between Java versions. They do not get in each other's way and run side by side on the same Paper installation on plenty of servers.
Does ViaVersion cost performance? Yes, but not much. Every translated player costs a little extra CPU and the mapping tables cost memory at startup. With a handful of players you will not notice a thing; with hundreds of players spread across many versions it becomes measurable. Measure it with spark.