The Manifest Format
The mc.toml manifest at the root of an instance describes everything about
it. It is written in TOML. Every section except the two
top-level keys is optional; omitted keys take the defaults listed below.
name = "myserver"
description = "A Minecraft Server"
[java]
version = "graal@25"
min_memory = 4096
max_memory = 4096
[minecraft]
version = "..."
loader = "fabric"
[server]
gamemode = "survival"
difficulty = "normal"
eula = true
[server.properties]
white-list = false
[mods]
lithium = "..."
[backups]
enabled = true
frequency = "0 0 * * * *"
name (required)
The instance name. It names the world directory inside the instance and is
used as the world's level-name. Must be usable as a directory name.
description (required)
A short description, used as the message of the day (motd) shown in the
multiplayer list.
[java]
The Java runtime used to launch the instance.
version— the runtime to install and use, as avendor@versiondescriptor. Defaults to"graal@25". Runmc java listto see the available runtimes; the one marked(recommended)is the default.min_memory— initial heap size in megabytes. Defaults to4096.max_memory— maximum heap size in megabytes. Defaults to4096.jvm_arguments— extra arguments passed to the JVM. Defaults to a small set of tuned flags; setting this key replaces the defaults entirely.
[java]
version = "graal@25"
min_memory = 8192
max_memory = 8192
jvm_arguments = ["-XX:+AlwaysPreTouch"]
[minecraft]
The Minecraft version and mod loader.
version— the Minecraft version to run. Defaults to"latest", the latest release."latest-snapshot"selects the latest snapshot, and any exact version id (seemc minecraft list) pins that version. Aliases are resolved every start, so an instance on"latest"upgrades itself when a new release comes out — pin an exact version if that is not what you want.loader— the mod loader, as anameorname@versiondescriptor (for example"fabric", which resolves to the latest loader version for the configured Minecraft version). When omitted, the instance runs without a loader and the[mods]table is ignored. Runmc minecraft list-loadersto see loader versions.
[server]
Settings mc manages for the server. Each maps to a server.properties key,
listed in parentheses; because these are managed here, they cannot be set
through [server.properties].
gamemode—"survival","creative","adventure", or"spectator". Defaults to"survival". (gamemode)difficulty—"peaceful","easy","normal", or"hard". Defaults to"normal". (difficulty)level_type—"minecraft:normal","minecraft:flat","minecraft:large_biomes","minecraft:amplified", or"minecraft:single_biome_surface". Defaults to"minecraft:normal". (level-type)hardcore— defaults tofalse. (hardcore)seed— the world seed, as an integer or a string. Random when omitted. (level-seed)eula— indicates that YOU have read and agree to the Minecraft EULA. The instance refuses to start until this istrue. Defaults tofalse.ip— the address to bind. When omitted, the server binds all addresses, IPv6 included. (server-ip)port— the game port. Defaults to25565. (server-port)rcon_port— the remote console port. Defaults to25575. (rcon.port)capacity— the maximum number of players. Defaults to20. (max-players)view_distance— in chunks. Defaults to16. (view-distance)simulation_distance— in chunks. Defaults to16. (simulation-distance)
[server.properties]
Overrides for any other
server.properties key. mc
generates the file on every start — hand edits do not survive — so this
table is the way to reach settings that have no [server] field:
[server.properties]
white-list = false
spawn-protection = 16
"query.port" = 25565
Values may be strings, integers, floats, or booleans. Keys containing a dot must be quoted, as above.
Keys managed by mc take precedence: an entry that conflicts with a value
derived from the manifest or the environment is ignored with a warning.
enable-rcon is always ignored — RCON is enabled exactly when an RCON
password is configured (see
Environment Variables).
Note two defaults that differ from a vanilla server: the allow list is
enabled (white-list), and the server binds all addresses, IPv6 included
(server-ip).
[mods]
The mods to install, keyed by the mod's identifier (slug) on the mod registry. Three forms are supported:
[mods]
# a version identifier on the registry
lithium = "..."
# the same, spelled out
carpet = { version = "...", service = "modrinth" }
# a jar fetched from a URL, for mods not on the registry
my-mod = { url = "https://example.com/my-mod.jar" }
service names the registry hosting the mod and defaults to "modrinth".
mc add, mc remove, and
mc update edit this table for you and pin
compatible versions. Required dependencies are resolved automatically when
the instance starts and recorded in the mc.lock lockfile — see
Managing Mods.
[backups]
Scheduled world backups, taken while the instance runs.
enabled— schedule backups while the instance runs. Defaults tofalse. Manualmc backupworks regardless.frequency— a cron expression with six fields: seconds, minutes, hours, day of month, month, day of week. Defaults to"0 0 * * * *"(hourly).
[backups.storage]
Where archives are stored. type selects the backend:
[backups.storage]
type = "local"
path = "backups" # default
keep = 20 # most-recent archives to keep; default
[backups.storage]
type = "s3"
bucket = "my-minecraft-backups"
For s3, the bucket may also come from the MC_BACKUPS_S3_BUCKET
environment variable, and credentials come from the standard AWS credential
chain. The default is local storage.
See the Backups guide for the full picture.
[notifications]
Webhook notifications about the instance. A provider is activated by
setting its webhook environment variable (MC_DISCORD_WEBHOOK for
Discord) — the URL is a secret and is never read from the manifest, and
without one no notifications are sent. This table selects which events are
reported; every key defaults to true:
on_lifecycle_event— the instance started or stopped.on_panic— the instance crashed.on_sigkill— the instance was forced down without a clean save, because it did not stop within the grace period or a second stop signal arrived.on_backup— a backup completed.on_backup_failure— a backup failed.
[notifications]
on_lifecycle_event = false
on_backup = false