Releases: joogiebear/mcctl
Release list
v0.11.2 — Click the name instead of typing it
Click the name instead of typing it
Deleting
- The name you have to type to delete a server can be clicked instead. It is a button
now: one click puts it in the box and the Delete button comes alive. The name is still
shown, and still has to end up in the box, so the moment of reading which server this is
has not gone anywhere; only the typo has. The same applies to every other prompt that asks
for a name: deleting a world, removing a backup.
What's Changed
Everything else
- release: 0.11.2 — click the name instead of typing it by @joogiebear in #18
Full Changelog: v0.11.1...v0.11.2
Built from 67127113dbed plus uncommitted changes: ?? .claude/ on 2026-09-04T00:45:46.090Z.
v0.11.1 — A slow Java is not a missing Java
A slow Java is not a missing Java
Java
- A
java -versionthat takes too long to answer is asked again before it counts against
the binary. mcctl starts every Java on the machine at once when it looks for one, and on a
busy machine one of them can overrun the eight-second window just printing its version. That
was reported exactly like Java not being installed, so the Java on PATH could vanish from one
look and be back the next, and the default could flip between the two. When it still does not
answer after a second try, the message now says it was slow rather than absent.
What's Changed
Everything else
- release: 0.11.1 — a slow Java is not a missing Java by @joogiebear in #17
Full Changelog: v0.11.0...v0.11.1
Built from 924e45dbd804 on 2026-09-04T00:36:55.802Z.
v0.11.0 — Share the log, and the first outside contributions
Share the log, and the first outside contributions
The console can now leave the machine when you want it to, and this is the
first release with changes from outside the project. Console export and line
numbers are by @CallumJohnson.
Console
- Export. Save the console to a
.logfile beside the server's
snapshots, or upload it to mclo.gs, the log-sharing service plugin
developers ask for, and open the link. The upload happens only after a
dialog that says what is in it: mcctl replaces your account name in file
paths first, mclo.gs removes IP addresses on its side (best effort, by its
own policy) and deletes the log 90 days after it was last opened, and
everything else goes as is. The delete token is kept inrun/mclogs.json. - Line numbers, toggleable and remembered.
- The name to type when deleting a server is shown in its own case. The
label had been styling it uppercase while the check was exact, so
survivalwas shown as SURVIVAL and never matched. Reported in #8.
Around the project
- Every release now names its contributors: GitHub appends the merged pull
requests with their authors under these notes, and a "New Contributors"
line for first-timers. - A project page, and banner artwork for partner sites.
What's Changed
Everything else
- fix: Case sensitivity for deletion. by @CallumJohnson in #9
- feat: Line Numbers in logs by @CallumJohnson in #10
- feat: Export logs by @CallumJohnson in #11
- fix(mclogs): promise only what mclo.gs documents, and take the account name out first by @joogiebear in #12
- chore(release): name the contributors on every release by @joogiebear in #13
- feat(site): a project page, published by GitHub Pages, and banner artwork for partners by @joogiebear in #14
- docs: drop the 0.9.1 release notes, which shipped as 0.10.0 by @joogiebear in #16
New Contributors
- @CallumJohnson made their first contribution in #9
Full Changelog: v0.10.1...v0.11.0
Built from d500512f46aa on 2026-09-04T00:19:29.192Z.
v0.10.1 — Call a server anything
Call a server anything
Names
- The name field takes anything, up to 48 characters - "Survival (Season 3)" included. It
used to insist on letters, digits, dash and underscore, because the name is also the folder,
the argument to every command and the scheduled-task name. Those still get a safe name; it is
derived from what you type and shown under the field as you type it:Survival-Season-3, or
Survival-Season-3-2if that one is taken. - The name you gave shows on the card, in the header and in the edit dialog under Manage, where
it can be changed or cleared. When it differs from the folder name, the folder name sits in
small type beside the header so the console and commands still make sense. - Existing servers are untouched; one with no display name shows its name as before.
- From a terminal,
mcctl set <name> label="…"sets it andlabel=offclears it, and
mcctl statusreports it.
Feedback
- The Feedback sheet has a door each for A question and An idea, opening a new post
straight in the right Discussions category instead of on the index. The README and
CONTRIBUTING say where each kind of thing goes.
Also
- A dialog that opens the moment another closes - Manage, then Edit - can no longer be shut by
the first one's late close event. - The repository has a Sponsor button, and
mainmerges on green CI.
Built from b12f1d02d51f on 2026-09-03T02:59:03.217Z.
v0.10.1-beta.1 — Call a server anything
Call a server anything
A pre-release. Install it by hand once; later betas arrive through the app, and so does 0.10.1
when it is released.
Names
- The name field takes anything, up to 48 characters - "Survival (Season 3)" included. It
used to insist on letters, digits, dash and underscore, because the name is also the folder,
the argument to every command and the scheduled-task name. Those still get a safe name; it is
derived from what you type and shown under the field as you type it:Survival-Season-3, or
Survival-Season-3-2if that one is taken. - The name you gave shows on the card, in the header and in the edit dialog under Manage, where
it can be changed or cleared. When it differs from the folder name, the folder name sits in
small type beside the header so the console and commands still make sense. - Existing servers are untouched; one with no display name shows its name as before.
- From a terminal,
mcctl set <name> label="…"sets it andlabel=offclears it.
Feedback
- The Feedback sheet has a door each for A question and An idea, opening a new post
straight in the right Discussions category instead of on the index.
Also
- A dialog that opens the moment another closes - Manage, then Edit - can no longer be shut by
the first one's late close event.
Built from 40457e0f0413 on 2026-09-03T02:54:59.135Z.
v0.10.0 — The panel, polished
The panel, polished
Every screen of the panel got the same treatment. Some sections had been drawn with care and
others in a hurry, and the difference showed. This release closes the gap, and adds a few
things the panel should always have had.
The server list folds to a rail
A control in the list's header collapses it to a strip of lamps. Every server's state stays in
view, the selected one stays lit, and hovering a lamp names the server. The add button becomes
a plus. The fold is your choice and is remembered. In a narrow window the folded list is one
short row, so the console gets nearly the whole window.
Notices that do something
A finding under the vitals used to say what was wrong and, in prose, where to go about it. Now
it carries the button:
- Change port… on "The port is already taken" opens the same dialog Manage does, with the
port filled in. Out of memory offers Raise memory…. A missing dependency or two plugins
with one name opens Plugins; a Java that is too old, or a missing jar, opens Settings; a
world that would not load opens Backups; a ticking crash opens the crash reports. - Show in console switches to the console filtered to the exact line the finding was read
from. - Dismiss. Every notice can be closed for the run it belongs to. It comes back with the
next run, because a port that was taken may be taken again. - The crash notice and the state notes wear the same shape, and a stale state offers Start.
Settings
- One Save. The crash card and the Java card no longer carry their own Apply. One button
writes everything, says how many changes are waiting, and is disabled when nothing is. - It stays in view. The save bar sticks to the bottom of the pane while you scroll, the way
the title sticks to the top. - Cards in a row share a bottom edge, and the automatic-backup row on Backups wraps between
phrases instead of through one.
Keyboard
- Escape closes every dialog, including Manage. It had been ignored there.
- Closing Add a server, Settings or Feedback puts focus back on the button that opened it,
instead of dropping a keyboard user at the top of the page.
Empty screens
- Performance draws itself empty: both gauges with their grids and the reason written across
the chart, instead of a sentence where the charts will be. - Scheduler shows one empty state rather than two stacked.
- Performance and the plugin search use the same empty state as every other pane.
Underneath
- The vitals strip wraps evenly into equal cells, the jar name keeps two of them, and a
partial last row stays plain - instead of one fact alone on a stretched second line. - Every size, gap, radius and tone is on a token. Seventeen font sizes became a seven-step
scale, spacing sits on a four-pixel grid, and the state colours stop being pasted hex. The
visible effect is small on any one screen and adds up across all of them. - The panel was tried as two pre-releases first. A version with a prerelease part is now
published as a GitHub pre-release, which only installs that are themselves a beta are
offered; stable installs never see one.
Built from f49b1d2fce67 on 2026-09-03T01:51:56.596Z.
v0.10.0-beta.2 — Notices that do something
Notices that do something
Second pre-release of the panel pass. On top of beta.1:
Notices under the vitals
- A button for the way out. "The port is already taken" offers Change port…, which opens
the same dialog Manage does with the port filled in. Out of memory offers Raise memory…. A
missing dependency or two plugins with one name opens Plugins; a Java that is too old, or a
missing jar, opens Settings; a world that would not load opens Backups; a ticking crash opens
the crash reports. The advice still says it in words for the terminal. - Show in console switches to the console filtered to the exact line the finding was read
from. - Dismiss. Every notice can be closed for the run it belongs to. It comes back with the next
run, because a port that was taken may be taken again. - The crash notice and the state notes wear the same shape, and a stale state offers Start.
Built from d281bca13613 on 2026-09-03T01:14:27.059Z.
v0.10.0-beta.1 — The panel, polished
The panel, polished
A pre-release for trying the panel's new look before it ships. Install it by hand once; from
then on it updates itself to each later beta, and to 0.10.0 when that is released. Installs on
0.9.1 are not offered this.
The panel
- The server list folds to a rail. A control in the list's header collapses it to a strip
of lamps: every server's state stays in view, the selected one stays lit, and hovering a lamp
names the server. The add button becomes a plus. The fold is remembered. - One Save for Settings. The crash card and the Java card no longer carry their own Apply.
One button writes everything, says how many changes are waiting, and is disabled when nothing
is. It stays in view at the bottom of the pane while you scroll. - Cards in a row share a bottom edge, and the automatic-backup row on Backups wraps between
phrases instead of through one. - Escape closes every dialog, including Manage, and closing Add a server, Settings or
Feedback puts focus back on the button that opened it. - The vitals strip wraps evenly into equal cells instead of leaving one fact alone on a
stretched second line. - Performance draws itself empty: both gauges with their grids and the reason written across
the chart, instead of a sentence where the charts will be. Scheduler shows one empty state
rather than two. - Every size, gap, radius and tone is on a token. Seventeen font sizes became a seven-step
scale, spacing sits on a four-pixel grid, and the state colours stop being pasted hex. The
visible effect is small on any one screen and adds up across all of them.
Built from 65d6986a3fd1 on 2026-09-03T01:02:08.258Z.
v0.9.1 — The panel stops hesitating
The panel stops hesitating
The panel is one process, and four things it did held that process outright:
listing the process table on every poll while a server ran, starting PowerShell
to ask the scheduler whenever the Backups or Scheduler tab opened, walking every
file of every world when the Worlds tab opened, and asking Java its version the
moment the page loaded. Each one froze every request and the console stream for
as long as it took - anything from a third of a second to several - which read
as the whole panel stuttering. None of them does now.
Performance
- The process table refreshes in the background. The first read is
still immediate; every later one answers from the table it has and updates
quietly behind it. - The scheduler is asked asynchronously, once for a burst of requests,
and a task changed while a query was in flight never shows its old state. - World sizes come from a walk that does not hold the panel.
- The Java check no longer blocks the page opening, and it reports the
version line rather than aJAVA_TOOL_OPTIONSnotice when that is set.
Java, found where it is
- "Java is not installed" is no longer said to people who have it. mcctl
looks in the usual install folders - Program Files, the per-user Programs
folder,JAVA_HOME- as well as PATH, so a Java the installer did not put
on PATH, or one installed after mcctl was already open, is found and used. - Each server chooses its own Java. A Java card in the server's Settings
tab lists every Java on the machine, or takes a path to one it did not
find. A test server for 1.20.4 can run on 17 while the one beside it runs
26.x on 25. A new server defaults to the newest usable Java found. - mcctl knows what each version needs. The version list in Add a server
says "Java 21" or "Java 25" beside every version, and warns underneath when
nothing installed is new enough - before the download, not after it. A new
server gets the newest installed Java that fits its version, so 1.20.4
lands on 17 and 26.x on 25 without anyone choosing. A version nothing here
can run is refused with the download link, and "Create anyway" is one click
for whoever is about to install it. - Start checks the Java first. A server whose Java cannot be run is
refused by name, with the way out, instead of dying fifteen seconds later
withspawn java ENOENTin a state file. A Java that is certainly too old
for the server's version is refused the same way, or swapped for one that
fits when the server was on plainjava;mcctl start --forceoverrides. mcctl doctorand the diagnostics list every Java found.
Reporting a problem
- Feedback, in the header. Something broke opens a GitHub bug report
with the version, Java, server status and panel log already in it, and puts
the full diagnostics on the clipboard to paste under it. An idea or a
question opens the project's discussions. Nothing is sent from mcctl on
its own; the browser hop is the consent. A crash notice under a server's
vitals has a Report link that does the same, named for the crash. - Settings → Copy diagnostics puts a bug report's worth of facts on the
clipboard: version, Java, where things live, every server's status, the
panel's own log and the selected server's last console lines. Never an RCON
password or a webhook URL. run/panel.logrecords every time the panel was held up for more than
a quarter of a second, and any failure the panel process swallowed - which
it now does instead of closing on one.- A bug-report template on GitHub asks for the diagnostics.
Also
- The drawn radio buttons - in the Manage dialog and the create form - are round
again, with the dot in the middle. The shared field padding had been stretching
them into a pill and pushing the dot into a corner. - The README says why the panel cannot be bound to another address.
- CI runs the test suite on Linux as well as Windows.
Built from 42413f429aa5 on 2026-09-02T23:05:14.738Z.
v0.9.0 — Every server, not just Paper
Every server, not just Paper
Add a server now offers nine kinds of software, and each one runs under the
same daemon, console, backups and scheduler as before. Pick it from the
Software list, or name it from a terminal: mcctl new smp --purpur 26.2.
New kinds
- Purpur — a Paper fork with more configuration. Downloaded from
purpurmc.org, md5-verified. - Folia — Paper with regionised multithreading. From PaperMC, alongside
Paper. Only plugins built for Folia will load, and the Plugins tab searches
for exactly those. - Advanced Slime Paper — Paper with Slime World Manager built in, from
InfernalSuite's build list, sha256-verified. - Vanilla — Mojang's own server, unmodified, from the launcher manifest.
It loads no plugins and no mods, and the Plugins tab says so instead of
offering downloads into a folder the server never reads. - Spigot and CraftBukkit — SpigotMC publishes no jars, so these are
compiled on your machine by SpigotMC's own BuildTools. It needs a JDK
(checked for before the wait, not after), fetches a portable git for itself,
and takes a few minutes the first time for a version; the panel narrates the
build line by line. About a gigabyte of clones stays under the jar store so
later builds are faster.
Paper, Fabric and NeoForge are unchanged. --build <n> picks a specific build
for the sources that number them.
Follows the software
- The Plugins tab searches Modrinth with the right loader for each kind:
Purpur finds Purpur, Paper, Spigot and Bukkit builds; Spigot finds Spigot
and Bukkit only, because a plugin that needs Paper's API will not load there.
Hangar is offered where it makes sense. - Adding an existing server recognises Purpur, Folia, Spigot, CraftBukkit and
vanilla from the jar's name.
Also
- Java 25. Minecraft 26.x needs Java 25 and the Java check now says so;
it previously called 21 current and pointed the download link at it. 1.21.x
still runs on 21, and the check still says that too. upgradestill knows Paper only. Other kinds move versions by creating a
new server or importing a newer jar.
Built from 2832a271b50b on 2026-09-02T01:05:31.001Z.