The File Manager tab lets you browse your entire Minecraft server folder directly inside ServerPilot, without needing to open Windows Explorer. Any supported text file can be opened in the built-in Monaco Editor — the same editor engine that powers Visual Studio Code — giving you syntax highlighting, word wrap, and a familiar editing experience right alongside your server controls.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.
Browsing the Server Folder
When you open the File Manager, ServerPilot callsfiles:list with an empty relativePath to list the root of the server folder. The directory listing is sorted folders first, then files alphabetically — the same ordering used by most file explorers.
Each entry in the listing shows:
- Name — the file or folder name
- Type icon — a folder icon (neon green) for directories, a file icon (grey) for files
- Size — the file size for non-directory entries, e.g.
48 KB - Last modified — derived from the
updatedAt(mtimeMs) timestamp of the file
/plugins/EssentialsX). Click any segment of the breadcrumb to navigate back up. Navigation is always confined within the server folder — you cannot browse above the server root.
Supported File Types for Editing
Only files with the following extensions can be opened in the editor. Any other file type will return an error when you try to open it.
.yml · .yaml · .json · .txt · .properties · .log · .md · .cfg · .conf · .toml.yml and .yaml files get YAML syntax highlighting, .json files get JSON, .properties and .conf files get a plain-text fallback, and .toml files get TOML.
Monaco Editor
The editor is rendered by@monaco-editor/react using the vs-dark theme to match ServerPilot’s dark UI. The editor is configured with:
minimap: { enabled: false }— the minimap is hidden to preserve horizontal spacefontSize: 14wordWrap: 'on'— long lines wrap instead of requiring horizontal scrolling
files:write.
File Operations
All file operations go through Electron IPC handlers registered infileManager.js. Every path is resolved and validated before any filesystem action is taken.
Create a file
Click the New File button (file icon) in the sidebar toolbar. Enter a name when prompted. ServerPilot calls
files:create with type: 'file', which creates an empty file using fs.promises.writeFile with the wx flag (fails if the file already exists).Create a folder
Click the New Folder button (folder-plus icon) in the toolbar. Enter a name when prompted. ServerPilot calls
files:create with type: 'folder', which runs fs.promises.mkdir with recursive: true.Rename a file or folder
Renaming is available via the
files:rename IPC handler. The new name must not contain / or \ — slashes in the name are rejected to prevent path injection. The rename is performed with fs.promises.rename.Delete a file or folder
Click the trash icon that appears when you hover over an entry. Confirm the prompt, and ServerPilot calls
files:delete, which runs fs.promises.rm with { recursive: true, force: true }. This deletes non-empty folders as well as individual files.Open and read a file
Click any file with a supported extension. ServerPilot calls
files:read, which reads the file as UTF-8 and returns { content, language }. The language field is derived from the file extension (without the dot) for Monaco to use as the syntax mode.Security Model
The File Manager enforces a strict server-folder confinement policy in theresolveInside function:
| Blocked path |
|---|
C:\Windows |
C:\Program Files |
C:\Program Files (x86) |
C:\Users\Default |
../ traversal attempts — results in a thrown error and no filesystem operation is performed.
The
backups/ subfolder appears in the file listing, but managing backup ZIP files is handled by the dedicated Backups tab. You can view the folder contents here, but use the Backups tab to create and restore backups.IPC Reference
| Channel | Direction | Payload | Returns |
|---|---|---|---|
files:list | Renderer → Main | { id, relativePath } | Array of { name, relativePath, isDirectory, size, updatedAt } |
files:read | Renderer → Main | { id, relativePath } | { content, language } |
files:write | Renderer → Main | { id, relativePath, content } | true |
files:create | Renderer → Main | { id, relativePath, type } | true |
files:delete | Renderer → Main | { id, relativePath } | true |
files:rename | Renderer → Main | { id, relativePath, nextName } | true |