Minecraft anticheat guide

Client Version Support Policy for Minecraft Servers

How to write a client version support policy for a Minecraft server, pick a Java client range, decide on ViaVersion, and test each version before enforcement.

Short answer: write the range before a release arrives

A client version policy names the Java client versions that can join your server, states whether a translation layer such as ViaVersion is used, and lists the test you run before the range changes. Keep the policy short. Write it before a new Minecraft release arrives, so the decision is not made during a rush of player reports.

Choose the supported range

The range is a trade-off between player access and testing effort. A wider range lets more players join, but every version in the range needs checks and staging time. The table compares three common options.

A policy that is easy to keep is better than a wide range that nobody tests. Pick the smallest range that your players need, and widen it only when the data shows a real need.

Review the range on a fixed schedule. A quarterly review is one option, plus an extra review when a new Minecraft release arrives. Write the next review date and the owner in the policy record, so the decision does not lapse.

Common client version range options.
OptionWhat it meansTesting costMain risk
Current release onlyOnly the server's Minecraft version can joinLowestPlayers on other versions cannot join
Current and previous releaseTwo versions are supportedMediumEvery check must be tested on both versions
Wide range through a translation layerA plugin such as ViaVersion translates protocol for other versionsHighestTranslated packets may change timing that checks depend on

What a translation layer changes

ViaVersion is a plugin that lets clients from other Minecraft versions join a server running a different version. The project documentation describes which versions it supports and how it is configured. Joining is one part of the job. You still need to confirm that your anticheat behaves as expected for players who connect through translation.

Record the translation plugin version and its configuration in the policy. A change to either one is a change to the supported range.

If you use a translation layer, start the staging pass with the client versions most of your players use. Your own join data shows which versions those are. Starting there keeps the first test small and useful, and the less common versions can follow.

Procedure to adopt or change the range

Use this procedure when you adopt a range for the first time, or when you widen or narrow it. Run each step on staging before the change reaches production.

Policy record template. Replace each placeholder with your server's values.
Supported Java client range: <lowest version> to <highest version>
Translation layer: <none, or plugin name and version>
Anticheat version: <version>
Server software build: <build>
Staging test date and result: <date>, <pass or fail>
Approved by: <role>

Bedrock players are a separate question

Bedrock players do not use the Java client, so the Java range does not decide whether they can join. Bedrock access on a Java server usually depends on Geyser and, for account linking, Floodgate. Write that in a separate line of the policy, and link to your Bedrock setup notes. Name the Geyser and Floodgate versions you run, because an update to either one can change how Bedrock players reach the server. Test a Bedrock account on staging after each of those updates, using the same movement and combat script you use for Java.

What we have not verified

This article does not list which client versions any specific anticheat supports, and it does not say how translated clients affect any check. Check the anticheat's supported-version list and the translation plugin's documentation for your versions, and run the staging test before you publish the range.

FAQ

Does ViaVersion make the anticheat work on older clients?

ViaVersion translates protocol so older clients can join. Whether each check behaves correctly for those clients is a separate question, so test each version in the range before you enforce.

Should we allow snapshots or pre-release clients?

Put that decision in the policy. Pre-release builds change often, so many owners exclude them or test them only on a separate staging server.

How many client versions should a small server support?

Support the fewest versions your players need. Each extra version adds a staging pass for every update and every anticheat change.

Do we need to announce a change to the supported range?

Yes. Publish the supported range where players can see it, and state the date when a change takes effect. Players who run an unsupported version can then update before they try to join.

Related sources and official pages

Browse all anticheat guides