# Run a Pumpkin server

> Run Pumpkin, a Minecraft server written in Rust, and know what it does differently from Paper before you switch.

Source: https://www.coritan.com/docs/managed-containers/software/pumpkin/

In the dashboard:

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

*Pumpkin* is a Minecraft Java server written from scratch in Rust. It starts in a fraction of a second and uses far less memory than Paper for the same world. It is not Minecraft's own code with changes, so it does not have every vanilla mechanic yet, and it loads no Paper plugins, mods or datapacks. Pumpkin is experimental: try it on a world you have a snapshot of.

## Before you begin

- Each Pumpkin build lets in players on one Minecraft Java version, and one Bedrock version. The version list names both, such as `Java 26.3 · Bedrock 26.60`. Players on another version cannot join.
- Paper plugins and mods do not run on Pumpkin.
- Players' own addresses do not reach Pumpkin yet: it sees the address of our join service, so a ban by IP or a per-address limit in Pumpkin does not work. Ban players by name.

## Choose Pumpkin

When you order a new server, Pumpkin is in the software list under **Experimental**. To move a server you already have:

1. In the [dashboard](https://www.coritan.com/dashboard/servers), go to **App Deployment** and open the server, then the **Software** tab.
2. Under **Server software**, pick **Pumpkin**.
3. Pick a version. **nightly** is first and is the default: Pumpkin's developers build it from their newest code every day, and a tagged release such as `0.2.2+26.3-26.60` is weeks behind it.
4. Choose whether to keep your files, then confirm.

A server keeps the build it installed. When a newer nightly is out, the **Current software** card says so: select **Install…** to install it over the old one. Your world, your settings and your join lists stay.

## What moves when you switch from Paper

When you keep your files, we carry over what both servers have:

- the settings with a place in both files: the MOTD, the player limit, difficulty, game mode, PvP, the whitelist switch, online mode, the view and simulation distance, spawn protection, the seed and the world folder;
- the whitelist, the operators and the ban lists, which Pumpkin keeps in the `data` folder;
- the world, which both read in Minecraft's own region format.

Plugins, mods and datapacks stay in their folders, and Pumpkin does not load them. The change says so when you have any. Switching back to Paper carries the same settings and lists the other way.

## Change the game settings

Pumpkin keeps its settings in `pumpkin.toml` in the server's files, not in `server.properties`. The game settings in the dashboard edit it for you, by the same names, and check each value the way Pumpkin reads it. You can also edit the file in the [file manager](/docs/managed-containers/files/). Changes apply at the next start.

Two things work differently from other servers:

- Pumpkin writes `pumpkin.toml` again at every start, with every setting it has, so comments you add are gone after a restart.
- When Pumpkin cannot read one value, it throws away the whole file and starts on its defaults. To stop that, we check the file before every start. A word in the wrong case, such as `Hard` written as `hard`, is corrected. Any other value Pumpkin cannot read is taken out, so that one setting goes back to its default and the rest stay. The file as you left it is kept as `pumpkin.toml.refused`, and the server's activity log says which settings were changed.

We also set the addresses Pumpkin listens on before every start, so the server is reachable on its own ports. Changes you make to those addresses do not last.

## Let Bedrock players join

Pumpkin lets in Minecraft Bedrock Edition players itself: no Geyser is needed. It is on for every new Pumpkin server, on a port of its own that does not count toward your port limit. Bedrock players join through the server's join address, or by IP at the address the **Current software** card shows. To turn it off, turn off **Bedrock players** on the **Software** tab, or set `bedrock-players` to `false` with the API. It applies at the next start, and the port goes back to the node.

## The world format

A new Pumpkin server makes its world in Minecraft's own region format, so Paper and Minecraft itself can open it, and so can our world optimization. Pumpkin also has formats of its own, `pump` and `linear`, set in `pumpkin.toml`. Paper cannot read a world in them, and world optimization leaves them alone. Changing the format of an existing world does not convert it.

## Telemetry

Pumpkin sends its developers an anonymous heartbeat every five minutes, so they can see what runs where. It holds no player data. To turn it off, set `enabled = false` under `[telemetry]` in `pumpkin.toml` and restart the server. We do not turn it back on.

## With the API

`GET software/context` has a `pumpkin` block on a Pumpkin server: `build` (the `version` on disk, the `commit` of a nightly, and `newer` when a newer nightly is out) and `bedrock` (`enabled`, `port` and the direct `address`). `GET software/game-settings` answers the settings by their `server.properties` names, and `PATCH software/game-settings` with `{"values": {"difficulty": "hard", "bedrock-players": false}}` changes them. A value Pumpkin cannot read answers 400 and says what the setting takes.

## Troubleshooting

Players see "Outdated server" or "Outdated client"
: The build serves one Minecraft version. Pick a build whose Java version matches your players', or ask them to change version.

A setting went back to its default
: It held a value Pumpkin cannot read. Open `pumpkin.toml.refused` in the file manager to see what it was, and the server's activity log for why.

The server does not start after a switch
: Check the console for a line with `panicked at`: Pumpkin prints what went wrong after it. A world made by a newer Minecraft version than the build serves can stop it.

## API

- `GET /api/v1/client/servers/{uuid}/software/context`: Return loader/game-version context for marketplace tab gating (https://www.coritan.com/docs/api/reference/client/deployment-servers/servers-software/#op-get-api-v1-client-servers-uuid-software-context)
- `GET /api/v1/client/servers/{uuid}/software/game-settings`: The server's game settings in server.properties words, whatever file holds them (https://www.coritan.com/docs/api/reference/client/deployment-servers/servers-software/#op-get-api-v1-client-servers-uuid-software-game-settings)
- `PATCH /api/v1/client/servers/{uuid}/software/game-settings`: Change game settings: {"values": {"difficulty": "hard", "max-players": 20}} (https://www.coritan.com/docs/api/reference/client/deployment-servers/servers-software/#op-patch-api-v1-client-servers-uuid-software-game-settings)
