# Let players on other Minecraft versions join

> Cross-version play keeps ViaVersion and ViaBackwards on your Minecraft Java server, so players on newer and older versions can join it.

Source: https://www.coritan.com/docs/managed-containers/software/cross-version-play/

In the dashboard:

- /dashboard/deployments/…/software: https://www.coritan.com/dashboard/deployments

A Minecraft Java player can only join a server that runs their own version, unless the server translates between the two. *Cross-version play* adds two plugins that do this: ViaVersion lets players on newer versions join, and ViaBackwards lets players on older versions join. Every plugin server has cross-version play on unless you turn it off. We install both plugins and update them each time the server starts, so you do not have to.

## Before you begin

- The server must run plugin software for Minecraft Java: Paper, Purpur, Folia, Spigot, Pufferfish, Leaves or Leaf. Mod loaders (Fabric, Quilt, Forge and NeoForge), Vanilla, servers that load both plugins and mods (Arclight, Mohist and Magma), proxies and Bedrock servers do not get the plugins, and the switch does not appear on them.
- The server must run Java 17 or newer. [Change Java settings](/docs/managed-containers/software/java-settings/) shows the Java your server runs.
- On a server someone shared with you, you need the Install software permission to turn cross-version play on or off.

## What happens at each start

Each time the server starts, before it boots, we look in its `plugins` folder:

- When `plugins/ViaVersion.jar` or `plugins/ViaBackwards.jar` is missing, older than the newest release on Hangar, PaperMC's plugin site, or not the file we put there, we install the newest release in its place.
- When both are the newest releases, we change nothing.
- When Hangar does not answer, or the check takes longer than 20 seconds, the server starts with the plugins it already has.

A new server gets both plugins at its first start, and a server you had before gets them at its next start. ViaVersion's and ViaBackwards's pages on [Hangar](https://hangar.papermc.io/ViaVersion) list the Minecraft versions each one supports.

## Check that cross-version play is on

1. In the [dashboard](https://www.coritan.com/dashboard/servers), go to **App Deployment** and open the server, then the **Software** tab.
2. On the **Current software** card at the top, find the **Cross-version play** switch, under **Bedrock crossplay**.

While the switch is on, **Installed** names the versions on the server, such as `ViaVersion 5.12.0 · ViaBackwards 5.12.0`. It says `At the next start` when the server has not started since cross-version play was turned on: restart it from the [console](/docs/managed-containers/console/) to install them.

## Turn cross-version play off

1. On the server's **Software** tab, turn off **Cross-version play** on the **Current software** card.
2. Restart the server from the [console](/docs/managed-containers/console/), so it stops running the two plugins.

We delete `plugins/ViaVersion.jar` and `plugins/ViaBackwards.jar` straight away, and starts no longer install them. Their settings folders, `plugins/ViaVersion` and `plugins/ViaBackwards`, stay, so your settings are still there if you turn cross-version play back on.

## Turn cross-version play back on

1. On the server's **Software** tab, turn on **Cross-version play** on the **Current software** card.
2. Wait while the switch is greyed out. We download both plugins into the `plugins` folder straight away.
3. Restart the server from the [console](/docs/managed-containers/console/), so it loads them.

## Keep your own copy of ViaVersion

You can add ViaVersion or ViaBackwards yourself, from the [Marketplace](/docs/managed-containers/software/plugins-and-mods/) or as an upload, to run a version of your choice. A copy under its own file name, such as `ViaVersion-5.12.0.jar`, wins: at the next start we remove our two jars and leave your copy alone, so the server never loads two copies of one plugin. We do not update your copy, and the **Current software** card names it under **Your own copy is in the plugins folder**.

To go back to ours, remove your copy on the [Installed addons](/docs/managed-containers/software/installed-addons/) panel and restart the server. The start installs ours again.

> [!WARNING]
> A file named exactly `ViaVersion.jar` or `ViaBackwards.jar` counts as ours, and each start replaces it with the newest release. To keep your own copy under one of those names, turn cross-version play off first.

## Change the plugins' settings

ViaVersion keeps its settings in `plugins/ViaVersion/config.yml`, and ViaBackwards keeps its settings in `plugins/ViaBackwards/config.yml`. Edit them in the [Files tab](/docs/managed-containers/files/), then restart the server. We never change these files.

The two plugins appear on the [Installed addons](/docs/managed-containers/software/installed-addons/) panel with the **Uploaded by hand** badge, because the Marketplace did not install them. Leave them there: to remove them, turn off the switch.

When you [change the server software](/docs/managed-containers/software/) to software that cannot load plugins, such as Fabric, Vanilla or a Bedrock server, we remove our two jars and keep your choice. Moving back to a plugin server brings them back at its next start.

## Result

The switch is on and **Installed** names both plugins. Players on newer versions of Minecraft join through ViaVersion, and players on older versions through ViaBackwards, at the address they already use. Players on the server's own version join as before.

## Troubleshooting

The **Cross-version play** switch is not on the card
: The server cannot run the plugins. It runs a mod loader, Vanilla, a server that loads both plugins and mods, a proxy or a Bedrock server, or a Java older than 17. Change to a plugin server under [Server software](/docs/managed-containers/software/). The API gives the exact reason in `unsupported_reason`.

**Could not change cross-version play** with `ViaVersion downloads are unavailable right now. Try again shortly.`
: Hangar did not answer, so nothing changed. Try again later.

**The last start could not install them**
: The server started without the plugins, and the card shows the reason. The next start tries again. To install them now, turn the switch off and on again.

`We could not read the server's plugins folder. Try again shortly.`
: The `plugins` folder is there, but we could not list it. We install nothing we cannot check, so the server never ends up with a second copy beside yours. Restart the server to try again.

Players on another version still cannot join
: Restart the server after you turn the switch on, because the plugins load only when the server starts. Then check that **Installed** names both plugins. A version older or newer than the plugins support cannot join either way.

## Related

- [Let Bedrock players join a Java server](/docs/managed-containers/software/bedrock-crossplay/)
- [Install plugins, mods and modpacks](/docs/managed-containers/software/plugins-and-mods/)
- [Manage installed addons](/docs/managed-containers/software/installed-addons/)

## With the API

Turn cross-version play off:

```bash
curl -X POST https://api.coritan.com/api/v1/client/servers/$SERVER/software/via \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"enabled": false}'
```

The response is the state below, with `enabled` set to `false` and `state` set to `disabled`. Send `{"enabled": true}` to turn it back on: the request returns once both plugins are installed, with `state` set to `ready` and both versions. A body without `enabled` answers `422`.

`GET /api/v1/client/servers/{uuid}/software/context` shows the state under `via_plugins`:

`supported`
: Whether the server can run the plugins. When it is `false`, `unsupported_reason` says why.

`enabled`
: Your choice: `true` unless you turned cross-version play off.

`state`
: `pending` until the first start installs them, `ready` once they are installed, `installing` while a request to turn them on installs them, `failed` when the last start could not install them (`last_error` says why), `own_copy` while your own copy is in `plugins`, `disabled` while cross-version play is off, and `unsupported` while it is on and the server's software cannot load plugins.

`viaversion_version` and `viabackwards_version`
: The versions we installed.

`own_copies`
: The file names of your own copies while `state` is `own_copy`.

`last_checked_at`
: When a start last checked the `plugins` folder.

These answer `400`, and nothing changes:

- `This server runs mods rather than plugins, and ViaVersion and ViaBackwards are plugins. They need Paper, Purpur, Spigot or another plugin server.`
- `Vanilla Minecraft cannot load plugins. Switch to Paper to let players on other versions join.`
- `ViaVersion and ViaBackwards need Java 17 or newer, and this server runs Java 11.`, with the server's own Java version
- `We add ViaVersion and ViaBackwards to Paper, Purpur, Folia, Spigot and their forks. Add them yourself under Plugins on this server.`, for a server that loads both plugins and mods
- `We add ViaVersion and ViaBackwards to game servers, not to proxies. Add them to the proxy yourself under Plugins if you need them there.`
- `ViaVersion downloads are unavailable right now. Try again shortly.`
- `ViaVersion could not be installed on the server. Try again shortly.`, or the same for ViaBackwards
- `We could not reach the server's files. Try again shortly.`, `We could not read the server's plugins folder. Try again shortly.` or `We could not remove the plugins from the server. Try again shortly.`

On a server shared with you, turning cross-version play on or off needs `software.install`. It counts towards the 8 software actions a server accepts from one account in 10 minutes.

## API

- `POST /api/v1/client/servers/{uuid}/software/via`: Turn ViaVersion and ViaBackwards on or off for a Minecraft Java server (https://www.coritan.com/docs/api/reference/client/deployment-servers/servers-software/#op-post-api-v1-client-servers-uuid-software-via)
