ViaVersion: Connecting Newer Minecraft Clients to Older Servers
Allows of newer clients to connect to older server versions for Minecraft servers.
At a glance
- What is it?
- ViaVersion is a Java protocol-compatibility layer for Minecraft servers, with its base JAR targeting Paper and Velocity. It is best suited to operators who need newer clients to join older server versions and want the strongest state accuracy on those supported platforms.
- Who is it for?
- ViaVersion fits Paper and Velocity operators who want newer clients to connect to older servers, or older clients down to 1.9 when paired with the documented companion modules. It is a poor fit for a platform without a Via integration, or for deployments where the translation layer conflicts with plugin behavior.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 2 days ago.
- What is it written in?
- Mainly Java, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
ViaVersion's Minecraft Version Compatibility Boundary
ViaVersion addresses a specific mismatch in Minecraft deployments: the client and server do not speak the same supported protocol version. Its stated purpose is to allow higher client versions to connect to lower server versions. This is useful to server operators who want to retain an established server environment without preventing players on newer clients from joining.
Compatibility has a defined boundary rather than covering every combination equally. The support table distinguishes three cases. A newer client connecting to an older server requires ViaVersion. An older client connecting to a newer server requires ViaVersion plus ViaBackwards, with support extending down to Minecraft 1.9. Clients from 1.7.x through 1.8.x require ViaVersion, ViaBackwards and ViaRewind together. The README also links to a setup tool for identifying the required projects.
The base JAR is intended for Paper and Velocity. Other environments use separately integrated projects for Fabric, Forge, Bungee and Sponge, while ViaProxy can operate as a standalone proxy. That distinction matters. Seeing ViaVersion in a broader list of Minecraft integrations does not mean the same artifact or behavior applies everywhere.
Translation and Mapping Structure Inside ViaVersion
The repository describes ViaVersion as a protocol-compatibility layer, and its layout supports a modular implementation organized around `common`, platform modules such as `bukkit` and `velocity`, and the public `api` directory. The base project therefore separates shared logic from platform integration rather than presenting the JAR as one undifferentiated server plugin.
Protocol translation requires data that maps packet and state differences between Minecraft versions. The README says those mapping files are generated and managed in the separate ViaVersion Mappings repository. Generated output is stored under `common/src/main/resources/assets/viaversion`. This makes the conversion data a versioned project component rather than something a server operator manually defines.
The repository does not provide a low-level sequence showing the handling of a specific login packet or inventory action, so a more detailed packet-by-packet claim would be unsupported. It does establish the architecture relevant to operation: platform-specific modules host ViaVersion, shared conversion code uses generated mappings, and optional companion projects expand the accepted version range. API consumers can use `viaversion-api`; code that needs existing protocol or platform implementations is directed to the parent `viaversion` artifact.
Paper and Velocity Accuracy Trade-Offs
ViaVersion does not claim equal behavior on every supported platform. The README specifically says that it works reliably across the listed platforms, but has the highest performance and state accuracy on Paper servers and through ViaFabricPlus on clients. The stated reason is that both provide more extensive APIs and direct access to client or server state.
That qualification changes how the project should be selected. Paper and Velocity are not merely two download labels in the documentation. They are the documented targets for the base JAR, and Paper is specifically associated with the strongest server-side state accuracy. ViaFabricPlus is the client-side path associated with the same accuracy distinction. Operators on Fabric, Forge, Bungee or Sponge must consult the relevant Via integration rather than assuming the base JAR installs there.
For proxy and plugin environments, ViaProxy and the separate platform projects offer different deployment shapes. ViaProxy is documented as a standalone proxy, while ViaBungee and ViaSponge represent integrations with their respective platforms. The available repository layout covers core, universal, Bukkit and Velocity code, but the README does not provide deployment instructions for every integration. Platform setup therefore cannot be safely reconstructed from the base repository instructions alone.
Installing ViaVersion and Building the First JAR
For ordinary deployment, the README directs users to official plugin releases on Hangar, mod releases on Modrinth, and project releases on GitHub. It does not document a universal server configuration file, startup command or restart procedure applicable to every platform. As a result, the correct installation package and server setup must come from the selected platform project's documentation. The base ViaVersion JAR is for Paper and Velocity.
The repository does give a complete source-build path. Clone the repository, use JDK 17 or newer, and run the Gradle wrapper. The resulting JAR should appear in `build/libs`.
./gradlew buildThis is a build command rather than a server installation command. The reader should look in `build/libs` for the created JAR after Gradle completes. The README does not state which dependency or deployment steps should be performed after manually copying that file, so those actions must be verified against the documentation for the chosen platform rather than inferred from this repository.
For an early protocol implementation, the README also distinguishes snapshot access from official releases. It says official releases may arrive only a few days after a Minecraft update unless protocol changes are trivial. Sponsors and Patreon supporters can receive earlier access through the arrangements described in the README, but this is release availability, not an installation step.
Adding ViaVersion as a Java Dependency
Projects that extend ViaVersion can depend on its API instead of manually integrating an implementation. The README links the API documentation to jd.viaversion.com and requires the ViaVersion Maven repository. The published dependency range shown is `[5.0.0,6.0.0)`, with Maven scope set to `provided`.
<repository>
<id>viaversion-repo</id>
<url>https://repo.viaversion.com</url>
</repository><dependency>
<groupId>com.viaversion</groupId>
<artifactId>viaversion-api</artifactId>
<version>[5.0.0,6.0.0)</version>
<scope>provided</scope>
</dependency>Gradle users receive a slightly different instruction. The version remains a placeholder rather than a verified release number, so it must not be copied into a production build unchanged.
repositories {
maven("https://repo.viaversion.com")
}
dependencies {
compileOnly("com.viaversion:viaversion-api:VERSION") // Replace the version
}The `provided` and `compileOnly` scopes indicate that the host platform supplies the runtime environment. The README separately advises using the parent `viaversion` artifact when existing protocol or platform implementations are required. Developers creating a new platform implementation are directed to the repository wiki, which is outside the instructions available here.
Mapping Updates and Release Maintenance
Mapping files are not hand-maintained inside this repository according to the README. They are generated and managed through the separate Mappings repository, then placed into `common/src/main/resources/assets/viaversion` as generated output. A Minecraft release that changes protocol behavior therefore creates work beyond ordinary application code. ViaVersion's release process must include the relevant conversion data, and operators may need a new release when Minecraft versions change.
The repository is not archived, and its last push was on 2026-10-12. The documented release sequence includes 5.12.1 on 2026-10-08, 5.12.0 on 2026-09-18 and 5.11.0 on 2026-07-12. Those dates show recent release activity, although they do not establish compatibility for every plugin combination or Minecraft update.
The licensing split has a direct effect on downstream work. The `api` directory is under the MIT License, while everything else is under GPL-3.0 unless explicitly stated otherwise, including the end product as a whole. The README points to `licenses/MIT.md` and `licenses/GPL.md` for details. This is not legal advice, but integrators should inspect both files before redistributing modified components or combining project code into a distributed product.
Limits of ViaVersion Compatibility
The main limitation is that successful protocol acceptance does not guarantee identical gameplay state on every platform. The README's statement about lower performance and state accuracy outside Paper servers and ViaFabricPlus is explicit. Operators evaluating compatibility should test the server features and plugins they depend on rather than treating a successful connection as proof that every interaction matches native behavior.
ViaVersion also does not support every older-client path by itself. Down to Minecraft 1.9, the documented setup adds ViaBackwards. For 1.7.x and 1.8.x clients, ViaRewind is also required. Installing only the base plugin for these cases would not match the project's documented support matrix.
A standalone proxy is not automatically the best deployment choice. ViaProxy can provide broad historical client and server combinations, but it introduces a proxy layer rather than running the base JAR directly on a Paper or Velocity server. The README gives no migration procedure, rollback procedure or universal performance measurement. It also does not document how to diagnose plugin-specific conflicts. Those checks must come from the documentation for the selected integration and server environment.
Editorial conclusion
ViaVersion fits Paper and Velocity operators who want newer clients to connect to older servers, or older clients down to 1.9 when paired with the documented companion modules. It is a poor fit for a platform without a Via integration, or for deployments where the translation layer conflicts with plugin behavior. Before adoption, verify the required client-to-server version path, select the corresponding platform project and companion module, then check the platform-specific documentation at docs.viaversion.com. The first concrete acceptance test is whether the intended client version joins with the server behavior expected by the operator.
Frequently asked questions
Which ViaVersion projects are needed for an older Minecraft client?
ViaVersion plus ViaBackwards supports older clients down to Minecraft 1.9. Clients from 1.7.x through 1.8.x also require ViaRewind.
Can the base ViaVersion JAR run on Bukkit or BungeeCord?
The README says the base ViaVersion JAR runs on Paper and Velocity. Bungee deployments are associated with the separate ViaBungee project, while other platforms have their own Via integrations.
What is required to build ViaVersion from source?
The build requires JDK 17 or newer and Gradle through the repository wrapper. Running `./gradlew build` creates a JAR in `build/libs`.
Can a Maven project use the ViaVersion API?
Yes. The README shows the `com.viaversion:viaversion-api` artifact from `https://repo.viaversion.com`, using version range `[5.0.0,6.0.0)` and scope `provided`. Existing protocol or platform implementations instead require the parent `viaversion` artifact.
Does ViaVersion have identical state accuracy on every supported platform?
No. The README identifies Paper servers and ViaFabricPlus on clients as having the highest performance and state accuracy because they expose more extensive APIs and direct state access.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/viaversion-viaversion)Was this useful?