Skip to content

config.json

The main server configuration file at the server root. Auto-generated with defaults on first launch if it doesn’t exist. Changes made via the API are saved automatically.

File: config.json
Class: HytaleServerConfig

HytaleServerConfig config = HytaleServer.get().getConfig();
FieldTypeDefaultDescription
ServerNameString"Hytale Server"Server name shown in the server list
MOTDString""Message of the day
PasswordString""Server password (empty = no password)
MaxPlayersint100Maximum concurrent players
MaxViewRadiusint32Maximum view distance in chunks
DefaultModsEnabledbooleantrue (multiplayer) / false (singleplayer)Whether mods in the mods/ directory are enabled by default
SkipModValidationForVersionStringnullSkip mod validation for a specific server version
DisplayTmpTagsInStringsbooleanfalseShow temporary tags in string output (debugging)
config.setServerName("My Server");
config.setMotd("Welcome!");
config.setMaxPlayers(50);
config.setMaxViewRadius(16);

Controls the default world and game mode for new players.

FieldTypeDefaultDescription
Defaults.WorldString"default"Name of the world players join on connect
Defaults.GameModeGameModeAdventureDefault game mode
HytaleServerConfig.Defaults defaults = config.getDefaults();
defaults.setWorld("lobby");
defaults.setGameMode(GameMode.Creative);

Timeouts for each phase of the connection lifecycle. The server uses different defaults depending on whether it’s running in singleplayer or multiplayer mode.

FieldSingleplayerMultiplayerDescription
InitialTimeout30s15sInitial connection handshake
AuthTimeout60s30sAuthentication exchange
AuthGrantTimeout60s30sAuth grant response
AuthTokenTimeout60s30sAuth token exchange
AuthServerExchangeTimeout30s15sAuth server exchange
PasswordTimeout60s45sPassword entry
PlayTimeout120s60sTransition to play state
SetupWorldSettings30s15sWorld settings sync
SetupAssetsRequest300s120sAsset request phase
SetupSendAssets300s120sAsset transfer phase
SetupAddToUniverse120s60sAdding player to universe

If a phase exceeds its timeout, the connection is dropped. Singleplayer defaults are more generous to account for local loading.

{
"ConnectionTimeouts": {
"InitialTimeout": "PT15S",
"AuthTimeout": "PT30S",
"PlayTimeout": "PT60S"
}
}

Duration values use ISO 8601 format: PT15S = 15 seconds, PT2M = 2 minutes.

Limits inbound packets per connection to mitigate abuse.

FieldTypeDefaultDescription
RateLimit.EnabledbooleantrueWhether rate limiting is active
RateLimit.PacketsPerSecondint2000Sustained packet rate
RateLimit.BurstCapacityint500Burst allowance above the sustained rate
HytaleServerConfig.RateLimitConfig rateLimit = config.getRateLimitConfig();
rateLimit.setPacketsPerSecond(1000);
rateLimit.setBurstCapacity(200);

Hierarchical module toggle system. Each module has an Enabled flag and can contain nested sub-modules and arbitrary data via a BsonDocument.

{
"Modules": {
"MyModule": {
"Enabled": true,
"Modules": {
"SubModule": {
"Enabled": false
}
}
}
}
}
HytaleServerConfig.Module module = config.getModule("MyModule");
boolean enabled = module.isEnabled(true); // pass default if not set
// nested modules
HytaleServerConfig.Module sub = module.getModule("SubModule");
// store/retrieve custom typed data
module.put(myKeyedCodec, myValue);
MyType value = module.getDataNow(myKeyedCodec);

Modules that don’t exist yet are auto-created when accessed via getModule().

Per-package log levels as a string-to-level map. Uses java.util.logging.Level names.

{
"LogLevels": {
"com.hypixel.hytale.server.core": "FINE",
"com.hypixel.hytale.server.core.universe": "WARNING"
}
}

See also the —log CLI argument for setting levels at startup.

Per-mod configuration. Each entry is keyed by PluginIdentifier (format: group:name) and can enable/disable the mod or require a specific version range.

FieldTypeDescription
Mods.<id>.EnabledBooleantrue to enable, false to disable, null for default
Mods.<id>.RequiredVersionSemverRangeRequired version range (rejects mods outside this range)
{
"Mods": {
"mygroup:mymod": {
"Enabled": true,
"RequiredVersion": ">=1.0.0 <2.0.0"
},
"hytale:teleport": {
"Enabled": false
}
}
}

Controls how player data is persisted. Two built-in providers:

TypeDescription
Hytale (default)Default provider — uses disk storage at <universe>/players/
DiskExplicit disk storage with a configurable path
{
"PlayerStorage": {
"Type": "Disk",
"Path": "/data/players"
}
}

The default Hytale provider stores player data as <uuid>.json files in the universe’s players/ directory.

Controls the built-in periodic backup system. All fields can be overridden by CLI arguments.

FieldTypeDefaultDescription
Backup.EnabledbooleanfalseWhether automatic backups are enabled
Backup.FrequencyMinutesint30Minutes between backups (minimum 1)
Backup.DirectoryStringnullBackup directory path (required for backups to run)
Backup.MaxCountint5Maximum recent backups to retain
Backup.ArchiveMaxCountint5Maximum archived backups to retain

Backups only run when both Enabled is true and Directory is set. The --backup CLI flag overrides Enabled to true.

{
"Backup": {
"Enabled": true,
"FrequencyMinutes": 60,
"Directory": "/backups/hytale",
"MaxCount": 10,
"ArchiveMaxCount": 5
}
}

Raw BSON configuration for the authentication credential store provider. This controls how the server stores its OAuth tokens for the authentication system.

{
"AuthCredentialStore": { ... }
}

Controls the built-in server update system.

FieldTypeDefaultDescription
Update.EnabledbooleantrueWhether update checking is active
Update.CheckIntervalSecondsint3600Seconds between update checks
Update.NotifyPlayersOnAvailablebooleantrueNotify online players when an update is available
Update.PatchlineStringnullPatchline to track (e.g. "release")
Update.RunBackupBeforeUpdatebooleantrueRun a full backup before applying an update
Update.BackupConfigBeforeUpdatebooleantrueBack up config files before update
Update.AutoApplyModeenumDISABLEDWhen to auto-apply updates (see below)
Update.AutoApplyDelayMinutesint30Delay before auto-applying
ModeBehavior
DISABLEDNever auto-apply — manual only
WHEN_EMPTYApply when no players are online
SCHEDULEDApply after AutoApplyDelayMinutes regardless of players

When an update is applied, the server backs up config.json, permissions.json, bans.json, and whitelist.json if backup is enabled.

A minimal config.json with common customizations:

{
"Version": 4,
"ServerName": "My Hytale Server",
"MOTD": "Welcome to the server!",
"Password": "",
"MaxPlayers": 50,
"MaxViewRadius": 16,
"Defaults": {
"World": "lobby",
"GameMode": "Adventure"
},
"RateLimit": {
"Enabled": true,
"PacketsPerSecond": 2000,
"BurstCapacity": 500
},
"Mods": {
"hytale:buildertools": {
"Enabled": false
}
},
"Update": {
"Enabled": true,
"AutoApplyMode": "WHEN_EMPTY"
}
}