Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/GKExpo/ServerPilot/llms.txt

Use this file to discover all available pages before exploring further.

The Properties tab is the fastest way to configure your Minecraft server without opening any files manually. It reads server.properties from your server folder and presents the most important settings as labelled form fields. The three Minecraft JSON management files — ops.json, whitelist.json, and banned-players.json — are loaded and displayed as editable text areas. When you click Save, all changes are written back to disk in one IPC round-trip.

How Properties Are Loaded

Clicking into the Properties tab (or switching to a different server) triggers a properties:get IPC call. The Electron handler reads server.properties line by line:
  • Lines that are empty or start with # are treated as comments and skipped
  • Lines containing = are split into a key and value pair: key.trim()rest.join('=').trim() (values can themselves contain =, for example in motd)
  • The full key/value map is returned as the properties object
At the same time, the handler reads ops.json, whitelist.json, and banned-players.json. Each file is parsed as a JSON array. If a file does not exist, an empty array [] is returned for that key. The combined response shape is:
{
  "properties": {
    "motd": "My ServerPilot Server",
    "max-players": "20",
    "gamemode": "survival",
    "server-port": "25565"
  },
  "json": {
    "ops.json": [],
    "whitelist.json": [],
    "banned-players.json": []
  }
}

Visual Property Editor

The Properties tab displays the ten most commonly changed settings as interactive form fields:
Property keyLabelInput type
motdMOTDText
server-portPortNumber
max-playersMax playersNumber
online-modeOnline modeBoolean (Enabled / Disabled)
white-listWhitelistBoolean (Enabled / Disabled)
pvpPVPBoolean (Enabled / Disabled)
difficultyDifficultyText
gamemodeGamemodeText
enable-command-blockCommand blocksBoolean (Enabled / Disabled)
view-distanceView distanceNumber
Boolean properties render as a <select> with Enabled (true) and Disabled (false) options. Text and number properties render as standard inputs. All other keys that exist in your server.properties (outside this list) are preserved as-is when the file is saved — they are not shown in the UI but are not discarded either.

Sample server.properties

#Minecraft server properties
#Edited by ServerPilot 2024-01-15T09:12:00.000Z
motd=My ServerPilot Server
max-players=20
gamemode=survival
difficulty=normal
pvp=true
online-mode=true
white-list=false
server-port=25565
enable-command-block=false
view-distance=10
Most server.properties changes only take effect when the server is restarted. Properties like motd, max-players, gamemode, difficulty, pvp, white-list, and server-port all require a restart. Save your changes, then use the Restart button on the Dashboard to apply them.

How Properties Are Saved

Clicking Save calls properties:save with the full properties map and the current JSON file contents. The handler writes a new server.properties by:
  1. Writing a #Minecraft server properties comment header
  2. Writing a #Edited by ServerPilot <ISO timestamp> line (e.g. #Edited by ServerPilot 2024-01-15T09:12:00.000Z)
  3. Writing each key=value pair, one per line, for every entry in the properties map
const lines = ['#Minecraft server properties', `#Edited by ServerPilot ${new Date().toISOString()}`];
for (const [key, value] of Object.entries(properties || {})) lines.push(`${key}=${value}`);
await fs.promises.writeFile(resolveInside(root, 'server.properties'), lines.join('\n'), 'utf8');

JSON Management Files

Below the property editor are three raw JSON text areas — one for each management file:
Contains an array of objects with each operator’s uuid, name, level, and bypassesPlayerLimit fields. The operator level controls what commands the player can run. Add or remove entries here, then click Save.
[
  {
    "uuid": "abc123de-f456-7890-abcd-ef1234567890",
    "name": "Steve",
    "level": 4,
    "bypassesPlayerLimit": false
  }
]
Contains an array of objects with uuid and name for each whitelisted player. The whitelist is only enforced when white-list=true in server.properties.
[
  { "uuid": "abc123de-f456-7890-abcd-ef1234567890", "name": "Steve" },
  { "uuid": "def456gh-i789-0123-jklm-no4567890123", "name": "Alex" }
]
Contains an array of ban records. Each entry includes uuid, name, created, source, expires, and reason.
[
  {
    "uuid": "abc123de-f456-7890-abcd-ef1234567890",
    "name": "Griefer99",
    "created": "2024-01-15 09:00:00 +0000",
    "source": "Server",
    "expires": "forever",
    "reason": "Griefing"
  }
]

Security

The properties:save handler uses a strict whitelist when writing JSON files. Only ops.json, whitelist.json, and banned-players.json are accepted as keys in the json payload. Any other filename is silently skipped:
if (!['ops.json', 'whitelist.json', 'banned-players.json'].includes(file)) continue;
All file paths are also resolved through resolveInside to prevent any path traversal.

IPC Reference

ChannelDirectionPayloadReturns
properties:getRenderer → Mainid (server ID){ properties: { key: value }, json: { 'ops.json': [...], ... } }
properties:saveRenderer → Main{ id, properties, json }true

Build docs developers (and LLMs) love