Repository navigation
Releases: TechTeaStudio/HyperionMinecraftLauncher
Release list
v0.32.31
[0.32.31] - 2026-09-22
Fixed
- Every locale now has every UI string; nothing falls back to English any more. Added the dedicated-server console strings (header, command placeholder, Send, Status) to all 13 locales, and the skin browser, CurseForge onboarding dialog, CurseForge settings / Mods-page connect prompt and game-log tooltip (31 strings) to it, ko, nl, pl, tr and uk. Brand names,
{0}placeholders, Minecraft console commands and the API-key mask are kept verbatim. - Removed an em-dash from the Russian Force-offline tooltip.
Full Changelog: v0.32.22...v0.32.31
v0.32.22
[0.32.22] - 2026-05-26
Changed
- Release page body now contains only the current version's CHANGELOG section plus GitHub's auto-generated "What's Changed" block (PR list since the previous tag + new contributors + diff link), instead of the entire CHANGELOG.md verbatim. The
release.ymlworkflow extracts the matching## [version]block via an awk pass and writes it torelease_body.md, then passesbody_path: release_body.md+generate_release_notes: truetosoftprops/action-gh-release. Past releases (v0.32.21 and earlier) still carry the dump; future tags pull only their own section.
Full Changelog: v0.32.21...v0.32.22
v0.32.21
Changelog
All notable changes to this project are documented here.
Format is based on Keep a Changelog and the project adheres to Semantic Versioning.
[0.32.20] - 2026-05-26
Cumulative release covering twenty iterations on top of v0.31.0's localization wave. Highlights: the skin browser is now pluggable (MineSkin v2 replaces the retired NameMC scraper), Force-offline developer mode lands with full localization, the macOS release pipeline ships real .app + .dmg bundles for both architectures, a one-click Windows build drops a single self-extracting .exe at the repo root, dependabot is muzzled into grouped monthly PRs with auto-merge, and Linux CI is green again after a SkiaSharp native-package pin. First GitHub Release.
Added
- One-click Windows build:
build.cmdat the repo root +scripts/build-release.ps1. ProducesHyperionMinecraftLauncher.exe(~110 MB self-extracting single-file withIncludeNativeLibrariesForSelfExtract=true) plusoutputs/HyperionMinecraftLauncher-<ver>-win-x64.zipbyte-for-byte equivalent to the CI artefact. - Force-offline developer toggle in Settings (Launcher preferences). When ON, every Play routes through
AuthMode.Offlineregardless of any cached Microsoft session. Adds a TEST-MODE badge next to the Username row. Backed byLauncherSettings.ForceOfflineModewith JSON round-trip tests, localized into all 14 shipped locales. - MultiMC instance import: parses
instance.cfg+mmc-pack.jsonfrom a MultiMC pack.zipor instance folder, materialises a Hyperion instance with the right loader pinned. - Skin browser pivoted from NameMC (Cloudflare-blocked scraper, now retired) to MineSkin v2 API. Pagination (Prev/Next), Enter-to-search, minifigure-card previews, subtle card backgrounds, dynamic panel.
- Hybrid nickname-to-Mojang skin search: an exact-match query against a live player resolves via the Mojang profile API and is labelled as a live-player hit, not a community skin.
- System-JDK probe preferred over Adoptium download: probes
JAVA_HOMEandPATHfor a major-version match before falling back to the managed Temurin cache, saving the ~180 MB cold download when the user already has the right JRE. - macOS release pipeline ships real
.app+.dmgfor both osx-x64 and osx-arm64 viascripts/build-macos-app.sh+scripts/build-macos-dmg.sh. Bundles carry properInfo.plist,AppIcon.icnsgenerated from the repo icon viasips+iconutil, and resx satellite assemblies underContents/Resources/Localization/. - Dependabot auto-merge workflow (
.github/workflows/dependabot-auto-merge.yml). Non-major dependabot PRs squash-merge viagh pr merge --autoonce branch-protection status checks turn green. Major bumps still require manual review.
Changed
- Account flyout binds to the real per-account skin head face (fetched + cached on first paint), replacing the universal Steve placeholder.
- Skin viewer rotates the full body on drag (was head-only), with proper pitch/yaw accumulation. Back-view supported.
- CurseForge errors are now friendly: 401, 403, 429 surface "Your CF API key is missing/wrong/rate-limited" instead of the raw
HttpRequestException. - Edit instance dialog: height 760, scrollable, icon panel centered with WrapPanel. Previously clipped on smaller screens.
MainViewModel.IsSignedInOnlinenow also honors the Force-offline toggle, so the Username textbox unlocks and skin-write commands disable even when a Microsoft session is cached.- Dependabot tamed: six NuGet groups (Avalonia / Microsoft.Extensions / auth-stack / SkiaSharp / test-stack / other),
open-pull-requests-limit: 3for NuGet and1for GitHub Actions, monthly schedule, ignore-list for cosmetic semver-minor/major bumps on the canonicalactions/*stack. Security CVE bumps still flow unthrottled. - GitHub Actions bumped to
@v5across both workflows (checkout, setup-dotnet, upload-artifact, download-artifact). Silences the Node.js 20 deprecation warning. - CLI mode logger switched from the legacy
FileLauncherLoggertoSerilogLauncherLogger(same CLEF-format JSON, same log directory). Removes the obsolete-API warning atProgram.cs:28. - Release CI flatten step now includes
*.dmgalongside*.zip,*.AppImage,*.tar.gz, so macOS installers actually reach the GitHub Releases page (previously they uploaded as workflow artefacts but were dropped at the release attach step).
Fixed
- macOS release zip used to bundle a raw self-contained publish tree instead of a real
.appbundle, so Finder refused to treat the artefact as an application. Now wraps each.appproduced bybuild-macos-app.shin a Gatekeeper-friendly ZIP, plus a.dmgwith the standard drag-to-/Applicationssymlink. - Ubuntu CI was red because of a SkiaSharp version conflict:
SkiaSharp 3.119.2(managed) vsSkiaSharp.NativeAssets.Linux 2.88.9(transitive viaMinecraftSkinRender->Avalonia.Skia). The 2.88.9 native was winning the deploy race forruntimes/linux-x64/native/libSkiaSharp.so. PinnedSkiaSharp.NativeAssets.Linux 3.119.2as a direct reference so it overrides the transitive 2.88.9. AddedLD_LIBRARY_PATHto the Ubuntu test step as defence-in-depth againstdlopenfalling through to the system/usr/lib/libSkiaSharp.so.88. FileLauncherLoggerTests.DefaultLogDirectory_Resolve_EndsWithHyperionLogswas hardcoded to the Windows tail<App>\logsand failed on Linux + macOS where the canonical layout is~/Library/Logs/<App>(macOS) and~/.local/state/<App>(Linux, XDG). Test now branches per-OS.- MineSkin v2 returned 400 on page sizes above the anonymous API ceiling. Now capped at 128.
- Chromeless-window edge resize regressed when the brand icon was first wired in. Restored.
- Skin-browser pagination panel collapsed on narrow viewports. Now stays visible and adapts.
- 3D head defaulted to a 45-degree-rotated face rather than the canonical face-on view. Body cache also resets between skin loads so old textures stop bleeding through.
- CurseForge API key validation test had an off-by-one key length.
Notes
- 603 unit tests passing (was 602 at v0.31.0). CI green on Windows + macOS + Ubuntu.
Tmds.DBus.Protocol 0.20.0has a known high-severity advisory (NU1903); the vulnerable transitive comes fromAvalonia 11.2.3and a fix is expected once Avalonia bumps. Not exploitable in the launcher's usage (no DBus IPC).- The
Strings.ShowGameLogTooltipresx key is still missing from seven locales (ja,ko,nl,pl,tr,uk,it); they cascade to English. Tracked for a future localization pass.
[0.31.0] - 2026-05-18
Sixth wave of the v0.26 -> v0.31 parallel-agent sprint: full UI localization. The English source Strings.resx lives at src/HyperionMinecraftLauncher.App/Localization/; 7 translations ship alongside it for a total of 8 locales.
Added
Core/Localization/ILocalizationService+ResxLocalizationServicewrapping the standardResourceManagerfamily. Exposesthis[key],Get(key, args),CurrentCulture,SetCultureAsync,LanguageChangedevent,AvailableCultures.LauncherSettings.Locale(string?, default null = "use OS culture") persisted through the existing settings store.- Settings page: "Language" card with a dropdown bound to
AvailableLocales. First entry is "Use system default" (null). - 289 user-facing strings extracted from MainWindow.axaml and every dialog into
Strings.resx. Pattern:{x:Static loc:Strings.Section_Key}. - New translations (each ~289 entries, full UI parity with English source):
Strings.ru.resxRussianStrings.es.resxSpanish (neutral)Strings.pt-BR.resxBrazilian PortugueseStrings.de.resxGerman (informal "du")Strings.fr.resxFrench (informal "tu", non-breaking space before colons)Strings.zh-Hans.resxSimplified ChineseStrings.ja.resxJapanese (です・ます polite plain)
Localization/README.mdcontributor doc explaining where new strings go and how to add a culture.
Changed
- Test fixtures in
MainViewModelTestsforceCurrentUICulture = enso log-text assertions stay deterministic on non-English dev machines.
[0.30.0] - 2026-05-18
Fifth wave: closing the Prism / MultiMC feature gap. Seven parallel agents shipped concurrent features.
Added
- Mod-loader installer (T21a).
IModLoaderInstaller+CmlLibModLoaderInstallerdispatcher honours Fabric / Quilt (fromCmlLib.Coredirectly), Forge (CmlLib.Core.Installer.Forge), and NeoForge (CmlLib.Core.Installer.NeoForge).IModLoaderVersionFetcherpopulates the dropdown on the New Instance dialog when a non-Vanilla chip is picked. On launch, the install runs before CmlLib's regular version install and substitutes the modded version-id into theLaunchRequest. - Per-instance overrides (T21b). New
EditInstanceDialog.axamlwith General (Name + icon picker) and Java & memory (Min/Max RAM sliders, JVM args, game directory + Browse, window resolution NumericUpDowns) tabs.InstanceLaunchSettings.Merge(Instance, LauncherSettings)resolves per-instance > global; empty / 0 fields mean "inherit". Context-menu entry "Edit instance..." with the 3-layer auto-imported guard. - Crash report parser (T21c).
MinecraftCrashReportParserrecognises both Forge pipe-table and Fabric hyphen-list mod blocks, ranks suspect mods by stacktrace frame, and surfaces Modrinth + CurseForge search URLs. New "Crashes" tab on instance detail with a per-suspect Modrinth / CurseForge button strip and an "Open folder" shortcut. - Modpack import (T21d).
IModpackImporterwithModrinthModpackImporter(.mrpack) andCurseForgeModpackImporter(.zip). Auto-detects format. Copiesoverrides/tree, downloads eachfiles[]entry, lays out a freshInstanceunderLOCALAPPDATA/instances/{newId}/. UI: "Import modpack..." button on the Installations row + progress strip. - Instance export / import (T21e...