Skip to content

Releases: joogiebear/mcctl

v0.11.2 — Click the name instead of typing it

Choose a tag to compare

@joogiebear joogiebear released this 04 Sep 00:46
Immutable release. Only release title and notes can be modified.
6712711

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

Choose a tag to compare

@joogiebear joogiebear released this 04 Sep 00:37
Immutable release. Only release title and notes can be modified.
924e45d

A slow Java is not a missing Java

Java

  • A java -version that 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

Choose a tag to compare

@joogiebear joogiebear released this 04 Sep 00:21
Immutable release. Only release title and notes can be modified.
d500512

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 .log file 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 in run/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
    survival was 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

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

Choose a tag to compare

@joogiebear joogiebear released this 03 Sep 02:59
Immutable release. Only release title and notes can be modified.
b12f1d0

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-2 if 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 and label=off clears it, and
    mcctl status reports 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 main merges on green CI.

Built from b12f1d02d51f on 2026-09-03T02:59:03.217Z.

v0.10.1-beta.1 — Call a server anything

Choose a tag to compare

@joogiebear joogiebear released this 03 Sep 02:55
Immutable release. Only release title and notes can be modified.

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-2 if 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 and label=off clears 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

Choose a tag to compare

@joogiebear joogiebear released this 03 Sep 01:52
f49b1d2

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

Choose a tag to compare

@joogiebear joogiebear released this 03 Sep 01:15

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

Pre-release

Choose a tag to compare

@joogiebear joogiebear released this 03 Sep 01:02

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

Choose a tag to compare

@joogiebear joogiebear released this 02 Sep 23:06

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 a JAVA_TOOL_OPTIONS notice 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
    with spawn java ENOENT in 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 plain java; mcctl start --force overrides.
  • mcctl doctor and 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.log records 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

Choose a tag to compare

@joogiebear joogiebear released this 02 Sep 01:06

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.
  • upgrade still 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.