Skip to content

Releases: EJTP/UnifiedMC

v0.1.15

Choose a tag to compare

@EJTP EJTP released this 04 Sep 18:25

The Linux window draws again

On a machine with recent graphics drivers the launcher opened a white rectangle and stayed
there. Nothing was wrong with the launcher: WebKitGTK 2.42 and newer hand their rendering to
the driver over DMA-BUF, and drivers that no longer serve that path leave the page blank —
or, if you tried to work around it with software rendering, refuse the display outright with
Could not create default EGL display: EGL_BAD_PARAMETER.

The launcher now asks for the fallback renderer on Linux before the window is created. It is
the same UI at the same speed; nothing here was leaning on the GPU. Only when you have not set
WEBKIT_DISABLE_DMABUF_RENDERER yourself — an explicit setting in your environment still wins.

Windows and macOS are unchanged.

v0.1.14

Choose a tag to compare

@EJTP EJTP released this 31 Aug 01:11

Nothing is deleted because you clicked once

The trash icon on a hosted server took a whole installation off the disk — world, mods,
configuration — with one click, from a button that only appears once your cursor is already
over the row. There was no question and no undo. It asks now, in a native dialog, and it names
what is about to go.

The same question guards removing an instance. Saved servers keep no prompt on purpose: that
one forgets a name and an address, and a dialog in front of a ten-second mistake is how people
learn to click through the two that matter.

Text you can actually read

Muted text was painted as a fraction of one colour — the address under a server name at 60% of
it, a playtime at 70%, the separator between them at 40%. Measured against a card that lands at
2.8:1, 3.3:1 and 1.9:1, where readable text owes 4.5:1. The base colour was not innocent either:
on the plum and slate backdrops it failed at full strength.

There are two colours now instead of six fractions of one, both measured against all four
backdrops, and check-contrast.mjs fails the build if either stops clearing the threshold.

A focus ring you can see

Every focusable control drew its ring at half the accent colour: 1.7:1 against a card, where a
focus indicator owes 3:1. At full strength most accents still missed it, and indigo was not
close. The ring is now mixed lighter than the accent it comes from, so it still reads as your
accent — custom colours included — and clears the threshold on every backdrop.

State that survives colour blindness

A server's state lived in a 3px coloured stripe down the left edge of its row. Green against
red is the one distinction a fair share of players cannot make, and the label under it was
readable only by a screen reader. Each state now carries its own glyph — a check, a question
mark, a cross, a spinner — in one fixed slot, so a ready row and an unreachable one still line
their Play buttons up.

A long download can be stopped

An install took the whole window and left you minimise or kill as the only ways out. There is a
Cancel button now. It stops between files rather than mid-file, so a cancelled sync leaves the
mods directory exactly as your last launch left it and resumes for free next time.

Minecraft's own assets are the exception, and the button says so while they are downloading:
that installer verifies nothing it has already written, so interrupting it would leave a
truncated jar that every later run believes is fine. It finishes that phase, then stops.

Also

  • Ctrl+F jumps to the filter, Escape clears it, Ctrl+, opens Settings. On macOS, Cmd.
    None of them fire while a dialog or an install is on screen.
  • The update-dismiss cross and the settings gear were 14 and 19 pixels of clickable area, next
    to buttons of 38. They are targets now; the icons in them did not change size.
  • The window tells a screen reader which language it is in, and follows when you change it.

v0.1.13

Choose a tag to compare

@EJTP EJTP released this 28 Aug 17:24

Java is no longer something you have to install first

Hosting a server needs a JVM, and which one is not up to you: Minecraft 1.17 will not start
below Java 17, and 1.20.5 will not start below 21. The launcher only ever had a runtime because
the game had downloaded one to play with — so hosting a version you had never played found
nothing, and hosting one whose floor was above whatever java happened to be on your PATH was
worse than nothing. That server started and died on the first class it loaded, with an
UnsupportedClassVersionError in the console and no reading of it as "wrong Java".

The launcher now fetches the runtime itself, from the same Mojang index the game's own
installer reads, into the same place — so a JRE pulled for a server costs nothing the next time
you play that version. It is built beside its real name and moved into place only once every
file has arrived: half a runtime looks installed and then dies on the first class it cannot
find.

And it asks a JVM what it is before running anything on it. A Java below the floor is now a
sentence saying so, before a server is started rather than after it has already crashed.

A Java of your own, when you want one

Settings → Java takes a path to a java binary. Leave it empty and nothing changes — the
launcher decides, as it now can. Name one and it overrules everything, for hosted servers only;
the game brings its own runtime and always has.

A path you set yourself is never quietly worked around. If it will not run, or it is below what
the version needs, that is what the error says — a setting that silently does nothing is worse
than no setting at all.

Fixed

  • Every dialog could be scrolled sideways. overflow-y: auto makes the other axis
    scrollable too, whether or not anything is out there. Both axes are stated now, in the shared
    dialog and in each scrolling body.
  • The first colour in a row lost half its ring when it was the selected one. A scrolling box
    clips at its own edge, and the ring a selected swatch wears is painted outside the swatch.
    Flush left, there was nowhere for it to go. The accent row and the backdrop row both.
  • A hosted server no longer trusts the Java path written down when it was made. That path can be
    deleted, or you can point at a different one since — both are now fixed by starting it again
    rather than by building the server a second time.

Downloads

Windows .msi, or the -setup.exe to double-click
macOS one universal .dmg — Intel and Apple Silicon, same file
Linux .AppImage, .deb or .rpm

On 0.1.9 or later, the launcher will offer this one itself.

The macOS build is not signed by Apple — first open needs right-click → Open, or
xattr -dr com.apple.quarantine /Applications/UnifiedMC.app.

v0.1.12

Choose a tag to compare

@EJTP EJTP released this 28 Aug 14:45

A dropped download no longer ends the launch

A pack is hundreds of files pulled from one server over one connection. If any single one of
them ended early — "end of file before message length reached" — the whole launch stopped
there. At any real failure rate that is a launcher that fails more often than it works, and it
only ever took one unlucky file out of two hundred.

Each file now gets four attempts with a widening wait. It tries again for anything that is not
the server's own answer: a reset connection, a body that ended before its stated length, and
the hash mismatch that a truncated body produces. A 404 still fails at once, because it will
say the same thing next time.

Nothing broken was ever stored — the hash was already checked before a file was kept. It just
had nothing to fall back on.

The changelog reads like a changelog

Release notes are markdown, and this dialog was showing them raw: |---|---| rules, ## and
** and all. They are parsed now — headings, bullets, inline code, and tables drawn as
columns instead of pipes.

Still never rendered as HTML. The text is written on GitHub, so it is parsed into words and
flags, and this window draws them itself. A heading is large because it is drawn large, not
because a tag arrived.

Fixed

  • The update dialog could scroll sideways. Its own release notes did it: a table row and a
    long command with no way to break. Guarded on the notes and on every dialog.
  • The dialog audit that was meant to catch that only checked five of the nine dialogs, quietly
    reported OK for any that failed to open, and tested itself against a one-line changelog
    no real release would ever send. It checks all of them now, and fails when one will not open.

Downloads

Windows .msi, or the -setup.exe to double-click
macOS one universal .dmg — Intel and Apple Silicon, same file
Linux .AppImage, .deb or .rpm

On 0.1.9 or later, the launcher will offer this one itself.

The macOS build is not signed by Apple — first open needs right-click → Open, or
xattr -dr com.apple.quarantine /Applications/UnifiedMC.app.

v0.1.11

Choose a tag to compare

@EJTP EJTP released this 28 Aug 12:32

Make it yours

The theme has two axes now, because they answer different questions.

Accent — the six presets, plus two colour pickers for a pair of your own. Picking a colour
is what selects it; there is no custom mode to switch into first.

Backdrop — what everything is drawn on: Midnight, Slate, True black for an OLED panel,
and Plum. Each swaps every surface at once, so cards and borders never belong to the old one.

Both apply the moment you click, and go back if you cancel.

Buttons you can read

Five of the six action colours could not hold their own white labels — the worst at 2.15:1,
on the Play button, which is the most pressed control in the launcher. They were picked to be
loud rather than readable. All darkened to clear 4.5:1, and CI now refuses a palette that
cannot. The Play button is a slightly deeper rose than it was; that is the fix, not a drift.

Pick your own colours and the launcher will tell you if white stops being legible on them.
It says so rather than refusing — it is your window.

Dialogs stop scrolling sideways

Two more of these, found by an audit that opens every dialog at the smallest window size in
both languages rather than waiting for someone to report one:

  • Settings bought a scrollbar gutter with a negative margin, which made the tab body wider
    than the box holding it.
  • Skin had a file input that could not shrink, so the native "no file chosen" text pushed
    the dialog past its own width — only in German, where that string is longer.

Guarded where every dialog goes through, so a new one cannot reintroduce it.

Fixed

  • The update badge waited on nothing. A release is tagged minutes before its manifest is
    uploaded, and in that window the badge offered an update that could only fail to install.
    It now checks that the manifest is up, is for that version, and has a build for your
    platform — so if one platform's build fails, nobody on it is offered a broken update.

Downloads

Windows .msi, or the -setup.exe to double-click
macOS one universal .dmg — Intel and Apple Silicon, same file
Linux .AppImage, .deb or .rpm

On 0.1.9 or 0.1.10, the launcher will offer this one itself.

The macOS build is not signed by Apple — first open needs right-click → Open, or
xattr -dr com.apple.quarantine /Applications/UnifiedMC.app.

v0.1.10

Choose a tag to compare

@EJTP EJTP released this 28 Aug 11:34

The head is a head now

The 3D player head in the sidebar draws for real. In 0.1.9 it was built from CSS 3D boxes,
which worked in every browser it was tested in and not in the one that matters: a Tauri
AppImage ships its own WebKit, and that engine flattens transform-style: preserve-3d.
Flattened, a face turned ninety degrees collapses to a horizontal sliver — a strip of pixels
where a head should be.

It is drawn on a canvas now. The cube is projected directly, so nothing depends on the browser
compositing in 3D, and the same picture appears on all three platforms. Your skin's overlay
layer is on it, so hats, hair and helmets show.

It follows your cursor anywhere in the window, eases rather than snaps, and sways gently when
nothing has moved for a few seconds. It never tips past level — the underside of a skin is the
one face nobody textures, and it was not meant to be looked at.

Fixed

  • Dialogs scrolled sideways. Dialog.Footer bleeds to the dialog's edges with a negative
    margin, which only works as a direct child of the content box; nested inside a form it
    rendered wider than its own parent. Affected New server, Add server and Create instance —
    worst in German, where the strings are longer.
  • Set up server had no scroll area, so on a short window the loader picker sat behind the
    footer with no way to reach it.
  • The launcher now says what the skin request returned, so a head that will not draw can be
    told apart from a head that drew nothing.

Updating

If you are on 0.1.9, the launcher will offer this one itself — press the pill in the title bar
and then Update now. This is the first release the in-app updater carries.

Downloads

Windows .msi, or the -setup.exe to double-click
macOS one universal .dmg — Intel and Apple Silicon, same file
Linux .AppImage, .deb or .rpm

The macOS build is not signed by Apple — first open needs right-click → Open, or
xattr -dr com.apple.quarantine /Applications/UnifiedMC.app.

v0.1.9

Choose a tag to compare

@EJTP EJTP released this 28 Aug 10:10

The launcher updates itself now

The pill in the title bar opens the release notes and an Update now button that fetches the
new version, writes it over the running one and restarts into it. No more downloading an
installer by hand.

Nothing installs unsigned: each platform's build signs its own updater artifact, and the
launcher verifies what it downloads against a public key compiled into the binary. A build
signed with anything else is refused rather than installed.

This is the version the chain starts at. 0.1.8 shipped before the updater existed, so it
cannot update itself — install this one by hand, and every version after it arrives on its own.

A head worth looking at

The face in the sidebar is a cube now, with your skin's overlay layer over it — so hats, hair
and helmets render instead of being cropped away. It turns to follow the pointer. Six textured
quads and no 3D library.

Skin pixels are snapped to whole screen pixels, because a fractional grid is what made
nearest-neighbour look smoothed.

Fixed

  • The Set up server dialog had no scroll area, so on a short window the mod loader picker
    and any error sat behind the footer with no way to reach them.
  • Two build failures that only ever showed up on macOS: the bundler aborting on the second
    binary this crate builds, and codesigning being handed a certificate that was not there.

Downloads

Windows .msi, or the -setup.exe to double-click
macOS one universal .dmg — Intel and Apple Silicon, same file
Linux .AppImage, .deb or .rpm

The .sig files and latest.json are what the in-app updater reads; you do not need to
download those.

The macOS build is not signed by Apple — first open needs right-click → Open, or
xattr -dr com.apple.quarantine /Applications/UnifiedMC.app.

v0.1.8

Choose a tag to compare

@EJTP EJTP released this 27 Aug 22:51

Run a server from the launcher

A third tab builds one on this machine and runs it. Drop in a .mrpack or a CurseForge zip, or
pick a version and a loader for a bare server. Java is not a prerequisite — the JRE Mojang
publishes per version is already on disk from playing, and the server runs on the same one.

Let anyone join without installing mods puts the publisher mod in place, so a friend with an
empty mods folder types the address and is in — the server hands them the pack first.

Live console with a command box, the player list read out of it, and a folder button. Closing
the launcher stops what it started and waits for the worlds to save.

The mod browser, reworked

Two tabs instead of three. "Here" merges what the server ships with what you added yourself —
whether something can be removed is a property of the row, not of which tab you found it on.
Every row has its own Install or Remove button; there is no selection mode, so a highlight can
no longer mean "install" on one tab and "delete" on another.

Rows now say who wrote it, which build, where it came from and how many downloads, and link out
to the project page. Catalogue searches can be ordered by best match, downloads, followers,
recently updated or newest.

Playtime

Every launch is timed. Servers and instances carry their total and when they were last played,
the lists sort most-recent-first, and the sidebar keeps a running fortnight with a trend.

Elsewhere

  • Six accents — buttons, focus rings, chips and the glow behind the window all follow.
  • The launcher says when a newer release is out.
  • CurseForge packs actually resolve now; the API key was only ever used for a guard.
  • Number fields got a stepper instead of the browser's spin buttons.
  • Fixed: the generated start.sh carried the absolute path of the launcher's private JRE, so a
    server directory copied to another machine named a java that was not there.

Downloads

Windows .msi, or the -setup.exe to double-click
macOS one universal .dmg — Intel and Apple Silicon, same file
Linux .AppImage, .deb or .rpm

The macOS build is not signed — there is no Apple Developer ID behind this project yet, so
the first open needs right-click → Open, or xattr -dr com.apple.quarantine /Applications/UnifiedMC.app.