Namespace McServerLauncher.Services
Classes
- Advice
One suggestion.
- AdviceInputs
What the advice depends on.
- AgentStatus
What the agent says about the JVM it runs in. Read from
status.json.
- AnsiEscapes
Removes the colour codes some servers write into their console output.
- AppHttp
The one place an HttpClient of this app is made.
- AppLinks
The places this app points people at, in one list.
- AppPaths
Where the app keeps what it writes about itself: settings, logs, caches, the Java runtimes it downloads, the Playit agent. One place, so a change to where that is (a portable mode, a test folder) is a change to one line instead of to nineteen.
- AppSettingsService
Loads and saves the global settings in %APPDATA%\McServerLauncher\settings.json.
- AppUpdateCoordinator
Gets an update's package onto disk and proves it is the one the publisher made, in the order that makes a refusal cheap: everything that can say "no" is asked for before the download.
- AppUpdateCoordinator.VerifiedPackage
A package that passed both checks: where it is, and the SHA-256 it was verified as.
- AppWindows
The windows the app has, for whatever needs one to own a dialog or reach the clipboard.
- AtomicDownload
Downloads a file so that a failure can never damage what was already on disk.
Writing straight to the destination truncates it the moment the stream opens, long before the download is known to be good. A connection dropped halfway then leaves a valid path holding a half a file — and for the Fabric server jar it was worse than that: the structural check that runs afterwards deletes what it rejects, so an interrupted loader change turned a working server into one with no jar to start at all.
So the bytes go to "<dest>.part", verification runs against that, and only a file that arrived complete and passed its check replaces the real one — in a single filesystem move. This is the same guarantee AtomicJsonFile gives the app's JSON, applied to binaries.
- AtomicJsonFile
Atomic load/save for the app's JSON files (servers.json, settings.json), so a crash or power loss mid-write can never truncate them. Writes go to a ".tmp" file that atomically replaces the target, keeping the previous version as ".bak". A corrupt file is quarantined as ".bad" and the ".bak" copy is restored when possible, instead of silently starting from scratch.
- AtomicTextFile
Writing a config file the app owns: only when it actually changed, and never half-written.
- BackupSchedule
Decides when a running server is due for an automatic backup.
- BrowserLauncher
Opens a link in the user's browser.
Everywhere else in the app the URL is a constant we wrote. In the store it comes from Modrinth — an author fills in "source", "wiki" or "discord", and the long description is full of links — so it is untrusted input.
UseShellExecutehands whatever it is given to the shell, which would happily run a local executable or a registered custom scheme, so only absolute http/https URLs are ever passed through.
- BukkitPathRule
The two characters a Paper or Purpur server refuses to run from.
- ByteSize
A size on disk as a person reads it: "812 KB", "3.4 MB", "1.2 GB".
- Changelog
Per-version "what's new" notes. When the user updates across several versions at once, the notes for every version they hadn't seen yet are shown together (newest first), so nothing is missed. Add a new entry (newest first) plus its
Whatsnew_x_y_zresx keys on each release.
- ClientPack
The jars a server's players need and the server must not load: Sodium, MaLiLib, a minimap.
- ColorPalette
The colours offered in the colour chooser, and how readable a colour is on the app's dark surfaces.
- ConnectionProbe
The measurements behind the connection test: a Minecraft status ping, a Bedrock (RakNet) ping, a bare TCP round trip, and a download and an upload to time the line.
- ConsoleColors
The colour each kind of console line is drawn in, as data.
- ConsoleLineClassifier
What a console line is about: its severity, and whether it is chat, a player event, or the app.
- ConsoleLogService
Persists every server's console output to a shared, dated log file (%APPDATA%/McServerLauncher/logs/launcher-yyyy-MM-dd.log) so the history survives the app being closed or crashing, not just the in-memory console shown in the UI. A new file starts each day; files older than McServerLauncher.Services.ConsoleLogService.RetentionDays are pruned so the folder doesn't grow forever.
- ConsolePreferences
The two console colours the user can change, app-wide.
- ContentDependencyCheck
Whether every installed mod and plugin has what it needs, answered from the jars alone.
- ContentDependencyCheck.Missing
Something needed that nothing installed provides.
- ContentLedger
What the app has to remember about a server's mods that the folder itself cannot say.
- ContentLedgerStore
Loads and saves one server's ContentLedger.
- ContentManifest
What a mod or plugin jar says about itself: the names it provides, and the ones it needs.
- ContentManifest.Entry
One jar in a content folder, switched on or off.
- ContentManifest.Manifest
One jar: what it offers under what names, and what it needs to be there.
- ContentManifestCache
What a jar says about itself, remembered for as long as the jar has not changed.
- ContentMigrationService
What happens to the mods or plugins already installed when a server changes family.
- CrashLog
Writes down what went wrong when something escapes every handler, so a crash leaves a trace.
- CrashReportService
Looks for a Minecraft server crash report relevant to the server's most recent run, to show a short human-readable reason alongside "the server exited unexpectedly" instead of just an exit code. Vanilla/Fabric/Forge/Paper all write crash reports to "<folder>/crash-reports/" with a stable, decade-old format: a "---- Minecraft Crash Report ----" header followed by a "Description: ..." line summarizing what went wrong.
- CreateAgentResult
Result of
/v1/partner/create_agent: the per-user self-managed agent minted for the user from their setup code. AgentSecretKey is what the app stores (encrypted) and uses as theagent-keyfor all subsequent tunnel management.
- CrossplayService
Setting a server up so people can join from Bedrock as well as Java.
- DeathMessageDetector
Detects Minecraft death/kill messages in a server console line, for the "deaths" notification. Best-effort and English/vanilla-oriented: the server's locale or plugins may word some deaths differently. Pairing a death-phrase match with a "subject is a valid player name" check keeps it from firing on chat lines (which start with a "<name>" tag) or other log output.
- DesktopShortcutService
Puts a shortcut to the app on the user's desktop.
Each desktop means something different by "shortcut": Windows wants a
.lnk, Linux a.desktopentry that has to be executable and, on GNOME, explicitly trusted, and macOS a symlink to the bundle. What they share is that the target must be whatever this copy is really running from — an AppImage the user dropped in Downloads, a bundle in /Applications — and not a guessed install path.
- DownloadVerifier
Verifies a downloaded file's hash against the checksum an official API (Mojang, Adoptium, Paper) already returns alongside the download URL. On mismatch the file is deleted and an exception is thrown, so a corrupted or tampered download is never silently trusted.
- ErrorMessages
What to tell a person about a failure, instead of what the exception says.
- ExistingServer
Turns a folder that already holds a server into one the app manages, without touching it.
- ExistingServerForm
What the user settled on in the create dialog for a folder that already holds a server.
- ExportSelection
Which of a server's jars belong in the pack its players are handed.
- ExportSelection.Candidate
One jar up for inclusion: what it says about itself, and what the store says.
- ExportSelection.Plan
What an export decided, by jar file name.
- FileHashCache
The SHA-1 of a file, remembered for as long as the file has not changed.
- GcLogLine
Reads one line of the unified GC log (
-Xlog:gc) the app asks the JVM to write.
- GcLogTail
Reads the lines a file gains, between one call and the next: the GC log the JVM keeps writing.
- GcLogging
Asks the JVM for a GC log, which is how the app learns how much heap a server really keeps alive.
- GeyserConfigService
Geyser's
config.yml: where it lives, and the two ports the launcher has to set in it.
- GeyserDownloadsApi
GeyserMC's downloads API, which the app reads for Floodgate and for Hydraulic.
- GeyserDownloadsApi.Artifact
One published artifact: which build it came from, and how to verify it.
- HydraulicService
Hydraulic: what lets Bedrock players actually see the blocks and items that mods add.
- IdlePolicy
The rules for stopping an empty server and for leaving it alone after it was woken, as plain functions of their inputs.
- ImageCache
Remote images (project icons and gallery screenshots) with a memory + disk cache in front.
The URLs come from Modrinth's API, but they are still remote input, so every download is guarded: the response has to declare an image content-type and stay under a byte cap that is enforced while streaming, so a missing or lying Content-Length can't balloon memory either. Anything odd yields null and the caller keeps its placeholder.
Decoding happens on the calling (background) thread, never on the UI thread. Bitmaps are cached and handed to several views at once, so they are deliberately never disposed here — a disposed bitmap still bound to an
Imagewould throw when it is drawn.
- InlineProgress<T>
Reports on the thread that called it, at once. Progress<T> posts to the thread's synchronization context instead, so a late message can land after the line that was written to say the work finished.
- InstalledContentIndex
What the store says each jar on disk is: one answer per file, asked once a session.
- JavaService
Detects the machine's Java installations and, if needed, downloads the right version (Adoptium Temurin) for a specific Minecraft version. Works on Windows and Linux.
- JavaService.JavaInstall
A Java runtime found on the machine: where its executable is, and its major version.
- JavaService.JavaRuntime
What a Java executable is, as far as the command line the app builds cares.
- JvmArgs
Reads a server's extra JVM arguments for the decisions the automatic memory profile must leave to their owner.
- LatencyStats
Round trips to one place: what came back, out of how many were sent.
- LearnedCeiling
A ceiling worked out from how a server was really used, and why.
- LiveWorldBackup
Backs up the world of a server that is running, by asking Minecraft to let go of it first.
- LoaderChange
What the Loader page asks for: change this server's type, keeping its world.
- LoaderChangeResult
The fields of the server's config that an install changes.
- LoaderChangeService
Changes a server from one type to another — Vanilla into a loader, a loader into another, or back to Vanilla — without touching the world.
- LoaderPaths
Where each mod loader leaves the files the launcher has to find again afterwards.
- MarkdownBlock
One block of the description: a paragraph, a heading, a list item…
- MarkdownParser
A small Markdown reader for the long descriptions Modrinth returns.
It is deliberately partial. Those descriptions are Markdown with raw HTML mixed in, written to be rendered by a web page, and pulling in a full Markdown engine (and an HTML sanitiser behind it) to show them in a desktop panel would be a large dependency for a read-only view. What is supported is what those pages actually use: headings, lists, quotes, code, emphasis, links and rules. Everything else — HTML tags, images, scripts — is dropped rather than shown raw, so a project page can never inject markup into the app.
Images are dropped on purpose: the gallery already shows them, and a description with thirty remote images would mean thirty downloads for a page the user may only skim.
- MarkdownSpan
A run of text inside a block, with the formatting that applies to it.
- MemoryAgent
The agent that holds a server's heap tighter while the machine is short of memory: getting it into the server's folder, onto the command line, and out again when it must not run.
- MemoryAgentPolicy
Decides, from how much memory the machine has free, whether the agent should hold a server's heap tighter. Pure: the app decides, the agent only carries it out.
- MemoryBudget
The memory ceilings of the servers running right now, so the next one to start knows what is left.
- MemoryHistory
The memory side of a server's history: its latest runs, oldest first.
- MemoryHistoryStore
Loads and saves one server's MemoryHistory.
- MemoryInputs
Everything the memory decision depends on, gathered before a server starts.
- MemoryLearner
Works out a server's next heap ceiling from the runs the app has seen of it. Pure.
- MemoryPlan
What a server starts with.
- MemoryPreferences
The app-wide memory settings the start path reads. Set at startup from the saved settings and again when they change, like WindowBehavior.
- MemoryPressure
Decides from the GC log whether a server is short of memory. Pure, with the time given by the caller.
- MemoryProfile
Decides how much memory a server may use and the JVM flags that make it use no more than it needs.
- MemoryReadout
Which of a sample's numbers the RAM card shows.
- MemorySession
What the app learned about memory during one run of a server.
- MemorySessionStart
What is known about a run when it starts.
- MemorySessionTracker
Gathers a run's memory measurements as they arrive, and turns them into one MemorySession when it ends.
- MinecraftIds
Turns a Minecraft id into something readable:
minecraft:deepslate_diamond_orebecomes "Deepslate diamond ore".
- MinecraftRange
Does this Minecraft version satisfy the range a mod declares?
- MinecraftVersionService
Gets the list of Minecraft versions from Mojang's official manifest and downloads the server.jar of the chosen version.
- MinecraftVersionService.VersionDetails
server.jar URL, required Java version and its official SHA-1 (for integrity checking).
- ModDependencyInstaller
Finds the library mods a server's content needs and puts them on disk.
- ModDependencyService
The library mods almost every mod needs, and that nobody remembers to install by hand.
- ModDependencyService.Needed
One dependency that has to be downloaded, already resolved to a concrete file.
- ModDependencyService.Plan
What is missing, and what could not be worked out.
- ModLoaderService
Installs a mod loader — Fabric, Forge or NeoForge — into a server folder.
- ModLoaderService.ForgeInstallResult
Outcome of a Forge server install: a runnable jar (old Forge) or an args id (modern Forge).
- ModrinthService
The app's whole conversation with Modrinth: searching the store, reading a project, resolving a version for this server, identifying installed jars by hash, and downloading a file.
- MotdDocument
A server's MOTD as the two lines the game's server list shows, with a style per character.
- MultiVersionService
Letting people join from a Minecraft version other than the one the server runs.
- NameIssue
The problem found, and whatever detail the message needs.
- NbtReader
Reads one number out of a gzipped NBT file, the format Minecraft saves its world data in.
- NeoForgeVersions
Turning "which Minecraft version?" into "which NeoForge build?".
- NeoForgeVersions.Choice
A chosen build, and whether the user is about to install a pre-release.
- NewServerPlan
What the new-server form asks for, once it has been checked and is safe to act on.
- NotificationCatalog
What each kind of notification looks like: its level, and the icon that identifies it.
- NotificationCatalog.Entry
One kind of notification: how serious it is, and how it is marked.
- NotificationPalette
The default colour of each notification level, and what counts as a valid one.
- NotificationPreferences
Decides whether a given notification should be shown for a given server, combining the global settings with an optional per-server override. Global is app-wide state (like
ToastService.Shared): set once at startup from AppSettings and updated when the user edits the global notification settings.
- PaperDistanceOverride
Whether Spigot's own configuration overrides the distances in
server.properties.
- PaperService
Downloads the Paper server jar from PaperMC's "fill" API (v3). Paper is a runnable jar, so it launches like vanilla (-jar). Plugins go in the server's plugins/ folder.
- PaperService.PaperBuild
One Paper build, resolved to something downloadable.
- PerformanceAdvice
Turns a verdict into the settings changes worth offering. Pure.
- PerformanceMonitor
Decides from several signals whether a server is coping, and says which one convinced it.
- PerformanceParsers
Reads the lines that tell how fast a server is running: its own lag warnings and the answers of
spark tps, vanilla'stick queryand Paper'stps.
- PerformancePick
One mod or plugin the Performance page may suggest.
- PerformancePicks
The short list of mods and plugins that make a server faster without changing how the game plays, from
Resources/performance-picks.json.
- PerformanceProbe
Asks a running server how fast it is, with the best command it understands, and keeps the answer out of the console.
- PerformanceStatus
The monitor's verdict at one moment.
- PlayerEvent
One thing a player did, read from a console line.
- PlayerEventParser
Turns a server log line into something a player did.
- PlayerHistoryPreferences
The app-wide history settings, set from AppSettings at startup and by the settings dialog.
- PlayerHistoryStore
One server's player history: who came, when, for how long, and what they did and said.
- PlayerLogImporter
Fills a new player history from the logs the server already kept, once.
- PlayerNames
What a Minecraft Java player name looks like, in one place.
- PlayerRecord
What the history knows about one player, all in one place.
- PlayerStats
A player's statistics as the server itself counts them.
- PlayerStatsReader
Reads the statistics the server keeps per player, for the player's profile.
- PlayersService
Reads the player lists the server stores in JSON files: ops.json (operators), banned-players.json (banned) and usercache.json (known).
- PlayitAgentRunner
Runs Playit's official agent (
playitd) as a child process so the user's tunnels actually forward traffic — without them installing anything. The binary is downloaded once (pinned to the same version the app registers, McServerLauncher.Services.PlayitAgentRunner.AgentVersion) and launched with--secret-path(see McServerLauncher.Services.PlayitAgentRunner.SecretPath) pointing at the per-user agent key from the setup-code flow. One agent serves all of the user's tunnels; it runs while the app is open and connected, and is stopped on shutdown. App-wide singleton.
- PlayitApiException
Error returned by the Playit API (status != success).
- PlayitApiService
Playit.gg API client.
- Preferred: a per-user self-managed agent secret key from the partner setup-code flow
(PlayitPartnerService), set app-wide via SetAgentKey(string?) and used as
agent-keyfor both reads AND writes. - Fallback (legacy): the agent's secret_key from playit.toml (reads) and a user-pasted write key (writes, sent as Api-Key/Agent-Key). Auth is resolved by trying the schemes in order, so a caller doesn't need to know which kind of key it holds.
- Preferred: a per-user self-managed agent secret key from the partner setup-code flow
(PlayitPartnerService), set app-wide via SetAgentKey(string?) and used as
- PlayitApiService.PlayitTunnel
One tunnel as the agent reports it.
- PlayitManager
Playit.gg integration that relies on the background Playit agent already keeping the tunnels up 24/7. The app does not launch its own playit binary: it only queries and, when possible, starts/stops the agent.
- On Windows the agent is a Windows service ("playitd"), managed via ServiceController.
- On Linux it is typically a systemd unit, managed via
systemctl(start/stop may need privileges).
- PlayitPartnerService
Third-party "Integration"-tier onboarding: exchanges a Playit
account_setup_code(that the user obtained from playit.gg) for a per-user self-managed agent secret key. The request goes through a small proxy (a Cloudflare Worker, seeplayit-proxy/) that injects the partner Api-Key server-side — so NO secret ships inside this (public, open-source) app. Everything after uses the returned per-user secret via PlayitApiService.
- PlayitStatus
What the tunnel panel says about Playit, worked out from the two things that can carry the tunnel: the app's embedded agent, and the system's own Playit service.
- PortService
Checks which ports are in use on the machine (by any application) and helps find the next free one. TCP and UDP are asked separately because they are separate namespaces.
- ProcessMemory
The memory a process holds that belongs to it alone, as the system reports it.
- ProcessRunner
Runs a short external command and collects what it printed, within a deadline that holds.
- ProcessStatsService
Computes CPU usage (%) and RAM (MB) of a process, sampling the CPU time between consecutive calls.
- ProcessStatsService.Stats
One sample of a running server's cost, as the status cards show it.
- PropertiesSavedWhileRunning
The
server.propertiesvalues saved while the server was running, to be written again when the server overwrites them.
- PurpurService
Downloads the Purpur server jar. Purpur is a Paper fork: a runnable jar, plugins in
plugins/, and every Bukkit plugin works on it unchanged.
- PurpurService.PurpurBuild
A build of Purpur, and the hash their API publishes for it.
- Safe
For the failures the app decides to carry on after: they are not shown to the user, but they are not thrown away either.
- SaveConfirmation
Recognises the server saying it has finished writing the world to disk.
- SecretProtector
Protects small secrets (like the Playit API key) at rest, on every platform:
- Windows: DPAPI scoped to the current user, stored as "dpapi:" + base64. Only the same Windows user on the same machine can decrypt it.
- Linux/macOS: AES-256-GCM with a random per-user key kept in a file only the user can read (0600), stored as "aes:" + base64(nonce | tag | ciphertext). Both protect the settings file against other users and accidental leaks (backups, sharing the file); neither protects against malware already running as the same user — DPAPI can't either.
- SeedInfo
A world's seed, and where the app found it.
- SeedMapLink
The link to a seed on Chunkbase's seed map, for the version the server runs.
- SelfUpdater
Replaces the running application with an already downloaded and verified package, then restarts it — the same "press Update and it just happens" behaviour on every platform.
Each platform ships differently, so each is applied differently: Windows runs the silent installer, Linux swaps the AppImage file the app is running from, and macOS mounts the .dmg and replaces the .app bundle. What they share is the shape: nothing is touched until a complete, package, verified by checksum and by the publisher's signature, exists on disk, and any failure leaves the current install working.
- ServerAccessCatalog
One row per permission and per role: what it is called on the wire, how dangerous it is, and what a role starts with.
- ServerAccessCatalog.PermissionEntry
Everything the app knows about one permission.
- ServerAccessRules
Who can do what on a shared server, and who may change whose access.
- ServerCreationService
Generates the initial files of a new server: eula.txt, run.bat and a minimal server.properties with the chosen port (Minecraft fills in the rest on the first launch).
- ServerDetection
What a server folder turned out to contain.
- ServerDetectionService
Works out what kind of server a folder holds: the type, the Minecraft version, the loader, what to launch, and the port, memory and world it was set up with.
- ServerIconService
Generates a server's server-icon.png (64x64 PNG) from any image, cropping it to a centered square and scaling. This is the icon players see in the server list. Uses SkiaSharp so it works on Windows and Linux.
- ServerJarInstaller
Puts the right server files on disk for a server type, whichever way that type is obtained.
- ServerJarInstaller.InstallResult
What the install left behind, in the shape the caller needs for its config.
- ServerNameRule
Checking a server's folder name before it becomes a server that will not start.
- ServerPorts
What a server needs from the account's tunnels: its name and the ports it listens on.
JavaPortis null whenserver.propertiescannot be read;BedrockPortis null when crossplay is off (a server without Bedrock owns no UDP tunnel);PlayitEnabledsays whether the server is meant to be reached through Playit at all.
- ServerProcessManager
Manages the lifecycle of a Minecraft server's java process: startup, clean shutdown (sending "stop" over stdin), command sending and re-emitting the console output in real time.
- ServerPropertiesService
Reads and writes the server.properties file (key=value format, one per line). Used to read values (e.g. the port) and to update them from the visual configuration screen.
- ServerProvisioningService
Makes a server on disk, or takes over a folder that already holds one: everything the new-server panel does once the form has been accepted.
- ServerStorageService
Loads and saves the list of registered servers in %APPDATA%\McServerLauncher\servers.json.
- ServerTypeCatalog
One row per server type: what it is called, what it takes, and whether Bedrock can reach it.
- ServerTypeCatalog.Entry
Everything the app knows about one server type.
- SingleInstance
Keeps the app to one running copy per user, and lets a second launch bring the first one back to the front instead of opening a window of its own.
- SlpReply
What a Minecraft server said to a status ping.
- StatEntry
One id and how many times it was counted:
minecraft:stone, 1420.
- StoreCache
Two-level cache (memory, then disk, then the network) for the store's API responses. It exists so that opening a mod — and going back and opening it again — costs one request, not one per visit, and so that a project already seen still opens with no connection.
Concurrent callers asking for the same key share a single fetch: opening a details page kicks off the project, its versions and its dependencies at once, and the related-mods strip may ask for a project that is already in flight.
Entries are kept on disk beyond their freshness window on purpose: when the network fails, a stale entry is a much better answer than an empty page. Anything older than McServerLauncher.Services.StoreCache.MaxDiskAge is pruned once per run.
- StoreCatalogEntry
What the catalogue knows about one project.
- StoreCatalogService
The store catalogue: what each popular project is about and what it does, decided outside the app.
- StoreSummaryService
Answers "what does this actually do to my server?" in the user's own language.
Modrinth's own one-line description is written by the author, in English, and often for other modders ("An intermediary api aimed to ease developing multiplatform mods"). So the store ships a hand-written catalogue for the projects a server owner is most likely to meet, in the five languages the app speaks. It is looked up locally: no request, no key, no cost, and it works offline.
Anything outside the catalogue falls back to a sentence built from what Modrinth does tell us — the kind of project, its main tag and, above all, whether players have to install it too, which is the one thing that decides whether a mod is usable on a public server.
The catalogue can be replaced without rebuilding by dropping a
store-summaries.jsonin the user's data folder.
- StoreTagService
Turns a store item into the app's own tags.
Modrinth's categories are a good start but they are coarse — nearly half of the top server mods are filed under "utility" — and they don't say the one thing a server owner cares most about: whether players have to install the mod as well. So the categories are combined with keyword rules and with the client/server side, all of which live in
Resources/store-tags.json.Every rule adds to a score and a tag applies from McServerLauncher.Services.StoreTagService.Threshold. That is what replaced "any rule matching is enough", which tagged a password manager as combat (the keyword "sword" inside "password") and a backpack mod as combat too (Modrinth files armour, tools and backpacks under "equipment"). Keywords are whole words, and a project whose author ticked most of the topics gets little from them: those authors tick everything, so the ticks say little. When nothing reaches the threshold the project has no tags, and the card says so by showing none rather than a guess.
Where the downloaded StoreCatalogService has an answer for a project, that answer is used instead: it comes from reading the whole description with a model, which is what these rules can only approximate. The rules remain what runs for every project the catalogue has never seen, and what runs offline on a first launch.
The catalogue is read from the embedded copy, unless
%APPDATA%\McServerLauncher\store-tags.jsonexists, in which case that file is used instead. Tags can therefore be added, translated, recoloured or re-mapped without a new build.
- StoredEvent
One event as it is stored and shown.
- SystemMemory
The machine's memory, as the memory budget and the performance advice need it.
- Throughput
How fast bytes went one way.
- TickReading
One answer from a server about its speed.
- ToastLifetime
How long a toast stays, how much of that is left, and how opaque it is right now.
- TunnelAddressSync
What a server card should say about its addresses, given what the Playit account answered.
- TunnelInventory
Reading the account's tunnels against the servers on this machine: which ones lead nowhere, which ones two servers are fighting over, which are there twice, and what is missing.
- TunnelRow
One tunnel of the account, with what is known about it.
Ownersare the servers that listen where it points;SuggestedNameis the name it would carry if named after its server, null when nothing sensible exists (no owner, or several).
- TunnelSuggestion
One thing the screen can offer to put right.
TunnelIdandServerIdname what it concerns, when it concerns one;Subjectis the name to show (the tunnel's or the server's);Otheris a second name where one is needed (the other server sharing a port);UdpandPortsay which local port it is about — a shared Bedrock port is fixed differently from a shared Java one, and "create a tunnel" is only actionable on playit.gg with the port in hand.
- UpdateCheck
Turning the update service's answer into one of the three outcomes a person can be told about.
- UpdateService
Checks the GitHub Releases for a version newer than the installed one.
- UpdateService.UpdateInfo
Update data. PackageUrl/PackageName are the package for the platform this app is running on — the Windows installer, the Linux AppImage or the macOS .dmg for this architecture — and are null when the release ships nothing usable here. ChecksumUrl is the asset that carries its SHA-256, used to verify the download before it is installed; null on releases published before that existed. SignatureUrl is the asset with the publisher's signature of the package (see UpdateSignature); null when the release has not been signed (yet).
- UpdateSignature
Checks that an update package was signed by whoever publishes this project, with a key that does not live on GitHub — and that the signature is for this version of this package.
- UserFacingException
A failure whose message was written for the user — translated, complete, ready to show.
- VerifiedJarDownload
Fetching a server jar: announce the size, download atomically, verify, say it is done.
- WakeOnDemandListener
Answers Minecraft clients on the server's port while the real server is stopped, so a stopped server can say "I'm asleep, come in and I'll wake up" instead of just refusing the connection.
It speaks the small, stable part of the protocol needed for that: the handshake, the server-list status, and the login disconnect. Pressing Join is what wakes the server — the client re-pings every few seconds while the multiplayer screen is open, so waking on a status request would start the server over and over for people who are not even playing.
With a Playit tunnel this socket is reachable from the internet, so everything it reads is treated as hostile: lengths are bounded before anything is allocated, every connection has a deadline, and the number of them at once is capped.
- WakePolicy
Who may wake a sleeping server by trying to join it.
- WakeStatus
What a client is told about a server that is currently asleep.
- WhitelistService
Manages a server's whitelist.json file (list of allowed players). Each entry has uuid + name. It resolves the UUID from Mojang (online mode) or computes it offline when the server does not use official accounts.
- WindowBehavior
What the window's minimize and close buttons do, as chosen in the settings. App-wide state (like Global): set at startup from the saved settings and updated when the user edits them, so the change takes effect without restarting the app.
- WorldBackupService
Creates and restores zip backups of a server's world folder — the "level-name" directory from server.properties ("world" by default) — together with the Nether and the End when the server keeps them beside it. Backups live in "<server folder>/backups/"; old ones beyond the configured retention are pruned after each new one.
- WorldBackupService.BackupInfo
One backup zip already on disk, as the backups list shows it.
- WorldCommand
Whether a command typed into the console can change the world's files.
- WorldSeed
Finds the seed of a server's world.
Structs
- Changelog.Section
A version and its localized notes.
- GcEvent
One collection read from the GC log.
- MotdStyle
How one character looks. Color is a Minecraft code (0-9, a-f),
'x'for the RGB colour in Rgb, or '\0' for the list's default grey.
- PerfLine
A console line read for speed, with the numbers it carries.
- ProcessRunner.Result
What a command left behind.
ExitCodeis -1 when it could not run or ran out of time.
- ReachabilitySignal
What the signal shows: its kind, the hint to explain it, and whether to warn.
Interfaces
- IUpdateSource
Where an update's files come from: the checksum list, the signature and the package itself.
Enums
- AdviceKind
A change to the server's settings that lightens its load.
- AgentRunState
State of the embedded Playit agent process.
- AppUpdateCoordinator.Phase
A step the user can be told about while it runs.
- AtomicJsonFile.LoadOutcome
What happened when loading a JSON file.
- BackupDue
What the clock says about the next automatic backup.
- ContentManifest.ContentSide
Where a jar declares it runs, read out of its own manifest.
- CrossplayLevel
How well Bedrock players can actually play on a server type.
- ExportSelection.StoreSide
How well a project supports one side, in the store's vocabulary.
- GcCollector
The collector a JVM reports it is using.
- GcKind
What a collection was, as far as the memory history cares.
- GrantDenial
Why a change to somebody's access is refused. None means it is allowed.
- HeapMargins
How tight the agent keeps a server's heap.
- MarkdownBlockKind
What a parsed block of a project's long description is.
- MemoryCeilingReason
Why a server got the memory ceiling it got.
- MemoryPressureReason
Why a server counts as short of memory.
- MotdFormat
The formatting a Minecraft MOTD can carry besides its colour.
- NameIssueKind
What is wrong with a server's folder name, when something is.
- PerfLineKind
What a console line says about the server's speed.
- PerformanceCause
What the judgement rests on, most serious first.
- PerformanceLevel
How a server is coping, in the three words the card shows.
- PermissionRisk
How much damage a permission can do if it falls into the wrong hands.
- PlayerEventKind
What a player did, as far as the history is concerned.
- PlayitApiService.TunnelEdition
Which edition a tunnel carries: they are different protocols, not a preference.
- ProbeKind
The command the app asks a server for its speed with.
- SeedSource
Where a seed the app shows came from, which decides how it is described.
- ServerFamily
What a server type accepts: plugins, mods, or neither.
- SessionEnd
How a run ended, for the history.
- SignalKind
How reachable a server is, for the coloured dot beside its name.
- TickSource
Where a tick reading came from.
- TunnelHealth
How a tunnel stands against the servers on this machine.
- UpdateCheckState
Where the "is there a newer version" question stands.