Foton Français PRE-ALPHA
SETTINGS

Configuration

Edit the files in config/, then restart Foton.

config.toml

Server, network, logging and performance.

worlds.toml

Worlds, seeds and difficulty.

groups.toml

Groups and permissions.

config.toml

Configuration schema for Foton Minecraft server.

[server]

Server configuration

KeyTypeDefaultLimitsMeaning
server_port requiredinteger255651–65000Server port
max_players requiredinteger201–2147483647Maximum number of players allowed on the server
allow_extended_view_distancebooleanfalseAllow view_distance above vanilla's 32-chunk cap, up to Foton's 128-chunk cap
view_distance requiredinteger101–128Maximum view distance in chunks. Normally 1-32; 1-128 when allow_extended_view_distance is true.
simulation_distance requiredinteger101–128Maximum simulation distance in chunks
max_chained_neighbor_updatesinteger1000000Maximum queued neighbor-update tasks in one chained run. Negative values disable the limit.
online_mode requiredbooleantrueWhether to use Mojang's authentication service
auth_serverstringuriOptional authentication endpoint for online-mode hasJoined checks. Omit to use Mojang's session server.
allow_insecure_auth_serverbooleanfalseAllow a non-loopback HTTP authentication endpoint. HTTPS remains the default.
profile_serverstringuriOptional endpoint for online-mode player name-to-profile lookups. Omit to use Mojang's profile service.
services_serverstringuriOptional endpoint for Mojang-compatible service public keys. Omit to use Mojang's services endpoint.
encryption requiredbooleantrueWhether to enable encryption for client-server communication. Required in online mode.
allow_flightbooleanfalseWhether the server allows unauthorized client flight
tab_list_statsbooleantrueWhether the server shows its TPS and MSPT statistics in the player list header and footer. A plugin's own header or footer for a player always takes precedence
motd requiredstring"A Foton Server"Message of the day displayed in server lists
use_favicon requiredbooleantrueWhether to use a custom favicon for the server
favicon requiredstring"config/favicon.png"Path to the favicon file (PNG format, 64x64 pixels)
enforce_secure_chatbooleanfalseWhether to enforce secure chat
chat_spam_threshold_secondsinteger10Vanilla chat spam threshold window in seconds; values <= 0 disable throttling
command_spam_threshold_secondsinteger10Vanilla command spam threshold window in seconds; values <= 0 disable throttling

[server.compression]

Compression settings

KeyTypeDefaultLimitsMeaning
threshold requiredinteger256256–2147483647Compression threshold in bytes
level requiredinteger41–9Compression level (1 = fastest, 9 = best compression)

[server.server_links]

Server links configuration

KeyTypeDefaultLimitsMeaning
enablebooleanfalseEnable the server links feature
linksarray of table[]List of server links to display in the server menu

[server.rcon]

Remote administration over the Source Rcon protocol

KeyTypeDefaultLimitsMeaning
enablebooleanfalseWhether the rcon port is opened at all
bindstring"127.0.0.1"IP address rcon listens on. Keep loopback unless remote administration is required
portinteger255751–65535Port rcon listens on
max_connectionsinteger81–65535Maximum simultaneous rcon connections
passwordstring""Password every rcon client must send before it may run a command

[server.bedrock]

Letting Bedrock Edition players in, through a Geyser this server runs

KeyTypeDefaultLimitsMeaning
enablebooleanfalseWhether Geyser is started and the Bedrock port opened at all
portinteger00–65535UDP port Bedrock clients connect to; 0 shares server_port. Trade-off: Bedrock's Add Server dialog pre-fills 19132, so sharing the Java port means typing the port in by hand -- set this to 19132 explicitly for that automatic experience instead
motdstring""What Bedrock clients see in the server list; empty reuses the server MOTD
username_prefixstring"."Prepended to a Bedrock player's gamertag so it cannot collide with a Java player's name
trusted_proxiesarray of string["127.0.0.1", "::1"]Addresses a Floodgate identity handshake is accepted from
java_homestring""A JDK or JRE for Geyser; empty means JAVA_HOME, then java on the path
jar_pathstring""An operator-supplied Geyser jar; empty means fetch the pinned build

[server.threads]

Optional worker counts for server thread pools. 0 or omitted uses each pool's automatic default.

KeyTypeDefaultLimitsMeaning
main_runtimeinteger0≥ 0Worker threads for the primary Tokio runtime
chunk_runtimeinteger0≥ 0Worker threads for the chunk Tokio runtime
packet_workersinteger0≥ 0Persistent workers for inter-tick gameplay packet processing
chunk_generationinteger0≥ 0Worker threads for the Rayon chunk generation pool
chunk_encodinginteger0≥ 0Worker threads for the Rayon chunk encoding pool

[server.bug_reports]

Where player-filed bug reports are sent, on top of the local file

KeyTypeDefaultLimitsMeaning
webhook_urlstringEndpoint each filed report is posted to; unset keeps reports local
webhook_tokenstringOptional bearer token sent with each post

[server.resource_pack]

The resource pack every client is asked to load while it joins. Replaces the resource-pack* and require-resource-pack entries of vanilla's server.properties

KeyTypeDefaultLimitsMeaning
urlstring""Where clients download the pack from (resource-pack). Empty sends no pack
idstring""The pack's UUID (resource-pack-id). Empty derives one from the URL, as vanilla does
sha1string""The pack file's SHA-1 in hex, at most 40 characters (resource-pack-sha1). Clients cache the pack by it; without one they only refresh it when the URL changes
promptstring""Text on the confirmation screen, as vanilla text component JSON (resource-pack-prompt)
requiredbooleanfalseWhether a client that declines the pack is disconnected (require-resource-pack)

[log]

Logging configuration

KeyTypeDefaultLimitsMeaning
log_pathstring"./.logs"Path where store the log files and history
log_levelerror | warn | info | debug | trace"info"The level of information the logger will show
timenone | date | uptime"uptime"Time format: none, date (HH:MM:SS:mmm), or uptime (seconds since start)
module_pathbooleanfalseWhether the module_path of the log should be displayed
extrabooleanfalseWhether the extra data of the log should be displayed
log_filebooleantrueWhether the log should be written into a file
rotation_timenone | hourly | daily | weekly | monthly"daily"Time between log file rotations
max_historyinteger50≥ 1Amount of console commands saved

worlds.toml

World and domain configuration schema for Foton.

KeyTypeDefaultLimitsMeaning
save_pathstring"saves"Root directory for saves
seedstring""Root seed default; empty means random
default_gamemodegamemode"survival"
difficultydifficulty"normal"
storagestorage
player_storageplayer_storage
domains requiredtableDomain declarations keyed by domain name

Structures

storage

KeyTypeDefaultLimitsMeaning
type requiredfoton:disk | foton:ram
configtableStorage-specific config. foton:disk supports optional relative path; foton:ram accepts no keys.

player_storage

KeyTypeDefaultLimitsMeaning
type requiredfoton:file

domain

KeyTypeDefaultLimitsMeaning
defaultbooleanfalse
seedstring
default_gamemodegamemode"survival"
difficultydifficulty"normal"
storagestorage
worlds requiredarray of world≥ 1 item(s)

world

KeyTypeDefaultLimitsMeaning
name requiredworld_name
generator requiredidentifier
defaultbooleanfalse
seedstring
default_gamemodegamemode"survival"
difficultydifficulty"normal"
storagestorage
nether_portal_targetworld_name
end_portal_targetworld_name
configtableGenerator-specific config validated by the selected generator

Value types

NameAcceptsMeaning
identifierstring ^[a-z0-9_.-]+:[a-z0-9_.-]+(/[a-z0-9_.-]+)*$
world_namestring ^[a-z0-9_.-]+$
gamemodesurvival | creative | adventure | spectator
difficultypeaceful | easy | normal | hard

groups.toml

Permission group configuration schema for Foton.

KeyTypeDefaultLimitsMeaning
default_groups requiredarray of group_name["default"]uniqueGroups applied to every player
groups requiredtablePermission groups keyed by group name

Structures

group

KeyTypeDefaultLimitsMeaning
priorityinteger0Conflict priority for equally specific group rules. Higher wins.
inheritsarray of group_name[]uniqueParent groups inherited by this group
allowarray of permission_rule_expression[]uniquePermission expressions explicitly allowed by this group
denyarray of permission_rule_expression[]uniquePermission expressions explicitly denied by this group
metadataarray of metadata_rule[]Ordered typed metadata rules

metadata_rule

KeyTypeDefaultLimitsMeaning
key requiredpermission_metadata_expressionNamespaced metadata key with an optional context selector, such as plugin:max_homes{domain=survival}.
value requiredpermission_metadata_valueTyped permission metadata value

Value types

NameAcceptsMeaning
group_namestring ^[a-z0-9_-]+$
permission_rule_expressionstring ^(\*|[a-z0-9_-]+(\.[a-z0-9_-]+)*(\.\*)?)(\{([a-z0-9_-]+|[a-z0-9_-]+(\.[a-z0-9_-]+)*:[a-z0-9_-]+([./][a-z0-9_-]+)*)=[^\s{},=]+(,([a-z0-9_-]+|[a-z0-9_-]+(\.[a-z0-9_-]+)*:[a-z0-9_-]+([./][a-z0-9_-]+)*)=[^\s{},=]+)*\})?$Permission key with an optional context selector, such as foton.fly{domain=lobby}.
permission_metadata_expressionstring ^[a-z0-9_-]+(\.[a-z0-9_-]+)*:[a-z0-9_-]+([./][a-z0-9_-]+)*(\{([a-z0-9_-]+|[a-z0-9_-]+(\.[a-z0-9_-]+)*:[a-z0-9_-]+([./][a-z0-9_-]+)*)=[^\s{},=]+(,([a-z0-9_-]+|[a-z0-9_-]+(\.[a-z0-9_-]+)*:[a-z0-9_-]+([./][a-z0-9_-]+)*)=[^\s{},=]+)*\})?$Namespaced metadata key with an optional context selector, such as plugin:max_homes{domain=survival}.
permission_metadata_valueboolean or integer or stringTyped permission metadata value